From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (qmail 22729 invoked from network); 14 Nov 2022 14:18:07 -0000 Received: from localhost (HELO inbox.vuxu.org) (::1) by localhost with ESMTPUTF8; 14 Nov 2022 14:18:07 -0000 Content-Type: multipart/mixed; boundary="===============7639165932028404388==" MIME-Version: 1.0 Subject: =?utf8?b?UmU6IFtQUiBQQVRDSF0gW1VwZGF0ZWRdIG1wdi0wLjM1LjA=?= To: ml@inbox.vuxu.org From: abenson Reply-to: ml@inbox.vuxu.org In-Reply-To: References: Date: Mon, 14 Nov 2022 15:18:07 +0100 List-Id: Message-ID: <20221114141807.p8wn1by6fVlkd2ZNNVHby8ao4XikB5Odc2troYuH7ow@z> GitHub notification mails are now in MIME to allow UTF8. --===============7639165932028404388== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYW4gdXBkYXRlZCBwdWxsIHJlcXVlc3QgYnkgYWJlbnNvbiBhZ2FpbnN0IG1hc3Rl ciBvbiB0aGUgdm9pZC1wYWNrYWdlcyByZXBvc2l0b3J5CgpodHRwczovL2dpdGh1Yi5jb20vYWJl bnNvbi92b2lkLXBhY2thZ2VzIG1wdl8wLjM1LjAKaHR0cHM6Ly9naXRodWIuY29tL3ZvaWQtbGlu dXgvdm9pZC1wYWNrYWdlcy9wdWxsLzQwNDk3CgptcHYtMC4zNS4wCiMjIyMgVGVzdGluZyB0aGUg Y2hhbmdlcw0KLSBJIHRlc3RlZCB0aGUgY2hhbmdlcyBpbiB0aGlzIFBSOiAqKmJyaWVmbHkqKg0K DQojIyMjIExvY2FsIGJ1aWxkIHRlc3RpbmcNCi0gSSBidWlsdCB0aGlzIFBSIGxvY2FsbHkgZm9y IG15IG5hdGl2ZSBhcmNoaXRlY3R1cmUsIHg4Ni02NA0KDQpbY2kgc2tpcF0KCkEgcGF0Y2ggZmls ZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4L3ZvaWQtcGFja2FnZXMvcHVsbC80 MDQ5Ny5wYXRjaCBpcyBhdHRhY2hlZA== --===============7639165932028404388== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-mpv_0.35.0-40497.patch" RnJvbSA4NTk4M2NhOGUxYTA0NjU4MTYwNzY5MjM5NTk5ZDQwODEzMTUwNDBiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgQmVuc29uIDxhYmVuc29uK3ZvaWRAZ21haWwuY29t PgpEYXRlOiBTYXQsIDEyIE5vdiAyMDIyIDE2OjA2OjA1IC0wNjAwClN1YmplY3Q6IFtQQVRDSCAx LzhdIG1wdjogdXBkYXRlIHRvIDAuMzUuMC4KCi0tLQogY29tbW9uL3NobGlicyAgICAgICAgfCAg MiArLQogc3JjcGtncy9tcHYvdGVtcGxhdGUgfCA1NyArKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspLCAy NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb21tb24vc2hsaWJzIGIvY29tbW9uL3NobGli cwppbmRleCA0ODEyNTBkNWM5MjQuLmFhMWJiYWZiMWJiYSAxMDA2NDQKLS0tIGEvY29tbW9uL3No bGlicworKysgYi9jb21tb24vc2hsaWJzCkBAIC0yMjE0LDcgKzIyMTQsNyBAQCBsaWJycmQuc28u OCBycmR0b29sLTEuNi4wXzEKIGxpYnJyZF90aC5zby40IHJyZHRvb2wtMS40LjlfMQogbGlibW9z cXVpdHRvLnNvLjEgbGlibW9zcXVpdHRvLTEuNi4zXzUKIGxpYm1vc3F1aXR0b3BwLnNvLjEgbGli bW9zcXVpdHRvcHAtMS42LjNfNQotbGlibXB2LnNvLjEgbXB2LTAuOC4wXzIKK2xpYm1wdi5zby4y IG1wdi0wLjM1LjBfMQogbGlibWJlZHRscy5zby4xMiBtYmVkdGxzLTIuMTMuMV8xCiBsaWJtYmVk Y3J5cHRvLnNvLjMgbWJlZHRscy0yLjkuMF8xCiBsaWJtYmVkeDUwOS5zby4wIG1iZWR0bHMtMi45 LjBfMQpkaWZmIC0tZ2l0IGEvc3JjcGtncy9tcHYvdGVtcGxhdGUgYi9zcmNwa2dzL21wdi90ZW1w bGF0ZQppbmRleCBkZWQ4YzFiYmU5OGYuLjBlM2MzZWQ4ZjgxYyAxMDA2NDQKLS0tIGEvc3JjcGtn cy9tcHYvdGVtcGxhdGUKKysrIGIvc3JjcGtncy9tcHYvdGVtcGxhdGUKQEAgLTEsMTUgKzEsMjYg QEAKICMgVGVtcGxhdGUgZmlsZSBmb3IgJ21wdicKIHBrZ25hbWU9bXB2Ci12ZXJzaW9uPTAuMzQu MQotcmV2aXNpb249MgotYnVpbGRfc3R5bGU9d2FmMwotY29uZmlndXJlX2FyZ3M9Ii0tY29uZmRp cj0vZXRjL21wdiAtLWRvY2Rpcj0vdXNyL3NoYXJlL2V4YW1wbGVzL21wdgotIC0tZW5hYmxlLWNk ZGEgLS1lbmFibGUtZHZiaW4gLS1lbmFibGUtZHZkbmF2IC0tZW5hYmxlLWxpYmFyY2hpdmUKLSAt LWVuYWJsZS1saWJtcHYtc2hhcmVkIC0tZW5hYmxlLWNwbHVnaW5zICQodm9wdF9lbmFibGUgYWxz YSkgJCh2b3B0X2VuYWJsZSBjYWNhKQotICQodm9wdF9lbmFibGUgamFjaykgJCh2b3B0X2VuYWJs ZSBsY21zIGxjbXMyKSAkKHZvcHRfZW5hYmxlIGx1YSkKLSAkKHZvcHRfZW5hYmxlIG9wZW5hbCkg JCh2b3B0X2VuYWJsZSBwdWxzZWF1ZGlvIHB1bHNlKSAkKHZvcHRfZW5hYmxlIHNkbDIpCi0gJCh2 b3B0X2VuYWJsZSB2YXBvdXJzeW50aCkgJCh2b3B0X2VuYWJsZSB2ZHBhdSkgJCh2b3B0X2VuYWJs ZSB2dWxrYW4pCi0gJCh2b3B0X2VuYWJsZSB2dWxrYW4gc2hhZGVyYykgJCh2b3B0X2VuYWJsZSB3 YXlsYW5kKSAkKHZvcHRfZW5hYmxlIHgxMSkiCit2ZXJzaW9uPTAuMzUuMAorcmV2aXNpb249MQor YnVpbGRfc3R5bGU9bWVzb24KK2NvbmZpZ3VyZV9hcmdzPSItRGNkZGE9ZW5hYmxlZCAtRGR2Ymlu PWVuYWJsZWQgLURkdmRuYXY9ZW5hYmxlZAorIC1EbGlibXB2PXRydWUgLURjcGx1Z2lucz1lbmFi bGVkCisgLURhbHNhPSQodm9wdF9pZiBhbHNhIGVuYWJsZWQgZGlzYWJsZWQpCisgLURjYWNhPSQo dm9wdF9pZiBjYWNhIGVuYWJsZWQgZGlzYWJsZWQpCisgLURqYWNrPSQodm9wdF9pZiBqYWNrIGVu YWJsZWQgZGlzYWJsZWQpCisgLURsY21zMj0kKHZvcHRfaWYgbGNtcyBlbmFibGVkIGRpc2FibGVk KQorIC1EbHVhPSQodm9wdF9pZiBsdWEgZW5hYmxlZCBkaXNhYmxlZCkKKyAtRG9wZW5hbD0kKHZv cHRfaWYgb3BlbmFsIGVuYWJsZWQgZGlzYWJsZWQpCisgLURwdWxzZT0kKHZvcHRfaWYgcHVsc2Vh dWRpbyBlbmFibGVkIGRpc2FibGVkKQorIC1Ec2RsMj0kKHZvcHRfaWYgc2RsMiBlbmFibGVkIGRp c2FibGVkKQorIC1EdmFwb3Vyc3ludGg9JCh2b3B0X2lmIHZhcG91cnN5bnRoIGVuYWJsZWQgZGlz YWJsZWQpCisgLUR2ZHBhdT0kKHZvcHRfaWYgdmRwYXUgZW5hYmxlZCBkaXNhYmxlZCkKKyAtRHZ1 bGthbj0kKHZvcHRfaWYgdnVsa2FuIGVuYWJsZWQgZGlzYWJsZWQpCisgLURzaGFkZXJjPSQodm9w dF9pZiB2dWxrYW4gZW5hYmxlZCBkaXNhYmxlZCkKKyAtRHdheWxhbmQ9JCh2b3B0X2lmIHdheWxh bmQgZW5hYmxlZCBkaXNhYmxlZCkKKyAtRHgxMT0kKHZvcHRfaWYgeDExIGVuYWJsZWQgZGlzYWJs ZWQpCisgLURwaXBld2lyZT0kKHZvcHRfaWYgcGlwZXdpcmUgZW5hYmxlZCBkaXNhYmxlZCkKKyAt RHNuZGlvPSQodm9wdF9pZiBzbmRpbyBlbmFibGVkIGRpc2FibGVkKSIKIGhvc3RtYWtlZGVwZW5k cz0icGtnLWNvbmZpZyBweXRob24zLWRvY3V0aWxzICQodm9wdF9pZiB3YXlsYW5kIHdheWxhbmQt ZGV2ZWwpIgogbWFrZWRlcGVuZHM9Ik1lc2FMaWItZGV2ZWwgZmZtcGVnLWRldmVsIGhhcmZidXp6 LWRldmVsIGxpYlh2LWRldmVsCiAgbGliYXNzLWRldmVsIGxpYmJsdXJheS1kZXZlbCBsaWJjZGlv LXBhcmFub2lhLWRldmVsIGxpYmR2ZG5hdi1kZXZlbApAQCAtMTcsMTEgKzI4LDEyIEBAIG1ha2Vk ZXBlbmRzPSJNZXNhTGliLWRldmVsIGZmbXBlZy1kZXZlbCBoYXJmYnV6ei1kZXZlbCBsaWJYdi1k ZXZlbAogIGxpYmFyY2hpdmUtZGV2ZWwgJCh2b3B0X2lmIGFsc2EgYWxzYS1saWItZGV2ZWwpICQo dm9wdF9pZiBjYWNhIGxpYmNhY2EtZGV2ZWwpCiAgJCh2b3B0X2lmIGphY2sgamFjay1kZXZlbCkg JCh2b3B0X2lmIGxjbXMgbGNtczItZGV2ZWwpCiAgJCh2b3B0X2lmIGx1YSBsdWE1Mi1kZXZlbCkg JCh2b3B0X2lmIG9wZW5hbCBsaWJvcGVuYWwtZGV2ZWwpCi0gJCh2b3B0X2lmIHB1bHNlYXVkaW8g cHVsc2VhdWRpby1kZXZlbCkgJCh2b3B0X2lmIHNkbDIgU0RMMi1kZXZlbCkKLSAkKHZvcHRfaWYg dmFwb3Vyc3ludGggdmFwb3Vyc3ludGgtZGV2ZWwpICQodm9wdF9pZiB2ZHBhdSBsaWJ2ZHBhdS1k ZXZlbCkKKyAkKHZvcHRfaWYgcHVsc2VhdWRpbyBwdWxzZWF1ZGlvLWRldmVsKSAkKHZvcHRfaWYg cGlwZXdpcmUgcGlwZXdpcmUtZGV2ZWwpCisgJCh2b3B0X2lmIHNkbDIgU0RMMi1kZXZlbCkgJCh2 b3B0X2lmIHZhcG91cnN5bnRoIHZhcG91cnN5bnRoLWRldmVsKQorICQodm9wdF9pZiB2ZHBhdSBs aWJ2ZHBhdS1kZXZlbCkgJCh2b3B0X2lmIHNuZGlvIHNuZGlvLWRldmVsKQogICQodm9wdF9pZiB2 dWxrYW4gIlZ1bGthbi1IZWFkZXJzIHZ1bGthbi1sb2FkZXIgc2hhZGVyYyBsaWJwbGFjZWJvLWRl dmVsIikKICAkKHZvcHRfaWYgd2F5bGFuZCAid2F5bGFuZC1kZXZlbCB3YXlsYW5kLXByb3RvY29s cyBsaWJ4a2Jjb21tb24tZGV2ZWwiKQotICQodm9wdF9pZiB4MTEgImxpYlhTY3JuU2F2ZXItZGV2 ZWwgbGliWGluZXJhbWEtZGV2ZWwgbGliWHJhbmRyLWRldmVsIikiCisgJCh2b3B0X2lmIHgxMSAi bGliWFNjcm5TYXZlci1kZXZlbCBsaWJYaW5lcmFtYS1kZXZlbCBsaWJYcmFuZHItZGV2ZWwgbGli WHByZXNlbnQtZGV2ZWwiKSIKIGRlcGVuZHM9ImRlc2t0b3AtZmlsZS11dGlscyBoaWNvbG9yLWlj b24tdGhlbWUiCiBzaG9ydF9kZXNjPSJWaWRlbyBwbGF5ZXIgYmFzZWQgb24gTVBsYXllci9tcGxh eWVyMiIKIG1haW50YWluZXI9InRyYXZhbmtvciA8dHJhdmFua29yQHR1dGEuaW8+IgpAQCAtMjks MzAgKzQxLDIzIEBAIGxpY2Vuc2U9IkdQTC0yLjAtb3ItbGF0ZXIiCiBob21lcGFnZT0iaHR0cHM6 Ly9tcHYuaW8iCiBjaGFuZ2Vsb2c9Imh0dHBzOi8vZ2l0aHViLmNvbS9tcHYtcGxheWVyL21wdi9y ZWxlYXNlcyIKIGRpc3RmaWxlcz0iaHR0cHM6Ly9naXRodWIuY29tL21wdi1wbGF5ZXIvJHtwa2du YW1lfS9hcmNoaXZlL3Yke3ZlcnNpb259LnRhci5neiIKLWNoZWNrc3VtPTMyZGVkOGMxM2I2Mzk4 MzEwZmEyNzc2NzM3ODE5M2RjMWRiNmQ3OGIwMDZiNzBkYmNiZDMxMjNhMTQ0NWU3NDYKK2NoZWNr c3VtPWRjNDExYzg5OWE2NDU0ODI1MGMxNDJiZjFmYTFhYTc1MjhmMWI0Mzk4YTI0Yzg2YjgxNjA5 Mzk5OTA0OWVjMDAKIAogaWYgWyAiJFhCUFNfVEFSR0VUX05PX0FUT01JQzgiIF07IHRoZW4KIAlt YWtlZGVwZW5kcys9IiBsaWJhdG9taWMtZGV2ZWwiCiBmaQogCi1idWlsZF9vcHRpb25zPSJhbHNh IGNhY2EgamFjayBsY21zIGx1YSBvcGVuYWwgcHVsc2VhdWRpbyBzZGwyIHZhcG91cnN5bnRoIHZk cGF1Ci0gdnVsa2FuIHdheWxhbmQgeDExIgotYnVpbGRfb3B0aW9uc19kZWZhdWx0PSJhbHNhIGph Y2sgbGNtcyBsdWEgcHVsc2VhdWRpbyB2ZHBhdSB2dWxrYW4gd2F5bGFuZCB4MTEiCitidWlsZF9v cHRpb25zPSJhbHNhIGNhY2EgamFjayBsY21zIGx1YSBvcGVuYWwgcHVsc2VhdWRpbyBwaXBld2ly ZSBzZGwyCisgc25kaW8gdmFwb3Vyc3ludGggdmRwYXUgdnVsa2FuIHdheWxhbmQgeDExIgorYnVp bGRfb3B0aW9uc19kZWZhdWx0PSJhbHNhIGphY2sgbGNtcyBsdWEgcHVsc2VhdWRpbyBwaXBld2ly ZSB2ZHBhdSB2dWxrYW4KKyBzbmRpbyB3YXlsYW5kIHgxMSIKIGRlc2Nfb3B0aW9uX2NhY2E9IkVu YWJsZSBzdXBwb3J0IGZvciBsaWJjYWNhIHZpZGVvIG91dHB1dCIKIGRlc2Nfb3B0aW9uX2xjbXM9 IkVuYWJsZSBzdXBwb3J0IGZvciBMaXR0bGVDTVMgMiBlbmdpbmUiCiBkZXNjX29wdGlvbl9vcGVu YWw9IkVuYWJsZSBzdXBwb3J0IGZvciBPcGVuQUwgYXVkaW8gb3V0cHV0Igogdm9wdF9jb25mbGlj dCBzZGwyIHdheWxhbmQKIAotaWYgWyAteiAiJENST1NTX0JVSUxEIiBdOyB0aGVuCi0JY29uZmln dXJlX2FyZ3MrPSIgLS16c2hkaXI9L3Vzci9zaGFyZS96c2gvc2l0ZS1mdW5jdGlvbnMiCi1maQot Ci1wcmVfY29uZmlndXJlKCkgewotCXB5dGhvbjMgYm9vdHN0cmFwLnB5Ci19Ci0KIG1wdi1kZXZl bF9wYWNrYWdlKCkgewotCWRlcGVuZHM9IiR7c291cmNlcGtnfT49JHt2ZXJzaW9ufV8ke3Jldmlz aW9ufSIKKwlkZXBlbmRzPSIke3NvdXJjZXBrZ30+PSR7dmVyc2lvbn1fJHtyZXZpc2lvbn0gJHtt YWtlZGVwZW5kc30iCiAJc2hvcnRfZGVzYys9IiAtIGRldmVsb3BtZW50IGZpbGVzIgogCXBrZ19p bnN0YWxsKCkgewogCQl2bW92ZSB1c3IvaW5jbHVkZQoKRnJvbSAyMDRmZTg0MTI3YWUzZjA1ZmM0 ZDhiMTRhMTUyMWY0MWQ1MjA3MTUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRy ZXcgQmVuc29uIDxhYmVuc29uK3ZvaWRAZ21haWwuY29tPgpEYXRlOiBTYXQsIDEyIE5vdiAyMDIy IDE2OjA0OjE0IC0wNjAwClN1YmplY3Q6IFtQQVRDSCAyLzhdIGNlbGx1bG9pZDogcmVidWlsZCBm b3IgbXB2LTAuMzUuMAoKLS0tCiBzcmNwa2dzL2NlbGx1bG9pZC90ZW1wbGF0ZSB8IDIgKy0KIDEg ZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBh L3NyY3BrZ3MvY2VsbHVsb2lkL3RlbXBsYXRlIGIvc3JjcGtncy9jZWxsdWxvaWQvdGVtcGxhdGUK aW5kZXggNzM5OTExNTYyMDQ1Li45MDRmZTRmNjMxYzAgMTAwNjQ0Ci0tLSBhL3NyY3BrZ3MvY2Vs bHVsb2lkL3RlbXBsYXRlCisrKyBiL3NyY3BrZ3MvY2VsbHVsb2lkL3RlbXBsYXRlCkBAIC0xLDcg KzEsNyBAQAogIyBUZW1wbGF0ZSBmaWxlIGZvciAnY2VsbHVsb2lkJwogcGtnbmFtZT1jZWxsdWxv aWQKIHZlcnNpb249MC4yMwotcmV2aXNpb249MQorcmV2aXNpb249MgogYnVpbGRfc3R5bGU9bWVz b24KIGhvc3RtYWtlZGVwZW5kcz0iZ2V0dGV4dCBnbGliLWRldmVsIHBrZy1jb25maWciCiBtYWtl ZGVwZW5kcz0iZ3RrNC1kZXZlbCBsaWJlcG94eS1kZXZlbCBsaWJnbGliLWRldmVsIG1wdi1kZXZl bCIKCkZyb20gZWY3MzJlNmIwNTY1NjI0NDIyYzMzYWVmNTk1NDdmYjc0M2Q0MWIzNSBNb24gU2Vw IDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogQW5kcmV3IEJlbnNvbiA8YWJlbnNvbit2b2lkQGdtYWls LmNvbT4KRGF0ZTogU2F0LCAxMiBOb3YgMjAyMiAxNjowNDoxNCAtMDYwMApTdWJqZWN0OiBbUEFU Q0ggMy84XSBtaW5pdHViZTogcmVidWlsZCBmb3IgbXB2LTAuMzUuMAoKLS0tCiBzcmNwa2dzL21p bml0dWJlL3BhdGNoZXMvbXB2LTAuMzUucGF0Y2ggfCAxNCArKysrKysrKysrKysrKwogc3JjcGtn cy9taW5pdHViZS90ZW1wbGF0ZSAgICAgICAgICAgICAgIHwgIDIgKy0KIDIgZmlsZXMgY2hhbmdl ZCwgMTUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNy Y3BrZ3MvbWluaXR1YmUvcGF0Y2hlcy9tcHYtMC4zNS5wYXRjaAoKZGlmZiAtLWdpdCBhL3NyY3Br Z3MvbWluaXR1YmUvcGF0Y2hlcy9tcHYtMC4zNS5wYXRjaCBiL3NyY3BrZ3MvbWluaXR1YmUvcGF0 Y2hlcy9tcHYtMC4zNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLmRiMTNmOTA1OGY3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyY3BrZ3MvbWluaXR1YmUvcGF0 Y2hlcy9tcHYtMC4zNS5wYXRjaApAQCAtMCwwICsxLDE0IEBACitodHRwczovL2dpdGh1Yi5jb20v bXB2LXBsYXllci9tcHYvY29tbWl0LzYzMjA1OTgxNmFkZGU1MThjNjdmNjYwNmUzY2ZkZWY1YmVj MThiNTIKK0luZGV4OiBtaW5pdHViZS0zLjkuMy9saWIvbWVkaWEvc3JjL21wdi9tcHZ3aWRnZXQu Y3BwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CistLS0gbWluaXR1YmUtMy45LjMub3JpZy9saWIvbWVkaWEvc3JjL21w di9tcHZ3aWRnZXQuY3BwCisrKysgbWluaXR1YmUtMy45LjMvbGliL21lZGlhL3NyYy9tcHYvbXB2 d2lkZ2V0LmNwcAorQEAgLTMwLDcgKzMwLDcgQEAgdm9pZCBNcHZXaWRnZXQ6OmluaXRpYWxpemVH TCgpIHsKKyAgICAgcURlYnVnKCkgPDwgImluaXRpYWxpemVHTCIgPDwgbmF0aXZlUGFyZW50Owor ICAgICBpZiAobmF0aXZlUGFyZW50ID09IG51bGxwdHIpIHFGYXRhbCgiTm8gbmF0aXZlIHBhcmVu dCIpOworIAorLSAgICBtcHZfb3BlbmdsX2luaXRfcGFyYW1zIGdsX2luaXRfcGFyYW1ze2dldF9w cm9jX2FkZHJlc3MsIHRoaXMsIG51bGxwdHJ9OworKyAgICBtcHZfb3BlbmdsX2luaXRfcGFyYW1z IGdsX2luaXRfcGFyYW1ze2dldF9wcm9jX2FkZHJlc3MsIHRoaXN9OworICAgICBtcHZfcmVuZGVy X3BhcmFtIHBhcmFtc1tde3tNUFZfUkVOREVSX1BBUkFNX0FQSV9UWVBFLCAodm9pZCAqKU1QVl9S RU5ERVJfQVBJX1RZUEVfT1BFTkdMfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 TVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9pbml0X3BhcmFtc30sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge01QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRCwg bnVsbHB0cn0sCmRpZmYgLS1naXQgYS9zcmNwa2dzL21pbml0dWJlL3RlbXBsYXRlIGIvc3JjcGtn cy9taW5pdHViZS90ZW1wbGF0ZQppbmRleCA5MTU0NThhNDNhNmEuLmI0YjUwYzBmOTY5NCAxMDA2 NDQKLS0tIGEvc3JjcGtncy9taW5pdHViZS90ZW1wbGF0ZQorKysgYi9zcmNwa2dzL21pbml0dWJl L3RlbXBsYXRlCkBAIC0xLDcgKzEsNyBAQAogIyBUZW1wbGF0ZSBmaWxlIGZvciAnbWluaXR1YmUn CiBwa2duYW1lPW1pbml0dWJlCiB2ZXJzaW9uPTMuOS4zCi1yZXZpc2lvbj0xCityZXZpc2lvbj0y CiBidWlsZF9zdHlsZT1xbWFrZQogaG9zdG1ha2VkZXBlbmRzPSJxdDUtdG9vbHMgcXQ1LWhvc3Qt dG9vbHMgcXQ1LXFtYWtlIGdpdCIKIG1ha2VkZXBlbmRzPSJxdDUtZGV2ZWwgcGhvbm9uLXF0NS1k ZXZlbCBxdDUtc2NyaXB0LWRldmVsIHF0NS1kZWNsYXJhdGl2ZS1kZXZlbAoKRnJvbSA5NTE4MThm Mzg4NzU4OTQ3NTI0MWYzOTRjZWY5OWE4MmExNmRkZWViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAw MQpGcm9tOiBBbmRyZXcgQmVuc29uIDxhYmVuc29uK3ZvaWRAZ21haWwuY29tPgpEYXRlOiBTYXQs IDEyIE5vdiAyMDIyIDE2OjA0OjE0IC0wNjAwClN1YmplY3Q6IFtQQVRDSCA0LzhdIG1wYy1xdDog dXBkYXRlIHRvIDIyLjAyLgoKLS0tCiBzcmNwa2dzL21wYy1xdC90ZW1wbGF0ZSB8IDE4ICsrKyst LS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy9tcGMtcXQvdGVtcGxhdGUgYi9zcmNwa2dzL21w Yy1xdC90ZW1wbGF0ZQppbmRleCAzZTYwY2IwNmM4OTYuLjdhN2FlNmY2Y2Y5NiAxMDA2NDQKLS0t IGEvc3JjcGtncy9tcGMtcXQvdGVtcGxhdGUKKysrIGIvc3JjcGtncy9tcGMtcXQvdGVtcGxhdGUK QEAgLTEsNiArMSw2IEBACiAjIFRlbXBsYXRlIGZpbGUgZm9yICdtcGMtcXQnCiBwa2duYW1lPW1w Yy1xdAotdmVyc2lvbj0xOC4wOAordmVyc2lvbj0yMi4wMgogcmV2aXNpb249MQogYnVpbGRfc3R5 bGU9cW1ha2UKIGNvbmZpZ3VyZV9hcmdzPSJNUENRVF9WRVJTSU9OPSR7dmVyc2lvbn0iCkBAIC05 LDE2ICs5LDYgQEAgbWFrZWRlcGVuZHM9InF0NS1kZXZlbCBxdDUteDExZXh0cmFzLWRldmVsIG1w di1kZXZlbCIKIHNob3J0X2Rlc2M9IkNsb25lIG9mIE1lZGlhIFBsYXllciBDbGFzc2ljIHJlaW1w bGVtZW50ZWQgaW4gUXQiCiBtYWludGFpbmVyPSJTb2xpdHVkZVNGIDxzb2xpdHVkZXNmQHByb3Rv bm1haWwuY29tPiIKIGxpY2Vuc2U9IkdQTC0yLjAtb3ItbGF0ZXIiCi1ob21lcGFnZT0iaHR0cHM6 Ly9naXRodWIuY29tL2NtZHJrb3RvcmkvbXBjLXF0IgotI2Rpc3RmaWxlcz0iJHtob21lcGFnZX0v YXJjaGl2ZS92JHt2ZXJzaW9ufS50YXIuZ3oiCi0jIGh0dHBzOi8vZ2l0aHViLmNvbS9tcHYtcGxh eWVyL21wdi9jb21taXQvNTc1MTk3ZmY4YjBhMGQ4Y2QxNGY3ZWU3ODQ2MWMxZDYxZDA0NWQ3Mgot ZGlzdGZpbGVzPSJodHRwczovL3NvdXJjZXMudm9pZGxpbnV4Lm9yZy9tcGMtcXQtMTguMDgvdjE4 LjA4LnRhci5negotIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tcHYtcGxheWVy L21wdi8yMzM3ZmE0ZTAyMTM5OTMzOThkMzZjYjMyMjI2MzM3NjZkNjc3ZGZkL2xpYm1wdi9xdGhl bHBlci5ocHAiCi1jaGVja3N1bT0iYzU4ZmQ5MDkyNjc3M2M5ZGE4YmRmYzFhOGU0ZGJhMGI5NWNi YzU4Y2VlNmRiOTk4MWU4ZGU5NGZkOTUzNDQwNgotIDg2ZTFmY2JhNjAwMTgyOWI3ZTIzYTg1NmRi ODRkMDFlYmM3NmU2MzUyOGY3NDA2NGQ3YmM1NzA1MDE1YTI2ODQiCi1za2lwX2V4dHJhY3Rpb249 InF0aGVscGVyLmhwcCIKLQotcG9zdF9leHRyYWN0KCkgewotCW1rZGlyIC1wIG1wdgotCWNwICRY QlBTX1NSQ0RJU1RESVIvbXBjLXF0LSR2ZXJzaW9uL3F0aGVscGVyLmhwcCBtcHYvCi19Citob21l cGFnZT0iaHR0cHM6Ly9tcGMtcXQuZ2l0aHViLmlvLyIKK2Rpc3RmaWxlcz0iaHR0cHM6Ly9naXRo dWIuY29tL21wYy1xdC9tcGMtcXQvYXJjaGl2ZS9yZWZzL3RhZ3MvdiR7dmVyc2lvbn0udGFyLmd6 IgorY2hlY2tzdW09ZmE2Y2ZmZDZiZGUxMzA0YjZjMGVjM2FiYThlOThkMDNmNGQ3Mzk5OWZlZTRl NDU0NjAyNmVjMTU5NTMwMzUwZAoKRnJvbSA2ZjkwODU1NjhjNzViMDAzZjg2ZTE2NGZlZTAxMjlh YzhjYjU0OTMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgQmVuc29uIDxh YmVuc29uK3ZvaWRAZ21haWwuY29tPgpEYXRlOiBTYXQsIDEyIE5vdiAyMDIyIDE2OjA0OjE1IC0w NjAwClN1YmplY3Q6IFtQQVRDSCA1LzhdIFtUT0RPXSBvcmlvbjogcmVidWlsZCBmb3IgbXB2LTAu MzUuMAoKLS0tCiBzcmNwa2dzL29yaW9uL3RlbXBsYXRlIHwgMiArLQogMSBmaWxlIGNoYW5nZWQs IDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy9vcmlv bi90ZW1wbGF0ZSBiL3NyY3BrZ3Mvb3Jpb24vdGVtcGxhdGUKaW5kZXggZDY5ZjJmZjA0ZGQ0Li5i MWYyMjE1YjFkNDMgMTAwNjQ0Ci0tLSBhL3NyY3BrZ3Mvb3Jpb24vdGVtcGxhdGUKKysrIGIvc3Jj cGtncy9vcmlvbi90ZW1wbGF0ZQpAQCAtMSw3ICsxLDcgQEAKICMgVGVtcGxhdGUgZmlsZSBmb3Ig J29yaW9uJwogcGtnbmFtZT1vcmlvbgogdmVyc2lvbj0xLjYuNwotcmV2aXNpb249MQorcmV2aXNp b249MgogYnVpbGRfc3R5bGU9cW1ha2UKIGhvc3RtYWtlZGVwZW5kcz0icXQ1LXFtYWtlIHF0NS1o b3N0LXRvb2xzIgogbWFrZWRlcGVuZHM9InF0NS1kZWNsYXJhdGl2ZS1kZXZlbCBxdDUtcXVpY2tj b250cm9sczItZGV2ZWwgbXB2LWRldmVsIgoKRnJvbSA5NDZhYzQ0Yzc4NWNlMGE3Nzk2YmQ4MDJl YmM3NmQ5OTEyODJjMzBjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgQmVu c29uIDxhYmVuc29uK3ZvaWRAZ21haWwuY29tPgpEYXRlOiBTYXQsIDEyIE5vdiAyMDIyIDE2OjA0 OjE1IC0wNjAwClN1YmplY3Q6IFtQQVRDSCA2LzhdIHFpbWd2OiByZWJ1aWxkIGZvciBtcHYtMC4z NS4wCgotLS0KIHNyY3BrZ3MvcWltZ3YvcGF0Y2hlcy9maXgtbXB2LW9wZW5nbC5wYXRjaCB8IDEx ICsrKysrKysrKysrCiBzcmNwa2dzL3FpbWd2L3RlbXBsYXRlICAgICAgICAgICAgICAgICAgICAg fCAgMiArLQogMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjcGtncy9xaW1ndi9wYXRjaGVzL2ZpeC1tcHYtb3Blbmds LnBhdGNoCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy9xaW1ndi9wYXRjaGVzL2ZpeC1tcHYtb3Blbmds LnBhdGNoIGIvc3JjcGtncy9xaW1ndi9wYXRjaGVzL2ZpeC1tcHYtb3BlbmdsLnBhdGNoCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOWZkM2RmZmU5Zjk2Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjcGtncy9xaW1ndi9wYXRjaGVzL2ZpeC1tcHYtb3BlbmdsLnBhdGNoCkBA IC0wLDAgKzEsMTEgQEAKKy0tLSBhL3BsdWdpbnMvcGxheWVyX21wdi9zcmMvbXB2d2lkZ2V0LmNw cAorKysrIGIvcGx1Z2lucy9wbGF5ZXJfbXB2L3NyYy9tcHZ3aWRnZXQuY3BwCitAQCAtNjksNyAr NjksNyBAQAorIH0KKyAKKyB2b2lkIE1wdldpZGdldDo6aW5pdGlhbGl6ZUdMKCkgeworLSAgICBt cHZfb3BlbmdsX2luaXRfcGFyYW1zIGdsX2luaXRfcGFyYW1ze2dldF9wcm9jX2FkZHJlc3MsIG51 bGxwdHIsIG51bGxwdHJ9OworKyAgICBtcHZfb3BlbmdsX2luaXRfcGFyYW1zIGdsX2luaXRfcGFy YW1ze2dldF9wcm9jX2FkZHJlc3MsIG51bGxwdHJ9OworICAgICBtcHZfcmVuZGVyX3BhcmFtIHBh cmFtc1tdeworICAgICAgICAge01QVl9SRU5ERVJfUEFSQU1fQVBJX1RZUEUsIGNvbnN0X2Nhc3Q8 Y2hhciAqPihNUFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCl9LAorICAgICAgICAge01QVl9SRU5E RVJfUEFSQU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAmZ2xfaW5pdF9wYXJhbXN9LApkaWZmIC0tZ2l0 IGEvc3JjcGtncy9xaW1ndi90ZW1wbGF0ZSBiL3NyY3BrZ3MvcWltZ3YvdGVtcGxhdGUKaW5kZXgg YmI5MWVlOThlYWI3Li43ZWIzMGRiMzM5OTIgMTAwNjQ0Ci0tLSBhL3NyY3BrZ3MvcWltZ3YvdGVt cGxhdGUKKysrIGIvc3JjcGtncy9xaW1ndi90ZW1wbGF0ZQpAQCAtMSw3ICsxLDcgQEAKICMgVGVt cGxhdGUgZmlsZSBmb3IgJ3FpbWd2JwogcGtnbmFtZT1xaW1ndgogdmVyc2lvbj0xLjAuMgotcmV2 aXNpb249MQorcmV2aXNpb249MgogYnVpbGRfc3R5bGU9Y21ha2UKIGNvbmZpZ3VyZV9hcmdzPSIk KHZvcHRfaWYgdmlkZW8gLURWSURFT19TVVBQT1JUPU9OIC1EVklERU9fU1VQUE9SVD1PRkYpCiAg JCh2b3B0X2lmIHNjYWxlIC1ET1BFTkNWX1NVUFBPUlQ9T04gLURPUEVOQ1ZfU1VQUE9SVD1PRkYp CgpGcm9tIDlmNTVkZmY2OTlhODAyNTg5YWU2MWUzOTM1NTliNDA0NWI4MGMxZTkgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCkZyb206IEFuZHJldyBCZW5zb24gPGFiZW5zb24rdm9pZEBnbWFpbC5j b20+CkRhdGU6IFNhdCwgMTIgTm92IDIwMjIgMTY6MDQ6MTUgLTA2MDAKU3ViamVjdDogW1BBVENI IDcvOF0gdmlkY3V0dGVyOiB1cGRhdGUgdG8gNi4wLjUuMS4KCi0tLQogc3JjcGtncy92aWRjdXR0 ZXIvcGF0Y2hlcy9tcHYtMC4zNS0xLnBhdGNoIHwgNTI2NTggKysrKysrKysrKysrKysrKysrKwog c3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0yLnBhdGNoIHwgICAgMjQgKwogc3Jj cGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0zLnBhdGNoIHwgMTMyODkgKysrKysKIHNy Y3BrZ3MvdmlkY3V0dGVyL3RlbXBsYXRlICAgICAgICAgICAgICAgICB8ICAgICA2ICstCiA0IGZp bGVzIGNoYW5nZWQsIDY1OTc0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0xLnBhdGNoCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0yLnBh dGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4z NS0zLnBhdGNoCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4z NS0xLnBhdGNoIGIvc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0xLnBhdGNoCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYzMzYmFkNGE4MmJiCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjcGtncy92aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0xLnBhdGNo CkBAIC0wLDAgKzEsNTI2NTggQEAKK2h0dHBzOi8vZ2l0aHViLmNvbS9vem1hcnRpYW4vdmlkY3V0 dGVyL2NvbW1pdC8xZDg4ODI1ZmViNWE3M2E1MGQwMTk5MTRiYTlkMDAwODU2MmE1OGNlLnBhdGNo CisKK0Zyb20gMWQ4ODgyNWZlYjVhNzNhNTBkMDE5OTE0YmE5ZDAwMDg1NjJhNThjZSBNb24gU2Vw IDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBldGUgQWxleGFuZHJvdSA8cGV0ZUBvem1hcnRpYW5z LmNvbT4KK0RhdGU6IFR1ZSwgMjIgRmViIDIwMjIgMTE6Mjk6MDAgKzExMDAKK1N1YmplY3Q6IFtQ QVRDSF0gUGF0Y2hlcyB0byBweW1wdiB0byB3b3JrYXJvdW5kIG9wZW5nbF9jYiBkZXByZWNhdGlv biBmcm9tCisgbGlibXB2CisKKy0tLQorIHZpZGN1dHRlci9saWJzL3B5bXB2L2NsaWVudC5weGQg fCAgICA1NCArLQorIHZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5jICAgICAgfCA0NjM5NCArKysr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KKyB2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 ICAgIHwgICAxOTIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDIxODMyIGluc2VydGlvbnMoKyksIDI0 ODA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdmlkY3V0dGVyL2xpYnMvcHltcHYvY2xp ZW50LnB4ZCBiL3ZpZGN1dHRlci9saWJzL3B5bXB2L2NsaWVudC5weGQKK2luZGV4IGJlZmUyMTll Li5kOWE4ODE2ZiAxMDA2NDQKKy0tLSBhL3ZpZGN1dHRlci9saWJzL3B5bXB2L2NsaWVudC5weGQK KysrKyBiL3ZpZGN1dHRlci9saWJzL3B5bXB2L2NsaWVudC5weGQKK0BAIC0xMTIsOSArMTEyLDkg QEAgY2RlZiBleHRlcm4gZnJvbSAibXB2L2NsaWVudC5oIjoKKyAKKyAgICAgaW50IG1wdl9sb2Fk X2NvbmZpZ19maWxlKG1wdl9oYW5kbGUgKmN0eCwgY29uc3QgY2hhciAqZmlsZW5hbWUpIG5vZ2ls CisgCistICAgIHZvaWQgbXB2X3N1c3BlbmQobXB2X2hhbmRsZSAqY3R4KSBub2dpbAorKyAgICAj IHZvaWQgbXB2X3N1c3BlbmQobXB2X2hhbmRsZSAqY3R4KSBub2dpbAorIAorLSAgICB2b2lkIG1w dl9yZXN1bWUobXB2X2hhbmRsZSAqY3R4KSBub2dpbAorKyAgICAjIHZvaWQgbXB2X3Jlc3VtZSht cHZfaGFuZGxlICpjdHgpIG5vZ2lsCisgCisgICAgIGludDY0X3QgbXB2X2dldF90aW1lX3VzKG1w dl9oYW5kbGUgKmN0eCkgbm9naWwKKyAKK0BAIC0yMDAsMjEgKzIwMCwyMSBAQCBjZGVmIGV4dGVy biBmcm9tICJtcHYvY2xpZW50LmgiOgorICAgICAgICAgTVBWX0VWRU5UX1NUQVJUX0ZJTEUKKyAg ICAgICAgIE1QVl9FVkVOVF9FTkRfRklMRQorICAgICAgICAgTVBWX0VWRU5UX0ZJTEVfTE9BREVE CistICAgICAgICBNUFZfRVZFTlRfVFJBQ0tTX0NIQU5HRUQKKy0gICAgICAgIE1QVl9FVkVOVF9U UkFDS19TV0lUQ0hFRAorKyAgICAgICAgIyBNUFZfRVZFTlRfVFJBQ0tTX0NIQU5HRUQKKysgICAg ICAgICMgTVBWX0VWRU5UX1RSQUNLX1NXSVRDSEVECisgICAgICAgICBNUFZfRVZFTlRfSURMRQor LSAgICAgICAgTVBWX0VWRU5UX1BBVVNFCistICAgICAgICBNUFZfRVZFTlRfVU5QQVVTRQorKyAg ICAgICAgIyBNUFZfRVZFTlRfUEFVU0UKKysgICAgICAgICMgTVBWX0VWRU5UX1VOUEFVU0UKKyAg ICAgICAgIE1QVl9FVkVOVF9USUNLCistICAgICAgICBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJ U1BBVENICisrICAgICAgICAjIE1QVl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0gKKyAgICAg ICAgIE1QVl9FVkVOVF9DTElFTlRfTUVTU0FHRQorICAgICAgICAgTVBWX0VWRU5UX1ZJREVPX1JF Q09ORklHCisgICAgICAgICBNUFZfRVZFTlRfQVVESU9fUkVDT05GSUcKKy0gICAgICAgIE1QVl9F VkVOVF9NRVRBREFUQV9VUERBVEUKKysgICAgICAgICMgTVBWX0VWRU5UX01FVEFEQVRBX1VQREFU RQorICAgICAgICAgTVBWX0VWRU5UX1NFRUsKKyAgICAgICAgIE1QVl9FVkVOVF9QTEFZQkFDS19S RVNUQVJUCisgICAgICAgICBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFCistICAgICAgICBNUFZf RVZFTlRfQ0hBUFRFUl9DSEFOR0UKKysgICAgICAgICMgTVBWX0VWRU5UX0NIQVBURVJfQ0hBTkdF CisgCisgICAgIGNvbnN0IGNoYXIgKm1wdl9ldmVudF9uYW1lKG1wdl9ldmVudF9pZCBldmVudCkg bm9naWwKKyAKK0BAIC0yNDksOSArMjQ5LDkgQEAgY2RlZiBleHRlcm4gZnJvbSAibXB2L2NsaWVu dC5oIjoKKyAgICAgICAgIGludCByZWFzb24KKyAgICAgICAgIGludCBlcnJvcgorIAorLSAgICBj ZGVmIHN0cnVjdCBtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3BhdGNoOgorLSAgICAgICAgaW50 IGFyZzAKKy0gICAgICAgIGNvbnN0IGNoYXIgKnR5cGUKKysgICAgIyBjZGVmIHN0cnVjdCBtcHZf ZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3BhdGNoOgorKyAgICAjICAgICBpbnQgYXJnMAorKyAgICAj ICAgICBjb25zdCBjaGFyICp0eXBlCisgCisgICAgIGNkZWYgc3RydWN0IG1wdl9ldmVudF9jbGll bnRfbWVzc2FnZToKKyAgICAgICAgIGludCBudW1fYXJncworQEAgLTI4MiwyNyArMjgyLDI3IEBA IGNkZWYgZXh0ZXJuIGZyb20gIm1wdi9jbGllbnQuaCI6CisgCisgICAgIHZvaWQgKm1wdl9nZXRf c3ViX2FwaShtcHZfaGFuZGxlICpjdHgsIG1wdl9zdWJfYXBpIHN1Yl9hcGkpIG5vZ2lsCisgCist Y2RlZiBleHRlcm4gZnJvbSAibXB2L29wZW5nbF9jYi5oIjoKKy0gICAgc3RydWN0IG1wdl9vcGVu Z2xfY2JfY29udGV4dDoKKy0gICAgICAgIHBhc3MKKysjIGNkZWYgZXh0ZXJuIGZyb20gIm1wdi9v cGVuZ2xfY2IuaCI6CisrIyAgICAgc3RydWN0IG1wdl9vcGVuZ2xfY2JfY29udGV4dDoKKysjICAg ICAgICAgcGFzcworIAorLSAgICBjdHlwZWRlZiB2b2lkICgqbXB2X29wZW5nbF9jYl91cGRhdGVf Zm4pKHZvaWQgKmNiX2N0eCkgbm9naWwKKy0gICAgY3R5cGVkZWYgdm9pZCAqKCptcHZfb3Blbmds X2NiX2dldF9wcm9jX2FkZHJlc3NfZm4pKHZvaWQgKmZuX2N0eCwKKy0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUp IG5vZ2lsCisrIyAgICAgY3R5cGVkZWYgdm9pZCAoKm1wdl9vcGVuZ2xfY2JfdXBkYXRlX2ZuKSh2 b2lkICpjYl9jdHgpIG5vZ2lsCisrIyAgICAgY3R5cGVkZWYgdm9pZCAqKCptcHZfb3BlbmdsX2Ni X2dldF9wcm9jX2FkZHJlc3NfZm4pKHZvaWQgKmZuX2N0eCwKKysjICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSkg bm9naWwKKyAKKy0gICAgdm9pZCBtcHZfb3BlbmdsX2NiX3NldF91cGRhdGVfY2FsbGJhY2sobXB2 X29wZW5nbF9jYl9jb250ZXh0ICpjdHgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG1wdl9vcGVuZ2xfY2JfdXBkYXRlX2ZuIGNhbGxiYWNrLAorLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsYmFja19jdHgpIG5v Z2lsCisrIyAgICAgdm9pZCBtcHZfb3BlbmdsX2NiX3NldF91cGRhdGVfY2FsbGJhY2sobXB2X29w ZW5nbF9jYl9jb250ZXh0ICpjdHgsCisrIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbXB2X29wZW5nbF9jYl91cGRhdGVfZm4gY2FsbGJhY2ssCisrIyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2FsbGJhY2tfY3R4KSBu b2dpbAorIAorLSAgICBpbnQgbXB2X29wZW5nbF9jYl9pbml0X2dsKG1wdl9vcGVuZ2xfY2JfY29u dGV4dCAqY3R4LCBjb25zdCBjaGFyICpleHRzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1wdl9vcGVuZ2xfY2JfZ2V0X3Byb2NfYWRkcmVzc19mbiBnZXRfcHJvY19hZGRyZXNzLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmdldF9wcm9jX2FkZHJlc3NfY3R4 KSBub2dpbAorKyMgICAgIGludCBtcHZfb3BlbmdsX2NiX2luaXRfZ2wobXB2X29wZW5nbF9jYl9j b250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmV4dHMsCisrIyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtcHZfb3BlbmdsX2NiX2dldF9wcm9jX2FkZHJlc3NfZm4gZ2V0X3Byb2NfYWRkcmVz cywKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmdldF9wcm9jX2FkZHJl c3NfY3R4KSBub2dpbAorIAorLSAgICBpbnQgbXB2X29wZW5nbF9jYl9kcmF3KG1wdl9vcGVuZ2xf Y2JfY29udGV4dCAqY3R4LCBpbnQgZmJvLCBpbnQgdywgaW50IGgpIG5vZ2lsCisrIyAgICAgaW50 IG1wdl9vcGVuZ2xfY2JfZHJhdyhtcHZfb3BlbmdsX2NiX2NvbnRleHQgKmN0eCwgaW50IGZibywg aW50IHcsIGludCBoKSBub2dpbAorIAorLSAgICBpbnQgbXB2X29wZW5nbF9jYl9yZXBvcnRfZmxp cChtcHZfb3BlbmdsX2NiX2NvbnRleHQgKmN0eCwgaW50NjRfdCB0aW1lKSBub2dpbAorKyMgICAg IGludCBtcHZfb3BlbmdsX2NiX3JlcG9ydF9mbGlwKG1wdl9vcGVuZ2xfY2JfY29udGV4dCAqY3R4 LCBpbnQ2NF90IHRpbWUpIG5vZ2lsCisgCistICAgIGludCBtcHZfb3BlbmdsX2NiX3VuaW5pdF9n bChtcHZfb3BlbmdsX2NiX2NvbnRleHQgKmN0eCkgbm9naWwKKysjICAgICBpbnQgbXB2X29wZW5n bF9jYl91bmluaXRfZ2wobXB2X29wZW5nbF9jYl9jb250ZXh0ICpjdHgpIG5vZ2lsCisgCisgCisg Y2RlZiBleHRlcm4gZnJvbSAibXB2L3JlbmRlci5oIjoKK2RpZmYgLS1naXQgYS92aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYuYyBiL3ZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5jCitpbmRleCAyMDJh YWU4Yy4uYTM1MjJlZjUgMTAwNjQ0CistLS0gYS92aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYuYwor KysrIGIvdmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LmMKK0BAIC0xLDQgKzEsNCBAQAorLS8qIEdl bmVyYXRlZCBieSBDeXRob24gMC4yOS4yMSAqLworKy8qIEdlbmVyYXRlZCBieSBDeXRob24gMC4y OS4yOCAqLworIAorIC8qIEJFR0lOOiBDeXRob24gTWV0YWRhdGEKKyB7CitAQCAtMTksMTUgKzE5 LDE3IEBACisgfQorIEVORDogQ3l0aG9uIE1ldGFkYXRhICovCisgCisrI2lmbmRlZiBQWV9TU0la RV9UX0NMRUFOCisgI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCisrI2VuZGlmIC8qIFBZX1NTSVpF X1RfQ0xFQU4gKi8KKyAjaW5jbHVkZSAiUHl0aG9uLmgiCisgI2lmbmRlZiBQeV9QWVRIT05fSAor ICAgICAjZXJyb3IgUHl0aG9uIGhlYWRlcnMgbmVlZGVkIHRvIGNvbXBpbGUgQyBleHRlbnNpb25z LCBwbGVhc2UgaW5zdGFsbCBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIFB5dGhvbi4KKyAjZWxpZiBQ WV9WRVJTSU9OX0hFWCA8IDB4MDIwNjAwMDAgfHwgKDB4MDMwMDAwMDAgPD0gUFlfVkVSU0lPTl9I RVggJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDMwMDAwKQorICAgICAjZXJyb3IgQ3l0aG9uIHJl cXVpcmVzIFB5dGhvbiAyLjYrIG9yIFB5dGhvbiAzLjMrLgorICNlbHNlCistI2RlZmluZSBDWVRI T05fQUJJICIwXzI5XzIxIgorLSNkZWZpbmUgQ1lUSE9OX0hFWF9WRVJTSU9OIDB4MDAxRDE1RjAK KysjZGVmaW5lIENZVEhPTl9BQkkgIjBfMjlfMjgiCisrI2RlZmluZSBDWVRIT05fSEVYX1ZFUlNJ T04gMHgwMDFEMUNGMAorICNkZWZpbmUgQ1lUSE9OX0ZVVFVSRV9ESVZJU0lPTiAwCisgI2luY2x1 ZGUgPHN0ZGRlZi5oPgorICNpZm5kZWYgb2Zmc2V0b2YKK0BAIC0xNzQsNyArMTc2LDcgQEAgRU5E OiBDeXRob24gTWV0YWRhdGEgKi8KKyAgICNpZm5kZWYgQ1lUSE9OX1VTRV9VTklDT0RFX0lOVEVS TkFMUworICAgICAjZGVmaW5lIENZVEhPTl9VU0VfVU5JQ09ERV9JTlRFUk5BTFMgMQorICAgI2Vu ZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDMwMEYwCisrICAjaWYgUFlfVkVSU0lP Tl9IRVggPCAweDAzMDMwMEYwIHx8IFBZX1ZFUlNJT05fSEVYID49IDB4MDMwQjAwQTIKKyAgICAg I3VuZGVmIENZVEhPTl9VU0VfVU5JQ09ERV9XUklURVIKKyAgICAgI2RlZmluZSBDWVRIT05fVVNF X1VOSUNPREVfV1JJVEVSIDAKKyAgICNlbGlmICFkZWZpbmVkKENZVEhPTl9VU0VfVU5JQ09ERV9X UklURVIpCitAQCAtMTg5LDExICsxOTEsMTQgQEAgRU5EOiBDeXRob24gTWV0YWRhdGEgKi8KKyAg ICNpZm5kZWYgQ1lUSE9OX1VOUEFDS19NRVRIT0RTCisgICAgICNkZWZpbmUgQ1lUSE9OX1VOUEFD S19NRVRIT0RTIDEKKyAgICNlbmRpZgorLSAgI2lmbmRlZiBDWVRIT05fRkFTVF9USFJFQURfU1RB VEUKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMEIwMEE0CisrICAgICN1bmRlZiBDWVRI T05fRkFTVF9USFJFQURfU1RBVEUKKysgICAgI2RlZmluZSBDWVRIT05fRkFTVF9USFJFQURfU1RB VEUgMAorKyAgI2VsaWYgIWRlZmluZWQoQ1lUSE9OX0ZBU1RfVEhSRUFEX1NUQVRFKQorICAgICAj ZGVmaW5lIENZVEhPTl9GQVNUX1RIUkVBRF9TVEFURSAxCisgICAjZW5kaWYKKyAgICNpZm5kZWYg Q1lUSE9OX0ZBU1RfUFlDQUxMCistICAgICNkZWZpbmUgQ1lUSE9OX0ZBU1RfUFlDQUxMIDEKKysg ICAgI2RlZmluZSBDWVRIT05fRkFTVF9QWUNBTEwgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMzBCMDBB MSkKKyAgICNlbmRpZgorICAgI2lmbmRlZiBDWVRIT05fUEVQNDg5X01VTFRJX1BIQVNFX0lOSVQK KyAgICAgI2RlZmluZSBDWVRIT05fUEVQNDg5X01VTFRJX1BIQVNFX0lOSVQgKFBZX1ZFUlNJT05f SEVYID49IDB4MDMwNTAwMDApCitAQCAtMjA0LDcgKzIwOSwxMCBAQCBFTkQ6IEN5dGhvbiBNZXRh ZGF0YSAqLworICAgI2lmbmRlZiBDWVRIT05fVVNFX0RJQ1RfVkVSU0lPTlMKKyAgICAgI2RlZmlu ZSBDWVRIT05fVVNFX0RJQ1RfVkVSU0lPTlMgKFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNjAwQjEp CisgICAjZW5kaWYKKy0gICNpZm5kZWYgQ1lUSE9OX1VTRV9FWENfSU5GT19TVEFDSworKyAgI2lm IFBZX1ZFUlNJT05fSEVYID49IDB4MDMwQjAwQTQKKysgICAgI3VuZGVmIENZVEhPTl9VU0VfRVhD X0lORk9fU1RBQ0sKKysgICAgI2RlZmluZSBDWVRIT05fVVNFX0VYQ19JTkZPX1NUQUNLIDAKKysg ICNlbGlmICFkZWZpbmVkKENZVEhPTl9VU0VfRVhDX0lORk9fU1RBQ0spCisgICAgICNkZWZpbmUg Q1lUSE9OX1VTRV9FWENfSU5GT19TVEFDSyAoUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA3MDBBMykK KyAgICNlbmRpZgorICNlbmRpZgorQEAgLTIxMiw3ICsyMjAsOSBAQCBFTkQ6IEN5dGhvbiBNZXRh ZGF0YSAqLworICNkZWZpbmUgQ1lUSE9OX0ZBU1RfUFlDQ0FMTCAgKENZVEhPTl9GQVNUX1BZQ0FM TCAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDYwMEIxKQorICNlbmRpZgorICNpZiBDWVRIT05f VVNFX1BZTE9OR19JTlRFUk5BTFMKKy0gICNpbmNsdWRlICJsb25naW50cmVwci5oIgorKyAgI2lm IFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAgICNpbmNsdWRlICJsb25naW50cmVwci5oIgorKyAg I2VuZGlmCisgICAjdW5kZWYgU0hJRlQKKyAgICN1bmRlZiBCQVNFCisgICAjdW5kZWYgTUFTSwor QEAgLTMyOSw5ICszMzksNjggQEAgRU5EOiBDeXRob24gTWV0YWRhdGEgKi8KKyAgICNkZWZpbmUg X19QeXhfRGVmYXVsdENsYXNzVHlwZSBQeUNsYXNzX1R5cGUKKyAjZWxzZQorICAgI2RlZmluZSBf X1B5eF9CVUlMVElOX01PRFVMRV9OQU1FICJidWlsdGlucyIKKy0jaWYgUFlfVkVSU0lPTl9IRVgg Pj0gMHgwMzA4MDBBNCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjIKKy0gICNkZWZpbmUg X19QeXhfUHlDb2RlX05ldyhhLCBrLCBsLCBzLCBmLCBjb2RlLCBjLCBuLCB2LCBmdiwgY2VsbCwg Zm4sIG5hbWUsIGZsaW5lLCBsbm9zKVwKKy0gICAgICAgICAgUHlDb2RlX05ldyhhLCAwLCBrLCBs LCBzLCBmLCBjb2RlLCBjLCBuLCB2LCBmdiwgY2VsbCwgZm4sIG5hbWUsIGZsaW5lLCBsbm9zKQor KyAgI2RlZmluZSBfX1B5eF9EZWZhdWx0Q2xhc3NUeXBlIFB5VHlwZV9UeXBlCisrI2lmIFBZX1ZF UlNJT05fSEVYID49IDB4MDMwQjAwQTEKKysgICAgc3RhdGljIENZVEhPTl9JTkxJTkUgUHlDb2Rl T2JqZWN0KiBfX1B5eF9QeUNvZGVfTmV3KGludCBhLCBpbnQgaywgaW50IGwsIGludCBzLCBpbnQg ZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHlPYmplY3QgKmNvZGUsIFB5T2JqZWN0ICpjLCBQeU9iamVjdCogbiwgUHlPYmplY3QgKnYsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2Jq ZWN0ICpmdiwgUHlPYmplY3QgKmNlbGwsIFB5T2JqZWN0KiBmbiwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsIGludCBm bGluZSwgUHlPYmplY3QgKmxub3MpIHsKKysgICAgICAgIFB5T2JqZWN0ICprd2RzPU5VTEwsICph cmdjb3VudD1OVUxMLCAqcG9zb25seWFyZ2NvdW50PU5VTEwsICprd29ubHlhcmdjb3VudD1OVUxM OworKyAgICAgICAgUHlPYmplY3QgKm5sb2NhbHM9TlVMTCwgKnN0YWNrc2l6ZT1OVUxMLCAqZmxh Z3M9TlVMTCwgKnJlcGxhY2U9TlVMTCwgKmNhbGxfcmVzdWx0PU5VTEwsICplbXB0eT1OVUxMOwor KyAgICAgICAgY29uc3QgY2hhciAqZm5fY3N0cj1OVUxMOworKyAgICAgICAgY29uc3QgY2hhciAq bmFtZV9jc3RyPU5VTEw7CisrICAgICAgICBQeUNvZGVPYmplY3QqIGNvPU5VTEw7CisrICAgICAg ICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrOworKyAgICAgICAgUHlFcnJfRmV0 Y2goJnR5cGUsICZ2YWx1ZSwgJnRyYWNlYmFjayk7CisrICAgICAgICBpZiAoIShrd2RzPVB5RGlj dF9OZXcoKSkpIGdvdG8gZW5kOworKyAgICAgICAgaWYgKCEoYXJnY291bnQ9UHlMb25nX0Zyb21M b25nKGEpKSkgZ290byBlbmQ7CisrICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dk cywgImNvX2FyZ2NvdW50IiwgYXJnY291bnQpICE9IDApIGdvdG8gZW5kOworKyAgICAgICAgaWYg KCEocG9zb25seWFyZ2NvdW50PVB5TG9uZ19Gcm9tTG9uZygwKSkpIGdvdG8gZW5kOworKyAgICAg ICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3ZHMsICJjb19wb3Nvbmx5YXJnY291bnQiLCBw b3Nvbmx5YXJnY291bnQpICE9IDApIGdvdG8gZW5kOworKyAgICAgICAgaWYgKCEoa3dvbmx5YXJn Y291bnQ9UHlMb25nX0Zyb21Mb25nKGspKSkgZ290byBlbmQ7CisrICAgICAgICBpZiAoUHlEaWN0 X1NldEl0ZW1TdHJpbmcoa3dkcywgImNvX2t3b25seWFyZ2NvdW50Iiwga3dvbmx5YXJnY291bnQp ICE9IDApIGdvdG8gZW5kOworKyAgICAgICAgaWYgKCEobmxvY2Fscz1QeUxvbmdfRnJvbUxvbmco bCkpKSBnb3RvIGVuZDsKKysgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2RzLCAi Y29fbmxvY2FscyIsIG5sb2NhbHMpICE9IDApIGdvdG8gZW5kOworKyAgICAgICAgaWYgKCEoc3Rh Y2tzaXplPVB5TG9uZ19Gcm9tTG9uZyhzKSkpIGdvdG8gZW5kOworKyAgICAgICAgaWYgKFB5RGlj dF9TZXRJdGVtU3RyaW5nKGt3ZHMsICJjb19zdGFja3NpemUiLCBzdGFja3NpemUpICE9IDApIGdv dG8gZW5kOworKyAgICAgICAgaWYgKCEoZmxhZ3M9UHlMb25nX0Zyb21Mb25nKGYpKSkgZ290byBl bmQ7CisrICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dkcywgImNvX2ZsYWdzIiwg ZmxhZ3MpICE9IDApIGdvdG8gZW5kOworKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5n KGt3ZHMsICJjb19jb2RlIiwgY29kZSkgIT0gMCkgZ290byBlbmQ7CisrICAgICAgICBpZiAoUHlE aWN0X1NldEl0ZW1TdHJpbmcoa3dkcywgImNvX2NvbnN0cyIsIGMpICE9IDApIGdvdG8gZW5kOwor KyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3ZHMsICJjb19uYW1lcyIsIG4pICE9 IDApIGdvdG8gZW5kOworKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3ZHMsICJj b192YXJuYW1lcyIsIHYpICE9IDApIGdvdG8gZW5kOworKyAgICAgICAgaWYgKFB5RGljdF9TZXRJ dGVtU3RyaW5nKGt3ZHMsICJjb19mcmVldmFycyIsIGZ2KSAhPSAwKSBnb3RvIGVuZDsKKysgICAg ICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2RzLCAiY29fY2VsbHZhcnMiLCBjZWxsKSAh PSAwKSBnb3RvIGVuZDsKKysgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2RzLCAi Y29fbGluZXRhYmxlIiwgbG5vcykgIT0gMCkgZ290byBlbmQ7CisrICAgICAgICBpZiAoIShmbl9j c3RyPVB5VW5pY29kZV9Bc1VURjhBbmRTaXplKGZuLCBOVUxMKSkpIGdvdG8gZW5kOworKyAgICAg ICAgaWYgKCEobmFtZV9jc3RyPVB5VW5pY29kZV9Bc1VURjhBbmRTaXplKG5hbWUsIE5VTEwpKSkg Z290byBlbmQ7CisrICAgICAgICBpZiAoIShjbyA9IFB5Q29kZV9OZXdFbXB0eShmbl9jc3RyLCBu YW1lX2NzdHIsIGZsaW5lKSkpIGdvdG8gZW5kOworKyAgICAgICAgaWYgKCEocmVwbGFjZSA9IFB5 T2JqZWN0X0dldEF0dHJTdHJpbmcoKFB5T2JqZWN0KiljbywgInJlcGxhY2UiKSkpIGdvdG8gY2xl YW51cF9jb2RlX3RvbzsKKysgICAgICAgIGlmICghKGVtcHR5ID0gUHlUdXBsZV9OZXcoMCkpKSBn b3RvIGNsZWFudXBfY29kZV90b287IC8vIHVuZm9ydHVuYXRlbHkgX19weXhfZW1wdHlfdHVwbGUg aXNuJ3QgYXZhaWxhYmxlIGhlcmUKKysgICAgICAgIGlmICghKGNhbGxfcmVzdWx0ID0gUHlPYmpl Y3RfQ2FsbChyZXBsYWNlLCBlbXB0eSwga3dkcykpKSBnb3RvIGNsZWFudXBfY29kZV90b287Cisr ICAgICAgICBQeV9YREVDUkVGKChQeU9iamVjdCopY28pOworKyAgICAgICAgY28gPSAoUHlDb2Rl T2JqZWN0KiljYWxsX3Jlc3VsdDsKKysgICAgICAgIGNhbGxfcmVzdWx0ID0gTlVMTDsKKysgICAg ICAgIGlmICgwKSB7CisrICAgICAgICAgICAgY2xlYW51cF9jb2RlX3RvbzoKKysgICAgICAgICAg ICBQeV9YREVDUkVGKChQeU9iamVjdCopY28pOworKyAgICAgICAgICAgIGNvID0gTlVMTDsKKysg ICAgICAgIH0KKysgICAgICAgIGVuZDoKKysgICAgICAgIFB5X1hERUNSRUYoa3dkcyk7CisrICAg ICAgICBQeV9YREVDUkVGKGFyZ2NvdW50KTsKKysgICAgICAgIFB5X1hERUNSRUYocG9zb25seWFy Z2NvdW50KTsKKysgICAgICAgIFB5X1hERUNSRUYoa3dvbmx5YXJnY291bnQpOworKyAgICAgICAg UHlfWERFQ1JFRihubG9jYWxzKTsKKysgICAgICAgIFB5X1hERUNSRUYoc3RhY2tzaXplKTsKKysg ICAgICAgIFB5X1hERUNSRUYocmVwbGFjZSk7CisrICAgICAgICBQeV9YREVDUkVGKGNhbGxfcmVz dWx0KTsKKysgICAgICAgIFB5X1hERUNSRUYoZW1wdHkpOworKyAgICAgICAgaWYgKHR5cGUpIHsK KysgICAgICAgICAgICBQeUVycl9SZXN0b3JlKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOworKyAg ICAgICAgfQorKyAgICAgICAgcmV0dXJuIGNvOworKyAgICB9CisgI2Vsc2UKKyAgICNkZWZpbmUg X19QeXhfUHlDb2RlX05ldyhhLCBrLCBsLCBzLCBmLCBjb2RlLCBjLCBuLCB2LCBmdiwgY2VsbCwg Zm4sIG5hbWUsIGZsaW5lLCBsbm9zKVwKKyAgICAgICAgICAgUHlDb2RlX05ldyhhLCBrLCBsLCBz LCBmLCBjb2RlLCBjLCBuLCB2LCBmdiwgY2VsbCwgZm4sIG5hbWUsIGZsaW5lLCBsbm9zKQorQEAg LTQ0NSw4ICs1MTQsMTIgQEAgc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCAqIFB5VGhyZWFkX3Rz c19nZXQoUHlfdHNzX3QgKmtleSkgeworICNlbmRpZgorICNpZiBQWV9WRVJTSU9OX0hFWCA+IDB4 MDMwMzAwMDAgJiYgZGVmaW5lZChQeVVuaWNvZGVfS0lORCkKKyAgICNkZWZpbmUgQ1lUSE9OX1BF UDM5M19FTkFCTEVEIDEKKysgICNpZiBkZWZpbmVkKFB5VW5pY29kZV9JU19SRUFEWSkKKyAgICNk ZWZpbmUgX19QeXhfUHlVbmljb2RlX1JFQURZKG9wKSAgICAgICAobGlrZWx5KFB5VW5pY29kZV9J U19SRUFEWShvcCkpID9cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDAgOiBfUHlVbmljb2RlX1JlYWR5KChQeU9iamVjdCAqKShvcCkpKQorKyAgI2Vsc2UK KysgICNkZWZpbmUgX19QeXhfUHlVbmljb2RlX1JFQURZKG9wKSAgICAgICAoMCkKKysgICNlbmRp ZgorICAgI2RlZmluZSBfX1B5eF9QeVVuaWNvZGVfR0VUX0xFTkdUSCh1KSAgIFB5VW5pY29kZV9H RVRfTEVOR1RIKHUpCisgICAjZGVmaW5lIF9fUHl4X1B5VW5pY29kZV9SRUFEX0NIQVIodSwgaSkg UHlVbmljb2RlX1JFQURfQ0hBUih1LCBpKQorICAgI2RlZmluZSBfX1B5eF9QeVVuaWNvZGVfTUFY X0NIQVJfVkFMVUUodSkgICBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUodSkKK0BAIC00NTUsNyAr NTI4LDExIEBAIHN0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgKiBQeVRocmVhZF90c3NfZ2V0KFB5 X3Rzc190ICprZXkpIHsKKyAgICNkZWZpbmUgX19QeXhfUHlVbmljb2RlX1JFQUQoaywgZCwgaSkg ICBQeVVuaWNvZGVfUkVBRChrLCBkLCBpKQorICAgI2RlZmluZSBfX1B5eF9QeVVuaWNvZGVfV1JJ VEUoaywgZCwgaSwgY2gpICBQeVVuaWNvZGVfV1JJVEUoaywgZCwgaSwgY2gpCisgICAjaWYgZGVm aW5lZChQeVVuaWNvZGVfSVNfUkVBRFkpICYmIGRlZmluZWQoUHlVbmljb2RlX0dFVF9TSVpFKQor KyAgI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTiAmJiBQWV9WRVJTSU9OX0hFWCA+PSAw eDAzMDkwMDAwCisrICAjZGVmaW5lIF9fUHl4X1B5VW5pY29kZV9JU19UUlVFKHUpICAgICAgKDAg IT0gKGxpa2VseShQeVVuaWNvZGVfSVNfUkVBRFkodSkpID8gUHlVbmljb2RlX0dFVF9MRU5HVEgo dSkgOiAoKFB5Q29tcGFjdFVuaWNvZGVPYmplY3QgKikodSkpLT53c3RyX2xlbmd0aCkpCisrICAj ZWxzZQorICAgI2RlZmluZSBfX1B5eF9QeVVuaWNvZGVfSVNfVFJVRSh1KSAgICAgICgwICE9IChs aWtlbHkoUHlVbmljb2RlX0lTX1JFQURZKHUpKSA/IFB5VW5pY29kZV9HRVRfTEVOR1RIKHUpIDog UHlVbmljb2RlX0dFVF9TSVpFKHUpKSkKKysgICNlbmRpZgorICAgI2Vsc2UKKyAgICNkZWZpbmUg X19QeXhfUHlVbmljb2RlX0lTX1RSVUUodSkgICAgICAoMCAhPSBQeVVuaWNvZGVfR0VUX0xFTkdU SCh1KSkKKyAgICNlbmRpZgorQEAgLTYyNyw3ICs3MDQsNiBAQCBzdGF0aWMgQ1lUSE9OX0lOTElO RSBmbG9hdCBfX1BZWF9OQU4oKSB7CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxz dGRsaWIuaD4KKyAjaW5jbHVkZSAibXB2L2NsaWVudC5oIgorLSNpbmNsdWRlICJtcHYvb3Blbmds X2NiLmgiCisgI2luY2x1ZGUgIm1wdi9yZW5kZXIuaCIKKyAjaW5jbHVkZSAibXB2L3JlbmRlcl9n bC5oIgorICNpZmRlZiBfT1BFTk1QCitAQCAtODU3LDEyICs5MzMsMTAgQEAgc3RhdGljIGNvbnN0 IGNoYXIgKl9fcHl4X2ZbXSA9IHsKKyAKKyAvKi0tLSBUeXBlIGRlY2xhcmF0aW9ucyAtLS0qLwor IHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQ7 Cistc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaDsK KyBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlOworIHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5OworIHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50OworIHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQ7Cistc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dDsKKyBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zOworIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbzsKKyBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0OworQEAgLTg5NywyMSArOTcxLDYgQEAgc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCB7CisgfTsK KyAKKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTY5CistICogCistICog CistICogY2RlZiBjbGFzcyBJbnB1dERpc3BhdGNoKG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgIiIiRGF0YSBmaWVsZCBmb3IgTVBWX0VWRU5UX1NDUklQVF9J TlBVVF9ESVNQQVRDSCBldmVudHMuCistICogCistICovCistc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCB7CistICBQeU9iamVjdF9IRUFECistICBz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRj aCAqX19weXhfdnRhYjsKKy0gIFB5T2JqZWN0ICphcmcwOworLSAgUHlPYmplY3QgKnR5cGU7Cist fTsKKy0KKy0KKyAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTgyCisgICogCisg ICogCitAQCAtOTc4LDIxICsxMDM3LDYgQEAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCB7CisgfTsKKyAKKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODIyCistICogICAgICg8b2JqZWN0PmN0eCkoKQorLSAqIAorLSAqIGNkZWYgY2xh c3MgT3BlbkdMQ29udGV4dChvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIGNkZWY6CistICogICAgICAgICBtcHZfb3BlbmdsX2NiX2NvbnRleHQgKl9jdHgKKy0g Ki8KKy1zdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0 IHsKKy0gIFB5T2JqZWN0X0hFQUQKKy0gIHN0cnVjdCBtcHZfb3BlbmdsX2NiX2NvbnRleHQgKl9j dHg7CistICBpbnQgaW5pdGVkOworLSAgUHlPYmplY3QgKnVwZGF0ZV9jYjsKKy19OworLQorLQor IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODEKKyAgKiBERUYgTUFYX1JFTkRF Ul9QQVJBTVMgPSAzMgorICAqIAorQEAgLTEwODAsMjAgKzExMjQsNiBAQCBzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCB7Cisgc3Rh dGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZp bGVSZWFjaGVkICpfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVS ZWFjaGVkOworIAorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNjkKKy0g KiAKKy0gKiAKKy0gKiBjZGVmIGNsYXNzIElucHV0RGlzcGF0Y2gob2JqZWN0KTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAiIiJEYXRhIGZpZWxkIGZvciBNUFZfRVZFTlRf U0NSSVBUX0lOUFVUX0RJU1BBVENIIGV2ZW50cy4KKy0gKiAKKy0gKi8KKy0KKy1zdHJ1Y3QgX19w eXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCB7CistICBQ eU9iamVjdCAqKCpfaW5pdCkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf SW5wdXREaXNwYXRjaCAqLCBzdHJ1Y3QgbXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCAq KTsKKy19OworLXN0YXRpYyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf SW5wdXREaXNwYXRjaDsKKy0KKy0KKyAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTgyCisgICogCisgICogCitAQCAtMTMxOCw2ICsxMzQ4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsRGljdChQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKiph cmdzLAorICNpZm5kZWYgUHlfTUVNQkVSX1NJWkUKKyAjZGVmaW5lIFB5X01FTUJFUl9TSVpFKHR5 cGUsIG1lbWJlcikgc2l6ZW9mKCgodHlwZSAqKTApLT5tZW1iZXIpCisgI2VuZGlmCisrI2lmIENZ VEhPTl9GQVNUX1BZQ0FMTAorICAgc3RhdGljIHNpemVfdCBfX3B5eF9weWZyYW1lX2xvY2Fsc3Bs dXNfb2Zmc2V0ID0gMDsKKyAgICNpbmNsdWRlICJmcmFtZW9iamVjdC5oIgorICAgI2RlZmluZSBf X1B4eV9QeUZyYW1lX0luaXRpYWxpemVfT2Zmc2V0cygpXAorQEAgLTEzMjUsNiArMTM1Niw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbERpY3QoUHlPYmplY3Qg KmZ1bmMsIFB5T2JqZWN0ICoqYXJncywKKyAgICAgICh2b2lkKShfX3B5eF9weWZyYW1lX2xvY2Fs c3BsdXNfb2Zmc2V0ID0gKChzaXplX3QpUHlGcmFtZV9UeXBlLnRwX2Jhc2ljc2l6ZSkgLSBQeV9N RU1CRVJfU0laRShQeUZyYW1lT2JqZWN0LCBmX2xvY2Fsc3BsdXMpKSkKKyAgICNkZWZpbmUgX19Q eXhfUHlGcmFtZV9HZXRMb2NhbHNwbHVzKGZyYW1lKVwKKyAgICAgKGFzc2VydChfX3B5eF9weWZy YW1lX2xvY2Fsc3BsdXNfb2Zmc2V0KSwgKFB5T2JqZWN0ICoqKSgoKGNoYXIgKikoZnJhbWUpKSAr IF9fcHl4X3B5ZnJhbWVfbG9jYWxzcGx1c19vZmZzZXQpKQorKyNlbmRpZiAvLyBDWVRIT05fRkFT VF9QWUNBTEwKKyAjZW5kaWYKKyAKKyAvKiBQeUNGdW5jdGlvbkZhc3RDYWxsLnByb3RvICovCitA QCAtMTc0NywxMiArMTc3OSwyMyBAQCBzdGF0aWMgdm9pZCBfX3B5eF9pbnNlcnRfY29kZV9vYmpl Y3QoaW50IGNvZGVfbGluZSwgUHlDb2RlT2JqZWN0KiBjb2RlX29iamVjdCk7Cisgc3RhdGljIHZv aWQgX19QeXhfQWRkVHJhY2ViYWNrKGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBpbnQgY19saW5lLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHlfbGluZSwgY29uc3QgY2hhciAq ZmlsZW5hbWUpOworIAorKy8qIEdDQ0RpYWdub3N0aWNzLnByb3RvICovCisrI2lmIGRlZmluZWQo X19HTlVDX18pICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01J Tk9SX18gPj0gNikpCisrI2RlZmluZSBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKKysjZW5kaWYK KysKKyAvKiBDSW50VG9QeS5wcm90byAqLworIHN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0 KiBfX1B5eF9QeUludF9Gcm9tX2ludChpbnQgdmFsdWUpOworIAorKy8qIENJbnRGcm9tUHkucHJv dG8gKi8KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfUHlJbnRfQXNfaW50KFB5T2Jq ZWN0ICopOworKworIC8qIENJbnRUb1B5LnByb3RvICovCisgc3RhdGljIENZVEhPTl9JTkxJTkUg UHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKGVudW0gbXB2X2V2 ZW50X2lkIHZhbHVlKTsKKyAKKysvKiBDSW50RnJvbVB5LnByb3RvICovCisrc3RhdGljIENZVEhP Tl9JTkxJTkUgZW51bSBtcHZfZXZlbnRfaWQgX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2V2ZW50 X2lkKFB5T2JqZWN0ICopOworKworIC8qIENJbnRUb1B5LnByb3RvICovCisgc3RhdGljIENZVEhP Tl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZyh1bnNpZ25l ZCBsb25nIHZhbHVlKTsKKyAKK0BAIC0xNzY4LDMwICsxODExLDIxIEBAIHN0YXRpYyBDWVRIT05f SU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lbmRfZmlsZV9yZWFz b24oZW51bSBtCisgLyogQ0ludFRvUHkucHJvdG8gKi8KKyBzdGF0aWMgQ1lUSE9OX0lOTElORSBQ eU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKGVu dW0gbXB2X3JlbmRlcl91cGRhdGVfZmxhZyB2YWx1ZSk7CisgCisrLyogQ0ludEZyb21QeS5wcm90 byAqLworK3N0YXRpYyBDWVRIT05fSU5MSU5FIGxvbmcgX19QeXhfUHlJbnRfQXNfbG9uZyhQeU9i amVjdCAqKTsKKysKKyAvKiBDSW50VG9QeS5wcm90byAqLworIHN0YXRpYyBDWVRIT05fSU5MSU5F IFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2ludDY0X3QoaW50NjRfdCB2YWx1ZSk7CisgCisg LyogQ0ludFRvUHkucHJvdG8gKi8KKyBzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19Q eXhfUHlJbnRfRnJvbV91aW50NjRfdCh1aW50NjRfdCB2YWx1ZSk7CisgCistLyogQ0ludFRvUHku cHJvdG8gKi8KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZm9ybWF0KGVudW0gbXB2X2Zvcm1hdCB2YWx1ZSk7CistCistLyogQ0ludFRv UHkucHJvdG8gKi8KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRf RnJvbV9sb25nKGxvbmcgdmFsdWUpOworLQorLS8qIENJbnRGcm9tUHkucHJvdG8gKi8KKy1zdGF0 aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfUHlJbnRfQXNfaW50KFB5T2JqZWN0ICopOworLQor LS8qIENJbnRGcm9tUHkucHJvdG8gKi8KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBlbnVtIG1wdl9l dmVudF9pZCBfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZXZlbnRfaWQoUHlPYmplY3QgKik7Cist CistLyogQ0ludEZyb21QeS5wcm90byAqLworLXN0YXRpYyBDWVRIT05fSU5MSU5FIGxvbmcgX19Q eXhfUHlJbnRfQXNfbG9uZyhQeU9iamVjdCAqKTsKKy0KKyAvKiBDSW50RnJvbVB5LnByb3RvICov Cisgc3RhdGljIENZVEhPTl9JTkxJTkUgdWludDY0X3QgX19QeXhfUHlJbnRfQXNfdWludDY0X3Qo UHlPYmplY3QgKik7CisgCisrLyogQ0ludFRvUHkucHJvdG8gKi8KKytzdGF0aWMgQ1lUSE9OX0lO TElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KGVudW0gbXB2 X2Zvcm1hdCB2YWx1ZSk7CisrCisgLyogQ0ludEZyb21QeS5wcm90byAqLworIHN0YXRpYyBDWVRI T05fSU5MSU5FIGVudW0gbXB2X2Zvcm1hdCBfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9ybWF0 KFB5T2JqZWN0ICopOworIAorQEAgLTE4MDEsNiArMTgzNSw5IEBAIHN0YXRpYyBDWVRIT05fSU5M SU5FIGludDY0X3QgX19QeXhfUHlJbnRfQXNfaW50NjRfdChQeU9iamVjdCAqKTsKKyAvKiBDSW50 RnJvbVB5LnByb3RvICovCisgc3RhdGljIENZVEhPTl9JTkxJTkUgaW50cHRyX3QgX19QeXhfUHlJ bnRfQXNfaW50cHRyX3QoUHlPYmplY3QgKik7CisgCisrLyogQ0ludFRvUHkucHJvdG8gKi8KKytz dGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9sb25nKGxvbmcg dmFsdWUpOworKworIC8qIENoZWNrQmluYXJ5VmVyc2lvbi5wcm90byAqLworIHN0YXRpYyBpbnQg X19QeXhfY2hlY2tfYmluYXJ5X3ZlcnNpb24odm9pZCk7CisgCitAQCAtMTgwOCw3ICsxODQ1LDYg QEAgc3RhdGljIGludCBfX1B5eF9jaGVja19iaW5hcnlfdmVyc2lvbih2b2lkKTsKKyBzdGF0aWMg aW50IF9fUHl4X0luaXRTdHJpbmdzKF9fUHl4X1N0cmluZ1RhYkVudHJ5ICp0KTsKKyAKKyBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVh Y2hlZF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZp bGVSZWFjaGVkICpfX3B5eF92X3NlbGYsIHN0cnVjdCBtcHZfZXZlbnRfZW5kX2ZpbGUgKl9fcHl4 X3ZfZW9mKTsgLyogcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoX19pbml0KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKl9fcHl4X3Zfc2VsZiwgc3RydWN0IG1wdl9l dmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2ggKl9fcHl4X3ZfaW5wdXQpOyAvKiBwcm90byovCisg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfX2luaXQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2Fn ZSAqX19weXhfdl9zZWxmLCBzdHJ1Y3QgbXB2X2V2ZW50X2xvZ19tZXNzYWdlICpfX3B5eF92X21z Zyk7IC8qIHByb3RvKi8KKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2XzhQcm9wZXJ0eV9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eSAqX19weXhfdl9zZWxmLCBzdHJ1Y3QgbXB2X2V2ZW50X3Byb3BlcnR5ICpf X3B5eF92X3Byb3ApOyAvKiBwcm90byovCisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGEoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZiwgc3RydWN0IG1wdl9ldmVudCAqX19weXhf dl9ldmVudCk7IC8qIHByb3RvKi8KK0BAIC0xODM0LDEyICsxODcwLDEwIEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX2Zy b21fc3RydWN0KHN0CisgCisgLyogTW9kdWxlIGRlY2xhcmF0aW9ucyBmcm9tICd2aWRjdXR0ZXIu bGlicy5tcHYnICovCisgc3RhdGljIFB5VHlwZU9iamVjdCAqX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgPSAwOworLXN0YXRpYyBQeVR5cGVPYmplY3Qg Kl9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoID0gMDsKKyBz dGF0aWMgUHlUeXBlT2JqZWN0ICpfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9n TWVzc2FnZSA9IDA7Cisgc3RhdGljIFB5VHlwZU9iamVjdCAqX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X1Byb3BlcnR5ID0gMDsKKyBzdGF0aWMgUHlUeXBlT2JqZWN0ICpfX3B5eF9w dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgPSAwOworIHN0YXRpYyBQeVR5cGVPYmpl Y3QgKl9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ID0gMDsKKy1zdGF0 aWMgUHlUeXBlT2JqZWN0ICpfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdM Q29udGV4dCA9IDA7Cisgc3RhdGljIFB5VHlwZU9iamVjdCAqX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgPSAwOworIHN0YXRpYyBQeVR5cGVPYmplY3QgKl9f cHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gPSAwOworIHN0 YXRpYyBQeVR5cGVPYmplY3QgKl9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJDb250ZXh0ID0gMDsKK0BAIC0xODU1LDcgKzE4ODksNiBAQCBzdGF0aWMgdm9pZCBfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY191cGRhdGVjYih2b2lkICopOyAvKnByb3RvKi8KKyBz dGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3BvaW50ZXIoY2hh ciBjb25zdCAqLCBQeU9iamVjdCAqKTsgLypwcm90byovCisgc3RhdGljIHZvaWQgX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfY2FsbGJhY2sodm9pZCAqKTsgLypwcm90byovCisgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2ts ZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqLCBQeU9iamVjdCAqKTsgLypwcm90byovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBp Y2tsZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqLCBQeU9iamVjdCAqKTsgLypwcm90byovCisgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2ts ZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfTG9nTWVzc2FnZSAqLCBQeU9iamVjdCAqKTsgLypwcm90byovCisgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9Qcm9wZXJ0 eV9fc2V0X3N0YXRlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5ICosIFB5T2JqZWN0ICopOyAvKnByb3RvKi8KKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKiwgUHlPYmplY3QgKik7 IC8qcHJvdG8qLworQEAgLTE4NzMsNyArMTkwNiw2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf YnVpbHRpbl9yYW5nZTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2J1aWx0aW5faWQ7Cisgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9idWlsdGluX2VudW1lcmF0ZTsKKyBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X2J1aWx0aW5fVHlwZUVycm9yOworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfYnVpbHRp bl9EZXByZWNhdGlvbldhcm5pbmc7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19lW10gPSAi ZSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19oW10gPSAiaCI7Cisgc3RhdGljIGNvbnN0 IGNoYXIgX19weXhfa19rW10gPSAiayI7CitAQCAtMTkwMCw3ICsxOTMyLDYgQEAgc3RhdGljIGNv bnN0IGNoYXIgX19weXhfa19jYWxsW10gPSAiY2FsbCI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19w eXhfa19jb2RlW10gPSAiY29kZSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19kYXRhW10g PSAiZGF0YSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19kaWN0W10gPSAiX19kaWN0X18i OworLXN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfZXh0c1tdID0gImV4dHMiOworIHN0YXRpYyBj b25zdCBjaGFyIF9fcHl4X2tfaWRsZVtdID0gImlkbGUiOworIHN0YXRpYyBjb25zdCBjaGFyIF9f cHl4X2tfaW5mb1tdID0gImluZm8iOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfaW5pdFtd ID0gIl9faW5pdF9fIjsKK0BAIC0xOTI2LDcgKzE5NTcsNiBAQCBzdGF0aWMgY29uc3QgY2hhciBf X3B5eF9rX2Vycm9yW10gPSAiZXJyb3IiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfZXZl bnRbXSA9ICJldmVudCI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19mYXRhbFtdID0gImZh dGFsIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX25vbWVtW10gPSAibm9tZW0iOworLXN0 YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfcGF1c2VbXSA9ICJwYXVzZSI7Cisgc3RhdGljIGNvbnN0 IGNoYXIgX19weXhfa19yYW5nZVtdID0gInJhbmdlIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5 eF9rX3N0YXJ0W10gPSAic3RhcnQiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfdHJhY2Vb XSA9ICJ0cmFjZSI7CitAQCAtMTk3Myw3ICsyMDAzLDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgX19w eXhfa19wcmVzZW50W10gPSAicHJlc2VudCI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19y ZWxlYXNlW10gPSAicmVsZWFzZSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19zdWNjZXNz W10gPSAic3VjY2VzcyI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa190aW1lb3V0W10gPSAi dGltZW91dCI7Cistc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa191bnBhdXNlW10gPSAidW5wYXVz ZSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa192ZXJzaW9uW10gPSAiX192ZXJzaW9uX18i OworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfd3JhcHBlZFtdID0gIndyYXBwZWQiOworIHN0 YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfTVBWRXJyb3JbXSA9ICJNUFZFcnJvciI7CitAQCAtMTk5 OCw3ICsyMDI3LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19weXhfc3RhdGVbXSA9ICJf X3B5eF9zdGF0ZSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19yZWR1Y2VfZXhbXSA9ICJf X3JlZHVjZV9leF9fIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX3JlbmRlcl9mZFtdID0g InJlbmRlcl9mZCI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa190aHJlYWRpbmdbXSA9ICJ0 aHJlYWRpbmciOworLXN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfdW5pbml0X2dsW10gPSAidW5p bml0X2dsIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX0FQSV9PUEVOR0xbXSA9ICJBUElf T1BFTkdMIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX0NBUElfTUFKT1JbXSA9ICJfQ0FQ SV9NQUpPUiI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19DQVBJX01JTk9SW10gPSAiX0NB UElfTUlOT1IiOworQEAgLTIwMzgsOCArMjA2Niw2IEBAIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4 X2tfcHl4X2NoZWNrc3VtW10gPSAiX19weXhfY2hlY2tzdW0iOworIHN0YXRpYyBjb25zdCBjaGFy IF9fcHl4X2tfc2V0X3Byb3BlcnR5W10gPSAic2V0X3Byb3BlcnR5IjsKKyBzdGF0aWMgY29uc3Qg Y2hhciBfX3B5eF9rX3N0cmluZ3NvdXJjZVtdID0gInN0cmluZ3NvdXJjZSI7Cisgc3RhdGljIGNv bnN0IGNoYXIgX19weXhfa192ZXJzaW9uX2luZm9bXSA9ICJ2ZXJzaW9uX2luZm8iOworLXN0YXRp YyBjb25zdCBjaGFyIF9fcHl4X2tfSW5wdXREaXNwYXRjaFtdID0gIklucHV0RGlzcGF0Y2giOwor LXN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfT3BlbkdMQ29udGV4dFtdID0gIk9wZW5HTENvbnRl eHQiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfUmVuZGVyQ29udGV4dFtdID0gIlJlbmRl ckNvbnRleHQiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfUmVwbHlVc2VyRGF0YVtdID0g Il9SZXBseVVzZXJEYXRhIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX2NvbW1hbmRfZXJy b3JbXSA9ICJjb21tYW5kX2Vycm9yIjsKK0BAIC0yMDUzLDE4ICsyMDc5LDE1IEBAIHN0YXRpYyBj b25zdCBjaGFyIF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRbXSA9ICJDYWxsYmFja1RocmVhZCI7Cisg c3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19NSU5fQ0FQSV9NSU5PUltdID0gIl9NSU5fQ0FQSV9N SU5PUiI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19hb19pbml0X2ZhaWxlZFtdID0gImFv X2luaXRfZmFpbGVkIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX2F1ZGlvX3JlY29uZmln W10gPSAiYXVkaW9fcmVjb25maWciOworLXN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfY2hhcHRl cl9jaGFuZ2VbXSA9ICJjaGFwdGVyX2NoYW5nZSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhf a19jbGllbnRfbWVzc2FnZVtdID0gImNsaWVudF9tZXNzYWdlIjsKKyBzdGF0aWMgY29uc3QgY2hh ciBfX3B5eF9rX2xvYWRpbmdfZmFpbGVkW10gPSAibG9hZGluZ19mYWlsZWQiOworIHN0YXRpYyBj b25zdCBjaGFyIF9fcHl4X2tfcHJvcGVydHlfZXJyb3JbXSA9ICJwcm9wZXJ0eV9lcnJvciI7Cisg c3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19za2lwX3JlbmRlcmluZ1tdID0gInNraXBfcmVuZGVy aW5nIjsKKy1zdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX3RyYWNrc19jaGFuZ2VkW10gPSAidHJh Y2tzX2NoYW5nZWQiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfdW5rbm93bl9mb3JtYXRb XSA9ICJ1bmtub3duX2Zvcm1hdCI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa192aWRlb19y ZWNvbmZpZ1tdID0gInZpZGVvX3JlY29uZmlnIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9r X3ZvX2luaXRfZmFpbGVkW10gPSAidm9faW5pdF9mYWlsZWQiOworIHN0YXRpYyBjb25zdCBjaGFy IF9fcHl4X2tfTVBWRXJyb3JfX19pbml0W10gPSAiTVBWRXJyb3IuX19pbml0X18iOworIHN0YXRp YyBjb25zdCBjaGFyIF9fcHl4X2tfaW50ZXJuYWxfZm9ybWF0W10gPSAiaW50ZXJuYWxfZm9ybWF0 IjsKKy1zdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX21ldGFkYXRhX3VwZGF0ZVtdID0gIm1ldGFk YXRhX3VwZGF0ZSI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19ub3RfaW1wbGVtZW50ZWRb XSA9ICJub3RfaW1wbGVtZW50ZWQiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfbm90aGlu Z190b19wbGF5W10gPSAibm90aGluZ190b19wbGF5IjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5 eF9rX3Byb3BlcnR5X2NoYW5nZVtdID0gInByb3BlcnR5X2NoYW5nZSI7CitAQCAtMjA3Myw3ICsy MDk2LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19weXhfUGlja2xlRXJyb3JbXSA9ICJf X3B5eF9QaWNrbGVFcnJvciI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19zZXRfaWNjX3By b2ZpbGVbXSA9ICJzZXRfaWNjX3Byb2ZpbGUiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tf c2V0c3RhdGVfY3l0aG9uW10gPSAiX19zZXRzdGF0ZV9jeXRob25fXyI7Cisgc3RhdGljIGNvbnN0 IGNoYXIgX19weXhfa19zdXJyb2dhdGVlc2NhcGVbXSA9ICJzdXJyb2dhdGVlc2NhcGUiOworLXN0 YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfdHJhY2tzX3N3aXRjaGVkW10gPSAidHJhY2tzX3N3aXRj aGVkIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX0VuZE9mRmlsZVJlYWNoZWRbXSA9ICJF bmRPZkZpbGVSZWFjaGVkIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX2FkdmFuY2VkX2Nv bnRyb2xbXSA9ICJhZHZhbmNlZF9jb250cm9sIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9r X2RybU1vZGVBdG9taWNSZXFbXSA9ICJkcm1Nb2RlQXRvbWljUmVxKiI7CitAQCAtMjA4NSw3ICsy MTA3LDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19pbnZhbGlkX3BhcmFtZXRlcltdID0g ImludmFsaWRfcGFyYW1ldGVyIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX3NldF9hbWJp ZW50X2xpZ2h0W10gPSAic2V0X2FtYmllbnRfbGlnaHQiOworIHN0YXRpYyBjb25zdCBjaGFyIF9f cHl4X2tfQ2FsbGJhY2tUaHJlYWRfcnVuW10gPSAiQ2FsbGJhY2tUaHJlYWQucnVuIjsKKyBzdGF0 aWMgY29uc3QgY2hhciBfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX3NldFtdID0gIkNhbGxiYWNrVGhy ZWFkLnNldCI7Cistc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19EZXByZWNhdGlvbldhcm5pbmdb XSA9ICJEZXByZWNhdGlvbldhcm5pbmciOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfVW5p Y29kZURlY29kZUVycm9yW10gPSAiVW5pY29kZURlY29kZUVycm9yIjsKKyBzdGF0aWMgY29uc3Qg Y2hhciBfX3B5eF9rX1VuaWNvZGVFbmNvZGVFcnJvcltdID0gIlVuaWNvZGVFbmNvZGVFcnJvciI7 Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19Vbmtub3duX2FwaV90eXBlX3JbXSA9ICJVbmtu b3duIGFwaV90eXBlICVyIjsKK0BAIC0yMTA5LDEyICsyMTMwLDkgQEAgc3RhdGljIGNvbnN0IGNo YXIgX19weXhfa19SZW5kZXJQYXJhbXNfb3ZlcmZsb3dbXSA9ICJSZW5kZXJQYXJhbXMgb3ZlcmZs b3ciOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfYmxvY2tfZm9yX3RhcmdldF90aW1lW10g PSAiYmxvY2tfZm9yX3RhcmdldF90aW1lIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX2Vy cm9yc19sb2NhbHNfd3JhcHBlZFtdID0gIl9lcnJvcnMuPGxvY2Fscz4ud3JhcHBlZCI7Cisgc3Rh dGljIGNvbnN0IGNoYXIgX19weXhfa19weXhfdW5waWNrbGVfUHJvcGVydHlbXSA9ICJfX3B5eF91 bnBpY2tsZV9Qcm9wZXJ0eSI7Cistc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19zY3JpcHRfaW5w dXRfZGlzcGF0Y2hbXSA9ICJzY3JpcHRfaW5wdXRfZGlzcGF0Y2giOworIHN0YXRpYyBjb25zdCBj aGFyIF9fcHl4X2tfQ29udGV4dF9jcmVhdGlvbl9lcnJvcltdID0gIkNvbnRleHQgY3JlYXRpb24g ZXJyb3IiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfc2h1dGRv d25bXSA9ICJDYWxsYmFja1RocmVhZC5zaHV0ZG93biI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19w eXhfa19weXhfdW5waWNrbGVfTG9nTWVzc2FnZVtdID0gIl9fcHl4X3VucGlja2xlX0xvZ01lc3Nh Z2UiOworLXN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfT3BlbkdMX0FQSV9ub3RfYXZhaWxhYmxl W10gPSAiT3BlbkdMIEFQSSBub3QgYXZhaWxhYmxlIjsKKy1zdGF0aWMgY29uc3QgY2hhciBfX3B5 eF9rX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoW10gPSAiX19weXhfdW5waWNrbGVfSW5wdXRE aXNwYXRjaCI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19DYWxsYmFja1RocmVhZF9tcHZf Y2FsbGJhY2tbXSA9ICJDYWxsYmFja1RocmVhZC5tcHZfY2FsbGJhY2siOworIHN0YXRpYyBjb25z dCBjaGFyIF9fcHl4X2tfcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb1tdID0gIl9fcHl4X3Vu cGlja2xlX1JlbmRlckZyYW1lSW5mbyI7Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa192aWRj dXR0ZXJfbGlic19weW1wdl9tcHZfcHl4W10gPSAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI7CitAQCAtMjEyNSwxMSArMjE0Myw5IEBAIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfc2Vs Zl9wYXJhbXNfY2Fubm90X2JlX2NvbnZlcnRlZFtdID0gInNlbGYucGFyYW1zIGNhbm5vCisgc3Rh dGljIGNvbnN0IGNoYXIgX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHgwNVtd ID0gIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4MDU3MmQxMSA9IChkYXRhLCBuYW1l KSkiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19z X3ZzXzB4NTZbXSA9ICJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDU2YmU5YjYgPSAo ZXJyb3IsIHJlYXNvbikpIjsKKyBzdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX0luY29tcGF0aWJs ZV9jaGVja3N1bXNfc192c18weDg3W10gPSAiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMg MHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwgdGV4dCkpIjsKKy1zdGF0aWMg Y29uc3QgY2hhciBfX3B5eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGJmW10gPSAi SW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhiZjY0MWE5ID0gKGFyZzAsIHR5cGUpKSI7 Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNf MHhkNFtdID0gIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZDQxZDhjZCA9ICgpKSI7 Cisgc3RhdGljIGNvbnN0IGNoYXIgX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNf MHhkYVtdID0gIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRh LCBlcnJvciwgaWQsIHJlcGx5X3VzZXJkYXRhKSkiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4 X2tfS25vd25fcG9zc2libGVfdmFsdWVzX2Zvcl9FbmRPZkZbXSA9ICJLbm93biBwb3NzaWJsZSB2 YWx1ZXMgZm9yIEVuZE9mRmlsZVJlYWNoZWQgcmVhc29uLlxuXG4gICAgWW91IHNob3VsZCBoYW5k bGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIHJlYXNvbiBtYXkgbm90IGJlIGFueSBvZiB0aGVz ZSB2YWx1ZXMuXG4gICAgIjsKKy1zdGF0aWMgY29uc3QgY2hhciBfX3B5eF9rX09wZW5HTENvbnRl eHRfaXNfZGVwcmVjYXRlZF9wbGVhW10gPSAiT3BlbkdMQ29udGV4dCBpcyBkZXByZWNhdGVkLCBw bGVhc2Ugc3dpdGNoIHRvIFJlbmRlckNvbnRleHQiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4 X2tfU2V0X29mX2tub3duX2Vycm9yX2NvZGVzX2Zyb21fTXBbXSA9ICJTZXQgb2Yga25vd24gZXJy b3IgY29kZXMgZnJvbSBNcHZFcnJvciBhbmQgRXZlbnQgcmVzcG9uc2VzLlxuXG4gICAgTW9zdGx5 IHdyYXBzIHRoZSBlbnVtIG1wdl9lcnJvci5cbiAgICBWYWx1ZXMgbWlnaHQgbm90IGFsd2F5cyBi ZSBpbnRlZ2VycyBpbiB0aGUgZnV0dXJlLlxuICAgIFlvdSBzaG91bGQgaGFuZGxlIHRoZSBwb3Nz aWJpbGl0eSB0aGF0IGVycm9yIGNvZGVzIG1heSBub3QgYmUgYW55IG9mIHRoZXNlIHZhbHVlcy5c biAgICAiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfU2V0X29mX2tub3duX3ZhbHVlc19m b3JfRXZlbnRfaWRbXSA9ICJTZXQgb2Yga25vd24gdmFsdWVzIGZvciBFdmVudCBpZHMuXG5cbiAg ICBNb3N0bHkgd3JhcHMgdGhlIGVudW0gbXB2X2V2ZW50X2lkLlxuICAgIFZhbHVlcyBtaWdodCBu b3QgYWx3YXlzIGJlIGludGVnZXJzIGluIHRoZSBmdXR1cmUuXG4gICAgWW91IHNob3VsZCBoYW5k bGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQgZXZlbnQgaWRzIG1heSBub3QgYmUgYW55IG9mIHRoZXNl IHZhbHVlcy5cbiAgICAiOworIHN0YXRpYyBjb25zdCBjaGFyIF9fcHl4X2tfVW5rbm93bl9vcl9p bnZhbGlkX3BvaW50ZXJfb2JqZWNbXSA9ICJVbmtub3duIG9yIGludmFsaWQgcG9pbnRlciBvYmpl Y3Q6ICVyIjsKK0BAIC0yMTUxLDcgKzIxNjcsNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25f c19DYWxsYmFja1RocmVhZF9zZXQ7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfQ2FsbGJh Y2tUaHJlYWRfc2h1dGRvd247Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfQ29udGV4dDsK KyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2twX3NfQ29udGV4dF9jcmVhdGlvbl9lcnJvcjsKKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19EZXByZWNhdGlvbldhcm5pbmc7Cisgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9uX3NfRU9GUmVhc29uczsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25f c19FbmRPZkZpbGVSZWFjaGVkOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX0Vycm9yczsK K0BAIC0yMTYxLDIwICsyMTc2LDE1IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX0ltcG9y dEVycm9yOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfa3Bfc19JbmNvbXBhdGlibGVfY2hlY2tz dW1zX3NfdnNfMHgwNTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2twX3NfSW5jb21wYXRpYmxl X2NoZWNrc3Vtc19zX3ZzXzB4NTY7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9rcF9zX0luY29t cGF0aWJsZV9jaGVja3N1bXNfc192c18weDg3OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfa3Bf c19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHhiZjsKKyBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4ZDQ7Cisgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGRhOworLXN0YXRp YyBQeU9iamVjdCAqX19weXhfbl9zX0lucHV0RGlzcGF0Y2g7Cisgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9rcF9zX0tub3duX3Bvc3NpYmxlX3ZhbHVlc19mb3JfRW5kT2ZGOworIHN0YXRpYyBQeU9i amVjdCAqX19weXhfbl9zX0xvZ0xldmVsczsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19M b2dNZXNzYWdlOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX01JTl9DQVBJX01JTk9SOwor IHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX01QVkVycm9yOworIHN0YXRpYyBQeU9iamVjdCAq X19weXhfbl9zX01QVkVycm9yX19faW5pdDsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19P cGVuR0xDb250ZXh0OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfa3Bfc19PcGVuR0xDb250ZXh0 X2lzX2RlcHJlY2F0ZWRfcGxlYTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19PcGVuR0xS ZW5kZXJDb250ZXh0OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfa3Bfc19PcGVuR0xfQVBJX25v dF9hdmFpbGFibGU7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfUGlja2xlRXJyb3I7Cisg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfUHJvcGVydHk7Cisgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9uX3NfUHlNUFZFcnJvcjsKK0BAIC0yMjExLDcgKzIyMjEsNiBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X25fc19ibG9ja19mb3JfdGFyZ2V0X3RpbWU7Cisgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9uX3NfYmxvY2tfdnN5bmM7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfY2FsbDsK KyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19jYWxsYmFjazsKKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X25fc19jaGFwdGVyX2NoYW5nZTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19j bGllbnRfbWVzc2FnZTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19jbGluZV9pbl90cmFj ZWJhY2s7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfY2xvc2U7CitAQCAtMjI0NCw3ICsy MjUzLDYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfZXJyb3I7Cisgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9uX3NfZXJyb3JzOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX2Vycm9y c19sb2NhbHNfd3JhcHBlZDsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19ldmVudDsKKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19leHRzOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhf bl9zX2ZhdGFsOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX2ZibzsKKyBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X25fc19mZDsKK0BAIC0yMjgwLDcgKzIyODgsNiBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X25fc19sb2NrOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX2xvZ19tZXNz YWdlOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX21haW47Cisgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9uX3NfbWV0YWNsYXNzOworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX21ldGFk YXRhX3VwZGF0ZTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19tb2R1bGU7Cisgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9uX3NfbXB2OworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX21w dl9jYWxsYmFjazsKK0BAIC0yMzAxLDcgKzIzMDgsNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X25fc19vcGVuZ2xfZmJvOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX29wZW5nbF9pbml0 X3BhcmFtczsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19vcHRpb25fZXJyb3I7Cisgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9uX3Nfb3B0aW9uX2Zvcm1hdDsKKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X25fc19wYXVzZTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19waWNrbGU7Cisg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfcGxheWJhY2tfcmVzdGFydDsKKyBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X25fc19wcmVwYXJlOworQEAgLTIzMTksNyArMjMyNSw2IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfbl9zX3B5eF9zdGF0ZTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25f c19weXhfdHlwZTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19weXhfdW5waWNrbGVfRW5k T2ZGaWxlUmVhY2hlZDsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc19weXhfdW5waWNrbGVf RXZlbnQ7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfcHl4X3VucGlja2xlX0lucHV0RGlz cGF0Y2g7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfcHl4X3VucGlja2xlX0xvZ01lc3Nh Z2U7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfcHl4X3VucGlja2xlX1Byb3BlcnR5Owor IHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm87 CitAQCAtMjM0MCw3ICsyMzQ1LDYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfcmVwZWF0 OworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3JlcXVlc3RfZXZlbnQ7Cisgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9uX3NfcnVuOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3M7Cist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3Nfc2NyaXB0X2lucHV0X2Rpc3BhdGNoOworIHN0YXRp YyBQeU9iamVjdCAqX19weXhfbl9zX3NlZWs7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3Nf c2VsZjsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9j b252ZXJ0ZWRfdG87CitAQCAtMjM3MywxMyArMjM3Nyw5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfbl9zX3RocmVhZGluZzsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc190aWNrOworIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3RpbWVvdXQ7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9uX3NfdHJhY2U7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfdHJhY2tzX2NoYW5nZWQ7 Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9uX3NfdHJhY2tzX3N3aXRjaGVkOworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfbl9zX3VuaW5pdF9nbDsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X25f c191bmluaXRpYWxpemVkOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3Vua25vd25fZm9y bWF0OworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3Vub2JzZXJ2ZV9wcm9wZXJ0eTsKKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X25fc191bnBhdXNlOworIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfbl9zX3Vuc3VwcG9ydGVkOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfbl9zX3VwZGF0ZTsK KyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2twX3NfdXRmXzg7CitAQCAtMjQwOSwxNCArMjQwOSw2 IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxl UmVhY2hlZF81ZXJyb3JfMl9fc2V0X18oc3RyCisgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkXzVlcnJvcl80X19kZWxfXyhzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpfX3B5eF92 X3NlbGYpOyAvKiBwcm90byAqLworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9fX3JlZHVjZV9jeXRob25fXyhzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpfX3B5eF92 X3NlbGYpOyAvKiBwcm90byAqLworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF8yX19zZXRzdGF0ZV9jeXRob25fXyhzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpfX3B5 eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLyogcHJvdG8gKi8KKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlz cGF0Y2hfNGFyZzBfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9JbnB1dERpc3BhdGNoICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworLXN0YXRpYyBpbnQg X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF8yX19z ZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNo ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLyogcHJvdG8gKi8KKy1z dGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hf NGFyZzBfNF9fZGVsX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5w dXREaXNwYXRjaCAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfX19n ZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNo ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80dHlwZV8yX19zZXRfXyhzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICpfX3B5eF92X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgaW50IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfNF9fZGVsX18o c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19w eXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfX19yZWR1Y2VfY3l0aG9uX18oc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdl9z ZWxmKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfMl9fc2V0c3RhdGVfY3l0aG9uX18oc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHByb3RvICovCisgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVm aXhfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworIHN0YXRpYyBpbnQgX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzJfX3NldF9fKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKiBwcm90byAqLworIHN0YXRpYyBpbnQgX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzRfX2RlbF9fKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zf c2VsZik7IC8qIHByb3RvICovCitAQCAtMjQ2Miw0MSArMjQ1NCwyOSBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzRyZW1v dmUoQ1lUSE9OXworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzExYXBpX3ZlcnNpb25fX19nZXRfXyhDWVRIT05fVU5VU0VEIHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8q IHByb3RvICovCisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfNG5hbWVfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1lX19fZ2V0 X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhf dl9zZWxmKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF9zdXNwZW5kKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCistc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMnJlc3Vt ZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92 X3NlbGYpOyAvKiBwcm90byAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzRyZXF1ZXN0X2V2ZW50KHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3ZfZXZlbnQsIFB5T2JqZWN0ICpfX3B5eF92X2VuYWJsZSk7IC8qIHByb3RvICovCistc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNnNldF9s b2dfbGV2ZWwoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9sb2dsZXZlbCk7IC8qIHByb3RvICovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf OGxvYWRfY29uZmlnKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZmlsZW5hbWUpOyAvKiBwcm90byAq LworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzEwX2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Zh bHVlKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8xMmNvbW1hbmQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9hc3lu Y2hyb25vdXMsIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEsIFB5T2JqZWN0ICpfX3B5eF92X2NtZGxp c3QpOyAvKiBwcm90byAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzE0Z2V0X3Byb3BlcnR5X2FzeW5jKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3ZfcHJvcCwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSk7IC8qIHByb3RvICovCistc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZ0cnlf Z2V0X3Byb3BlcnR5X2FzeW5jKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3Qg Kl9fcHl4X3ZfZGF0YSwgUHlPYmplY3QgKl9fcHl4X3ZfZGVmYXVsdCk7IC8qIHByb3RvICovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MTh0cnlfZ2V0X3Byb3BlcnR5KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3Qg Kl9fcHl4X3ZfZGVmYXVsdCk7IC8qIHByb3RvICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjBnZXRfcHJvcGVydHkoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9wcm9wKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMnNldF9wcm9wZXJ0eShzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlLCBQeU9iamVjdCAq X19weXhfdl9hc3luY2hyb25vdXMsIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEpOyAvKiBwcm90byAq LworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzI0c2V0X29wdGlvbihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpf X3B5eF92X3ZhbHVlKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNmluaXRpYWxpemUoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8g Ki8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8yOHdhaXRfZXZlbnQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl90aW1lb3V0KTsgLyogcHJv dG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8zMHdha2V1cChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyc2V0X3dha2V1cF9jYWxsYmFj ayhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2NhbGxiYWNrKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNGdldF93 YWtldXBfcGlwZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM2X19jaW5pdF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MzhvYnNlcnZlX3Byb3BlcnR5KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3Qg Kl9fcHl4X3ZfZGF0YSk7IC8qIHByb3RvICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDB1bm9ic2VydmVfcHJvcGVydHkoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQ eU9iamVjdCAqX19weXhfdl9kYXRhKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80MnNodXRkb3duKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8q IHByb3RvICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfNDRvcGVuZ2xfY2JfYXBpKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCistc3RhdGljIHZv aWQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ2X19kZWFsbG9jX18o c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9z ZWxmKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF80OF9fcmVkdWNlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQgc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxm KTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF81MF9fc2V0c3RhdGVfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYs IENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKiBwcm90byAq LworLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29u dGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVu R0xDb250ZXh0ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8yaW5pdF9nbChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5 eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2V4dHMsIFB5T2JqZWN0ICpfX3B5eF92X2dldF9w cm9jX2FkZHJlc3MpOyAvKiBwcm90byAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF80c2V0X3VwZGF0ZV9jYWxsYmFjayhz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5 eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2NiKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfNmRy YXcoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9mYm8sIFB5T2JqZWN0ICpfX3B5eF92X3cs IFB5T2JqZWN0ICpfX3B5eF92X2gpOyAvKiBwcm90byAqLworLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF84cmVwb3J0X2ZsaXAo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl90aW1lKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRf MTB1bmluaXRfZ2woc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdM Q29udGV4dCAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgdm9pZCBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzEyX19kZWFsbG9jX18oc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqX19weXhf dl9zZWxmKTsgLyogcHJvdG8gKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTRfX3JlZHVjZV9jeXRob25fXyhDWVRIT05f VU5VU0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRl eHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzE2X19zZXRzdGF0ZV9jeXRo b25fXyhDWVRIT05fVU5VU0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X09wZW5HTENvbnRleHQgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHByb3RvICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfcmVxdWVzdF9ldmVudChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X2V2ZW50LCBQeU9iamVjdCAqX19weXhfdl9lbmFibGUpOyAvKiBwcm90byAq LworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzJzZXRfbG9nX2xldmVsKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfbG9nbGV2ZWwpOyAvKiBw cm90byAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2ZpbGVuYW1lKTsg LyogcHJvdG8gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X3ZhbHVlKTsgLyogcHJvdG8gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X2FzeW5jaHJvbm91cywgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSwgUHlPYmplY3QgKl9fcHl4 X3ZfY21kbGlzdCk7IC8qIHByb3RvICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlfYXN5bmMoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9wcm9wLCBQeU9iamVjdCAqX19weXhfdl9kYXRhKTsgLyogcHJvdG8gKi8K KytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xMnRyeV9nZXRfcHJvcGVydHlfYXN5bmMoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQ eU9iamVjdCAqX19weXhfdl9kYXRhLCBQeU9iamVjdCAqX19weXhfdl9kZWZhdWx0KTsgLyogcHJv dG8gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8xNHRyeV9nZXRfcHJvcGVydHkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQ eU9iamVjdCAqX19weXhfdl9kZWZhdWx0KTsgLyogcHJvdG8gKi8KKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNmdldF9wcm9wZXJ0eShz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3Nl bGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3ApOyAvKiBwcm90byAqLworK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5 KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUsIFB5 T2JqZWN0ICpfX3B5eF92X2FzeW5jaHJvbm91cywgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSk7IC8q IHByb3RvICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMjBzZXRfb3B0aW9uKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlP YmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKiBwcm90byAqLworK3N0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIyaW5pdGlhbGl6ZShzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpOyAv KiBwcm90byAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzI0d2FpdF9ldmVudChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3RpbWVvdXQp OyAvKiBwcm90byAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzI2d2FrZXVwKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCisrc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjhzZXRfd2FrZXVw X2NhbGxiYWNrKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2FsbGJhY2spOyAvKiBwcm90byAqLwor K3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzMwZ2V0X3dha2V1cF9waXBlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKl9fcHl4X3Zfc2VsZik7IC8qIHByb3RvICovCisrc3RhdGljIGludCBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0X18oc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKTsgLyogcHJv dG8gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8zNG9ic2VydmVfcHJvcGVydHkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQ eU9iamVjdCAqX19weXhfdl9kYXRhKTsgLyogcHJvdG8gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0 eShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEpOyAvKiBwcm90byAqLworK3N0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24o c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9z ZWxmKTsgLyogcHJvdG8gKi8KKytzdGF0aWMgdm9pZCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfNDBfX2RlYWxsb2NfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQyX19yZWR1 Y2VfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworK3N0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ0X19zZXRzdGF0 ZV9jeXRob25fXyhDWVRIT05fVU5VU0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHByb3RvICovCisgc3RhdGljIGludCBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX19faW5pdF9fKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKl9fcHl4X3Zfc2VsZik7IC8q IHByb3RvICovCisgc3RhdGljIHZvaWQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz X1JlbmRlclBhcmFtc18yX19kZWFsbG9jX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8gKi8KKyBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJh bXNfNF9fcmVkdWNlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9zZWxmKTsgLyogcHJvdG8g Ki8KK0BAIC0yNTI2LDE4ICsyNTA2LDE1IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNnNldChDWVRIT05fVU5VCisgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1Ro cmVhZF84cnVuKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X3NlbGYpOyAvKiBwcm90byAqLworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTBtcHZfY2FsbGJhY2soQ1lUSE9O X1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9jYWxsYmFjayk7IC8qIHByb3RvICovCisgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNl9fcHl4X3VucGlj a2xlX0VuZE9mRmlsZVJlYWNoZWQoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3Vt LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHByb3RvICovCistc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOF9fcHl4X3VucGlja2xlX0lu cHV0RGlzcGF0Y2goQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9iamVj dCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHByb3RvICovCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdl KENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19f cHl4X3R5cGUsIGxvbmcgX19weXhfdl9fX3B5eF9jaGVja3N1bSwgUHlPYmplY3QgKl9fcHl4X3Zf X19weXhfc3RhdGUpOyAvKiBwcm90byAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEyX19weXhfdW5waWNrbGVfUHJvcGVydHkoQ1lUSE9OX1VOVVNF RCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9u ZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7 IC8qIHByb3RvICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTRfX3B5eF91bnBpY2tsZV9FdmVudChDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5 eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90eXBlLCBsb25nIF9fcHl4X3ZfX19weXhf Y2hlY2tzdW0sIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLyogcHJvdG8gKi8KKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNl9fcHl4X3Vu cGlja2xlX1JlbmRlckZyYW1lSW5mbyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90eXBlLCBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tz dW0sIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLyogcHJvdG8gKi8KKytzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84X19weXhfdW5waWNrbGVf TG9nTWVzc2FnZShDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9fX3B5eF90eXBlLCBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLyogcHJvdG8gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMF9fcHl4X3VucGlja2xlX1Byb3BlcnR5KENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4 X3R5cGUsIGxvbmcgX19weXhfdl9fX3B5eF9jaGVja3N1bSwgUHlPYmplY3QgKl9fcHl4X3ZfX19w eXhfc3RhdGUpOyAvKiBwcm90byAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEyX19weXhfdW5waWNrbGVfRXZlbnQoQ1lUSE9OX1VOVVNFRCBQeU9i amVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5 eF92X19fcHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHBy b3RvICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTRfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8oQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAq X19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19f cHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qIHByb3RvICov Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0Vu ZE9mRmlsZVJlYWNoZWQoUHlUeXBlT2JqZWN0ICp0LCBQeU9iamVjdCAqYSwgUHlPYmplY3QgKmsp OyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRs aWJzXzNtcHZfSW5wdXREaXNwYXRjaChQeVR5cGVPYmplY3QgKnQsIFB5T2JqZWN0ICphLCBQeU9i amVjdCAqayk7IC8qcHJvdG8qLworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKFB5VHlwZU9iamVjdCAqdCwgUHlPYmplY3QgKmEs IFB5T2JqZWN0ICprKTsgLypwcm90byovCisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdf OXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KFB5VHlwZU9iamVjdCAqdCwgUHlPYmplY3Qg KmEsIFB5T2JqZWN0ICprKTsgLypwcm90byovCisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9u ZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KFB5VHlwZU9iamVjdCAqdCwgUHlPYmplY3Qg KmEsIFB5T2JqZWN0ICprKTsgLypwcm90byovCisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9u ZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQoUHlUeXBlT2JqZWN0ICp0LCBQeU9iamVj dCAqYSwgUHlPYmplY3QgKmspOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Rw X25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dChQeVR5cGVPYmplY3QgKnQs IFB5T2JqZWN0ICphLCBQeU9iamVjdCAqayk7IC8qcHJvdG8qLworIHN0YXRpYyBQeU9iamVjdCAq X19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKFB5VHlwZU9i amVjdCAqdCwgUHlPYmplY3QgKmEsIFB5T2JqZWN0ICprKTsgLypwcm90byovCisgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5m byhQeVR5cGVPYmplY3QgKnQsIFB5T2JqZWN0ICphLCBQeU9iamVjdCAqayk7IC8qcHJvdG8qLwor IHN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJDb250ZXh0KFB5VHlwZU9iamVjdCAqdCwgUHlPYmplY3QgKmEsIFB5T2JqZWN0ICprKTsgLypw cm90byovCitAQCAtMjU0NSwxMyArMjUyMiwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Rw X25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dChQeVR5cGVPYgor IHN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5 eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMoUHlUeXBlT2JqZWN0ICp0LCBQeU9iamVjdCAqYSwgUHlP YmplY3QgKmspOyAvKnByb3RvKi8KKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8wOworIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfaW50XzE7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9pbnRf MjsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8zOworLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfaW50Xzk7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9pbnRfMzI7Cisgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9pbnRfNTcxMzE2OTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF85MDk1 ODI2MjsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8xNDIwMzY5MTA7Cistc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9pbnRfMjAwNjg4MDQxOworIHN0YXRpYyBQeU9iamVjdCAqX19weXhfaW50 XzIyMjQxOTE0OTsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8yMjg4MjIwNTM7Cisgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9pbnRfbmVnXzE7CitAQCAtMjU3Myw0OCArMjU0OSw0MyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18xNjsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3R1cGxlX18xNzsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18xODsKKyBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3R1cGxlX18xOTsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxl X18yMDsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18yMTsKKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3R1cGxlX18yMjsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18yNDsK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18yNjsKKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3R1cGxlX18yMzsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18yNTsKKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18yNzsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1 cGxlX18yODsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18zMDsKKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3R1cGxlX18zMTsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18z MzsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18zNTsKKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3R1cGxlX18zNzsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18zOTsKKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX180MTsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3R1cGxlX180MzsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX180NTsKKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3R1cGxlX180NzsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxl X180OTsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX181MTsKKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3R1cGxlX181MzsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX181NTsK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX181NzsKKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3R1cGxlX181OTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18zMjsKKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18zNDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1 cGxlX18zNjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX18zODsKKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3R1cGxlX180MDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX180 MjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX180NDsKKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3R1cGxlX180NjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX180ODsKKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX181MDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3R1cGxlX181MjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3R1cGxlX181NDsKKyBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzI7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX18yMzsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzI1OworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fMjc7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX18yMDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzIyOworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fMjQ7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX18yNjsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzI5OworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fMzI7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX18zNDsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzM2OworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fMzg7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX180MDsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzQyOworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fNDQ7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX180NjsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzQ4OworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fNTA7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX181MjsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzU0OworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fNTY7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX181ODsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzYwOworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fMzE7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX18zMzsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzM1OworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fMzc7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX18zOTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzQxOworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fNDM7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX180NTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzQ3OworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fNDk7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9jb2Rl b2JqX181MTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzUzOworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfY29kZW9ial9fNTU7CisgLyogTGF0ZSBpbmNsdWRlcyAqLworIAorIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NQorQEAgLTI5ODcsNyArMjk1OCw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzJfc3RyZW5j KENZVEhPTl9VTlVTRUQgUHlPYmplY3QKKyAgKiAgICAgICAgICMgSW4gcHl0aG9uMiwgYXNzdW1l IGJ5dGVzIGFuZCB3YWxrIHJpZ2h0IHRocm91Z2gKKyAgKiAgICAgICAgIHJldHVybiBzICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiBQeUV2YWxfSW5pdFRocmVhZHMoKQor KyAqIFB5X0luaXRpYWxpemUoKQorICAqLworICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CisgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfcyk7CitAQCAtMzYxNiwxNSArMzU4NywxNSBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9m RmlsZVJlYWNoZWRfMl9fc2V0c3RhdGVfYworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNzYKKy0gKiAgICAgY2RlZiBwdWJsaWMg b2JqZWN0IGFyZzAsIHR5cGUKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTg5 CisrICogICAgIGNkZWYgcHVibGljIG9iamVjdCBwcmVmaXgsIGxldmVsLCB0ZXh0LCBsb2dfbGV2 ZWwKKyAgKiAKKy0gKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfc2NyaXB0X2lucHV0 X2Rpc3BhdGNoKiBpbnB1dCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHNlbGYuYXJnMCA9IGlucHV0LmFyZzAKKy0gKiAgICAgICAgIHNlbGYudHlwZSA9IF9zdHJk ZWMoaW5wdXQudHlwZSkKKysgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfbG9nX21l c3NhZ2UqIG1zZyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNl bGYubGV2ZWwgPSBfc3RyZGVjKG1zZy5sZXZlbCkKKysgKiAgICAgICAgIHNlbGYucHJlZml4ID0g X3N0cmRlYyhtc2cucHJlZml4KQorICAqLworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoX19pbml0KHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKl9fcHl4X3Zfc2VsZiwgc3Ry dWN0IG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2ggKl9fcHl4X3ZfaW5wdXQpIHsKKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2Fn ZV9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl ICpfX3B5eF92X3NlbGYsIHN0cnVjdCBtcHZfZXZlbnRfbG9nX21lc3NhZ2UgKl9fcHl4X3ZfbXNn KSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xh cmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CitAQCAtMzYzNiwzMSArMzYw Nyw4MiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz SW5wdXREaXNwYXRjaF9faW5pdChzdHJ1Y3QgX19weQorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAw OworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9pbml0IiwgMCk7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTc3CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTkwCisgICogCistICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2 ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCogaW5wdXQpOgorLSAqICAgICAgICAgc2VsZi5hcmcw ID0gaW5wdXQuYXJnMCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBz ZWxmLnR5cGUgPSBfc3RyZGVjKGlucHV0LnR5cGUpCistICogICAgICAgICByZXR1cm4gc2VsZgor KyAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9sb2dfbWVzc2FnZSogbXNnKToKKysg KiAgICAgICAgIHNlbGYubGV2ZWwgPSBfc3RyZGVjKG1zZy5sZXZlbCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5wcmVmaXggPSBfc3RyZGVjKG1zZy5wcmVm aXgpCisrICogICAgICAgICBzZWxmLnRleHQgPSBfc3RyZGVjKG1zZy50ZXh0KQorKyAqLworKyAg X19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxOTAsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5 dGVzX0Zyb21TdHJpbmcoX19weXhfdl9tc2ctPmxldmVsKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMCwgMTkwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOworKyAgX19weXhfdF80ID0gTlVMTDsKKysgIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKysgICAgX19w eXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgaWYgKGxpa2VseShf X3B5eF90XzQpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZV TkNUSU9OKF9fcHl4X3RfMik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7CisrICAg ICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4 X3RfMiwgZnVuY3Rpb24pOworKyAgICB9CisrICB9CisrICBfX3B5eF90XzEgPSAoX19weXhfdF80 KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhf dF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOwor KyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgX19QeXhfREVD UkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAxOTAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysg IF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYt PmxldmVsKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmxldmVsKTsKKysgIF9fcHl4 X3Zfc2VsZi0+bGV2ZWwgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworKworKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5MQorKyAqICAgICBjZGVmIF9pbml0KHNl bGYsIG1wdl9ldmVudF9sb2dfbWVzc2FnZSogbXNnKToKKysgKiAgICAgICAgIHNlbGYubGV2ZWwg PSBfc3RyZGVjKG1zZy5sZXZlbCkKKysgKiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0cmRlYyht c2cucHJlZml4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxm LnRleHQgPSBfc3RyZGVjKG1zZy50ZXh0KQorKyAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBt c2cubG9nX2xldmVsCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChf X3B5eF92X2lucHV0LT5hcmcwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgMTc3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgMTkxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIp OworKyAgX19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbXNnLT5w cmVmaXgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxOTEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICBfX3B5eF90XzQgPSBO VUxMOworKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9D aGVjayhfX3B5eF90XzIpKSkgeworKyAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzIpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKKysgICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF80KTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwor KyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgIH0KKysg IH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdz KF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7 IF9fcHl4X3RfNCA9IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5MSwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwor LSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+YXJnMCk7CistICBfX1B5eF9ERUNSRUYoX19w eXhfdl9zZWxmLT5hcmcwKTsKKy0gIF9fcHl4X3Zfc2VsZi0+YXJnMCA9IF9fcHl4X3RfMTsKKysg IF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnByZWZpeCk7CisrICBfX1B5eF9ERUNSRUYoX19w eXhfdl9zZWxmLT5wcmVmaXgpOworKyAgX19weXhfdl9zZWxmLT5wcmVmaXggPSBfX3B5eF90XzE7 CisgICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjE3OAorLSAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9zY3JpcHRfaW5wdXRf ZGlzcGF0Y2gqIGlucHV0KToKKy0gKiAgICAgICAgIHNlbGYuYXJnMCA9IGlucHV0LmFyZzAKKy0g KiAgICAgICAgIHNlbGYudHlwZSA9IF9zdHJkZWMoaW5wdXQudHlwZSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5Mgor KyAqICAgICAgICAgc2VsZi5sZXZlbCA9IF9zdHJkZWMobXNnLmxldmVsKQorKyAqICAgICAgICAg c2VsZi5wcmVmaXggPSBfc3RyZGVjKG1zZy5wcmVmaXgpCisrICogICAgICAgICBzZWxmLnRleHQg PSBfc3RyZGVjKG1zZy50ZXh0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICBzZWxmLmxvZ19sZXZlbCA9IG1zZy5sb2dfbGV2ZWwKKyAgKiAgICAgICAgIHJldHVybiBz ZWxmCistICogCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwg X19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDE3OCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDAsIDE5MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK Ky0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X2lucHV0LT50 eXBlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTc4LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92 X21zZy0+dGV4dCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDE5Miwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgIF9fcHl4X3Rf NCA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CitAQCAtMzY3NSwxOCArMzY5NywzMyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9f aW5pdChzdHJ1Y3QgX19weQorICAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9i amVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNS RUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMp OyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgMTc4LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDE5MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhf R0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+dHlwZSk7 CistICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT50eXBlKTsKKy0gIF9fcHl4X3Zfc2VsZi0+ dHlwZSA9IF9fcHl4X3RfMTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnRleHQpOwor KyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+dGV4dCk7CisrICBfX3B5eF92X3NlbGYtPnRl eHQgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworKworKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjE5MworKyAqICAgICAgICAgc2VsZi5wcmVmaXggPSBfc3RyZGVj KG1zZy5wcmVmaXgpCisrICogICAgICAgICBzZWxmLnRleHQgPSBfc3RyZGVjKG1zZy50ZXh0KQor KyAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBtc2cubG9nX2xldmVsICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHJldHVybiBzZWxmCisrICogCisrICovCisrICBf X3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X21zZy0+bG9nX2xldmVsKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTkzLCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90 XzEpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsKTsKKysgIF9fUHl4 X0RFQ1JFRihfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCk7CisrICBfX3B5eF92X3NlbGYtPmxvZ19s ZXZlbCA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTc5CistICogICAgICAgICBzZWxmLmFyZzAgPSBpbnB1dC5h cmcwCistICogICAgICAgICBzZWxmLnR5cGUgPSBfc3RyZGVjKGlucHV0LnR5cGUpCisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTk0CisrICogICAgICAgICBzZWxmLnRleHQg PSBfc3RyZGVjKG1zZy50ZXh0KQorKyAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBtc2cubG9n X2xldmVsCisgICogICAgICAgICByZXR1cm4gc2VsZiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisgICogCisgICogCitAQCAtMzY5NiwxMiArMzczMywxMiBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9faW5pdChzdHJ1 Y3QgX19weQorICAgX19weXhfciA9ICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpOworICAgZ290 byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNzYK Ky0gKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IGFyZzAsIHR5cGUKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxODkKKysgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHByZWZp eCwgbGV2ZWwsIHRleHQsIGxvZ19sZXZlbAorICAqIAorLSAqICAgICBjZGVmIF9pbml0KHNlbGYs IG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2gqIGlucHV0KTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5hcmcwID0gaW5wdXQuYXJnMAorLSAqICAg ICAgICAgc2VsZi50eXBlID0gX3N0cmRlYyhpbnB1dC50eXBlKQorKyAqICAgICBjZGVmIF9pbml0 KHNlbGYsIG1wdl9ldmVudF9sb2dfbWVzc2FnZSogbXNnKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5sZXZlbCA9IF9zdHJkZWMobXNnLmxldmVsKQorKyAq ICAgICAgICAgc2VsZi5wcmVmaXggPSBfc3RyZGVjKG1zZy5wcmVmaXgpCisgICovCisgCisgICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KK0BAIC0zNzEwLDcgKzM3NDcsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9faW5p dChzdHJ1Y3QgX19weQorICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzMpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworLSAgX19QeXhf QWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuSW5wdXREaXNwYXRjaC5faW5pdCIsIF9f cHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfQWRk VHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuTG9nTWVzc2FnZS5faW5pdCIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IDA7Cisg ICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKK0BAIC0zNzE4LDM0ICsz NzU1LDM0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNJbnB1dERpc3BhdGNoX19pbml0KHN0cnVjdCBfX3B5CisgICByZXR1cm4gX19weXhfcjsKKyB9 CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE3NAorLSAqICAgICBXcmFw czogbXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaAorKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxODcKKysgKiAgICAgV3JhcHM6IG1wdl9ldmVudF9sb2dfbWVzc2FnZQor ICAqICAgICAiIiIKKy0gKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IGFyZzAsIHR5cGUgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBjZGVmIHB1YmxpYyBvYmplY3QgcHJlZml4 LCBsZXZlbCwgdGV4dCwgbG9nX2xldmVsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAg KiAKKy0gKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3Bh dGNoKiBpbnB1dCk6CisrICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X2xvZ19tZXNz YWdlKiBtc2cpOgorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcw XzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNGFy ZzBfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzFfX2dl dF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8xX19n ZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7 CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF9fX2dldF9fKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqKV9fcHl4X3Zf c2VsZikpOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExv Z01lc3NhZ2VfNnByZWZpeF9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVy biBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNGFyZzBfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICpfX3B5eF92X3NlbGYpIHsKKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfNnByZWZpeF9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZikgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxM OworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX2dldF9fIiwgMCk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19Q eXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+YXJnMCk7CistICBfX3B5eF9yID0gX19weXhfdl9zZWxm LT5hcmcwOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKKysgIF9fcHl4 X3IgPSBfX3B5eF92X3NlbGYtPnByZWZpeDsKKyAgIGdvdG8gX19weXhfTDA7CisgCisgICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KK0BAIC0zNzU2LDI3ICszNzkzLDI3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80YXJn MF9fX2dldF9fKHN0CisgfQorIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIGludCBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcwXzNfX3Nl dF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLypw cm90byovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1 dERpc3BhdGNoXzRhcmcwXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X3ZhbHVlKSB7Cisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVmaXhfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8zX19zZXRfXyhQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworICAgaW50 IF9fcHl4X3I7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fc2V0X18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF8yX19zZXRf XygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2gg KilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOworKyAgX19weXhf ciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8y X19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3Nh Z2UgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOworIAorICAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNGFyZzBfMl9fc2V0X18oc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworK3N0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzJfX3NldF9fKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZiwgUHlP YmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKKyAgIGludCBfX3B5eF9yOworICAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fIiwg MCk7CisgICBfX1B5eF9JTkNSRUYoX19weXhfdl92YWx1ZSk7CisgICBfX1B5eF9HSVZFUkVGKF9f cHl4X3ZfdmFsdWUpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+YXJnMCk7CistICBf X1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5hcmcwKTsKKy0gIF9fcHl4X3Zfc2VsZi0+YXJnMCA9 IF9fcHl4X3ZfdmFsdWU7CisrICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5wcmVmaXgpOwor KyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKKysgIF9fcHl4X3Zfc2VsZi0+ cHJlZml4ID0gX19weXhfdl92YWx1ZTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor ICAgX19weXhfciA9IDA7CitAQCAtMzc4NSwyNyArMzgyMiwyNyBAQCBzdGF0aWMgaW50IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNGFyZzBfMl9fc2V0X18o c3RydWN0CisgfQorIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIGludCBfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcwXzVfX2RlbF9fKFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNGFyZzBfNV9fZGVsX18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZikgeworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYpOyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfNnByZWZpeF81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7 CisgICBpbnQgX19weXhfcjsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4 X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcw XzRfX2RlbF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXRE aXNwYXRjaCAqKV9fcHl4X3Zfc2VsZikpOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF80X19kZWxfXygoKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpKTsK KyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIGludCBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcwXzRfX2RlbF9fKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKl9fcHl4 X3Zfc2VsZikgeworK3N0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEw TG9nTWVzc2FnZV82cHJlZml4XzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZikgeworICAgaW50IF9fcHl4X3I7Cisg ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fZGVsX18iLCAwKTsKKyAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKyAgIF9fUHl4X0dJ VkVSRUYoUHlfTm9uZSk7CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5hcmcwKTsKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmFyZzApOworLSAgX19weXhfdl9zZWxmLT5hcmcw ID0gUHlfTm9uZTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnByZWZpeCk7CisrICBf X1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5wcmVmaXgpOworKyAgX19weXhfdl9zZWxmLT5wcmVm aXggPSBQeV9Ob25lOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX3B5eF9y ID0gMDsKK0BAIC0zODE0LDI1ICszODUxLDI1IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF80X19kZWxfXyhzdHJ1Y3QKKyB9 CisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfMV9fZ2V0X18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80dHlwZV8xX19nZXRfXyhQeU9i amVjdCAqX19weXhfdl9zZWxmKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8xX19nZXRfXyhQeU9iamVjdCAqX19w eXhfdl9zZWxmKTsgLypwcm90byovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8xX19nZXRfXyhQeU9iamVjdCAqX19w eXhfdl9zZWxmKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdy YXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzSW5wdXREaXNwYXRjaF80dHlwZV9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqKV9fcHl4X3Zfc2VsZikpOworKyAgX19weXhf ciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsX19f Z2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl ICopX19weXhfdl9zZWxmKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAor LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXRE aXNwYXRjaF80dHlwZV9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0lucHV0RGlzcGF0Y2ggKl9fcHl4X3Zfc2VsZikgeworK3N0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfX19nZXRfXyhz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92 X3NlbGYpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDAp OworICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3Nl bGYtPnR5cGUpOworLSAgX19weXhfciA9IF9fcHl4X3Zfc2VsZi0+dHlwZTsKKysgIF9fUHl4X0lO Q1JFRihfX3B5eF92X3NlbGYtPmxldmVsKTsKKysgIF9fcHl4X3IgPSBfX3B5eF92X3NlbGYtPmxl dmVsOworICAgZ290byBfX3B5eF9MMDsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor QEAgLTM4NDMsMjcgKzM4ODAsMjcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzR0eXBlX19fZ2V0X18oc3QKKyB9CisgCisg LyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8KKy1zdGF0aWMgaW50IF9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfM19fc2V0 X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKKytz dGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxl dmVsXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Zh bHVlKTsgLypwcm90byovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQ eU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworICAgaW50IF9fcHl4X3I7CisgICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18g KHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzSW5wdXREaXNwYXRjaF80dHlwZV8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKilfX3B5eF92X3NlbGYpLCAoKFB5T2Jq ZWN0ICopX19weXhfdl92YWx1ZSkpOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzJfX3NldF9fKCgoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZiksICgoUHlP YmplY3QgKilfX3B5eF92X3ZhbHVlKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K KyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7Cisg fQorIAorLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXRE aXNwYXRjaF80dHlwZV8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9JbnB1dERpc3BhdGNoICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVl KSB7Cisrc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzVsZXZlbF8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7Cisg ICBpbnQgX19weXhfcjsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOworICAgX19QeXhfSU5DUkVGKF9fcHl4 X3ZfdmFsdWUpOworICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3ZhbHVlKTsKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF92X3NlbGYtPnR5cGUpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+ dHlwZSk7CistICBfX3B5eF92X3NlbGYtPnR5cGUgPSBfX3B5eF92X3ZhbHVlOworKyAgX19QeXhf R09UUkVGKF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2Vs Zi0+bGV2ZWwpOworKyAgX19weXhfdl9zZWxmLT5sZXZlbCA9IF9fcHl4X3ZfdmFsdWU7CisgCisg ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fcHl4X3IgPSAwOworQEAgLTM4NzIsMjcg KzM5MDksMjcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJ bnB1dERpc3BhdGNoXzR0eXBlXzJfX3NldF9fKHN0cnVjdAorIH0KKyAKKyAvKiBQeXRob24gd3Jh cHBlciAqLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5w dXREaXNwYXRjaF80dHlwZV81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90 byovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERp c3BhdGNoXzR0eXBlXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKytzdGF0aWMg aW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzVf X2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzVfX2RlbF9f KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKyAgIGludCBfX3B5eF9yOworICAgX19QeXhfUmVm TmFubnlEZWNsYXJhdGlvbnMKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9f ICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICopX19weXhfdl9zZWxmKSk7CisrICBf X3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2 ZWxfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlICopX19weXhfdl9zZWxmKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K KyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7Cisg fQorIAorLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXRE aXNwYXRjaF80dHlwZV80X19kZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9JbnB1dERpc3BhdGNoICpfX3B5eF92X3NlbGYpIHsKKytzdGF0aWMgaW50IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzRfX2RlbF9fKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2Vs ZikgeworICAgaW50IF9fcHl4X3I7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18iLCAwKTsKKyAgIF9fUHl4X0lOQ1JF RihQeV9Ob25lKTsKKyAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CistICBfX1B5eF9HT1RSRUYo X19weXhfdl9zZWxmLT50eXBlKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnR5cGUp OworLSAgX19weXhfdl9zZWxmLT50eXBlID0gUHlfTm9uZTsKKysgIF9fUHl4X0dPVFJFRihfX3B5 eF92X3NlbGYtPmxldmVsKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmxldmVsKTsK KysgIF9fcHl4X3Zfc2VsZi0+bGV2ZWwgPSBQeV9Ob25lOworIAorICAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCisgICBfX3B5eF9yID0gMDsKK0BAIC0zOTAwLDYzICszOTM3LDI0MyBAQCBzdGF0 aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5 cGVfNF9fZGVsX18oc3RydWN0CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogIih0cmVl IGZyYWdtZW50KSI6MQorLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBjZGVmIHR1cGxlIHN0YXRlCistICogICAgIGNk ZWYgb2JqZWN0IF9kaWN0CistICovCistCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hf MV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF8xX19yZWR1Y2VfY3l0aG9uX18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7 Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dN ZXNzYWdlXzR0ZXh0XzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8K KytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01l c3NhZ2VfNHRleHRfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworICAgUHlPYmpl Y3QgKl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsK Ky0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3Bh dGNoX19fcmVkdWNlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfSW5wdXREaXNwYXRjaCAqKV9fcHl4X3Zfc2VsZikpOworKyAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF9fX2dldF9fKCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zf c2VsZikpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfX19y ZWR1Y2VfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5w dXREaXNwYXRjaCAqX19weXhfdl9zZWxmKSB7CistICBQeU9iamVjdCAqX19weXhfdl9zdGF0ZSA9 IDA7CistICBQeU9iamVjdCAqX19weXhfdl9fZGljdCA9IDA7CistICBpbnQgX19weXhfdl91c2Vf c2V0c3RhdGU7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTBMb2dNZXNzYWdlXzR0ZXh0X19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmKSB7CisgICBQeU9iamVjdCAqX19w eXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMSA9IE5VTEw7CistICBpbnQgX19weXhfdF8yOworLSAgaW50IF9fcHl4X3RfMzsK Ky0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfNTsKKy0gIFB5 T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBj b25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9 IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18iLCAw KTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7CisrICBfX1B5 eF9YREVDUkVGKF9fcHl4X3IpOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+dGV4dCk7 CisrICBfX3B5eF9yID0gX19weXhfdl9zZWxmLT50ZXh0OworKyAgZ290byBfX3B5eF9MMDsKKyAK Ky0gIC8qICIodHJlZSBmcmFnbWVudCkiOjUKKy0gKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKKy0g KiAgICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQorLSAqICAgICBzdGF0ZSA9IChzZWxmLmFyZzAs IHNlbGYudHlwZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBfZGljdCA9 IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKy0gKiAgICAgaWYgX2RpY3QgaXMgbm90 IE5vbmU6CistICovCistICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygyKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPmFyZzApOwor LSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYtPmFyZzApOworLSAgUHlUdXBsZV9TRVRfSVRF TShfX3B5eF90XzEsIDAsIF9fcHl4X3Zfc2VsZi0+YXJnMCk7CistICBfX1B5eF9JTkNSRUYoX19w eXhfdl9zZWxmLT50eXBlKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zZWxmLT50eXBlKTsK Ky0gIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAxLCBfX3B5eF92X3NlbGYtPnR5cGUpOwor KyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMDo7CisrICBfX1B5eF9YR0lW RVJFRihfX3B5eF9yKTsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0 dXJuIF9fcHl4X3I7CisrfQorKworKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIGludCBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0XzNfX3NldF9f KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLypwcm90 byovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzR0ZXh0XzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X3ZhbHVlKSB7CisrICBpbnQgX19weXhfcjsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyAod3JhcHBlcikiLCAw KTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzR0ZXh0XzJfX3NldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVl KSk7CisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworK3N0YXRpYyBpbnQgX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF8yX19zZXRfXyhz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CisrICBpbnQgX19weXhfcjsKKysgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19zZXRfXyIsIDApOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWUpOworKyAgX19QeXhf R0lWRVJFRihfX3B5eF92X3ZhbHVlKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnRl eHQpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+dGV4dCk7CisrICBfX3B5eF92X3Nl bGYtPnRleHQgPSBfX3B5eF92X3ZhbHVlOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICov CisrICBfX3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAg cmV0dXJuIF9fcHl4X3I7CisrfQorKworKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIGlu dCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0XzVfX2Rl bF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNHRleHRfNV9fZGVsX18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZikgeworKyAgaW50IF9fcHl4X3I7CisrICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18gKHdy YXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEwTG9nTWVzc2FnZV80dGV4dF80X19kZWxfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpKTsKKysKKysgIC8qIGZ1bmN0 aW9uIGV4aXQgY29kZSAqLworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICBy ZXR1cm4gX19weXhfcjsKKyt9CisrCisrc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0XzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZikgeworKyAgaW50IF9f cHl4X3I7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fZGVsX18iLCAwKTsKKysgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysg IF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CisrICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT50 ZXh0KTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnRleHQpOworKyAgX19weXhfdl9z ZWxmLT50ZXh0ID0gUHlfTm9uZTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAg X19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVy biBfX3B5eF9yOworK30KKysKKysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVs XzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19s ZXZlbF8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CisrICBQeU9iamVjdCAqX19w eXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsX19fZ2V0 X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICop X19weXhfdl9zZWxmKSk7CisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2Fn ZV85bG9nX2xldmVsX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IE5V TEw7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICBf X1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwpOworKyAgX19weXhfciA9IF9fcHl4 X3Zfc2VsZi0+bG9nX2xldmVsOworKyAgZ290byBfX3B5eF9MMDsKKysKKysgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLworKyAgX19weXhfTDA6OworKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7 CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOwor K30KKysKKysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzNfX3NldF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLypwcm90byovCisrc3Rh dGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzlsb2df bGV2ZWxfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf dmFsdWUpIHsKKysgIGludCBfX3B5eF9yOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK KysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fICh3cmFwcGVyKSIsIDApOwor KyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2Vf OWxvZ19sZXZlbF8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1 ZSkpOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysKKytzdGF0aWMgaW50IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF8yX19z ZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CisrICBpbnQgX19weXhfcjsK KysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX19zZXRfXyIsIDApOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWUpOworKyAg X19QeXhfR0lWRVJFRihfX3B5eF92X3ZhbHVlKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3Nl bGYtPmxvZ19sZXZlbCk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwp OworKyAgX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwgPSBfX3B5eF92X3ZhbHVlOworKworKyAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworKy8qIFB5dGhvbiB3 cmFwcGVyICovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlXzlsb2dfbGV2ZWxfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8q cHJvdG8qLworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9n TWVzc2FnZV85bG9nX2xldmVsXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKysg IGludCBfX3B5eF9yOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9 IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF80 X19kZWxfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3Nh Z2UgKilfX3B5eF92X3NlbGYpKTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9Cisr Cisrc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdl Xzlsb2dfbGV2ZWxfNF9fZGVsX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmKSB7CisrICBpbnQgX19weXhfcjsKKysgIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19k ZWxfXyIsIDApOworKyAgX19QeXhfSU5DUkVGKFB5X05vbmUpOworKyAgX19QeXhfR0lWRVJFRihQ eV9Ob25lKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCk7CisrICBf X1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwpOworKyAgX19weXhfdl9zZWxmLT5s b2dfbGV2ZWwgPSBQeV9Ob25lOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBf X3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJu IF9fcHl4X3I7CisrfQorKworKy8qICIodHJlZSBmcmFnbWVudCkiOjEKKysgKiBkZWYgX19yZWR1 Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg Y2RlZiB0dXBsZSBzdGF0ZQorKyAqICAgICBjZGVmIG9iamVjdCBfZGljdAorKyAqLworKworKy8q IFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzFfX3JlZHVjZV9jeXRob25fXyhQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfMV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVT RUQgUHlPYmplY3QgKnVudXNlZCkgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworKyAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X3JlZHVjZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX19fcmVkdWNlX2N5dGhvbl9fKCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zf c2VsZikpOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysKKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfX19yZWR1 Y2VfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVz c2FnZSAqX19weXhfdl9zZWxmKSB7CisrICBQeU9iamVjdCAqX19weXhfdl9zdGF0ZSA9IDA7Cisr ICBQeU9iamVjdCAqX19weXhfdl9fZGljdCA9IDA7CisrICBpbnQgX19weXhfdl91c2Vfc2V0c3Rh dGU7CisrICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisrICBfX1B5eF9SZWZOYW5ueURlY2xh cmF0aW9ucworKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisrICBpbnQgX19weXhfdF8y OworKyAgaW50IF9fcHl4X3RfMzsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAg aW50IF9fcHl4X3RfNTsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOworKyAgaW50IF9f cHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Cisr ICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19yZWR1Y2VfY3l0aG9uX18iLCAwKTsKKysKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjUKKysg KiAgICAgY2RlZiBvYmplY3QgX2RpY3QKKysgKiAgICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQor KyAqICAgICBzdGF0ZSA9IChzZWxmLmxldmVsLCBzZWxmLmxvZ19sZXZlbCwgc2VsZi5wcmVmaXgs IHNlbGYudGV4dCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBfZGljdCA9 IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKysgKiAgICAgaWYgX2RpY3QgaXMgbm90 IE5vbmU6CisrICovCisrICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPmxldmVsKTsK KysgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zZWxmLT5sZXZlbCk7CisrICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfMSwgMCwgX19weXhfdl9zZWxmLT5sZXZlbCk7CisrICBfX1B5eF9JTkNSRUYo X19weXhfdl9zZWxmLT5sb2dfbGV2ZWwpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYt PmxvZ19sZXZlbCk7CisrICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMSwgX19weXhfdl9z ZWxmLT5sb2dfbGV2ZWwpOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsK KysgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zZWxmLT5wcmVmaXgpOworKyAgUHlUdXBsZV9TRVRf SVRFTShfX3B5eF90XzEsIDIsIF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKKysgIF9fUHl4X0lOQ1JF RihfX3B5eF92X3NlbGYtPnRleHQpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYtPnRl eHQpOworKyAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDMsIF9fcHl4X3Zfc2VsZi0+dGV4 dCk7CisgICBfX3B5eF92X3N0YXRlID0gKChQeU9iamVjdCopX19weXhfdF8xKTsKKyAgIF9fcHl4 X3RfMSA9IDA7CisgCisgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2CisgICogICAgIGNkZWYgYmlu dCB1c2Vfc2V0c3RhdGUKKy0gKiAgICAgc3RhdGUgPSAoc2VsZi5hcmcwLCBzZWxmLnR5cGUpCisr ICogICAgIHN0YXRlID0gKHNlbGYubGV2ZWwsIHNlbGYubG9nX2xldmVsLCBzZWxmLnByZWZpeCwg c2VsZi50ZXh0KQorICAqICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9u ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBpZiBfZGljdCBpcyBub3Qg Tm9uZToKKyAgKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCitAQCAtMzk2Nyw3ICs0MTg0LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1 dERpc3BhdGNoX19fcmVkdWNlX2N5dGhvbl8KKyAgIF9fcHl4X3RfMSA9IDA7CisgCisgICAvKiAi KHRyZWUgZnJhZ21lbnQpIjo3CistICogICAgIHN0YXRlID0gKHNlbGYuYXJnMCwgc2VsZi50eXBl KQorKyAqICAgICBzdGF0ZSA9IChzZWxmLmxldmVsLCBzZWxmLmxvZ19sZXZlbCwgc2VsZi5wcmVm aXgsIHNlbGYudGV4dCkKKyAgKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycs IE5vbmUpCisgICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQorQEAgLTQwMDAsMTIgKzQy MTcsMTIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNJbnB1dERpc3BhdGNoX19fcmVkdWNlX2N5dGhvbl8KKyAgKiAgICAgICAgIHN0YXRlICs9IChf ZGljdCwpCisgICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNl bGYuYXJnMCBpcyBub3QgTm9uZSBvciBzZWxmLnR5cGUgaXMgbm90IE5vbmUKKysgKiAgICAgICAg IHVzZV9zZXRzdGF0ZSA9IHNlbGYubGV2ZWwgaXMgbm90IE5vbmUgb3Igc2VsZi5sb2dfbGV2ZWwg aXMgbm90IE5vbmUgb3Igc2VsZi5wcmVmaXggaXMgbm90IE5vbmUgb3Igc2VsZi50ZXh0IGlzIG5v dCBOb25lCisgICovCisgICAgIF9fcHl4X3ZfdXNlX3NldHN0YXRlID0gMTsKKyAKKyAgICAgLyog Iih0cmVlIGZyYWdtZW50KSI6NworLSAqICAgICBzdGF0ZSA9IChzZWxmLmFyZzAsIHNlbGYudHlw ZSkKKysgKiAgICAgc3RhdGUgPSAoc2VsZi5sZXZlbCwgc2VsZi5sb2dfbGV2ZWwsIHNlbGYucHJl Zml4LCBzZWxmLnRleHQpCisgICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18n LCBOb25lKQorICAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKK0BAIC00MDE3LDE5ICs0 MjM0LDMzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzSW5wdXREaXNwYXRjaF9fX3JlZHVjZV9jeXRob25fCisgICAvKiAiKHRyZWUgZnJhZ21lbnQp IjoxMQorICAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorICAqICAgICBlbHNlOgorLSAq ICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5hcmcwIGlzIG5vdCBOb25lIG9yIHNlbGYudHlw ZSBpcyBub3QgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB1 c2Vfc2V0c3RhdGUgPSBzZWxmLmxldmVsIGlzIG5vdCBOb25lIG9yIHNlbGYubG9nX2xldmVsIGlz IG5vdCBOb25lIG9yIHNlbGYucHJlZml4IGlzIG5vdCBOb25lIG9yIHNlbGYudGV4dCBpcyBub3Qg Tm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGlmIHVzZV9zZXRzdGF0 ZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoLCAodHlw ZShzZWxmKSwgMHhiZjY0MWE5LCBOb25lKSwgc3RhdGUKKysgKiAgICAgICAgIHJldHVybiBfX3B5 eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlwZShzZWxmKSwgMHg4Nzc0ZmFlLCBOb25lKSwgc3Rh dGUKKyAgKi8KKyAgIC8qZWxzZSovIHsKKy0gICAgX19weXhfdF8yID0gKF9fcHl4X3Zfc2VsZi0+ YXJnMCAhPSBQeV9Ob25lKTsKKysgICAgX19weXhfdF8yID0gKF9fcHl4X3Zfc2VsZi0+bGV2ZWwg IT0gUHlfTm9uZSk7CisrICAgIF9fcHl4X3RfNSA9IChfX3B5eF90XzIgIT0gMCk7CisrICAgIGlm ICghX19weXhfdF81KSB7CisrICAgIH0gZWxzZSB7CisrICAgICAgX19weXhfdF8zID0gX19weXhf dF81OworKyAgICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworKyAgICB9CisrICAg IF9fcHl4X3RfNSA9IChfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCAhPSBQeV9Ob25lKTsKKysgICAg X19weXhfdF8yID0gKF9fcHl4X3RfNSAhPSAwKTsKKysgICAgaWYgKCFfX3B5eF90XzIpIHsKKysg ICAgfSBlbHNlIHsKKysgICAgICBfX3B5eF90XzMgPSBfX3B5eF90XzI7CisrICAgICAgZ290byBf X3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU7CisrICAgIH0KKysgICAgX19weXhfdF8yID0gKF9fcHl4 X3Zfc2VsZi0+cHJlZml4ICE9IFB5X05vbmUpOworICAgICBfX3B5eF90XzUgPSAoX19weXhfdF8y ICE9IDApOworICAgICBpZiAoIV9fcHl4X3RfNSkgeworICAgICB9IGVsc2UgeworICAgICAgIF9f cHl4X3RfMyA9IF9fcHl4X3RfNTsKKyAgICAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9u ZTsKKyAgICAgfQorLSAgICBfX3B5eF90XzUgPSAoX19weXhfdl9zZWxmLT50eXBlICE9IFB5X05v bmUpOworKyAgICBfX3B5eF90XzUgPSAoX19weXhfdl9zZWxmLT50ZXh0ICE9IFB5X05vbmUpOwor ICAgICBfX3B5eF90XzIgPSAoX19weXhfdF81ICE9IDApOworICAgICBfX3B5eF90XzMgPSBfX3B5 eF90XzI7CisgICAgIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7CitAQCAtNDAzOSwzMiArNDI3 MCwzMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M0lucHV0RGlzcGF0Y2hfX19yZWR1Y2VfY3l0aG9uXworIAorICAgLyogIih0cmVlIGZyYWdtZW50 KSI6MTIKKyAgKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuYXJn MCBpcyBub3QgTm9uZSBvciBzZWxmLnR5cGUgaXMgbm90IE5vbmUKKysgKiAgICAgICAgIHVzZV9z ZXRzdGF0ZSA9IHNlbGYubGV2ZWwgaXMgbm90IE5vbmUgb3Igc2VsZi5sb2dfbGV2ZWwgaXMgbm90 IE5vbmUgb3Igc2VsZi5wcmVmaXggaXMgbm90IE5vbmUgb3Igc2VsZi50ZXh0IGlzIG5vdCBOb25l CisgICogICAgIGlmIHVzZV9zZXRzdGF0ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2gsICh0eXBlKHNl bGYpLCAweGJmNjQxYTksIE5vbmUpLCBzdGF0ZQorKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3Vu cGlja2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIE5vbmUpLCBzdGF0ZQor ICAqICAgICBlbHNlOgorICAqLworICAgX19weXhfdF8zID0gKF9fcHl4X3ZfdXNlX3NldHN0YXRl ICE9IDApOworICAgaWYgKF9fcHl4X3RfMykgeworIAorICAgICAvKiAiKHRyZWUgZnJhZ21lbnQp IjoxMworLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5hcmcwIGlzIG5vdCBOb25lIG9y IHNlbGYudHlwZSBpcyBub3QgTm9uZQorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5s ZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLmxvZ19sZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLnBy ZWZpeCBpcyBub3QgTm9uZSBvciBzZWxmLnRleHQgaXMgbm90IE5vbmUKKyAgKiAgICAgaWYgdXNl X3NldHN0YXRlOgorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0 Y2gsICh0eXBlKHNlbGYpLCAweGJmNjQxYTksIE5vbmUpLCBzdGF0ZSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2Fn ZSwgKHR5cGUoc2VsZiksIDB4ODc3NGZhZSwgTm9uZSksIHN0YXRlICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBp Y2tsZV9JbnB1dERpc3BhdGNoLCAodHlwZShzZWxmKSwgMHhiZjY0MWE5LCBzdGF0ZSkKKysgKiAg ICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlwZShzZWxmKSwgMHg4 Nzc0ZmFlLCBzdGF0ZSkKKyAgKi8KKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAg X19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19weXhfdW5waWNr bGVfSW5wdXREaXNwYXRjaCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEs IDEzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5 eF90XzQsIF9fcHl4X25fc19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSk7IGlmICh1bmxpa2VseSgh X19weXhfdF80KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNCk7CisgICAgIF9fcHl4X3RfMSA9IFB5VHVwbGVfTmV3KDMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCisg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9JTkNSRUYoKChQeU9iamVj dCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7CisgICAgIF9fUHl4X0dJ VkVSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7 CisgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCAoKFB5T2JqZWN0ICopUHlfVFlQ RSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4 X2ludF8yMDA2ODgwNDEpOworLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X2ludF8yMDA2ODgwNDEp OworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMSwgX19weXhfaW50XzIwMDY4ODA0 MSk7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMTQyMDM2OTEwKTsKKysgICAgX19QeXhf R0lWRVJFRihfX3B5eF9pbnRfMTQyMDM2OTEwKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5 eF90XzEsIDEsIF9fcHl4X2ludF8xNDIwMzY5MTApOworICAgICBfX1B5eF9JTkNSRUYoUHlfTm9u ZSk7CisgICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CisgICAgIFB5VHVwbGVfU0VUX0lURU0o X19weXhfdF8xLCAyLCBQeV9Ob25lKTsKK0BAIC00MDg1LDMyICs0MzE2LDMyIEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9f X3JlZHVjZV9jeXRob25fCisgCisgICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjEyCisgICogICAg IGVsc2U6CistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxmLmFyZzAgaXMgbm90IE5vbmUg b3Igc2VsZi50eXBlIGlzIG5vdCBOb25lCisrICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxm LmxldmVsIGlzIG5vdCBOb25lIG9yIHNlbGYubG9nX2xldmVsIGlzIG5vdCBOb25lIG9yIHNlbGYu cHJlZml4IGlzIG5vdCBOb25lIG9yIHNlbGYudGV4dCBpcyBub3QgTm9uZQorICAqICAgICBpZiB1 c2Vfc2V0c3RhdGU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHJl dHVybiBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoLCAodHlwZShzZWxmKSwgMHhiZjY0MWE5 LCBOb25lKSwgc3RhdGUKKysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNz YWdlLCAodHlwZShzZWxmKSwgMHg4Nzc0ZmFlLCBOb25lKSwgc3RhdGUKKyAgKiAgICAgZWxzZToK KyAgKi8KKyAgIH0KKyAKKyAgIC8qICIodHJlZSBmcmFnbWVudCkiOjE1CistICogICAgICAgICBy ZXR1cm4gX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCwgKHR5cGUoc2VsZiksIDB4YmY2NDFh OSwgTm9uZSksIHN0YXRlCisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVz c2FnZSwgKHR5cGUoc2VsZiksIDB4ODc3NGZhZSwgTm9uZSksIHN0YXRlCisgICogICAgIGVsc2U6 CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCwgKHR5cGUo c2VsZiksIDB4YmY2NDFhOSwgc3RhdGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlwZShzZWxmKSwg MHg4Nzc0ZmFlLCBzdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIGRlZiBf X3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19weXhfdW5w aWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQorKyAqICAg ICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUp CisgICovCisgICAvKmVsc2UqLyB7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfcHl4X3VucGlj a2xlX0lucHV0RGlzcGF0Y2gpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigx LCAxNSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF82LCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxNSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworICAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygzKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQor ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgX19QeXhfSU5DUkVGKCgoUHlPYmpl Y3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworICAgICBfX1B5eF9H SVZFUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkp OworICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMCwgKChQeU9iamVjdCAqKVB5X1RZ UEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF9pbnRfMjAwNjg4MDQxKTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfMjAwNjg4MDQx KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4X2ludF8yMDA2ODgw NDEpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzE0MjAzNjkxMCk7CisrICAgIF9fUHl4 X0dJVkVSRUYoX19weXhfaW50XzE0MjAzNjkxMCk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19w eXhfdF8xLCAxLCBfX3B5eF9pbnRfMTQyMDM2OTEwKTsKKyAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3Zfc3RhdGUpOworICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc3RhdGUpOworICAgICBQeVR1 cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMiwgX19weXhfdl9zdGF0ZSk7CitAQCAtNDEzOCw3ICs0 MzY5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNJbnB1dERpc3BhdGNoX19fcmVkdWNlX2N5dGhvbl8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8xKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKyAgIF9fUHl4X1hERUNSRUYoX19w eXhfdF82KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LklucHV0 RGlzcGF0Y2guX19yZWR1Y2VfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8s IF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMu bXB2LkxvZ01lc3NhZ2UuX19yZWR1Y2VfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKyAgIF9fcHl4X3IgPSBOVUxMOworICAgX19weXhfTDA6 OworICAgX19QeXhfWERFQ1JFRihfX3B5eF92X3N0YXRlKTsKK0BAIC00MTUwLDI1ICs0MzgxLDI1 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5w dXREaXNwYXRjaF9fX3JlZHVjZV9jeXRob25fCisgCisgLyogIih0cmVlIGZyYWdtZW50KSI6MTYK KyAgKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9JbnB1dERp c3BhdGNoLCAodHlwZShzZWxmKSwgMHhiZjY0MWE5LCBzdGF0ZSkKKysgKiAgICAgICAgIHJldHVy biBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlwZShzZWxmKSwgMHg4Nzc0ZmFlLCBzdGF0 ZSkKKyAgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX19weXhfdW5waWNrbGVfSW5wdXREaXNw YXRjaF9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQorKyAqICAgICBfX3B5eF91bnBpY2ts ZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCisgICovCisgCisgLyog UHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKnByb3RvKi8K Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0 RGlzcGF0Y2hfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlP YmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfM19fc2V0c3RhdGVfY3l0aG9uX18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAv KnByb3RvKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9y ID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4 X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzJfX3Nl dHN0YXRlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf SW5wdXREaXNwYXRjaCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4 X3N0YXRlKSk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEw TG9nTWVzc2FnZV8yX19zZXRzdGF0ZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICop X19weXhfdl9fX3B5eF9zdGF0ZSkpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisg ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0K KyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lu cHV0RGlzcGF0Y2hfMl9fc2V0c3RhdGVfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF9zdGF0ZSkgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV8yX19zZXRzdGF0ZV9jeXRob25fXyhzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IE5V TEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4X3Rf MSA9IE5VTEw7CitAQCAtNDE3OCwyMCArNDQwOSwyMCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfMl9fc2V0c3RhdGVfY3l0 aAorICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18iLCAw KTsKKyAKKyAgIC8qICIodHJlZSBmcmFnbWVudCkiOjE3CistICogICAgICAgICByZXR1cm4gX19w eXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCwgKHR5cGUoc2VsZiksIDB4YmY2NDFhOSwgc3RhdGUp CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgKHR5cGUoc2Vs ZiksIDB4ODc3NGZhZSwgc3RhdGUpCisgICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwg X19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoX19zZXRf c3RhdGUoc2VsZiwgX19weXhfc3RhdGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0 YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICovCisgICBpZiAoIShsaWtlbHko UHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5eF92X19fcHl4 X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJFeHBl Y3RlZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZUEUoX19weXhfdl9fX3B5eF9z dGF0ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFfZXJyb3IpCist ICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2ts ZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUoX19weXhfdl9zZWxmLCAoKFB5T2JqZWN0KilfX3B5 eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEs IDE3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2X19fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZShfX3B5eF92X3Nl bGYsICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK KyAKKyAgIC8qICIodHJlZSBmcmFnbWVudCkiOjE2CisgICogICAgIGVsc2U6CistICogICAgICAg ICByZXR1cm4gX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCwgKHR5cGUoc2VsZiksIDB4YmY2 NDFhOSwgc3RhdGUpCisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2Fn ZSwgKHR5cGUoc2VsZiksIDB4ODc3NGZhZSwgc3RhdGUpCisgICogZGVmIF9fc2V0c3RhdGVfY3l0 aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZShzZWxmLCBfX3B5 eF9zdGF0ZSkKKysgKiAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKHNl bGYsIF9fcHl4X3N0YXRlKQorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCitA QCAtNDE5OSw3ICs0NDMwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzJfX3NldHN0YXRlX2N5dGgKKyAgIGdvdG8gX19w eXhfTDA7CisgICBfX3B5eF9MMV9lcnJvcjo7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5JbnB1dERpc3BhdGNo Ll9fc2V0c3RhdGVfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Lkxv Z01lc3NhZ2UuX19zZXRzdGF0ZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVu bywgX19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7Cisg ICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKK0BAIC00MjA3LDE0OTQgKzQ0MzgsMTY4NyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlz cGF0Y2hfMl9fc2V0c3RhdGVfY3l0aAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxODkKKy0gKiAgICAgY2RlZiBwdWJsaWMgb2Jq ZWN0IHByZWZpeCwgbGV2ZWwsIHRleHQsIGxvZ19sZXZlbAorKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxOTcKKyAgKiAKKy0gKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZl bnRfbG9nX21lc3NhZ2UqIG1zZyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgIHNlbGYubGV2ZWwgPSBfc3RyZGVjKG1zZy5sZXZlbCkKKy0gKiAgICAgICAgIHNlbGYu cHJlZml4ID0gX3N0cmRlYyhtc2cucHJlZml4KQorKyAqIAorKyAqIGNkZWYgX2NvbnZlcnRfbm9k ZV92YWx1ZShtcHZfbm9kZSBub2RlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKysgKiAgICAgICAgIHJl dHVybiBfc3RyZGVjKG5vZGUudS5zdHJpbmcpCisgICovCisgCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfX2luaXQoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmLCBz dHJ1Y3QgbXB2X2V2ZW50X2xvZ19tZXNzYWdlICpfX3B5eF92X21zZykgeworK3N0YXRpYyBQeU9i amVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShz dHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IE5V TEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4X3Rf MSA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKyAgIFB5T2JqZWN0ICpf X3B5eF90XzMgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CisrICBpbnQg X19weXhfdF81OworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5 eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX2luaXQiLCAwKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfY29udmVydF9ub2RlX3ZhbHVlIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTkwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTk4CisgICogCistICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X2xvZ19tZXNz YWdlKiBtc2cpOgorLSAqICAgICAgICAgc2VsZi5sZXZlbCA9IF9zdHJkZWMobXNnLmxldmVsKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLnByZWZpeCA9IF9z dHJkZWMobXNnLnByZWZpeCkKKy0gKiAgICAgICAgIHNlbGYudGV4dCA9IF9zdHJkZWMobXNnLnRl eHQpCistICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhf bl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDE5MCwg X19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3Rf MyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X21zZy0+bGV2ZWwpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxOTAsIF9fcHl4X0wxX2Vycm9yKQorLSAg X19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICBfX3B5eF90XzQgPSBOVUxMOworLSAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworLSAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAg ICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF80KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9fcHl4X3Rf MSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19w eXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIs IF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7 CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5MCwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5 eF90XzIgPSAwOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVG KF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+bGV2 ZWwpOworLSAgX19weXhfdl9zZWxmLT5sZXZlbCA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9 IDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTkxCistICogICAg IGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X2xvZ19tZXNzYWdlKiBtc2cpOgorLSAqICAgICAg ICAgc2VsZi5sZXZlbCA9IF9zdHJkZWMobXNnLmxldmVsKQorLSAqICAgICAgICAgc2VsZi5wcmVm aXggPSBfc3RyZGVjKG1zZy5wcmVmaXgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgIHNlbGYudGV4dCA9IF9zdHJkZWMobXNnLnRleHQpCistICogICAgICAgICBzZWxm LmxvZ19sZXZlbCA9IG1zZy5sb2dfbGV2ZWwKKysgKiBjZGVmIF9jb252ZXJ0X25vZGVfdmFsdWUo bXB2X25vZGUgbm9kZSk6CisrICogICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RS SU5HOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gX3N0 cmRlYyhub2RlLnUuc3RyaW5nKQorKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JN QVRfRkxBRzoKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBf X3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MTkxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19w eXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbXNnLT5wcmVmaXgpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxOTEsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICBfX3B5eF90XzQgPSBOVUxMOworLSAg aWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5 eF90XzIpKSkgeworLSAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIp OworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF80KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9f UHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9f cHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf MiwgX19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzIsIF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5MSwgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhf R09UUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3Nl bGYtPnByZWZpeCk7CistICBfX3B5eF92X3NlbGYtPnByZWZpeCA9IF9fcHl4X3RfMTsKKy0gIF9f cHl4X3RfMSA9IDA7CisrICBzd2l0Y2ggKF9fcHl4X3Zfbm9kZS5mb3JtYXQpIHsKKysgICAgY2Fz ZSBNUFZfRk9STUFUX1NUUklORzoKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxOTIKKy0gKiAgICAgICAgIHNlbGYubGV2ZWwgPSBfc3RyZGVjKG1zZy5sZXZlbCkKKy0g KiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0cmRlYyhtc2cucHJlZml4KQorLSAqICAgICAgICAg c2VsZi50ZXh0ID0gX3N0cmRlYyhtc2cudGV4dCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBtc2cubG9nX2xldmVsCistICogICAgICAg ICByZXR1cm4gc2VsZgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTk5 CisrICogY2RlZiBfY29udmVydF9ub2RlX3ZhbHVlKG1wdl9ub2RlIG5vZGUpOgorKyAqICAgICBp ZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKysgKiAgICAgICAgIHJldHVybiBf c3RyZGVjKG5vZGUudS5zdHJpbmcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CisrICogICAgICAgICByZXR1 cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9i YWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDE5MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYo X19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5 eF92X21zZy0+dGV4dCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDE5 MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fcHl4 X3RfNCA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfMik7CistICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgeworLSAgICAg IFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwor LSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKysg ICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCAxOTksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKysgICAgX19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4 X3Zfbm9kZS51LnN0cmluZyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDE5OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAg ICBfX3B5eF90XzQgPSBOVUxMOworKyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVu bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAgICAgX19weXhfdF80ID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NCkpIHsKKysgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElP TihfX3B5eF90XzIpOworKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7CisrICAgICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzIsIGZ1bmN0aW9uKTsKKysgICAgICB9CisgICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfMSA9 IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhf dF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9f cHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Cist ICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVGKF9f cHl4X3Zfc2VsZi0+dGV4dCk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT50ZXh0KTsK Ky0gIF9fcHl4X3Zfc2VsZi0+dGV4dCA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7Cisr ICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7CisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5OSwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgX19weXhfciA9IF9fcHl4X3Rf MTsKKysgICAgX19weXhfdF8xID0gMDsKKysgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTMKKy0gKiAgICAgICAgIHNlbGYucHJlZml4 ID0gX3N0cmRlYyhtc2cucHJlZml4KQorLSAqICAgICAgICAgc2VsZi50ZXh0ID0gX3N0cmRlYyht c2cudGV4dCkKKy0gKiAgICAgICAgIHNlbGYubG9nX2xldmVsID0gbXNnLmxvZ19sZXZlbCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1cm4gc2VsZgorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTk4CisgICogCisrICogY2RlZiBfY29u dmVydF9ub2RlX3ZhbHVlKG1wdl9ub2RlIG5vZGUpOgorKyAqICAgICBpZiBub2RlLmZvcm1hdCA9 PSBNUFZfRk9STUFUX1NUUklORzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgcmV0dXJuIF9zdHJkZWMobm9kZS51LnN0cmluZykKKysgKiAgICAgZWxpZiBub2RlLmZv cm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeUlu dF9Gcm9tX2ludChfX3B5eF92X21zZy0+bG9nX2xldmVsKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMTkzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVG KF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYt PmxvZ19sZXZlbCk7CistICBfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCA9IF9fcHl4X3RfMTsKKy0g IF9fcHl4X3RfMSA9IDA7CisrICAgIGJyZWFrOworKyAgICBjYXNlIE1QVl9GT1JNQVRfRkxBRzoK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTQKKy0gKiAgICAgICAg IHNlbGYudGV4dCA9IF9zdHJkZWMobXNnLnRleHQpCistICogICAgICAgICBzZWxmLmxvZ19sZXZl bCA9IG1zZy5sb2dfbGV2ZWwKKy0gKiAgICAgICAgIHJldHVybiBzZWxmICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjIwMQorKyAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobm9kZS51LnN0cmluZykK KysgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CisrICogICAgICAg ICByZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorKyAq ICAgICAgICAgcmV0dXJuIGludChub2RlLnUuaW50NjQpCisgICovCistICBfX1B5eF9YREVDUkVG KF9fcHl4X3IpOworLSAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsK Ky0gIF9fcHl4X3IgPSAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKTsKKy0gIGdvdG8gX19weXhf TDA7CisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICAgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5SW50X0Zyb21faW50KF9fcHl4X3Zfbm9kZS51LmZsYWcpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAyMDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZygoKFB5T2JqZWN0ICopKCZQeUludF9UeXBlKSksIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDIwMSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKysgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Rf Mik7IGlmICh1bmxpa2VseShfX3B5eF90XzUgPCAwKSkgX19QWVhfRVJSKDAsIDIwMSwgX19weXhf TDFfZXJyb3IpCisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor KyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoKCFfX3B5eF90XzUpICE9 IDApKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDIwMSwgX19weXhf TDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX3B5eF9yID0g X19weXhfdF8yOworKyAgICBfX3B5eF90XzIgPSAwOworKyAgICBnb3RvIF9fcHl4X0wwOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE4OQorLSAqICAgICBjZGVmIHB1 YmxpYyBvYmplY3QgcHJlZml4LCBsZXZlbCwgdGV4dCwgbG9nX2xldmVsCistICogCistICogICAg IGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X2xvZ19tZXNzYWdlKiBtc2cpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmxldmVsID0gX3N0cmRlYyhtc2cu bGV2ZWwpCistICogICAgICAgICBzZWxmLnByZWZpeCA9IF9zdHJkZWMobXNnLnByZWZpeCkKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMAorKyAqICAgICBpZiBub2Rl LmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKysgKiAgICAgICAgIHJldHVybiBfc3RyZGVj KG5vZGUudS5zdHJpbmcpCisrICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9G TEFHOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gbm90 IG5vdCBpbnQobm9kZS51LmZsYWcpCisrICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZP Uk1BVF9JTlQ2NDoKKyAgKi8KKysgICAgYnJlYWs7CisrICAgIGNhc2UgTVBWX0ZPUk1BVF9JTlQ2 NDoKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfTDFfZXJyb3I6Owor LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzQpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuTG9nTWVzc2Fn ZS5faW5pdCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwor LSAgX19weXhfciA9IDA7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9y KTsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7 CistfQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjAzCisrICogICAg ICAgICByZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpCisrICogICAgIGVsaWYgbm9kZS5m b3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKysgKiAgICAgICAgIHJldHVybiBpbnQobm9kZS51 LmludDY0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGVsaWYgbm9kZS5m b3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisrICogICAgICAgICByZXR1cm4gZmxvYXQobm9k ZS51LmRvdWJsZV8pCisrICovCisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICAgIF9f cHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRfdChfX3B5eF92X25vZGUudS5pbnQ2NCk7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDIwMywgX19weXhfTDFfZXJy b3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX3B5eF90XzEgPSBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKCgoUHlPYmplY3QgKikoJlB5SW50X1R5cGUpKSwgX19weXhf dF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjAzLCBfX3B5eF9M MV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX3B5eF9yID0gX19weXhfdF8xOwor KyAgICBfX3B5eF90XzEgPSAwOworKyAgICBnb3RvIF9fcHl4X0wwOworIAorLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxODcKKy0gKiAgICAgV3JhcHM6IG1wdl9ldmVudF9sb2df bWVzc2FnZQorLSAqICAgICAiIiIKKy0gKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHByZWZpeCwg bGV2ZWwsIHRleHQsIGxvZ19sZXZlbCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog CistICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X2xvZ19tZXNzYWdlKiBtc2cpOgor KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjAyCisrICogICAgIGVsaWYg bm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgorKyAqICAgICAgICAgcmV0dXJuIG5vdCBu b3QgaW50KG5vZGUudS5mbGFnKQorKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JN QVRfSU5UNjQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHJldHVy biBpbnQobm9kZS51LmludDY0KQorKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JN QVRfRE9VQkxFOgorICAqLworKyAgICBicmVhazsKKysgICAgY2FzZSBNUFZfRk9STUFUX0RPVUJM RToKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzFfX2dldF9fKFB5T2Jq ZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8xX19nZXRfXyhQeU9i amVjdCAqX19weXhfdl9zZWxmKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f Z2V0X18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4X19fZ2V0X18oKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19weXhfdl9zZWxmKSk7CistCist ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4X19fZ2V0X18oc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9z ZWxmKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CistICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsK Ky0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxm LT5wcmVmaXgpOworLSAgX19weXhfciA9IF9fcHl4X3Zfc2VsZi0+cHJlZml4OworLSAgZ290byBf X3B5eF9MMDsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfTDA6Owor LSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRl eHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjIwNQorKyAqICAgICAgICAgcmV0dXJuIGludChub2RlLnUuaW50NjQpCisr ICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisrICogICAgICAg ICByZXR1cm4gZmxvYXQobm9kZS51LmRvdWJsZV8pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorKyAq ICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkK KysgKi8KKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19weXhfdF8xID0gUHlG bG9hdF9Gcm9tRG91YmxlKF9fcHl4X3Zfbm9kZS51LmRvdWJsZV8pOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKysgICAgX19weXhfciA9IF9fcHl4X3RfMTsKKysgICAgX19weXhf dF8xID0gMDsKKysgICAgZ290byBfX3B5eF9MMDsKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLwor LXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82 cHJlZml4XzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X3ZhbHVlKTsgLypwcm90byovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVmaXhfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKKy0gIGludCBfX3B5eF9yOworLSAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3Nl dF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpLCAoKFB5T2Jq ZWN0ICopX19weXhfdl92YWx1ZSkpOworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjA0CisrICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoK KysgKiAgICAgICAgIHJldHVybiBpbnQobm9kZS51LmludDY0KQorKyAqICAgICBlbGlmIG5vZGUu Zm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICByZXR1cm4gZmxvYXQobm9kZS51LmRvdWJsZV8pCisrICogICAgIGVsaWYg bm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKysgKi8KKysgICAgYnJlYWs7Cisr ICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX01BUDoKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhf cjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMDcKKysgKiAg ICAgICAgIHJldHVybiBmbG9hdChub2RlLnUuZG91YmxlXykKKysgKiAgICAgZWxpZiBub2RlLmZv cm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorKyAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0 X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToK KysgKiAgICAgICAgIHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3Jt YXQpCisrICovCisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICAgIF9fcHl4X3RfMSA9 IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKF9fcHl4X3Zfbm9k ZS51Lmxpc3QsIF9fcHl4X3Zfbm9kZS5mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAyMDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKysgICAgX19weXhfciA9IF9fcHl4X3RfMTsKKysgICAgX19weXhfdF8xID0gMDsK KysgICAgZ290byBfX3B5eF9MMDsKKyAKKy1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X3ZhbHVlKSB7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55RGVj bGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOwor LSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWUpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF92 X3ZhbHVlKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnByZWZpeCk7CistICBfX1B5 eF9ERUNSRUYoX19weXhfdl9zZWxmLT5wcmVmaXgpOworLSAgX19weXhfdl9zZWxmLT5wcmVmaXgg PSBfX3B5eF92X3ZhbHVlOworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MjA2CisrICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisrICog ICAgICAgICByZXR1cm4gZmxvYXQobm9kZS51LmRvdWJsZV8pCisrICogICAgIGVsaWYgbm9kZS5m b3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZv cm1hdCkKKysgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6 CisrICovCisrICAgIGJyZWFrOworKyAgICBjYXNlIE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKKyAK Ky0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IDA7CistICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwOQorKyAqICAgICAgICAgcmV0dXJuIF9j b252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkKKysgKiAgICAgZWxpZiBub2Rl LmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6CisrICogICAgICAgICByZXR1cm4gX2Nv bnZlcnRfdmFsdWUobm9kZS51Lmxpc3QsIG5vZGUuZm9ybWF0KSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgIHJldHVybiBOb25lCisrICogCisrICovCisrICAgIF9fUHl4X1hE RUNSRUYoX19weXhfcik7CisrICAgIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2X19jb252ZXJ0X3ZhbHVlKF9fcHl4X3Zfbm9kZS51Lmxpc3QsIF9fcHl4X3Zfbm9kZS5m b3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMDksIF9fcHl4 X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19weXhfciA9 IF9fcHl4X3RfMTsKKysgICAgX19weXhfdF8xID0gMDsKKysgICAgZ290byBfX3B5eF9MMDsKKyAK Ky0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxm KSB7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyAod3JhcHBlcikiLCAwKTsKKy0gIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVm aXhfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlICopX19weXhfdl9zZWxmKSk7CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyMDgKKysgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVf TUFQOgorKyAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2Rl LmZvcm1hdCkKKysgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJS QVk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHJldHVybiBfY29u dmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCisrICogICAgIHJldHVybiBOb25l CisrICovCisrICAgIGJyZWFrOworKyAgICBkZWZhdWx0OiBicmVhazsKKysgIH0KKyAKKy0gIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 CistICByZXR1cm4gX19weXhfcjsKKy19CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjEwCisrICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FS UkFZOgorKyAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2Rl LmZvcm1hdCkKKysgKiAgICAgcmV0dXJuIE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqIAorKyAqIAorKyAqLworKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgIF9fcHl4 X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOwor IAorLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2Fn ZV82cHJlZml4XzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0xvZ01lc3NhZ2UgKl9fcHl4X3Zfc2VsZikgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVs X18iLCAwKTsKKy0gIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gIF9fUHl4X0dJVkVSRUYoUHlf Tm9uZSk7CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5wcmVmaXgpOworLSAgX19QeXhf REVDUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKKy0gIF9fcHl4X3Zfc2VsZi0+cHJlZml4ID0g UHlfTm9uZTsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTcKKysgKiAK KysgKiAKKysgKiBjZGVmIF9jb252ZXJ0X25vZGVfdmFsdWUobXB2X25vZGUgbm9kZSk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZP Uk1BVF9TVFJJTkc6CisrICogICAgICAgICByZXR1cm4gX3N0cmRlYyhub2RlLnUuc3RyaW5nKQor KyAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7 CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Mik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNCk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fY29udmVy dF9ub2RlX3ZhbHVlIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFt ZSk7CisgICBfX3B5eF9yID0gMDsKKysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzFfX2dldF9f KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzFfX2dldF9f KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0g IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF9fX2dldF9fKCgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZikpOwor LQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjEzCisrICogCisrICogCisrICogY2RlZiBfY29udmVydF92YWx1ZSh2b2lk KiBkYXRhLCBtcHZfZm9ybWF0IGZvcm1hdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgY2RlZiBtcHZfbm9kZSBub2RlCisrICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCBu b2RlbGlzdAorKyAqLworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYpIHsKKytzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKHZv aWQgKl9fcHl4X3ZfZGF0YSwgZW51bSBtcHZfZm9ybWF0IF9fcHl4X3ZfZm9ybWF0KSB7CisrICBz dHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlOworKyAgc3RydWN0IG1wdl9ub2RlX2xpc3QgX19w eXhfdl9ub2RlbGlzdDsKKysgIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlcyA9IE5VTEw7CisrICBp bnQgX19weXhfdl9pOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUgPSBOVUxMOworICAgUHlP YmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0g IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7CistICBfX1B5eF9YREVD UkVGKF9fcHl4X3IpOworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOworLSAg X19weXhfciA9IF9fcHl4X3Zfc2VsZi0+bGV2ZWw7CistICBnb3RvIF9fcHl4X0wwOworKyAgUHlP YmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisrICBpbnQgX19weXhfdF8yOworKyAgaW50IF9fcHl4 X3RfMzsKKysgIGludCBfX3B5eF90XzQ7CisrICBpbnQgX19weXhfdF81OworKyAgUHlPYmplY3Qg Kl9fcHl4X3RfNiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKKysgIFB5 T2JqZWN0ICpfX3B5eF90XzggPSBOVUxMOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBj b25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9 IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2NvbnZlcnRfdmFsdWUiLCAwKTsK KyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfTDA6OworLSAgX19QeXhf WEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0g IHJldHVybiBfX3B5eF9yOworLX0KKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyMTYKKysgKiAgICAgY2RlZiBtcHZfbm9kZSBub2RlCisrICogICAgIGNkZWYgbXB2X25vZGVf bGlzdCBub2RlbGlzdAorKyAqICAgICBpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBub2RlID0gKDxtcHZfbm9kZSo+ ZGF0YSlbMF0KKysgKiAgICAgICAgIHJldHVybiBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGUpCisr ICovCisrICBzd2l0Y2ggKF9fcHl4X3ZfZm9ybWF0KSB7CisrICAgIGNhc2UgTVBWX0ZPUk1BVF9O T0RFOgorIAorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIGludCBfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8zX19zZXRfXyhQeU9iamVjdCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qcHJvdG8qLworLXN0YXRp YyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxf M19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUp IHsKKy0gIGludCBfX3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fICh3cmFwcGVyKSIsIDApOworLSAgX19w eXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVs XzJfX3NldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVz c2FnZSAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVlKSk7CisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTcKKysgKiAgICAgY2RlZiBtcHZf bm9kZV9saXN0IG5vZGVsaXN0CisrICogICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREU6 CisrICogICAgICAgICBub2RlID0gKDxtcHZfbm9kZSo+ZGF0YSlbMF0gICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9k ZSkKKysgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorKyAqLwor KyAgICBfX3B5eF92X25vZGUgPSAoKChzdHJ1Y3QgbXB2X25vZGUgKilfX3B5eF92X2RhdGEpWzBd KTsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyMTgKKysgKiAgICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRf Tk9ERToKKysgKiAgICAgICAgIG5vZGUgPSAoPG1wdl9ub2RlKj5kYXRhKVswXQorKyAqICAgICAg ICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6Cisr ICogICAgICAgICBub2RlbGlzdCA9ICg8bXB2X25vZGVfbGlzdCo+ZGF0YSlbMF0KKysgKi8KKysg ICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19weXhfdF8xID0gX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShfX3B5eF92X25vZGUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMTgsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19weXhfciA9IF9fcHl4X3RfMTsK KysgICAgX19weXhfdF8xID0gMDsKKysgICAgZ290byBfX3B5eF9MMDsKKyAKKy1zdGF0aWMgaW50 IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzJfX3Nl dF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKKy0gIGludCBfX3B5eF9yOwor LSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfX3NldF9fIiwgMCk7CistICBfX1B5eF9JTkNSRUYoX19weXhfdl92YWx1ZSk7CistICBf X1B5eF9HSVZFUkVGKF9fcHl4X3ZfdmFsdWUpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2Vs Zi0+bGV2ZWwpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOworLSAgX19w eXhfdl9zZWxmLT5sZXZlbCA9IF9fcHl4X3ZfdmFsdWU7CisrICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoyMTYKKysgKiAgICAgY2RlZiBtcHZfbm9kZSBub2RlCisrICogICAg IGNkZWYgbXB2X25vZGVfbGlzdCBub2RlbGlzdAorKyAqICAgICBpZiBmb3JtYXQgPT0gTVBWX0ZP Uk1BVF9OT0RFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBub2Rl ID0gKDxtcHZfbm9kZSo+ZGF0YSlbMF0KKysgKiAgICAgICAgIHJldHVybiBfY29udmVydF9ub2Rl X3ZhbHVlKG5vZGUpCisrICovCisrICAgIGJyZWFrOworKyAgICBjYXNlIE1QVl9GT1JNQVRfTk9E RV9BUlJBWToKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IDA7 CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOwor LX0KKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyMAorKyAqICAgICAg ICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZSkKKysgKiAgICAgZWxpZiBmb3JtYXQg PT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorKyAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9u b2RlX2xpc3QqPmRhdGEpWzBdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgIHZhbHVlcyA9IFtdCisrICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0p OgorKyAqLworKyAgICBfX3B5eF92X25vZGVsaXN0ID0gKCgoc3RydWN0IG1wdl9ub2RlX2xpc3Qg KilfX3B5eF92X2RhdGEpWzBdKTsKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBp bnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfNV9f ZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0YXRpYyBpbnQgX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfNV9fZGVsX18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18g KHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19weXhfdl9zZWxmKSk7CisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjEKKysgKiAgICAgZWxpZiBmb3JtYXQgPT0g TVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorKyAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2Rl X2xpc3QqPmRhdGEpWzBdCisrICogICAgICAgICB2YWx1ZXMgPSBbXSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOgor KyAqICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlz dC52YWx1ZXNbaV0pKQorKyAqLworKyAgICBfX3B5eF90XzEgPSBQeUxpc3RfTmV3KDApOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjEsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19weXhfdl92YWx1ZXMgPSBfX3B5 eF90XzE7CisrICAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7 CistfQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjIyCisrICogICAg ICAgICBub2RlbGlzdCA9ICg8bXB2X25vZGVfbGlzdCo+ZGF0YSlbMF0KKysgKiAgICAgICAgIHZh bHVlcyA9IFtdCisrICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChf Y29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkpCisrICogICAgICAgICByZXR1 cm4gdmFsdWVzCisrICovCisrICAgIF9fcHl4X3RfMiA9IF9fcHl4X3Zfbm9kZWxpc3QubnVtOwor KyAgICBfX3B5eF90XzMgPSBfX3B5eF90XzI7CisrICAgIGZvciAoX19weXhfdF80ID0gMDsgX19w eXhfdF80IDwgX19weXhfdF8zOyBfX3B5eF90XzQrPTEpIHsKKysgICAgICBfX3B5eF92X2kgPSBf X3B5eF90XzQ7CisgCistc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTBMb2dNZXNzYWdlXzVsZXZlbF80X19kZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYpIHsKKy0gIGludCBfX3B5eF9yOwor LSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfX2RlbF9fIiwgMCk7CistICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBfX1B5eF9H SVZFUkVGKFB5X05vbmUpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOwor LSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOworLSAgX19weXhfdl9zZWxmLT5s ZXZlbCA9IFB5X05vbmU7CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjIyMworKyAqICAgICAgICAgdmFsdWVzID0gW10KKysgKiAgICAgICAgIGZvciBpIGluIHJhbmdl KG5vZGVsaXN0Lm51bSk6CisrICogICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChfY29udmVydF9u b2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgIHJldHVybiB2YWx1ZXMKKysgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBW X0ZPUk1BVF9OT0RFX01BUDoKKysgKi8KKysgICAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKChfX3B5eF92X25vZGVsaXN0LnZh bHVlc1tfX3B5eF92X2ldKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDIyMywgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Cisr ICAgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfQXBwZW5kKF9fcHl4X3ZfdmFsdWVzLCBf X3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF81ID09ICgoaW50KS0xKSkpIF9fUFlYX0VS UigwLCAyMjMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEp OyBfX3B5eF90XzEgPSAwOworKyAgICB9CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K Ky0gIF9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICBy ZXR1cm4gX19weXhfcjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyMjQKKysgKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51bSk6CisrICogICAg ICAgICAgICAgdmFsdWVzLmFwcGVuZChfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVl c1tpXSkpCisrICogICAgICAgICByZXR1cm4gdmFsdWVzICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKysgKiAg ICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXQorKyAqLworKyAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdl92YWx1ZXMp OworKyAgICBfX3B5eF9yID0gX19weXhfdl92YWx1ZXM7CisrICAgIGdvdG8gX19weXhfTDA7Cisg CistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNHRleHRfMV9fZ2V0X18oUHlPYmplY3QgKl9f cHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF8xX19nZXRfXyhQeU9iamVjdCAqX19w eXhfdl9zZWxmKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdy YXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEwTG9nTWVzc2FnZV80dGV4dF9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZikpOworKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjE5CisrICogICAgICAgICBub2RlID0gKDxtcHZfbm9k ZSo+ZGF0YSlbMF0KKysgKiAgICAgICAgIHJldHVybiBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGUp CisrICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xp c3QqPmRhdGEpWzBdCisrICogICAgICAgICB2YWx1ZXMgPSBbXQorKyAqLworKyAgICBicmVhazsK KysgICAgY2FzZSBNUFZfRk9STUFUX05PREVfTUFQOgorIAorLSAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5 eF9yOworLX0KKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNgorKyAq ICAgICAgICAgcmV0dXJuIHZhbHVlcworKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X05PREVfTUFQOgorKyAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEp WzBdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHZhbHVlcyA9IHt9 CisrICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOgorKyAqLworKyAgICBf X3B5eF92X25vZGVsaXN0ID0gKCgoc3RydWN0IG1wdl9ub2RlX2xpc3QgKilfX3B5eF92X2RhdGEp WzBdKTsKKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfNHRleHRfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5T2JqZWN0ICpfX3B5 eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPnRleHQpOworLSAgX19weXhfciA9IF9f cHl4X3Zfc2VsZi0+dGV4dDsKKy0gIGdvdG8gX19weXhfTDA7CisrICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyMjcKKysgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1B VF9OT0RFX01BUDoKKysgKiAgICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRh KVswXQorKyAqICAgICAgICAgdmFsdWVzID0ge30gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKToKKysgKiAgICAgICAg ICAgICB2YWx1ZSA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZWxpc3QudmFsdWVzW2ldKQorKyAq LworKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeURpY3RfTmV3UHJlc2l6ZWQoMCk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIyNywgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX3B5eF92X3ZhbHVlcyA9IF9fcHl4X3Rf MTsKKysgICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor LSAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyOAorKyAqICAgICAgICAgbm9kZWxpc3QgPSAo PG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCisrICogICAgICAgICB2YWx1ZXMgPSB7fQorKyAqICAg ICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2Rl bGlzdC52YWx1ZXNbaV0pCisrICogICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMobm9kZWxpc3Qu a2V5c1tpXSldID0gdmFsdWUKKysgKi8KKysgICAgX19weXhfdF8yID0gX19weXhfdl9ub2RlbGlz dC5udW07CisrICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfMjsKKysgICAgZm9yIChfX3B5eF90XzQg PSAwOyBfX3B5eF90XzQgPCBfX3B5eF90XzM7IF9fcHl4X3RfNCs9MSkgeworKyAgICAgIF9fcHl4 X3ZfaSA9IF9fcHl4X3RfNDsKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBpbnQg X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF8zX19zZXRf XyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qcHJv dG8qLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVz c2FnZV80dGV4dF8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl92YWx1ZSkgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18gKHdyYXBwZXIpIiwg MCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVz c2FnZV80dGV4dF8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1 ZSkpOworKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjkKKysgKiAg ICAgICAgIHZhbHVlcyA9IHt9CisrICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5u dW0pOgorKyAqICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlz dC52YWx1ZXNbaV0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICB2YWx1ZXNbX3N0cmRlYyhub2RlbGlzdC5rZXlzW2ldKV0gPSB2YWx1ZQorKyAqICAgICAgICAg cmV0dXJuIHZhbHVlcworKyAqLworKyAgICAgIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoKF9fcHl4X3Zfbm9kZWxpc3QudmFsdWVz W19fcHl4X3ZfaV0pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjI5 LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAg ICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzEpOworKyAgICAgIF9f cHl4X3RfMSA9IDA7CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1Jl Zk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMzAKKysgKiAgICAgICAgIGZvciBpIGlu IHJhbmdlKG5vZGVsaXN0Lm51bSk6CisrICogICAgICAgICAgICAgdmFsdWUgPSBfY29udmVydF9u b2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkKKysgKiAgICAgICAgICAgICB2YWx1ZXNbX3N0 cmRlYyhub2RlbGlzdC5rZXlzW2ldKV0gPSB2YWx1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICByZXR1cm4gdmFsdWVzCisrICogICAgIGVsaWYgZm9ybWF0ID09IE1Q Vl9GT1JNQVRfU1RSSU5HOgorKyAqLworKyAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF82LCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgMjMwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKKysgICAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoKF9f cHl4X3Zfbm9kZWxpc3Qua2V5c1tfX3B5eF92X2ldKSk7IGlmICh1bmxpa2VseSghX19weXhfdF83 KSkgX19QWVhfRVJSKDAsIDIzMCwgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNyk7CisrICAgICAgX19weXhfdF84ID0gTlVMTDsKKysgICAgICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7 CisrICAgICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOworKyAg ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzgpKSB7CisrICAgICAgICAgIFB5T2JqZWN0KiBmdW5j dGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYpOworKyAgICAgICAgICBfX1B5 eF9JTkNSRUYoX19weXhfdF84KTsKKysgICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsK KysgICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1bmN0aW9uKTsKKysgICAg ICAgIH0KKysgICAgICB9CisrICAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfOCkgPyBfX1B5eF9Q eU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzgsIF9fcHl4X3RfNykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF83KTsKKysgICAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7CisrICAgICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisrICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMjMwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKysgICAgICBpZiAodW5saWtlbHkoUHlPYmplY3RfU2V0SXRlbShfX3B5eF92X3ZhbHVl cywgX19weXhfdF8xLCBfX3B5eF92X3ZhbHVlKSA8IDApKSBfX1BZWF9FUlIoMCwgMjMwLCBfX3B5 eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKysgICAgfQorIAorLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEwTG9nTWVzc2FnZV80dGV4dF8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Zh bHVlKSB7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOworLSAgX19QeXhfSU5D UkVGKF9fcHl4X3ZfdmFsdWUpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3ZhbHVlKTsKKy0g IF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnRleHQpOworLSAgX19QeXhfREVDUkVGKF9fcHl4 X3Zfc2VsZi0+dGV4dCk7CistICBfX3B5eF92X3NlbGYtPnRleHQgPSBfX3B5eF92X3ZhbHVlOwor KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjMxCisrICogICAgICAgICAg ICAgdmFsdWUgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkKKysgKiAg ICAgICAgICAgICB2YWx1ZXNbX3N0cmRlYyhub2RlbGlzdC5rZXlzW2ldKV0gPSB2YWx1ZQorKyAq ICAgICAgICAgcmV0dXJuIHZhbHVlcyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgorKyAqICAgICAgICAgcmV0dXJu IF9zdHJkZWMoKCg8Y2hhcioqPmRhdGEpWzBdKSkKKysgKi8KKysgICAgX19QeXhfWERFQ1JFRihf X3B5eF9yKTsKKysgICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWVzKTsKKysgICAgX19weXhf ciA9IF9fcHl4X3ZfdmFsdWVzOworKyAgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjI1CisrICogICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChfY29u dmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkpCisrICogICAgICAgICByZXR1cm4g dmFsdWVzCisrICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9k ZV9saXN0Kj5kYXRhKVswXQorKyAqICAgICAgICAgdmFsdWVzID0ge30KKysgKi8KKysgICAgYnJl YWs7CisrICAgIGNhc2UgTVBWX0ZPUk1BVF9TVFJJTkc6CisgCistLyogUHl0aG9uIHdyYXBwZXIg Ki8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfNHRleHRfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0 YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4 dF81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CistICBpbnQgX19weXhfcjsKKy0g IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiX19kZWxfXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0XzRfX2RlbF9fKCgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3Zfc2VsZikpOwor LQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNHRleHRfNF9fZGVsX18oc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxm KSB7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyIsIDApOworLSAgX19QeXhfSU5DUkVG KFB5X05vbmUpOworLSAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF92X3NlbGYtPnRleHQpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+dGV4dCk7 CistICBfX3B5eF92X3NlbGYtPnRleHQgPSBQeV9Ob25lOworLQorLSAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCistICBfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLS8qIFB5dGhvbiB3cmFwcGVyICovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzlsb2dfbGV2ZWxfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8q LworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9n TWVzc2FnZV85bG9nX2xldmVsXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKy0g IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKKy0g IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzls b2dfbGV2ZWxfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0xvZ01lc3NhZ2UgKilfX3B5eF92X3NlbGYpKTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhf cjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMzMKKysgKiAg ICAgICAgIHJldHVybiB2YWx1ZXMKKysgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9T VFJJTkc6CisrICogICAgICAgICByZXR1cm4gX3N0cmRlYygoKDxjaGFyKio+ZGF0YSlbMF0pKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9G T1JNQVRfRkxBRzoKKysgKiAgICAgICAgIHJldHVybiBub3Qgbm90ICg8dWludDY0X3QqPmRhdGEp WzBdCisrICovCisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICAgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5Qnl0ZXNfRnJv bVN0cmluZygoKChjaGFyICoqKV9fcHl4X3ZfZGF0YSlbMF0pKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNyk7CisrICAgIF9fcHl4X3RfOCA9IE5VTEw7CisrICAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsK KysgICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOworKyAgICAg IGlmIChsaWtlbHkoX19weXhfdF84KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0g UHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7CisrICAgICAgICBfX1B5eF9JTkNSRUYo X19weXhfdF84KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBf X1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQor KyAgICBfX3B5eF90XzEgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhf X3B5eF90XzYsIF9fcHl4X3RfOCwgX19weXhfdF83KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF82LCBfX3B5eF90XzcpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7 IF9fcHl4X3RfOCA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90Xzcg PSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMzMsIF9f cHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICAgIF9fcHl4X3IgPSBfX3B5eF90 XzE7CisrICAgIF9fcHl4X3RfMSA9IDA7CisrICAgIGdvdG8gX19weXhfTDA7CisgCistc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzls b2dfbGV2ZWxfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsK Ky0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX19nZXRfXyIsIDApOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4 X0lOQ1JFRihfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCk7CistICBfX3B5eF9yID0gX19weXhfdl9z ZWxmLT5sb2dfbGV2ZWw7CistICBnb3RvIF9fcHl4X0wwOworKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjMyCisrICogICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMobm9k ZWxpc3Qua2V5c1tpXSldID0gdmFsdWUKKysgKiAgICAgICAgIHJldHVybiB2YWx1ZXMKKysgKiAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKCgoPGNoYXIqKj5kYXRhKVswXSkp CisrICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzoKKysgKi8KKysgICAgYnJl YWs7CisrICAgIGNhc2UgTVBWX0ZPUk1BVF9GTEFHOgorIAorLSAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCistICBfX3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKy0gIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM1CisrICogICAgICAgICByZXR1 cm4gX3N0cmRlYygoKDxjaGFyKio+ZGF0YSlbMF0pKQorKyAqICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX0ZMQUc6CisrICogICAgICAgICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5k YXRhKVswXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGVsaWYgZm9ybWF0 ID09IE1QVl9GT1JNQVRfSU5UNjQ6CisrICogICAgICAgICByZXR1cm4gaW50KCg8dWludDY0X3Qq PmRhdGEpWzBdKQorKyAqLworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgICBfX3B5 eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoKCEoKCgodWludDY0X3QgKilfX3B5eF92 X2RhdGEpWzBdKSAhPSAwKSkgIT0gMCkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgMjM1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CisrICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisrICAgIF9fcHl4X3RfMSA9IDA7CisrICAg IGdvdG8gX19weXhfTDA7CisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgaW50IF9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF8zX19z ZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8q cHJvdG8qLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9n TWVzc2FnZV85bG9nX2xldmVsXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X3ZhbHVlKSB7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyAod3Jh cHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTBMb2dNZXNzYWdlXzlsb2dfbGV2ZWxfMl9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAq KV9fcHl4X3ZfdmFsdWUpKTsKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjIzNAorKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKysgKiAgICAg ICAgIHJldHVybiBfc3RyZGVjKCgoPGNoYXIqKj5kYXRhKVswXSkpCisrICogICAgIGVsaWYgZm9y bWF0ID09IE1QVl9GT1JNQVRfRkxBRzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgcmV0dXJuIG5vdCBub3QgKDx1aW50NjRfdCo+ZGF0YSlbMF0KKysgKiAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKysgKi8KKysgICAgYnJlYWs7CisrICAgIGNh c2UgTVBWX0ZPUk1BVF9JTlQ2NDoKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19Cisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMzcKKysgKiAgICAgICAgIHJl dHVybiBub3Qgbm90ICg8dWludDY0X3QqPmRhdGEpWzBdCisrICogICAgIGVsaWYgZm9ybWF0ID09 IE1QVl9GT1JNQVRfSU5UNjQ6CisrICogICAgICAgICByZXR1cm4gaW50KCg8dWludDY0X3QqPmRh dGEpWzBdKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGVsaWYgZm9ybWF0 ID09IE1QVl9GT1JNQVRfRE9VQkxFOgorKyAqICAgICAgICAgcmV0dXJuIGZsb2F0KCg8ZG91Ymxl Kj5kYXRhKVswXSkKKysgKi8KKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19w eXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCgoKCh1aW50NjRfdCAqKV9fcHl4X3Zf ZGF0YSlbMF0pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjM3LCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fcHl4 X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoKChQeU9iamVjdCAqKSgmUHlJbnRfVHlw ZSkpLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAy MzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICAgIF9fcHl4X3IgPSBf X3B5eF90XzY7CisrICAgIF9fcHl4X3RfNiA9IDA7CisrICAgIGdvdG8gX19weXhfTDA7CisgCist c3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzls b2dfbGV2ZWxfMl9fc2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf TG9nTWVzc2FnZSAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworLSAg aW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18iLCAwKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92 X3ZhbHVlKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl92YWx1ZSk7CistICBfX1B5eF9HT1RS RUYoX19weXhfdl9zZWxmLT5sb2dfbGV2ZWwpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2Vs Zi0+bG9nX2xldmVsKTsKKy0gIF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsID0gX19weXhfdl92YWx1 ZTsKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzNgorKyAqICAgICBl bGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CisrICogICAgICAgICByZXR1cm4gbm90IG5v dCAoPHVpbnQ2NF90Kj5kYXRhKVswXQorKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X0lOVDY0OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4g aW50KCg8dWludDY0X3QqPmRhdGEpWzBdKQorKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX0RPVUJMRToKKysgKi8KKysgICAgYnJlYWs7CisrICAgIGNhc2UgTVBWX0ZPUk1BVF9ET1VC TEU6CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSAwOworLSAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19Cisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMzkKKysgKiAgICAgICAgIHJl dHVybiBpbnQoKDx1aW50NjRfdCo+ZGF0YSlbMF0pCisrICogICAgIGVsaWYgZm9ybWF0ID09IE1Q Vl9GT1JNQVRfRE9VQkxFOgorKyAqICAgICAgICAgcmV0dXJuIGZsb2F0KCg8ZG91YmxlKj5kYXRh KVswXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICByZXR1cm4gTm9uZQor KyAqIAorKyAqLworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgICBfX3B5eF90XzYg PSBQeUZsb2F0X0Zyb21Eb3VibGUoKCgoZG91YmxlICopX19weXhfdl9kYXRhKVswXSkpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAyMzksIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgICAgX19weXhfciA9IF9fcHl4X3RfNjsK KysgICAgX19weXhfdF82ID0gMDsKKysgICAgZ290byBfX3B5eF9MMDsKKyAKKy0vKiBQeXRob24g d3JhcHBlciAqLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEw TG9nTWVzc2FnZV85bG9nX2xldmVsXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAv KnByb3RvKi8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExv Z01lc3NhZ2VfOWxvZ19sZXZlbF81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Cist ICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzlsb2dfbGV2ZWxf NF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlICopX19weXhfdl9zZWxmKSk7CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoyMzgKKysgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKysgKiAg ICAgICAgIHJldHVybiBpbnQoKDx1aW50NjRfdCo+ZGF0YSlbMF0pCisrICogICAgIGVsaWYgZm9y bWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICByZXR1cm4gZmxvYXQoKDxkb3VibGUqPmRhdGEpWzBdKQorKyAqICAgICByZXR1 cm4gTm9uZQorKyAqLworKyAgICBicmVhazsKKysgICAgZGVmYXVsdDogYnJlYWs7CisrICB9Cisg CistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjI0MAorKyAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJM RToKKysgKiAgICAgICAgIHJldHVybiBmbG9hdCgoPGRvdWJsZSo+ZGF0YSlbMF0pCisrICogICAg IHJldHVybiBOb25lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAKKysg Ki8KKysgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICBfX3B5eF9yID0gUHlfTm9uZTsgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworKyAgZ290byBfX3B5eF9MMDsKKyAKKy1zdGF0aWMgaW50IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF80X19k ZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpf X3B5eF92X3NlbGYpIHsKKy0gIGludCBfX3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fIiwgMCk7CistICBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOworLSAgX19Q eXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5 eF92X3NlbGYtPmxvZ19sZXZlbCk7CistICBfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCA9IFB5X05v bmU7CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjEzCisrICogCisrICog CisrICogY2RlZiBfY29udmVydF92YWx1ZSh2b2lkKiBkYXRhLCBtcHZfZm9ybWF0IGZvcm1hdCk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgY2RlZiBtcHZfbm9kZSBub2Rl CisrICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCBub2RlbGlzdAorKyAqLworIAorICAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7CisrICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fY29udmVydF92YWx1ZSIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IDA7Cisr ICBfX3B5eF9MMDo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfdmFsdWVzKTsKKysgIF9fUHl4 X1hERUNSRUYoX19weXhfdl92YWx1ZSk7CisrICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAg IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQor IAorLS8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2Vs Zik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgY2RlZiB0dXBsZSBzdGF0 ZQorLSAqICAgICBjZGVmIG9iamVjdCBfZGljdAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyNTAKKysgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IG5hbWUsIGRhdGEKKysgKiAK KysgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfcHJvcGVydHkqIHByb3ApOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLm5hbWUgPSBfc3RyZGVj KHByb3AubmFtZSkKKysgKiAgICAgICAgIHNlbGYuZGF0YSA9IF9jb252ZXJ0X3ZhbHVlKHByb3Au ZGF0YSwgcHJvcC5mb3JtYXQpCisgICovCisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2Vf MV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV8xX19yZWR1Y2VfY3l0aG9uX18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Cist ICBQeU9iamVjdCAqX19weXhfciA9IDA7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfX2luaXQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zfc2VsZiwgc3RydWN0IG1wdl9ldmVudF9w cm9wZXJ0eSAqX19weXhfdl9wcm9wKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Cisg ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fcmVkdWNlX2N5dGhvbl9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfX19yZWR1Y2VfY3l0aG9uX18o KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopX19w eXhfdl9zZWxmKSk7CisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzIgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CisrICBQ eU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAwOworKyAg Y29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5lbm8g PSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9pbml0IiwgMCk7CisgCistICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9fX3JlZHVjZV9jeXRob25fXyhzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpfX3B5eF92X3Nl bGYpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X3N0YXRlID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5 eF92X19kaWN0ID0gMDsKKy0gIGludCBfX3B5eF92X3VzZV9zZXRzdGF0ZTsKKy0gIFB5T2JqZWN0 ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9i amVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIGludCBfX3B5eF90XzI7CistICBpbnQgX19weXhf dF8zOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CistICBpbnQgX19weXhfdF81Owor LSAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7CistICBpbnQgX19weXhfbGluZW5vID0gMDsK Ky0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25f XyIsIDApOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NQorLSAqICAgICBjZGVmIG9iamVj dCBfZGljdAorLSAqICAgICBjZGVmIGJpbnQgdXNlX3NldHN0YXRlCistICogICAgIHN0YXRlID0g KHNlbGYubGV2ZWwsIHNlbGYubG9nX2xldmVsLCBzZWxmLnByZWZpeCwgc2VsZi50ZXh0KSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAn X19kaWN0X18nLCBOb25lKQorLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTEKKysgKiAKKysgKiAgICAgY2RlZiBfaW5p dChzZWxmLCBtcHZfZXZlbnRfcHJvcGVydHkqIHByb3ApOgorKyAqICAgICAgICAgc2VsZi5uYW1l ID0gX3N0cmRlYyhwcm9wLm5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgICAgIHNlbGYuZGF0YSA9IF9jb252ZXJ0X3ZhbHVlKHByb3AuZGF0YSwgcHJvcC5mb3JtYXQp CisrICogICAgICAgICByZXR1cm4gc2VsZgorICAqLworLSAgX19weXhfdF8xID0gUHlUdXBsZV9O ZXcoNCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25f c19zdHJkZWMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyNTEsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX3B5eF90XzMg PSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9wcm9wLT5uYW1lKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjUxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgX19weXhfdF80ID0gTlVMTDsKKysgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkp IHsKKysgICAgX19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAg aWYgKGxpa2VseShfX3B5eF90XzQpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfNCk7CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworKyAgICB9CisrICB9CisrICBfX3B5eF90XzEg PSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4 X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBf X3B5eF90XzMpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwor KyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyNTEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5sZXZl bCk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOworLSAgUHlUdXBsZV9T RVRfSVRFTShfX3B5eF90XzEsIDAsIF9fcHl4X3Zfc2VsZi0+bGV2ZWwpOworLSAgX19QeXhfSU5D UkVGKF9fcHl4X3Zfc2VsZi0+bG9nX2xldmVsKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl9z ZWxmLT5sb2dfbGV2ZWwpOworLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4 X3Zfc2VsZi0+bG9nX2xldmVsKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPnByZWZp eCk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc2VsZi0+cHJlZml4KTsKKy0gIFB5VHVwbGVf U0VUX0lURU0oX19weXhfdF8xLCAyLCBfX3B5eF92X3NlbGYtPnByZWZpeCk7CistICBfX1B5eF9J TkNSRUYoX19weXhfdl9zZWxmLT50ZXh0KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zZWxm LT50ZXh0KTsKKy0gIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAzLCBfX3B5eF92X3NlbGYt PnRleHQpOworLSAgX19weXhfdl9zdGF0ZSA9ICgoUHlPYmplY3QqKV9fcHl4X3RfMSk7CisrICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fUHl4X0dJVkVSRUYo X19weXhfdF8xKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPm5hbWUpOworKyAgX19Q eXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+bmFtZSk7CisrICBfX3B5eF92X3NlbGYtPm5hbWUgPSBf X3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6 NgorLSAqICAgICBjZGVmIGJpbnQgdXNlX3NldHN0YXRlCistICogICAgIHN0YXRlID0gKHNlbGYu bGV2ZWwsIHNlbGYubG9nX2xldmVsLCBzZWxmLnByZWZpeCwgc2VsZi50ZXh0KQorLSAqICAgICBf ZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgIHN0 YXRlICs9IChfZGljdCwpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUy CisrICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X3Byb3BlcnR5KiBwcm9wKToKKysg KiAgICAgICAgIHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5uYW1lKQorKyAqICAgICAgICAgc2Vs Zi5kYXRhID0gX2NvbnZlcnRfdmFsdWUocHJvcC5kYXRhLCBwcm9wLmZvcm1hdCkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmV0dXJuIHNlbGYKKysgKiAKKyAgKi8K Ky0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEF0dHIzKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYp LCBfX3B5eF9uX3NfZGljdCwgUHlfTm9uZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUoX19weXhfdl9wcm9wLT5kYXRhLCBfX3B5 eF92X3Byb3AtPmZvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDI1MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9f cHl4X3ZfX2RpY3QgPSBfX3B5eF90XzE7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7Cisr ICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5 eF92X3NlbGYtPmRhdGEpOworKyAgX19weXhfdl9zZWxmLT5kYXRhID0gX19weXhfdF8xOworICAg X19weXhfdF8xID0gMDsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjcKKy0gKiAgICAgc3Rh dGUgPSAoc2VsZi5sZXZlbCwgc2VsZi5sb2dfbGV2ZWwsIHNlbGYucHJlZml4LCBzZWxmLnRleHQp CistICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQorLSAqICAg ICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRy dWUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTMKKysgKiAgICAgICAg IHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5uYW1lKQorKyAqICAgICAgICAgc2VsZi5kYXRhID0g X2NvbnZlcnRfdmFsdWUocHJvcC5kYXRhLCBwcm9wLmZvcm1hdCkKKysgKiAgICAgICAgIHJldHVy biBzZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAKKyAgKi8KKy0g IF9fcHl4X3RfMiA9IChfX3B5eF92X19kaWN0ICE9IFB5X05vbmUpOworLSAgX19weXhfdF8zID0g KF9fcHl4X3RfMiAhPSAwKTsKKy0gIGlmIChfX3B5eF90XzMpIHsKKysgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CisrICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOwor KyAgX19weXhfciA9ICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpOworKyAgZ290byBfX3B5eF9M MDsKKyAKKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6OAorLSAqICAgICBfZGljdCA9IGdldGF0 dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKy0gKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6 CistICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCistICogICAgIGVsc2U6CisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUwCisrICogICAgIGNkZWYgcHVibGlj IG9iamVjdCBuYW1lLCBkYXRhCisrICogCisrICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2 ZW50X3Byb3BlcnR5KiBwcm9wKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgc2VsZi5uYW1lID0gX3N0cmRlYyhwcm9wLm5hbWUpCisrICogICAgICAgICBzZWxmLmRh dGEgPSBfY29udmVydF92YWx1ZShwcm9wLmRhdGEsIHByb3AuZm9ybWF0KQorICAqLworLSAgICBf X3B5eF90XzEgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMSwgOCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9fZGljdCk7CistICAgIF9fUHl4X0dJVkVSRUYo X19weXhfdl9fZGljdCk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCBfX3B5 eF92X19kaWN0KTsKKy0gICAgX19weXhfdF80ID0gUHlOdW1iZXJfSW5QbGFjZUFkZChfX3B5eF92 X3N0YXRlLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigx LCA4LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3Zfc3RhdGUsICgoUHlPYmplY3QqKV9fcHl4X3RfNCkpOworLSAgICBfX3B5 eF90XzQgPSAwOworIAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo5CistICogICAgIGlmIF9k aWN0IGlzIG5vdCBOb25lOgorLSAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKKy0gKiAgICAg ICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICBlbHNlOgorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5sZXZlbCBpcyBub3Qg Tm9uZSBvciBzZWxmLmxvZ19sZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLnByZWZpeCBpcyBub3Qg Tm9uZSBvciBzZWxmLnRleHQgaXMgbm90IE5vbmUKKy0gKi8KKy0gICAgX19weXhfdl91c2Vfc2V0 c3RhdGUgPSAxOworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJv cjo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNCk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Qcm9w ZXJ0eS5faW5pdCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OworKyAgX19weXhfciA9IDA7CisrICBfX3B5eF9MMDo7CisrICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4 X3I7CisrfQorIAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3CistICogICAgIHN0YXRlID0g KHNlbGYubGV2ZWwsIHNlbGYubG9nX2xldmVsLCBzZWxmLnByZWZpeCwgc2VsZi50ZXh0KQorLSAq ICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKy0gKiAgICAgaWYg X2RpY3QgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHN0YXRlICs9IChfZGljdCwpCistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCisr LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI0OAorKyAqICAgICBXcmFwczogbXB2 X2V2ZW50X3Byb3BlcnR5CisrICogICAgICIiIgorKyAqICAgICBjZGVmIHB1YmxpYyBvYmplY3Qg bmFtZSwgZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGNk ZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X3Byb3BlcnR5KiBwcm9wKToKKyAgKi8KKy0gICAgZ290 byBfX3B5eF9MMzsKKy0gIH0KKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjExCistICogICAg ICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCistICogICAgIGVsc2U6CistICogICAgICAgICB1c2Vf c2V0c3RhdGUgPSBzZWxmLmxldmVsIGlzIG5vdCBOb25lIG9yIHNlbGYubG9nX2xldmVsIGlzIG5v dCBOb25lIG9yIHNlbGYucHJlZml4IGlzIG5vdCBOb25lIG9yIHNlbGYudGV4dCBpcyBub3QgTm9u ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGlmIHVzZV9zZXRzdGF0ZToK Ky0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAodHlwZShzZWxm KSwgMHg4Nzc0ZmFlLCBOb25lKSwgc3RhdGUKKy0gKi8KKy0gIC8qZWxzZSovIHsKKy0gICAgX19w eXhfdF8yID0gKF9fcHl4X3Zfc2VsZi0+bGV2ZWwgIT0gUHlfTm9uZSk7CistICAgIF9fcHl4X3Rf NSA9IChfX3B5eF90XzIgIT0gMCk7CistICAgIGlmICghX19weXhfdF81KSB7CistICAgIH0gZWxz ZSB7CistICAgICAgX19weXhfdF8zID0gX19weXhfdF81OworLSAgICAgIGdvdG8gX19weXhfTDRf Ym9vbF9iaW5vcF9kb25lOworLSAgICB9CistICAgIF9fcHl4X3RfNSA9IChfX3B5eF92X3NlbGYt PmxvZ19sZXZlbCAhPSBQeV9Ob25lKTsKKy0gICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSAhPSAw KTsKKy0gICAgaWYgKCFfX3B5eF90XzIpIHsKKy0gICAgfSBlbHNlIHsKKy0gICAgICBfX3B5eF90 XzMgPSBfX3B5eF90XzI7CistICAgICAgZ290byBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU7Cist ICAgIH0KKy0gICAgX19weXhfdF8yID0gKF9fcHl4X3Zfc2VsZi0+cHJlZml4ICE9IFB5X05vbmUp OworLSAgICBfX3B5eF90XzUgPSAoX19weXhfdF8yICE9IDApOworLSAgICBpZiAoIV9fcHl4X3Rf NSkgeworLSAgICB9IGVsc2UgeworLSAgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNTsKKy0gICAg ICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKKy0gICAgfQorLSAgICBfX3B5eF90XzUg PSAoX19weXhfdl9zZWxmLT50ZXh0ICE9IFB5X05vbmUpOworLSAgICBfX3B5eF90XzIgPSAoX19w eXhfdF81ICE9IDApOworLSAgICBfX3B5eF90XzMgPSBfX3B5eF90XzI7CistICAgIF9fcHl4X0w0 X2Jvb2xfYmlub3BfZG9uZTo7CistICAgIF9fcHl4X3ZfdXNlX3NldHN0YXRlID0gX19weXhfdF8z OworLSAgfQorLSAgX19weXhfTDM6OworKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1lXzFf X2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfMV9fZ2V0 X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwor KyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdl9zZWxmKSk7CisgCist ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgdXNl X3NldHN0YXRlID0gc2VsZi5sZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLmxvZ19sZXZlbCBpcyBu b3QgTm9uZSBvciBzZWxmLnByZWZpeCBpcyBub3QgTm9uZSBvciBzZWxmLnRleHQgaXMgbm90IE5v bmUKKy0gKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgKHR5cGUoc2Vs ZiksIDB4ODc3NGZhZSwgTm9uZSksIHN0YXRlCistICogICAgIGVsc2U6CistICovCistICBfX3B5 eF90XzMgPSAoX19weXhfdl91c2Vfc2V0c3RhdGUgIT0gMCk7CistICBpZiAoX19weXhfdF8zKSB7 CisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorIAorLSAgICAvKiAiKHRyZWUgZnJhZ21l bnQpIjoxMworLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5sZXZlbCBpcyBub3QgTm9u ZSBvciBzZWxmLmxvZ19sZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLnByZWZpeCBpcyBub3QgTm9u ZSBvciBzZWxmLnRleHQgaXMgbm90IE5vbmUKKy0gKiAgICAgaWYgdXNlX3NldHN0YXRlOgorLSAq ICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAw eDg3NzRmYWUsIE5vbmUpLCBzdGF0ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgIGVsc2U6CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwg KHR5cGUoc2VsZiksIDB4ODc3NGZhZSwgc3RhdGUpCistICovCistICAgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5 eF9uX3NfcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzQpOworLSAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilQeV9UWVBF KCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworLSAgICBfX1B5eF9HSVZFUkVGKCgoUHlP YmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworLSAgICBQeVR1 cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMCwgKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVj dCAqKV9fcHl4X3Zfc2VsZikpKSk7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMTQyMDM2 OTEwKTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfMTQyMDM2OTEwKTsKKy0gICAgUHlU dXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4X2ludF8xNDIwMzY5MTApOworLSAgICBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CistICAg IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAyLCBQeV9Ob25lKTsKKy0gICAgX19weXhfdF82 ID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEs IDEzLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICAg IF9fUHl4X0dJVkVSRUYoX19weXhfdF80KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzYsIDAsIF9fcHl4X3RfNCk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gICAg UHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzYsIDEsIF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0lO Q1JFRihfX3B5eF92X3N0YXRlKTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3N0YXRlKTsK Ky0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzYsIDIsIF9fcHl4X3Zfc3RhdGUpOworLSAg ICBfX3B5eF90XzQgPSAwOworLSAgICBfX3B5eF90XzEgPSAwOworLSAgICBfX3B5eF9yID0gX19w eXhfdF82OworLSAgICBfX3B5eF90XzYgPSAwOworLSAgICBnb3RvIF9fcHl4X0wwOworLQorLSAg ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgdXNl X3NldHN0YXRlID0gc2VsZi5sZXZlbCBpcyBub3QgTm9uZSBvciBzZWxmLmxvZ19sZXZlbCBpcyBu b3QgTm9uZSBvciBzZWxmLnByZWZpeCBpcyBub3QgTm9uZSBvciBzZWxmLnRleHQgaXMgbm90IE5v bmUKKy0gKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgKHR5cGUoc2Vs ZiksIDB4ODc3NGZhZSwgTm9uZSksIHN0YXRlCistICogICAgIGVsc2U6CistICovCistICB9Cist CistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNQorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3Vu cGlja2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIE5vbmUpLCBzdGF0ZQor LSAqICAgICBlbHNlOgorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0xvZ01lc3Nh Z2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIHN0YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgor LSAqICAgICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoc2VsZiwgX19weXhf c3RhdGUpCistICovCistICAvKmVsc2UqLyB7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfcHl4 X3VucGlja2xlX0xvZ01lc3NhZ2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigxLCAxNSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwor LSAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKy0gICAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpKSkpOworLSAgICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKilQ eV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworLSAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfMSwgMCwgKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZikpKSk7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMTQyMDM2OTEwKTsKKy0g ICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfMTQyMDM2OTEwKTsKKy0gICAgUHlUdXBsZV9TRVRf SVRFTShfX3B5eF90XzEsIDEsIF9fcHl4X2ludF8xNDIwMzY5MTApOworLSAgICBfX1B5eF9JTkNS RUYoX19weXhfdl9zdGF0ZSk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zdGF0ZSk7Cist ICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAyLCBfX3B5eF92X3N0YXRlKTsKKy0gICAg X19weXhfdF80ID0gUHlUdXBsZV9OZXcoMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDEsIDE1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NCk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF82KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRF TShfX3B5eF90XzQsIDAsIF9fcHl4X3RfNik7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8x KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDEsIF9fcHl4X3RfMSk7CistICAg IF9fcHl4X3RfNiA9IDA7CistICAgIF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3IgPSBfX3B5 eF90XzQ7CistICAgIF9fcHl4X3RfNCA9IDA7CistICAgIGdvdG8gX19weXhfTDA7CistICB9Cist CistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNl bGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgdHVwbGUgc3Rh dGUKKy0gKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKKy0gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfX19nZXRfXyhzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqX19weXhfdl9zZWxm KSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisrICBfX1B5eF9SZWZOYW5ueURlY2xh cmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5u YW1lKTsKKysgIF9fcHl4X3IgPSBfX3B5eF92X3NlbGYtPm5hbWU7CisrICBnb3RvIF9fcHl4X0ww OworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Mb2dNZXNzYWdlLl9fcmVkdWNlX2N5dGhvbl9fIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsK KyAgIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9zdGF0ZSk7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3ZfX2RpY3QpOworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Cisg ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0K KyAKKy0vKiAiKHRyZWUgZnJhZ21lbnQpIjoxNgorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAg cmV0dXJuIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUs IHN0YXRlKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBfX3B5eF91bnBpY2tsZV9Mb2dN ZXNzYWdlX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCistICovCisrLyogUHl0aG9uIHdy YXBwZXIgKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJv cGVydHlfNG5hbWVfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKKysgIGludCBfX3B5eF9yOworKyAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3Nl dF9fICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl84UHJvcGVydHlfNG5hbWVfMl9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilf X3B5eF92X3ZhbHVlKSk7CisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworK3N0 YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV8y X19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworKyAgaW50IF9fcHl4X3I7 CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fc2V0X18iLCAwKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlKTsKKysg IF9fUHl4X0dJVkVSRUYoX19weXhfdl92YWx1ZSk7CisrICBfX1B5eF9HT1RSRUYoX19weXhfdl9z ZWxmLT5uYW1lKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPm5hbWUpOworKyAgX19w eXhfdl9zZWxmLT5uYW1lID0gX19weXhfdl92YWx1ZTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworKyAgX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2Fn ZV8zX19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV8zX19zZXRzdGF0ZV9jeXRob25f XyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkg eworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV81X19kZWxfXyhQeU9iamVjdCAqX19weXhf dl9zZWxmKTsgLypwcm90byovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfOFByb3BlcnR5XzRuYW1lXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsK KysgIGludCBfX3B5eF9yOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fICh3cmFwcGVyKSIsIDAp OworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfMl9fc2V0c3RhdGVfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Mb2dNZXNzYWdlICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3Zf X19weXhfc3RhdGUpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fICh3 cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl84UHJvcGVydHlfNG5hbWVfNF9fZGVsX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVy biBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfMl9fc2V0c3RhdGVfY3l0aG9uX18oc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxM OworK3N0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80 bmFtZV80X19kZWxfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eSAqX19weXhfdl9zZWxmKSB7CisrICBpbnQgX19weXhfcjsKKyAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIGludCBfX3B5 eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f c2V0c3RhdGVfY3l0aG9uX18iLCAwKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X2RlbF9fIiwgMCk7CisrICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBfX1B5eF9HSVZFUkVG KFB5X05vbmUpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+bmFtZSk7CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsKKysgIF9fcHl4X3Zfc2VsZi0+bmFtZSA9IFB5 X05vbmU7CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNworLSAqICAgICAgICAgcmV0dXJu IF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIHN0YXRl KQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKy0gKiAg ICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRl KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICovCistICBpZiAoIShsaWtlbHkoUHlU dXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5eF92X19fcHl4X3N0 YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJFeHBlY3Rl ZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZUEUoX19weXhfdl9fX3B5eF9zdGF0 ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFfZXJyb3IpCistICBf X3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9M b2dNZXNzYWdlX19zZXRfc3RhdGUoX19weXhfdl9zZWxmLCAoKFB5T2JqZWN0KilfX3B5eF92X19f cHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDE3LCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KKysgIF9fcHl4X3IgPSAwOworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Cisr ICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNgorLSAq ICAgICBlbHNlOgorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2Us ICh0eXBlKHNlbGYpLCAweDg3NzRmYWUsIHN0YXRlKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhv bl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3Rh dGUpCistICovCisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfMV9fZ2V0X18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80ZGF0YV8xX19nZXRfXyhQeU9iamVjdCAq X19weXhfdl9zZWxmKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18g KHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzhQcm9wZXJ0eV80ZGF0YV9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF92X3NlbGYpKTsKKyAKKyAgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7 CisrfQorKworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzhQcm9wZXJ0eV80ZGF0YV9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5ICpfX3B5eF92X3NlbGYpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0g TlVMTDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysg IF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPmRhdGEpOworKyAgX19weXhfciA9IF9fcHl4X3Zf c2VsZi0+ZGF0YTsKKyAgIGdvdG8gX19weXhfTDA7CistICBfX3B5eF9MMV9lcnJvcjo7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRl ci5saWJzLm1wdi5Mb2dNZXNzYWdlLl9fc2V0c3RhdGVfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworKwor KyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lW RVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0 dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox OTcKKy0gKiAKKy0gKiAKKy0gKiBjZGVmIF9jb252ZXJ0X25vZGVfdmFsdWUobXB2X25vZGUgbm9k ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgaWYgbm9kZS5mb3JtYXQg PT0gTVBWX0ZPUk1BVF9TVFJJTkc6CistICogICAgICAgICByZXR1cm4gX3N0cmRlYyhub2RlLnUu c3RyaW5nKQorLSAqLworKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIGludCBfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzNfX3NldF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLypwcm90byovCisrc3Rh dGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzNf X3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7 CisrICBpbnQgX19weXhfcjsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4 X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzJfX3Nl dF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilf X3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOworIAorLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1 ZShzdHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlKSB7CistICBQeU9iamVjdCAqX19weXhfciA9 IE5VTEw7CisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworK3N0YXRpYyBpbnQgX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80ZGF0YV8yX19zZXRfXyhzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworKyAgaW50IF9fcHl4X3I7CisgICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CistICBQ eU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxM OworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CistICBpbnQgX19weXhfdF81OworLSAg aW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5V TEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX2NvbnZlcnRfbm9kZV92YWx1ZSIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fc2V0X18iLCAwKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlKTsKKysg IF9fUHl4X0dJVkVSRUYoX19weXhfdl92YWx1ZSk7CisrICBfX1B5eF9HT1RSRUYoX19weXhfdl9z ZWxmLT5kYXRhKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmRhdGEpOworKyAgX19w eXhfdl9zZWxmLT5kYXRhID0gX19weXhfdl92YWx1ZTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxOTgKKy0gKiAKKy0gKiBjZGVmIF9jb252ZXJ0X25vZGVfdmFsdWUo bXB2X25vZGUgbm9kZSk6CistICogICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RS SU5HOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1cm4gX3N0 cmRlYyhub2RlLnUuc3RyaW5nKQorLSAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JN QVRfRkxBRzoKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IDA7Cisr ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30K KysKKysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzhQcm9wZXJ0eV80ZGF0YV81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9z ZWxmKTsgLypwcm90byovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfOFByb3BlcnR5XzRkYXRhXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKysg IGludCBfX3B5eF9yOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9 IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfNF9fZGVsX18o KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4 X3Zfc2VsZikpOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysKKytzdGF0aWMg aW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfNF9fZGVs X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4 X3Zfc2VsZikgeworKyAgaW50IF9fcHl4X3I7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVsX18iLCAwKTsKKysgIF9fUHl4 X0lOQ1JFRihQeV9Ob25lKTsKKysgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CisrICBfX1B5eF9H T1RSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYt PmRhdGEpOworKyAgX19weXhfdl9zZWxmLT5kYXRhID0gUHlfTm9uZTsKKysKKysgIC8qIGZ1bmN0 aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysKKysvKiAiKHRyZWUgZnJhZ21l bnQpIjoxCisrICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgIGNkZWYgdHVwbGUgc3RhdGUKKysgKiAgICAgY2RlZiBvYmpl Y3QgX2RpY3QKKyAgKi8KKy0gIHN3aXRjaCAoX19weXhfdl9ub2RlLmZvcm1hdCkgeworLSAgICBj YXNlIE1QVl9GT1JNQVRfU1RSSU5HOgorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTk5CistICogY2RlZiBfY29udmVydF9ub2RlX3ZhbHVlKG1wdl9ub2RlIG5vZGUp OgorLSAqICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKy0gKiAgICAg ICAgIHJldHVybiBfc3RyZGVjKG5vZGUudS5zdHJpbmcpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CistICog ICAgICAgICByZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpCisrLyogUHl0aG9uIHdyYXBw ZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84 UHJvcGVydHlfMV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhP Tl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV8xX19yZWR1Y2VfY3l0aG9u X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2Vk KSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fICh3 cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl84UHJvcGVydHlfX19yZWR1Y2VfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3Zfc2VsZikpOworKworKyAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJl dHVybiBfX3B5eF9yOworK30KKysKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfX19yZWR1Y2VfY3l0aG9uX18oc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlP YmplY3QgKl9fcHl4X3Zfc3RhdGUgPSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX2RpY3QgPSAw OworKyAgaW50IF9fcHl4X3ZfdXNlX3NldHN0YXRlOworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBO VUxMOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIFB5T2JqZWN0ICpfX3B5eF90 XzEgPSBOVUxMOworKyAgaW50IF9fcHl4X3RfMjsKKysgIGludCBfX3B5eF90XzM7CisrICBQeU9i amVjdCAqX19weXhfdF80ID0gTlVMTDsKKysgIGludCBfX3B5eF90XzU7CisrICBQeU9iamVjdCAq X19weXhfdF82ID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAwOworKyAgY29uc3QgY2hh ciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fIiwgMCk7CisrCisr ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1CisrICogICAgIGNkZWYgb2JqZWN0IF9kaWN0CisrICog ICAgIGNkZWYgYmludCB1c2Vfc2V0c3RhdGUKKysgKiAgICAgc3RhdGUgPSAoc2VsZi5kYXRhLCBz ZWxmLm5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgX2RpY3QgPSBn ZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCisrICogICAgIGlmIF9kaWN0IGlzIG5vdCBO b25lOgorICAqLworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBfX1B5eF9HZXRN b2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDE5OSwgX19weXhfTDFfZXJyb3IpCistICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zy b21TdHJpbmcoX19weXhfdl9ub2RlLnUuc3RyaW5nKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMCwgMTk5LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMyk7CistICAgIF9fcHl4X3RfNCA9IE5VTEw7CistICAgIGlmIChDWVRIT05fVU5QQUNL X01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAg ICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICAgIGlmIChs aWtlbHkoX19weXhfdF80KSkgeworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhf dF80KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworLSAgICAgIH0KKy0gICAgfQorLSAgICBf X3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzIsIF9fcHl4X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfdF8yLCBfX3B5eF90XzMpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4 X3RfNCA9IDA7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwor LSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxOTksIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7Cist ICAgIF9fcHl4X3RfMSA9IDA7CistICAgIGdvdG8gX19weXhfTDA7CisrICBfX3B5eF90XzEgPSBQ eVR1cGxlX05ldygyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgNSwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0lO Q1JFRihfX3B5eF92X3NlbGYtPmRhdGEpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYt PmRhdGEpOworKyAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDAsIF9fcHl4X3Zfc2VsZi0+ ZGF0YSk7CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsKKysgIF9fUHl4X0dJ VkVSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsKKysgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8x LCAxLCBfX3B5eF92X3NlbGYtPm5hbWUpOworKyAgX19weXhfdl9zdGF0ZSA9ICgoUHlPYmplY3Qq KV9fcHl4X3RfMSk7CisrICBfX3B5eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTk4CistICogCistICogY2RlZiBfY29udmVydF9ub2RlX3ZhbHVl KG1wdl9ub2RlIG5vZGUpOgorLSAqICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NU UklORzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIF9z dHJkZWMobm9kZS51LnN0cmluZykKKy0gKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9S TUFUX0ZMQUc6CisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2CisrICogICAgIGNkZWYgYmludCB1 c2Vfc2V0c3RhdGUKKysgKiAgICAgc3RhdGUgPSAoc2VsZi5kYXRhLCBzZWxmLm5hbWUpCisrICog ICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorKyAqICAgICAg ICAgc3RhdGUgKz0gKF9kaWN0LCkKKyAgKi8KKy0gICAgYnJlYWs7CistICAgIGNhc2UgTVBWX0ZP Uk1BVF9GTEFHOgorKyAgX19weXhfdF8xID0gX19QeXhfR2V0QXR0cjMoKChQeU9iamVjdCAqKV9f cHl4X3Zfc2VsZiksIF9fcHl4X25fc19kaWN0LCBQeV9Ob25lKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKysgIF9fcHl4X3ZfX2RpY3QgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEg PSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjAxCistICog ICAgICAgICByZXR1cm4gX3N0cmRlYyhub2RlLnUuc3RyaW5nKQorLSAqICAgICBlbGlmIG5vZGUu Zm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzoKKy0gKiAgICAgICAgIHJldHVybiBub3Qgbm90IGlu dChub2RlLnUuZmxhZykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBlbGlm IG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6CistICogICAgICAgICByZXR1cm4gaW50 KG5vZGUudS5pbnQ2NCkKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjcKKysgKiAgICAgc3RhdGUg PSAoc2VsZi5kYXRhLCBzZWxmLm5hbWUpCisrICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAn X19kaWN0X18nLCBOb25lKQorKyAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKKysgKiAg ICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUKKyAgKi8KKy0gICAgX19QeXhfWERFQ1JFRihfX3B5 eF9yKTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9ub2Rl LnUuZmxhZyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIwMSwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSAoX19weXhfdl9fZGljdCAhPSBQeV9Ob25lKTsK KysgIF9fcHl4X3RfMyA9IChfX3B5eF90XzIgIT0gMCk7CisrICBpZiAoX19weXhfdF8zKSB7Cisr CisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKysgKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNl bGYsICdfX2RpY3RfXycsIE5vbmUpCisrICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorKyAq ICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorKyAqICAgICBlbHNlOgorKyAqLworKyAg ICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMSwgOCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKCgoUHlPYmpl Y3QgKikoJlB5SW50X1R5cGUpKSwgX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgMjAxLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMik7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X19kaWN0KTsKKysgICAgX19QeXhf R0lWRVJFRihfX3B5eF92X19kaWN0KTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEs IDAsIF9fcHl4X3ZfX2RpY3QpOworKyAgICBfX3B5eF90XzQgPSBQeU51bWJlcl9JblBsYWNlQWRk KF9fcHl4X3Zfc3RhdGUsIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDEsIDgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9f cHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBpZiAodW5saWtlbHko X19weXhfdF81IDwgMCkpIF9fUFlYX0VSUigwLCAyMDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgX19weXhfdF8yID0g X19QeXhfUHlCb29sX0Zyb21Mb25nKCghKCghX19weXhfdF81KSAhPSAwKSkpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyMDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfciA9IF9fcHl4X3RfMjsKKy0gICAg X19weXhfdF8yID0gMDsKKy0gICAgZ290byBfX3B5eF9MMDsKKysgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF92X3N0YXRlLCAoKFB5T2JqZWN0KilfX3B5eF90XzQpKTsKKysgICAgX19weXhfdF80 ID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMAorLSAq ICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKy0gKiAgICAgICAgIHJl dHVybiBfc3RyZGVjKG5vZGUudS5zdHJpbmcpCistICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0g TVBWX0ZPUk1BVF9GTEFHOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICByZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpCistICogICAgIGVsaWYgbm9kZS5mb3Jt YXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6OQorKyAq ICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwp CisrICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgZWxzZToKKysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0 YSBpcyBub3QgTm9uZSBvciBzZWxmLm5hbWUgaXMgbm90IE5vbmUKKyAgKi8KKy0gICAgYnJlYWs7 CistICAgIGNhc2UgTVBWX0ZPUk1BVF9JTlQ2NDoKKysgICAgX19weXhfdl91c2Vfc2V0c3RhdGUg PSAxOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjAzCistICog ICAgICAgICByZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpCistICogICAgIGVsaWYgbm9k ZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKy0gKiAgICAgICAgIHJldHVybiBpbnQobm9k ZS51LmludDY0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGVsaWYgbm9k ZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CistICogICAgICAgICByZXR1cm4gZmxvYXQo bm9kZS51LmRvdWJsZV8pCisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjcKKysgKiAgICAgc3Rh dGUgPSAoc2VsZi5kYXRhLCBzZWxmLm5hbWUpCisrICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxm LCAnX19kaWN0X18nLCBOb25lKQorKyAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKKysg KiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUKKyAgKi8KKy0gICAgX19QeXhfWERFQ1JFRihf X3B5eF9yKTsKKy0gICAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9pbnQ2NF90KF9fcHl4 X3Zfbm9kZS51LmludDY0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MjAzLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAg IF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoKChQeU9iamVjdCAqKSgmUHlJ bnRfVHlwZSkpLCBfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAyMDMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fcHl4 X3IgPSBfX3B5eF90XzE7CistICAgIF9fcHl4X3RfMSA9IDA7CistICAgIGdvdG8gX19weXhfTDA7 CisrICAgIGdvdG8gX19weXhfTDM7CisrICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyMDIKKy0gKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFU X0ZMQUc6CistICogICAgICAgICByZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpCistICog ICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIGludChub2RlLnUuaW50NjQpCistICog ICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisrICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxMQorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorKyAqICAgICBl bHNlOgorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5kYXRhIGlzIG5vdCBOb25lIG9y IHNlbGYubmFtZSBpcyBub3QgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgIGlmIHVzZV9zZXRzdGF0ZToKKysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Q cm9wZXJ0eSwgKHR5cGUoc2VsZiksIDB4MDU3MmQxMSwgTm9uZSksIHN0YXRlCisgICovCistICAg IGJyZWFrOworLSAgICBjYXNlIE1QVl9GT1JNQVRfRE9VQkxFOgorKyAgLyplbHNlKi8geworKyAg ICBfX3B5eF90XzIgPSAoX19weXhfdl9zZWxmLT5kYXRhICE9IFB5X05vbmUpOworKyAgICBfX3B5 eF90XzUgPSAoX19weXhfdF8yICE9IDApOworKyAgICBpZiAoIV9fcHl4X3RfNSkgeworKyAgICB9 IGVsc2UgeworKyAgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNTsKKysgICAgICBnb3RvIF9fcHl4 X0w0X2Jvb2xfYmlub3BfZG9uZTsKKysgICAgfQorKyAgICBfX3B5eF90XzUgPSAoX19weXhfdl9z ZWxmLT5uYW1lICE9IFB5X05vbmUpOworKyAgICBfX3B5eF90XzIgPSAoX19weXhfdF81ICE9IDAp OworKyAgICBfX3B5eF90XzMgPSBfX3B5eF90XzI7CisrICAgIF9fcHl4X0w0X2Jvb2xfYmlub3Bf ZG9uZTo7CisrICAgIF9fcHl4X3ZfdXNlX3NldHN0YXRlID0gX19weXhfdF8zOworKyAgfQorKyAg X19weXhfTDM6OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjA1 CistICogICAgICAgICByZXR1cm4gaW50KG5vZGUudS5pbnQ2NCkKKy0gKiAgICAgZWxpZiBub2Rl LmZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKy0gKiAgICAgICAgIHJldHVybiBmbG9hdChu b2RlLnUuZG91YmxlXykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBlbGlm IG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6CistICogICAgICAgICByZXR1cm4g X2NvbnZlcnRfdmFsdWUobm9kZS51Lmxpc3QsIG5vZGUuZm9ybWF0KQorKyAgLyogIih0cmVlIGZy YWdtZW50KSI6MTIKKysgKiAgICAgZWxzZToKKysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNl bGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxmLm5hbWUgaXMgbm90IE5vbmUKKysgKiAgICAgaWYg dXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBy ZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAweDA1NzJkMTEsIE5v bmUpLCBzdGF0ZQorKyAqICAgICBlbHNlOgorKyAqLworKyAgX19weXhfdF8zID0gKF9fcHl4X3Zf dXNlX3NldHN0YXRlICE9IDApOworKyAgaWYgKF9fcHl4X3RfMykgeworKworKyAgICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxMworKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5kYXRhIGlz IG5vdCBOb25lIG9yIHNlbGYubmFtZSBpcyBub3QgTm9uZQorKyAqICAgICBpZiB1c2Vfc2V0c3Rh dGU6CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNl bGYpLCAweDA1NzJkMTEsIE5vbmUpLCBzdGF0ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgIGVsc2U6CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVy dHksICh0eXBlKHNlbGYpLCAweDA1NzJkMTEsIHN0YXRlKQorICAqLworICAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3IpOworLSAgICBfX3B5eF90XzEgPSBQeUZsb2F0X0Zyb21Eb3VibGUoX19weXhf dl9ub2RlLnUuZG91YmxlXyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDIwNSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF80LCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX1Byb3BlcnR5KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzQpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9H T1RSRUYoX19weXhfdF80KTsKKysgICAgX19weXhfdF8xID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7Cisr ICAgIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhf dl9zZWxmKSkpKTsKKysgICAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5 T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzEsIDAsICgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkp OworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzU3MTMxNjkpOworKyAgICBfX1B5eF9HSVZF UkVGKF9fcHl4X2ludF81NzEzMTY5KTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEs IDEsIF9fcHl4X2ludF81NzEzMTY5KTsKKysgICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOworKyAg ICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3Rf MSwgMiwgUHlfTm9uZSk7CisrICAgIF9fcHl4X3RfNiA9IFB5VHVwbGVfTmV3KDMpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNCk7 CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF82LCAwLCBfX3B5eF90XzQpOworKyAgICBf X1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF82 LCAxLCBfX3B5eF90XzEpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9zdGF0ZSk7CisrICAg IF9fUHl4X0dJVkVSRUYoX19weXhfdl9zdGF0ZSk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19w eXhfdF82LCAyLCBfX3B5eF92X3N0YXRlKTsKKysgICAgX19weXhfdF80ID0gMDsKKyAgICAgX19w eXhfdF8xID0gMDsKKysgICAgX19weXhfciA9IF9fcHl4X3RfNjsKKysgICAgX19weXhfdF82ID0g MDsKKyAgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjIwNAorLSAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5U NjQ6CistICogICAgICAgICByZXR1cm4gaW50KG5vZGUudS5pbnQ2NCkKKy0gKiAgICAgZWxpZiBu b2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgcmV0dXJuIGZsb2F0KG5vZGUudS5kb3VibGVfKQorLSAqICAgICBl bGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6CisrICAgIC8qICIodHJlZSBm cmFnbWVudCkiOjEyCisrICogICAgIGVsc2U6CisrICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBz ZWxmLmRhdGEgaXMgbm90IE5vbmUgb3Igc2VsZi5uYW1lIGlzIG5vdCBOb25lCisrICogICAgIGlm IHVzZV9zZXRzdGF0ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg cmV0dXJuIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5LCAodHlwZShzZWxmKSwgMHgwNTcyZDExLCBO b25lKSwgc3RhdGUKKysgKiAgICAgZWxzZToKKyAgKi8KKy0gICAgYnJlYWs7CistICAgIGNhc2Ug TVBWX0ZPUk1BVF9OT0RFX01BUDoKKysgIH0KKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjIwNworLSAqICAgICAgICAgcmV0dXJuIGZsb2F0KG5vZGUudS5kb3VibGVf KQorLSAqICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6CistICog ICAgICAgICByZXR1cm4gX2NvbnZlcnRfdmFsdWUobm9kZS51Lmxpc3QsIG5vZGUuZm9ybWF0KSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0g TVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorLSAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVl KG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjE1Cisr ICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAw eDA1NzJkMTEsIE5vbmUpLCBzdGF0ZQorKyAqICAgICBlbHNlOgorKyAqICAgICAgICAgcmV0dXJu IF9fcHl4X3VucGlja2xlX1Byb3BlcnR5LCAodHlwZShzZWxmKSwgMHgwNTcyZDExLCBzdGF0ZSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9f KHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3Nl dF9zdGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkKKyAgKi8KKysgIC8qZWxzZSovIHsKKyAgICAgX19Q eXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUoX19weXhfdl9ub2RlLnUubGlzdCwgX19weXhfdl9u b2RlLmZvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIwNywg X19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82 LCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX1Byb3BlcnR5KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzYpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYo X19weXhfdF82KTsKKysgICAgX19weXhfdF8xID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDE1LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisrICAgIF9f UHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxm KSkpKTsKKysgICAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0 ICopX19weXhfdl9zZWxmKSkpKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDAs ICgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworKyAg ICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzU3MTMxNjkpOworKyAgICBfX1B5eF9HSVZFUkVGKF9f cHl4X2ludF81NzEzMTY5KTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9f cHl4X2ludF81NzEzMTY5KTsKKysgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc3RhdGUpOworKyAg ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc3RhdGUpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfMSwgMiwgX19weXhfdl9zdGF0ZSk7CisrICAgIF9fcHl4X3RfNCA9IFB5VHVwbGVfTmV3 KDIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCAxNSwgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgICBfX1B5eF9HSVZFUkVG KF9fcHl4X3RfNik7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF80LCAwLCBfX3B5eF90 XzYpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CisrICAgIFB5VHVwbGVfU0VUX0lU RU0oX19weXhfdF80LCAxLCBfX3B5eF90XzEpOworKyAgICBfX3B5eF90XzYgPSAwOworICAgICBf X3B5eF90XzEgPSAwOworKyAgICBfX3B5eF9yID0gX19weXhfdF80OworKyAgICBfX3B5eF90XzQg PSAwOworICAgICBnb3RvIF9fcHl4X0wwOworKyAgfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjA2CistICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZP Uk1BVF9ET1VCTEU6CistICogICAgICAgICByZXR1cm4gZmxvYXQobm9kZS51LmRvdWJsZV8pCist ICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5v ZGUudS5saXN0LCBub2RlLmZvcm1hdCkKKy0gKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZf Rk9STUFUX05PREVfQVJSQVk6CisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisrICogZGVmIF9f cmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgIGNkZWYgdHVwbGUgc3RhdGUKKysgKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKKyAgKi8KKy0g ICAgYnJlYWs7CistICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorIAorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjA5CistICogICAgICAgICByZXR1cm4gX2Nv bnZlcnRfdmFsdWUobm9kZS51Lmxpc3QsIG5vZGUuZm9ybWF0KQorLSAqICAgICBlbGlmIG5vZGUu Zm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKKy0gKiAgICAgICAgIHJldHVybiBfY29u dmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgcmV0dXJuIE5vbmUKKy0gKiAKKy0gKi8KKy0gICAgX19QeXhfWERF Q1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX2NvbnZlcnRfdmFsdWUoX19weXhfdl9ub2RlLnUubGlzdCwgX19weXhfdl9ub2RlLmZv cm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIwOSwgX19weXhf TDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX3B5eF9yID0g X19weXhfdF8xOworLSAgICBfX3B5eF90XzEgPSAwOworLSAgICBnb3RvIF9fcHl4X0wwOworKyAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CisrICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNik7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5s aWJzLm1wdi5Qcm9wZXJ0eS5fX3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhfciA9IE5VTEw7CisrICBfX3B5eF9M MDo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfc3RhdGUpOworKyAgX19QeXhfWERFQ1JFRihf X3B5eF92X19kaWN0KTsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMDgKKy0gKiAgICAgZWxpZiBub2RlLmZv cm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorLSAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0 X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkKKy0gKiAgICAgZWxpZiBub2RlLmZvcm1h dCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgIHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3Jt YXQpCistICogICAgIHJldHVybiBOb25lCisrLyogIih0cmVlIGZyYWdtZW50KSI6MTYKKysgKiAg ICAgZWxzZToKKysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgKHR5 cGUoc2VsZiksIDB4MDU3MmQxMSwgc3RhdGUpCisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18o c2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg IF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCisg ICovCistICAgIGJyZWFrOworLSAgICBkZWZhdWx0OiBicmVhazsKKy0gIH0KKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTAKKy0gKiAgICAgZWxpZiBub2RlLmZvcm1h dCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6CistICogICAgICAgICByZXR1cm4gX2NvbnZlcnRf dmFsdWUobm9kZS51Lmxpc3QsIG5vZGUuZm9ybWF0KQorLSAqICAgICByZXR1cm4gTm9uZSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogCisrLyogUHl0aG9uIHdyYXBwZXIg Ki8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJv cGVydHlfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfM19fc2V0c3RhdGVfY3l0aG9u X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUp IHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyAo d3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfOFByb3BlcnR5XzJfX3NldHN0YXRlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICop X19weXhfdl9fX3B5eF9zdGF0ZSkpOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisr ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30K KysKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJv cGVydHlfMl9fc2V0c3RhdGVfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf c3RhdGUpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIGludCBfX3B5 eF9saW5lbm8gPSAwOworKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f c2V0c3RhdGVfY3l0aG9uX18iLCAwKTsKKysKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjE3Cisr ICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAw eDA1NzJkMTEsIHN0YXRlKQorKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4 X3N0YXRlKToKKysgKiAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShzZWxm LCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqLworLSAgX19Q eXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYo UHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworKyAgaWYgKCEobGlrZWx5KFB5VHVwbGVfQ2hl Y2tFeGFjdChfX3B5eF92X19fcHl4X3N0YXRlKSl8fCgoX19weXhfdl9fX3B5eF9zdGF0ZSkgPT0g UHlfTm9uZSl8fChQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiRXhwZWN0ZWQgJS4xNnMs IGdvdCAlLjIwMHMiLCAidHVwbGUiLCBQeV9UWVBFKF9fcHl4X3ZfX19weXhfc3RhdGUpLT50cF9u YW1lKSwgMCkpKSBfX1BZWF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8x ID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfUHJvcGVydHlf X3NldF9zdGF0ZShfX3B5eF92X3NlbGYsICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3RhdGUp KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxOTcKKy0gKiAKKy0gKiAKKy0gKiBjZGVmIF9jb252ZXJ0X25vZGVfdmFsdWUobXB2X25v ZGUgbm9kZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgaWYgbm9kZS5m b3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CistICogICAgICAgICByZXR1cm4gX3N0cmRlYyhu b2RlLnUuc3RyaW5nKQorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTYKKysgKiAgICAgZWxzZToK KysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgKHR5cGUoc2VsZiks IDB4MDU3MmQxMSwgc3RhdGUpCisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19w eXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIF9fcHl4X3Vu cGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCisgICovCisgCisg ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9J TkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOworICAgX19weXhfTDFfZXJyb3I6Owor ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzQpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX2NvbnZlcnRf bm9kZV92YWx1ZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OworLSAgX19weXhfciA9IDA7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJz Lm1wdi5Qcm9wZXJ0eS5fX3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKyAgIF9fcHl4X0ww OjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjIxMworLSAqIAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoyNjMKKyAgKiAKKy0gKiBjZGVmIF9jb252ZXJ0X3ZhbHVlKHZvaWQqIGRhdGEsIG1wdl9m b3JtYXQgZm9ybWF0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBjZGVm IG1wdl9ub2RlIG5vZGUKKy0gKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0IG5vZGVsaXN0CisrICog ICAgIEBwcm9wZXJ0eQorKyAqICAgICBkZWYgZXJyb3Jfc3RyKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBl cnJvciBwcm9lcHJ0eSIiIgorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworICAq LworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2Nv bnZlcnRfdmFsdWUodm9pZCAqX19weXhfdl9kYXRhLCBlbnVtIG1wdl9mb3JtYXQgX19weXhfdl9m b3JtYXQpIHsKKy0gIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF92X25vZGU7CistICBzdHJ1Y3QgbXB2 X25vZGVfbGlzdCBfX3B5eF92X25vZGVsaXN0OworLSAgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWVz ID0gTlVMTDsKKy0gIGludCBfX3B5eF92X2k7CistICBQeU9iamVjdCAqX19weXhfdl92YWx1ZSA9 IE5VTEw7CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfOWVycm9yX3N0cl8xX19nZXRfXyhQeU9iamVj dCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzllcnJvcl9zdHJfMV9fZ2V0X18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworKyAgX19QeXhfUmVm TmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9f ICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl81RXZlbnRfOWVycm9yX3N0cl9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpKTsKKysKKysgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1 cm4gX19weXhfcjsKKyt9CisrCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50XzllcnJvcl9zdHJfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdl9zZWxmKSB7CisrICBjaGFyIGNvbnN0 ICpfX3B5eF92X2Vycl9jOworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAg aW50IF9fcHl4X3RfMjsKKy0gIGludCBfX3B5eF90XzM7CistICBpbnQgX19weXhfdF80OworLSAg aW50IF9fcHl4X3RfNTsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOworLSAgUHlPYmpl Y3QgKl9fcHl4X3RfNyA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF84ID0gTlVMTDsKKysg IFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5V TEw7CisrICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKyAgIGludCBfX3B5eF9saW5lbm8g PSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9jb252ZXJ0X3Zh bHVlIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIxNgorLSAqICAgICBjZGVm IG1wdl9ub2RlIG5vZGUKKy0gKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0IG5vZGVsaXN0CistICog ICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIG5vZGUgPSAoPG1wdl9ub2RlKj5kYXRhKVswXQorLSAqICAgICAg ICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZSkKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoyNjYKKysgKiAgICAgICAgICIiIm1wdl9lcnJvcl9zdHJpbmcgb2Yg dGhlIGVycm9yIHByb2VwcnR5IiIiCisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVycl9j CisrICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKHNlbGYuZXJyb3IpCisrICog ICAgICAgICByZXR1cm4gX3N0cmRlYyhlcnJfYykKKyAgKi8KKy0gIHN3aXRjaCAoX19weXhfdl9m b3JtYXQpIHsKKy0gICAgY2FzZSBNUFZfRk9STUFUX05PREU6CisrICB7CisrICAgICAgI2lmZGVm IFdJVEhfVEhSRUFECisrICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CisrICAgICAgUHlfVU5C TE9DS19USFJFQURTCisrICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworKyAgICAgICNl bmRpZgorKyAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjIxNworLSAqICAgICBjZGVmIG1wdl9ub2RlX2xpc3Qgbm9kZWxpc3QKKy0gKiAg ICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERToKKy0gKiAgICAgICAgIG5vZGUgPSAoPG1w dl9ub2RlKj5kYXRhKVswXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICByZXR1cm4gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlKQorLSAqICAgICBlbGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX05PREVfQVJSQVk6CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjY3CisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVycl9jCisrICog ICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIGVycl9jID0gbXB2X2Vycm9yX3N0 cmluZyhzZWxmLmVycm9yKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICByZXR1cm4gX3N0cmRlYyhlcnJfYykKKysgKiAKKyAgKi8KKy0gICAgX19weXhfdl9ub2RlID0g KCgoc3RydWN0IG1wdl9ub2RlICopX19weXhfdl9kYXRhKVswXSk7CisrICAgICAgICBfX3B5eF92 X2Vycl9jID0gbXB2X2Vycm9yX3N0cmluZyhfX3B5eF92X3NlbGYtPmVycm9yKTsKKysgICAgICB9 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTgKKy0gKiAgICAg aWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERToKKy0gKiAgICAgICAgIG5vZGUgPSAoPG1wdl9u b2RlKj5kYXRhKVswXQorLSAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9k ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX05PREVfQVJSQVk6CistICogICAgICAgICBub2RlbGlzdCA9ICg8bXB2X25vZGVf bGlzdCo+ZGF0YSlbMF0KKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MjY2CisrICogICAgICAgICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBlcnJvciBwcm9lcHJ0 eSIiIgorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworKyAqICAgICAgICAgd2l0 aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVy cl9jID0gbXB2X2Vycm9yX3N0cmluZyhzZWxmLmVycm9yKQorKyAqICAgICAgICAgcmV0dXJuIF9z dHJkZWMoZXJyX2MpCisgICovCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9f cHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFs dWUoX19weXhfdl9ub2RlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MjE4LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAg IF9fcHl4X3IgPSBfX3B5eF90XzE7CistICAgIF9fcHl4X3RfMSA9IDA7CistICAgIGdvdG8gX19w eXhfTDA7CisrICAgICAgLypmaW5hbGx5OiovIHsKKysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97 CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICBfX1B5eF9GYXN0R0lM X0ZvcmdldCgpOworKyAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgICNlbmRp ZgorKyAgICAgICAgICBnb3RvIF9fcHl4X0w1OworKyAgICAgICAgfQorKyAgICAgICAgX19weXhf TDU6OworKyAgICAgIH0KKysgIH0KKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjIxNgorLSAqICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKKy0gKiAgICAgY2RlZiBtcHZf bm9kZV9saXN0IG5vZGVsaXN0CistICogICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREU6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIG5vZGUgPSAoPG1wdl9u b2RlKj5kYXRhKVswXQorLSAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9k ZSkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNjgKKysgKiAgICAgICAg IHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKHNl bGYuZXJyb3IpCisrICogICAgICAgICByZXR1cm4gX3N0cmRlYyhlcnJfYykgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAqICAgICBjZGVmIF9kYXRhKHNlbGYsIG1wdl9ldmVu dCogZXZlbnQpOgorICAqLworLSAgICBicmVhazsKKy0gICAgY2FzZSBNUFZfRk9STUFUX05PREVf QVJSQVk6CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCAyNjgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7CisrICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19w eXhfdl9lcnJfYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI2OCwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgIF9fcHl4X3Rf NCA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9T RUxGKF9fcHl4X3RfMik7CisrICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgeworKyAgICAgIFB5 T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworKyAg ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlv bik7CisrICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKysgICAg fQorKyAgfQorKyAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9D YWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dF80KTsgX19weXhfdF80ID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjY4LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19QeXhfREVD UkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICBfX3B5eF9yID0gX19weXhfdF8xOwor KyAgX19weXhfdF8xID0gMDsKKysgIGdvdG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjAKKy0gKiAgICAgICAgIHJldHVybiBfY29udmVydF9u b2RlX3ZhbHVlKG5vZGUpCistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9B UlJBWToKKy0gKiAgICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB2YWx1ZXMgPSBbXQorLSAq ICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKToKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyNjMKKysgKiAKKysgKiAgICAgQHByb3BlcnR5CisrICogICAg IGRlZiBlcnJvcl9zdHIoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgICAgICIiIm1wdl9lcnJvcl9zdHJpbmcgb2YgdGhlIGVycm9yIHByb2VwcnR5IiIiCisrICog ICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVycl9jCisgICovCistICAgIF9fcHl4X3Zfbm9kZWxp c3QgPSAoKChzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqKV9fcHl4X3ZfZGF0YSlbMF0pOworIAorLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjIxCistICogICAgIGVsaWYgZm9y bWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKKy0gKiAgICAgICAgIG5vZGVsaXN0ID0gKDxt cHZfbm9kZV9saXN0Kj5kYXRhKVswXQorLSAqICAgICAgICAgdmFsdWVzID0gW10gICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3Qu bnVtKToKKy0gKiAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKF9jb252ZXJ0X25vZGVfdmFsdWUo bm9kZWxpc3QudmFsdWVzW2ldKSkKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19w eXhfTDFfZXJyb3I6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzIpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzQpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGli cy5tcHYuRXZlbnQuZXJyb3Jfc3RyLl9fZ2V0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5l bm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworKyAgX19weXhfTDA6Owor KyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRl eHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysKKysvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjcwCisrICogICAgICAgICByZXR1cm4gX3N0cmRlYyhlcnJfYykKKysgKiAK KysgKiAgICAgY2RlZiBfZGF0YShzZWxmLCBtcHZfZXZlbnQqIGV2ZW50KTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiB2b2lkKiBkYXRhID0gZXZlbnQuZGF0 YQorKyAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqIGNsaW1zZworICAq LworLSAgICBfX3B5eF90XzEgPSBQeUxpc3RfTmV3KDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAyMjEsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKy0gICAgX19weXhfdl92YWx1ZXMgPSBfX3B5eF90XzE7CistICAgIF9fcHl4 X3RfMSA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjIK Ky0gKiAgICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXQorLSAqICAg ICAgICAgdmFsdWVzID0gW10KKy0gKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51 bSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICB2YWx1ZXMu YXBwZW5kKF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZWxpc3QudmFsdWVzW2ldKSkKKy0gKiAgICAg ICAgIHJldHVybiB2YWx1ZXMKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCAqX19weXhfdl9zZWxmLCBzdHJ1Y3QgbXB2X2V2ZW50ICpfX3B5eF92X2V2ZW50 KSB7CisrICB2b2lkICpfX3B5eF92X2RhdGE7CisrICBzdHJ1Y3QgbXB2X2V2ZW50X2NsaWVudF9t ZXNzYWdlICpfX3B5eF92X2NsaW1zZzsKKysgIFB5T2JqZWN0ICpfX3B5eF92X2FyZ3MgPSBOVUxM OworKyAgaW50IF9fcHl4X3ZfbnVtX2FyZ3M7CisrICBpbnQgX19weXhfdl9pOworKyAgUHlPYmpl Y3QgKl9fcHl4X3ZfYXJnID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKysg IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICB2b2lkICpfX3B5eF90XzE7CisrICBQeU9i amVjdCAqX19weXhfdF8yID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwor KyAgaW50IF9fcHl4X3RfNDsKKysgIGludCBfX3B5eF90XzU7CisrICBpbnQgX19weXhfdF82Owor KyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CisrICBpbnQgX19weXhfdF84OworKyAgaW50 IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7 CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiX2RhdGEiLCAwKTsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy NzEKKysgKiAKKysgKiAgICAgY2RlZiBfZGF0YShzZWxmLCBtcHZfZXZlbnQqIGV2ZW50KToKKysg KiAgICAgICAgIGNkZWYgdm9pZCogZGF0YSA9IGV2ZW50LmRhdGEgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqIGNs aW1zZworKyAqICAgICAgICAgaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JF UExZOgorICAqLworLSAgICBfX3B5eF90XzIgPSBfX3B5eF92X25vZGVsaXN0Lm51bTsKKy0gICAg X19weXhfdF8zID0gX19weXhfdF8yOworLSAgICBmb3IgKF9fcHl4X3RfNCA9IDA7IF9fcHl4X3Rf NCA8IF9fcHl4X3RfMzsgX19weXhfdF80Kz0xKSB7CistICAgICAgX19weXhfdl9pID0gX19weXhf dF80OworKyAgX19weXhfdF8xID0gX19weXhfdl9ldmVudC0+ZGF0YTsKKysgIF9fcHl4X3ZfZGF0 YSA9IF9fcHl4X3RfMTsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjIzCistICogICAgICAgICB2YWx1ZXMgPSBbXQorLSAqICAgICAgICAgZm9yIGkgaW4gcmFu Z2Uobm9kZWxpc3QubnVtKToKKy0gKiAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKF9jb252ZXJ0 X25vZGVfdmFsdWUobm9kZWxpc3QudmFsdWVzW2ldKSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgcmV0dXJuIHZhbHVlcworLSAqICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX05PREVfTUFQOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjI3MworKyAqICAgICAgICAgY2RlZiB2b2lkKiBkYXRhID0gZXZlbnQuZGF0YQorKyAqICAgICAg ICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqIGNsaW1zZworKyAqICAgICAgICAgaWYg c2VsZi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1w dl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKKysgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZf RVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgorICAqLworLSAgICAgIF9fcHl4X3RfMSA9IF9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoKF9fcHl4X3Zfbm9kZWxp c3QudmFsdWVzW19fcHl4X3ZfaV0pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMjIzLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKy0gICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9BcHBlbmQoX19weXhfdl92YWx1 ZXMsIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzUgPT0gKChpbnQpLTEpKSkgX19Q WVhfRVJSKDAsIDIyMywgX19weXhfTDFfZXJyb3IpCistICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIH0KKysgIHN3aXRjaCAoX19weXhfdl9zZWxmLT5p ZCkgeworKyAgICBjYXNlIE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6CisgCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjQKKy0gKiAgICAgICAgIGZvciBpIGlu IHJhbmdlKG5vZGVsaXN0Lm51bSk6CistICogICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChfY29u dmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkpCistICogICAgICAgICByZXR1cm4g dmFsdWVzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgZWxpZiBmb3JtYXQg PT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKy0gKiAgICAgICAgIG5vZGVsaXN0ID0gKDxtcHZfbm9k ZV9saXN0Kj5kYXRhKVswXQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Mjc0CisrICogICAgICAgICBjZGVmIG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSogY2xpbXNnCisr ICogICAgICAgICBpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6Cisr ICogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0 eSo+ZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZWxpZiBz ZWxmLmlkID09IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6CisrICogICAgICAgICAgICAgcmV0 dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKKyAgKi8KKyAg ICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFs dWVzKTsKKy0gICAgX19weXhfciA9IF9fcHl4X3ZfdmFsdWVzOworKyAgICBfX3B5eF90XzIgPSBf X1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCAyNzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKKysgICAgX19weXhfdF8zID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUHJvcGVydHkgKikoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5ICopX19weXhfdF8yKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF90XzIpLCAo KHN0cnVjdCBtcHZfZXZlbnRfcHJvcGVydHkgKilfX3B5eF92X2RhdGEpKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjc0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5 eF90XzIgPSAwOworKyAgICBfX3B5eF9yID0gX19weXhfdF8zOworKyAgICBfX3B5eF90XzMgPSAw OworICAgICBnb3RvIF9fcHl4X0wwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjE5CistICogICAgICAgICBub2RlID0gKDxtcHZfbm9kZSo+ZGF0YSlbMF0KKy0g KiAgICAgICAgIHJldHVybiBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGUpCistICogICAgIGVsaWYg Zm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCist ICogICAgICAgICB2YWx1ZXMgPSBbXQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjczCisrICogICAgICAgICBjZGVmIHZvaWQqIGRhdGEgPSBldmVudC5kYXRhCisrICog ICAgICAgICBjZGVmIG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSogY2xpbXNnCisrICogICAgICAg ICBpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5p dCg8bXB2X2V2ZW50X3Byb3BlcnR5Kj5kYXRhKQorKyAqICAgICAgICAgZWxpZiBzZWxmLmlkID09 IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6CisgICovCisgICAgIGJyZWFrOworLSAgICBjYXNl IE1QVl9GT1JNQVRfTk9ERV9NQVA6CisrICAgIGNhc2UgTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5H RToKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNgorLSAqICAg ICAgICAgcmV0dXJuIHZhbHVlcworLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05P REVfTUFQOgorLSAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBd ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHZhbHVlcyA9IHt9Cist ICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOgorKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc2CisrICogICAgICAgICAgICAgcmV0dXJuIFByb3Bl cnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKKysgKiAgICAgICAgIGVsaWYg c2VsZi5pZCA9PSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgorKyAqICAgICAgICAgICAgIHJl dHVybiBQcm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZlbnRfcHJvcGVydHkqPmRhdGEpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZF TlRfTE9HX01FU1NBR0U6CisrICogICAgICAgICAgICAgcmV0dXJuIExvZ01lc3NhZ2UoKS5faW5p dCg8bXB2X2V2ZW50X2xvZ19tZXNzYWdlKj5kYXRhKQorICAqLworLSAgICBfX3B5eF92X25vZGVs aXN0ID0gKCgoc3RydWN0IG1wdl9ub2RlX2xpc3QgKilfX3B5eF92X2RhdGEpWzBdKTsKKysgICAg X19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3Rf Q2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UHJvcGVydHkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjc2LCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fcHl4 X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1By b3BlcnR5ICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eSAqKV9fcHl4X3RfMyktPl9fcHl4X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdF8zKSwgKChzdHJ1Y3QgbXB2X2V2 ZW50X3Byb3BlcnR5ICopX19weXhfdl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDI3NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysg ICAgX19weXhfciA9IF9fcHl4X3RfMjsKKysgICAgX19weXhfdF8yID0gMDsKKysgICAgZ290byBf X3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNwor LSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorLSAqICAgICAgICAg bm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCistICogICAgICAgICB2YWx1ZXMg PSB7fSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBmb3IgaSBpbiBy YW5nZShub2RlbGlzdC5udW0pOgorLSAqICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZlcnRfbm9k ZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyNzUKKysgKiAgICAgICAgIGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0dFVF9Q Uk9QRVJUWV9SRVBMWToKKysgKiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8 bXB2X2V2ZW50X3Byb3BlcnR5Kj5kYXRhKQorKyAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1Q Vl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8bXB2X2V2ZW50X3Byb3BlcnR5 Kj5kYXRhKQorKyAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9MT0dfTUVTU0FH RToKKyAgKi8KKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDApOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjcsIF9fcHl4X0wxX2Vycm9y KQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19weXhfdl92YWx1ZXMgPSBf X3B5eF90XzE7CistICAgIF9fcHl4X3RfMSA9IDA7CisrICAgIGJyZWFrOworKyAgICBjYXNlIE1Q Vl9FVkVOVF9MT0dfTUVTU0FHRToKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjIyOAorLSAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEp WzBdCistICogICAgICAgICB2YWx1ZXMgPSB7fQorLSAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uo bm9kZWxpc3QubnVtKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ICAgIHZhbHVlID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pCistICog ICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMobm9kZWxpc3Qua2V5c1tpXSldID0gdmFsdWUKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3OAorKyAqICAgICAgICAgICAg IHJldHVybiBQcm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZlbnRfcHJvcGVydHkqPmRhdGEpCisrICog ICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0xPR19NRVNTQUdFOgorKyAqICAgICAg ICAgICAgIHJldHVybiBMb2dNZXNzYWdlKCkuX2luaXQoPG1wdl9ldmVudF9sb2dfbWVzc2FnZSo+ ZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIyBlbGlmIHNl bGYuaWQgPT0gTVBWX0VWRU5UX1NDUklQVF9JTlBVVF9ESVNQQVRDSDoKKysgKiAgICAgICAgICMg ICAgIHJldHVybiBJbnB1dERpc3BhdGNoKCkuX2luaXQoPG1wdl9ldmVudF9zY3JpcHRfaW5wdXRf ZGlzcGF0Y2gqPmRhdGEpCisgICovCistICAgIF9fcHl4X3RfMiA9IF9fcHl4X3Zfbm9kZWxpc3Qu bnVtOworLSAgICBfX3B5eF90XzMgPSBfX3B5eF90XzI7CistICAgIGZvciAoX19weXhfdF80ID0g MDsgX19weXhfdF80IDwgX19weXhfdF8zOyBfX3B5eF90XzQrPTEpIHsKKy0gICAgICBfX3B5eF92 X2kgPSBfX3B5eF90XzQ7CisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICAgIF9fcHl4 X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgMjc4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7CisrICAgIF9fcHl4X3RfMyA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3Rf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKikoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF90XzIpLT5fX3B5eF92dGFiKS0+ X2luaXQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl ICopX19weXhfdF8yKSwgKChzdHJ1Y3QgbXB2X2V2ZW50X2xvZ19tZXNzYWdlICopX19weXhfdl9k YXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI3OCwgX19weXhf TDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgX19weXhfciA9IF9fcHl4X3RfMzsK KysgICAgX19weXhfdF8zID0gMDsKKysgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjI5CistICogICAgICAgICB2YWx1ZXMgPSB7 fQorLSAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKToKKy0gKiAgICAgICAg ICAgICB2YWx1ZSA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZWxpc3QudmFsdWVzW2ldKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMo bm9kZWxpc3Qua2V5c1tpXSldID0gdmFsdWUKKy0gKiAgICAgICAgIHJldHVybiB2YWx1ZXMKKy0g Ki8KKy0gICAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29u dmVydF9ub2RlX3ZhbHVlKChfX3B5eF92X25vZGVsaXN0LnZhbHVlc1tfX3B5eF92X2ldKSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIyOSwgX19weXhfTDFfZXJyb3Ip CistICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgICAgX19QeXhfWERFQ1JFRl9T RVQoX19weXhfdl92YWx1ZSwgX19weXhfdF8xKTsKKy0gICAgICBfX3B5eF90XzEgPSAwOworKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc3CisrICogICAgICAgICBlbGlm IHNlbGYuaWQgPT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToKKysgKiAgICAgICAgICAgICBy ZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8bXB2X2V2ZW50X3Byb3BlcnR5Kj5kYXRhKQorKyAqICAg ICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9MT0dfTUVTU0FHRTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybiBMb2dNZXNzYWdlKCkuX2lu aXQoPG1wdl9ldmVudF9sb2dfbWVzc2FnZSo+ZGF0YSkKKysgKiAgICAgICAgICMgZWxpZiBzZWxm LmlkID09IE1QVl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0g6CisrICovCisrICAgIGJyZWFr OworKyAgICBjYXNlIE1QVl9FVkVOVF9DTElFTlRfTUVTU0FHRToKKyAKKy0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjMwCistICogICAgICAgICBmb3IgaSBpbiByYW5n ZShub2RlbGlzdC5udW0pOgorLSAqICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZlcnRfbm9kZV92 YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pCistICogICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMo bm9kZWxpc3Qua2V5c1tpXSldID0gdmFsdWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgcmV0dXJuIHZhbHVlcworLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX1NUUklORzoKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4Mgor KyAqICAgICAgICAgIyAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2goKS5faW5pdCg8bXB2X2V2ZW50 X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkKKysgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9 PSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0U6CisrICogICAgICAgICAgICAgY2xpbXNnID0gPG1w dl9ldmVudF9jbGllbnRfbWVzc2FnZSo+ZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICAgICAgYXJncyA9IFtdCisrICogICAgICAgICAgICAgbnVtX2FyZ3MgPSBj bGltc2cubnVtX2FyZ3MKKyAgKi8KKy0gICAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9f cHl4X3RfNiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDIzMCwgX19weXhfTDFfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNik7CistICAgICAgX19weXhfdF83ID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKChfX3B5 eF92X25vZGVsaXN0LmtleXNbX19weXhfdl9pXSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykp IF9fUFlYX0VSUigwLCAyMzAsIF9fcHl4X0wxX2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOworLSAgICAgIF9fcHl4X3RfOCA9IE5VTEw7CistICAgICAgaWYgKENZVEhPTl9V TlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgewor LSAgICAgICAgX19weXhfdF84ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82KTsKKy0gICAg ICAgIGlmIChsaWtlbHkoX19weXhfdF84KSkgeworLSAgICAgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKKy0gICAgICAgICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfOCk7CistICAgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Cist ICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7CistICAgICAg ICB9CistICAgICAgfQorLSAgICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzgpID8gX19QeXhfUHlP YmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF84LCBfX3B5eF90XzcpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNyk7CistICAgICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworLSAgICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDIzMCwgX19weXhfTDFfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CistICAgICAgaWYgKHVubGlrZWx5KFB5T2JqZWN0X1NldEl0ZW0oX19weXhfdl92YWx1ZXMs IF9fcHl4X3RfMSwgX19weXhfdl92YWx1ZSkgPCAwKSkgX19QWVhfRVJSKDAsIDIzMCwgX19weXhf TDFfZXJyb3IpCistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 CistICAgIH0KKysgICAgX19weXhfdl9jbGltc2cgPSAoKHN0cnVjdCBtcHZfZXZlbnRfY2xpZW50 X21lc3NhZ2UgKilfX3B5eF92X2RhdGEpOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjMxCistICogICAgICAgICAgICAgdmFsdWUgPSBfY29udmVydF9ub2RlX3Zh bHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkKKy0gKiAgICAgICAgICAgICB2YWx1ZXNbX3N0cmRlYyhu b2RlbGlzdC5rZXlzW2ldKV0gPSB2YWx1ZQorLSAqICAgICAgICAgcmV0dXJuIHZhbHVlcyAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JN QVRfU1RSSU5HOgorLSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoKCg8Y2hhcioqPmRhdGEpWzBd KSkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4MworKyAqICAgICAg ICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9DTElFTlRfTUVTU0FHRToKKysgKiAgICAgICAg ICAgICBjbGltc2cgPSA8bXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKj5kYXRhCisrICogICAgICAg ICAgICAgYXJncyA9IFtdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICAgICBudW1fYXJncyA9IGNsaW1zZy5udW1fYXJncworKyAqICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKG51bV9hcmdzKToKKyAgKi8KKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0g ICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWVzKTsKKy0gICAgX19weXhfciA9IF9fcHl4X3Zf dmFsdWVzOworLSAgICBnb3RvIF9fcHl4X0wwOworKyAgICBfX3B5eF90XzMgPSBQeUxpc3RfTmV3 KDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyODMsIF9fcHl4X0wx X2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgX19weXhfdl9hcmdz ID0gKChQeU9iamVjdCopX19weXhfdF8zKTsKKysgICAgX19weXhfdF8zID0gMDsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNQorLSAqICAgICAgICAgICAgIHZh bHVlcy5hcHBlbmQoX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pKQorLSAq ICAgICAgICAgcmV0dXJuIHZhbHVlcworLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBub2Rl bGlzdCA9ICg8bXB2X25vZGVfbGlzdCo+ZGF0YSlbMF0KKy0gKiAgICAgICAgIHZhbHVlcyA9IHt9 CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODQKKysgKiAgICAgICAg ICAgICBjbGltc2cgPSA8bXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKj5kYXRhCisrICogICAgICAg ICAgICAgYXJncyA9IFtdCisrICogICAgICAgICAgICAgbnVtX2FyZ3MgPSBjbGltc2cubnVtX2Fy Z3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKG51bV9hcmdzKToKKysgKiAgICAgICAgICAgICAgICAgYXJnID0gPGNoYXIqPmNsaW1z Zy5hcmdzW2ldCisgICovCistICAgIGJyZWFrOworLSAgICBjYXNlIE1QVl9GT1JNQVRfU1RSSU5H OgorKyAgICBfX3B5eF90XzQgPSBfX3B5eF92X2NsaW1zZy0+bnVtX2FyZ3M7CisrICAgIF9fcHl4 X3ZfbnVtX2FyZ3MgPSBfX3B5eF90XzQ7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyMzMKKy0gKiAgICAgICAgIHJldHVybiB2YWx1ZXMKKy0gKiAgICAgZWxpZiBm b3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CistICogICAgICAgICByZXR1cm4gX3N0cmRlYygo KDxjaGFyKio+ZGF0YSlbMF0pKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg IGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzoKKy0gKiAgICAgICAgIHJldHVybiBub3Qg bm90ICg8dWludDY0X3QqPmRhdGEpWzBdCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyODUKKysgKiAgICAgICAgICAgICBhcmdzID0gW10KKysgKiAgICAgICAgICAgICBu dW1fYXJncyA9IGNsaW1zZy5udW1fYXJncworKyAqICAgICAgICAgICAgIGZvciBpIGluIHJhbmdl KG51bV9hcmdzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAg ICAgICBhcmcgPSA8Y2hhcio+Y2xpbXNnLmFyZ3NbaV0KKysgKiAgICAgICAgICAgICAgICAgYXJn ID0gX3N0cmRlYyhhcmcpCisgICovCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3Nfc3RyZGVjKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJv cikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICAgIF9fcHl4X3RfNyA9IF9fUHl4 X1B5Qnl0ZXNfRnJvbVN0cmluZygoKChjaGFyICoqKV9fcHl4X3ZfZGF0YSlbMF0pKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJvcikKKy0g ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICAgIF9fcHl4X3RfOCA9IE5VTEw7CistICAg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19w eXhfdF82KSkpIHsKKy0gICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzYpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF84KSkgeworLSAgICAgICAgUHlPYmplY3Qq IGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7CistICAgICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF84KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7 CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOworLSAgICAg IH0KKy0gICAgfQorLSAgICBfX3B5eF90XzEgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfOCwgX19weXhfdF83KSA6IF9fUHl4X1B5T2Jq ZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzcpOworLSAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90Xzcp OyBfX3B5eF90XzcgPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAyMzMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CistICAgIF9fcHl4 X3IgPSBfX3B5eF90XzE7CistICAgIF9fcHl4X3RfMSA9IDA7CistICAgIGdvdG8gX19weXhfTDA7 CisrICAgIF9fcHl4X3RfNCA9IF9fcHl4X3ZfbnVtX2FyZ3M7CisrICAgIF9fcHl4X3RfNSA9IF9f cHl4X3RfNDsKKysgICAgZm9yIChfX3B5eF90XzYgPSAwOyBfX3B5eF90XzYgPCBfX3B5eF90XzU7 IF9fcHl4X3RfNis9MSkgeworKyAgICAgIF9fcHl4X3ZfaSA9IF9fcHl4X3RfNjsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzMgorLSAqICAgICAgICAgICAgIHZh bHVlc1tfc3RyZGVjKG5vZGVsaXN0LmtleXNbaV0pXSA9IHZhbHVlCistICogICAgICAgICByZXR1 cm4gdmFsdWVzCistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1cm4gX3N0cmRlYygoKDxj aGFyKio+ZGF0YSlbMF0pKQorLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6 CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NgorKyAqICAgICAg ICAgICAgIG51bV9hcmdzID0gY2xpbXNnLm51bV9hcmdzCisrICogICAgICAgICAgICAgZm9yIGkg aW4gcmFuZ2UobnVtX2FyZ3MpOgorKyAqICAgICAgICAgICAgICAgICBhcmcgPSA8Y2hhcio+Y2xp bXNnLmFyZ3NbaV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAg ICAgICBhcmcgPSBfc3RyZGVjKGFyZykKKysgKiAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQo YXJnKQorICAqLworLSAgICBicmVhazsKKy0gICAgY2FzZSBNUFZfRk9STUFUX0ZMQUc6CisrICAg ICAgX19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKCgoY2hhciAqKShfX3B5eF92 X2NsaW1zZy0+YXJnc1tfX3B5eF92X2ldKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9f UFlYX0VSUigwLCAyODYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOworKyAgICAgIF9fUHl4X1hERUNSRUZfU0VUKF9fcHl4X3ZfYXJnLCBfX3B5eF90XzMp OworKyAgICAgIF9fcHl4X3RfMyA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyMzUKKy0gKiAgICAgICAgIHJldHVybiBfc3RyZGVjKCgoPGNoYXIqKj5kYXRh KVswXSkpCistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzoKKy0gKiAgICAg ICAgIHJldHVybiBub3Qgbm90ICg8dWludDY0X3QqPmRhdGEpWzBdICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKy0g KiAgICAgICAgIHJldHVybiBpbnQoKDx1aW50NjRfdCo+ZGF0YSlbMF0pCisrICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NworKyAqICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKG51bV9hcmdzKToKKysgKiAgICAgICAgICAgICAgICAgYXJnID0gPGNoYXIqPmNsaW1z Zy5hcmdzW2ldCisrICogICAgICAgICAgICAgICAgIGFyZyA9IF9zdHJkZWMoYXJnKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFy ZykKKysgKiAgICAgICAgICAgICByZXR1cm4gYXJncworICAqLworLSAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3IpOworLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoKCEo KCgodWludDY0X3QgKilfX3B5eF92X2RhdGEpWzBdKSAhPSAwKSkgIT0gMCkpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjM1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CistICAg IF9fcHl4X3RfMSA9IDA7CistICAgIGdvdG8gX19weXhfTDA7CisrICAgICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyODcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICAgIF9fcHl4X3RfNyA9IE5VTEw7CisrICAgICAg aWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5 eF90XzIpKSkgeworKyAgICAgICAgX19weXhfdF83ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhf dF8yKTsKKysgICAgICAgIGlmIChsaWtlbHkoX19weXhfdF83KSkgeworKyAgICAgICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAg ICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNyk7CisrICAgICAgICAgIF9fUHl4X0lOQ1JFRihm dW5jdGlvbik7CisrICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlv bik7CisrICAgICAgICB9CisrICAgICAgfQorKyAgICAgIF9fcHl4X3RfMyA9IChfX3B5eF90Xzcp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF83LCBfX3B5eF92 X2FyZykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9hcmcp OworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgICAg ICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyODcsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19w eXhfdl9hcmcsIF9fcHl4X3RfMyk7CisrICAgICAgX19weXhfdF8zID0gMDsKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzNAorLSAqICAgICBlbGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX1NUUklORzoKKy0gKiAgICAgICAgIHJldHVybiBfc3RyZGVjKCgoPGNoYXIq Kj5kYXRhKVswXSkpCistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIG5vdCBub3QgKDx1 aW50NjRfdCo+ZGF0YSlbMF0KKy0gKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2 NDoKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg4CisrICogICAg ICAgICAgICAgICAgIGFyZyA9IDxjaGFyKj5jbGltc2cuYXJnc1tpXQorKyAqICAgICAgICAgICAg ICAgICBhcmcgPSBfc3RyZGVjKGFyZykKKysgKiAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQo YXJnKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmV0dXJu IGFyZ3MKKysgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfRU5EX0ZJTEU6Cisg ICovCistICAgIGJyZWFrOworLSAgICBjYXNlIE1QVl9GT1JNQVRfSU5UNjQ6CisrICAgICAgX19w eXhfdF84ID0gX19QeXhfUHlMaXN0X0FwcGVuZChfX3B5eF92X2FyZ3MsIF9fcHl4X3ZfYXJnKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfOCA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMCwgMjg4LCBf X3B5eF9MMV9lcnJvcikKKysgICAgfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjM3CistICogICAgICAgICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5kYXRh KVswXQorLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorLSAqICAgICAg ICAgcmV0dXJuIGludCgoPHVpbnQ2NF90Kj5kYXRhKVswXSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKy0gKiAg ICAgICAgIHJldHVybiBmbG9hdCgoPGRvdWJsZSo+ZGF0YSlbMF0pCisrICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODkKKysgKiAgICAgICAgICAgICAgICAgYXJnID0gX3N0 cmRlYyhhcmcpCisrICogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykKKysgKiAgICAg ICAgICAgICByZXR1cm4gYXJncyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0VORF9GSUxFOgorKyAqICAgICAgICAgICAg IHJldHVybiBFbmRPZkZpbGVSZWFjaGVkKCkuX2luaXQoPG1wdl9ldmVudF9lbmRfZmlsZSo+ZGF0 YSkKKyAgKi8KKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8xID0g X19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCgoKCh1aW50NjRfdCAqKV9fcHl4X3ZfZGF0YSlbMF0p KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjM3LCBfX3B5eF9MMV9l cnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4X3RfNiA9IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoKChQeU9iamVjdCAqKSgmUHlJbnRfVHlwZSkpLCBfX3B5 eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAyMzcsIF9fcHl4 X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzY7 CistICAgIF9fcHl4X3RfNiA9IDA7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X2FyZ3MpOwor KyAgICBfX3B5eF9yID0gX19weXhfdl9hcmdzOworICAgICBnb3RvIF9fcHl4X0wwOworIAorLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM2CistICogICAgIGVsaWYgZm9y bWF0ID09IE1QVl9GT1JNQVRfRkxBRzoKKy0gKiAgICAgICAgIHJldHVybiBub3Qgbm90ICg8dWlu dDY0X3QqPmRhdGEpWzBdCistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiBpbnQoKDx1 aW50NjRfdCo+ZGF0YSlbMF0pCistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9V QkxFOgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjgxCisrICogICAg ICAgICAjIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENIOgor KyAqICAgICAgICAgIyAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2goKS5faW5pdCg8bXB2X2V2ZW50 X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkKKysgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9 PSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgICAgICBjbGltc2cgPSA8bXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKj5kYXRh CisrICogICAgICAgICAgICAgYXJncyA9IFtdCisgICovCisgICAgIGJyZWFrOworLSAgICBjYXNl IE1QVl9GT1JNQVRfRE9VQkxFOgorKyAgICBjYXNlIE1QVl9FVkVOVF9FTkRfRklMRToKKyAKKy0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzOQorLSAqICAgICAgICAgcmV0 dXJuIGludCgoPHVpbnQ2NF90Kj5kYXRhKVswXSkKKy0gKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBW X0ZPUk1BVF9ET1VCTEU6CistICogICAgICAgICByZXR1cm4gZmxvYXQoKDxkb3VibGUqPmRhdGEp WzBdKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJldHVybiBOb25lCisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTEKKysgKiAgICAgICAgICAg ICByZXR1cm4gYXJncworKyAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9FTkRf RklMRToKKysgKiAgICAgICAgICAgICByZXR1cm4gRW5kT2ZGaWxlUmVhY2hlZCgpLl9pbml0KDxt cHZfZXZlbnRfZW5kX2ZpbGUqPmRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgIHJldHVybiBOb25lCisgICogCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19w eXhfcik7CistICAgIF9fcHl4X3RfNiA9IFB5RmxvYXRfRnJvbURvdWJsZSgoKChkb3VibGUgKilf X3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDIzOSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAg ICBfX3B5eF9yID0gX19weXhfdF82OworLSAgICBfX3B5eF90XzYgPSAwOworKyAgICBfX3B5eF90 XzMgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8zKSkgX19QWVhfRVJSKDAsIDI5MSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzMpOworKyAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3Ry dWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICopKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICopX19weXhfdF8z KS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqKV9fcHl4X3RfMyksICgoc3RydWN0IG1wdl9ldmVudF9l bmRfZmlsZSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCAyOTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICAgIF9f cHl4X3IgPSBfX3B5eF90XzI7CisrICAgIF9fcHl4X3RfMiA9IDA7CisgICAgIGdvdG8gX19weXhf TDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMzgKKy0gKiAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKy0gKiAgICAgICAgIHJldHVybiBp bnQoKDx1aW50NjRfdCo+ZGF0YSlbMF0pCistICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JN QVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1 cm4gZmxvYXQoKDxkb3VibGUqPmRhdGEpWzBdKQorLSAqICAgICByZXR1cm4gTm9uZQorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjkwCisrICogICAgICAgICAgICAgICAg IGFyZ3MuYXBwZW5kKGFyZykKKysgKiAgICAgICAgICAgICByZXR1cm4gYXJncworKyAqICAgICAg ICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9FTkRfRklMRTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybiBFbmRPZkZpbGVSZWFjaGVkKCkuX2lu aXQoPG1wdl9ldmVudF9lbmRfZmlsZSo+ZGF0YSkKKysgKiAgICAgICAgIHJldHVybiBOb25lCisg ICovCisgICAgIGJyZWFrOworICAgICBkZWZhdWx0OiBicmVhazsKKyAgIH0KKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDAKKy0gKiAgICAgZWxpZiBmb3JtYXQgPT0g TVBWX0ZPUk1BVF9ET1VCTEU6CistICogICAgICAgICByZXR1cm4gZmxvYXQoKDxkb3VibGUqPmRh dGEpWzBdKQorLSAqICAgICByZXR1cm4gTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogCistICogCistICovCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MjkyCisrICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0VORF9GSUxFOgorKyAq ICAgICAgICAgICAgIHJldHVybiBFbmRPZkZpbGVSZWFjaGVkKCkuX2luaXQoPG1wdl9ldmVudF9l bmRfZmlsZSo+ZGF0YSkKKysgKiAgICAgICAgIHJldHVybiBOb25lICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgQHByb3BlcnR5CisrICovCisgICBfX1B5eF9YREVD UkVGKF9fcHl4X3IpOworICAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKKyAgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjEzCistICogCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjcw CisrICogICAgICAgICByZXR1cm4gX3N0cmRlYyhlcnJfYykKKyAgKiAKKy0gKiBjZGVmIF9jb252 ZXJ0X3ZhbHVlKHZvaWQqIGRhdGEsIG1wdl9mb3JtYXQgZm9ybWF0KTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKKy0gKiAgICAgY2RlZiBt cHZfbm9kZV9saXN0IG5vZGVsaXN0CisrICogICAgIGNkZWYgX2RhdGEoc2VsZiwgbXB2X2V2ZW50 KiBldmVudCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWYg dm9pZCogZGF0YSA9IGV2ZW50LmRhdGEKKysgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2NsaWVu dF9tZXNzYWdlKiBjbGltc2cKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor ICAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzYpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworKyAg X19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOwor LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuX2NvbnZlcnRfdmFsdWUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5l bm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxp YnMubXB2LkV2ZW50Ll9kYXRhIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7CisgICBfX3B5eF9yID0gMDsKKyAgIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdl92YWx1ZXMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X3ZhbHVlKTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfdl9hcmdzKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9h cmcpOworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjUwCistICogICAgIGNkZWYgcHVibGljIG9iamVjdCBuYW1lLCBk YXRhCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5NQorICAqIAorLSAqICAg ICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9wcm9wZXJ0eSogcHJvcCk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5u YW1lKQorLSAqICAgICAgICAgc2VsZi5kYXRhID0gX2NvbnZlcnRfdmFsdWUocHJvcC5kYXRhLCBw cm9wLmZvcm1hdCkKKysgKiAgICAgQHByb3BlcnR5CisrICogICAgIGRlZiBuYW1lKHNlbGYpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJtcHZfZXZlbnRfbmFt ZSBvZiB0aGUgZXZlbnQgaWQiIiIKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZV9j CisgICovCisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl84UHJvcGVydHlfX2luaXQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UHJvcGVydHkgKl9fcHl4X3Zfc2VsZiwgc3RydWN0IG1wdl9ldmVudF9wcm9wZXJ0eSAqX19weXhf dl9wcm9wKSB7CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfMV9fZ2V0X18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80bmFtZV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhf dl9zZWxmKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBw ZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF80bmFtZV9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRXZlbnQgKilfX3B5eF92X3NlbGYpKTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsK Kyt9CisrCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf NUV2ZW50XzRuYW1lX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgeworKyAgY2hhciBjb25zdCAqX19weXhfdl9uYW1lX2M7 CisgICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucworICAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CitAQCAtNTcwNCwxOCArNjEyOCw2 MyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9w ZXJ0eV9faW5pdChzdHJ1Y3QgX19weXhfb2JqXworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisg ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2luaXQiLCAwKTsKKysgIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUxCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Mjk4CisrICogICAgICAgICAiIiJtcHZfZXZlbnRfbmFtZSBvZiB0aGUgZXZlbnQg aWQiIiIKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZV9jCisrICogICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAg bmFtZV9jID0gbXB2X2V2ZW50X25hbWUoc2VsZi5pZCkKKysgKiAgICAgICAgIHJldHVybiBfc3Ry ZGVjKG5hbWVfYykKKysgKi8KKysgIHsKKysgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAg ICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKysgICAg ICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CisrICAgICAgI2VuZGlmCisrICAgICAgLyp0cnk6 Ki8geworKworKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5OQor KyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBuYW1lX2MKKysgKiAgICAgICAgIHdpdGggbm9n aWw6CisrICogICAgICAgICAgICAgbmFtZV9jID0gbXB2X2V2ZW50X25hbWUoc2VsZi5pZCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobmFt ZV9jKQorICAqIAorLSAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9wcm9wZXJ0eSog cHJvcCk6CistICogICAgICAgICBzZWxmLm5hbWUgPSBfc3RyZGVjKHByb3AubmFtZSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5kYXRhID0gX2NvbnZlcnRf dmFsdWUocHJvcC5kYXRhLCBwcm9wLmZvcm1hdCkKKy0gKiAgICAgICAgIHJldHVybiBzZWxmCisg ICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0 cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDI1MSwgX19weXhf TDFfZXJyb3IpCisrICAgICAgICBfX3B5eF92X25hbWVfYyA9IG1wdl9ldmVudF9uYW1lKF9fcHl4 X3Zfc2VsZi0+aWQpOworKyAgICAgIH0KKysKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6Mjk4CisrICogICAgICAgICAiIiJtcHZfZXZlbnRfbmFtZSBvZiB0aGUgZXZl bnQgaWQiIiIKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZV9jCisrICogICAgICAg ICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAg ICAgbmFtZV9jID0gbXB2X2V2ZW50X25hbWUoc2VsZi5pZCkKKysgKiAgICAgICAgIHJldHVybiBf c3RyZGVjKG5hbWVfYykKKysgKi8KKysgICAgICAvKmZpbmFsbHk6Ki8geworKyAgICAgICAgLypu b3JtYWwgZXhpdDoqL3sKKysgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAg IF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CisrICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKysg ICAgICAgICAgI2VuZGlmCisrICAgICAgICAgIGdvdG8gX19weXhfTDU7CisrICAgICAgICB9Cisr ICAgICAgICBfX3B5eF9MNTo7CisrICAgICAgfQorKyAgfQorKworKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjMwMAorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAg ICAgICAgICBuYW1lX2MgPSBtcHZfZXZlbnRfbmFtZShzZWxmLmlkKQorKyAqICAgICAgICAgcmV0 dXJuIF9zdHJkZWMobmFtZV9jKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisr ICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50KiBldmVudCwgY3R4KToKKysgKi8KKysg IF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9f cHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDMwMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X3Byb3At Pm5hbWUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyNTEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4 X3ZfbmFtZV9jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMzAwLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgX19weXhfdF80 ID0gTlVMTDsKKyAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRo b2RfQ2hlY2soX19weXhfdF8yKSkpIHsKK0BAIC01NzMwLDQ4ICs2MTk5LDE5IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X19pbml0KHN0 cnVjdCBfX3B5eF9vYmpfCisgICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOworICAgX19QeXhfWERFQ1JF RihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7 IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCAyNTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgMzAwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBfX1B5eF9H SVZFUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPm5hbWUpOworLSAgX19weXhfdl9zZWxmLT5u YW1lID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyNTIKKy0gKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZl bnRfcHJvcGVydHkqIHByb3ApOgorLSAqICAgICAgICAgc2VsZi5uYW1lID0gX3N0cmRlYyhwcm9w Lm5hbWUpCistICogICAgICAgICBzZWxmLmRhdGEgPSBfY29udmVydF92YWx1ZShwcm9wLmRhdGEs IHByb3AuZm9ybWF0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBy ZXR1cm4gc2VsZgorLSAqIAorLSAqLworLSAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUoX19weXhfdl9wcm9wLT5kYXRhLCBfX3B5eF92X3By b3AtPmZvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI1Miwg X19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0dJ VkVSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmRhdGEpOwor LSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CistICBfX3B5eF92X3NlbGYtPmRh dGEgPSBfX3B5eF90XzE7CisrICBfX3B5eF9yID0gX19weXhfdF8xOworICAgX19weXhfdF8xID0g MDsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTMKKy0gKiAgICAg ICAgIHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5uYW1lKQorLSAqICAgICAgICAgc2VsZi5kYXRh ID0gX2NvbnZlcnRfdmFsdWUocHJvcC5kYXRhLCBwcm9wLmZvcm1hdCkKKy0gKiAgICAgICAgIHJl dHVybiBzZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAKKy0gKi8K Ky0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAq KV9fcHl4X3Zfc2VsZikpOworLSAgX19weXhfciA9ICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYp OworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoyNTAKKy0gKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IG5hbWUsIGRhdGEKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTUKKyAgKiAKKy0gKiAgICAgY2RlZiBfaW5p dChzZWxmLCBtcHZfZXZlbnRfcHJvcGVydHkqIHByb3ApOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICBzZWxmLm5hbWUgPSBfc3RyZGVjKHByb3AubmFtZSkKKy0gKiAg ICAgICAgIHNlbGYuZGF0YSA9IF9jb252ZXJ0X3ZhbHVlKHByb3AuZGF0YSwgcHJvcC5mb3JtYXQp CisrICogICAgIEBwcm9wZXJ0eQorKyAqICAgICBkZWYgbmFtZShzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIibXB2X2V2ZW50X25hbWUgb2YgdGhlIGV2 ZW50IGlkIiIiCisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIG5hbWVfYworICAqLworIAor ICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCitAQCAtNTc4MCwxNTQ3ICs2MjIwLDE3MTAgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlf X2luaXQoc3RydWN0IF9fcHl4X29ial8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKyAg IF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsK Ky0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlByb3BlcnR5Ll9pbml0 IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5 eF9yID0gMDsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50 Lm5hbWUuX19nZXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOworKyAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJF RihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJu IF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDgK Ky0gKiAgICAgV3JhcHM6IG1wdl9ldmVudF9wcm9wZXJ0eQorLSAqICAgICAiIiIKKy0gKiAgICAg Y2RlZiBwdWJsaWMgb2JqZWN0IG5hbWUsIGRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDIKKysgKiAgICAgICAgIHJl dHVybiBfc3RyZGVjKG5hbWVfYykKKyAgKiAKKy0gKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZf ZXZlbnRfcHJvcGVydHkqIHByb3ApOgorKyAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVu dCogZXZlbnQsIGN0eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoY3R4KQorKyAqICAgICAgICAgc2Vs Zi5pZCA9IGV2ZW50LmV2ZW50X2lkCisgICovCisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlf NG5hbWVfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFt ZV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CistICBQeU9iamVjdCAqX19weXhf ciA9IDA7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV9fX2dldF9fKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF92X3NlbGYp KTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1lX19fZ2V0X18o c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zf c2VsZikgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf NUV2ZW50X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50 ICpfX3B5eF92X3NlbGYsIHN0cnVjdCBtcHZfZXZlbnQgKl9fcHl4X3ZfZXZlbnQsIFB5T2JqZWN0 ICpfX3B5eF92X2N0eCkgeworKyAgdWludDY0X3QgX19weXhfdl9jdHhpZDsKKysgIFB5T2JqZWN0 ICpfX3B5eF92X3VzZXJkYXRhID0gTlVMTDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsK KyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX19nZXRfXyIsIDApOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4 X0lOQ1JFRihfX3B5eF92X3NlbGYtPm5hbWUpOworLSAgX19weXhfciA9IF9fcHl4X3Zfc2VsZi0+ bmFtZTsKKy0gIGdvdG8gX19weXhfTDA7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K Ky0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CisrICBQeU9iamVj dCAqX19weXhfdF8xID0gTlVMTDsKKysgIHVpbnQ2NF90IF9fcHl4X3RfMjsKKysgIGVudW0gbXB2 X2V2ZW50X2lkIF9fcHl4X3RfMzsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAg UHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVM TDsKKysgIGludCBfX3B5eF90Xzc7CisrICBQeU9iamVjdCAqX19weXhfdF84ID0gTlVMTDsKKysg IGludCBfX3B5eF90Xzk7CisrICBpbnQgX19weXhfdF8xMDsKKysgIGludCBfX3B5eF90XzExOwor KyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX2luaXQiLCAwKTsKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBp bnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV8zX19zZXRf XyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qcHJv dG8qLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0 eV80bmFtZV8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhf dl92YWx1ZSkgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18gKHdyYXBwZXIpIiwgMCk7 CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80 bmFtZV8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1By b3BlcnR5ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfdmFsdWUpKTsKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDMKKysgKiAKKysgKiAgICAgY2Rl ZiBfaW5pdChzZWxmLCBtcHZfZXZlbnQqIGV2ZW50LCBjdHgpOgorKyAqICAgICAgICAgY2RlZiB1 aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChjdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIHNlbGYuaWQgPSBldmVudC5ldmVudF9pZAorKyAqICAgICAgICAg c2VsZi5kYXRhID0gc2VsZi5fZGF0YShldmVudCkKKysgKi8KKysgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfYnVpbHRpbl9pZCwgX19weXhfdl9jdHgpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDMsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9B c191aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2 NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAzMDMsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBf X3B5eF92X2N0eGlkID0gKCh1aW50NjRfdClfX3B5eF90XzIpOworIAorLSAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVy biBfX3B5eF9yOworLX0KKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDQK KysgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnQqIGV2ZW50LCBjdHgpOgorKyAqICAg ICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChjdHgpCisrICogICAgICAg ICBzZWxmLmlkID0gZXZlbnQuZXZlbnRfaWQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5fZGF0YShldmVudCkKKysgKiAgICAgICAgIHVz ZXJkYXRhID0gX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJkYXRh LCBOb25lKQorKyAqLworKyAgX19weXhfdF8zID0gX19weXhfdl9ldmVudC0+ZXZlbnRfaWQ7Cisr ICBfX3B5eF92X3NlbGYtPmlkID0gX19weXhfdF8zOworIAorLXN0YXRpYyBpbnQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV8yX19zZXRfXyhzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl92YWx1ZSkgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18iLCAw KTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19w eXhfdl92YWx1ZSk7CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsKKy0gIF9f UHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPm5hbWUpOworLSAgX19weXhfdl9zZWxmLT5uYW1lID0g X19weXhfdl92YWx1ZTsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDUK KysgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoY3R4KQorKyAq ICAgICAgICAgc2VsZi5pZCA9IGV2ZW50LmV2ZW50X2lkCisrICogICAgICAgICBzZWxmLmRhdGEg PSBzZWxmLl9kYXRhKGV2ZW50KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICB1c2VyZGF0YSA9IF9yZXBseV91c2VyZGF0YXNbY3R4aWRdLmdldChldmVudC5yZXBseV91 c2VyZGF0YSwgTm9uZSkKKysgKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lIGFuZCBz ZWxmLmlkICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6CisrICovCisrICBfX3B5eF90XzEg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAq KV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9kYXRhKF9fcHl4X3Zfc2VsZiwgX19weXhfdl9l dmVudCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwNSwgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dJVkVSRUYo X19weXhfdF8xKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmRhdGEpOworKyAgX19Q eXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CisrICBfX3B5eF92X3NlbGYtPmRhdGEgPSBf X3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCistICBfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwor LSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMwNgorKyAqICAgICAgICAgc2VsZi5pZCA9IGV2ZW50LmV2ZW50X2lkCisrICogICAgICAg ICBzZWxmLmRhdGEgPSBzZWxmLl9kYXRhKGV2ZW50KQorKyAqICAgICAgICAgdXNlcmRhdGEgPSBf cmVwbHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQucmVwbHlfdXNlcmRhdGEsIE5vbmUpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5v dCBOb25lIGFuZCBzZWxmLmlkICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6CisrICogICAg ICAgICAgICAgdXNlcmRhdGEucmVtb3ZlKCkKKysgKi8KKysgIF9fcHl4X3RfNCA9IF9fUHl4X0dl dEl0ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywg X19weXhfdl9jdHhpZCwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAs IDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICBfX3B5eF90XzUgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNCwgX19weXhfbl9zX2dldCk7IGlmICh1 bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCisr ICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBf X3B5eF90XzQgPSAwOworKyAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChf X3B5eF92X2V2ZW50LT5yZXBseV91c2VyZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhf dF80KTsKKysgIF9fcHl4X3RfNiA9IE5VTEw7CisrICBfX3B5eF90XzcgPSAwOworKyAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkp IHsKKysgICAgX19weXhfdF82ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF81KTsKKysgICAg aWYgKGxpa2VseShfX3B5eF90XzYpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNSk7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfNik7CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3RfNSwgZnVuY3Rpb24pOworKyAgICAgIF9fcHl4X3RfNyA9IDE7CisrICAg IH0KKysgIH0KKysgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKysgIGlmIChQeUZ1bmN0aW9uX0No ZWNrKF9fcHl4X3RfNSkpIHsKKysgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhf dF82LCBfX3B5eF90XzQsIFB5X05vbmV9OworKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0 aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4X3RfNywgMitfX3B5eF90 XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4X0wx X2Vycm9yKQorKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cisr ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKKysgIH0gZWxzZQorKyAgI2VuZGlmCisrICAjaWYgQ1lUSE9OX0ZB U1RfUFlDQ0FMTAorKyAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzUp KSB7CisrICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNiwgX19weXhfdF80 LCBQeV9Ob25lfTsKKysgICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwo X19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF83LCAyK19fcHl4X3RfNyk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQg PSAwOworKyAgfSBlbHNlCisrICAjZW5kaWYKKysgIHsKKysgICAgX19weXhfdF84ID0gUHlUdXBs ZV9OZXcoMitfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOCkpIF9fUFlYX0VSUigw LCAzMDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF84KTsKKysg ICAgaWYgKF9fcHl4X3RfNikgeworKyAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF82KTsgUHlU dXBsZV9TRVRfSVRFTShfX3B5eF90XzgsIDAsIF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IE5VTEw7 CisrICAgIH0KKysgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzQpOworKyAgICBQeVR1cGxlX1NF VF9JVEVNKF9fcHl4X3RfOCwgMCtfX3B5eF90XzcsIF9fcHl4X3RfNCk7CisrICAgIF9fUHl4X0lO Q1JFRihQeV9Ob25lKTsKKysgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKysgICAgUHlUdXBs ZV9TRVRfSVRFTShfX3B5eF90XzgsIDErX19weXhfdF83LCBQeV9Ob25lKTsKKysgICAgX19weXhf dF80ID0gMDsKKysgICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzUs IF9fcHl4X3RfOCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDMwNiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF84KTsgX19weXhfdF84ID0gMDsKKysgIH0KKysgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworKyAgX19weXhfdl91c2VyZGF0YSA9 IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7CisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8K Ky1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5h bWVfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0YXRpYyBp bnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV81X19kZWxf XyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWxf XyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfOFByb3BlcnR5XzRuYW1lXzRfX2RlbF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilfX3B5eF92X3NlbGYpKTsKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDcKKysgKiAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYu X2RhdGEoZXZlbnQpCisrICogICAgICAgICB1c2VyZGF0YSA9IF9yZXBseV91c2VyZGF0YXNbY3R4 aWRdLmdldChldmVudC5yZXBseV91c2VyZGF0YSwgTm9uZSkKKysgKiAgICAgICAgIGlmIHVzZXJk YXRhIGlzIG5vdCBOb25lIGFuZCBzZWxmLmlkICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICB1c2VyZGF0YS5y ZW1vdmUoKQorKyAqICAgICAgICAgICAgIGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNl cmRhdGEuY291bnRlciA8PSAwOgorKyAqLworKyAgX19weXhfdF8xMCA9IChfX3B5eF92X3VzZXJk YXRhICE9IFB5X05vbmUpOworKyAgX19weXhfdF8xMSA9IChfX3B5eF90XzEwICE9IDApOworKyAg aWYgKF9fcHl4X3RfMTEpIHsKKysgIH0gZWxzZSB7CisrICAgIF9fcHl4X3RfOSA9IF9fcHl4X3Rf MTE7CisrICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworKyAgfQorKyAgX19weXhf dF8xMSA9ICgoX19weXhfdl9zZWxmLT5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFKSAh PSAwKTsKKysgIF9fcHl4X3RfOSA9IF9fcHl4X3RfMTE7CisrICBfX3B5eF9MNF9ib29sX2Jpbm9w X2RvbmU6OworKyAgaWYgKF9fcHl4X3RfOSkgeworIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9y OworLX0KKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwOAorKyAqICAg ICAgICAgdXNlcmRhdGEgPSBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQucmVwbHlf dXNlcmRhdGEsIE5vbmUpCisrICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZSBhbmQg c2VsZi5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgorKyAqICAgICAgICAgICAgIHVz ZXJkYXRhLnJlbW92ZSgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICAgICBpZiBub3QgdXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50ZXIgPD0gMDoK KysgKiAgICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdW2V2ZW50LnJl cGx5X3VzZXJkYXRhXQorKyAqLworKyAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19yZW1vdmUpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF81KTsKKysgICAgX19weXhfdF84ID0gTlVMTDsKKysgICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkp IHsKKysgICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzUpOworKyAg ICAgIGlmIChsaWtlbHkoX19weXhfdF84KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9u ID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNSk7CisrICAgICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF84KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAg ICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNSwgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAg fQorKyAgICBfX3B5eF90XzEgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF81LCBfX3B5eF90XzgpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4 X3RfNSk7CisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsgX19weXhfdF84ID0gMDsKKysg ICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA4LCBfX3B5eF9MMV9l cnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKyAKKy1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl84UHJvcGVydHlfNG5hbWVfNF9fZGVsX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3Zfc2VsZikgeworLSAgaW50IF9fcHl4X3I7Cist ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fZGVsX18iLCAwKTsKKy0gIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gIF9fUHl4X0dJ VkVSRUYoUHlfTm9uZSk7CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5uYW1lKTsKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPm5hbWUpOworLSAgX19weXhfdl9zZWxmLT5uYW1l ID0gUHlfTm9uZTsKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwOQor KyAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VW RU5UX1BST1BFUlRZX0NIQU5HRToKKysgKiAgICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKQor KyAqICAgICAgICAgICAgIGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291 bnRlciA8PSAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAg ICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0KKysg KiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lOgorKyAqLworKyAgICBfX3B5eF90XzEg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19v YnNlcnZlZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwOSwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX3B5eF90 XzExID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5 eF90XzExIDwgMCkpIF9fUFlYX0VSUigwLCAzMDksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgICAgX19weXhfdF8xMCA9ICgo IV9fcHl4X3RfMTEpICE9IDApOworKyAgICBpZiAoX19weXhfdF8xMCkgeworKyAgICB9IGVsc2Ug eworKyAgICAgIF9fcHl4X3RfOSA9IF9fcHl4X3RfMTA7CisrICAgICAgZ290byBfX3B5eF9MN19i b29sX2Jpbm9wX2RvbmU7CisrICAgIH0KKysgICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3Rf R2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhLCBfX3B5eF9uX3NfY291bnRlcik7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX3B5eF90XzUgPSBQeU9iamVjdF9SaWNo Q29tcGFyZShfX3B5eF90XzEsIF9fcHl4X2ludF8wLCBQeV9MRSk7IF9fUHl4X1hHT1RSRUYoX19w eXhfdF81KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMzA5LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 CisrICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF81KTsgaWYg KHVubGlrZWx5KF9fcHl4X3RfMTAgPCAwKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJy b3IpCisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworKyAgICBf X3B5eF90XzkgPSBfX3B5eF90XzEwOworKyAgICBfX3B5eF9MN19ib29sX2Jpbm9wX2RvbmU6Owor KyAgICBpZiAoX19weXhfdF85KSB7CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0g IF9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1 cm4gX19weXhfcjsKKy19CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjMxMAorKyAqICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCisrICogICAgICAgICAgICAg aWYgbm90IHVzZXJkYXRhLm9ic2VydmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6CisrICog ICAgICAgICAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91 c2VyZGF0YV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgaWYgdXNl cmRhdGEgaXMgbm90IE5vbmU6CisrICogICAgICAgICAgICAgdXNlcmRhdGEgPSB1c2VyZGF0YS5k YXRhCisrICovCisrICAgICAgX19weXhfdF81ID0gX19QeXhfR2V0SXRlbUludChfX3B5eF92Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50 NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMxMCwgX19weXhfTDFfZXJyb3IpCisrICAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CisrICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X0RlbEl0 ZW1JbnQoX19weXhfdF81LCBfX3B5eF92X2V2ZW50LT5yZXBseV91c2VyZGF0YSwgdWludDY0X3Qs IDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigw LCAzMTAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBf X3B5eF90XzUgPSAwOworIAorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzFfX2dldF9f KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfMV9fZ2V0X18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworLSAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X2dldF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdl9zZWxmKSk7CisrICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwOQorKyAqICAgICAgICAgaWYgdXNlcmRh dGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToK KysgKiAgICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKQorKyAqICAgICAgICAgICAgIGlmIG5v dCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRh dGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0KKysgKiAgICAgICAgIGlmIHVzZXJkYXRh IGlzIG5vdCBOb25lOgorKyAqLworKyAgICB9CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7 CistfQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA3CisrICogICAg ICAgICBzZWxmLmRhdGEgPSBzZWxmLl9kYXRhKGV2ZW50KQorKyAqICAgICAgICAgdXNlcmRhdGEg PSBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQucmVwbHlfdXNlcmRhdGEsIE5vbmUp CisrICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZSBhbmQgc2VsZi5pZCAhPSBNUFZf RVZFTlRfUFJPUEVSVFlfQ0hBTkdFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICAgICAgdXNlcmRhdGEucmVtb3ZlKCkKKysgKiAgICAgICAgICAgICBpZiBub3QgdXNl cmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50ZXIgPD0gMDoKKysgKi8KKysgIH0KKyAK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVy dHlfNGRhdGFfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Q cm9wZXJ0eSAqX19weXhfdl9zZWxmKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Cist ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fZ2V0X18iLCAwKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX1B5eF9J TkNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF92X3NlbGYtPmRh dGE7CistICBnb3RvIF9fcHl4X0wwOworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMxMQorKyAqICAgICAgICAgICAgIGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNl cmRhdGEuY291bnRlciA8PSAwOgorKyAqICAgICAgICAgICAgICAgICBkZWwgX3JlcGx5X3VzZXJk YXRhc1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRhdGFdCisrICogICAgICAgICBpZiB1c2VyZGF0 YSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIHVzZXJkYXRhID0gdXNlcmRhdGEuZGF0YQorKyAqICAgICAgICAgc2VsZi5yZXBseV91c2Vy ZGF0YSA9IHVzZXJkYXRhCisrICovCisrICBfX3B5eF90XzkgPSAoX19weXhfdl91c2VyZGF0YSAh PSBQeV9Ob25lKTsKKysgIF9fcHl4X3RfMTAgPSAoX19weXhfdF85ICE9IDApOworKyAgaWYgKF9f cHl4X3RfMTApIHsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfTDA6 OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjMxMgorKyAqICAgICAgICAgICAgICAgICBkZWwgX3JlcGx5X3VzZXJk YXRhc1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRhdGFdCisrICogICAgICAgICBpZiB1c2VyZGF0 YSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgICAgICB1c2VyZGF0YSA9IHVzZXJkYXRhLmRhdGEg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5yZXBseV91c2Vy ZGF0YSA9IHVzZXJkYXRhCisrICogICAgICAgICBzZWxmLmVycm9yID0gZXZlbnQuZXJyb3IKKysg Ki8KKysgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3Vz ZXJkYXRhLCBfX3B5eF9uX3NfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhf RVJSKDAsIDMxMiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUp OworKyAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X3RfNSk7Cisr ICAgIF9fcHl4X3RfNSA9IDA7CisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgaW50 IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfM19fc2V0X18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKnByb3Rv Ki8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlf NGRhdGFfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf dmFsdWUpIHsKKy0gIGludCBfX3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK Ky0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fICh3cmFwcGVyKSIsIDApOwor LSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRh dGFfMl9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eSAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVlKSk7CisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTEKKysgKiAgICAgICAgICAgICBp ZiBub3QgdXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50ZXIgPD0gMDoKKysgKiAg ICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdW2V2ZW50LnJlcGx5X3Vz ZXJkYXRhXQorKyAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmU6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICB1c2VyZGF0YSA9IHVzZXJkYXRhLmRh dGEKKysgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSB1c2VyZGF0YQorKyAqLworKyAg fQorKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMworKyAqICAgICAg ICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmU6CisrICogICAgICAgICAgICAgdXNlcmRhdGEgPSB1 c2VyZGF0YS5kYXRhCisrICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gdXNlcmRhdGEg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5lcnJvciA9IGV2 ZW50LmVycm9yCisrICogICAgICAgICByZXR1cm4gc2VsZgorKyAqLworKyAgX19QeXhfSU5DUkVG KF9fcHl4X3ZfdXNlcmRhdGEpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X3VzZXJkYXRhKTsK KysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKKysgIF9fUHl4 X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKKysgIF9fcHl4X3Zfc2VsZi0+ cmVwbHlfdXNlcmRhdGEgPSBfX3B5eF92X3VzZXJkYXRhOworKworKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjMxNAorKyAqICAgICAgICAgICAgIHVzZXJkYXRhID0gdXNlcmRh dGEuZGF0YQorKyAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IHVzZXJkYXRhCisrICog ICAgICAgICBzZWxmLmVycm9yID0gZXZlbnQuZXJyb3IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgcmV0dXJuIHNlbGYKKysgKiAKKysgKi8KKysgIF9fcHl4X3RfNyA9 IF9fcHl4X3ZfZXZlbnQtPmVycm9yOworKyAgX19weXhfdl9zZWxmLT5lcnJvciA9IF9fcHl4X3Rf NzsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTUKKysgKiAgICAg ICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSB1c2VyZGF0YQorKyAqICAgICAgICAgc2VsZi5lcnJv ciA9IGV2ZW50LmVycm9yCisrICogICAgICAgICByZXR1cm4gc2VsZiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogCisrICogCisrICovCisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3Ip OworKyAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsKKysgIF9fcHl4 X3IgPSAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKTsKKysgIGdvdG8gX19weXhfTDA7CisrCisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzAyCisrICogICAgICAgICByZXR1 cm4gX3N0cmRlYyhuYW1lX2MpCisrICogCisrICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2 ZW50KiBldmVudCwgY3R4KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChjdHgpCisrICogICAgICAgICBz ZWxmLmlkID0gZXZlbnQuZXZlbnRfaWQKKysgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworKyAgX19weXhfTDFfZXJyb3I6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwor KyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUp OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzgpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQuX2lu aXQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9f cHl4X3IgPSAwOworKyAgX19weXhfTDA6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X3VzZXJk YXRhKTsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIGludCBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzJfX3NldF9fKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CistICBpbnQgX19weXhfcjsKKysvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjU4CisrICogY2RlZiBjbGFzcyBFdmVudChvYmplY3Qp OgorKyAqICAgICAiIiJXcmFwczogbXB2X2V2ZW50IiIiCisrICogICAgIGNkZWYgcHVibGljIG1w dl9ldmVudF9pZCBpZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGNkZWYg cHVibGljIGludCBlcnJvcgorKyAqICAgICBjZGVmIHB1YmxpYyBvYmplY3QgZGF0YSwgcmVwbHlf dXNlcmRhdGEKKysgKi8KKysKKysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yaWRfMV9fZ2V0X18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yaWRfMV9fZ2V0X18oUHlPYmplY3QgKl9f cHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fIiwg MCk7CistICBfX1B5eF9JTkNSRUYoX19weXhfdl92YWx1ZSk7CistICBfX1B5eF9HSVZFUkVGKF9f cHl4X3ZfdmFsdWUpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CistICBf X1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKy0gIF9fcHl4X3Zfc2VsZi0+ZGF0YSA9 IF9fcHl4X3ZfdmFsdWU7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAo d3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50XzJpZF9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworLSAgX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK KysgIHJldHVybiBfX3B5eF9yOworK30KKysKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMmlkX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3Qg Kl9fcHl4X3IgPSBOVUxMOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIFB5T2Jq ZWN0ICpfX3B5eF90XzEgPSBOVUxMOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25z dCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7 CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworKyAgX19QeXhf WERFQ1JFRihfX3B5eF9yKTsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9f bXB2X2V2ZW50X2lkKF9fcHl4X3Zfc2VsZi0+aWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAyNTgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CisrICBfX3B5eF9yID0gX19weXhfdF8xOworKyAgX19weXhfdF8xID0gMDsKKysgIGdv dG8gX19weXhfTDA7CisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X0wx X2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0FkZFRyYWNl YmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50LmlkLl9fZ2V0X18iLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworKyAg X19weXhfTDA6OworKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKyAvKiBQeXRob24g d3JhcHBlciAqLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQ cm9wZXJ0eV80ZGF0YV81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byov Cistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRk YXRhXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKytzdGF0aWMgaW50IF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMmlkXzNfX3NldF9fKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKTsgLypwcm90byovCisrc3RhdGlj IGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8zX19zZXRfXyhQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworICAgaW50 IF9fcHl4X3I7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fZGVsX18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80ZGF0YV80X19kZWxfXygoKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdl9z ZWxmKSk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyAod3JhcHBlciki LCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 XzJpZF8yX19zZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2 ZW50ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfdmFsdWUpKTsKKyAKKyAg IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIGludCBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92X3NlbGYpIHsKKytzdGF0 aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMmlkXzJfX3NldF9f KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3Nl bGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CisgICBpbnQgX19weXhfcjsKKyAgIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19k ZWxfXyIsIDApOworLSAgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgX19QeXhfR0lWRVJFRihQ eV9Ob25lKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmRhdGEpOworLSAgX19QeXhf REVDUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CistICBfX3B5eF92X3NlbGYtPmRhdGEgPSBQeV9O b25lOworKyAgZW51bSBtcHZfZXZlbnRfaWQgX19weXhfdF8xOworKyAgaW50IF9fcHl4X2xpbmVu byA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIs IDApOworKyAgX19weXhfdF8xID0gKChlbnVtIG1wdl9ldmVudF9pZClfX1B5eF9QeUludF9Bc19l bnVtX19tcHZfZXZlbnRfaWQoX19weXhfdl92YWx1ZSkpOyBpZiAodW5saWtlbHkoUHlFcnJfT2Nj dXJyZWQoKSkpIF9fUFlYX0VSUigwLCAyNTgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdl9z ZWxmLT5pZCA9IF9fcHl4X3RfMTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAg X19weXhfciA9IDA7CisrICBnb3RvIF9fcHl4X0wwOworKyAgX19weXhfTDFfZXJyb3I6OworKyAg X19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQuaWQuX19zZXRfXyIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhf ciA9IC0xOworKyAgX19weXhfTDA6OworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogIih0cmVlIGZyYWdtZW50KSI6MQorLSAq IGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICBjZGVmIHR1cGxlIHN0YXRlCistICogICAgIGNkZWYgb2JqZWN0IF9kaWN0Cisr LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1OQorKyAqICAgICAiIiJXcmFwczog bXB2X2V2ZW50IiIiCisrICogICAgIGNkZWYgcHVibGljIG1wdl9ldmVudF9pZCBpZAorKyAqICAg ICBjZGVmIHB1YmxpYyBpbnQgZXJyb3IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICBjZGVmIHB1YmxpYyBvYmplY3QgZGF0YSwgcmVwbHlfdXNlcmRhdGEKKysgKiAKKyAgKi8K KyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV8xX19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byov Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3Bl cnR5XzFfX3JlZHVjZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5V U0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVycm9yXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl81RXZlbnRfNWVycm9yXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYp IHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18gKHdy YXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzhQcm9wZXJ0eV9fX3JlZHVjZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdl9zZWxmKSk7CisrICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzVlcnJvcl9fX2dldF9fKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpKTsK KyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X19fcmVkdWNlX2N5dGhvbl9f KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92 X3NlbGYpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X3N0YXRlID0gMDsKKy0gIFB5T2JqZWN0ICpf X3B5eF92X19kaWN0ID0gMDsKKy0gIGludCBfX3B5eF92X3VzZV9zZXRzdGF0ZTsKKytzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVycm9yX19f Z2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4 X3Zfc2VsZikgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgaW50IF9f cHl4X3RfMjsKKy0gIGludCBfX3B5eF90XzM7CistICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVM TDsKKy0gIGludCBfX3B5eF90XzU7CistICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKyAg IGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fIiwgMCk7CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQp Ijo1CistICogICAgIGNkZWYgb2JqZWN0IF9kaWN0CistICogICAgIGNkZWYgYmludCB1c2Vfc2V0 c3RhdGUKKy0gKiAgICAgc3RhdGUgPSAoc2VsZi5kYXRhLCBzZWxmLm5hbWUpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3Rf XycsIE5vbmUpCistICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorLSAqLworLSAgX19weXhf dF8xID0gUHlUdXBsZV9OZXcoMik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f Z2V0X18iLCAwKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICBfX3B5eF90XzEgPSBf X1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X3NlbGYtPmVycm9yKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjU5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7Cist ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CistICBQeVR1cGxlX1NFVF9JVEVN KF9fcHl4X3RfMSwgMCwgX19weXhfdl9zZWxmLT5kYXRhKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5 eF92X3NlbGYtPm5hbWUpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYtPm5hbWUpOwor LSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4X3Zfc2VsZi0+bmFtZSk7Cist ICBfX3B5eF92X3N0YXRlID0gKChQeU9iamVjdCopX19weXhfdF8xKTsKKysgIF9fcHl4X3IgPSBf X3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworKyAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8q ICIodHJlZSBmcmFnbWVudCkiOjYKKy0gKiAgICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQorLSAq ICAgICBzdGF0ZSA9IChzZWxmLmRhdGEsIHNlbGYubmFtZSkKKy0gKiAgICAgX2RpY3QgPSBnZXRh dHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6CistICogICAgICAgICBzdGF0ZSArPSAoX2Rp Y3QsKQorLSAqLworLSAgX19weXhfdF8xID0gX19QeXhfR2V0QXR0cjMoKChQeU9iamVjdCAqKV9f cHl4X3Zfc2VsZiksIF9fcHl4X25fc19kaWN0LCBQeV9Ob25lKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKy0gIF9fcHl4X3ZfX2RpY3QgPSBfX3B5eF90XzE7CistICBfX3B5eF90XzEg PSAwOworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7Cisr ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1 dHRlci5saWJzLm1wdi5FdmVudC5lcnJvci5fX2dldF9fIiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKysgIF9fcHl4X0ww OjsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAvKiAiKHRyZWUgZnJhZ21l bnQpIjo3CistICogICAgIHN0YXRlID0gKHNlbGYuZGF0YSwgc2VsZi5uYW1lKQorLSAqICAgICBf ZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKy0gKiAgICAgaWYgX2RpY3Qg aXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHN0 YXRlICs9IChfZGljdCwpCistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCistICovCist ICBfX3B5eF90XzIgPSAoX19weXhfdl9fZGljdCAhPSBQeV9Ob25lKTsKKy0gIF9fcHl4X3RfMyA9 IChfX3B5eF90XzIgIT0gMCk7CistICBpZiAoX19weXhfdF8zKSB7CisrLyogUHl0aG9uIHdyYXBw ZXIgKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf NWVycm9yXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X3ZhbHVlKTsgLypwcm90byovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50XzVlcnJvcl8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl92YWx1ZSkgeworKyAgaW50IF9fcHl4X3I7CisrICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18gKHdy YXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzVFdmVudF81ZXJyb3JfMl9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVl KSk7CisgCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKy0gKiAgICAgX2RpY3QgPSBnZXRh dHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCistICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25l OgorLSAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorLSAqICAgICBlbHNlOgorLSAq LworLSAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMSwgOCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9fZGljdCk7CistICAgIF9fUHl4 X0dJVkVSRUYoX19weXhfdl9fZGljdCk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8x LCAwLCBfX3B5eF92X19kaWN0KTsKKy0gICAgX19weXhfdF80ID0gUHlOdW1iZXJfSW5QbGFjZUFk ZChfX3B5eF92X3N0YXRlLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9f UFlYX0VSUigxLCA4LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NCk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICBf X1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Zfc3RhdGUsICgoUHlPYmplY3QqKV9fcHl4X3RfNCkpOwor LSAgICBfX3B5eF90XzQgPSAwOworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKyAKKy0g ICAgLyogIih0cmVlIGZyYWdtZW50KSI6OQorLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToK Ky0gKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCistICogICAgICAgICB1c2Vfc2V0c3RhdGUg PSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgZWxzZToKKy0gKiAg ICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxmLm5hbWUg aXMgbm90IE5vbmUKKy0gKi8KKy0gICAgX19weXhfdl91c2Vfc2V0c3RhdGUgPSAxOworLQorLSAg ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3CistICogICAgIHN0YXRlID0gKHNlbGYuZGF0YSwgc2Vs Zi5uYW1lKQorLSAqICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkK Ky0gKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCistICogICAgICAgICB1c2Vfc2V0c3Rh dGUgPSBUcnVlCistICovCistICAgIGdvdG8gX19weXhfTDM7CistICB9CistCistICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxMQorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorLSAqICAg ICBlbHNlOgorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5kYXRhIGlzIG5vdCBOb25l IG9yIHNlbGYubmFtZSBpcyBub3QgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIGlmIHVzZV9zZXRzdGF0ZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2ts ZV9Qcm9wZXJ0eSwgKHR5cGUoc2VsZiksIDB4MDU3MmQxMSwgTm9uZSksIHN0YXRlCistICovCist ICAvKmVsc2UqLyB7CistICAgIF9fcHl4X3RfMiA9IChfX3B5eF92X3NlbGYtPmRhdGEgIT0gUHlf Tm9uZSk7CistICAgIF9fcHl4X3RfNSA9IChfX3B5eF90XzIgIT0gMCk7CistICAgIGlmICghX19w eXhfdF81KSB7CistICAgIH0gZWxzZSB7CistICAgICAgX19weXhfdF8zID0gX19weXhfdF81Owor LSAgICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworLSAgICB9CistICAgIF9fcHl4 X3RfNSA9IChfX3B5eF92X3NlbGYtPm5hbWUgIT0gUHlfTm9uZSk7CistICAgIF9fcHl4X3RfMiA9 IChfX3B5eF90XzUgIT0gMCk7CistICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfMjsKKy0gICAgX19w eXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKKy0gICAgX19weXhfdl91c2Vfc2V0c3RhdGUgPSBfX3B5 eF90XzM7CistICB9CistICBfX3B5eF9MMzo7CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox MgorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5kYXRhIGlz IG5vdCBOb25lIG9yIHNlbGYubmFtZSBpcyBub3QgTm9uZQorLSAqICAgICBpZiB1c2Vfc2V0c3Rh dGU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiBfX3B5 eF91bnBpY2tsZV9Qcm9wZXJ0eSwgKHR5cGUoc2VsZiksIDB4MDU3MmQxMSwgTm9uZSksIHN0YXRl CistICogICAgIGVsc2U6CistICovCistICBfX3B5eF90XzMgPSAoX19weXhfdl91c2Vfc2V0c3Rh dGUgIT0gMCk7CistICBpZiAoX19weXhfdF8zKSB7CistCistICAgIC8qICIodHJlZSBmcmFnbWVu dCkiOjEzCistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxmLmRhdGEgaXMgbm90IE5vbmUg b3Igc2VsZi5uYW1lIGlzIG5vdCBOb25lCistICogICAgIGlmIHVzZV9zZXRzdGF0ZToKKy0gKiAg ICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgKHR5cGUoc2VsZiksIDB4MDU3 MmQxMSwgTm9uZSksIHN0YXRlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ZWxzZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgKHR5cGUo c2VsZiksIDB4MDU3MmQxMSwgc3RhdGUpCistICovCistICAgIF9fUHl4X1hERUNSRUYoX19weXhf cik7CistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3Nf cHl4X3VucGlja2xlX1Byb3BlcnR5KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9F UlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsK Ky0gICAgX19weXhfdF8xID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CistICAgIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2Jq ZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKy0gICAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICop UHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKy0gICAgUHlUdXBsZV9TRVRf SVRFTShfX3B5eF90XzEsIDAsICgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5 eF92X3NlbGYpKSkpOworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzU3MTMxNjkpOworLSAg ICBfX1B5eF9HSVZFUkVGKF9fcHl4X2ludF81NzEzMTY5KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRF TShfX3B5eF90XzEsIDEsIF9fcHl4X2ludF81NzEzMTY5KTsKKy0gICAgX19QeXhfSU5DUkVGKFB5 X05vbmUpOworLSAgICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOworLSAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfMSwgMiwgUHlfTm9uZSk7CistICAgIF9fcHl4X3RfNiA9IFB5VHVwbGVfTmV3 KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFf ZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgICBfX1B5eF9HSVZFUkVG KF9fcHl4X3RfNCk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF82LCAwLCBfX3B5eF90 XzQpOworLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CistICAgIFB5VHVwbGVfU0VUX0lU RU0oX19weXhfdF82LCAxLCBfX3B5eF90XzEpOworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9z dGF0ZSk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9zdGF0ZSk7CistICAgIFB5VHVwbGVf U0VUX0lURU0oX19weXhfdF82LCAyLCBfX3B5eF92X3N0YXRlKTsKKy0gICAgX19weXhfdF80ID0g MDsKKy0gICAgX19weXhfdF8xID0gMDsKKy0gICAgX19weXhfciA9IF9fcHl4X3RfNjsKKy0gICAg X19weXhfdF82ID0gMDsKKy0gICAgZ290byBfX3B5eF9MMDsKKy0KKy0gICAgLyogIih0cmVlIGZy YWdtZW50KSI6MTIKKy0gKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNl bGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxmLm5hbWUgaXMgbm90IE5vbmUKKy0gKiAgICAgaWYg dXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBy ZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAweDA1NzJkMTEsIE5v bmUpLCBzdGF0ZQorLSAqICAgICBlbHNlOgorLSAqLworLSAgfQorLQorLSAgLyogIih0cmVlIGZy YWdtZW50KSI6MTUKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwg KHR5cGUoc2VsZiksIDB4MDU3MmQxMSwgTm9uZSksIHN0YXRlCistICogICAgIGVsc2U6CistICog ICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAweDA1 NzJkMTEsIHN0YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogZGVmIF9fc2V0 c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5eF91bnBpY2ts ZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQorLSAqLworLSAgLyplbHNl Ki8geworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDE1LCBfX3B5eF9MMV9lcnJvcikK Ky0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICAgIF9fcHl4X3RfMSA9IFB5VHVwbGVf TmV3KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNSwgX19weXhf TDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9JTkNS RUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7Cist ICAgIF9fUHl4X0dJVkVSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZikpKSk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCAoKFB5T2Jq ZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKy0gICAgX19QeXhf SU5DUkVGKF9fcHl4X2ludF81NzEzMTY5KTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRf NTcxMzE2OSk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAxLCBfX3B5eF9pbnRf NTcxMzE2OSk7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3N0YXRlKTsKKy0gICAgX19QeXhf R0lWRVJFRihfX3B5eF92X3N0YXRlKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEs IDIsIF9fcHl4X3Zfc3RhdGUpOworLSAgICBfX3B5eF90XzQgPSBQeVR1cGxlX05ldygyKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQor LSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF90 XzYpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNCwgMCwgX19weXhfdF82KTsKKy0g ICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfNCwgMSwgX19weXhfdF8xKTsKKy0gICAgX19weXhfdF82ID0gMDsKKy0gICAgX19weXhfdF8x ID0gMDsKKy0gICAgX19weXhfciA9IF9fcHl4X3RfNDsKKy0gICAgX19weXhfdF80ID0gMDsKKy0g ICAgZ290byBfX3B5eF9MMDsKKy0gIH0KKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0g KiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgY2RlZiB0dXBsZSBzdGF0ZQorLSAqICAgICBjZGVmIG9iamVjdCBfZGljdAor LSAqLworK3N0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF81 ZXJyb3JfMl9fc2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKKysgIGludCBfX3B5 eF9yOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIGludCBfX3B5eF90XzE7Cisr ICBpbnQgX19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX3NldF9fIiwgMCk7CisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Bc19pbnQo X19weXhfdl92YWx1ZSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8xID09IChpbnQpLTEpICYmIFB5 RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMjU5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3Zfc2VsZi0+ZXJyb3IgPSBfX3B5eF90XzE7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNv ZGUgKi8KKysgIF9fcHl4X3IgPSAwOworKyAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wxX2Vy cm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYoX19w eXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKKy0gIF9fUHl4X0FkZFRyYWNl YmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlByb3BlcnR5Ll9fcmVkdWNlX2N5dGhvbl9fIiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0g TlVMTDsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50LmVy cm9yLl9fc2V0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1l KTsKKysgIF9fcHl4X3IgPSAtMTsKKyAgIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19w eXhfdl9zdGF0ZSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX2RpY3QpOworLSAgX19QeXhf WEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAg IHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAiKHRyZWUgZnJhZ21lbnQpIjoxNgorLSAqICAg ICBlbHNlOgorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5LCAodHlw ZShzZWxmKSwgMHgwNTcyZDExLCBzdGF0ZSkKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhz ZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg X19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkKKysv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjYwCisrICogICAgIGNkZWYgcHVibGlj IG1wdl9ldmVudF9pZCBpZAorKyAqICAgICBjZGVmIHB1YmxpYyBpbnQgZXJyb3IKKysgKiAgICAg Y2RlZiBwdWJsaWMgb2JqZWN0IGRhdGEsIHJlcGx5X3VzZXJkYXRhICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgQHByb3BlcnR5CisgICovCisgCisgLyogUHl0aG9u IHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl84UHJvcGVydHlfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfM19fc2V0c3Rh dGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19w eXhfc3RhdGUpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl81RXZlbnRfNGRhdGFfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJv dG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF80ZGF0YV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CisgICBQeU9iamVj dCAqX19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7 CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV8y X19zZXRzdGF0ZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X1Byb3BlcnR5ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhf c3RhdGUpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVy KSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfNGRhdGFfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50ICopX19weXhfdl9zZWxmKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K KyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7Cisg fQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQ cm9wZXJ0eV8yX19zZXRzdGF0ZV9jeXRob25fXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Qcm9wZXJ0eSAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5 eF9zdGF0ZSkgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF80ZGF0YV9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVM TDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8x ID0gTlVMTDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18iLCAwKTsKKy0KKy0gIC8qICIo dHJlZSBmcmFnbWVudCkiOjE3CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJv cGVydHksICh0eXBlKHNlbGYpLCAweDA1NzJkMTEsIHN0YXRlKQorLSAqIGRlZiBfX3NldHN0YXRl X2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19weXhfdW5waWNrbGVfUHJv cGVydHlfX3NldF9zdGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqLworLSAgaWYgKCEobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92 X19fcHl4X3N0YXRlKSl8fCgoX19weXhfdl9fX3B5eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQeUVy cl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiRXhwZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMiLCAi dHVwbGUiLCBQeV9UWVBFKF9fcHl4X3ZfX19weXhfc3RhdGUpLT50cF9uYW1lKSwgMCkpKSBfX1BZ WF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdF8xID0gX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShfX3B5 eF92X3NlbGYsICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjE2CistICogICAgIGVsc2U6CistICog ICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUHJvcGVydHksICh0eXBlKHNlbGYpLCAweDA1 NzJkMTEsIHN0YXRlKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0 YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBfX3B5eF91bnBpY2ts ZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQorLSAqLworKyAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKKysgIF9fUHl4X1hERUNSRUYoX19w eXhfcik7CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKysgIF9fcHl4X3Ig PSBfX3B5eF92X3NlbGYtPmRhdGE7CisrICBnb3RvIF9fcHl4X0wwOworIAorICAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05v bmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMu bXB2LlByb3BlcnR5Ll9fc2V0c3RhdGVfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworICAgX19weXhfTDA6 OworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MjYzCistICogCistICogICAgIEBwcm9wZXJ0eQorLSAqICAgICBkZWYg ZXJyb3Jfc3RyKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBlcnJvciBwcm9lcHJ0eSIiIgorLSAqICAgICAg ICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworLSAqLworLQorIC8qIFB5dGhvbiB3cmFwcGVyICov Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 XzllcnJvcl9zdHJfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLwor LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF85 ZXJyb3Jfc3RyXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5T2JqZWN0 ICpfX3B5eF9yID0gMDsKKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfNGRhdGFfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpIHsKKysgIGludCBfX3B5eF9yOworICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dl dF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl81RXZlbnRfOWVycm9yX3N0cl9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJfX3NldF9fICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfMl9fc2V0X18oKChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZiks ICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVlKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNv ZGUgKi8KKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4 X3I7CisgfQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF85ZXJyb3Jfc3RyX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgeworLSAgY2hhciBjb25zdCAqX19weXhf dl9lcnJfYzsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKytzdGF0aWMgaW50IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfMl9fc2V0X18oc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfdmFsdWUpIHsKKysgIGludCBfX3B5eF9yOworICAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKy0gIFB5 T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBj b25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9 IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworKyAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18iLCAwKTsKKysgIF9fUHl4X0lOQ1JFRihf X3B5eF92X3ZhbHVlKTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdl92YWx1ZSk7CisrICBfX1B5 eF9HT1RSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3Nl bGYtPmRhdGEpOworKyAgX19weXhfdl9zZWxmLT5kYXRhID0gX19weXhfdl92YWx1ZTsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNjYKKy0gKiAgICAgICAgICIiIm1w dl9lcnJvcl9zdHJpbmcgb2YgdGhlIGVycm9yIHByb2VwcnR5IiIiCistICogICAgICAgICBjZGVm IGNvbnN0IGNoYXIqIGVycl9jCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5n KHNlbGYuZXJyb3IpCistICogICAgICAgICByZXR1cm4gX3N0cmRlYyhlcnJfYykKKy0gKi8KKy0g IHsKKy0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2 ZTsKKy0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVt YmVyKCk7CistICAgICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8geworKyAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCisrICBfX3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorIAorLSAgICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjI2NworLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBl cnJfYworLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBlcnJfYyA9IG1w dl9lcnJvcl9zdHJpbmcoc2VsZi5lcnJvcikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoZXJyX2MpCistICogCistICovCistICAgICAgICBf X3B5eF92X2Vycl9jID0gbXB2X2Vycm9yX3N0cmluZyhfX3B5eF92X3NlbGYtPmVycm9yKTsKKy0g ICAgICB9CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zf c2VsZik7IC8qcHJvdG8qLworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF80ZGF0YV81X19kZWxfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CisrICBp bnQgX19weXhfcjsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19kZWxfXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzRfX2RlbF9fKCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYp KTsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjY2CistICog ICAgICAgICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBlcnJvciBwcm9lcHJ0eSIiIgorLSAq ICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworLSAqICAgICAgICAgd2l0aCBub2dpbDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGVycl9jID0gbXB2 X2Vycm9yX3N0cmluZyhzZWxmLmVycm9yKQorLSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoZXJy X2MpCistICovCistICAgICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4aXQ6 Ki97CistICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0 R0lMX0ZvcmdldCgpOworLSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICNl bmRpZgorLSAgICAgICAgICBnb3RvIF9fcHl4X0w1OworLSAgICAgICAgfQorLSAgICAgICAgX19w eXhfTDU6OworLSAgICAgIH0KKy0gIH0KKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjY4CistICogICAgICAgICB3 aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVycl9jID0gbXB2X2Vycm9yX3N0cmluZyhzZWxm LmVycm9yKQorLSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoZXJyX2MpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgY2RlZiBfZGF0YShzZWxmLCBtcHZfZXZlbnQq IGV2ZW50KToKKy0gKi8KKytzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfNGRhdGFfNF9fZGVsX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgeworKyAgaW50IF9fcHl4X3I7CisrICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVs X18iLCAwKTsKKysgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgIF9fUHl4X0dJVkVSRUYoUHlf Tm9uZSk7CisrICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF92X3NlbGYtPmRhdGEpOworKyAgX19weXhfdl9zZWxmLT5kYXRhID0gUHlfTm9u ZTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IDA7CisrICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysK KysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzFfX2dldF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV8xX19nZXRfXyhQeU9i amVjdCAqX19weXhfdl9zZWxmKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9f Z2V0X18gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhX19fZ2V0X18oKChzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZikpOworKworKyAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV9fX2dldF9fKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYp IHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFy YXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworICAg X19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgMjY4LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIp OworLSAgX19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfZXJyX2Mp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyNjgsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICBfX3B5eF90XzQgPSBOVUxMOwor LSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzIpKSkgeworLSAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzIpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKKy0gICAgICBQeU9iamVjdCogZnVu Y3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF80KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAg IF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0g IF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4 X3RfMiwgX19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzIsIF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4 X3RfNCA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0g IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI2OCwgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19weXhfciA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3Rf MSA9IDA7CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSk7Cisr ICBfX3B5eF9yID0gX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YTsKKyAgIGdvdG8gX19weXhf TDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjYzCistICogCist ICogICAgIEBwcm9wZXJ0eQorLSAqICAgICBkZWYgZXJyb3Jfc3RyKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRo ZSBlcnJvciBwcm9lcHJ0eSIiIgorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYwor LSAqLworLQorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Mik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNCk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5FdmVudC5l cnJvcl9zdHIuX19nZXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lW RVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0 dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy NzAKKy0gKiAgICAgICAgIHJldHVybiBfc3RyZGVjKGVycl9jKQorLSAqIAorLSAqICAgICBjZGVm IF9kYXRhKHNlbGYsIG1wdl9ldmVudCogZXZlbnQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICBjZGVmIHZvaWQqIGRhdGEgPSBldmVudC5kYXRhCistICogICAgICAg ICBjZGVmIG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSogY2xpbXNnCisrLyogUHl0aG9uIHdyYXBw ZXIgKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf MTRyZXBseV91c2VyZGF0YV8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfdl92YWx1ZSk7IC8qcHJvdG8qLworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzNfX3NldF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CisrICBpbnQgX19weXhf cjsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19zZXRfXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlfdXNlcmRhdGFfMl9fc2V0X18oKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2Vs ZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVlKSk7CisrCisrICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9f cHl4X3I7CisrfQorKworK3N0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzJfX3NldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Zh bHVlKSB7CisrICBpbnQgX19weXhfcjsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisr ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOworKyAgX19QeXhfSU5D UkVGKF9fcHl4X3ZfdmFsdWUpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X3ZhbHVlKTsKKysg IF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKKysgIF9fcHl4X3Zfc2VsZi0+cmVw bHlfdXNlcmRhdGEgPSBfX3B5eF92X3ZhbHVlOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCisrICBfX3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwor KyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGlj IGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlfdXNlcmRh dGFfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworK3N0YXRpYyBp bnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRh XzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKysgIGludCBfX3B5eF9yOworKyAg X19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJfX2RlbF9fICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV80X19kZWxfXygoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxmKSk7Cisr CisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworK3N0YXRpYyBpbnQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzRfX2RlbF9fKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYp IHsKKysgIGludCBfX3B5eF9yOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fIiwgMCk7CisrICBfX1B5eF9JTkNSRUYo UHlfTm9uZSk7CisrICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOworKyAgX19QeXhfR09UUkVGKF9f cHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2Vs Zi0+cmVwbHlfdXNlcmRhdGEpOworKyAgX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSA9IFB5 X05vbmU7CisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3IgPSAwOwor KyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9 CisrCisrLyogIih0cmVlIGZyYWdtZW50KSI6MQorKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBjZGVmIHR1cGxlIHN0 YXRlCisrICogICAgIGNkZWYgb2JqZWN0IF9kaWN0CisgICovCisgCistc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGEoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZiwgc3RydWN0IG1w dl9ldmVudCAqX19weXhfdl9ldmVudCkgeworLSAgdm9pZCAqX19weXhfdl9kYXRhOworLSAgc3Ry dWN0IG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSAqX19weXhfdl9jbGltc2c7CistICBQeU9iamVj dCAqX19weXhfdl9hcmdzID0gTlVMTDsKKy0gIGludCBfX3B5eF92X251bV9hcmdzOworLSAgaW50 IF9fcHl4X3ZfaTsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2FyZyA9IE5VTEw7CisrLyogUHl0aG9u IHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl81RXZlbnRfMV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xX19yZWR1Y2VfY3l0aG9u X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2Vk KSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fICh3 cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfX19yZWR1Y2VfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZikpOworKworKyAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBf X3B5eF9yOworK30KKysKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl81RXZlbnRfX19yZWR1Y2VfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9fcHl4 X3Zfc3RhdGUgPSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX2RpY3QgPSAwOworKyAgaW50IF9f cHl4X3ZfdXNlX3NldHN0YXRlOworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIHZvaWQgKl9fcHl4X3RfMTsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzEgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisgICBQ eU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKyAgIGludCBfX3B5eF90XzQ7CisgICBpbnQgX19w eXhfdF81OworICAgaW50IF9fcHl4X3RfNjsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxM OworLSAgaW50IF9fcHl4X3RfODsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3Qg Y2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwor LSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9kYXRhIiwgMCk7CisrICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18iLCAwKTsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzEKKy0gKiAKKy0gKiAgICAgY2RlZiBfZGF0YShz ZWxmLCBtcHZfZXZlbnQqIGV2ZW50KToKKy0gKiAgICAgICAgIGNkZWYgdm9pZCogZGF0YSA9IGV2 ZW50LmRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBt cHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqIGNsaW1zZworLSAqICAgICAgICAgaWYgc2VsZi5pZCA9 PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZOgorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6 NQorKyAqICAgICBjZGVmIG9iamVjdCBfZGljdAorKyAqICAgICBjZGVmIGJpbnQgdXNlX3NldHN0 YXRlCisrICogICAgIHN0YXRlID0gKHNlbGYuZGF0YSwgc2VsZi5lcnJvciwgc2VsZi5pZCwgc2Vs Zi5yZXBseV91c2VyZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBf ZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKysgKiAgICAgaWYgX2RpY3Qg aXMgbm90IE5vbmU6CisgICovCistICBfX3B5eF90XzEgPSBfX3B5eF92X2V2ZW50LT5kYXRhOwor LSAgX19weXhfdl9kYXRhID0gX19weXhfdF8xOworKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRf RnJvbV9pbnQoX19weXhfdl9zZWxmLT5lcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChf X3B5eF92X3NlbGYtPmlkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwg NSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fcHl4 X3RfMyA9IFB5VHVwbGVfTmV3KDQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigxLCA1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAg X19QeXhfSU5DUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3Zfc2VsZi0+ZGF0YSk7CisrICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMCwgX19weXhf dl9zZWxmLT5kYXRhKTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKysgIFB5VHVwbGVf U0VUX0lURU0oX19weXhfdF8zLCAxLCBfX3B5eF90XzEpOworKyAgX19QeXhfR0lWRVJFRihfX3B5 eF90XzIpOworKyAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDIsIF9fcHl4X3RfMik7Cisr ICBfX1B5eF9JTkNSRUYoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSk7CisrICBfX1B5eF9H SVZFUkVGKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworKyAgUHlUdXBsZV9TRVRfSVRF TShfX3B5eF90XzMsIDMsIF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworKyAgX19weXhf dF8xID0gMDsKKysgIF9fcHl4X3RfMiA9IDA7CisrICBfX3B5eF92X3N0YXRlID0gKChQeU9iamVj dCopX19weXhfdF8zKTsKKysgIF9fcHl4X3RfMyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjczCistICogICAgICAgICBjZGVmIHZvaWQqIGRhdGEgPSBldmVu dC5kYXRhCistICogICAgICAgICBjZGVmIG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSogY2xpbXNn CistICogICAgICAgICBpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByZXR1cm4gUHJv cGVydHkoKS5faW5pdCg8bXB2X2V2ZW50X3Byb3BlcnR5Kj5kYXRhKQorLSAqICAgICAgICAgZWxp ZiBzZWxmLmlkID09IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6CistICovCistICBzd2l0Y2gg KF9fcHl4X3Zfc2VsZi0+aWQpIHsKKy0gICAgY2FzZSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JF UExZOgorLQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc0CistICog ICAgICAgICBjZGVmIG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSogY2xpbXNnCistICogICAgICAg ICBpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6CistICogICAgICAg ICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09 IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6CistICogICAgICAgICAgICAgcmV0dXJuIFByb3Bl cnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKKysgIC8qICIodHJlZSBmcmFn bWVudCkiOjYKKysgKiAgICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQorKyAqICAgICBzdGF0ZSA9 IChzZWxmLmRhdGEsIHNlbGYuZXJyb3IsIHNlbGYuaWQsIHNlbGYucmVwbHlfdXNlcmRhdGEpCisr ICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorKyAqICAg ICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKKyAgKi8KKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKKy0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmplY3Qg KilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjc0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4X3RfMyA9ICgoc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3RfMiktPl9fcHl4 X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1By b3BlcnR5ICopX19weXhfdF8yKSwgKChzdHJ1Y3QgbXB2X2V2ZW50X3Byb3BlcnR5ICopX19weXhf dl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI3NCwgX19w eXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgX19weXhfciA9IF9fcHl4X3Rf MzsKKy0gICAgX19weXhfdF8zID0gMDsKKy0gICAgZ290byBfX3B5eF9MMDsKKysgIF9fcHl4X3Rf MyA9IF9fUHl4X0dldEF0dHIzKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3Nf ZGljdCwgUHlfTm9uZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICBfX3B5eF92 X19kaWN0ID0gX19weXhfdF8zOworKyAgX19weXhfdF8zID0gMDsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3MworLSAqICAgICAgICAgY2RlZiB2b2lkKiBkYXRh ID0gZXZlbnQuZGF0YQorLSAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2Uq IGNsaW1zZworLSAqICAgICAgICAgaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZ X1JFUExZOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0 dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKKy0gKiAgICAg ICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgorKyAgLyogIih0 cmVlIGZyYWdtZW50KSI6NworKyAqICAgICBzdGF0ZSA9IChzZWxmLmRhdGEsIHNlbGYuZXJyb3Is IHNlbGYuaWQsIHNlbGYucmVwbHlfdXNlcmRhdGEpCisrICogICAgIF9kaWN0ID0gZ2V0YXR0cihz ZWxmLCAnX19kaWN0X18nLCBOb25lKQorKyAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkK KysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUKKyAgKi8KKy0gICAgYnJlYWs7CistICAg IGNhc2UgTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToKKysgIF9fcHl4X3RfNCA9IChfX3B5eF92 X19kaWN0ICE9IFB5X05vbmUpOworKyAgX19weXhfdF81ID0gKF9fcHl4X3RfNCAhPSAwKTsKKysg IGlmIChfX3B5eF90XzUpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjI3NgorLSAqICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZl bnRfcHJvcGVydHkqPmRhdGEpCistICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5U X1BST1BFUlRZX0NIQU5HRToKKy0gKiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5p dCg8bXB2X2V2ZW50X3Byb3BlcnR5Kj5kYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0xPR19NRVNTQUdFOgorLSAq ICAgICAgICAgICAgIHJldHVybiBMb2dNZXNzYWdlKCkuX2luaXQoPG1wdl9ldmVudF9sb2dfbWVz c2FnZSo+ZGF0YSkKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6OAorKyAqICAgICBfZGljdCA9 IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKysgKiAgICAgaWYgX2RpY3QgaXMgbm90 IE5vbmU6CisrICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCisrICogICAgIGVsc2U6 CisgICovCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9fcHl4X3RfMyA9IF9f UHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X1Byb3BlcnR5KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDAsIDI3NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9IFB5VHVwbGVfTmV3 KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA4LCBfX3B5eF9MMV9l cnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fcHl4X3RfMiA9ICgo c3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICop KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4 X3RfMyktPl9fcHl4X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdF8zKSwgKChzdHJ1Y3QgbXB2X2V2ZW50X3Byb3Bl cnR5ICopX19weXhfdl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDI3NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X19kaWN0 KTsKKysgICAgX19QeXhfR0lWRVJFRihfX3B5eF92X19kaWN0KTsKKysgICAgUHlUdXBsZV9TRVRf SVRFTShfX3B5eF90XzMsIDAsIF9fcHl4X3ZfX2RpY3QpOworKyAgICBfX3B5eF90XzIgPSBQeU51 bWJlcl9JblBsYWNlQWRkKF9fcHl4X3Zfc3RhdGUsIF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3Rf MyA9IDA7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzI7CisrICAgIF9fUHl4X0RFQ1JFRl9TRVQo X19weXhfdl9zdGF0ZSwgKChQeU9iamVjdCopX19weXhfdF8yKSk7CisgICAgIF9fcHl4X3RfMiA9 IDA7CistICAgIGdvdG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyNzUKKy0gKiAgICAgICAgIGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0dFVF9Q Uk9QRVJUWV9SRVBMWToKKy0gKiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8 bXB2X2V2ZW50X3Byb3BlcnR5Kj5kYXRhKQorLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1Q Vl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8bXB2X2V2ZW50X3Byb3BlcnR5 Kj5kYXRhKQorLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9MT0dfTUVTU0FH RToKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6OQorKyAqICAgICBpZiBfZGljdCBpcyBub3Qg Tm9uZToKKysgKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCisrICogICAgICAgICB1c2Vfc2V0 c3RhdGUgPSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZWxzZToK KysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBzZWxm LnJlcGx5X3VzZXJkYXRhIGlzIG5vdCBOb25lCisgICovCistICAgIGJyZWFrOworLSAgICBjYXNl IE1QVl9FVkVOVF9MT0dfTUVTU0FHRToKKysgICAgX19weXhfdl91c2Vfc2V0c3RhdGUgPSAxOwor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc4CistICogICAgICAg ICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkK Ky0gKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfTE9HX01FU1NBR0U6CistICog ICAgICAgICAgICAgcmV0dXJuIExvZ01lc3NhZ2UoKS5faW5pdCg8bXB2X2V2ZW50X2xvZ19tZXNz YWdlKj5kYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBlbGlm IHNlbGYuaWQgPT0gTVBWX0VWRU5UX1NDUklQVF9JTlBVVF9ESVNQQVRDSDoKKy0gKiAgICAgICAg ICAgICByZXR1cm4gSW5wdXREaXNwYXRjaCgpLl9pbml0KDxtcHZfZXZlbnRfc2NyaXB0X2lucHV0 X2Rpc3BhdGNoKj5kYXRhKQorKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3CisrICogICAgIHN0 YXRlID0gKHNlbGYuZGF0YSwgc2VsZi5lcnJvciwgc2VsZi5pZCwgc2VsZi5yZXBseV91c2VyZGF0 YSkKKysgKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCisrICog ICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0g VHJ1ZQorKyAqLworKyAgICBnb3RvIF9fcHl4X0wzOworKyAgfQorKworKyAgLyogIih0cmVlIGZy YWdtZW50KSI6MTEKKysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUKKysgKiAgICAgZWxz ZToKKysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBz ZWxmLnJlcGx5X3VzZXJkYXRhIGlzIG5vdCBOb25lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgaWYgdXNlX3NldHN0YXRlOgorKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3Vu cGlja2xlX0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBOb25lKSwgc3RhdGUKKysgKi8K KysgIC8qZWxzZSovIHsKKysgICAgX19weXhfdF80ID0gKF9fcHl4X3Zfc2VsZi0+ZGF0YSAhPSBQ eV9Ob25lKTsKKysgICAgX19weXhfdF82ID0gKF9fcHl4X3RfNCAhPSAwKTsKKysgICAgaWYgKCFf X3B5eF90XzYpIHsKKysgICAgfSBlbHNlIHsKKysgICAgICBfX3B5eF90XzUgPSBfX3B5eF90XzY7 CisrICAgICAgZ290byBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU7CisrICAgIH0KKysgICAgX19w eXhfdF82ID0gKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgIT0gUHlfTm9uZSk7CisrICAg IF9fcHl4X3RfNCA9IChfX3B5eF90XzYgIT0gMCk7CisrICAgIF9fcHl4X3RfNSA9IF9fcHl4X3Rf NDsKKysgICAgX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKKysgICAgX19weXhfdl91c2Vfc2V0 c3RhdGUgPSBfX3B5eF90XzU7CisrICB9CisrICBfX3B5eF9MMzo7CisrCisrICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxMgorKyAqICAgICBlbHNlOgorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0g c2VsZi5kYXRhIGlzIG5vdCBOb25lIG9yIHNlbGYucmVwbHlfdXNlcmRhdGEgaXMgbm90IE5vbmUK KysgKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0eXBlKHNlbGYpLCAweGRh MzhjMjUsIE5vbmUpLCBzdGF0ZQorKyAqICAgICBlbHNlOgorKyAqLworKyAgX19weXhfdF81ID0g KF9fcHl4X3ZfdXNlX3NldHN0YXRlICE9IDApOworKyAgaWYgKF9fcHl4X3RfNSkgeworKworKyAg ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMworKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2Vs Zi5kYXRhIGlzIG5vdCBOb25lIG9yIHNlbGYucmVwbHlfdXNlcmRhdGEgaXMgbm90IE5vbmUKKysg KiAgICAgaWYgdXNlX3NldHN0YXRlOgorKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xl X0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBOb25lKSwgc3RhdGUgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBlbHNlOgorKyAqICAgICAgICAgcmV0dXJuIF9fcHl4 X3VucGlja2xlX0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBzdGF0ZSkKKyAgKi8KKyAg ICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfQ2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfTG9nTWVzc2FnZSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAy NzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfMiwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9FdmVudCk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7CistICAgIF9fcHl4X3RfMyA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3Rf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKikoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF90XzIpLT5fX3B5eF92dGFiKS0+ X2luaXQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdl ICopX19weXhfdF8yKSwgKChzdHJ1Y3QgbXB2X2V2ZW50X2xvZ19tZXNzYWdlICopX19weXhfdl9k YXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI3OCwgX19weXhf TDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9IFB5VHVwbGVfTmV3KDMpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhf dF8yID0gMDsKKy0gICAgX19weXhfciA9IF9fcHl4X3RfMzsKKysgICAgX19QeXhfSU5DUkVGKCgo UHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworKyAgICBf X1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3Nl bGYpKSkpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMCwgKChQeU9iamVjdCAq KVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7CisrICAgIF9fUHl4X0lOQ1JF RihfX3B5eF9pbnRfMjI4ODIyMDUzKTsKKysgICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfMjI4 ODIyMDUzKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDEsIF9fcHl4X2ludF8y Mjg4MjIwNTMpOworKyAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICAgIF9fUHl4X0dJVkVS RUYoUHlfTm9uZSk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8zLCAyLCBQeV9Ob25l KTsKKysgICAgX19weXhfdF8xID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8yKTsKKysgICAgUHlUdXBs ZV9TRVRfSVRFTShfX3B5eF90XzEsIDAsIF9fcHl4X3RfMik7CisrICAgIF9fUHl4X0dJVkVSRUYo X19weXhfdF8zKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4X3Rf Myk7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3N0YXRlKTsKKysgICAgX19QeXhfR0lWRVJF RihfX3B5eF92X3N0YXRlKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDIsIF9f cHl4X3Zfc3RhdGUpOworKyAgICBfX3B5eF90XzIgPSAwOworICAgICBfX3B5eF90XzMgPSAwOwor KyAgICBfX3B5eF9yID0gX19weXhfdF8xOworKyAgICBfX3B5eF90XzEgPSAwOworICAgICBnb3Rv IF9fcHl4X0wwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc3 CistICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToK Ky0gKiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8bXB2X2V2ZW50X3Byb3Bl cnR5Kj5kYXRhKQorLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9MT0dfTUVT U0FHRTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHJldHVy biBMb2dNZXNzYWdlKCkuX2luaXQoPG1wdl9ldmVudF9sb2dfbWVzc2FnZSo+ZGF0YSkKKy0gKiAg ICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENIOgor KyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgorKyAqICAgICBlbHNlOgorKyAqICAgICAgICAg dXNlX3NldHN0YXRlID0gc2VsZi5kYXRhIGlzIG5vdCBOb25lIG9yIHNlbGYucmVwbHlfdXNlcmRh dGEgaXMgbm90IE5vbmUKKysgKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0 eXBlKHNlbGYpLCAweGRhMzhjMjUsIE5vbmUpLCBzdGF0ZQorKyAqICAgICBlbHNlOgorICAqLwor LSAgICBicmVhazsKKy0gICAgY2FzZSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENIOgor KyAgfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjgwCistICog ICAgICAgICAgICAgcmV0dXJuIExvZ01lc3NhZ2UoKS5faW5pdCg8bXB2X2V2ZW50X2xvZ19tZXNz YWdlKj5kYXRhKQorLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9TQ1JJUFRf SU5QVVRfRElTUEFUQ0g6CistICogICAgICAgICAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2goKS5f aW5pdCg8bXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9D TElFTlRfTUVTU0FHRToKKy0gKiAgICAgICAgICAgICBjbGltc2cgPSA8bXB2X2V2ZW50X2NsaWVu dF9tZXNzYWdlKj5kYXRhCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNQorKyAqICAgICAgICAg cmV0dXJuIF9fcHl4X3VucGlja2xlX0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBOb25l KSwgc3RhdGUKKysgKiAgICAgZWxzZToKKysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2ts ZV9FdmVudCwgKHR5cGUoc2VsZiksIDB4ZGEzOGMyNSwgc3RhdGUpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0 ZSk6CisrICogICAgIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoc2VsZiwgX19weXhf c3RhdGUpCisgICovCisrICAvKmVsc2UqLyB7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICop X19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2gpKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjgwLCBfX3B5eF9MMV9lcnJvcikKKysg ICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19weXhfdW5w aWNrbGVfRXZlbnQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNSwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX3B5 eF90XzMgPSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsK Ky0gICAgX19weXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqKSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqKV9fcHl4X3RfMyktPl9fcHl4X3Z0YWIpLT5faW5pdCgo KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggKilf X3B5eF90XzMpLCAoKHN0cnVjdCBtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3BhdGNoICopX19w eXhfdl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDI4MCwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgo KFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKysgICAgX19QeXhfR0lWRVJFRigoKFB5T2Jq ZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKysgICAgUHlUdXBs ZV9TRVRfSVRFTShfX3B5eF90XzMsIDAsICgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3Qg KilfX3B5eF92X3NlbGYpKSkpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzIyODgyMjA1 Myk7CisrICAgIF9fUHl4X0dJVkVSRUYoX19weXhfaW50XzIyODgyMjA1Myk7CisrICAgIFB5VHVw bGVfU0VUX0lURU0oX19weXhfdF8zLCAxLCBfX3B5eF9pbnRfMjI4ODIyMDUzKTsKKysgICAgX19Q eXhfSU5DUkVGKF9fcHl4X3Zfc3RhdGUpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc3Rh dGUpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMiwgX19weXhfdl9zdGF0ZSk7 CisrICAgIF9fcHl4X3RfMiA9IFB5VHVwbGVfTmV3KDIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigxLCAxNSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsK KysgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfMiwgMCwgX19weXhfdF8xKTsKKysgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzMpOwor KyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMiwgMSwgX19weXhfdF8zKTsKKysgICAgX19w eXhfdF8xID0gMDsKKysgICAgX19weXhfdF8zID0gMDsKKyAgICAgX19weXhfciA9IF9fcHl4X3Rf MjsKKyAgICAgX19weXhfdF8yID0gMDsKKyAgICAgZ290byBfX3B5eF9MMDsKKysgIH0KKyAKKy0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3OQorLSAqICAgICAgICAgZWxp ZiBzZWxmLmlkID09IE1QVl9FVkVOVF9MT0dfTUVTU0FHRToKKy0gKiAgICAgICAgICAgICByZXR1 cm4gTG9nTWVzc2FnZSgpLl9pbml0KDxtcHZfZXZlbnRfbG9nX21lc3NhZ2UqPmRhdGEpCistICog ICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX1NDUklQVF9JTlBVVF9ESVNQQVRDSDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHJldHVybiBJbnB1 dERpc3BhdGNoKCkuX2luaXQoPG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2gqPmRhdGEp CistICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFOgor KyAgLyogIih0cmVlIGZyYWdtZW50KSI6MQorKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxm KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBjZGVmIHR1cGxlIHN0YXRl CisrICogICAgIGNkZWYgb2JqZWN0IF9kaWN0CisgICovCistICAgIGJyZWFrOworLSAgICBjYXNl IE1QVl9FVkVOVF9DTElFTlRfTUVTU0FHRToKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjI4MgorLSAqICAgICAgICAgICAgIHJldHVybiBJbnB1dERpc3BhdGNoKCku X2luaXQoPG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2gqPmRhdGEpCistICogICAgICAg ICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFOgorLSAqICAgICAgICAg ICAgIGNsaW1zZyA9IDxtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqPmRhdGEgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGFyZ3MgPSBbXQorLSAqICAgICAgICAg ICAgIG51bV9hcmdzID0gY2xpbXNnLm51bV9hcmdzCistICovCistICAgIF9fcHl4X3ZfY2xpbXNn ID0gKChzdHJ1Y3QgbXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlICopX19weXhfdl9kYXRhKTsKKysg IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfTDFfZXJyb3I6OworKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworKyAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzMpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIu bGlicy5tcHYuRXZlbnQuX19yZWR1Y2VfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworKyAgX19weXhfTDA6 OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X3N0YXRlKTsKKysgIF9fUHl4X1hERUNSRUYoX19w eXhfdl9fZGljdCk7CisrICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKysgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorIAorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjgzCistICogICAgICAgICBlbGlmIHNlbGYu aWQgPT0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFOgorLSAqICAgICAgICAgICAgIGNsaW1zZyA9 IDxtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqPmRhdGEKKy0gKiAgICAgICAgICAgICBhcmdzID0g W10gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG51bV9hcmdz ID0gY2xpbXNnLm51bV9hcmdzCistICogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtX2Fy Z3MpOgorKy8qICIodHJlZSBmcmFnbWVudCkiOjE2CisrICogICAgIGVsc2U6CisrICogICAgICAg ICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0eXBlKHNlbGYpLCAweGRhMzhjMjUsIHN0 YXRlKQorKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9f c2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQorICAqLworLSAgICBfX3B5eF90XzIgPSBQeUxp c3RfTmV3KDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyODMsIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhf dl9hcmdzID0gKChQeU9iamVjdCopX19weXhfdF8yKTsKKy0gICAgX19weXhfdF8yID0gMDsKKyAK Ky0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NAorLSAqICAgICAgICAg ICAgIGNsaW1zZyA9IDxtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqPmRhdGEKKy0gKiAgICAgICAg ICAgICBhcmdzID0gW10KKy0gKiAgICAgICAgICAgICBudW1fYXJncyA9IGNsaW1zZy5udW1fYXJn cyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZm9yIGkgaW4g cmFuZ2UobnVtX2FyZ3MpOgorLSAqICAgICAgICAgICAgICAgICBhcmcgPSA8Y2hhcio+Y2xpbXNn LmFyZ3NbaV0KKy0gKi8KKy0gICAgX19weXhfdF80ID0gX19weXhfdl9jbGltc2ctPm51bV9hcmdz OworLSAgICBfX3B5eF92X251bV9hcmdzID0gX19weXhfdF80OworLQorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg1CistICogICAgICAgICAgICAgYXJncyA9IFtdCist ICogICAgICAgICAgICAgbnVtX2FyZ3MgPSBjbGltc2cubnVtX2FyZ3MKKy0gKiAgICAgICAgICAg ICBmb3IgaSBpbiByYW5nZShudW1fYXJncyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgICAgICAgICAgYXJnID0gPGNoYXIqPmNsaW1zZy5hcmdzW2ldCistICogICAg ICAgICAgICAgICAgIGFyZyA9IF9zdHJkZWMoYXJnKQorLSAqLworLSAgICBfX3B5eF90XzQgPSBf X3B5eF92X251bV9hcmdzOworLSAgICBfX3B5eF90XzUgPSBfX3B5eF90XzQ7CistICAgIGZvciAo X19weXhfdF82ID0gMDsgX19weXhfdF82IDwgX19weXhfdF81OyBfX3B5eF90XzYrPTEpIHsKKy0g ICAgICBfX3B5eF92X2kgPSBfX3B5eF90XzY7CistCistICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjI4NgorLSAqICAgICAgICAgICAgIG51bV9hcmdzID0gY2xpbXNnLm51 bV9hcmdzCistICogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtX2FyZ3MpOgorLSAqICAg ICAgICAgICAgICAgICBhcmcgPSA8Y2hhcio+Y2xpbXNnLmFyZ3NbaV0gICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBhcmcgPSBfc3RyZGVjKGFyZykKKy0g KiAgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQoYXJnKQorLSAqLworLSAgICAgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZygoKGNoYXIgKikoX19weXhfdl9jbGltc2ctPmFy Z3NbX19weXhfdl9pXSkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg Mjg2LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0g ICAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X2FyZywgX19weXhfdF8yKTsKKy0gICAgICBf X3B5eF90XzIgPSAwOworLQorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyODcKKy0gKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShudW1fYXJncyk6CistICogICAg ICAgICAgICAgICAgIGFyZyA9IDxjaGFyKj5jbGltc2cuYXJnc1tpXQorLSAqICAgICAgICAgICAg ICAgICBhcmcgPSBfc3RyZGVjKGFyZykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpCistICogICAgICAgICAgICAgcmV0dXJu IGFyZ3MKKy0gKi8KKy0gICAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMywg X19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDI4NywgX19weXhfTDFfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Cist ICAgICAgX19weXhfdF83ID0gTlVMTDsKKy0gICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7CistICAgICAgICBfX3B5 eF90XzcgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzMpOworLSAgICAgICAgaWYgKGxpa2Vs eShfX3B5eF90XzcpKSB7CistICAgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9k X0dFVF9GVU5DVElPTihfX3B5eF90XzMpOworLSAgICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhf dF83KTsKKy0gICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKy0gICAgICAgIH0KKy0gICAgICB9 CistICAgICAgX19weXhfdF8yID0gKF9fcHl4X3RfNykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFy Z3MoX19weXhfdF8zLCBfX3B5eF90XzcsIF9fcHl4X3ZfYXJnKSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF92X2FyZyk7CistICAgICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDI4NywgX19weXhfTDFfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2FyZywgX19weXhfdF8yKTsKKy0g ICAgICBfX3B5eF90XzIgPSAwOworLQorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyODgKKy0gKiAgICAgICAgICAgICAgICAgYXJnID0gPGNoYXIqPmNsaW1zZy5hcmdz W2ldCistICogICAgICAgICAgICAgICAgIGFyZyA9IF9zdHJkZWMoYXJnKQorLSAqICAgICAgICAg ICAgICAgICBhcmdzLmFwcGVuZChhcmcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICByZXR1cm4gYXJncworLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1Q Vl9FVkVOVF9FTkRfRklMRToKKy0gKi8KKy0gICAgICBfX3B5eF90XzggPSBfX1B5eF9QeUxpc3Rf QXBwZW5kKF9fcHl4X3ZfYXJncywgX19weXhfdl9hcmcpOyBpZiAodW5saWtlbHkoX19weXhfdF84 ID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigwLCAyODgsIF9fcHl4X0wxX2Vycm9yKQorLSAgICB9 CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKnByb3RvKi8KKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfM19f c2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3ZfX19weXhfc3RhdGUpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKysgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRz dGF0ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJfX3NldHN0YXRlX2N5dGhvbl9fKCgoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpLCAoKFB5 T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Mjg5CistICogICAgICAgICAgICAgICAgIGFyZyA9IF9zdHJkZWMo YXJnKQorLSAqICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpCistICogICAgICAgICAg ICAgcmV0dXJuIGFyZ3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9FTkRfRklMRToKKy0gKiAgICAgICAgICAgICByZXR1 cm4gRW5kT2ZGaWxlUmVhY2hlZCgpLl9pbml0KDxtcHZfZXZlbnRfZW5kX2ZpbGUqPmRhdGEpCist ICovCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF92X2FyZ3MpOworLSAgICBfX3B5eF9yID0gX19weXhfdl9hcmdzOworLSAgICBnb3RvIF9fcHl4 X0wwOworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjI4MQorLSAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1Q Vl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0g6CistICogICAgICAgICAgICAgcmV0dXJuIElu cHV0RGlzcGF0Y2goKS5faW5pdCg8bXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0 YSkKKy0gKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0U6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBjbGltc2cgPSA8 bXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKj5kYXRhCistICogICAgICAgICAgICAgYXJncyA9IFtd CistICovCistICAgIGJyZWFrOworLSAgICBjYXNlIE1QVl9FVkVOVF9FTkRfRklMRToKKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMl9fc2V0 c3RhdGVfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKysgIFB5 T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisr ICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAwOwor KyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9u X18iLCAwKTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5MQor LSAqICAgICAgICAgICAgIHJldHVybiBhcmdzCistICogICAgICAgICBlbGlmIHNlbGYuaWQgPT0g TVBWX0VWRU5UX0VORF9GSUxFOgorLSAqICAgICAgICAgICAgIHJldHVybiBFbmRPZkZpbGVSZWFj aGVkKCkuX2luaXQoPG1wdl9ldmVudF9lbmRfZmlsZSo+ZGF0YSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIE5vbmUKKy0gKiAKKysgIC8qICIodHJlZSBm cmFnbWVudCkiOjE3CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0 eXBlKHNlbGYpLCAweGRhMzhjMjUsIHN0YXRlKQorKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9f KHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9z dGF0ZShzZWxmLCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAq LworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9Q eU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDI5MSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzIpOworLSAgICBfX3B5eF90XzMgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICopX19weXhfdF8yKS0+X19weXhfdnRh YiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZG aWxlUmVhY2hlZCAqKV9fcHl4X3RfMiksICgoc3RydWN0IG1wdl9ldmVudF9lbmRfZmlsZSAqKV9f cHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyOTEs IF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fcHl4X3IgPSBfX3B5 eF90XzM7CistICAgIF9fcHl4X3RfMyA9IDA7CistICAgIGdvdG8gX19weXhfTDA7CisrICBpZiAo IShsaWtlbHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5 eF92X19fcHl4X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJy b3IsICJFeHBlY3RlZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZUEUoX19weXhf dl9fX3B5eF9zdGF0ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5 eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKF9fcHl4X3Zfc2VsZiwgKChQeU9iamVjdCopX19w eXhfdl9fX3B5eF9zdGF0ZSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigx LCAxNywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjkwCistICogICAgICAgICAgICAgICAgIGFyZ3MuYXBw ZW5kKGFyZykKKy0gKiAgICAgICAgICAgICByZXR1cm4gYXJncworLSAqICAgICAgICAgZWxpZiBz ZWxmLmlkID09IE1QVl9FVkVOVF9FTkRfRklMRTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgICAgIHJldHVybiBFbmRPZkZpbGVSZWFjaGVkKCkuX2luaXQoPG1wdl9l dmVudF9lbmRfZmlsZSo+ZGF0YSkKKy0gKiAgICAgICAgIHJldHVybiBOb25lCisrICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxNgorKyAqICAgICBlbHNlOgorKyAqICAgICAgICAgcmV0dXJuIF9fcHl4 X3VucGlja2xlX0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBzdGF0ZSkKKysgKiBkZWYg X19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShzZWxm LCBfX3B5eF9zdGF0ZSkKKyAgKi8KKy0gICAgYnJlYWs7CistICAgIGRlZmF1bHQ6IGJyZWFrOwor LSAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5MgorLSAqICAg ICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9FTkRfRklMRToKKy0gKiAgICAgICAgICAg ICByZXR1cm4gRW5kT2ZGaWxlUmVhY2hlZCgpLl9pbml0KDxtcHZfZXZlbnRfZW5kX2ZpbGUqPmRh dGEpCistICogICAgICAgICByZXR1cm4gTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogCistICogICAgIEBwcm9wZXJ0eQorLSAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19weXhfciA9IFB5X05vbmU7IF9f UHl4X0lOQ1JFRihQeV9Ob25lKTsKKyAgIGdvdG8gX19weXhfTDA7CisrICBfX3B5eF9MMV9lcnJv cjo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5FdmVudC5fX3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsK KysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjcwCistICogICAgICAgICByZXR1cm4gX3N0 cmRlYyhlcnJfYykKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE4CisgICog CistICogICAgIGNkZWYgX2RhdGEoc2VsZiwgbXB2X2V2ZW50KiBldmVudCk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgdm9pZCogZGF0YSA9IGV2ZW50LmRh dGEKKy0gKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKiBjbGltc2cKKysg KiAKKysgKiBkZWYgX2Vycm9ycyhmbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgorKyAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3 KQorICAqLworIAorKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNV9lcnJvcnMoUHlPYmplY3QgKl9fcHl4X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF92X2ZuKTsgLypwcm90byovCisrc3RhdGljIFB5TWV0aG9kRGVmIF9f cHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVfZXJyb3JzID0geyJfZXJyb3JzIiwgKFB5 Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81X2Vycm9ycywgTUVUSF9P LCAwfTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 X2Vycm9ycyhQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZm4pIHsKKysg IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisr ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2Vycm9ycyAod3JhcHBlcikiLCAwKTsKKysg IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNF9lcnJvcnMoX19weXhf c2VsZiwgKChQeU9iamVjdCAqKV9fcHl4X3ZfZm4pKTsKKysKKyAgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworLSAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzcpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQuX2Rh dGEiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9f cHl4X3IgPSAwOworLSAgX19weXhfTDA6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2FyZ3Mp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2FyZyk7CistICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4 X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTUKKysvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE5CisgICogCistICogICAgIEBwcm9wZXJ0 eQorLSAqICAgICBkZWYgbmFtZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgIiIibXB2X2V2ZW50X25hbWUgb2YgdGhlIGV2ZW50IGlkIiIiCistICogICAg ICAgICBjZGVmIGNvbnN0IGNoYXIqIG5hbWVfYworKyAqIGRlZiBfZXJyb3JzKGZuKToKKysgKiAg ICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCisrICogICAgICAgICBpZiB2IDwgMDoKKyAgKi8K KyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80bmFtZV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhf dl9zZWxmKTsgLypwcm90byovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50XzRuYW1lXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYp IHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X2Vy cm9yc18xd3JhcHBlZChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3Ms IFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisrc3RhdGljIFB5TWV0aG9kRGVmIF9f cHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3JzXzF3cmFwcGVkID0geyJ3cmFw cGVkIiwgKFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3JzXzF3cmFwcGVkLCBNRVRIX1ZBUkFSR1N8 TUVUSF9LRVlXT1JEUywgMH07Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN19lcnJvcnNfMXdyYXBwZWQoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgeworKyAgUHlPYmplY3QgKl9f cHl4X3ZfayA9IDA7CisrICBQeU9iamVjdCAqX19weXhfdl9rdyA9IDA7CisgICBQeU9iamVjdCAq X19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80bmFtZV9fX2dldF9fKCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYp KTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJ3cmFwcGVkICh3cmFwcGVyKSIsIDAp OworKyAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpICYmIHVubGlrZWx5KCFfX1B5eF9DaGVja0tl eXdvcmRTdHJpbmdzKF9fcHl4X2t3ZHMsICJ3cmFwcGVkIiwgMSkpKSByZXR1cm4gTlVMTDsKKysg IF9fcHl4X3Zfa3cgPSAoX19weXhfa3dkcykgPyBQeURpY3RfQ29weShfX3B5eF9rd2RzKSA6IFB5 RGljdF9OZXcoKTsgaWYgKHVubGlrZWx5KCFfX3B5eF92X2t3KSkgcmV0dXJuIE5VTEw7CisrICBf X1B5eF9HT1RSRUYoX19weXhfdl9rdyk7CisrICBfX1B5eF9JTkNSRUYoX19weXhfYXJncyk7Cisr ICBfX3B5eF92X2sgPSBfX3B5eF9hcmdzOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83X2Vycm9yc193cmFwcGVkKF9fcHl4X3NlbGYsIF9fcHl4X3ZfaywgX19w eXhfdl9rdyk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4X1hERUNS RUYoX19weXhfdl9rKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9rdyk7CisgICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVf X19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19w eXhfdl9zZWxmKSB7CistICBjaGFyIGNvbnN0ICpfX3B5eF92X25hbWVfYzsKKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X2Vycm9yc193cmFwcGVkKFB5 T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9rLCBQeU9iamVjdCAqX19weXhf dl9rdykgeworKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf c2NvcGVfc3RydWN0X19fZXJyb3JzICpfX3B5eF9jdXJfc2NvcGU7CisrICBzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKl9f cHl4X291dGVyX3Njb3BlOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfdiA9IE5VTEw7CisgICBQeU9i amVjdCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAg UHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVM TDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworKyAgaW50IF9fcHl4X3RfMzsKKyAg IFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisg ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndyYXBwZWQiLCAwKTsKKysgIF9fcHl4X291dGVy X3Njb3BlID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Nj b3BlX3N0cnVjdF9fX2Vycm9ycyAqKSBfX1B5eF9DeUZ1bmN0aW9uX0dldENsb3N1cmUoX19weXhf c2VsZik7CisrICBfX3B5eF9jdXJfc2NvcGUgPSBfX3B5eF9vdXRlcl9zY29wZTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTgKKy0gKiAgICAgICAgICIiIm1wdl9l dmVudF9uYW1lIG9mIHRoZSBldmVudCBpZCIiIgorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFy KiBuYW1lX2MKKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICBuYW1lX2MgPSBtcHZfZXZlbnRfbmFtZShzZWxmLmlkKQor LSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobmFtZV9jKQorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjMyMAorKyAqIGRlZiBfZXJyb3JzKGZuKToKKysgKiAgICAgZGVmIHdy YXBwZWQoKmssICoqa3cpOgorKyAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3KSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBpZiB2IDwgMDoKKysgKiAgICAgICAgICAg ICByYWlzZSBNUFZFcnJvcih2KQorICAqLworLSAgeworLSAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFE UworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKy0gICAgICAjZW5kaWYKKy0gICAg ICAvKnRyeToqLyB7CisrICBpZiAodW5saWtlbHkoIV9fcHl4X2N1cl9zY29wZS0+X19weXhfdl9m bikpIHsgX19QeXhfUmFpc2VDbG9zdXJlTmFtZUVycm9yKCJmbiIpOyBfX1BZWF9FUlIoMCwgMzIw LCBfX3B5eF9MMV9lcnJvcikgfQorKyAgX19weXhfdF8xID0gUHlEaWN0X0NvcHkoX19weXhfdl9r dyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMyMCwgX19weXhfTDFf ZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fcHl4X3RfMiA9IF9fUHl4 X1B5T2JqZWN0X0NhbGwoX19weXhfY3VyX3Njb3BlLT5fX3B5eF92X2ZuLCBfX3B5eF92X2ssIF9f cHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDMyMCwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19weXhfdl92ID0gX19weXhfdF8yOwor KyAgX19weXhfdF8yID0gMDsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyOTkKKy0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZV9jCistICogICAg ICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG5hbWVfYyA9IG1wdl9ldmVudF9uYW1l KHNlbGYuaWQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHJldHVy biBfc3RyZGVjKG5hbWVfYykKKy0gKiAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMjEKKysgKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgorKyAqICAgICAgICAgdiA9 IGZuKCprLCAqKmt3KQorKyAqICAgICAgICAgaWYgdiA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KQorKyAqICAgICByZXR1 cm4gd3JhcHBlZAorICAqLworLSAgICAgICAgX19weXhfdl9uYW1lX2MgPSBtcHZfZXZlbnRfbmFt ZShfX3B5eF92X3NlbGYtPmlkKTsKKy0gICAgICB9CisrICBfX3B5eF90XzIgPSBQeU9iamVjdF9S aWNoQ29tcGFyZShfX3B5eF92X3YsIF9fcHl4X2ludF8wLCBQeV9MVCk7IF9fUHl4X1hHT1RSRUYo X19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMzIxLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5 eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigwLCAzMjEsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 CisrICBpZiAodW5saWtlbHkoX19weXhfdF8zKSkgeworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyOTgKKy0gKiAgICAgICAgICIiIm1wdl9ldmVudF9uYW1lIG9m IHRoZSBldmVudCBpZCIiIgorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBuYW1lX2MKKy0g KiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgICAgICBuYW1lX2MgPSBtcHZfZXZlbnRfbmFtZShzZWxmLmlkKQorLSAqICAgICAgICAg cmV0dXJuIF9zdHJkZWMobmFtZV9jKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzIyCisrICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCisrICogICAgICAgICBpZiB2 IDwgMDoKKysgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgIHJldHVybiB3cmFwcGVkCisrICogCisgICovCistICAgICAg LypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICNp ZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAg ICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICBn b3RvIF9fcHl4X0w1OworLSAgICAgICAgfQorLSAgICAgICAgX19weXhfTDU6OworKyAgICBfX1B5 eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhfbl9zX01QVkVycm9yKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzIyLCBfX3B5eF9MMV9lcnJvcikK KysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fcHl4X3RfNCA9IE5VTEw7Cisr ICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF8xKSkpIHsKKysgICAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5 eF90XzEpOworKyAgICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgeworKyAgICAgICAgUHlPYmpl Y3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMSk7CisrICAgICAg ICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlv bik7CisrICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMSwgZnVuY3Rpb24pOworICAg ICAgIH0KKy0gIH0KKysgICAgfQorKyAgICBfX3B5eF90XzIgPSAoX19weXhfdF80KSA/IF9fUHl4 X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzEsIF9fcHl4X3RfNCwgX19weXhfdl92KSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8xLCBfX3B5eF92X3YpOworKyAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgIGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDMyMiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKysgICAgX19QeXhfUmFpc2UoX19weXhfdF8yLCAwLCAwLCAwKTsKKysgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUFlYX0VSUigwLCAz MjIsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMwMAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBuYW1lX2Mg PSBtcHZfZXZlbnRfbmFtZShzZWxmLmlkKQorLSAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobmFt ZV9jKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGNkZWYgX2lu aXQoc2VsZiwgbXB2X2V2ZW50KiBldmVudCwgY3R4KToKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjMyMQorKyAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6CisrICog ICAgICAgICB2ID0gZm4oKmssICoqa3cpCisrICogICAgICAgICBpZiB2IDwgMDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKHYpCisr ICogICAgIHJldHVybiB3cmFwcGVkCisgICovCistICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOwor LSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzMDAsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX3B5eF90XzMgPSBfX1B5eF9Q eUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9uYW1lX2MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MykpIF9fUFlYX0VSUigwLCAzMDAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfMyk7CistICBfX3B5eF90XzQgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICBfX3B5 eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICBpZiAobGlrZWx5KF9f cHl4X3RfNCkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVO Q1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKKy0gICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhf dF8yLCBmdW5jdGlvbik7CistICAgIH0KKyAgIH0KKy0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzQp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF90 XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICBfX1B5eF9ERUNS RUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDMwMCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAg X19weXhfciA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7CistICBnb3RvIF9fcHl4X0ww OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5NQorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOQorICAqIAorLSAqICAgICBAcHJvcGVydHkK Ky0gKiAgICAgZGVmIG5hbWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICIiIm1wdl9ldmVudF9uYW1lIG9mIHRoZSBldmVudCBpZCIiIgorLSAqICAgICAg ICAgY2RlZiBjb25zdCBjaGFyKiBuYW1lX2MKKysgKiBkZWYgX2Vycm9ycyhmbik6CisrICogICAg IGRlZiB3cmFwcGVkKCprLCAqKmt3KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgdiA9IGZuKCprLCAqKmt3KQorKyAqICAgICAgICAgaWYgdiA8IDA6CisgICovCisg CisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5 eF9JTkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOworICAgX19weXhfTDFfZXJyb3I6 OworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzIpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworICAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzQpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQu bmFtZS5fX2dldF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFt ZSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fZXJyb3JzLndy YXBwZWQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKyAg IF9fcHl4X3IgPSBOVUxMOworICAgX19weXhfTDA6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92 X3YpOworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MzAyCistICogICAgICAgICByZXR1cm4gX3N0cmRlYyhuYW1lX2Mp CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOAorICAqIAorLSAqICAgICBj ZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudCogZXZlbnQsIGN0eCk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+ aWQoY3R4KQorLSAqICAgICAgICAgc2VsZi5pZCA9IGV2ZW50LmV2ZW50X2lkCisrICogCisrICog ZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGRl ZiB3cmFwcGVkKCprLCAqKmt3KToKKysgKiAgICAgICAgIHYgPSBmbigqaywgKiprdykKKyAgKi8K KyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19w eXhfdl9zZWxmLCBzdHJ1Y3QgbXB2X2V2ZW50ICpfX3B5eF92X2V2ZW50LCBQeU9iamVjdCAqX19w eXhfdl9jdHgpIHsKKy0gIHVpbnQ2NF90IF9fcHl4X3ZfY3R4aWQ7CistICBQeU9iamVjdCAqX19w eXhfdl91c2VyZGF0YSA9IE5VTEw7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfNF9lcnJvcnMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfZm4pIHsKKysgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqX19weXhfY3VyX3Njb3Bl OworKyAgUHlPYmplY3QgKl9fcHl4X3Zfd3JhcHBlZCA9IDA7CisgICBQeU9iamVjdCAqX19weXhf ciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9f cHl4X3RfMSA9IE5VTEw7CistICB1aW50NjRfdCBfX3B5eF90XzI7CistICBlbnVtIG1wdl9ldmVu dF9pZCBfX3B5eF90XzM7CistICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF90XzUgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7Cist ICBpbnQgX19weXhfdF83OworLSAgUHlPYmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7CistICBpbnQg X19weXhfdF85OworLSAgaW50IF9fcHl4X3RfMTA7CistICBpbnQgX19weXhfdF8xMTsKKyAgIGlu dCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxM OworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9pbml0IiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2Vycm9ycyIs IDApOworKyAgX19weXhfY3VyX3Njb3BlID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqKV9fcHl4X3RwX25ld185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzKF9fcHl4X3B0eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMsIF9fcHl4 X2VtcHR5X3R1cGxlLCBOVUxMKTsKKysgIGlmICh1bmxpa2VseSghX19weXhfY3VyX3Njb3BlKSkg eworKyAgICBfX3B5eF9jdXJfc2NvcGUgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqKVB5X05vbmUpOworKyAgICBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICAgIF9fUFlYX0VSUigwLCAzMTgsIF9fcHl4X0wxX2Vy cm9yKQorKyAgfSBlbHNlIHsKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X2N1cl9zY29wZSk7Cisr ICB9CisrICBfX3B5eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4gPSBfX3B5eF92X2ZuOworKyAgX19Q eXhfSU5DUkVGKF9fcHl4X2N1cl9zY29wZS0+X19weXhfdl9mbik7CisrICBfX1B5eF9HSVZFUkVG KF9fcHl4X2N1cl9zY29wZS0+X19weXhfdl9mbik7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzAzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzE5CisgICogCistICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50KiBldmVudCwgY3R4 KToKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoY3R4KSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmlkID0gZXZlbnQu ZXZlbnRfaWQKKy0gKiAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuX2RhdGEoZXZlbnQpCisrICog ZGVmIF9lcnJvcnMoZm4pOgorKyAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHYgPSBmbigqaywgKiprdykKKysgKiAg ICAgICAgIGlmIHYgPCAwOgorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF9idWlsdGluX2lkLCBfX3B5eF92X2N0eCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwMywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEg PSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N19lcnJvcnNfMXdyYXBwZWQsIDAsIF9fcHl4X25fc19lcnJvcnNfbG9jYWxzX3dyYXBwZWQsICgo UHlPYmplY3QqKV9fcHl4X2N1cl9zY29wZSksIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYs IF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18yKSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMxOSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0FzX3VpbnQ2NF90 KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09ICgodWludDY0X3QpLTEpKSAm JiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDMwMywgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3ZfY3R4 aWQgPSAoKHVpbnQ2NF90KV9fcHl4X3RfMik7CisrICBfX3B5eF92X3dyYXBwZWQgPSBfX3B5eF90 XzE7CisrICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjMwNAorLSAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudCogZXZlbnQsIGN0 eCk6CistICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKGN0eCkK Ky0gKiAgICAgICAgIHNlbGYuaWQgPSBldmVudC5ldmVudF9pZCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLl9kYXRhKGV2ZW50KQorLSAq ICAgICAgICAgdXNlcmRhdGEgPSBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQucmVw bHlfdXNlcmRhdGEsIE5vbmUpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzIzCisrICogICAgICAgICBpZiB2IDwgMDoKKysgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJv cih2KQorKyAqICAgICByZXR1cm4gd3JhcHBlZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogCisrICogCisgICovCistICBfX3B5eF90XzMgPSBfX3B5eF92X2V2ZW50LT5ldmVudF9p ZDsKKy0gIF9fcHl4X3Zfc2VsZi0+aWQgPSBfX3B5eF90XzM7CisrICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfd3JhcHBlZCk7CisrICBfX3B5eF9yID0g X19weXhfdl93cmFwcGVkOworKyAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozMDUKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQg PSA8dWludDY0X3Q+aWQoY3R4KQorLSAqICAgICAgICAgc2VsZi5pZCA9IGV2ZW50LmV2ZW50X2lk CistICogICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLl9kYXRhKGV2ZW50KSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB1c2VyZGF0YSA9IF9yZXBseV91c2VyZGF0YXNb Y3R4aWRdLmdldChldmVudC5yZXBseV91c2VyZGF0YSwgTm9uZSkKKy0gKiAgICAgICAgIGlmIHVz ZXJkYXRhIGlzIG5vdCBOb25lIGFuZCBzZWxmLmlkICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFO R0U6CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE4CisrICogCisrICog CisrICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToKKysgKiAgICAgICAgIHYgPSBmbigqaywgKiprdykK KyAgKi8KKy0gIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRl cl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2RhdGEoX19w eXhfdl9zZWxmLCBfX3B5eF92X2V2ZW50KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgMzA1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zf c2VsZi0+ZGF0YSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKy0gIF9f cHl4X3Zfc2VsZi0+ZGF0YSA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA2CistICogICAgICAgICBzZWxmLmlk ID0gZXZlbnQuZXZlbnRfaWQKKy0gKiAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuX2RhdGEoZXZl bnQpCistICogICAgICAgICB1c2VyZGF0YSA9IF9yZXBseV91c2VyZGF0YXNbY3R4aWRdLmdldChl dmVudC5yZXBseV91c2VyZGF0YSwgTm9uZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VW RU5UX1BST1BFUlRZX0NIQU5HRToKKy0gKiAgICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKQor KyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5s aWJzLm1wdi5fZXJyb3JzIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hERUNS RUYoX19weXhfdl93cmFwcGVkKTsKKysgIF9fUHl4X0RFQ1JFRigoKFB5T2JqZWN0ICopX19weXhf Y3VyX3Njb3BlKSk7CisrICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKysgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworKy8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjkKKysgKiAgICAgY29kZSA9IE5vbmUKKysgKiAK KysgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICBzZWxmLmNvZGUgPSBlCisrICogICAgICAgICBjZGVmIGNvbnN0IGNo YXIqIGVycl9jCisgICovCistICBfX3B5eF90XzQgPSBfX1B5eF9HZXRJdGVtSW50KF9fcHl4X3Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19yZXBseV91c2VyZGF0YXMsIF9fcHl4X3ZfY3R4aWQsIHVp bnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzA2LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cihfX3B5eF90XzQsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NSkpIF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfNSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0g IF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoX19weXhfdl9ldmVudC0+cmVw bHlfdXNlcmRhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzMDYs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBfX3B5eF90 XzYgPSBOVUxMOworLSAgX19weXhfdF83ID0gMDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNSkpKSB7CistICAgIF9fcHl4X3Rf NiA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNSk7CistICAgIGlmIChsaWtlbHkoX19weXhf dF82KSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElP TihfX3B5eF90XzUpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzYpOworLSAgICAgIF9f UHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUs IGZ1bmN0aW9uKTsKKy0gICAgICBfX3B5eF90XzcgPSAxOworLSAgICB9CistICB9CistICAjaWYg Q1lUSE9OX0ZBU1RfUFlDQUxMCistICBpZiAoUHlGdW5jdGlvbl9DaGVjayhfX3B5eF90XzUpKSB7 CistICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNiwgX19weXhfdF80LCBQ eV9Ob25lfTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChfX3B5 eF90XzUsIF9fcHl4X3RlbXArMS1fX3B5eF90XzcsIDIrX19weXhfdF83KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA2LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7 CistICB9IGVsc2UKKy0gICNlbmRpZgorLSAgI2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwKKy0gIGlm IChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2soX19weXhfdF81KSkgeworLSAgICBQeU9iamVj dCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzYsIF9fcHl4X3RfNCwgUHlfTm9uZX07CistICAg IF9fcHl4X3RfMSA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhf dGVtcCsxLV9fcHl4X3RfNywgMitfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIH0gZWxzZQor LSAgI2VuZGlmCisrCisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84TVBWRXJyb3JfMV9faW5pdF9fKFB5T2JqZWN0 ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMp OyAvKnByb3RvKi8KKytzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfOE1QVkVycm9yXzFfX2luaXRfXyA9IHsiX19pbml0X18iLCAoUHlDRnVuY3Rpb24p KHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfOE1QVkVycm9yXzFfX2luaXRfXywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9 OworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZF cnJvcl8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdz LCBQeU9iamVjdCAqX19weXhfa3dkcykgeworKyAgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiA9IDA7 CisrICBQeU9iamVjdCAqX19weXhfdl9lID0gMDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAwOwor KyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworKyAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyAod3JhcHBl cikiLCAwKTsKKyAgIHsKKy0gICAgX19weXhfdF84ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90Xzcp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOCkpIF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4X0wxX2Vy cm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF84KTsKKy0gICAgaWYgKF9fcHl4X3RfNikg eworLSAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF82KTsgUHlUdXBsZV9TRVRfSVRFTShfX3B5 eF90XzgsIDAsIF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IE5VTEw7CisrICAgIHN0YXRpYyBQeU9i amVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3NlbGYsJl9fcHl4X25fc19l LDB9OworKyAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07CisrICAgIGlmICh1bmxpa2Vs eShfX3B5eF9rd2RzKSkgeworKyAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKysgICAgICBjb25z dCBQeV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKysg ICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CisrICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQ eVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOworKyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5 eF9hcmdzLCAwKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2Ug IDA6IGJyZWFrOworKyAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJv cjsKKysgICAgICB9CisrICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOwor KyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBp ZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2Rz LCBfX3B5eF9uX3Nfc2VsZikpICE9IDApKSBrd19hcmdzLS07CisrICAgICAgICBlbHNlIGdvdG8g X19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Cisr ICAgICAgICBjYXNlICAxOgorKyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhf UHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2UpKSAhPSAwKSkga3dfYXJn cy0tOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZh bGlkKCJfX2luaXRfXyIsIDEsIDIsIDIsIDEpOyBfX1BZWF9FUlIoMCwgMzI5LCBfX3B5eF9MM19l cnJvcikKKysgICAgICAgIH0KKysgICAgICB9CisrICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3Mg PiAwKSkgeworKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3Jk cyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAiX19p bml0X18iKSA8IDApKSBfX1BZWF9FUlIoMCwgMzI5LCBfX3B5eF9MM19lcnJvcikKKysgICAgICB9 CisrICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7Cisr ICAgICAgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgfSBlbHNlIHsKKysgICAg ICB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworKyAgICAgIHZh bHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CisgICAgIH0KKy0gICAg X19QeXhfR0lWRVJFRihfX3B5eF90XzQpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3Rf OCwgMCtfX3B5eF90XzcsIF9fcHl4X3RfNCk7CistICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsK Ky0gICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5 eF90XzgsIDErX19weXhfdF83LCBQeV9Ob25lKTsKKy0gICAgX19weXhfdF80ID0gMDsKKy0gICAg X19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzUsIF9fcHl4X3RfOCwgTlVM TCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFf ZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYo X19weXhfdF84KTsgX19weXhfdF84ID0gMDsKKysgICAgX19weXhfdl9zZWxmID0gdmFsdWVzWzBd OworKyAgICBfX3B5eF92X2UgPSB2YWx1ZXNbMV07CisgICB9CistICBfX1B5eF9ERUNSRUYoX19w eXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0gIF9fcHl4X3ZfdXNlcmRhdGEgPSBfX3B5eF90XzE7 CistICBfX3B5eF90XzEgPSAwOworKyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdf ZG9uZTsKKysgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKysgIF9fUHl4X1JhaXNlQXJndHVw bGVJbnZhbGlkKCJfX2luaXRfXyIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cykpOyBfX1BZWF9FUlIoMCwgMzI5LCBfX3B5eF9MM19lcnJvcikKKysgIF9fcHl4X0wzX2Vycm9y OjsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Lk1QVkVycm9yLl9f aW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Cisr ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBOVUxMOworKyAgX19w eXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl84TVBWRXJyb3JfX19pbml0X18oX19weXhfc2VsZiwgX19weXhf dl9zZWxmLCBfX3B5eF92X2UpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMwNworLSAqICAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5fZGF0YShldmVudCkKKy0gKiAg ICAgICAgIHVzZXJkYXRhID0gX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5 X3VzZXJkYXRhLCBOb25lKQorLSAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmUgYW5k IHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCistICogICAgICAg ICAgICAgaWYgbm90IHVzZXJkYXRhLm9ic2VydmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6 CistICovCistICBfX3B5eF90XzEwID0gKF9fcHl4X3ZfdXNlcmRhdGEgIT0gUHlfTm9uZSk7Cist ICBfX3B5eF90XzExID0gKF9fcHl4X3RfMTAgIT0gMCk7CistICBpZiAoX19weXhfdF8xMSkgewor LSAgfSBlbHNlIHsKKy0gICAgX19weXhfdF85ID0gX19weXhfdF8xMTsKKy0gICAgZ290byBfX3B5 eF9MNF9ib29sX2Jpbm9wX2RvbmU7CistICB9CistICBfX3B5eF90XzExID0gKChfX3B5eF92X3Nl bGYtPmlkICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UpICE9IDApOworLSAgX19weXhfdF85 ID0gX19weXhfdF8xMTsKKy0gIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7CistICBpZiAoX19w eXhfdF85KSB7CisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA4CistICogICAgICAgICB1c2VyZGF0YSA9IF9y ZXBseV91c2VyZGF0YXNbY3R4aWRdLmdldChldmVudC5yZXBseV91c2VyZGF0YSwgTm9uZSkKKy0g KiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lIGFuZCBzZWxmLmlkICE9IE1QVl9FVkVO VF9QUk9QRVJUWV9DSEFOR0U6CistICogICAgICAgICAgICAgdXNlcmRhdGEucmVtb3ZlKCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGlmIG5vdCB1c2VyZGF0 YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOgorLSAqICAgICAgICAgICAgICAg ICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRhdGFdCistICov CistICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2Vy ZGF0YSwgX19weXhfbl9zX3JlbW92ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhf RVJSKDAsIDMwOCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUp OworLSAgICBfX3B5eF90XzggPSBOVUxMOworLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzUpKSkgeworLSAgICAgIF9fcHl4X3Rf OCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNSk7CistICAgICAgaWYgKGxpa2VseShfX3B5 eF90XzgpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVO Q1RJT04oX19weXhfdF81KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzgpOworLSAg ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQo X19weXhfdF81LCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4X3RfMSA9 IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzUsIF9fcHl4 X3RfOCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF81KTsKKy0gICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3Rf NSA9IDA7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl9f X2luaXRfXyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9lKSB7CisrICBjaGFyIGNvbnN0ICpfX3B5eF92 X2Vycl9jOworKyAgaW50IF9fcHl4X3ZfZV9pOworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxM OworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIGludCBfX3B5eF90XzE7CisrICBp bnQgX19weXhfdF8yOworKyAgaW50IF9fcHl4X3RfMzsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQg PSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19w eXhfdF82ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOworKyAgaW50IF9f cHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Cisr ICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19pbml0X18iLCAwKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF92X2UpOworIAorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA5CistICogICAgICAgICBpZiB1c2VyZGF0 YSBpcyBub3QgTm9uZSBhbmQgc2VsZi5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgor LSAqICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCistICogICAgICAgICAgICAgaWYgbm90 IHVzZXJkYXRhLm9ic2VydmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0 YXNbY3R4aWRdW2V2ZW50LnJlcGx5X3VzZXJkYXRhXQorLSAqICAgICAgICAgaWYgdXNlcmRhdGEg aXMgbm90IE5vbmU6CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMwCisr ICogCisrICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKToKKysgKiAgICAgICAgIHNlbGYuY29k ZSA9IGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBjb25z dCBjaGFyKiBlcnJfYworKyAqICAgICAgICAgY2RlZiBpbnQgZV9pCisgICovCistICAgIF9fcHl4 X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YSwgX19weXhf bl9zX29ic2VydmVkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA5 LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9f cHl4X3RfMTEgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMTEgPCAwKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCistICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICBfX3B5eF90XzEw ID0gKCghX19weXhfdF8xMSkgIT0gMCk7CistICAgIGlmIChfX3B5eF90XzEwKSB7CistICAgIH0g ZWxzZSB7CistICAgICAgX19weXhfdF85ID0gX19weXhfdF8xMDsKKy0gICAgICBnb3RvIF9fcHl4 X0w3X2Jvb2xfYmlub3BfZG9uZTsKKy0gICAgfQorLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19jb3VudGVyKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA5LCBfX3B5eF9MMV9lcnJvcikK Ky0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4X3RfNSA9IFB5T2JqZWN0 X1JpY2hDb21wYXJlKF9fcHl4X3RfMSwgX19weXhfaW50XzAsIFB5X0xFKTsgX19QeXhfWEdPVFJF RihfX3B5eF90XzUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMDks IF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKKy0gICAgX19weXhfdF8xMCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzUp OyBpZiAodW5saWtlbHkoX19weXhfdF8xMCA8IDApKSBfX1BZWF9FUlIoMCwgMzA5LCBfX3B5eF9M MV9lcnJvcikKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Cist ICAgIF9fcHl4X3RfOSA9IF9fcHl4X3RfMTA7CistICAgIF9fcHl4X0w3X2Jvb2xfYmlub3BfZG9u ZTo7CistICAgIGlmIChfX3B5eF90XzkpIHsKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRy U3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NvZGUsIF9fcHl4X3ZfZSkgPCAwKSBfX1BZWF9F UlIoMCwgMzMwLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzEwCistICogICAgICAgICAgICAgdXNlcmRhdGEucmVtb3ZlKCkKKy0g KiAgICAgICAgICAgICBpZiBub3QgdXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50 ZXIgPD0gMDoKKy0gKiAgICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRd W2V2ZW50LnJlcGx5X3VzZXJkYXRhXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgICAgICB1c2VyZGF0 YSA9IHVzZXJkYXRhLmRhdGEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz MzMKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogZXJyX2MKKysgKiAgICAgICAgIGNkZWYg aW50IGVfaQorKyAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgYmFzZXN0cmluZyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBlX2kgPSBlCisrICog ICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gICAgICBfX3B5eF90XzUgPSBfX1B5eF9H ZXRJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19yZXBseV91c2VyZGF0YXMs IF9fcHl4X3ZfY3R4aWQsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAw LCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMzEwLCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKy0gICAgICBpZiAo dW5saWtlbHkoX19QeXhfRGVsSXRlbUludChfX3B5eF90XzUsIF9fcHl4X3ZfZXZlbnQtPnJlcGx5 X3VzZXJkYXRhLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwg MSkgPCAwKSkgX19QWVhfRVJSKDAsIDMxMCwgX19weXhfTDFfZXJyb3IpCistICAgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICBfX3B5eF90XzEgPSBfX1B5eF9Q eUJhc2VTdHJpbmdfQ2hlY2soX19weXhfdl9lKTsgCisrICBfX3B5eF90XzIgPSAoKCEoX19weXhf dF8xICE9IDApKSAhPSAwKTsKKysgIGlmIChfX3B5eF90XzIpIHsKKyAKKy0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA5CistICogICAgICAgICBpZiB1c2VyZGF0YSBp cyBub3QgTm9uZSBhbmQgc2VsZi5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgorLSAq ICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCistICogICAgICAgICAgICAgaWYgbm90IHVz ZXJkYXRhLm9ic2VydmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNb Y3R4aWRdW2V2ZW50LnJlcGx5X3VzZXJkYXRhXQorLSAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMg bm90IE5vbmU6CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzQKKysg KiAgICAgICAgIGNkZWYgaW50IGVfaQorKyAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwg YmFzZXN0cmluZyk6CisrICogICAgICAgICAgICAgZV9pID0gZSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICAg ICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkKKyAgKi8KKy0gICAgfQorKyAgICBfX3B5 eF90XzMgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl9lKTsgaWYgKHVubGlrZWx5KChfX3B5 eF90XzMgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAzMzQs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF92X2VfaSA9IF9fcHl4X3RfMzsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNworLSAqICAgICAgICAgc2VsZi5k YXRhID0gc2VsZi5fZGF0YShldmVudCkKKy0gKiAgICAgICAgIHVzZXJkYXRhID0gX3JlcGx5X3Vz ZXJkYXRhc1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJkYXRhLCBOb25lKQorLSAqICAgICAg ICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BF UlRZX0NIQU5HRTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg IHVzZXJkYXRhLnJlbW92ZSgpCistICogICAgICAgICAgICAgaWYgbm90IHVzZXJkYXRhLm9ic2Vy dmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozMzUKKysgKiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUsIGJhc2Vz dHJpbmcpOgorKyAqICAgICAgICAgICAgIGVfaSA9IGUKKysgKiAgICAgICAgICAgICB3aXRoIG5v Z2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgIGVy cl9jID0gbXB2X2Vycm9yX3N0cmluZyhlX2kpCisrICogICAgICAgICAgICAgZSA9IF9zdHJkZWMo ZXJyX2MpCisgICovCistICB9CisrICAgIHsKKysgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAor KyAgICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CisrICAgICAgICBQeV9VTkJMT0NLX1RIUkVB RFMKKysgICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKysgICAgICAgICNlbmRpZgor KyAgICAgICAgLyp0cnk6Ki8geworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMxMQorLSAqICAgICAgICAgICAgIGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNl cmRhdGEuY291bnRlciA8PSAwOgorLSAqICAgICAgICAgICAgICAgICBkZWwgX3JlcGx5X3VzZXJk YXRhc1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRhdGFdCistICogICAgICAgICBpZiB1c2VyZGF0 YSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ICAgIHVzZXJkYXRhID0gdXNlcmRhdGEuZGF0YQorLSAqICAgICAgICAgc2VsZi5yZXBseV91c2Vy ZGF0YSA9IHVzZXJkYXRhCisrICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMzYKKysgKiAgICAgICAgICAgICBlX2kgPSBlCisrICogICAgICAgICAgICAgd2l0aCBu b2dpbDoKKysgKiAgICAgICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGUgPSBfc3RyZGVj KGVycl9jKQorKyAqICAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIGUpCisgICovCist ICBfX3B5eF90XzkgPSAoX19weXhfdl91c2VyZGF0YSAhPSBQeV9Ob25lKTsKKy0gIF9fcHl4X3Rf MTAgPSAoX19weXhfdF85ICE9IDApOworLSAgaWYgKF9fcHl4X3RfMTApIHsKKysgICAgICAgICAg X19weXhfdl9lcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmcoX19weXhfdl9lX2kpOworKyAgICAgICAg fQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzEyCistICogICAg ICAgICAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91c2Vy ZGF0YV0KKy0gKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lOgorLSAqICAgICAgICAg ICAgIHVzZXJkYXRhID0gdXNlcmRhdGEuZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gdXNlcmRhdGEKKy0gKiAgICAgICAg IHNlbGYuZXJyb3IgPSBldmVudC5lcnJvcgorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjMzNQorKyAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgYmFzZXN0 cmluZyk6CisrICogICAgICAgICAgICAgZV9pID0gZQorKyAqICAgICAgICAgICAgIHdpdGggbm9n aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgZXJy X2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkKKysgKiAgICAgICAgICAgICBlID0gX3N0cmRlYyhl cnJfYykKKyAgKi8KKy0gICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X3VzZXJkYXRhLCBfX3B5eF9uX3NfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF81 KSkgX19QWVhfRVJSKDAsIDMxMiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzUpOworLSAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4 X3RfNSk7CistICAgIF9fcHl4X3RfNSA9IDA7CisrICAgICAgICAvKmZpbmFsbHk6Ki8geworKyAg ICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAorKyAgICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CisrICAgICAgICAgICAgUHlf QkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICAgIGdvdG8gX19w eXhfTDY7CisrICAgICAgICAgIH0KKysgICAgICAgICAgX19weXhfTDY6OworKyAgICAgICAgfQor KyAgICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTEKKy0g KiAgICAgICAgICAgICBpZiBub3QgdXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50 ZXIgPD0gMDoKKy0gKiAgICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRd W2V2ZW50LnJlcGx5X3VzZXJkYXRhXQorLSAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5v bmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICB1c2VyZGF0 YSA9IHVzZXJkYXRhLmRhdGEKKy0gKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSB1c2Vy ZGF0YQorLSAqLworLSAgfQorLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjMxMworLSAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmU6CistICogICAgICAgICAg ICAgdXNlcmRhdGEgPSB1c2VyZGF0YS5kYXRhCistICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJk YXRhID0gdXNlcmRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg c2VsZi5lcnJvciA9IGV2ZW50LmVycm9yCistICogICAgICAgICByZXR1cm4gc2VsZgorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzM3CisrICogICAgICAgICAgICAgd2l0 aCBub2dpbDoKKysgKiAgICAgICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVf aSkKKysgKiAgICAgICAgICAgICBlID0gX3N0cmRlYyhlcnJfYykgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIGUpCisrICog CisgICovCistICBfX1B5eF9JTkNSRUYoX19weXhfdl91c2VyZGF0YSk7CistICBfX1B5eF9HSVZF UkVGKF9fcHl4X3ZfdXNlcmRhdGEpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+cmVw bHlfdXNlcmRhdGEpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRh dGEpOworLSAgX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSA9IF9fcHl4X3ZfdXNlcmRhdGE7 CisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF81LCBfX3B5eF9uX3Nfc3Ry ZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMzM3LCBfX3B5eF9M MV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CisrICAgIF9fcHl4X3RfNiA9 IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X2Vycl9jKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMzM3LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNik7CisrICAgIF9fcHl4X3RfNyA9IE5VTEw7CisrICAgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkp IHsKKysgICAgICBfX3B5eF90XzcgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzUpOworKyAg ICAgIGlmIChsaWtlbHkoX19weXhfdF83KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9u ID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNSk7CisrICAgICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF83KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAg ICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNSwgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAg fQorKyAgICBfX3B5eF90XzQgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJn cyhfX3B5eF90XzUsIF9fcHl4X3RfNywgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxP bmVBcmcoX19weXhfdF81LCBfX3B5eF90XzYpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Nyk7IF9fcHl4X3RfNyA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzMzcs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRl9T RVQoX19weXhfdl9lLCBfX3B5eF90XzQpOworKyAgICBfX3B5eF90XzQgPSAwOworIAorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxNAorLSAqICAgICAgICAgICAgIHVzZXJk YXRhID0gdXNlcmRhdGEuZGF0YQorLSAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IHVz ZXJkYXRhCistICogICAgICAgICBzZWxmLmVycm9yID0gZXZlbnQuZXJyb3IgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIHNlbGYKKy0gKiAKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzMworKyAqICAgICAgICAgY2RlZiBjb25z dCBjaGFyKiBlcnJfYworKyAqICAgICAgICAgY2RlZiBpbnQgZV9pCisrICogICAgICAgICBpZiBu b3QgaXNpbnN0YW5jZShlLCBiYXNlc3RyaW5nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgICAgIGVfaSA9IGUKKysgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgor ICAqLworLSAgX19weXhfdF83ID0gX19weXhfdl9ldmVudC0+ZXJyb3I7CistICBfX3B5eF92X3Nl bGYtPmVycm9yID0gX19weXhfdF83OworKyAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjMxNQorLSAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IHVzZXJk YXRhCistICogICAgICAgICBzZWxmLmVycm9yID0gZXZlbnQuZXJyb3IKKy0gKiAgICAgICAgIHJl dHVybiBzZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzgKKysgKiAgICAgICAgICAgICAgICAgZXJyX2Mg PSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkKKysgKiAgICAgICAgICAgICBlID0gX3N0cmRlYyhlcnJf YykKKysgKiAgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBlKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisgICogCisrICogY2xhc3MgUHlNUFZFcnJvcihFeGNlcHRpb24pOgor ICAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4X0lOQ1JFRigoKFB5T2Jq ZWN0ICopX19weXhfdl9zZWxmKSk7CistICBfX3B5eF9yID0gKChQeU9iamVjdCAqKV9fcHl4X3Zf c2VsZik7CistICBnb3RvIF9fcHl4X0wwOworKyAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3Rf R2V0QXR0clN0cigoKFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0aW9u KVswXSkpLCBfX3B5eF9uX3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhf RVJSKDAsIDMzOCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsK KysgIF9fcHl4X3RfNiA9IE5VTEw7CisrICBfX3B5eF90XzMgPSAwOworKyAgaWYgKENZVEhPTl9V TlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsKKysg ICAgX19weXhfdF82ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF81KTsKKysgICAgaWYgKGxp a2VseShfX3B5eF90XzYpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2Rf R0VUX0ZVTkNUSU9OKF9fcHl4X3RfNSk7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNik7 CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VU KF9fcHl4X3RfNSwgZnVuY3Rpb24pOworKyAgICAgIF9fcHl4X3RfMyA9IDE7CisrICAgIH0KKysg IH0KKysgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKysgIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9f cHl4X3RfNSkpIHsKKysgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF82LCBf X3B5eF92X3NlbGYsIF9fcHl4X3ZfZX07CisrICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5RnVuY3Rp b25fRmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAyK19fcHl4X3Rf Myk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICB9IGVsc2UKKysgICNlbmRpZgorKyAgI2lm IENZVEhPTl9GQVNUX1BZQ0NBTEwKKysgIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2so X19weXhfdF81KSkgeworKyAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzYs IF9fcHl4X3Zfc2VsZiwgX19weXhfdl9lfTsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlDRnVu Y3Rpb25fRmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAyK19fcHl4 X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhf TDFfZXJyb3IpCisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsK KysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICB9IGVsc2UKKysgICNlbmRpZgorKyAg eworKyAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfMyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgICBpZiAoX19weXhfdF82KSB7CisrICAgICAgX19Q eXhfR0lWRVJFRihfX3B5eF90XzYpOyBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMCwgX19w eXhfdF82KTsgX19weXhfdF82ID0gTlVMTDsKKysgICAgfQorKyAgICBfX1B5eF9JTkNSRUYoX19w eXhfdl9zZWxmKTsKKysgICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYpOworKyAgICBQeVR1 cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMCtfX3B5eF90XzMsIF9fcHl4X3Zfc2VsZik7CisrICAg IF9fUHl4X0lOQ1JFRihfX3B5eF92X2UpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3ZfZSk7 CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfMywgX19weXhfdl9l KTsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzUsIF9fcHl4 X3RfNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOCwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgIH0KKysgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7 IF9fcHl4X3RfNCA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzAyCistICogICAgICAgICByZXR1cm4gX3N0cmRlYyhuYW1lX2MpCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzI5CisrICogICAgIGNvZGUgPSBOb25lCisgICogCistICog ICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50KiBldmVudCwgY3R4KTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50 NjRfdD5pZChjdHgpCistICogICAgICAgICBzZWxmLmlkID0gZXZlbnQuZXZlbnRfaWQKKysgKiAg ICAgZGVmIF9faW5pdF9fKHNlbGYsIGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICBzZWxmLmNvZGUgPSBlCisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVy cl9jCisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3IgPSBQ eV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOworICAgX19w eXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzQpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzYpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOworLSAgX19Q eXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuRXZlbnQuX2luaXQiLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAwOwor KyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuTVBWRXJyb3IuX19pbml0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworICAgX19weXhfTDA6 OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X3VzZXJkYXRhKTsKKysgIF9fUHl4X1hERUNSRUYo X19weXhfdl9lKTsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1OAorLSAqIGNkZWYgY2xhc3MgRXZlbnQob2JqZWN0 KToKKy0gKiAgICAgIiIiV3JhcHM6IG1wdl9ldmVudCIiIgorLSAqICAgICBjZGVmIHB1YmxpYyBt cHZfZXZlbnRfaWQgaWQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBjZGVm IHB1YmxpYyBpbnQgZXJyb3IKKy0gKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IGRhdGEsIHJlcGx5 X3VzZXJkYXRhCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NworKyAqIAor KyAqIGNsYXNzIF9SZXBseVVzZXJEYXRhKG9iamVjdCk6CisrICogICAgIGRlZiBfX2luaXRfXyhz ZWxmLCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2Vs Zi5jb3VudGVyID0gMAorKyAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAqLworIAorIC8q IFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsg Lypwcm90byovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50XzJpZF8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Cisrc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0 YV8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQ eU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLworK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5 eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzFfX2luaXRfXyA9 IHsiX19pbml0X18iLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3Jk cylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV8xX19pbml0 X18sIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfTsKKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzFfX2luaXRfXyhQ eU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5 eF9rd2RzKSB7CisrICBQeU9iamVjdCAqX19weXhfdl9zZWxmID0gMDsKKysgIFB5T2JqZWN0ICpf X3B5eF92X2RhdGEgPSAwOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFy ICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBQ eU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIpIiwgMCk7CistICBf X3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8yaWRfX19nZXRf XygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhf dl9zZWxmKSk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18gKHdyYXBw ZXIpIiwgMCk7CisrICB7CisrICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNb XSA9IHsmX19weXhfbl9zX3NlbGYsJl9fcHl4X25fc19kYXRhLDB9OworKyAgICBQeU9iamVjdCog dmFsdWVzWzJdID0gezAsMH07CisrICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworKyAg ICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKysgICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdz ID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKysgICAgICBzd2l0Y2ggKHBvc19hcmdz KSB7CisrICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4 X2FyZ3MsIDEpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAg MTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKysgICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDA6IGJyZWFrOworKyAgICAgICAg ZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgICB9CisrICAgICAg a3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworKyAgICAgIHN3aXRjaCAocG9zX2Fy Z3MpIHsKKysgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0g PSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nfc2VsZikpICE9 IDApKSBrd19hcmdzLS07CisrICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJy b3I7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAxOgorKyAg ICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19w eXhfa3dkcywgX19weXhfbl9zX2RhdGEpKSAhPSAwKSkga3dfYXJncy0tOworKyAgICAgICAgZWxz ZSB7CisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDEs IDIsIDIsIDEpOyBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgIH0K KysgICAgICB9CisrICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworKyAgICAgICAg aWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5 eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAiX19pbml0X18iKSA8IDApKSBfX1BZ WF9FUlIoMCwgMzQ3LCBfX3B5eF9MM19lcnJvcikKKysgICAgICB9CisrICAgIH0gZWxzZSBpZiAo UHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7CisrICAgICAgZ290byBfX3B5eF9M NV9hcmd0dXBsZV9lcnJvcjsKKysgICAgfSBlbHNlIHsKKysgICAgICB2YWx1ZXNbMF0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworKyAgICAgIHZhbHVlc1sxXSA9IFB5VHVwbGVf R0VUX0lURU0oX19weXhfYXJncywgMSk7CisrICAgIH0KKysgICAgX19weXhfdl9zZWxmID0gdmFs dWVzWzBdOworKyAgICBfX3B5eF92X2RhdGEgPSB2YWx1ZXNbMV07CisrICB9CisrICBnb3RvIF9f cHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworKyAgX19weXhfTDVfYXJndHVwbGVfZXJy b3I6OworKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMSwgMiwgMiwg UHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wz X2Vycm9yKQorKyAgX19weXhfTDNfZXJyb3I6OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuX1JlcGx5VXNlckRhdGEuX19pbml0X18iLCBfX3B5eF9jbGluZW5vLCBf X3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOworKyAgcmV0dXJuIE5VTEw7CisrICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdf ZG9uZTo7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1Jl cGx5VXNlckRhdGFfX19pbml0X18oX19weXhfc2VsZiwgX19weXhfdl9zZWxmLCBfX3B5eF92X2Rh dGEpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMmlkX19fZ2V0X18oc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikg eworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1Jl cGx5VXNlckRhdGFfX19pbml0X18oQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSkgeworICAgUHlP YmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0g IFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisg ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworLSAg X19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2V2ZW50X2lkKF9fcHl4X3Zfc2VsZi0+aWQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAyNTgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7CistICBfX3B5eF9yID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsK Ky0gIGdvdG8gX19weXhfTDA7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9f cHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0Fk ZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50LmlkLl9fZ2V0X18iLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxM OworLSAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysgIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyIsIDApOworIAorLS8qIFB5dGhvbiB3cmFw cGVyICovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 XzJpZF8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92 YWx1ZSk7IC8qcHJvdG8qLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF8yaWRfM19fc2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfdmFsdWUpIHsKKy0gIGludCBfX3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldF9fICh3cmFwcGVy KSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfMmlkXzJfX3NldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RXZlbnQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92YWx1ZSkpOworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0OAorKyAqIGNsYXNzIF9SZXBseVVz ZXJEYXRhKG9iamVjdCk6CisrICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKKysgKiAg ICAgICAgIHNlbGYuY291bnRlciA9IDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorKyAqICAgICAgICAgc2VsZi5vYnNlcnZlZCA9IEZh bHNlCisrICovCisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYs IF9fcHl4X25fc19jb3VudGVyLCBfX3B5eF9pbnRfMCkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ4LCBf X3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhf UmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ5CisrICogICAgIGRlZiBfX2luaXRfXyhz ZWxmLCBkYXRhKToKKysgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKysgKiAgICAgICAgIHNl bGYuZGF0YSA9IGRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg c2VsZi5vYnNlcnZlZCA9IEZhbHNlCisrICogCisrICovCisrICBpZiAoX19QeXhfUHlPYmplY3Rf U2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19kYXRhLCBfX3B5eF92X2RhdGEpIDwg MCkgX19QWVhfRVJSKDAsIDM0OSwgX19weXhfTDFfZXJyb3IpCisgCistc3RhdGljIGludCBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8yX19zZXRfXyhzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfdl92YWx1ZSkgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucworLSAgZW51bSBtcHZfZXZlbnRfaWQgX19weXhfdF8xOworLSAgaW50IF9fcHl4 X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBp bnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19z ZXRfXyIsIDApOworLSAgX19weXhfdF8xID0gKChlbnVtIG1wdl9ldmVudF9pZClfX1B5eF9QeUlu dF9Bc19lbnVtX19tcHZfZXZlbnRfaWQoX19weXhfdl92YWx1ZSkpOyBpZiAodW5saWtlbHkoUHlF cnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAyNTgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19w eXhfdl9zZWxmLT5pZCA9IF9fcHl4X3RfMTsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNTAKKysgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKysgKiAgICAgICAgIHNl bGYuZGF0YSA9IGRhdGEKKysgKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiBhZGQoc2VsZik6CisrICov CisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25f c19vYnNlcnZlZCwgUHlfRmFsc2UpIDwgMCkgX19QWVhfRVJSKDAsIDM1MCwgX19weXhfTDFfZXJy b3IpCisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ3CisrICogCisr ICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KToKKysgKiAgICAgZGVmIF9faW5pdF9fKHNl bGYsIGRhdGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxm LmNvdW50ZXIgPSAwCisrICogICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisrICovCisgCisgICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSAwOworKyAgX19weXhfciA9IFB5 X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKyAgIGdvdG8gX19weXhfTDA7CisgICBfX3B5 eF9MMV9lcnJvcjo7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5F dmVudC5pZC5fX3NldF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7CistICBfX3B5eF9yID0gLTE7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRl ci5saWJzLm1wdi5fUmVwbHlVc2VyRGF0YS5fX2luaXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9M MDo7CisrICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoyNTkKKy0gKiAgICAgIiIiV3JhcHM6IG1wdl9ldmVudCIiIgorLSAq ICAgICBjZGVmIHB1YmxpYyBtcHZfZXZlbnRfaWQgaWQKKy0gKiAgICAgY2RlZiBwdWJsaWMgaW50 IGVycm9yICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgY2RlZiBwdWJsaWMg b2JqZWN0IGRhdGEsIHJlcGx5X3VzZXJkYXRhCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjM1MgorKyAqICAgICAgICAgc2VsZi5vYnNlcnZlZCA9IEZhbHNlCisrICogCisrICog ICAgIGRlZiBhZGQoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgIHNlbGYuY291bnRlciArPSAxCisgICogCisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIg Ki8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfNWVycm9yXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVy cm9yXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzNhZGQoUHlP YmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKytz dGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVw bHlVc2VyRGF0YV8zYWRkID0geyJhZGQiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfM2FkZCwgTUVUSF9PLCAwfTsKKytzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRh XzNhZGQoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKyAg IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKKy0g IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzVlcnJvcl9f X2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilf X3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJhZGQgKHdyYXBw ZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0 X1JlcGx5VXNlckRhdGFfMmFkZChfX3B5eF9zZWxmLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxm KSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF81ZXJyb3JfX19nZXRfXyhz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdl9zZWxm KSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRf UmVwbHlVc2VyRGF0YV8yYWRkKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAg IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVM TDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9 IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhf Y2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDAp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50 X0Zyb21faW50KF9fcHl4X3Zfc2VsZi0+ZXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAyNTksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoImFkZCIsIDApOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjM1MworKyAqIAorKyAqICAgICBkZWYgYWRkKHNlbGYpOgorKyAqICAgICAgICAgc2VsZi5j b3VudGVyICs9IDEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAqICAgICBk ZWYgcmVtb3ZlKHNlbGYpOgorKyAqLworKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzUzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworLSAgX19weXhfciA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9 IDA7CistICBnb3RvIF9fcHl4X0wwOworKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfQWRkT2Jq QyhfX3B5eF90XzEsIF9fcHl4X2ludF8xLCAxLCAxLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgMzUzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Cisr ICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19j b3VudGVyLCBfX3B5eF90XzIpIDwgMCkgX19QWVhfRVJSKDAsIDM1MywgX19weXhfTDFfZXJyb3Ip CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTIKKysgKiAgICAgICAgIHNlbGYub2JzZXJ2 ZWQgPSBGYWxzZQorKyAqIAorKyAqICAgICBkZWYgYWRkKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMQorKyAqIAorKyAqLwor IAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9yID0gUHlfTm9uZTsgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworKyAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wxX2Vycm9y OjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50LmVycm9yLl9fZ2V0X18iLCBfX3B5eF9jbGluZW5vLCBf X3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8y KTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9SZXBseVVzZXJE YXRhLmFkZCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwor ICAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKK0BAIC03MzI4LDExODEgKzc5MzEsMTI1MyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVycm9yX19fZ2V0X18oc3RydWN0IF9f cAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNTUKKysgKiAgICAgICAgIHNlbGYuY291bnRlciArPSAxCisrICogCisrICogICAg IGRlZiByZW1vdmUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgIHNlbGYuY291bnRlciAtPSAxCisrICogCisrICovCisrCisgLyogUHl0aG9uIHdyYXBwZXIg Ki8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVy cm9yXzNfX3NldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Zh bHVlKTsgLypwcm90byovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50XzVlcnJvcl8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfdl92YWx1ZSkgeworLSAgaW50IF9fcHl4X3I7Cisrc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV81cmVtb3ZlKFB5 T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCisr c3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1Jl cGx5VXNlckRhdGFfNXJlbW92ZSA9IHsicmVtb3ZlIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzVyZW1vdmUsIE1FVEhfTywgMH07 Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVw bHlVc2VyRGF0YV81cmVtb3ZlKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhf dl9zZWxmKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0X18gKHdyYXBw ZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF81ZXJyb3JfMl9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVlKSk7 CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgicmVtb3ZlICh3cmFwcGVyKSIsIDApOwor KyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJE YXRhXzRyZW1vdmUoX19weXhfc2VsZiwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOworIAor ICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRl eHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgaW50IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNWVycm9yXzJfX3NldF9fKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X3ZhbHVlKSB7CistICBpbnQgX19weXhfcjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzRyZW1vdmUoQ1lUSE9O X1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewor KyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlv bnMKKy0gIGludCBfX3B5eF90XzE7CisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysg IFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisg ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOworLSAg X19weXhfdF8xID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfMSA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJS KDAsIDI1OSwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF92X3NlbGYtPmVycm9yID0gX19weXhf dF8xOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJlbW92ZSIsIDApOworKworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NgorKyAqIAorKyAqICAgICBkZWYg cmVtb3ZlKHNlbGYpOgorKyAqICAgICAgICAgc2VsZi5jb3VudGVyIC09IDEgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAqIAorKyAqLworKyAgX19weXhfdF8xID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzU2LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRf U3VidHJhY3RPYmpDKF9fcHl4X3RfMSwgX19weXhfaW50XzEsIDEsIDEsIDApOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzNTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwg X19weXhfbl9zX2NvdW50ZXIsIF9fcHl4X3RfMikgPCAwKSBfX1BZWF9FUlIoMCwgMzU2LCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor KworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQorKyAqICAgICAgICAg c2VsZi5jb3VudGVyICs9IDEKKysgKiAKKysgKiAgICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5jb3VudGVyIC09IDEKKysg KiAKKysgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IDA7 CisrICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworICAgZ290byBf X3B5eF9MMDsKKyAgIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkV2ZW50LmVycm9yLl9fc2V0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAtMTsKKysgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9SZXBseVVzZXJEYXRhLnJlbW92ZSIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhf ciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CisrICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAg IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQor IAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNjAKKy0gKiAgICAgY2RlZiBw dWJsaWMgbXB2X2V2ZW50X2lkIGlkCistICogICAgIGNkZWYgcHVibGljIGludCBlcnJvcgorLSAq ICAgICBjZGVmIHB1YmxpYyBvYmplY3QgZGF0YSwgcmVwbHlfdXNlcmRhdGEgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNzAK KyAgKiAKKyAgKiAgICAgQHByb3BlcnR5CisrICogICAgIGRlZiBhcGlfdmVyc2lvbihzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmV0dXJuIF9DQVBJX01J Tk9SLCBfQ0FQSV9NQUpPUiwgX0NBUElfVkVSU0lPTgorKyAqIAorICAqLworIAorIC8qIFB5dGhv biB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50XzRkYXRhXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnBy b3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 RXZlbnRfNGRhdGFfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExYXBpX3Zl cnNpb25fMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworK3N0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExYXBp X3ZlcnNpb25fMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworICAgUHlPYmplY3Qg Kl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9 IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfX19nZXRfXygoKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxm KSk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzExYXBpX3ZlcnNpb25fX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50XzRkYXRhX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExYXBpX3ZlcnNpb25fX19nZXRfXyhD WVRIT05fVU5VU0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKl9fcHl4X3Zfc2VsZikgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwor KyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8zID0g TlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAgaW50IF9fcHl4X2xpbmVu byA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIs IDApOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3MQorKyAqICAg ICBAcHJvcGVydHkKKysgKiAgICAgZGVmIGFwaV92ZXJzaW9uKHNlbGYpOgorKyAqICAgICAgICAg cmV0dXJuIF9DQVBJX01JTk9SLCBfQ0FQSV9NQUpPUiwgX0NBUElfVkVSU0lPTiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIEBwcm9wZXJ0eQorKyAqLworICAgX19Q eXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3NlbGYtPmRhdGEp OworLSAgX19weXhfciA9IF9fcHl4X3Zfc2VsZi0+ZGF0YTsKKysgIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDM3MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8y LCBfX3B5eF9uX3NfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDAsIDM3MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK KysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZyhfX3B5eF92Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fQ0FQSV9WRVJTSU9OKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMCwgMzcxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOworKyAgX19weXhfdF80ID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSgh X19weXhfdF80KSkgX19QWVhfRVJSKDAsIDM3MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9H T1RSRUYoX19weXhfdF80KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKysgIFB5VHVw bGVfU0VUX0lURU0oX19weXhfdF80LCAwLCBfX3B5eF90XzEpOworKyAgX19QeXhfR0lWRVJFRihf X3B5eF90XzIpOworKyAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDEsIF9fcHl4X3RfMik7 CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMyk7CisrICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfNCwgMiwgX19weXhfdF8zKTsKKysgIF9fcHl4X3RfMSA9IDA7CisrICBfX3B5eF90XzIgPSAw OworKyAgX19weXhfdF8zID0gMDsKKysgIF9fcHl4X3IgPSBfX3B5eF90XzQ7CisrICBfX3B5eF90 XzQgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozNzAKKysgKiAKKysgKiAgICAgQHByb3BlcnR5CisrICogICAgIGRlZiBhcGlf dmVyc2lvbihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg cmV0dXJuIF9DQVBJX01JTk9SLCBfQ0FQSV9NQUpPUiwgX0NBUElfVkVSU0lPTgorKyAqIAorKyAq LworKworICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7Cisr ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7 CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf NCk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmFw aV92ZXJzaW9uLl9fZ2V0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2Zp bGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworICAgX19weXhfTDA6OworICAgX19QeXhfWEdJ VkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJl dHVybiBfX3B5eF9yOworIH0KKyAKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Mzc0CisrICogCisrICogICAgIEBwcm9wZXJ0eQorKyAqICAgICBkZWYgbmFtZShzZWxmKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIiVW5pcXVlIG5hbWUgZm9y IGV2ZXJ5IGNvbnRleHQgY3JlYXRlZC4KKysgKiAKKysgKi8KKysKKyAvKiBQeXRob24gd3JhcHBl ciAqLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80 ZGF0YV8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92 YWx1ZSk7IC8qcHJvdG8qLworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF80ZGF0YV8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfdl92YWx1ZSkgeworLSAgaW50IF9fcHl4X3I7Cisrc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNG5hbWVfMV9fZ2V0X18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lXzFfX2dldF9fKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRf XyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50XzRkYXRhXzJfX3NldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl92 YWx1ZSkpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18gKHdyYXBwZXIp IiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzRuYW1lX19fZ2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7 CisgfQorIAorLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF80ZGF0YV8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSkgeworLSAgaW50IF9f cHl4X3I7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfNG5hbWVfX19nZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKysgIGNoYXIgY29uc3QgKl9fcHl4X3ZfbmFt ZTsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFy YXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOworLSAg X19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWUpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X3Zh bHVlKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmRhdGEpOworLSAgX19QeXhfREVD UkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CistICBfX3B5eF92X3NlbGYtPmRhdGEgPSBfX3B5eF92 X3ZhbHVlOworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gMDsK Ky0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7Cist fQorLQorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfNGRhdGFfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgaW50 IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fZGVsX18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80ZGF0YV80X19kZWxfXygoKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxmKSk7 CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAgUHlPYmplY3QgKl9fcHl4X3Rf MSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKysgIFB5T2JqZWN0ICpf X3B5eF90XzMgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CisrICBpbnQg X19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsK KysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJfX2dldF9fIiwgMCk7CisgCistc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50XzRkYXRhXzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYpIHsKKy0gIGludCBfX3B5eF9yOworLSAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X2RlbF9fIiwgMCk7CistICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBfX1B5eF9HSVZFUkVG KFB5X05vbmUpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7CistICBfX1B5 eF9ERUNSRUYoX19weXhfdl9zZWxmLT5kYXRhKTsKKy0gIF9fcHl4X3Zfc2VsZi0+ZGF0YSA9IFB5 X05vbmU7CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzgwCisrICogICAg ICAgICAiIiIKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZQorKyAqICAgICAgICAg YXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIG5hbWUgPSBtcHZfY2xpZW50X25hbWUoc2Vs Zi5fY3R4KQorKyAqLworKyAgI2lmbmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCisrICBp ZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKysgICAgaWYgKHVubGlrZWx5KCEoX19w eXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworKyAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNz ZXJ0aW9uRXJyb3IpOworKyAgICAgIF9fUFlYX0VSUigwLCAzODAsIF9fcHl4X0wxX2Vycm9yKQor KyAgICB9CisrICB9CisrICAjZW5kaWYKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor LSAgX19weXhfciA9IDA7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJl dHVybiBfX3B5eF9yOworLX0KKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz ODEKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZQorKyAqICAgICAgICAgYXNzZXJ0 IHNlbGYuX2N0eAorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgICAgIG5hbWUgPSBtcHZfY2xpZW50X25hbWUoc2VsZi5fY3R4 KQorKyAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobmFtZSkKKysgKi8KKysgIHsKKysgICAgICAj aWZkZWYgV0lUSF9USFJFQUQKKysgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICBQ eV9VTkJMT0NLX1RIUkVBRFMKKysgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CisrICAg ICAgI2VuZGlmCisrICAgICAgLyp0cnk6Ki8geworIAorLS8qIFB5dGhvbiB3cmFwcGVyICovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0 cmVwbHlfdXNlcmRhdGFfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8q LworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF8xNHJlcGx5X3VzZXJkYXRhXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKy0g IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlcikiLCAwKTsKKy0g IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlf dXNlcmRhdGFfX19nZXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50ICopX19weXhfdl9zZWxmKSk7CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MzgyCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICogICAgICAg ICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIG5hbWUgPSBtcHZfY2xpZW50X25hbWUoc2Vs Zi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4g X3N0cmRlYyhuYW1lKQorKyAqIAorKyAqLworKyAgICAgICAgX19weXhfdl9uYW1lID0gbXB2X2Ns aWVudF9uYW1lKF9fcHl4X3Zfc2VsZi0+X2N0eCk7CisrICAgICAgfQorIAorLSAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJl dHVybiBfX3B5eF9yOworLX0KKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzgxCisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIG5hbWUKKysgKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBuYW1lID0gbXB2X2NsaWVudF9uYW1lKHNlbGYu X2N0eCkKKysgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5hbWUpCisrICovCisrICAgICAgLypm aW5hbGx5OiovIHsKKysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CisrICAgICAgICAgICNpZmRl ZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAg ICAgICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICBnb3Rv IF9fcHl4X0w1OworKyAgICAgICAgfQorKyAgICAgICAgX19weXhfTDU6OworKyAgICAgIH0KKysg IH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 RXZlbnRfMTRyZXBseV91c2VyZGF0YV9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9y ID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM4MworKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBu YW1lID0gbXB2X2NsaWVudF9uYW1lKHNlbGYuX2N0eCkKKysgKiAgICAgICAgIHJldHVybiBfc3Ry ZGVjKG5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgQHBy b3BlcnR5CisrICovCisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19QeXhfSU5DUkVG KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworLSAgX19weXhfciA9IF9fcHl4X3Zfc2Vs Zi0+cmVwbHlfdXNlcmRhdGE7CisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf MiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDM4MywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysg IF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X25hbWUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAzODMsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICBfX3B5eF90XzQgPSBOVUxMOworKyAgaWYg KENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90 XzIpKSkgeworKyAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwor KyAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24g PSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYo X19weXhfdF80KTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4 X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgIH0KKysgIH0KKysgIF9fcHl4 X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwg X19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90 XzIsIF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9 IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDM4MywgX19weXhfTDFfZXJyb3IpCisr ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworKyAgX19weXhfciA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7 CisgICBnb3RvIF9fcHl4X0wwOworIAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjM3NAorKyAqIAorKyAqICAgICBAcHJvcGVydHkKKysgKiAgICAgZGVmIG5hbWUoc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIlVuaXF1ZSBuYW1l IGZvciBldmVyeSBjb250ZXh0IGNyZWF0ZWQuCisrICogCisrICovCisrCisgICAvKiBmdW5jdGlv biBleGl0IGNvZGUgKi8KKysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19w eXhfdF8xKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYo X19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKysgIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQubmFtZS5fX2dldF9fIiwgX19weXhf Y2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVM TDsKKyAgIF9fcHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhf UmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyog UHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV8zX19zZXRfXyhQeU9iamVjdCAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfdl92YWx1ZSk7IC8qcHJvdG8qLworLXN0YXRpYyBpbnQgX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzNfX3Nl dF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7Cist ICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlfdXNlcmRhdGFf Ml9fc2V0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAq KV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3ZhbHVlKSk7CistCistICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwor LSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzJfX3NldF9fKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X3ZhbHVlKSB7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4X1JlZk5hbm55RGVj bGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOwor LSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfdmFsdWUpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF92 X3ZhbHVlKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKKy0gIF9fcHl4 X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBfX3B5eF92X3ZhbHVlOworLQorLSAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLS8qIFB5dGhvbiB3cmFwcGVy ICovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0 cmVwbHlfdXNlcmRhdGFfNV9fZGVsX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8q LworLXN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJl cGx5X3VzZXJkYXRhXzVfX2RlbF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKy0gIGludCBf X3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX2RlbF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV80X19kZWxf XygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhf dl9zZWxmKSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBp bnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRh XzRfX2RlbF9fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpf X3B5eF92X3NlbGYpIHsKKy0gIGludCBfX3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlbF9fIiwgMCk7CistICBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOworLSAgX19Q eXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworLSAgX19QeXhfREVDUkVG KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworLSAgX19weXhfdl9zZWxmLT5yZXBseV91 c2VyZGF0YSA9IFB5X05vbmU7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9f cHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4g X19weXhfcjsKKy19CistCistLyogIih0cmVlIGZyYWdtZW50KSI6MQorLSAqIGRlZiBfX3JlZHVj ZV9jeXRob25fXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBj ZGVmIHR1cGxlIHN0YXRlCistICogICAgIGNkZWYgb2JqZWN0IF9kaWN0CisrLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjM4NgorKyAqIAorKyAqICAgICBAcHJvcGVydHkKKysgKiAg ICAgZGVmIHRpbWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgICIiIkludGVybmFsIG1wdiBjbGllbnQgdGltZS4KKysgKiAKKyAgKi8KKyAKKyAvKiBQeXRo b24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzVFdmVudF8xX19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwg Q1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCistc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzFfX3JlZHVjZV9jeXRo b25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVz ZWQpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF80dGltZV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byov Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNHRpbWVfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworICAgUHlPYmplY3Qg Kl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKy0g IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19fcmVkdWNl X2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQg KilfX3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9f ICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF80dGltZV9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVy biBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl81RXZlbnRfX19yZWR1Y2VfY3l0aG9uX18oc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9f cHl4X3Zfc3RhdGUgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX2RpY3QgPSAwOworLSAgaW50 IF9fcHl4X3ZfdXNlX3NldHN0YXRlOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1lX19fZ2V0X18oc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKSB7CisrICBpbnQ2NF90 IF9fcHl4X3ZfdGltZTsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIFB5 T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7 CistICBpbnQgX19weXhfdF80OworLSAgaW50IF9fcHl4X3RfNTsKKy0gIGludCBfX3B5eF90XzY7 CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1l ID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjUKKy0g KiAgICAgY2RlZiBvYmplY3QgX2RpY3QKKy0gKiAgICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQor LSAqICAgICBzdGF0ZSA9IChzZWxmLmRhdGEsIHNlbGYuZXJyb3IsIHNlbGYuaWQsIHNlbGYucmVw bHlfdXNlcmRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX2RpY3Qg PSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCistICogICAgIGlmIF9kaWN0IGlzIG5v dCBOb25lOgorLSAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhf dl9zZWxmLT5lcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDUs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX3B5eF90 XzIgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChfX3B5eF92X3NlbGYtPmlk KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IFB5VHVwbGVf TmV3KDQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgX19QeXhfSU5DUkVGKF9f cHl4X3Zfc2VsZi0+ZGF0YSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7 CistICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMCwgX19weXhfdl9zZWxmLT5kYXRhKTsK Ky0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF8zLCAxLCBfX3B5eF90XzEpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzIpOworLSAgUHlU dXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDIsIF9fcHl4X3RfMik7CistICBfX1B5eF9JTkNSRUYo X19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zf c2VsZi0+cmVwbHlfdXNlcmRhdGEpOworLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDMs IF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworLSAgX19weXhfdF8xID0gMDsKKy0gIF9f cHl4X3RfMiA9IDA7CistICBfX3B5eF92X3N0YXRlID0gKChQeU9iamVjdCopX19weXhfdF8zKTsK Ky0gIF9fcHl4X3RfMyA9IDA7CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2CistICogICAg IGNkZWYgYmludCB1c2Vfc2V0c3RhdGUKKy0gKiAgICAgc3RhdGUgPSAoc2VsZi5kYXRhLCBzZWxm LmVycm9yLCBzZWxmLmlkLCBzZWxmLnJlcGx5X3VzZXJkYXRhKQorLSAqICAgICBfZGljdCA9IGdl dGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgIHN0YXRlICs9IChf ZGljdCwpCistICovCistICBfX3B5eF90XzMgPSBfX1B5eF9HZXRBdHRyMygoKFB5T2JqZWN0ICop X19weXhfdl9zZWxmKSwgX19weXhfbl9zX2RpY3QsIFB5X05vbmUpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJF RihfX3B5eF90XzMpOworLSAgX19weXhfdl9fZGljdCA9IF9fcHl4X3RfMzsKKy0gIF9fcHl4X3Rf MyA9IDA7CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3CistICogICAgIHN0YXRlID0gKHNl bGYuZGF0YSwgc2VsZi5lcnJvciwgc2VsZi5pZCwgc2VsZi5yZXBseV91c2VyZGF0YSkKKy0gKiAg ICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCistICogICAgIGlmIF9k aWN0IGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICBzdGF0ZSArPSAoX2RpY3QsKQorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorLSAq LworLSAgX19weXhfdF80ID0gKF9fcHl4X3ZfX2RpY3QgIT0gUHlfTm9uZSk7CistICBfX3B5eF90 XzUgPSAoX19weXhfdF80ICE9IDApOworLSAgaWYgKF9fcHl4X3RfNSkgeworLQorLSAgICAvKiAi KHRyZWUgZnJhZ21lbnQpIjo4CistICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0 X18nLCBOb25lKQorLSAqICAgICBpZiBfZGljdCBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgIHN0 YXRlICs9IChfZGljdCwpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg IHVzZV9zZXRzdGF0ZSA9IFRydWUKKy0gKiAgICAgZWxzZToKKy0gKi8KKy0gICAgX19weXhfdF8z ID0gUHlUdXBsZV9OZXcoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEs IDgsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAg X19QeXhfSU5DUkVGKF9fcHl4X3ZfX2RpY3QpOworLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zf X2RpY3QpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMCwgX19weXhfdl9fZGlj dCk7CistICAgIF9fcHl4X3RfMiA9IFB5TnVtYmVyX0luUGxhY2VBZGQoX19weXhfdl9zdGF0ZSwg X19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgOCwgX19w eXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAgX19QeXhfREVDUkVGX1NFVChf X3B5eF92X3N0YXRlLCAoKFB5T2JqZWN0KilfX3B5eF90XzIpKTsKKy0gICAgX19weXhfdF8yID0g MDsKKy0KKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6OQorLSAqICAgICBpZiBfZGljdCBpcyBu b3QgTm9uZToKKy0gKiAgICAgICAgIHN0YXRlICs9IChfZGljdCwpCistICogICAgICAgICB1c2Vf c2V0c3RhdGUgPSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgZWxz ZToKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9uZSBvciBz ZWxmLnJlcGx5X3VzZXJkYXRhIGlzIG5vdCBOb25lCistICovCistICAgIF9fcHl4X3ZfdXNlX3Nl dHN0YXRlID0gMTsKKy0KKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6NworLSAqICAgICBzdGF0 ZSA9IChzZWxmLmRhdGEsIHNlbGYuZXJyb3IsIHNlbGYuaWQsIHNlbGYucmVwbHlfdXNlcmRhdGEp CistICogICAgIF9kaWN0ID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCBOb25lKQorLSAqICAg ICBpZiBfZGljdCBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRy dWUKKy0gKi8KKy0gICAgZ290byBfX3B5eF9MMzsKKy0gIH0KKy0KKy0gIC8qICIodHJlZSBmcmFn bWVudCkiOjExCistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCistICogICAgIGVsc2U6 CistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBzZWxmLmRhdGEgaXMgbm90IE5vbmUgb3Igc2Vs Zi5yZXBseV91c2VyZGF0YSBpcyBub3QgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgIGlmIHVzZV9zZXRzdGF0ZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBp Y2tsZV9FdmVudCwgKHR5cGUoc2VsZiksIDB4ZGEzOGMyNSwgTm9uZSksIHN0YXRlCisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk0CisrICogICAgICAgICAiIiIKKysgKiAg ICAgICAgIGNkZWYgaW50NjRfdCB0aW1lCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICog ICAgICAgICAgICAgdGltZSA9IG1wdl9nZXRfdGltZV91cyhzZWxmLl9jdHgpCisgICovCistICAv KmVsc2UqLyB7CistICAgIF9fcHl4X3RfNCA9IChfX3B5eF92X3NlbGYtPmRhdGEgIT0gUHlfTm9u ZSk7CistICAgIF9fcHl4X3RfNiA9IChfX3B5eF90XzQgIT0gMCk7CistICAgIGlmICghX19weXhf dF82KSB7CistICAgIH0gZWxzZSB7CistICAgICAgX19weXhfdF81ID0gX19weXhfdF82OworLSAg ICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworKyAgI2lmbmRlZiBDWVRIT05fV0lU SE9VVF9BU1NFUlRJT05TCisrICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKysg ICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworKyAgICAgIFB5 RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworKyAgICAgIF9fUFlYX0VSUigwLCAz OTQsIF9fcHl4X0wxX2Vycm9yKQorICAgICB9CistICAgIF9fcHl4X3RfNiA9IChfX3B5eF92X3Nl bGYtPnJlcGx5X3VzZXJkYXRhICE9IFB5X05vbmUpOworLSAgICBfX3B5eF90XzQgPSAoX19weXhf dF82ICE9IDApOworLSAgICBfX3B5eF90XzUgPSBfX3B5eF90XzQ7CistICAgIF9fcHl4X0w0X2Jv b2xfYmlub3BfZG9uZTo7CistICAgIF9fcHl4X3ZfdXNlX3NldHN0YXRlID0gX19weXhfdF81Owor ICAgfQorLSAgX19weXhfTDM6OworKyAgI2VuZGlmCisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQp IjoxMgorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gc2VsZi5kYXRh IGlzIG5vdCBOb25lIG9yIHNlbGYucmVwbHlfdXNlcmRhdGEgaXMgbm90IE5vbmUKKy0gKiAgICAg aWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0eXBlKHNlbGYpLCAweGRhMzhjMjUsIE5v bmUpLCBzdGF0ZQorLSAqICAgICBlbHNlOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjM5NQorKyAqICAgICAgICAgY2RlZiBpbnQ2NF90IHRpbWUKKysgKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICB0aW1lID0gbXB2X2dldF90aW1lX3VzKHNlbGYu X2N0eCkKKysgKiAgICAgICAgIHJldHVybiB0aW1lCisgICovCistICBfX3B5eF90XzUgPSAoX19w eXhfdl91c2Vfc2V0c3RhdGUgIT0gMCk7CistICBpZiAoX19weXhfdF81KSB7CisrICB7CisrICAg ICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CisrICAg ICAgUHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwor KyAgICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgLyogIih0cmVlIGZyYWdt ZW50KSI6MTMKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IHNlbGYuZGF0YSBpcyBub3QgTm9u ZSBvciBzZWxmLnJlcGx5X3VzZXJkYXRhIGlzIG5vdCBOb25lCistICogICAgIGlmIHVzZV9zZXRz dGF0ZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9FdmVudCwgKHR5cGUoc2Vs ZiksIDB4ZGEzOGMyNSwgTm9uZSksIHN0YXRlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9FdmVudCwg KHR5cGUoc2VsZiksIDB4ZGEzOGMyNSwgc3RhdGUpCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Mzk2CisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICog ICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIHRpbWUgPSBtcHZfZ2V0X3RpbWVf dXMoc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBy ZXR1cm4gdGltZQorKyAqIAorICAqLworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAg ICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3B5eF91bnBp Y2tsZV9FdmVudCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDEzLCBf X3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4 X3RfMyA9IFB5VHVwbGVfTmV3KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigxLCAxMywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwor LSAgICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZikpKSk7CistICAgIF9fUHl4X0dJVkVSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQ eU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF8zLCAwLCAoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkp KTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4X2ludF8yMjg4MjIwNTMpOworLSAgICBfX1B5eF9H SVZFUkVGKF9fcHl4X2ludF8yMjg4MjIwNTMpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfMywgMSwgX19weXhfaW50XzIyODgyMjA1Myk7CistICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKKy0gICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShf X3B5eF90XzMsIDIsIFB5X05vbmUpOworLSAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygzKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9y KQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5 eF90XzIpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMCwgX19weXhfdF8yKTsK Ky0gICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzMpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfMSwgMSwgX19weXhfdF8zKTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc3RhdGUp OworLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc3RhdGUpOworLSAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfMSwgMiwgX19weXhfdl9zdGF0ZSk7CistICAgIF9fcHl4X3RfMiA9IDA7Cist ICAgIF9fcHl4X3RfMyA9IDA7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CistICAgIF9fcHl4 X3RfMSA9IDA7CistICAgIGdvdG8gX19weXhfTDA7CisrICAgICAgICBfX3B5eF92X3RpbWUgPSBt cHZfZ2V0X3RpbWVfdXMoX19weXhfdl9zZWxmLT5fY3R4KTsKKysgICAgICB9CisgCistICAgIC8q ICIodHJlZSBmcmFnbWVudCkiOjEyCistICogICAgIGVsc2U6CistICogICAgICAgICB1c2Vfc2V0 c3RhdGUgPSBzZWxmLmRhdGEgaXMgbm90IE5vbmUgb3Igc2VsZi5yZXBseV91c2VyZGF0YSBpcyBu b3QgTm9uZQorLSAqICAgICBpZiB1c2Vfc2V0c3RhdGU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9FdmVudCwgKHR5cGUoc2Vs ZiksIDB4ZGEzOGMyNSwgTm9uZSksIHN0YXRlCistICogICAgIGVsc2U6CisrICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM5NQorKyAqICAgICAgICAgY2RlZiBpbnQ2NF90 IHRpbWUKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIHdpdGggbm9n aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICB0aW1lID0g bXB2X2dldF90aW1lX3VzKHNlbGYuX2N0eCkKKysgKiAgICAgICAgIHJldHVybiB0aW1lCisgICov CisrICAgICAgLypmaW5hbGx5OiovIHsKKysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CisrICAg ICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICBfX1B5eF9GYXN0R0lMX0Zvcmdl dCgpOworKyAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgICNlbmRpZgorKyAg ICAgICAgICBnb3RvIF9fcHl4X0w1OworKyAgICAgICAgfQorKyAgICAgICAgX19weXhfTDU6Owor KyAgICAgIH0KKyAgIH0KKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjE1CistICogICAgICAg ICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZlbnQsICh0eXBlKHNlbGYpLCAweGRhMzhjMjUsIE5v bmUpLCBzdGF0ZQorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlj a2xlX0V2ZW50LCAodHlwZShzZWxmKSwgMHhkYTM4YzI1LCBzdGF0ZSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0 YXRlKToKKy0gKiAgICAgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShzZWxmLCBfX3B5 eF9zdGF0ZSkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozOTcKKysgKiAg ICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgdGltZSA9IG1wdl9nZXRfdGltZV91 cyhzZWxmLl9jdHgpCisrICogICAgICAgICByZXR1cm4gdGltZSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogCisrICogICAgICMgZGVmIHN1c3BlbmQoc2VsZik6CisgICovCistICAv KmVsc2UqLyB7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX0V2ZW50KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9y KQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19weXhfdF8zID0gUHlUdXBs ZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDE1LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0lO Q1JFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsK Ky0gICAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19w eXhfdl9zZWxmKSkpKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDAsICgoUHlP YmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworLSAgICBfX1B5 eF9JTkNSRUYoX19weXhfaW50XzIyODgyMjA1Myk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhf aW50XzIyODgyMjA1Myk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8zLCAxLCBfX3B5 eF9pbnRfMjI4ODIyMDUzKTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc3RhdGUpOworLSAg ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc3RhdGUpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfMywgMiwgX19weXhfdl9zdGF0ZSk7CistICAgIF9fcHl4X3RfMiA9IFB5VHVwbGVfTmV3 KDIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCAxNSwgX19weXhfTDFf ZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9HSVZFUkVG KF9fcHl4X3RfMSk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8yLCAwLCBfX3B5eF90 XzEpOworLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMyk7CistICAgIFB5VHVwbGVfU0VUX0lU RU0oX19weXhfdF8yLCAxLCBfX3B5eF90XzMpOworLSAgICBfX3B5eF90XzEgPSAwOworLSAgICBf X3B5eF90XzMgPSAwOworLSAgICBfX3B5eF9yID0gX19weXhfdF8yOworLSAgICBfX3B5eF90XzIg PSAwOworLSAgICBnb3RvIF9fcHl4X0wwOworLSAgfQorKyAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRfdChfX3B5eF92X3RpbWUp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzOTcsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF9yID0gX19weXhfdF8x OworKyAgX19weXhfdF8xID0gMDsKKysgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgdHVwbGUgc3RhdGUKKy0gKiAgICAgY2Rl ZiBvYmplY3QgX2RpY3QKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODYK KysgKiAKKysgKiAgICAgQHByb3BlcnR5CisrICogICAgIGRlZiB0aW1lKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJJbnRlcm5hbCBtcHYgY2xpZW50 IHRpbWUuCisrICogCisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9f cHl4X0wxX2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hE RUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkV2ZW50Ll9fcmVkdWNlX2N5dGhvbl9f IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnRpbWUuX19nZXRfXyIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19weXhf ciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfc3RhdGUp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X19kaWN0KTsKKyAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistLyogIih0cmVlIGZyYWdtZW50KSI6MTYKKy0gKiAgICAgZWxzZToKKy0g KiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9FdmVudCwgKHR5cGUoc2VsZiksIDB4ZGEz OGMyNSwgc3RhdGUpCistICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3Rh dGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIF9fcHl4X3VucGlja2xl X0V2ZW50X19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQxMgorKyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYg cmVxdWVzdF9ldmVudChzZWxmLCBldmVudCwgZW5hYmxlKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgIiIiRW5hYmxlIG9yIGRpc2FibGUgYSBnaXZlbiBldmVudC4K KysgKiAKKyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8zX19zZXRzdGF0ZV9jeXRob25f XyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7 IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF8zX19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQ eU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzFyZXF1ZXN0X2V2ZW50KFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dk cyk7IC8qcHJvdG8qLworK3N0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfcmVxdWVzdF9ldmVudFtdID0gIkVuYWJsZSBvciBkaXNhYmxlIGEgZ2l2ZW4g ZXZlbnQuXG5cbiAgICAgICAgQXJndW1lbnRzOlxuICAgICAgICBldmVudCAtIFNlZSBFdmVudHNc biAgICAgICAgZW5hYmxlIC0gVHJ1ZSB0byBlbmFibGUsIEZhbHNlIHRvIGRpc2FibGVcblxuICAg ICAgICBXcmFwczogbXB2X3JlcXVlc3RfZXZlbnRcbiAgICAgICAgIjsKKytzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xcmVxdWVzdF9ldmVu dChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3Qg Kl9fcHl4X2t3ZHMpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF92X2V2ZW50ID0gMDsKKysgIFB5T2Jq ZWN0ICpfX3B5eF92X2VuYWJsZSA9IDA7CisrICBpbnQgX19weXhfbGluZW5vID0gMDsKKysgIGNv bnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5vID0g MDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyAo d3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50XzJfX3NldHN0YXRlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhf dl9fX3B5eF9zdGF0ZSkpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJlcXVlc3Rf ZXZlbnQgKHdyYXBwZXIpIiwgMCk7CisrICB7CisrICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4 X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX2V2ZW50LCZfX3B5eF9uX3NfZW5hYmxlLDB9Owor KyAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07CisrICAgIGlmICh1bmxpa2VseShfX3B5 eF9rd2RzKSkgeworKyAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKysgICAgICBjb25zdCBQeV9z c2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKysgICAgICBz d2l0Y2ggKHBvc19hcmdzKSB7CisrICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxl X0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwor KyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdz LCAwKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDA6IGJy ZWFrOworKyAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysg ICAgICB9CisrICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworKyAgICAg IHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBpZiAobGlr ZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5 eF9uX3NfZXZlbnQpKSAhPSAwKSkga3dfYXJncy0tOworKyAgICAgICAgZWxzZSBnb3RvIF9fcHl4 X0w1X2FyZ3R1cGxlX2Vycm9yOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAg ICAgY2FzZSAgMToKKysgICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGlj dF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19lbmFibGUpKSAhPSAwKSkga3dfYXJn cy0tOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZh bGlkKCJyZXF1ZXN0X2V2ZW50IiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCA0MTIsIF9fcHl4 X0wzX2Vycm9yKQorKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBpZiAodW5saWtlbHkoa3df YXJncyA+IDApKSB7CisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtl eXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3Ms ICJyZXF1ZXN0X2V2ZW50IikgPCAwKSkgX19QWVhfRVJSKDAsIDQxMiwgX19weXhfTDNfZXJyb3Ip CisrICAgICAgfQorKyAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykg IT0gMikgeworKyAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisrICAgIH0gZWxz ZSB7CisrICAgICAgdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsK KysgICAgICB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAg ICB9CisrICAgIF9fcHl4X3ZfZXZlbnQgPSB2YWx1ZXNbMF07CisrICAgIF9fcHl4X3ZfZW5hYmxl ID0gdmFsdWVzWzFdOworKyAgfQorKyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdf ZG9uZTsKKysgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKysgIF9fUHl4X1JhaXNlQXJndHVw bGVJbnZhbGlkKCJyZXF1ZXN0X2V2ZW50IiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5 eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA0MTIsIF9fcHl4X0wzX2Vycm9yKQorKyAgX19weXhfTDNf ZXJyb3I6OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4 dC5yZXF1ZXN0X2V2ZW50IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBOVUxM OworKyAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OworKyAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9yZXF1ZXN0X2V2ZW50KCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2Vs ZiksIF9fcHl4X3ZfZXZlbnQsIF9fcHl4X3ZfZW5hYmxlKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4g X19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfNUV2ZW50XzJfX3NldHN0YXRlX2N5dGhvbl9fKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X19fcHl4X3N0YXRlKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfcmVxdWVzdF9ldmVudChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2V2 ZW50LCBQeU9iamVjdCAqX19weXhfdl9lbmFibGUpIHsKKysgIGludCBfX3B5eF92X2VuYWJsZV9p OworKyAgaW50IF9fcHl4X3ZfZXJyOworKyAgZW51bSBtcHZfZXZlbnRfaWQgX19weXhfdl9ldmVu dF9pZDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55RGVj bGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIGludCBfX3B5eF90 XzE7CisrICBpbnQgX19weXhfdF8yOworKyAgZW51bSBtcHZfZXZlbnRfaWQgX19weXhfdF8zOwor KyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsK KyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhv bl9fIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgicmVxdWVzdF9ldmVudCIs IDApOworIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTcKKy0gKiAgICAgICAgIHJldHVybiBf X3B5eF91bnBpY2tsZV9FdmVudCwgKHR5cGUoc2VsZiksIDB4ZGEzOGMyNSwgc3RhdGUpCistICog ZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5 eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDIxCisrICogICAgICAgICBXcmFwczogbXB2X3JlcXVlc3RfZXZlbnQKKysgKiAgICAgICAgICIi IgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICBjZGVmIGludCBlbmFibGVfaSA9IDEgaWYgZW5hYmxlIGVsc2UgMAor KyAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICovCistICBpZiAoIShsaWtlbHkoUHlUdXBsZV9D aGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5eF92X19fcHl4X3N0YXRlKSA9 PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJFeHBlY3RlZCAlLjE2 cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZUEUoX19weXhfdl9fX3B5eF9zdGF0ZSktPnRw X25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90 XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9FdmVudF9f c2V0X3N0YXRlKF9fcHl4X3Zfc2VsZiwgKChQeU9iamVjdCopX19weXhfdl9fX3B5eF9zdGF0ZSkp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworKyAgI2lmbmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05T CisrICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKysgICAgaWYgKHVubGlrZWx5 KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworKyAgICAgIFB5RXJyX1NldE5vbmUoUHlF eGNfQXNzZXJ0aW9uRXJyb3IpOworKyAgICAgIF9fUFlYX0VSUigwLCA0MjEsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICB9CisrICB9CisrICAjZW5kaWYKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCki OjE2CistICogICAgIGVsc2U6CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfRXZl bnQsICh0eXBlKHNlbGYpLCAweGRhMzhjMjUsIHN0YXRlKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5 dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRl KQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyMgorKyAqICAgICAgICAg IiIiCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICogICAgICAgICBjZGVmIGludCBl bmFibGVfaSA9IDEgaWYgZW5hYmxlIGVsc2UgMCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICBjZGVmIGludCBlcnIKKysgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lk IGV2ZW50X2lkID0gZXZlbnQKKyAgKi8KKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lz VHJ1ZShfX3B5eF92X2VuYWJsZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhf RVJSKDAsIDQyMiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19weXhfdF8yKSB7CisrICAgIF9f cHl4X3RfMSA9IDE7CisrICB9IGVsc2UgeworKyAgICBfX3B5eF90XzEgPSAwOworKyAgfQorKyAg X19weXhfdl9lbmFibGVfaSA9IF9fcHl4X3RfMTsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gIGdv dG8gX19weXhfTDA7CistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5FdmVudC5f X3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICBy ZXR1cm4gX19weXhfcjsKKy19CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDI0CisrICogICAgICAgICBjZGVmIGludCBlbmFibGVfaSA9IDEgaWYgZW5hYmxlIGVsc2UgMAor KyAqICAgICAgICAgY2RlZiBpbnQgZXJyCisrICogICAgICAgICBjZGVmIG1wdl9ldmVudF9pZCBl dmVudF9pZCA9IGV2ZW50ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgZXJyID0gbXB2X3JlcXVlc3RfZXZlbnQoc2Vs Zi5fY3R4LCBldmVudF9pZCwgZW5hYmxlX2kpCisrICovCisrICBfX3B5eF90XzMgPSAoKGVudW0g bXB2X2V2ZW50X2lkKV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9ldmVudF9pZChfX3B5eF92X2V2 ZW50KSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQyNCwg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF92X2V2ZW50X2lkID0gX19weXhfdF8zOworIAorLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTgKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0MjUKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqICAgICAg ICAgY2RlZiBtcHZfZXZlbnRfaWQgZXZlbnRfaWQgPSBldmVudAorKyAqICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9 IG1wdl9yZXF1ZXN0X2V2ZW50KHNlbGYuX2N0eCwgZXZlbnRfaWQsIGVuYWJsZV9pKQorKyAqICAg ICAgICAgcmV0dXJuIGVycgorKyAqLworKyAgeworKyAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAor KyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworKyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUwor KyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKysgICAgICAjZW5kaWYKKysgICAgICAv KnRyeToqLyB7CisrCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDI2CisrICogICAgICAgICBjZGVmIG1wdl9ldmVudF9pZCBldmVudF9pZCA9IGV2ZW50CisrICog ICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2V2 ZW50KHNlbGYuX2N0eCwgZXZlbnRfaWQsIGVuYWJsZV9pKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICByZXR1cm4gZXJyCisgICogCisrICovCisrICAgICAgICBfX3B5 eF92X2VyciA9IG1wdl9yZXF1ZXN0X2V2ZW50KF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9l dmVudF9pZCwgX19weXhfdl9lbmFibGVfaSk7CisrICAgICAgfQorKworKyAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjUKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgor KyAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfaWQgZXZlbnRfaWQgPSBldmVudAorKyAqICAgICAg ICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIGVyciA9IG1wdl9yZXF1ZXN0X2V2ZW50KHNlbGYuX2N0eCwgZXZlbnRfaWQsIGVuYWJsZV9p KQorKyAqICAgICAgICAgcmV0dXJuIGVycgorKyAqLworKyAgICAgIC8qZmluYWxseToqLyB7Cisr ICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQK KysgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAgUHlfQkxPQ0tf VEhSRUFEUworKyAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5eF9MNTsKKysg ICAgICAgIH0KKysgICAgICAgIF9fcHl4X0w1OjsKKysgICAgICB9CisrICB9CisrCisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDI3CisrICogICAgICAgICB3aXRoIG5vZ2ls OgorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2V2ZW50KHNlbGYuX2N0eCwgZXZl bnRfaWQsIGVuYWJsZV9pKQorKyAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisgICogCistICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToKKy0gKiAgICAgICAg IHYgPSBmbigqaywgKiprdykKKysgKiAgICAgQF9lcnJvcnMKKyAgKi8KKysgIF9fUHl4X1hERUNS RUYoX19weXhfcik7CisrICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92 X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDQyNywgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgIF9fcHl4X3IgPSBfX3B5 eF90XzQ7CisrICBfX3B5eF90XzQgPSAwOworKyAgZ290byBfX3B5eF9MMDsKKyAKKy0vKiBQeXRo b24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzVfZXJyb3JzKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9m bik7IC8qcHJvdG8qLworLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl81X2Vycm9ycyA9IHsiX2Vycm9ycyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNV9lcnJvcnMsIE1FVEhfTywgMH07Cistc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNV9lcnJvcnMoUHlPYmplY3QgKl9f cHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2ZuKSB7CistICBQeU9iamVjdCAqX19weXhfciA9 IDA7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9lcnJvcnMgKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzRfZXJyb3JzKF9fcHl4X3NlbGYsICgoUHlPYmplY3QgKilf X3B5eF92X2ZuKSk7CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDEyCisr ICogCisrICogICAgIEBfZXJyb3JzCisrICogICAgIGRlZiByZXF1ZXN0X2V2ZW50KHNlbGYsIGV2 ZW50LCBlbmFibGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAi IiJFbmFibGUgb3IgZGlzYWJsZSBhIGdpdmVuIGV2ZW50LgorKyAqIAorKyAqLworIAorICAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5Db250ZXh0LnJlcXVlc3RfZXZlbnQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworKyAgX19weXhfTDA6OworKyAgX19Q eXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK KyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzE5CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzMAorICAqIAor LSAqIGRlZiBfZXJyb3JzKGZuKToKKy0gKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCist ICogICAgICAgICBpZiB2IDwgMDoKKysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIHNldF9s b2dfbGV2ZWwoc2VsZiwgbG9nbGV2ZWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICAiIiJXcmFwczogbXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzIiIiCisrICogICAg ICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X2Vycm9yc18x d3JhcHBlZChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2Jq ZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCistc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21k ZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3JzXzF3cmFwcGVkID0geyJ3cmFwcGVkIiwg KFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3JzXzF3cmFwcGVkLCBNRVRIX1ZBUkFSR1N8TUVUSF9L RVlXT1JEUywgMH07Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN19lcnJvcnNfMXdyYXBwZWQoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgeworLSAgUHlPYmplY3QgKl9fcHl4X3Zf ayA9IDA7CistICBQeU9iamVjdCAqX19weXhfdl9rdyA9IDA7Cisrc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfM3NldF9sb2dfbGV2ZWwoUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfbG9nbGV2ZWwpOyAvKnByb3Rv Ki8KKytzdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzJzZXRfbG9nX2xldmVsW10gPSAiV3JhcHM6IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyI7Cisr c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf M3NldF9sb2dfbGV2ZWwoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf bG9nbGV2ZWwpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgid3JhcHBlZCAod3Jh cHBlcikiLCAwKTsKKy0gIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSAmJiB1bmxpa2VseSghX19Q eXhfQ2hlY2tLZXl3b3JkU3RyaW5ncyhfX3B5eF9rd2RzLCAid3JhcHBlZCIsIDEpKSkgcmV0dXJu IE5VTEw7CistICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKKy0gICAgX19weXhfdl9rdyA9 IFB5RGljdF9Db3B5KF9fcHl4X2t3ZHMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Zfa3cpKSByZXR1 cm4gTlVMTDsKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Zfa3cpOworLSAgfSBlbHNlIHsKKy0g ICAgX19weXhfdl9rdyA9IE5VTEw7CistICB9CistICBfX1B5eF9JTkNSRUYoX19weXhfYXJncyk7 CistICBfX3B5eF92X2sgPSBfX3B5eF9hcmdzOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83X2Vycm9yc193cmFwcGVkKF9fcHl4X3NlbGYsIF9fcHl4X3Zfaywg X19weXhfdl9rdyk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X2xvZ19sZXZl bCAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMnNldF9sb2dfbGV2ZWwoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4 X3ZfbG9nbGV2ZWwpKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhf WERFQ1JFRihfX3B5eF92X2spOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2t3KTsKKyAgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAor LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3Jz X3dyYXBwZWQoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2ssIFB5T2Jq ZWN0ICpfX3B5eF92X2t3KSB7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKl9fcHl4X2N1cl9zY29wZTsKKy0gIHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9f X2Vycm9ycyAqX19weXhfb3V0ZXJfc2NvcGU7CistICBQeU9iamVjdCAqX19weXhfdl92ID0gTlVM TDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8yc2V0X2xvZ19sZXZlbChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2xvZ2xldmVsKSB7Cisr ICBjaGFyIGNvbnN0ICpfX3B5eF92X2xvZ2xldmVsX2M7CisrICBpbnQgX19weXhfdl9lcnI7Cisg ICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cworICAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CistICBpbnQgX19weXhfdF8yOworKyAg UHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVM TDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAgY2hhciBjb25zdCAqX19weXhf dF80OworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxl bmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgid3JhcHBlZCIsIDApOworLSAgX19weXhfb3V0ZXJfc2NvcGUgPSAoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19f ZXJyb3JzICopIF9fUHl4X0N5RnVuY3Rpb25fR2V0Q2xvc3VyZShfX3B5eF9zZWxmKTsKKy0gIF9f cHl4X2N1cl9zY29wZSA9IF9fcHl4X291dGVyX3Njb3BlOworKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoInNldF9sb2dfbGV2ZWwiLCAwKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF92X2xv Z2xldmVsKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjAKKy0g KiBkZWYgX2Vycm9ycyhmbik6CistICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToKKy0gKiAg ICAgICAgIHYgPSBmbigqaywgKiprdykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgaWYgdiA8IDA6CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IodikKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzIKKysgKiAgICAgZGVmIHNldF9s b2dfbGV2ZWwoc2VsZiwgbG9nbGV2ZWwpOgorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9yZXF1 ZXN0X2xvZ19tZXNzYWdlcyIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBsb2dsZXZlbCA9IF9zdHJlbmMobG9n bGV2ZWwpCisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGxvZ2xldmVsX2MgPSBsb2dsZXZl bAorICAqLworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4pKSB7 IF9fUHl4X1JhaXNlQ2xvc3VyZU5hbWVFcnJvcigiZm4iKTsgX19QWVhfRVJSKDAsIDMyMCwgX19w eXhfTDFfZXJyb3IpIH0KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhf Y3VyX3Njb3BlLT5fX3B5eF92X2ZuLCBfX3B5eF92X2ssIF9fcHl4X3Zfa3cpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vycm9yKQorKyAgI2lm bmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCisrICBpZiAodW5saWtlbHkoIVB5X09wdGlt aXplRmxhZykpIHsKKysgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDAp KSkgeworKyAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworKyAgICAg IF9fUFlYX0VSUigwLCA0MzIsIF9fcHl4X0wxX2Vycm9yKQorKyAgICB9CisrICB9CisrICAjZW5k aWYKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzMKKysgKiAgICAg ICAgICIiIldyYXBzOiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKKysgKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIGxvZ2xldmVsID0gX3N0cmVuYyhsb2dsZXZlbCkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFy KiBsb2dsZXZlbF9jID0gbG9nbGV2ZWwKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqLwor KyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0MzMsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX3B5eF90XzMgPSBOVUxMOwor KyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzIpKSkgeworKyAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzIpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKKysgICAgICBQeU9iamVjdCogZnVu Y3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF8zKTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAg IF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgIH0KKysgIH0KKysg IF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4 X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X2xvZ2xldmVsKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxP bmVBcmcoX19weXhfdF8yLCBfX3B5eF92X2xvZ2xldmVsKTsKKysgIF9fUHl4X1hERUNSRUYoX19w eXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDQzMywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKy0gIF9fcHl4X3ZfdiA9IF9fcHl4X3RfMTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworKyAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2xvZ2xldmVsLCBf X3B5eF90XzEpOworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozMjEKKy0gKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgorLSAqICAg ICAgICAgdiA9IGZuKCprLCAqKmt3KQorLSAqICAgICAgICAgaWYgdiA8IDA6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KQorLSAq ICAgICByZXR1cm4gd3JhcHBlZAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQzNAorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAqICAgICAgICAgbG9nbGV2ZWwg PSBfc3RyZW5jKGxvZ2xldmVsKQorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBsb2dsZXZl bF9jID0gbG9nbGV2ZWwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg Y2RlZiBpbnQgZXJyCisrICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgX19weXhfdF8x ID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl92LCBfX3B5eF9pbnRfMCwgUHlfTFQpOyBf X1B5eF9YR09UUkVGKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDMyMSwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVj dF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9F UlIoMCwgMzIxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworLSAgaWYgKHVubGlrZWx5KF9fcHl4X3RfMikpIHsKKysgIF9fcHl4X3Rf NCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfbG9nbGV2ZWwpOyBpZiAodW5saWtl bHkoKCFfX3B5eF90XzQpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDM0LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3ZfbG9nbGV2ZWxfYyA9IF9fcHl4X3RfNDsKKyAKKy0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMgorLSAqICAgICAgICAgdiA9 IGZuKCprLCAqKmt3KQorLSAqICAgICAgICAgaWYgdiA8IDA6CistICogICAgICAgICAgICAgcmFp c2UgTVBWRXJyb3IodikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICByZXR1 cm4gd3JhcHBlZAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzNgorKyAq ICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBsb2dsZXZlbF9jID0gbG9nbGV2ZWwKKysgKiAgICAg ICAgIGNkZWYgaW50IGVycgorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2xvZ19tZXNz YWdlcyhzZWxmLl9jdHgsIGxvZ2xldmVsX2MpCisrICogICAgICAgICByZXR1cm4gZXJyCisrICov CisrICB7CisrICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlUaHJlYWRTdGF0ZSAq X3NhdmU7CisrICAgICAgUHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19QeXhfRmFzdEdJTF9S ZW1lbWJlcigpOworKyAgICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsKKysKKysgICAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzcKKysgKiAgICAgICAgIGNkZWYg aW50IGVycgorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBlcnIgPSBt cHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMoc2VsZi5fY3R4LCBsb2dsZXZlbF9jKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gZXJyCisgICogCisgICovCist ICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8zLCBfX3B5eF9uX3NfTVBWRXJy b3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAzMjIsIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAgX19weXhfdF80ID0g TlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhv ZF9DaGVjayhfX3B5eF90XzMpKSkgeworLSAgICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9T RUxGKF9fcHl4X3RfMyk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CistICAgICAg ICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsK Ky0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworLSAgICAgICAgX19QeXhfSU5DUkVG KGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlv bik7CisrICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyhfX3B5 eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfbG9nbGV2ZWxfYyk7CisgICAgICAgfQorLSAgICB9Cist ICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfMywgX19weXhfdF80LCBfX3B5eF92X3YpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhfX3B5eF90XzMsIF9fcHl4X3Zfdik7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKy0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgMzIyLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Cist ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICBfX1B5eF9S YWlzZShfX3B5eF90XzEsIDAsIDAsIDApOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKy0gICAgX19QWVhfRVJSKDAsIDMyMiwgX19weXhfTDFfZXJyb3IpCisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjEKKy0gKiAgICAgZGVm IHdyYXBwZWQoKmssICoqa3cpOgorLSAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3KQorLSAqICAg ICAgICAgaWYgdiA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICAgICByYWlzZSBNUFZFcnJvcih2KQorLSAqICAgICByZXR1cm4gd3JhcHBlZAorKyAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzYKKysgKiAgICAgICAgIGNkZWYgY29u c3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsCisrICogICAgICAgICBjZGVmIGludCBlcnIK KysgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMoc2VsZi5fY3R4LCBs b2dsZXZlbF9jKQorKyAqICAgICAgICAgcmV0dXJuIGVycgorICAqLworKyAgICAgIC8qZmluYWxs eToqLyB7CisrICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lU SF9USFJFQUQKKysgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAg UHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5 eF9MNTsKKysgICAgICAgIH0KKysgICAgICAgIF9fcHl4X0w1OjsKKysgICAgICB9CisgICB9Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE5CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDM4CisrICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAq ICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyhzZWxmLl9jdHgsIGxv Z2xldmVsX2MpCisrICogICAgICAgICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKyAgKiAKKy0gKiBkZWYgX2Vycm9ycyhmbik6CistICogICAgIGRlZiB3cmFwcGVkKCpr LCAqKmt3KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgdiA9IGZu KCprLCAqKmt3KQorLSAqICAgICAgICAgaWYgdiA8IDA6CisrICogICAgIEBfZXJyb3JzCisrICov CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRf RnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA0MzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Cisr ICBfX3B5eF9yID0gX19weXhfdF8xOworKyAgX19weXhfdF8xID0gMDsKKysgIGdvdG8gX19weXhf TDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMwCisrICogCisr ICogICAgIEBfZXJyb3JzCisrICogICAgIGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVs KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIiV3JhcHM6IG1w dl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAor ICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gUHlfTm9u ZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wx X2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X1hERUNSRUYo X19weXhfdF8yKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdF80KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2 Ll9lcnJvcnMud3JhcHBlZCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4 dC5zZXRfbG9nX2xldmVsIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7CisgICBfX3B5eF9yID0gTlVMTDsKKyAgIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdl92KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9sb2dsZXZlbCk7CisgICBf X1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozMTgKKy0gKiAKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQx CisgICogCistICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToKKy0gKiAgICAgICAgIHYgPSBmbigqaywg KiprdykKKysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIGxvYWRfY29uZmlnKHNlbGYsIGZp bGVuYW1lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIiV3Jh cHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4 CisgICovCisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfNF9lcnJvcnMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfZm4pIHsKKy0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqX19weXhfY3VyX3Njb3BlOworLSAgUHlPYmpl Y3QgKl9fcHl4X3Zfd3JhcHBlZCA9IDA7CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF81bG9hZF9j b25maWcoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZmlsZW5hbWUp OyAvKnByb3RvKi8KKytzdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzRsb2FkX2NvbmZpZ1tdID0gIldyYXBzOiBtcHZfbG9hZF9jb25maWdfZmlsZSI7 Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNWxvYWRfY29uZmlnKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X2ZpbGVuYW1lKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImxvYWRfY29uZmln ICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF80bG9hZF9jb25maWcoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3Zf ZmlsZW5hbWUpKTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisrCisrc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNGxvYWRf Y29uZmlnKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZmlsZW5hbWUpIHsKKysgIGNoYXIgY29uc3Qg Kl9fcHl4X3ZfX2ZpbGVuYW1lOworKyAgaW50IF9fcHl4X3ZfZXJyOworICAgUHlPYmplY3QgKl9f cHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0 ICpfX3B5eF90XzEgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQ eU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKysgIGNoYXIgY29uc3QgKl9fcHl4X3RfNDsKKyAg IGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9lcnJvcnMiLCAwKTsKKy0gIF9fcHl4X2N1cl9zY29wZSA9IChzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKilf X3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vy cm9ycyhfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0 X19fZXJyb3JzLCBfX3B5eF9lbXB0eV90dXBsZSwgTlVMTCk7CistICBpZiAodW5saWtlbHkoIV9f cHl4X2N1cl9zY29wZSkpIHsKKy0gICAgX19weXhfY3VyX3Njb3BlID0gKChzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKilQ eV9Ob25lKTsKKy0gICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgICBfX1BZWF9FUlIoMCwg MzE4LCBfX3B5eF9MMV9lcnJvcikKKy0gIH0gZWxzZSB7CistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF9jdXJfc2NvcGUpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImxvYWRfY29uZmln IiwgMCk7CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9maWxlbmFtZSk7CisrCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQzCisrICogICAgIGRlZiBsb2FkX2NvbmZpZyhz ZWxmLCBmaWxlbmFtZSk6CisrICogICAgICAgICAiIiJXcmFwczogbXB2X2xvYWRfY29uZmlnX2Zp bGUiIiIKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgZmlsZW5hbWUgPSBfc3RyZW5jKGZpbGVuYW1lKQorKyAqICAg ICAgICAgY2RlZiBjb25zdCBjaGFyKiBfZmlsZW5hbWUgPSBmaWxlbmFtZQorKyAqLworKyAgI2lm bmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCisrICBpZiAodW5saWtlbHkoIVB5X09wdGlt aXplRmxhZykpIHsKKysgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDAp KSkgeworKyAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworKyAgICAg IF9fUFlYX0VSUigwLCA0NDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICB9CisgICB9CistICBfX3B5 eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4gPSBfX3B5eF92X2ZuOworLSAgX19QeXhfSU5DUkVGKF9f cHl4X2N1cl9zY29wZS0+X19weXhfdl9mbik7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X2N1cl9z Y29wZS0+X19weXhfdl9mbik7CisrICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozMTkKKy0gKiAKKy0gKiBkZWYgX2Vycm9ycyhmbik6CistICogICAgIGRl ZiB3cmFwcGVkKCprLCAqKmt3KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgdiA9IGZuKCprLCAqKmt3KQorLSAqICAgICAgICAgaWYgdiA8IDA6CisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQ0CisrICogICAgICAgICAiIiJXcmFwczogbXB2 X2xvYWRfY29uZmlnX2ZpbGUiIiIKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAg ICAgICAgIGZpbGVuYW1lID0gX3N0cmVuYyhmaWxlbmFtZSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBfZmlsZW5hbWUgPSBmaWxlbmFt ZQorKyAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9D eUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN19lcnJvcnNf MXdyYXBwZWQsIDAsIF9fcHl4X25fc19lcnJvcnNfbG9jYWxzX3dyYXBwZWQsICgoUHlPYmplY3Qq KV9fcHl4X2N1cl9zY29wZSksIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2Qs ICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18yKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDMxOSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDQ0NCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKysgIF9fcHl4X3RfMyA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFD S19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAg IF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CisrICAgIGlmIChsaWtl bHkoX19weXhfdF8zKSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dF VF9GVU5DVElPTihfX3B5eF90XzIpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOwor KyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVGX1NFVChf X3B5eF90XzIsIGZ1bmN0aW9uKTsKKysgICAgfQorKyAgfQorKyAgX19weXhfdF8xID0gKF9fcHl4 X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzMsIF9f cHl4X3ZfZmlsZW5hbWUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9f cHl4X3ZfZmlsZW5hbWUpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMg PSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNDQ0LCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdl93cmFw cGVkID0gX19weXhfdF8xOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9 IDA7CisrICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfZmlsZW5hbWUsIF9fcHl4X3RfMSk7Cisg ICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjMyMworLSAqICAgICAgICAgaWYgdiA8IDA6CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJy b3IodikKKy0gKiAgICAgcmV0dXJuIHdyYXBwZWQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqIAorLSAqIAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0NQor KyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAqICAgICAgICAgZmlsZW5hbWUgPSBfc3Ry ZW5jKGZpbGVuYW1lKQorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBfZmlsZW5hbWUgPSBm aWxlbmFtZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjZGVmIGlu dCBlcnIKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICovCisrICBfX3B5eF90XzQgPSBfX1B5 eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X2ZpbGVuYW1lKTsgaWYgKHVubGlrZWx5KCghX19w eXhfdF80KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ0NSwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF92X19maWxlbmFtZSA9IF9fcHl4X3RfNDsKKysKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDcKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hh ciogX2ZpbGVuYW1lID0gZmlsZW5hbWUKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgICAgIGVyciA9IG1wdl9sb2FkX2NvbmZpZ19maWxlKHNlbGYuX2N0eCwgX2ZpbGVuYW1lKQor KyAqICAgICAgICAgcmV0dXJuIGVycgorKyAqLworKyAgeworKyAgICAgICNpZmRlZiBXSVRIX1RI UkVBRAorKyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworKyAgICAgIFB5X1VOQkxPQ0tfVEhS RUFEUworKyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKysgICAgICAjZW5kaWYKKysg ICAgICAvKnRyeToqLyB7CisrCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDQ4CisrICogICAgICAgICBjZGVmIGludCBlcnIKKysgKiAgICAgICAgIHdpdGggbm9n aWw6CisrICogICAgICAgICAgICAgZXJyID0gbXB2X2xvYWRfY29uZmlnX2ZpbGUoc2VsZi5fY3R4 LCBfZmlsZW5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHJl dHVybiBlcnIKKysgKiAKKysgKi8KKysgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2xvYWRfY29u ZmlnX2ZpbGUoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X19maWxlbmFtZSk7CisrICAgICAg fQorKworKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDcKKysgKiAg ICAgICAgIGNkZWYgY29uc3QgY2hhciogX2ZpbGVuYW1lID0gZmlsZW5hbWUKKysgKiAgICAgICAg IGNkZWYgaW50IGVycgorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9sb2FkX2NvbmZpZ19maWxlKHNl bGYuX2N0eCwgX2ZpbGVuYW1lKQorKyAqICAgICAgICAgcmV0dXJuIGVycgorKyAqLworKyAgICAg IC8qZmluYWxseToqLyB7CisrICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAj aWZkZWYgV0lUSF9USFJFQUQKKysgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysg ICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAg Z290byBfX3B5eF9MNTsKKysgICAgICAgIH0KKysgICAgICAgIF9fcHl4X0w1OjsKKysgICAgICB9 CisrICB9CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQ5CisrICog ICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9sb2FkX2NvbmZp Z19maWxlKHNlbGYuX2N0eCwgX2ZpbGVuYW1lKQorKyAqICAgICAgICAgcmV0dXJuIGVyciAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiBfZm9ybWF0X2Zvcihz ZWxmLCB2YWx1ZSk6CisgICovCisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19QeXhf SU5DUkVGKF9fcHl4X3Zfd3JhcHBlZCk7CistICBfX3B5eF9yID0gX19weXhfdl93cmFwcGVkOwor KyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0NDksIF9fcHl4X0wxX2Vycm9yKQorKyAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF9yID0gX19weXhfdF8xOworKyAgX19w eXhfdF8xID0gMDsKKyAgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzE4CistICogCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDQxCisgICogCistICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIGRlZiB3cmFwcGVkKCprLCAqKmt3KToKKy0gKiAgICAgICAgIHYg PSBmbigqaywgKiprdykKKysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIGxvYWRfY29uZmln KHNlbGYsIGZpbGVuYW1lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgIiIiV3JhcHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCisrICogICAgICAgICBhc3NlcnQg c2VsZi5fY3R4CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fcHl4 X0wxX2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9lcnJvcnMiLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsK KysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkNvbnRleHQubG9hZF9jb25maWciLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKyAgIF9fcHl4X3IgPSBOVUxMOworICAgX19weXhf TDA6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X3dyYXBwZWQpOworLSAgX19QeXhfREVDUkVG KCgoUHlPYmplY3QgKilfX3B5eF9jdXJfc2NvcGUpKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dl9maWxlbmFtZSk7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjkKKy0gKiAgICAgY29kZSA9IE5vbmUKKysvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUxCisrICogICAgICAgICByZXR1cm4gZXJy CisgICogCistICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5jb2RlID0gZQorLSAqICAgICAgICAgY2RlZiBj b25zdCBjaGFyKiBlcnJfYworKyAqICAgICBkZWYgX2Zvcm1hdF9mb3Ioc2VsZiwgdmFsdWUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBpZiBpc2luc3RhbmNlKHZh bHVlLCBiYXNlc3RyaW5nKToKKysgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJ TkcKKyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl8xX19pbml0X18oUHlPYmplY3Qg Kl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7 IC8qcHJvdG8qLworLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl84TVBWRXJyb3JfMV9faW5pdF9fID0geyJfX2luaXRfXyIsIChQeUNGdW5jdGlvbiko dm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl84TVBWRXJyb3JfMV9faW5pdF9fLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgMH07 Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVy cm9yXzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3Ms IFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CistICBQeU9iamVjdCAqX19weXhfdl9zZWxmID0gMDsK Ky0gIFB5T2JqZWN0ICpfX3B5eF92X2UgPSAwOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cist ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVu byA9IDA7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfN19mb3JtYXRfZm9yKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X3ZhbHVlKTsgLypwcm90byovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfN19mb3JtYXRfZm9yKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9 IDA7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9faW5pdF9fICh3cmFwcGVyKSIsIDApOworLSAgeworLSAgICBzdGF0aWMgUHlP YmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19zZWxmLCZfX3B5eF9uX3Nf ZSwwfTsKKy0gICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHswLDB9OworLSAgICBpZiAodW5saWtl bHkoX19weXhfa3dkcykpIHsKKy0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAgY29u c3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7Cist ICAgICAgc3dpdGNoIChwb3NfYXJncykgeworLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNl ICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJy b3I7CistICAgICAgfQorLSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsK Ky0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNlICAwOgorLSAgICAgICAg aWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dk cywgX19weXhfbl9zX3NlbGYpKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSBnb3Rv IF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwor LSAgICAgICAgY2FzZSAgMToKKy0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4 X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19lKSkgIT0gMCkpIGt3X2Fy Z3MtLTsKKy0gICAgICAgIGVsc2UgeworLSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52 YWxpZCgiX19pbml0X18iLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDNf ZXJyb3IpCistICAgICAgICB9CistICAgICAgfQorLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdz ID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29y ZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9f aW5pdF9fIikgPCAwKSkgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDNfZXJyb3IpCistICAgICAg fQorLSAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0gMikgewor LSAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgIH0gZWxzZSB7CistICAg ICAgdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKy0gICAgICB2 YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICB9CistICAg IF9fcHl4X3Zfc2VsZiA9IHZhbHVlc1swXTsKKy0gICAgX19weXhfdl9lID0gdmFsdWVzWzFdOwor LSAgfQorLSAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKy0gIF9fcHl4 X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2lu aXRfXyIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIo MCwgMzI5LCBfX3B5eF9MM19lcnJvcikKKy0gIF9fcHl4X0wzX2Vycm9yOjsKKy0gIF9fUHl4X0Fk ZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Lk1QVkVycm9yLl9faW5pdF9fIiwgX19weXhf Y2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBOVUxMOworLSAgX19weXhfTDRfYXJndW1lbnRf dW5wYWNraW5nX2RvbmU6OworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl84TVBWRXJyb3JfX19pbml0X18oX19weXhfc2VsZiwgX19weXhfdl9zZWxmLCBfX3B5eF92 X2UpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9mb3JtYXRfZm9yICh3cmFwcGVy KSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF82X2Zvcm1hdF9mb3IoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfdmFsdWUpKTsK KyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19faW5pdF9fKENZVEhPTl9V TlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X2UpIHsKKy0gIGNoYXIgY29uc3QgKl9fcHl4X3ZfZXJyX2M7CistICBpbnQg X19weXhfdl9lX2k7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfNl9mb3JtYXRfZm9yKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfdl92YWx1ZSkgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIGludCBfX3B5eF90XzE7CisgICBpbnQgX19weXhfdF8y OworLSAgaW50IF9fcHl4X3RfMzsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAg UHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVM TDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3Rf MyA9IE5VTEw7CisrICBpbnQgX19weXhfdF80OworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisg ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18iLCAwKTsKKy0g IF9fUHl4X0lOQ1JFRihfX3B5eF92X2UpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo Il9mb3JtYXRfZm9yIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzMwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUyCisgICogCist ICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKToKKy0gKiAgICAgICAgIHNlbGYuY29kZSA9IGUg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFy KiBlcnJfYworLSAqICAgICAgICAgY2RlZiBpbnQgZV9pCistICovCistICBpZiAoX19QeXhfUHlP YmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb2RlLCBfX3B5eF92X2Up IDwgMCkgX19QWVhfRVJSKDAsIDMzMCwgX19weXhfTDFfZXJyb3IpCistCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMzCistICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIq IGVycl9jCistICogICAgICAgICBjZGVmIGludCBlX2kKKy0gKiAgICAgICAgIGlmIG5vdCBpc2lu c3RhbmNlKGUsIGJhc2VzdHJpbmcpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICAgICAgZV9pID0gZQorLSAqICAgICAgICAgICAgIHdpdGggbm9naWw6CisrICogICAg IGRlZiBfZm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6CisrICogICAgICAgICBpZiBpc2luc3RhbmNl KHZhbHVlLCBiYXNlc3RyaW5nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklORworKyAqICAgICAgICAgZWxpZiBpc2lu c3RhbmNlKHZhbHVlLCBib29sKToKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5QmFzZVN0 cmluZ19DaGVjayhfX3B5eF92X2UpOyAKKy0gIF9fcHl4X3RfMiA9ICgoIShfX3B5eF90XzEgIT0g MCkpICE9IDApOworKyAgX19weXhfdF8xID0gX19QeXhfUHlCYXNlU3RyaW5nX0NoZWNrKF9fcHl4 X3ZfdmFsdWUpOyAKKysgIF9fcHl4X3RfMiA9IChfX3B5eF90XzEgIT0gMCk7CisgICBpZiAoX19w eXhfdF8yKSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzQK Ky0gKiAgICAgICAgIGNkZWYgaW50IGVfaQorLSAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo ZSwgYmFzZXN0cmluZyk6CistICogICAgICAgICAgICAgZV9pID0gZSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAg ICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ1MworKyAqICAgICBkZWYgX2Zvcm1hdF9mb3Ioc2VsZiwgdmFs dWUpOgorKyAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisrICog ICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5HICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6CisrICog ICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxBRworICAqLworLSAgICBfX3B5eF90XzMg PSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl9lKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMg PT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAzMzQsIF9fcHl4 X0wxX2Vycm9yKQorLSAgICBfX3B5eF92X2VfaSA9IF9fcHl4X3RfMzsKKysgICAgX19QeXhfWERF Q1JFRihfX3B5eF9yKTsKKysgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfZm9ybWF0KE1QVl9GT1JNQVRfU1RSSU5HKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBf X1BZWF9FUlIoMCwgNDUzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMyk7CisrICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7CisrICAgIF9fcHl4X3RfMyA9IDA7Cisr ICAgIGdvdG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMzUKKy0gKiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUsIGJhc2VzdHJpbmcpOgor LSAqICAgICAgICAgICAgIGVfaSA9IGUKKy0gKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgIGVycl9jID0gbXB2 X2Vycm9yX3N0cmluZyhlX2kpCistICogICAgICAgICAgICAgZSA9IF9zdHJkZWMoZXJyX2MpCisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTIKKysgKiAKKysgKiAgICAg ZGVmIF9mb3JtYXRfZm9yKHNlbGYsIHZhbHVlKToKKysgKiAgICAgICAgIGlmIGlzaW5zdGFuY2Uo dmFsdWUsIGJhc2VzdHJpbmcpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5HCisrICogICAgICAgICBlbGlmIGlzaW5z dGFuY2UodmFsdWUsIGJvb2wpOgorICAqLworLSAgICB7CistICAgICAgICAjaWZkZWYgV0lUSF9U SFJFQUQKKy0gICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAgICAgICAgUHlfVU5CTE9D S19USFJFQURTCistICAgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAgICAgICAj ZW5kaWYKKy0gICAgICAgIC8qdHJ5OiovIHsKKysgIH0KKyAKKy0gICAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzNgorLSAqICAgICAgICAgICAgIGVfaSA9IGUKKy0g KiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgICAgICBlcnJfYyA9IG1w dl9lcnJvcl9zdHJpbmcoZV9pKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICAgICAgZSA9IF9zdHJkZWMoZXJyX2MpCistICogICAgICAgICBFeGNlcHRpb24uX19pbml0 X18oc2VsZiwgZSkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTQKKysg KiAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorKyAqICAgICAgICAg ICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklORworKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNl KHZhbHVlLCBib29sKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIHJldHVybiBNUFZfRk9STUFUX0ZMQUcKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2 YWx1ZSwgaW50KToKKyAgKi8KKy0gICAgICAgICAgX19weXhfdl9lcnJfYyA9IG1wdl9lcnJvcl9z dHJpbmcoX19weXhfdl9lX2kpOworLSAgICAgICAgfQorKyAgX19weXhfdF8zID0gKChQeU9iamVj dCopJlB5Qm9vbF9UeXBlKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOworKyAgX19weXhf dF8yID0gUHlPYmplY3RfSXNJbnN0YW5jZShfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzMpOyBpZiAo dW5saWtlbHkoX19weXhfdF8yID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigwLCA0NTQsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Cisr ICBfX3B5eF90XzEgPSAoX19weXhfdF8yICE9IDApOworKyAgaWYgKF9fcHl4X3RfMSkgeworIAor LSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzNQorLSAqICAgICAg ICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgYmFzZXN0cmluZyk6CistICogICAgICAgICAgICAgZV9p ID0gZQorLSAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkK Ky0gKiAgICAgICAgICAgICBlID0gX3N0cmRlYyhlcnJfYykKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ1NQorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFU X1NUUklORworKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKKysgKiAg ICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9GTEFHICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKKysgKiAgICAg ICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NAorICAqLworLSAgICAgICAgLypmaW5hbGx5 OiovIHsKKy0gICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAgICAjaWZkZWYg V0lUSF9USFJFQUQKKy0gICAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAgICAg ICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAg ICBnb3RvIF9fcHl4X0w2OworLSAgICAgICAgICB9CistICAgICAgICAgIF9fcHl4X0w2OjsKKy0g ICAgICAgIH0KKy0gICAgfQorKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgICBfX3B5 eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9GTEFH KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDU1LCBfX3B5eF9MMV9l cnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fcHl4X3IgPSBfX3B5 eF90XzM7CisrICAgIF9fcHl4X3RfMyA9IDA7CisrICAgIGdvdG8gX19weXhfTDA7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzcKKy0gKiAgICAgICAgICAgICB3 aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgICAgICBlcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmco ZV9pKQorLSAqICAgICAgICAgICAgIGUgPSBfc3RyZGVjKGVycl9jKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgZSkKKy0g KiAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1NAorKyAqICAgICAg ICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisrICogICAgICAgICAgICAgcmV0 dXJuIE1QVl9GT1JNQVRfU1RSSU5HCisrICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUs IGJvb2wpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmV0 dXJuIE1QVl9GT1JNQVRfRkxBRworKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBp bnQpOgorICAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNSwgX19w eXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMz NywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworLSAgICBf X3B5eF90XzYgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9lcnJfYyk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDMzNywgX19weXhfTDFfZXJyb3IpCist ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgICBfX3B5eF90XzcgPSBOVUxMOworLSAg ICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9f cHl4X3RfNSkpKSB7CistICAgICAgX19weXhfdF83ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhf dF81KTsKKy0gICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNykpIHsKKy0gICAgICAgIFB5T2JqZWN0 KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzUpOworLSAgICAgICAg X19QeXhfSU5DUkVGKF9fcHl4X3RfNyk7CistICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24p OworLSAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUsIGZ1bmN0aW9uKTsKKy0gICAg ICB9CistICAgIH0KKy0gICAgX19weXhfdF80ID0gKF9fcHl4X3RfNykgPyBfX1B5eF9QeU9iamVj dF9DYWxsMkFyZ3MoX19weXhfdF81LCBfX3B5eF90XzcsIF9fcHl4X3RfNikgOiBfX1B5eF9QeU9i amVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwgX19weXhfdF82KTsKKy0gICAgX19QeXhfWERFQ1JF RihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKKy0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9F UlIoMCwgMzM3LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7 CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworLSAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3ZfZSwgX19weXhfdF80KTsKKy0gICAgX19weXhfdF80ID0gMDsK KysgIH0KKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzMworLSAq ICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworLSAqICAgICAgICAgY2RlZiBpbnQgZV9p CistICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBiYXNlc3RyaW5nKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGVfaSA9IGUKKy0gKiAgICAgICAg ICAgICB3aXRoIG5vZ2lsOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1 NgorKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKKysgKiAgICAgICAg ICAgICByZXR1cm4gTVBWX0ZPUk1BVF9GTEFHCisrICogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo dmFsdWUsIGludCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NAorKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZh bHVlLCBmbG9hdCk6CisrICovCisrICBfX3B5eF90XzEgPSBQeUludF9DaGVjayhfX3B5eF92X3Zh bHVlKTsgCisrICBfX3B5eF90XzIgPSAoX19weXhfdF8xICE9IDApOworKyAgaWYgKF9fcHl4X3Rf MikgeworKworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDU3CisrICog ICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxBRworKyAqICAgICAgICAgZWxpZiBpc2lu c3RhbmNlKHZhbHVlLCBpbnQpOgorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0lO VDY0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0 YW5jZSh2YWx1ZSwgZmxvYXQpOgorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RP VUJMRQorKyAqLworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgICBfX3B5eF90XzMg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9JTlQ2NCk7IGlm ICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ1NywgX19weXhfTDFfZXJyb3Ip CisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgICBfX3B5eF9yID0gX19weXhfdF8z OworKyAgICBfX3B5eF90XzMgPSAwOworKyAgICBnb3RvIF9fcHl4X0wwOworKworKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDU2CisrICogICAgICAgICBlbGlmIGlzaW5z dGFuY2UodmFsdWUsIGJvb2wpOgorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0ZM QUcKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0lOVDY0 CisrICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKyAgKi8KKyAgIH0K KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzgKKy0gKiAgICAgICAg ICAgICAgICAgZXJyX2MgPSBtcHZfZXJyb3Jfc3RyaW5nKGVfaSkKKy0gKiAgICAgICAgICAgICBl ID0gX3N0cmRlYyhlcnJfYykKKy0gKiAgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBl KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogY2xhc3MgUHlNUFZFcnJv cihFeGNlcHRpb24pOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OAor KyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorKyAqICAgICAgICAgICAg IHJldHVybiBNUFZfRk9STUFUX0lOVDY0CisrICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFs dWUsIGZsb2F0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAg IHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQorKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZh bHVlLCAodHVwbGUsIGxpc3QpKToKKysgKi8KKysgIF9fcHl4X3RfMiA9IFB5RmxvYXRfQ2hlY2so X19weXhfdl92YWx1ZSk7IAorKyAgX19weXhfdF8xID0gKF9fcHl4X3RfMiAhPSAwKTsKKysgIGlm IChfX3B5eF90XzEpIHsKKysKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ1OQorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0lOVDY0CisrICogICAgICAg ICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKysgKiAgICAgICAgICAgICByZXR1cm4g TVBWX0ZPUk1BVF9ET1VCTEUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKToKKysgKiAgICAgICAgICAg ICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZCisrICovCisrICAgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CisrICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zv cm1hdChNUFZfRk9STUFUX0RPVUJMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDAsIDQ1OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMp OworKyAgICBfX3B5eF9yID0gX19weXhfdF8zOworKyAgICBfX3B5eF90XzMgPSAwOworKyAgICBn b3RvIF9fcHl4X0wwOworKworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDU4CisrICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6CisrICogICAgICAg ICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfSU5UNjQKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5j ZSh2YWx1ZSwgZmxvYXQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRE9VQkxFCisrICogICAgICAgICBlbGlmIGlzaW5zdGFu Y2UodmFsdWUsICh0dXBsZSwgbGlzdCkpOgorICAqLworLSAgX19weXhfdF81ID0gX19QeXhfUHlP YmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhj ZXB0aW9uKVswXSkpLCBfX3B5eF9uX3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkg X19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhf dF81KTsKKy0gIF9fcHl4X3RfNiA9IE5VTEw7CistICBfX3B5eF90XzMgPSAwOworLSAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkp IHsKKy0gICAgX19weXhfdF82ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF81KTsKKy0gICAg aWYgKGxpa2VseShfX3B5eF90XzYpKSB7CistICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNSk7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfNik7CistICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3RfNSwgZnVuY3Rpb24pOworLSAgICAgIF9fcHl4X3RfMyA9IDE7CistICAg IH0KKyAgIH0KKy0gICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKy0gIGlmIChQeUZ1bmN0aW9uX0No ZWNrKF9fcHl4X3RfNSkpIHsKKy0gICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhf dF82LCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfZX07CistICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5 RnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAyK19f cHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOCwgX19w eXhfTDFfZXJyb3IpCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICB9IGVsc2UKKy0gICNlbmRpZgor LSAgI2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwKKy0gIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25f Q2hlY2soX19weXhfdF81KSkgeworLSAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5 eF90XzYsIF9fcHl4X3Zfc2VsZiwgX19weXhfdl9lfTsKKy0gICAgX19weXhfdF80ID0gX19QeXhf UHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAy K19fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOCwg X19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICB9IGVsc2UKKy0gICNlbmRp ZgorLSAgeworLSAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfMyk7IGlmICh1 bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFfZXJyb3IpCist ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgICBpZiAoX19weXhfdF82KSB7CistICAg ICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzYpOyBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywg MCwgX19weXhfdF82KTsgX19weXhfdF82ID0gTlVMTDsKKy0gICAgfQorLSAgICBfX1B5eF9JTkNS RUYoX19weXhfdl9zZWxmKTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3NlbGYpOworLSAg ICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMCtfX3B5eF90XzMsIF9fcHl4X3Zfc2VsZik7 CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X2UpOworLSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3ZfZSk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfMywgX19w eXhfdl9lKTsKKy0gICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzUs IF9fcHl4X3RfNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAs IDMzOCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjAKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5j ZSh2YWx1ZSwgZmxvYXQpOgorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJM RQorKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9S TUFUX05PREVfQVJSQVkKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6 CisrICovCisrICBfX3B5eF90XzIgPSBQeVR1cGxlX0NoZWNrKF9fcHl4X3ZfdmFsdWUpOyAKKysg IF9fcHl4X3RfNCA9IChfX3B5eF90XzIgIT0gMCk7CisrICBpZiAoIV9fcHl4X3RfNCkgeworKyAg fSBlbHNlIHsKKysgICAgX19weXhfdF8xID0gX19weXhfdF80OworKyAgICBnb3RvIF9fcHl4X0w0 X2Jvb2xfYmlub3BfZG9uZTsKKyAgIH0KKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5 eF90XzUgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Cisr ICBfX3B5eF90XzQgPSBQeUxpc3RfQ2hlY2soX19weXhfdl92YWx1ZSk7IAorKyAgX19weXhfdF8y ID0gKF9fcHl4X3RfNCAhPSAwKTsKKysgIF9fcHl4X3RfMSA9IF9fcHl4X3RfMjsKKysgIF9fcHl4 X0w0X2Jvb2xfYmlub3BfZG9uZTo7CisrICBfX3B5eF90XzIgPSAoX19weXhfdF8xICE9IDApOwor KyAgaWYgKF9fcHl4X3RfMikgeworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMyOQorLSAqICAgICBjb2RlID0gTm9uZQorLSAqIAorLSAqICAgICBkZWYgX19pbml0X18o c2VsZiwgZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYu Y29kZSA9IGUKKy0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogZXJyX2MKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2MQorKyAqICAgICAgICAgICAgIHJldHVybiBN UFZfRk9STUFUX0RPVUJMRQorKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVw bGUsIGxpc3QpKToKKysgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZ ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5j ZSh2YWx1ZSwgZGljdCk6CisrICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9N QVAKKyAgKi8KKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19weXhfdF8zID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfTk9ERV9BUlJBWSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ2MSwgX19weXhfTDFfZXJy b3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgICBfX3B5eF9yID0gX19weXhf dF8zOworKyAgICBfX3B5eF90XzMgPSAwOworKyAgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVG KFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKKy0g IF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsK Ky0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Lk1QVkVycm9yLl9faW5p dF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBf X3B5eF9yID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9l KTsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0NjAKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwg ZmxvYXQpOgorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQorKyAqICAg ICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVf QVJSQVkKKysgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisrICovCisr ICB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NworLSAqIAorLSAq IGNsYXNzIF9SZXBseVVzZXJEYXRhKG9iamVjdCk6CistICogICAgIGRlZiBfX2luaXRfXyhzZWxm LCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5j b3VudGVyID0gMAorLSAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjQ2MgorKyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZh bHVlLCAodHVwbGUsIGxpc3QpKToKKysgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9O T0RFX0FSUkFZCisrICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JN QVRfTk9ERV9NQVAKKysgKiAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PTkUKKyAgKi8KKysg IF9fcHl4X3RfMiA9IFB5RGljdF9DaGVjayhfX3B5eF92X3ZhbHVlKTsgCisrICBfX3B5eF90XzEg PSAoX19weXhfdF8yICE9IDApOworKyAgaWYgKF9fcHl4X3RfMSkgeworIAorLS8qIFB5dGhvbiB3 cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTRfUmVwbHlVc2VyRGF0YV8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLworLXN0YXRp YyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVz ZXJEYXRhXzFfX2luaXRfXyA9IHsiX19pbml0X18iLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNG dW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVw bHlVc2VyRGF0YV8xX19pbml0X18sIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfTsKKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVz ZXJEYXRhXzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2Fy Z3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CistICBQeU9iamVjdCAqX19weXhfdl9zZWxmID0g MDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEgPSAwOworLSAgaW50IF9fcHl4X2xpbmVubyA9 IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhf Y2xpbmVubyA9IDA7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fICh3 cmFwcGVyKSIsIDApOworLSAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25h bWVzW10gPSB7Jl9fcHl4X25fc19zZWxmLCZfX3B5eF9uX3NfZGF0YSwwfTsKKy0gICAgUHlPYmpl Y3QqIHZhbHVlc1syXSA9IHswLDB9OworLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsK Ky0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3Nf YXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CistICAgICAgc3dpdGNoIChwb3Nf YXJncykgeworLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShf X3B5eF9hcmdzLCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNh c2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAg ICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQorLSAg ICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0Y2ggKHBv c19hcmdzKSB7CistICAgICAgICBjYXNlICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVz WzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3NlbGYp KSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxl X2Vycm9yOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMToK Ky0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3Ry KF9fcHl4X2t3ZHMsIF9fcHl4X25fc19kYXRhKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAg IGVsc2UgeworLSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18i LCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDM0NywgX19weXhfTDNfZXJyb3IpCistICAgICAg ICB9CistICAgICAgfQorLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAg ICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywg X19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9faW5pdF9fIikgPCAwKSkg X19QWVhfRVJSKDAsIDM0NywgX19weXhfTDNfZXJyb3IpCistICAgICAgfQorLSAgICB9IGVsc2Ug aWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0gMikgeworLSAgICAgIGdvdG8gX19w eXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgIH0gZWxzZSB7CistICAgICAgdmFsdWVzWzBdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKy0gICAgICB2YWx1ZXNbMV0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICB9CistICAgIF9fcHl4X3Zfc2VsZiA9 IHZhbHVlc1swXTsKKy0gICAgX19weXhfdl9kYXRhID0gdmFsdWVzWzFdOworLSAgfQorLSAgZ290 byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKy0gIF9fcHl4X0w1X2FyZ3R1cGxl X2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDEsIDIs IDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5 eF9MM19lcnJvcikKKy0gIF9fcHl4X0wzX2Vycm9yOjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2Ll9SZXBseVVzZXJEYXRhLl9faW5pdF9fIiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKKy0gIHJldHVybiBOVUxMOworLSAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNr aW5nX2RvbmU6OworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NF9SZXBseVVzZXJEYXRhX19faW5pdF9fKF9fcHl4X3NlbGYsIF9fcHl4X3Zfc2VsZiwgX19weXhf dl9kYXRhKTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV9f X2luaXRfXyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9kYXRhKSB7CistICBQeU9iamVjdCAqX19weXhf ciA9IE5VTEw7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgaW50IF9fcHl4X2xp bmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQg X19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0 X18iLCAwKTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDgKKy0g KiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOgorLSAqICAgICBkZWYgX19pbml0X18oc2Vs ZiwgZGF0YSk6CistICogICAgICAgICBzZWxmLmNvdW50ZXIgPSAwICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKy0gKiAgICAgICAgIHNl bGYub2JzZXJ2ZWQgPSBGYWxzZQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDYzCisrICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9BUlJBWQorKyAq ICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKysgKiAgICAgICAgICAgICBy ZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX01BUCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT05FCisrICogCisgICovCistICBpZiAoX19Q eXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyLCBf X3B5eF9pbnRfMCkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ4LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfTk9ERV9NQVApOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NjMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8zKTsKKysgICAgX19weXhfciA9IF9fcHl4X3RfMzsKKysgICAgX19weXhf dF8zID0gMDsKKysgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozNDkKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgorLSAq ICAgICAgICAgc2VsZi5jb3VudGVyID0gMAorLSAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLm9ic2VydmVkID0g RmFsc2UKKy0gKiAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2Mgor KyAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKToKKysgKiAg ICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZCisrICogICAgICAgICBlbGlm IGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9NQVAKKysgKiAgICAgICAgIHJl dHVybiBNUFZfRk9STUFUX05PTkUKKyAgKi8KKy0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRy U3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2RhdGEsIF9fcHl4X3ZfZGF0YSkgPCAwKSBfX1BZ WF9FUlIoMCwgMzQ5LCBfX3B5eF9MMV9lcnJvcikKKysgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozNTAKKy0gKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKy0g KiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKy0gKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBG YWxzZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDY0CisrICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRp Y3QpOgorKyAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfTUFQCisrICogICAg ICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT05FICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KyAgKiAKKy0gKiAgICAgZGVmIGFkZChzZWxmKToKKysgKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0 KiBfcHJlcF9ub2RlX2xpc3Qoc2VsZiwgdmFsdWVzKToKKyAgKi8KKy0gIGlmIChfX1B5eF9QeU9i amVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX29ic2VydmVkLCBQeV9GYWxz ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMzUwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X1hERUNS RUYoX19weXhfcik7CisrICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9m b3JtYXQoTVBWX0ZPUk1BVF9OT05FKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgNDY0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwor KyAgX19weXhfciA9IF9fcHl4X3RfMzsKKysgIF9fcHl4X3RfMyA9IDA7CisrICBnb3RvIF9fcHl4 X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NworKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1MQorKyAqICAgICAgICAgcmV0dXJuIGVy cgorICAqIAorLSAqIGNsYXNzIF9SZXBseVVzZXJEYXRhKG9iamVjdCk6CistICogICAgIGRlZiBf X2luaXRfXyhzZWxmLCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgc2VsZi5jb3VudGVyID0gMAorLSAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorKyAq ICAgICBkZWYgX2Zvcm1hdF9mb3Ioc2VsZiwgdmFsdWUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKToKKysg KiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJTkcKKyAgKi8KKyAKKyAgIC8qIGZ1 bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQ eV9Ob25lKTsKKy0gIGdvdG8gX19weXhfTDA7CisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVwbHlVc2VyRGF0YS5fX2luaXRf XyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzMpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIu bGlicy5tcHYuQ29udGV4dC5fZm9ybWF0X2ZvciIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVu bywgX19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7Cisg ICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKK0BAIC04NTEwLDExNjAgKzkxODUsMTE4NiBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVz ZXJEYXRhX19faW5pdF9fKENZVEhPTgorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTIKKy0gKiAgICAgICAgIHNlbGYub2JzZXJ2 ZWQgPSBGYWxzZQorLSAqIAorLSAqICAgICBkZWYgYWRkKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMQorKy8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjYKKysgKiAgICAgICAgIHJldHVybiBNUFZfRk9STUFU X05PTkUKKyAgKiAKKysgKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBfcHJlcF9ub2RlX2xpc3Qo c2VsZiwgdmFsdWVzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg Y2RlZiBtcHZfbm9kZSBub2RlCisrICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0Cisg ICovCisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzNhZGQoUHlPYmplY3QgKl9f cHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlN ZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0 YV8zYWRkID0geyJhZGQiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzE0X1JlcGx5VXNlckRhdGFfM2FkZCwgTUVUSF9PLCAwfTsKKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzNhZGQoUHlP YmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5T2JqZWN0 ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiYWRkICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzJhZGQoX19weXhf c2VsZiwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOworLQorLSAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBf X3B5eF9yOworLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzJhZGQoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19w eXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3Ig PSBOVUxMOworK3N0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9saXN0KHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3ZfdmFsdWVzKSB7CisrICBzdHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlOworKyAgZW51bSBt cHZfZm9ybWF0IF9fcHl4X3ZfZm9ybWF0OworKyAgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4 X3Zfbm9kZV9saXN0OworKyAgUHlPYmplY3QgKl9fcHl4X3ZfaSA9IE5VTEw7CisrICBQeU9iamVj dCAqX19weXhfdl92YWx1ZSA9IE5VTEw7CisrICBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhf cjsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8x ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworKyAgUHlfc3NpemVfdCBf X3B5eF90XzE7CisrICBpbnQgX19weXhfdF8yOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5V TEw7CisrICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKysgIFB5T2JqZWN0ICooKl9fcHl4 X3RfNSkoUHlPYmplY3QgKik7CisrICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKysgIFB5 T2JqZWN0ICpfX3B5eF90XzcgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7 CisrICBlbnVtIG1wdl9mb3JtYXQgX19weXhfdF85OworKyAgUHlfc3NpemVfdCBfX3B5eF90XzEw OworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFt ZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiYWRkIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX3By ZXBfbm9kZV9saXN0IiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzUzCistICogCistICogICAgIGRlZiBhZGQoc2VsZik6CistICogICAgICAgICBzZWxmLmNv dW50ZXIgKz0gMSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGRl ZiByZW1vdmUoc2VsZik6CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDY5 CisrICogICAgICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKKysgKiAgICAgICAgIGNkZWYgbXB2X2Zv cm1hdCBmb3JtYXQKKysgKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbm9kZV9saXN0ID0g PG1wdl9ub2RlX2xpc3QqPm1hbGxvYyhzaXplb2YobXB2X25vZGVfbGlzdCkpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIG5vZGVfbGlzdC5udW0gPSBsZW4odmFsdWVz KQorKyAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKKyAgKi8KKy0gIF9fcHl4X3Rf MSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY291 bnRlcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDM1MywgX19weXhf TDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMiA9IF9f UHl4X1B5SW50X0FkZE9iakMoX19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMSwgMCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDM1MywgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9z ZWxmLCBfX3B5eF9uX3NfY291bnRlciwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigwLCAzNTMs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9 IDA7CisrICBfX3B5eF92X25vZGVfbGlzdCA9ICgoc3RydWN0IG1wdl9ub2RlX2xpc3QgKiltYWxs b2MoKHNpemVvZihzdHJ1Y3QgbXB2X25vZGVfbGlzdCkpKSk7CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzUyCistICogICAgICAgICBzZWxmLm9ic2VydmVkID0gRmFs c2UKKy0gKiAKKy0gKiAgICAgZGVmIGFkZChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKKy0gKiAKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzAKKysgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBm b3JtYXQKKysgKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbm9kZV9saXN0ID0gPG1wdl9u b2RlX2xpc3QqPm1hbGxvYyhzaXplb2YobXB2X25vZGVfbGlzdCkpCisrICogICAgICAgICBub2Rl X2xpc3QubnVtID0gbGVuKHZhbHVlcykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKKysgKiAgICAgICAgIG5vZGVfbGlzdC5r ZXlzID0gTlVMTAorICAqLworKyAgX19weXhfdF8xID0gUHlPYmplY3RfTGVuZ3RoKF9fcHl4X3Zf dmFsdWVzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMSA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19Q WVhfRVJSKDAsIDQ3MCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF92X25vZGVfbGlzdC0+bnVt ID0gX19weXhfdF8xOworIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9y ID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0g IF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxp YnMubXB2Ll9SZXBseVVzZXJEYXRhLmFkZCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7CistICBfX3B5eF9MMDo7CistICBf X1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNTUKKy0gKiAgICAgICAgIHNlbGYuY291bnRlciArPSAxCistICogCistICogICAg IGRlZiByZW1vdmUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHNlbGYuY291bnRlciAtPSAxCistICogCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NDcxCisrICogICAgICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIG5vZGVfbGlzdCA9 IDxtcHZfbm9kZV9saXN0Kj5tYWxsb2Moc2l6ZW9mKG1wdl9ub2RlX2xpc3QpKQorKyAqICAgICAg ICAgbm9kZV9saXN0Lm51bSA9IGxlbih2YWx1ZXMpCisrICogICAgICAgICBub2RlX2xpc3QudmFs dWVzID0gTlVMTCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBub2Rl X2xpc3Qua2V5cyA9IE5VTEwKKysgKiAgICAgICAgIGlmIG5vZGVfbGlzdC5udW06CisgICovCisr ICBfX3B5eF92X25vZGVfbGlzdC0+dmFsdWVzID0gTlVMTDsKKyAKKy0vKiBQeXRob24gd3JhcHBl ciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0 X1JlcGx5VXNlckRhdGFfNXJlbW92ZShQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzVyZW1vdmUgPSB7InJlbW92ZSIs IChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2Vy RGF0YV81cmVtb3ZlLCBNRVRIX08sIDB9OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNXJlbW92ZShQeU9iamVjdCAqX19w eXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3Ig PSAwOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJyZW1vdmUgKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNHJlbW92ZShfX3B5eF9zZWxm LCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNv ZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4 X3I7CistfQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3MgorKyAqICAg ICAgICAgbm9kZV9saXN0Lm51bSA9IGxlbih2YWx1ZXMpCisrICogICAgICAgICBub2RlX2xpc3Qu dmFsdWVzID0gTlVMTAorKyAqICAgICAgICAgbm9kZV9saXN0LmtleXMgPSBOVUxMICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIG5vZGVfbGlzdC5udW06CisrICog ICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlz dC5udW0gKiBzaXplb2YobXB2X25vZGUpKQorKyAqLworKyAgX19weXhfdl9ub2RlX2xpc3QtPmtl eXMgPSBOVUxMOworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNHJlbW92ZShDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpf X3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CistICBQeU9iamVjdCAqX19weXhf ciA9IE5VTEw7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9f cHl4X3RfMSA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKy0gIGludCBf X3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwor LSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo InJlbW92ZSIsIDApOworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3Mwor KyAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKKysgKiAgICAgICAgIG5vZGVfbGlz dC5rZXlzID0gTlVMTAorKyAqICAgICAgICAgaWYgbm9kZV9saXN0Lm51bTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2 X25vZGUqPm1hbGxvYyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKKysgKiAgICAg ICAgIGZvciBpLCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKToKKysgKi8KKysgIF9fcHl4X3Rf MiA9IChfX3B5eF92X25vZGVfbGlzdC0+bnVtICE9IDApOworKyAgaWYgKF9fcHl4X3RfMikgewor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NgorLSAqIAorLSAqICAg ICBkZWYgcmVtb3ZlKHNlbGYpOgorLSAqICAgICAgICAgc2VsZi5jb3VudGVyIC09IDEgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDc0CisrICogICAgICAgICBub2RlX2xpc3Qua2V5cyA9IE5VTEwKKysgKiAg ICAgICAgIGlmIG5vZGVfbGlzdC5udW06CisrICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVl cyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUpKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBmb3IgaSwgdmFsdWUgaW4g ZW51bWVyYXRlKHZhbHVlcyk6CisrICogICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9ybWF0 X2Zvcih2YWx1ZSkKKysgKi8KKysgICAgX19weXhfdl9ub2RlX2xpc3QtPnZhbHVlcyA9ICgoc3Ry dWN0IG1wdl9ub2RlICopbWFsbG9jKChfX3B5eF92X25vZGVfbGlzdC0+bnVtICogKHNpemVvZihz dHJ1Y3QgbXB2X25vZGUpKSkpKTsKKysKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ3MworKyAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKKysgKiAgICAg ICAgIG5vZGVfbGlzdC5rZXlzID0gTlVMTAorKyAqICAgICAgICAgaWYgbm9kZV9saXN0Lm51bTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIG5vZGVfbGlzdC52 YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2Rl KSkKKysgKiAgICAgICAgIGZvciBpLCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKToKKysgKi8K KysgIH0KKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzUKKysgKiAg ICAgICAgIGlmIG5vZGVfbGlzdC5udW06CisrICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVl cyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUpKQor KyAqICAgICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9ybWF0 X2Zvcih2YWx1ZSkKKysgKiAgICAgICAgICAgICBub2RlID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFs dWUodmFsdWUsIGZvcm1hdCkKKysgKi8KKysgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMCk7Cisr ICBfX3B5eF90XzMgPSBfX3B5eF9pbnRfMDsKKysgIGlmIChsaWtlbHkoUHlMaXN0X0NoZWNrRXhh Y3QoX19weXhfdl92YWx1ZXMpKSB8fCBQeVR1cGxlX0NoZWNrRXhhY3QoX19weXhfdl92YWx1ZXMp KSB7CisrICAgIF9fcHl4X3RfNCA9IF9fcHl4X3ZfdmFsdWVzOyBfX1B5eF9JTkNSRUYoX19weXhf dF80KTsgX19weXhfdF8xID0gMDsKKysgICAgX19weXhfdF81ID0gTlVMTDsKKysgIH0gZWxzZSB7 CisrICAgIF9fcHl4X3RfMSA9IC0xOyBfX3B5eF90XzQgPSBQeU9iamVjdF9HZXRJdGVyKF9fcHl4 X3ZfdmFsdWVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDc1LCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgIF9fcHl4 X3RfNSA9IFB5X1RZUEUoX19weXhfdF80KS0+dHBfaXRlcm5leHQ7IGlmICh1bmxpa2VseSghX19w eXhfdF81KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCisrICB9CisrICBmb3Ig KDs7KSB7CisrICAgIGlmIChsaWtlbHkoIV9fcHl4X3RfNSkpIHsKKysgICAgICBpZiAobGlrZWx5 KFB5TGlzdF9DaGVja0V4YWN0KF9fcHl4X3RfNCkpKSB7CisrICAgICAgICBpZiAoX19weXhfdF8x ID49IFB5TGlzdF9HRVRfU0laRShfX3B5eF90XzQpKSBicmVhazsKKysgICAgICAgICNpZiBDWVRI T05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworKyAg ICAgICAgX19weXhfdF82ID0gUHlMaXN0X0dFVF9JVEVNKF9fcHl4X3RfNCwgX19weXhfdF8xKTsg X19QeXhfSU5DUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfMSsrOyBpZiAodW5saWtlbHkoMCA8IDAp KSBfX1BZWF9FUlIoMCwgNDc1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICAgICNlbHNlCisrICAg ICAgICBfX3B5eF90XzYgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF80LCBfX3B5eF90XzEpOyBf X3B5eF90XzErKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDc1LCBf X3B5eF9MMV9lcnJvcikKKysgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKyAgICAg ICAgI2VuZGlmCisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGlmIChfX3B5eF90XzEgPj0gUHlU dXBsZV9HRVRfU0laRShfX3B5eF90XzQpKSBicmVhazsKKysgICAgICAgICNpZiBDWVRIT05fQVNT VU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworKyAgICAgICAg X19weXhfdF82ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF90XzQsIF9fcHl4X3RfMSk7IF9fUHl4 X0lOQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19Q WVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgICAjZWxzZQorKyAgICAgICAg X19weXhfdF82ID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfNCwgX19weXhfdF8xKTsgX19weXhf dF8xKys7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhf TDFfZXJyb3IpCisrICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgICAgICAgICNl bmRpZgorKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICBfX3B5eF90XzYgPSBfX3B5eF90 XzUoX19weXhfdF80KTsKKysgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIHsKKysgICAg ICAgIFB5T2JqZWN0KiBleGNfdHlwZSA9IFB5RXJyX09jY3VycmVkKCk7CisrICAgICAgICBpZiAo ZXhjX3R5cGUpIHsKKysgICAgICAgICAgaWYgKGxpa2VseShfX1B5eF9QeUVycl9HaXZlbkV4Y2Vw dGlvbk1hdGNoZXMoZXhjX3R5cGUsIFB5RXhjX1N0b3BJdGVyYXRpb24pKSkgUHlFcnJfQ2xlYXIo KTsKKysgICAgICAgICAgZWxzZSBfX1BZWF9FUlIoMCwgNDc1LCBfX3B5eF9MMV9lcnJvcikKKysg ICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF82KTsKKysgICAgfQorKyAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X3ZhbHVl LCBfX3B5eF90XzYpOworKyAgICBfX3B5eF90XzYgPSAwOworKyAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF8zKTsKKysgICAgX19QeXhfWERFQ1JFRl9TRVQoX19weXhfdl9pLCBfX3B5eF90XzMpOwor KyAgICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9BZGRPYmpDKF9fcHl4X3RfMywgX19weXhfaW50 XzEsIDEsIDAsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzUs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNjsKKysgICAg X19weXhfdF82ID0gMDsKKysKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ3NgorKyAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxv Yyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKKysgKiAgICAgICAgIGZvciBpLCB2 YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKToKKysgKiAgICAgICAgICAgICBmb3JtYXQgPSBzZWxm Ll9mb3JtYXRfZm9yKHZhbHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICAgICAgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCisr ICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlc1tpXSA9IG5vZGUKKysgKi8KKysgICAgX19w eXhfdF83ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9z ZWxmKSwgX19weXhfbl9zX2Zvcm1hdF9mb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9f UFlYX0VSUigwLCA0NzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhf dF83KTsKKysgICAgX19weXhfdF84ID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF83KSkpIHsKKysgICAgICBfX3B5 eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzcpOworKyAgICAgIGlmIChsaWtlbHko X19weXhfdF84KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VU X0ZVTkNUSU9OKF9fcHl4X3RfNyk7CisrICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF84KTsK KysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3RfNywgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQorKyAgICBfX3B5eF90 XzYgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzcsIF9f cHl4X3RfOCwgX19weXhfdl92YWx1ZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfNywgX19weXhfdl92YWx1ZSk7CisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsgX19w eXhfdF84ID0gMDsKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg NDc2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgICBfX3B5eF90Xzkg PSAoKGVudW0gbXB2X2Zvcm1hdClfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9ybWF0KF9fcHl4 X3RfNikpOyBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0NzYs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKysgICAgX19weXhfdl9mb3JtYXQgPSBfX3B5eF90Xzk7CisrCisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzcKKysgKiAgICAgICAgIGZvciBpLCB2YWx1ZSBp biBlbnVtZXJhdGUodmFsdWVzKToKKysgKiAgICAgICAgICAgICBmb3JtYXQgPSBzZWxmLl9mb3Jt YXRfZm9yKHZhbHVlKQorKyAqICAgICAgICAgICAgIG5vZGUgPSBzZWxmLl9wcmVwX25hdGl2ZV92 YWx1ZSh2YWx1ZSwgZm9ybWF0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICAgICAgbm9kZV9saXN0LnZhbHVlc1tpXSA9IG5vZGUKKysgKiAgICAgICAgIHJldHVybiBu b2RlX2xpc3QKKysgKi8KKysgICAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfZm9ybWF0KF9fcHl4X3ZfZm9ybWF0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgNDc3LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nik7CisrICAgIF9fcHl4X3Zfbm9kZSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fcHJl cF9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzYpOwor KyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3OAorKyAqICAgICAgICAgICAgIGZvcm1h dCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCisrICogICAgICAgICAgICAgbm9kZSA9IHNlbGYu X3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCisrICogICAgICAgICAgICAgbm9kZV9s aXN0LnZhbHVlc1tpXSA9IG5vZGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgcmV0dXJuIG5vZGVfbGlzdAorICAqIAorICAqLworLSAgX19weXhfdF8xID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzU2LCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRf U3VidHJhY3RPYmpDKF9fcHl4X3RfMSwgX19weXhfaW50XzEsIDEsIDEsIDApOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzNTYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKy0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwg X19weXhfbl9zX2NvdW50ZXIsIF9fcHl4X3RfMikgPCAwKSBfX1BZWF9FUlIoMCwgMzU2LCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor KyAgICBfX3B5eF90XzEwID0gX19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9pKTsgaWYg KHVubGlrZWx5KChfX3B5eF90XzEwID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDQ3OCwgX19weXhfTDFfZXJyb3IpCisrICAgIChfX3B5eF92X25v ZGVfbGlzdC0+dmFsdWVzW19fcHl4X3RfMTBdKSA9IF9fcHl4X3Zfbm9kZTsKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTUKKy0gKiAgICAgICAgIHNlbGYuY291bnRl ciArPSAxCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzUKKysgKiAg ICAgICAgIGlmIG5vZGVfbGlzdC5udW06CisrICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVl cyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUpKQor KyAqICAgICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9ybWF0 X2Zvcih2YWx1ZSkKKysgKiAgICAgICAgICAgICBub2RlID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFs dWUodmFsdWUsIGZvcm1hdCkKKysgKi8KKysgIH0KKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQp OyBfX3B5eF90XzQgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc5CisrICogICAg ICAgICAgICAgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCisr ICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlc1tpXSA9IG5vZGUKKysgKiAgICAgICAgIHJl dHVybiBub2RlX2xpc3QgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorLSAqICAg ICBkZWYgcmVtb3ZlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBzZWxmLmNvdW50ZXIgLT0gMQorKyAqICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVw X25vZGVfbWFwKHNlbGYsIG1hcCk6CisrICovCisrICBfX3B5eF9yID0gX19weXhfdl9ub2RlX2xp c3Q7CisrICBnb3RvIF9fcHl4X0wwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ2NgorKyAqICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ORQorICAqIAorKyAq ICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbGlzdChzZWxmLCB2YWx1ZXMpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjZGVmIG1wdl9ub2RlIG5v ZGUKKysgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQKKyAgKi8KKyAKKyAgIC8qIGZ1 bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQ eV9Ob25lKTsKKy0gIGdvdG8gX19weXhfTDA7CisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CistICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVwbHlVc2VyRGF0YS5yZW1v dmUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9f cHl4X3IgPSBOVUxMOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzQpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOworKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzcpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOworKyAgX19Q eXhfV3JpdGVVbnJhaXNhYmxlKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5fcHJlcF9ub2Rl X2xpc3QiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAw KTsKKysgIF9fcHl4X3IgPSAwOworICAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19w eXhfcik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfaSk7CisrICBfX1B5eF9YREVDUkVGKF9f cHl4X3ZfdmFsdWUpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1 cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3 MAorLSAqIAorLSAqICAgICBAcHJvcGVydHkKKy0gKiAgICAgZGVmIGFwaV92ZXJzaW9uKHNlbGYp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1cm4gX0NBUElf TUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQSV9WRVJTSU9OCisrLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ4MQorKyAqICAgICAgICAgcmV0dXJuIG5vZGVfbGlzdAorICAqIAorKyAq ICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbWFwKHNlbGYsIG1hcCk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWYgY2hhciogY2tleQorKyAq ICAgICAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBsaXN0CisgICovCisgCistLyogUHl0aG9uIHdy YXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8xMWFwaV92ZXJzaW9uXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYp OyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8xMWFwaV92ZXJzaW9uXzFfX2dldF9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFy YXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyAod3JhcHBlciki LCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMTFhcGlfdmVyc2lvbl9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworLQorLSAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBf X3B5eF9yOworLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8xMWFwaV92ZXJzaW9uX19fZ2V0X18oQ1lUSE9OX1VOVVNFRCBzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYp IHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKytzdGF0aWMgc3RydWN0IG1wdl9ub2Rl X2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25vZGVf bWFwKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4 X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfbWFwKSB7CisrICBjaGFyICpfX3B5eF92X2NrZXk7 CisrICBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfdl9saXN0OworKyAgUHlPYmplY3QgKl9f cHl4X3Zfa2V5cyA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdl9pID0gTlVMTDsKKysgIFB5 T2JqZWN0ICpfX3B5eF92X2tleSA9IE5VTEw7CisrICBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19w eXhfcjsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhf dF8xID0gTlVMTDsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworICAgUHlPYmplY3Qg Kl9fcHl4X3RfMyA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKysgIFB5 X3NzaXplX3QgX19weXhfdF80OworKyAgaW50IF9fcHl4X3RfNTsKKysgIFB5T2JqZWN0ICooKl9f cHl4X3RfNikoUHlPYmplY3QgKik7CisrICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKKysg IFB5T2JqZWN0ICpfX3B5eF90XzggPSBOVUxMOworKyAgY2hhciAqX19weXhfdF85OworKyAgUHlf c3NpemVfdCBfX3B5eF90XzEwOworKyAgUHlfc3NpemVfdCBfX3B5eF90XzExOworICAgaW50IF9f cHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Cisg ICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19nZXRfXyIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9wcmVwX25vZGVf bWFwIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzcxCist ICogICAgIEBwcm9wZXJ0eQorLSAqICAgICBkZWYgYXBpX3ZlcnNpb24oc2VsZik6CistICogICAg ICAgICByZXR1cm4gX0NBUElfTUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQSV9WRVJTSU9OICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgQHByb3BlcnR5CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg0CisrICogICAgICAgICBjZGVmIGNoYXIq IGNrZXkKKysgKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbGlzdAorKyAqICAgICAgICAg bGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KG1hcC52YWx1ZXMoKSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAga2V5cyA9IG1hcC5rZXlzKCkKKysgKiAgICAgICAg IGlmIG5vdCBsZW4oa2V5cyk6CisgICovCistICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAg X19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19DQVBJX01JTk9S KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzcxLCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19DQVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMzcxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9tYXAsIF9fcHl4X25fc192YWx1 ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0ODQsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX3B5eF90XzMgPSBfX1B5 eF9QeUludF9Gcm9tX3Vuc2lnbmVkX2xvbmcoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X0NBUElfVkVSU0lPTik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDM3 MSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fcHl4 X3RfNCA9IFB5VHVwbGVfTmV3KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VS UigwLCAzNzEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Cist ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CistICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3Rf NCwgMCwgX19weXhfdF8xKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8yKTsKKy0gIFB5VHVw bGVfU0VUX0lURU0oX19weXhfdF80LCAxLCBfX3B5eF90XzIpOworLSAgX19QeXhfR0lWRVJFRihf X3B5eF90XzMpOworLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDIsIF9fcHl4X3RfMyk7 CistICBfX3B5eF90XzEgPSAwOworLSAgX19weXhfdF8yID0gMDsKKy0gIF9fcHl4X3RfMyA9IDA7 CistICBfX3B5eF9yID0gX19weXhfdF80OworLSAgX19weXhfdF80ID0gMDsKKy0gIGdvdG8gX19w eXhfTDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzcwCistICog CistICogICAgIEBwcm9wZXJ0eQorLSAqICAgICBkZWYgYXBpX3ZlcnNpb24oc2VsZik6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiBfQ0FQSV9NSU5PUiwg X0NBUElfTUFKT1IsIF9DQVBJX1ZFUlNJT04KKy0gKiAKKy0gKi8KKy0KKy0gIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLworLSAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzEpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworLSAgX19QeXhfWERFQ1JFRihf X3B5eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworLSAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5hcGlfdmVyc2lvbi5fX2dldF9fIiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9y ID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19Cist CistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3NAorLSAqIAorLSAqICAgICBA cHJvcGVydHkKKy0gKiAgICAgZGVmIG5hbWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICIiIlVuaXF1ZSBuYW1lIGZvciBldmVyeSBjb250ZXh0IGNyZWF0 ZWQuCistICogCistICovCistCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFtZV8xX19nZXRf XyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNG5hbWVfMV9fZ2V0X18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworLSAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X2dldF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF80bmFtZV9fX2dldF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworLQorLSAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0g IHJldHVybiBfX3B5eF9yOworLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFtZV9fX2dldF9fKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworLSAgY2hhciBj b25zdCAqX19weXhfdl9uYW1lOworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwor LSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8zID0g TlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVu byA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIs IDApOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM4MAorLSAqICAg ICAgICAgIiIiCistICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIG5hbWUKKy0gKiAgICAgICAg IGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBuYW1lID0gbXB2X2NsaWVudF9uYW1lKHNl bGYuX2N0eCkKKy0gKi8KKy0gICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUworLSAg aWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CistICAgIGlmICh1bmxpa2VseSghKF9f cHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKy0gICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fz c2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIoMCwgMzgwLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfMyA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICBfX3B5eF90XzMgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsK KysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhf dF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKKysgICAgICBfX1B5eF9JTkNS RUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlv bik7CisgICAgIH0KKyAgIH0KKy0gICNlbmRpZgorLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjM4MQorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBuYW1lCistICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgbmFtZSA9IG1wdl9jbGllbnRf bmFtZShzZWxmLl9jdHgpCistICogICAgICAgICByZXR1cm4gX3N0cmRlYyhuYW1lKQorLSAqLwor LSAgeworLSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9z YXZlOworLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVt ZW1iZXIoKTsKKy0gICAgICAjZW5kaWYKKy0gICAgICAvKnRyeToqLyB7CistCistICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzgyCistICogICAgICAgICBhc3NlcnQg c2VsZi5fY3R4CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG5hbWUg PSBtcHZfY2xpZW50X25hbWUoc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICByZXR1cm4gX3N0cmRlYyhuYW1lKQorLSAqIAorLSAqLworLSAgICAgICAg X19weXhfdl9uYW1lID0gbXB2X2NsaWVudF9uYW1lKF9fcHl4X3Zfc2VsZi0+X2N0eCk7CistICAg ICAgfQorLQorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODEKKy0g KiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZQorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYu X2N0eAorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgICAgIG5hbWUgPSBtcHZfY2xpZW50X25hbWUoc2VsZi5fY3R4KQorLSAq ICAgICAgICAgcmV0dXJuIF9zdHJkZWMobmFtZSkKKy0gKi8KKy0gICAgICAvKmZpbmFsbHk6Ki8g eworLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhS RUFECistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CistICAgICAgICAgIFB5X0JM T0NLX1RIUkVBRFMKKy0gICAgICAgICAgI2VuZGlmCistICAgICAgICAgIGdvdG8gX19weXhfTDU7 CistICAgICAgICB9CistICAgICAgICBfX3B5eF9MNTo7CistICAgICAgfQorLSAgfQorKyAgX19w eXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3Rf MiwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzIpOworKyAg X19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNDg0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7CisrICBfX3B5eF92X2xpc3QgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3By ZXBfbm9kZV9saXN0KF9fcHl4X3Zfc2VsZiwgX19weXhfdF8xKTsKKysgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM4MworLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBu YW1lID0gbXB2X2NsaWVudF9uYW1lKHNlbGYuX2N0eCkKKy0gKiAgICAgICAgIHJldHVybiBfc3Ry ZGVjKG5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgQHBy b3BlcnR5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg1CisrICogICAg ICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIGxpc3QKKysgKiAgICAgICAgIGxpc3QgPSBzZWxmLl9w cmVwX25vZGVfbGlzdChtYXAudmFsdWVzKCkpCisrICogICAgICAgICBrZXlzID0gbWFwLmtleXMo KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBpZiBub3QgbGVuKGtl eXMpOgorKyAqICAgICAgICAgICAgIHJldHVybiBsaXN0CisgICovCistICBfX1B5eF9YREVDUkVG KF9fcHl4X3IpOworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4 X25fc19zdHJkZWMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzODMs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF92X21hcCwgX19weXhfbl9zX2tleXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA0ODUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMik7CistICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9u YW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMzgzLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgX19weXhfdF80ID0gTlVM TDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF8yKSkpIHsKKy0gICAgX19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19w eXhfdF8yKTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CisrICBfX3B5eF90XzMgPSBO VUxMOworKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF8yKSkpIHsKKysgICAgX19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYoX19w eXhfdF8yKTsKKysgICAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7CisgICAgICAgUHlPYmplY3Qq IGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CistICAgICAgX19Q eXhfSU5DUkVGKF9fcHl4X3RfNCk7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7Cisg ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKyAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfMiwgZnVuY3Rpb24pOworICAgICB9CisgICB9CistICBfX3B5eF90XzEgPSAoX19weXhf dF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19w eXhfdF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAzODMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0g KF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhf dF8zKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzIpOworKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNDg1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cist ICBfX3B5eF9yID0gX19weXhfdF8xOworKyAgX19weXhfdl9rZXlzID0gX19weXhfdF8xOworICAg X19weXhfdF8xID0gMDsKKy0gIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Mzc0CistICogCistICogICAgIEBwcm9wZXJ0eQorLSAqICAgICBk ZWYgbmFtZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg IiIiVW5pcXVlIG5hbWUgZm9yIGV2ZXJ5IGNvbnRleHQgY3JlYXRlZC4KKy0gKiAKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODYKKysgKiAgICAgICAgIGxpc3QgPSBzZWxm Ll9wcmVwX25vZGVfbGlzdChtYXAudmFsdWVzKCkpCisrICogICAgICAgICBrZXlzID0gbWFwLmtl eXMoKQorKyAqICAgICAgICAgaWYgbm90IGxlbihrZXlzKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybiBsaXN0CisrICogICAgICAgICBsaXN0Lmtl eXMgPSA8Y2hhcioqPm1hbGxvYyhsaXN0Lm51bSkKKyAgKi8KKysgIF9fcHl4X3RfNCA9IFB5T2Jq ZWN0X0xlbmd0aChfX3B5eF92X2tleXMpOyBpZiAodW5saWtlbHkoX19weXhfdF80ID09ICgoUHlf c3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMCwgNDg2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNSA9ICgoIShfX3B5eF90XzQgIT0gMCkpICE9IDApOworKyAgaWYgKF9fcHl4X3RfNSkgewor IAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7 CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0Lm5hbWUu X19nZXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwor LSAgX19weXhfciA9IE5VTEw7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4 X3I7CistfQorLQorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODYKKy0gKiAK Ky0gKiAgICAgQHByb3BlcnR5CistICogICAgIGRlZiB0aW1lKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJJbnRlcm5hbCBtcHYgY2xpZW50IHRpbWUu CistICogCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODcKKysgKiAg ICAgICAgIGtleXMgPSBtYXAua2V5cygpCisrICogICAgICAgICBpZiBub3QgbGVuKGtleXMpOgor KyAqICAgICAgICAgICAgIHJldHVybiBsaXN0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgIGxpc3Qua2V5cyA9IDxjaGFyKio+bWFsbG9jKGxpc3QubnVtKQorKyAqICAg ICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6CisgICovCisrICAgIF9fcHl4X3Ig PSBfX3B5eF92X2xpc3Q7CisrICAgIGdvdG8gX19weXhfTDA7CisgCistLyogUHl0aG9uIHdyYXBw ZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF80dGltZV8xX19nZXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byov Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNHRpbWVfMV9fZ2V0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3Qg Kl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9 IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80dGltZV9fX2dldF9fKCgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zf c2VsZikpOworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg2CisrICog ICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QobWFwLnZhbHVlcygpKQorKyAqICAg ICAgICAga2V5cyA9IG1hcC5rZXlzKCkKKysgKiAgICAgICAgIGlmIG5vdCBsZW4oa2V5cyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByZXR1cm4gbGlzdAor KyAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2MobGlzdC5udW0pCisrICovCisr ICB9CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ4OAorKyAqICAgICAgICAgaWYgbm90IGxlbihrZXlzKToKKysg KiAgICAgICAgICAgICByZXR1cm4gbGlzdAorKyAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIq Kj5tYWxsb2MobGlzdC5udW0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgIGZvciBpLCBrZXkgaW4gZW51bWVyYXRlKGtleXMpOgorKyAqICAgICAgICAgICAgIGtleSA9 IF9zdHJlbmMoa2V5KQorKyAqLworKyAgX19weXhfdl9saXN0LT5rZXlzID0gKChjaGFyICoqKW1h bGxvYyhfX3B5eF92X2xpc3QtPm51bSkpOworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1lX19fZ2V0X18oc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKSB7CistICBp bnQ2NF90IF9fcHl4X3ZfdGltZTsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsK Ky0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUg PSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0ODkKKysgKiAgICAgICAgICAgICByZXR1cm4gbGlzdAorKyAqICAgICAgICAgbGlzdC5r ZXlzID0gPGNoYXIqKj5tYWxsb2MobGlzdC5udW0pCisrICogICAgICAgICBmb3IgaSwga2V5IGlu IGVudW1lcmF0ZShrZXlzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgICAgIGtleSA9IF9zdHJlbmMoa2V5KQorKyAqICAgICAgICAgICAgIGNrZXkgPSBrZXkKKysg Ki8KKysgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMCk7CisrICBfX3B5eF90XzEgPSBfX3B5eF9p bnRfMDsKKysgIGlmIChsaWtlbHkoUHlMaXN0X0NoZWNrRXhhY3QoX19weXhfdl9rZXlzKSkgfHwg UHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3Zfa2V5cykpIHsKKysgICAgX19weXhfdF8yID0gX19w eXhfdl9rZXlzOyBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsgX19weXhfdF80ID0gMDsKKysgICAg X19weXhfdF82ID0gTlVMTDsKKysgIH0gZWxzZSB7CisrICAgIF9fcHl4X3RfNCA9IC0xOyBfX3B5 eF90XzIgPSBQeU9iamVjdF9HZXRJdGVyKF9fcHl4X3Zfa2V5cyk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDQ4OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzIpOworKyAgICBfX3B5eF90XzYgPSBQeV9UWVBFKF9fcHl4X3RfMiktPnRw X2l0ZXJuZXh0OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0ODksIF9f cHl4X0wxX2Vycm9yKQorKyAgfQorKyAgZm9yICg7OykgeworKyAgICBpZiAobGlrZWx5KCFfX3B5 eF90XzYpKSB7CisrICAgICAgaWYgKGxpa2VseShQeUxpc3RfQ2hlY2tFeGFjdChfX3B5eF90XzIp KSkgeworKyAgICAgICAgaWYgKF9fcHl4X3RfNCA+PSBQeUxpc3RfR0VUX1NJWkUoX19weXhfdF8y KSkgYnJlYWs7CisrICAgICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lU SE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMKKysgICAgICAgIF9fcHl4X3RfMyA9IFB5TGlzdF9HRVRf SVRFTShfX3B5eF90XzIsIF9fcHl4X3RfNCk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOyBfX3B5 eF90XzQrKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAsIDQ4OSwgX19weXhfTDFf ZXJyb3IpCisrICAgICAgICAjZWxzZQorKyAgICAgICAgX19weXhfdF8zID0gUHlTZXF1ZW5jZV9J VEVNKF9fcHl4X3RfMiwgX19weXhfdF80KTsgX19weXhfdF80Kys7IGlmICh1bmxpa2VseSghX19w eXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ4OSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgICAgICNlbmRpZgorKyAgICAgIH0gZWxzZSB7Cisr ICAgICAgICBpZiAoX19weXhfdF80ID49IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdF8yKSkgYnJl YWs7CisrICAgICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FW T0lEX0JPUlJPV0VEX1JFRlMKKysgICAgICAgIF9fcHl4X3RfMyA9IFB5VHVwbGVfR0VUX0lURU0o X19weXhfdF8yLCBfX3B5eF90XzQpOyBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsgX19weXhfdF80 Kys7IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4X0wxX2Vycm9y KQorKyAgICAgICAgI2Vsc2UKKysgICAgICAgIF9fcHl4X3RfMyA9IFB5U2VxdWVuY2VfSVRFTShf X3B5eF90XzIsIF9fcHl4X3RfNCk7IF9fcHl4X3RfNCsrOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MykpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7CisrICAgICAgICAjZW5kaWYKKysgICAgICB9CisrICAgIH0gZWxzZSB7 CisrICAgICAgX19weXhfdF8zID0gX19weXhfdF82KF9fcHl4X3RfMik7CisrICAgICAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzMpKSB7CisrICAgICAgICBQeU9iamVjdCogZXhjX3R5cGUgPSBQeUVy cl9PY2N1cnJlZCgpOworKyAgICAgICAgaWYgKGV4Y190eXBlKSB7CisrICAgICAgICAgIGlmIChs aWtlbHkoX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19T dG9wSXRlcmF0aW9uKSkpIFB5RXJyX0NsZWFyKCk7CisrICAgICAgICAgIGVsc2UgX19QWVhfRVJS KDAsIDQ4OSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysg ICAgICB9CisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIH0KKysgICAgX19Q eXhfWERFQ1JFRl9TRVQoX19weXhfdl9rZXksIF9fcHl4X3RfMyk7CisrICAgIF9fcHl4X3RfMyA9 IDA7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9YREVDUkVGX1NF VChfX3B5eF92X2ksIF9fcHl4X3RfMSk7CisrICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Fk ZE9iakMoX19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ4OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzMpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsKKysgICAgX19w eXhfdF8xID0gX19weXhfdF8zOworKyAgICBfX3B5eF90XzMgPSAwOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM5NAorLSAqICAgICAgICAgIiIiCistICogICAgICAg ICBjZGVmIGludDY0X3QgdGltZQorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAg ICAgICAgIHRpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoc2VsZi5fY3R4KQorKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDkwCisrICogICAgICAgICBsaXN0LmtleXMgPSA8Y2hh cioqPm1hbGxvYyhsaXN0Lm51bSkKKysgKiAgICAgICAgIGZvciBpLCBrZXkgaW4gZW51bWVyYXRl KGtleXMpOgorKyAqICAgICAgICAgICAgIGtleSA9IF9zdHJlbmMoa2V5KSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgY2tleSA9IGtleQorKyAqICAgICAgICAg ICAgIGxpc3Qua2V5c1tpXSA9IDxjaGFyKj5tYWxsb2MobGVuKGtleSkgKyAxKQorICAqLworLSAg I2lmbmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCistICBpZiAodW5saWtlbHkoIVB5X09w dGltaXplRmxhZykpIHsKKy0gICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9 IDApKSkgeworLSAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAg ICAgIF9fUFlYX0VSUigwLCAzOTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfNywgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSgh X19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ5MCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzcpOworKyAgICBfX3B5eF90XzggPSBOVUxMOworKyAgICBpZiAoQ1lU SE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNykp KSB7CisrICAgICAgX19weXhfdF84ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF83KTsKKysg ICAgICBpZiAobGlrZWx5KF9fcHl4X3RfOCkpIHsKKysgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzcpOworKyAgICAgICAgX19QeXhfSU5D UkVGKF9fcHl4X3RfOCk7CisrICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAg ICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzcsIGZ1bmN0aW9uKTsKKysgICAgICB9CisgICAg IH0KKy0gIH0KKy0gICNlbmRpZgorKyAgICBfX3B5eF90XzMgPSAoX19weXhfdF84KSA/IF9fUHl4 X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdl9rZXkpIDog X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzcsIF9fcHl4X3Zfa2V5KTsKKysgICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworKyAgICBpZiAodW5saWtl bHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0OTAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9f cHl4X3RfNyA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9rZXksIF9fcHl4X3Rf Myk7CisrICAgIF9fcHl4X3RfMyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Mzk1CistICogICAgICAgICBjZGVmIGludDY0X3QgdGltZQorLSAqICAgICAgICAg YXNzZXJ0IHNlbGYuX2N0eAorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHRpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoc2Vs Zi5fY3R4KQorLSAqICAgICAgICAgcmV0dXJuIHRpbWUKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ5MQorKyAqICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUo a2V5cyk6CisrICogICAgICAgICAgICAga2V5ID0gX3N0cmVuYyhrZXkpCisrICogICAgICAgICAg ICAgY2tleSA9IGtleSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAg ICAgbGlzdC5rZXlzW2ldID0gPGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCisrICogICAgICAg ICAgICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkKKyAgKi8KKy0gIHsKKy0gICAgICAjaWZk ZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKy0gICAgICBQeV9V TkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAgICAg I2VuZGlmCistICAgICAgLyp0cnk6Ki8geworKyAgICBfX3B5eF90XzkgPSBfX1B5eF9QeU9iamVj dF9Bc1dyaXRhYmxlU3RyaW5nKF9fcHl4X3Zfa2V5KTsgaWYgKHVubGlrZWx5KCghX19weXhfdF85 KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ5MSwgX19weXhfTDFfZXJyb3Ip CisrICAgIF9fcHl4X3ZfY2tleSA9IF9fcHl4X3RfOTsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozOTYKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgK Ky0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgdGltZSA9IG1wdl9nZXRf dGltZV91cyhzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHJldHVybiB0aW1lCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 OTIKKysgKiAgICAgICAgICAgICBrZXkgPSBfc3RyZW5jKGtleSkKKysgKiAgICAgICAgICAgICBj a2V5ID0ga2V5CisrICogICAgICAgICAgICAgbGlzdC5rZXlzW2ldID0gPGNoYXIqPm1hbGxvYyhs ZW4oa2V5KSArIDEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICBzdHJjcHkobGlzdC5rZXlzW2ldLCBja2V5KQorKyAqICAgICAgICAgcmV0dXJuIGxpc3QKKysg Ki8KKysgICAgX19weXhfdF8xMCA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X2tleSk7IGlmICh1 bmxpa2VseShfX3B5eF90XzEwID09ICgoUHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMCwgNDky LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xMSA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6 ZV90KF9fcHl4X3ZfaSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8xMSA9PSAoUHlfc3NpemVfdCkt MSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0OTIsIF9fcHl4X0wxX2Vycm9y KQorKyAgICAoX19weXhfdl9saXN0LT5rZXlzW19fcHl4X3RfMTFdKSA9ICgoY2hhciAqKW1hbGxv YygoX19weXhfdF8xMCArIDEpKSk7CisrCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0OTMKKysgKiAgICAgICAgICAgICBja2V5ID0ga2V5CisrICogICAgICAgICAgICAg bGlzdC5rZXlzW2ldID0gPGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCisrICogICAgICAgICAg ICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgcmV0dXJuIGxpc3QKKyAgKiAKKyAgKi8KKy0gICAgICAgIF9fcHl4X3Zf dGltZSA9IG1wdl9nZXRfdGltZV91cyhfX3B5eF92X3NlbGYtPl9jdHgpOworLSAgICAgIH0KKysg ICAgX19weXhfdF8xMCA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3ZfaSk7IGlmICh1 bmxpa2VseSgoX19weXhfdF8xMCA9PSAoUHlfc3NpemVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQo KSkpIF9fUFlYX0VSUigwLCA0OTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAodm9pZCkoc3RyY3B5 KChfX3B5eF92X2xpc3QtPmtleXNbX19weXhfdF8xMF0pLCBfX3B5eF92X2NrZXkpKTsKKyAKKy0g ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk1CistICogICAgICAgICBj ZGVmIGludDY0X3QgdGltZQorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorLSAqICAgICAg ICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ICAgIHRpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoc2VsZi5fY3R4KQorLSAqICAgICAgICAgcmV0dXJu IHRpbWUKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4OQorKyAqICAg ICAgICAgICAgIHJldHVybiBsaXN0CisrICogICAgICAgICBsaXN0LmtleXMgPSA8Y2hhcioqPm1h bGxvYyhsaXN0Lm51bSkKKysgKiAgICAgICAgIGZvciBpLCBrZXkgaW4gZW51bWVyYXRlKGtleXMp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAga2V5ID0gX3N0 cmVuYyhrZXkpCisrICogICAgICAgICAgICAgY2tleSA9IGtleQorICAqLworLSAgICAgIC8qZmlu YWxseToqLyB7CistICAgICAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgICAgICAjaWZkZWYg V0lUSF9USFJFQUQKKy0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAg ICAgUHlfQkxPQ0tfVEhSRUFEUworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBf X3B5eF9MNTsKKy0gICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0w1OjsKKy0gICAgICB9CisgICB9 CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjM5NworLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAg ICAgICB0aW1lID0gbXB2X2dldF90aW1lX3VzKHNlbGYuX2N0eCkKKy0gKiAgICAgICAgIHJldHVy biB0aW1lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0OTQKKysgKiAgICAgICAgICAgICBsaXN0LmtleXNbaV0gPSA8Y2hh cio+bWFsbG9jKGxlbihrZXkpICsgMSkKKysgKiAgICAgICAgICAgICBzdHJjcHkobGlzdC5rZXlz W2ldLCBja2V5KQorKyAqICAgICAgICAgcmV0dXJuIGxpc3QgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqIAorLSAqICAgICBkZWYgc3VzcGVuZChzZWxmKToKKysgKiAgICAgY2RlZiBt cHZfbm9kZSBfcHJlcF9uYXRpdmVfdmFsdWUoc2VsZiwgdmFsdWUsIGZvcm1hdCk6CisgICovCist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJv bV9pbnQ2NF90KF9fcHl4X3ZfdGltZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDM5NywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gIF9fcHl4X3IgPSBfX3B5eF90XzE7CistICBfX3B5eF90XzEgPSAwOworKyAgX19weXhfciA9 IF9fcHl4X3ZfbGlzdDsKKyAgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Mzg2CistICogCistICogICAgIEBwcm9wZXJ0eQorLSAqICAgICBk ZWYgdGltZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg IiIiSW50ZXJuYWwgbXB2IGNsaWVudCB0aW1lLgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ4MQorKyAqICAgICAgICAgcmV0dXJuIG5vZGVfbGlzdAorICAqIAorKyAqICAg ICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbWFwKHNlbGYsIG1hcCk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWYgY2hhciogY2tleQorKyAqICAg ICAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBsaXN0CisgICovCisgCisgICAvKiBmdW5jdGlvbiBl eGl0IGNvZGUgKi8KKyAgIF9fcHl4X0wxX2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8xKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQu dGltZS5fX2dldF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFt ZSk7CistICBfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsK KysgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsKKysgIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgi dmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX3ByZXBfbm9kZV9tYXAiLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsKKysgIF9fcHl4X3IgPSAwOwor ICAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3Zfa2V5cyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfaSk7CisrICBfX1B5 eF9YREVDUkVGKF9fcHl4X3Zfa2V5KTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozOTkKKy0gKiAgICAgICAgIHJldHVybiB0aW1lCisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ5NgorKyAqICAgICAgICAgcmV0dXJuIGxpc3QKKyAgKiAKKy0gKiAg ICAgZGVmIHN1c3BlbmQoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgICIiIldyYXBzOiBtcHZfc3VzcGVuZCIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYu X2N0eAorKyAqICAgICBjZGVmIG1wdl9ub2RlIF9wcmVwX25hdGl2ZV92YWx1ZShzZWxmLCB2YWx1 ZSwgZm9ybWF0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2Rl ZiBtcHZfbm9kZSBub2RlCisrICogICAgICAgICBub2RlLmZvcm1hdCA9IGZvcm1hdAorICAqLwor IAorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMXN1c3BlbmQoUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCistc3RhdGljIGNo YXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9zdXNwZW5kW10gPSAi V3JhcHM6IG1wdl9zdXNwZW5kIjsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xc3VzcGVuZChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBD WVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0g MDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgic3VzcGVuZCAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfc3VzcGVuZCgoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKKy0KKy0gIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 CistICByZXR1cm4gX19weXhfcjsKKy19CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfc3VzcGVuZChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5T2JqZWN0 ICpfX3B5eF9yID0gTlVMTDsKKytzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZShzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X3ZhbHVlLCBQeU9iamVjdCAqX19weXhfdl9mb3JtYXQpIHsKKysgIHN0cnVjdCBt cHZfbm9kZSBfX3B5eF92X25vZGU7CisrICBzdHJ1Y3QgbXB2X25vZGUgX19weXhfcjsKKyAgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBlbnVtIG1wdl9mb3JtYXQgX19weXhfdF8xOwor KyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8zID0g TlVMTDsKKysgIGludCBfX3B5eF90XzQ7CisrICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsK KysgIFB5X3NzaXplX3QgX19weXhfdF82OworKyAgY2hhciBjb25zdCAqX19weXhfdF83OworKyAg aW50IF9fcHl4X3RfODsKKysgIGludDY0X3QgX19weXhfdF85OworKyAgZG91YmxlIF9fcHl4X3Rf MTA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVu YW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJzdXNwZW5kIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiX3ByZXBfbmF0aXZlX3ZhbHVlIiwgMCk7CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl92YWx1 ZSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDAxCistICogICAg IGRlZiBzdXNwZW5kKHNlbGYpOgorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zdXNwZW5kIiIi CistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgbXB2X3N1c3BlbmQo c2VsZi5fY3R4KQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5OAorKyAq ICAgICBjZGVmIG1wdl9ub2RlIF9wcmVwX25hdGl2ZV92YWx1ZShzZWxmLCB2YWx1ZSwgZm9ybWF0 KToKKysgKiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZQorKyAqICAgICAgICAgbm9kZS5mb3Jt YXQgPSBmb3JtYXQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgaWYg Zm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgorKyAqICAgICAgICAgICAgIHZhbHVlID0gX3N0 cmVuYyh2YWx1ZSkKKyAgKi8KKy0gICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUwor LSAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CistICAgIGlmICh1bmxpa2VseSgh KF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKy0gICAgICBQeUVycl9TZXROb25lKFB5RXhj X0Fzc2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIoMCwgNDAxLCBfX3B5eF9MMV9lcnJv cikKKy0gICAgfQorLSAgfQorLSAgI2VuZGlmCistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDAyCistICogICAgICAgICAiIiJXcmFwczogbXB2X3N1c3BlbmQiIiIKKy0g KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBtcHZfc3VzcGVuZChzZWxm Ll9jdHgpCistICogCistICovCistICB7CistICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAg ICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgUHlfVU5CTE9DS19USFJFQURTCistICAg ICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAgICNlbmRpZgorLSAgICAgIC8qdHJ5 OiovIHsKKysgIF9fcHl4X3RfMSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0FzX2Vu dW1fX21wdl9mb3JtYXQoX19weXhfdl9mb3JtYXQpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3Vy cmVkKCkpKSBfX1BZWF9FUlIoMCwgNDk4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3Zfbm9k ZS5mb3JtYXQgPSBfX3B5eF90XzE7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDAzCistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAg ICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG1wdl9zdXNwZW5kKHNlbGYuX2N0eCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICBkZWYgcmVzdW1lKHNlbGYp OgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5OQorKyAqICAgICAgICAg Y2RlZiBtcHZfbm9kZSBub2RlCisrICogICAgICAgICBub2RlLmZvcm1hdCA9IGZvcm1hdAorKyAq ICAgICAgICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5jKHZhbHVlKQorKyAq ICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxlbih2YWx1ZSkgKyAx KQorICAqLworLSAgICAgICAgbXB2X3N1c3BlbmQoX19weXhfdl9zZWxmLT5fY3R4KTsKKy0gICAg ICB9CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBW X0ZPUk1BVF9TVFJJTkcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0 OTksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX3B5 eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X2Zvcm1hdCwgX19weXhfdF8yLCBQ eV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMCwgNDk5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNU cnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAs IDQ5OSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKKysgIGlmIChfX3B5eF90XzQpIHsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NDAyCistICogICAgICAgICAiIiJXcmFwczogbXB2X3N1c3BlbmQi IiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIHdpdGggbm9naWw6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBtcHZfc3VzcGVu ZChzZWxmLl9jdHgpCistICogCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo1MDAKKysgKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0CisrICogICAgICAgICBpZiBm b3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CisrICogICAgICAgICAgICAgdmFsdWUgPSBfc3Ry ZW5jKHZhbHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAg bm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCisrICogICAgICAg ICAgICAgc3RyY3B5KG5vZGUudS5zdHJpbmcsIHZhbHVlKQorICAqLworLSAgICAgIC8qZmluYWxs eToqLyB7CistICAgICAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgICAgICAjaWZkZWYgV0lU SF9USFJFQUQKKy0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAg UHlfQkxPQ0tfVEhSRUFEUworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5 eF9MNTsKKy0gICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0w1OjsKKysgICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1MDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdF81ID0gTlVMTDsKKysgICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworKyAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Cisr ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CisrICAgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzUpOworKyAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAg ICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisgICAgICAgfQorLSAg fQorKyAgICB9CisrICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3Rf Q2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF81LCBfX3B5eF92X3ZhbHVlKSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X3ZhbHVlKTsKKysgICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCA1MDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8zKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl92YWx1ZSwgX19weXhfdF8zKTsK KysgICAgX19weXhfdF8zID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozOTkKKy0gKiAgICAgICAgIHJldHVybiB0aW1lCistICogCistICogICAgIGRlZiBzdXNw ZW5kKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJX cmFwczogbXB2X3N1c3BlbmQiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwMQorKyAqICAgICAgICAgaWYgZm9y bWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgorKyAqICAgICAgICAgICAgIHZhbHVlID0gX3N0cmVu Yyh2YWx1ZSkKKysgKiAgICAgICAgICAgICBub2RlLnUuc3RyaW5nID0gPGNoYXIqPm1hbGxvYyhs ZW4odmFsdWUpICsgMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIHN0cmNweShub2RlLnUuc3RyaW5nLCB2YWx1ZSkKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0 ID09IE1QVl9GT1JNQVRfRkxBRzoKKyAgKi8KKysgICAgX19weXhfdF82ID0gUHlPYmplY3RfTGVu Z3RoKF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoX19weXhfdF82ID09ICgoUHlfc3NpemVf dCktMSkpKSBfX1BZWF9FUlIoMCwgNTAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdl9u b2RlLnUuc3RyaW5nID0gKChjaGFyICopbWFsbG9jKChfX3B5eF90XzYgKyAxKSkpOworIAorLSAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5D UkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0g IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuc3VzcGVuZCIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhf ciA9IE5VTEw7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKy0g IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQor LQorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MDUKKy0gKiAgICAgICAgICAg ICBtcHZfc3VzcGVuZChzZWxmLl9jdHgpCistICogCistICogICAgIGRlZiByZXN1bWUoc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZf cmVzdW1lIiIiCistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDIKKysgKiAgICAgICAgICAgICB2YWx1ZSA9IF9zdHJl bmModmFsdWUpCisrICogICAgICAgICAgICAgbm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2Mo bGVuKHZhbHVlKSArIDEpCisrICogICAgICAgICAgICAgc3RyY3B5KG5vZGUudS5zdHJpbmcsIHZh bHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBlbGlmIGZvcm1h dCA9PSBNUFZfRk9STUFUX0ZMQUc6CisrICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlm IHZhbHVlIGVsc2UgMAorICAqLworKyAgICBfX3B5eF90XzcgPSBfX1B5eF9QeU9iamVjdF9Bc1N0 cmluZyhfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF83KSAmJiBQeUVycl9P Y2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDUwMiwgX19weXhfTDFfZXJyb3IpCisrICAgICh2b2lk KShzdHJjcHkoX19weXhfdl9ub2RlLnUuc3RyaW5nLCBfX3B5eF90XzcpKTsKKyAKKy0vKiBQeXRo b24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzNyZXN1bWUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCistc3RhdGljIGNoYXIgX19weXhfZG9j Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8ycmVzdW1lW10gPSAiV3JhcHM6IG1wdl9y ZXN1bWUiOworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzNyZXN1bWUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQ eU9iamVjdCAqdW51c2VkKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJlc3Vt ZSAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMnJlc3VtZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19w eXhfcjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTkKKysg KiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZQorKyAqICAgICAgICAgbm9kZS5mb3JtYXQgPSBm b3JtYXQKKysgKiAgICAgICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHZhbHVlID0gX3N0cmVuYyh2 YWx1ZSkKKysgKiAgICAgICAgICAgICBub2RlLnUuc3RyaW5nID0gPGNoYXIqPm1hbGxvYyhsZW4o dmFsdWUpICsgMSkKKysgKi8KKysgICAgZ290byBfX3B5eF9MMzsKKysgIH0KKyAKKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8ycmVzdW1l KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zf c2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19w eXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoInJlc3VtZSIsIDApOworKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjUwMworKyAqICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hh cio+bWFsbG9jKGxlbih2YWx1ZSkgKyAxKQorKyAqICAgICAgICAgICAgIHN0cmNweShub2RlLnUu c3RyaW5nLCB2YWx1ZSkKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxB RzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIG5vZGUudS5m bGFnID0gMSBpZiB2YWx1ZSBlbHNlIDAKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9G T1JNQVRfSU5UNjQ6CisrICovCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9GTEFHKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBf X1BZWF9FUlIoMCwgNTAzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzMpOworKyAgX19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQs IF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUwMywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIF9fcHl4X3RfNCA9IF9fUHl4 X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF80IDwgMCkp IF9fUFlYX0VSUigwLCA1MDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICBpZiAoX19weXhfdF80KSB7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDA3CistICogICAgIGRlZiByZXN1bWUoc2VsZik6 CistICogICAgICAgICAiIiJXcmFwczogbXB2X3Jlc3VtZSIiIgorLSAqICAgICAgICAgYXNzZXJ0 IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB3aXRo IG5vZ2lsOgorLSAqICAgICAgICAgICAgIG1wdl9yZXN1bWUoc2VsZi5fY3R4KQorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA0CisrICogICAgICAgICAgICAgc3RyY3B5 KG5vZGUudS5zdHJpbmcsIHZhbHVlKQorKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZP Uk1BVF9GTEFHOgorKyAqICAgICAgICAgICAgIG5vZGUudS5mbGFnID0gMSBpZiB2YWx1ZSBlbHNl IDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZWxpZiBmb3JtYXQg PT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKysgKiAgICAgICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1 ZQorICAqLworLSAgI2lmbmRlZiBDWVRIT05fV0lUSE9VVF9BU1NFUlRJT05TCistICBpZiAodW5s aWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKy0gICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9z ZWxmLT5fY3R4ICE9IDApKSkgeworLSAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9u RXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCA0MDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl92YWx1ZSk7IGlmICh1bmxp a2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwNCwgX19weXhfTDFfZXJyb3IpCisr ICAgIGlmIChfX3B5eF90XzQpIHsKKysgICAgICBfX3B5eF90XzggPSAxOworKyAgICB9IGVsc2Ug eworKyAgICAgIF9fcHl4X3RfOCA9IDA7CisgICAgIH0KKysgICAgX19weXhfdl9ub2RlLnUuZmxh ZyA9IF9fcHl4X3RfODsKKysKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjUwMworKyAqICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxlbih2 YWx1ZSkgKyAxKQorKyAqICAgICAgICAgICAgIHN0cmNweShub2RlLnUuc3RyaW5nLCB2YWx1ZSkK KysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIG5vZGUudS5mbGFnID0gMSBpZiB2YWx1 ZSBlbHNlIDAKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6Cisr ICovCisrICAgIGdvdG8gX19weXhfTDM7CisgICB9CistICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MDgKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZf cmVzdW1lIiIiCistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAgICB3aXRo IG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgbXB2 X3Jlc3VtZShzZWxmLl9jdHgpCistICogCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTA1CisrICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6Cisr ICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVsc2UgMAorKyAqICAgICAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlCisrICogICAgICAg ICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKyAgKi8KKy0gIHsKKy0gICAgICAj aWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKy0gICAgICBQ eV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAg ICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8geworKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfSU5UNjQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA1MDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09U UkVGKF9fcHl4X3RfMik7CisrICBfX3B5eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5 eF92X2Zvcm1hdCwgX19weXhfdF8yLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTA1LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhf dF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5 eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwNSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIGlmIChfX3B5eF90XzQpIHsKKyAK Ky0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MDkKKy0gKiAgICAg ICAgIGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAg ICAgICAgbXB2X3Jlc3VtZShzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAKKy0gKiAgICAgQF9lcnJvcnMKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjUwNgorKyAqICAgICAgICAgICAgIG5vZGUudS5mbGFnID0gMSBpZiB2YWx1ZSBlbHNl IDAKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6CisrICogICAg ICAgICAgICAgbm9kZS51LmludDY0ID0gdmFsdWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisrICogICAg ICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQorICAqLworLSAgICAgICAgbXB2X3Jlc3Vt ZShfX3B5eF92X3NlbGYtPl9jdHgpOworLSAgICAgIH0KKysgICAgX19weXhfdF85ID0gX19QeXhf UHlJbnRfQXNfaW50NjRfdChfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KChfX3B5eF90Xzkg PT0gKChpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA1MDYs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF92X25vZGUudS5pbnQ2NCA9IF9fcHl4X3RfOTsK KyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDA4CistICogICAg ICAgICAiIiJXcmFwczogbXB2X3Jlc3VtZSIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgICAgIG1wdl9yZXN1bWUoc2VsZi5fY3R4KQorLSAqIAorKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA1CisrICogICAgICAgICBlbGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX0ZMQUc6CisrICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZh bHVlIGVsc2UgMAorKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2 NCA9IHZhbHVlCisrICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToK KyAgKi8KKy0gICAgICAvKmZpbmFsbHk6Ki8geworLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sK Ky0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxf Rm9yZ2V0KCk7CistICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgI2VuZGlm CistICAgICAgICAgIGdvdG8gX19weXhfTDU7CistICAgICAgICB9CistICAgICAgICBfX3B5eF9M NTo7CistICAgICAgfQorKyAgICBnb3RvIF9fcHl4X0wzOworICAgfQorIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQwNQorLSAqICAgICAgICAgICAgIG1wdl9zdXNwZW5k KHNlbGYuX2N0eCkKKy0gKiAKKy0gKiAgICAgZGVmIHJlc3VtZShzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9yZXN1bWUiIiIKKy0g KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1MDcKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6 CisrICogICAgICAgICAgICAgbm9kZS51LmludDY0ID0gdmFsdWUKKysgKiAgICAgICAgIGVsaWYg Zm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQorKyAqICAgICAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorICAqLworKyAgX19weXhfdF8zID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfRE9VQkxFKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTA3LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgX19weXhfdF8yID0gUHlPYmplY3RfUmlj aENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5eF9YR09UUkVG KF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUwNywg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBpZiAo dW5saWtlbHkoX19weXhfdF80IDwgMCkpIF9fUFlYX0VSUigwLCA1MDcsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICBpZiAoX19w eXhfdF80KSB7CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQ eV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworLSAgX19w eXhfTDFfZXJyb3I6OworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYu Q29udGV4dC5yZXN1bWUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworLSAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVS RUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVy biBfX3B5eF9yOworLX0KKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUw OAorKyAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlCisrICogICAgICAgICBlbGlm IGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKysgKiAgICAgICAgICAgICBub2RlLnUuZG91 YmxlXyA9IHZhbHVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGVs aWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKKysgKiAgICAgICAgICAgICBub2Rl LnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KHZhbHVlKQorKyAqLworKyAgICBfX3B5eF90 XzEwID0gX19weXhfUHlGbG9hdF9Bc0RvdWJsZShfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5 KChfX3B5eF90XzEwID09IChkb3VibGUpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9F UlIoMCwgNTA4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdl9ub2RlLnUuZG91YmxlXyA9 IF9fcHl4X3RfMTA7CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQxMgor LSAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgcmVxdWVzdF9ldmVudChzZWxmLCBl dmVudCwgZW5hYmxlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg IiIiRW5hYmxlIG9yIGRpc2FibGUgYSBnaXZlbiBldmVudC4KKy0gKiAKKysgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwNworKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0g TVBWX0ZPUk1BVF9JTlQ2NDoKKysgKiAgICAgICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1ZQor KyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBub2RlLnUuZG91YmxlXyA9IHZhbHVl CisrICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6CisgICov CistCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF81cmVxdWVzdF9ldmVudChQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAv KnByb3RvKi8KKy1zdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzRyZXF1ZXN0X2V2ZW50W10gPSAiRW5hYmxlIG9yIGRpc2FibGUgYSBnaXZlbiBldmVu dC5cblxuICAgICAgICBBcmd1bWVudHM6XG4gICAgICAgIGV2ZW50IC0gU2VlIEV2ZW50c1xuICAg ICAgICBlbmFibGUgLSBUcnVlIHRvIGVuYWJsZSwgRmFsc2UgdG8gZGlzYWJsZVxuXG4gICAgICAg IFdyYXBzOiBtcHZfcmVxdWVzdF9ldmVudFxuICAgICAgICAiOworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzVyZXF1ZXN0X2V2ZW50KFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19w eXhfa3dkcykgeworLSAgUHlPYmplY3QgKl9fcHl4X3ZfZXZlbnQgPSAwOworLSAgUHlPYmplY3Qg Kl9fcHl4X3ZfZW5hYmxlID0gMDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29uc3Qg Y2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwor LSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK Ky0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJyZXF1ZXN0X2V2ZW50ICh3cmFwcGVyKSIs IDApOworLSAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7 Jl9fcHl4X25fc19ldmVudCwmX19weXhfbl9zX2VuYWJsZSwwfTsKKy0gICAgUHlPYmplY3QqIHZh bHVlc1syXSA9IHswLDB9OworLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKKy0gICAg ICBQeV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9 IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CistICAgICAgc3dpdGNoIChwb3NfYXJncykg eworLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6 IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAgICAgIGRl ZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQorLSAgICAgIGt3 X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdz KSB7CistICAgICAgICBjYXNlICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0g X19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2V2ZW50KSkgIT0g MCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJv cjsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6CistICAg ICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5 eF9rd2RzLCBfX3B5eF9uX3NfZW5hYmxlKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVs c2UgeworLSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgicmVxdWVzdF9ldmVu dCIsIDEsIDIsIDIsIDEpOyBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MM19lcnJvcikKKy0gICAg ICAgIH0KKy0gICAgICB9CistICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAg ICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2Rz LCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAicmVxdWVzdF9ldmVudCIp IDwgMCkpIF9fUFlYX0VSUigwLCA0MTIsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAgIH0KKy0gICAg fSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9IDIpIHsKKy0gICAgICBn b3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICB9IGVsc2UgeworLSAgICAgIHZhbHVl c1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgdmFsdWVzWzFd ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgfQorLSAgICBfX3B5eF92 X2V2ZW50ID0gdmFsdWVzWzBdOworLSAgICBfX3B5eF92X2VuYWJsZSA9IHZhbHVlc1sxXTsKKysg ICAgZ290byBfX3B5eF9MMzsKKyAgIH0KKy0gIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNr aW5nX2RvbmU7CistICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFy Z3R1cGxlSW52YWxpZCgicmVxdWVzdF9ldmVudCIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUo X19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MM19lcnJvcikKKy0gIF9fcHl4 X0wzX2Vycm9yOjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNv bnRleHQucmVxdWVzdF9ldmVudCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhf ZmlsZW5hbWUpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4g TlVMTDsKKy0gIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNHJlcXVlc3RfZXZlbnQo KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhf dl9zZWxmKSwgX19weXhfdl9ldmVudCwgX19weXhfdl9lbmFibGUpOworLQorLSAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJl dHVybiBfX3B5eF9yOworLX0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF80cmVxdWVzdF9ldmVudChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X2V2ZW50LCBQeU9iamVjdCAqX19weXhfdl9lbmFibGUpIHsKKy0gIGludCBfX3B5eF92X2Vu YWJsZV9pOworLSAgaW50IF9fcHl4X3ZfZXJyOworLSAgZW51bSBtcHZfZXZlbnRfaWQgX19weXhf dl9ldmVudF9pZDsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCistICBpbnQgX19weXhfdF8xOworLSAgaW50IF9fcHl4X3RfMjsKKy0g IGVudW0gbXB2X2V2ZW50X2lkIF9fcHl4X3RfMzsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBO VUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxl bmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgicmVxdWVzdF9ldmVudCIsIDApOworKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjUwOQorKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1B VF9ET1VCTEU6CisrICogICAgICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQorKyAqICAg ICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVw X25vZGVfbGlzdCh2YWx1ZSkKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRf Tk9ERV9NQVA6CisrICovCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21w dl9mb3JtYXQoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgNTA5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworKyAgX19weXhfdF8zID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3Jt YXQsIF9fcHl4X3RfMiwgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7IGlmICh1bmxp a2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUwOSwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fcHl4X3RfNCA9IF9f UHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoX19weXhfdF80IDwg MCkpIF9fUFlYX0VSUigwLCA1MDksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICBpZiAoX19weXhfdF80KSB7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDIxCistICogICAgICAgICBXcmFwczogbXB2 X3JlcXVlc3RfZXZlbnQKKy0gKiAgICAgICAgICIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYu X2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmIGludCBl bmFibGVfaSA9IDEgaWYgZW5hYmxlIGVsc2UgMAorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTAKKysgKiAgICAgICAgICAg ICBub2RlLnUuZG91YmxlXyA9IHZhbHVlCisrICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZf Rk9STUFUX05PREVfQVJSQVk6CisrICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9w cmVwX25vZGVfbGlzdCh2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKysgKiAgICAgICAgICAg ICBub2RlLnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9tYXAodmFsdWUpCisgICovCistICAjaWZu ZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKKy0gIGlmICh1bmxpa2VseSghUHlfT3B0aW1p emVGbGFnKSkgeworLSAgICBpZiAodW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkp KSB7CistICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7CistICAgICAg X19QWVhfRVJSKDAsIDQyMSwgX19weXhfTDFfZXJyb3IpCistICAgIH0KKy0gIH0KKy0gICNlbmRp ZgorKyAgICBfX3B5eF92X25vZGUudS5saXN0ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYikt Pl9wcmVwX25vZGVfbGlzdChfX3B5eF92X3NlbGYsIF9fcHl4X3ZfdmFsdWUpOworIAorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyMgorLSAqICAgICAgICAgIiIiCistICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAgICBjZGVmIGludCBlbmFibGVfaSA9 IDEgaWYgZW5hYmxlIGVsc2UgMCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBjZGVmIGludCBlcnIKKy0gKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lkIGV2ZW50X2lk ID0gZXZlbnQKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwOQorKyAq ICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisrICogICAgICAgICAg ICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQorKyAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBW X0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbGlzdCh2YWx1ZSkKKysgKiAg ICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6CisgICovCistICBfX3B5 eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9lbmFibGUpOyBpZiAodW5saWtl bHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA0MjIsIF9fcHl4X0wxX2Vycm9yKQorLSAg aWYgKF9fcHl4X3RfMikgeworLSAgICBfX3B5eF90XzEgPSAxOworLSAgfSBlbHNlIHsKKy0gICAg X19weXhfdF8xID0gMDsKKysgICAgZ290byBfX3B5eF9MMzsKKyAgIH0KKy0gIF9fcHl4X3ZfZW5h YmxlX2kgPSBfX3B5eF90XzE7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDI0CistICogICAgICAgICBjZGVmIGludCBlbmFibGVfaSA9IDEgaWYgZW5hYmxlIGVsc2Ug MAorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCistICogICAgICAgICBjZGVmIG1wdl9ldmVudF9p ZCBldmVudF9pZCA9IGV2ZW50ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2X3JlcXVlc3RfZXZlbnQo c2VsZi5fY3R4LCBldmVudF9pZCwgZW5hYmxlX2kpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTExCisrICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05P REVfQVJSQVk6CisrICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVf bGlzdCh2YWx1ZSkKKysgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9N QVA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBub2RlLnUu bGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9tYXAodmFsdWUpCisrICogICAgICAgICBlbHNlOgorICAq LworLSAgX19weXhfdF8zID0gKChlbnVtIG1wdl9ldmVudF9pZClfX1B5eF9QeUludF9Bc19lbnVt X19tcHZfZXZlbnRfaWQoX19weXhfdl9ldmVudCkpOyBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCA0MjQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdl9ldmVu dF9pZCA9IF9fcHl4X3RfMzsKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9f bXB2X2Zvcm1hdChNUFZfRk9STUFUX05PREVfTUFQKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOworKyAgX19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3Jt YXQsIF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUxMSwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIF9fcHl4X3RfNCA9IF9f UHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF80IDwg MCkpIF9fUFlYX0VSUigwLCA1MTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICBpZiAoX19weXhfdF80KSB7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDI1CistICogICAgICAgICBjZGVmIGludCBl cnIKKy0gKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lkIGV2ZW50X2lkID0gZXZlbnQKKy0gKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9ldmVudChzZWxmLl9jdHgsIGV2ZW50X2lkLCBlbmFi bGVfaSkKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjUxMgorKyAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJl cF9ub2RlX2xpc3QodmFsdWUpCisrICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X05PREVfTUFQOgorKyAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2Rl X21hcCh2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZWxz ZToKKysgKiAgICAgICAgICAgICBub2RlLmZvcm1hdCA9IE1QVl9GT1JNQVRfTk9ORQorICAqLwor LSAgeworLSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9z YXZlOworLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVt ZW1iZXIoKTsKKy0gICAgICAjZW5kaWYKKy0gICAgICAvKnRyeToqLyB7CisrICAgIF9fcHl4X3Zf bm9kZS51Lmxpc3QgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbm9kZV9tYXAo X19weXhfdl9zZWxmLCBfX3B5eF92X3ZhbHVlKTsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0MjYKKy0gKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lkIGV2 ZW50X2lkID0gZXZlbnQKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAg ZXJyID0gbXB2X3JlcXVlc3RfZXZlbnQoc2VsZi5fY3R4LCBldmVudF9pZCwgZW5hYmxlX2kpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKy0gKiAK KysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxMQorKyAqICAgICAgICAg ZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorKyAqICAgICAgICAgICAgIG5v ZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QodmFsdWUpCisrICogICAgICAgICBlbGlm IGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbWFwKHZh bHVlKQorKyAqICAgICAgICAgZWxzZToKKyAgKi8KKy0gICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2 X3JlcXVlc3RfZXZlbnQoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2V2ZW50X2lkLCBfX3B5 eF92X2VuYWJsZV9pKTsKKy0gICAgICB9CisrICAgIGdvdG8gX19weXhfTDM7CisrICB9CisgCist ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyNQorLSAqICAgICAgICAg Y2RlZiBpbnQgZXJyCistICogICAgICAgICBjZGVmIG1wdl9ldmVudF9pZCBldmVudF9pZCA9IGV2 ZW50CistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICAgICAgZXJyID0gbXB2X3JlcXVlc3RfZXZlbnQoc2VsZi5fY3R4LCBldmVu dF9pZCwgZW5hYmxlX2kpCistICogICAgICAgICByZXR1cm4gZXJyCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NTE0CisrICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBz ZWxmLl9wcmVwX25vZGVfbWFwKHZhbHVlKQorKyAqICAgICAgICAgZWxzZToKKysgKiAgICAgICAg ICAgICBub2RlLmZvcm1hdCA9IE1QVl9GT1JNQVRfTk9ORSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICByZXR1cm4gbm9kZQorKyAqIAorICAqLworLSAgICAgIC8qZmlu YWxseToqLyB7CistICAgICAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgICAgICAjaWZkZWYg V0lUSF9USFJFQUQKKy0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAg ICAgUHlfQkxPQ0tfVEhSRUFEUworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBf X3B5eF9MNTsKKy0gICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0w1OjsKKy0gICAgICB9CisrICAv KmVsc2UqLyB7CisrICAgIF9fcHl4X3Zfbm9kZS5mb3JtYXQgPSBNUFZfRk9STUFUX05PTkU7Cisg ICB9CisrICBfX3B5eF9MMzo7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDI3CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVyciA9IG1w dl9yZXF1ZXN0X2V2ZW50KHNlbGYuX2N0eCwgZXZlbnRfaWQsIGVuYWJsZV9pKQorLSAqICAgICAg ICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTE1CisrICogICAgICAgICBlbHNlOgorKyAqICAgICAg ICAgICAgIG5vZGUuZm9ybWF0ID0gTVBWX0ZPUk1BVF9OT05FCisrICogICAgICAgICByZXR1cm4g bm9kZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCistICogICAgIEBfZXJyb3Jz CisrICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3ZhbHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOgor ICAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5 SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgNDI3LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzQp OworLSAgX19weXhfciA9IF9fcHl4X3RfNDsKKy0gIF9fcHl4X3RfNCA9IDA7CisrICBfX3B5eF9y ID0gX19weXhfdl9ub2RlOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0MTIKKy0gKiAKKy0gKiAgICAgQF9lcnJvcnMKKy0gKiAgICAg ZGVmIHJlcXVlc3RfZXZlbnQoc2VsZiwgZXZlbnQsIGVuYWJsZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICIiIkVuYWJsZSBvciBkaXNhYmxlIGEgZ2l2ZW4gZXZl bnQuCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk2CisrICogICAgICAg ICByZXR1cm4gbGlzdAorICAqIAorKyAqICAgICBjZGVmIG1wdl9ub2RlIF9wcmVwX25hdGl2ZV92 YWx1ZShzZWxmLCB2YWx1ZSwgZm9ybWF0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlCisrICogICAgICAgICBub2RlLmZvcm1hdCA9 IGZvcm1hdAorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX3B5eF9M MV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9BZGRUcmFj ZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnJlcXVlc3RfZXZlbnQiLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxM OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzMpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworKyAgX19QeXhfV3JpdGVVbnJhaXNh YmxlKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5fcHJlcF9uYXRpdmVfdmFsdWUiLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsKKysgIF9fUHl4 X3ByZXRlbmRfdG9faW5pdGlhbGl6ZSgmX19weXhfcik7CisgICBfX3B5eF9MMDo7CistICBfX1B5 eF9YR0lWRVJFRihfX3B5eF9yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl92YWx1ZSk7Cisg ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0K KyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMwCisrLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjUxNworKyAqICAgICAgICAgcmV0dXJuIG5vZGUKKyAgKiAK Ky0gKiAgICAgQF9lcnJvcnMKKy0gKiAgICAgZGVmIHNldF9sb2dfbGV2ZWwoc2VsZiwgbG9nbGV2 ZWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFwczog bXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzIiIiCistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4 CisrICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3ZhbHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBpZiBub2RlLmZvcm1hdCBp biAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBNUFZfRk9STUFUX05PREVfTUFQKToKKysgKiAgICAg ICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOgorICAqLworIAorLS8qIFB5 dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfN3NldF9sb2dfbGV2ZWwoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3ZfbG9nbGV2ZWwpOyAvKnByb3RvKi8KKy1zdGF0aWMgY2hhciBfX3B5 eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZzZXRfbG9nX2xldmVsW10gPSAi V3JhcHM6IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyI7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfN3NldF9sb2dfbGV2ZWwoUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfbG9nbGV2ZWwpIHsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X2xvZ19sZXZlbCAod3JhcHBlcikiLCAwKTsKKy0g IF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNnNldF9s b2dfbGV2ZWwoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfbG9nbGV2ZWwpKTsKKy0KKy0g IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNnNldF9sb2dfbGV2ZWwoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9sb2dsZXZlbCkgeworLSAgY2hhciBjb25zdCAqX19weXhfdl9sb2dsZXZl bF9jOworLSAgaW50IF9fcHl4X3ZfZXJyOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX2ZyZWVfbmF0aXZlX3ZhbHVlKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgc3RydWN0 IG1wdl9ub2RlIF9fcHl4X3Zfbm9kZSkgeworKyAgaW50IF9fcHl4X3ZfaTsKKyAgIFB5T2JqZWN0 ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9i amVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOwor LSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CistICBjaGFyIGNvbnN0ICpfX3B5eF90XzQ7 CisrICBpbnQgX19weXhfdF8xOworKyAgaW50IF9fcHl4X3RfMjsKKysgIGludCBfX3B5eF90XzM7 CisrICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKysgIGludCBfX3B5eF90XzU7CisgICBp bnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVM TDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJzZXRfbG9nX2xldmVsIiwgMCk7CistICBfX1B5eF9JTkNSRUYoX19weXhfdl9sb2dsZXZl bCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2ZyZWVfbmF0aXZlX3ZhbHVlIiwg MCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMyCistICogICAg IGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVsKToKKy0gKiAgICAgICAgICIiIldyYXBz OiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9j dHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgbG9nbGV2ZWwgPSBf c3RyZW5jKGxvZ2xldmVsKQorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBsb2dsZXZlbF9j ID0gbG9nbGV2ZWwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTgKKysg KiAKKysgKiAgICAgY2RlZiBfZnJlZV9uYXRpdmVfdmFsdWUoc2VsZiwgbXB2X25vZGUgbm9kZSk6 CisrICogICAgICAgICBpZiBub2RlLmZvcm1hdCBpbiAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBN UFZfRk9STUFUX05PREVfTUFQKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6CisrICogICAgICAgICAg ICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tpXSkKKyAg Ki8KKy0gICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUworLSAgaWYgKHVubGlrZWx5 KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CistICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+ X2N0eCAhPSAwKSkpIHsKKy0gICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9y KTsKKy0gICAgICBfX1BZWF9FUlIoMCwgNDMyLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgfQorLSAg fQorLSAgI2VuZGlmCisrICBzd2l0Y2ggKF9fcHl4X3Zfbm9kZS5mb3JtYXQpIHsKKysgICAgY2Fz ZSBNUFZfRk9STUFUX05PREVfQVJSQVk6CisrICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX01BUDoK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzMKKy0gKiAgICAgICAg ICIiIldyYXBzOiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKKy0gKiAgICAgICAgIGFzc2Vy dCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIGxvZ2xldmVsID0gX3N0cmVuYyhsb2dsZXZlbCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBs b2dsZXZlbF9jID0gbG9nbGV2ZWwKKy0gKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTE5CisrICogICAgIGNkZWYgX2ZyZWVfbmF0 aXZlX3ZhbHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOgorKyAqICAgICAgICAgaWYgbm9kZS5mb3Jt YXQgaW4gKE1QVl9GT1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6CisrICog ICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92 YWx1ZShub2RlLnUubGlzdC52YWx1ZXNbaV0pCisrICogICAgICAgICAgICAgZnJlZShub2RlLnUu bGlzdC52YWx1ZXMpCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf MiwgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDQzMywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0g IF9fcHl4X3RfMyA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlr ZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4X3RfMyA9IFB5TWV0 aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkgewor LSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90 XzIpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOworLSAgICAgIF9fUHl4X0lOQ1JF RihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9u KTsKKysgICAgX19weXhfdF8xID0gX19weXhfdl9ub2RlLnUubGlzdC0+bnVtOworKyAgICBfX3B5 eF90XzIgPSBfX3B5eF90XzE7CisrICAgIGZvciAoX19weXhfdF8zID0gMDsgX19weXhfdF8zIDwg X19weXhfdF8yOyBfX3B5eF90XzMrPTEpIHsKKysgICAgICBfX3B5eF92X2kgPSBfX3B5eF90XzM7 CisrCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyMAorKyAqICAg ICAgICAgaWYgbm9kZS5mb3JtYXQgaW4gKE1QVl9GT1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1B VF9OT0RFX01BUCk6CisrICogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3Qu bnVtKToKKysgKiAgICAgICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51 Lmxpc3QudmFsdWVzW2ldKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICAgICAgZnJlZShub2RlLnUubGlzdC52YWx1ZXMpCisrICogICAgICAgICAgICAgaWYgbm9kZS5m b3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKysgKi8KKysgICAgICBfX3B5eF90XzQgPSAo KHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICop X19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2Vs ZiwgKF9fcHl4X3Zfbm9kZS51Lmxpc3QtPnZhbHVlc1tfX3B5eF92X2ldKSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDUyMCwgX19weXhfTDFfZXJyb3IpCisrICAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7 IF9fcHl4X3RfNCA9IDA7CisgICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzMp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92 X2xvZ2xldmVsKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92 X2xvZ2xldmVsKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsK Ky0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQzMywgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2xvZ2xl dmVsLCBfX3B5eF90XzEpOworLSAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0MzQKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKy0g KiAgICAgICAgIGxvZ2xldmVsID0gX3N0cmVuYyhsb2dsZXZlbCkKKy0gKiAgICAgICAgIGNkZWYg Y29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgaW50IGVycgorLSAqICAgICAgICAgd2l0aCBub2dpbDoK KysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyMQorKyAqICAgICAgICAg ICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6CisrICogICAgICAgICAgICAgICAg IHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tpXSkKKysgKiAgICAg ICAgICAgICBmcmVlKG5vZGUudS5saXN0LnZhbHVlcykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9N QVA6CisrICogICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6 CisgICovCistICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X2xv Z2xldmVsKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF80KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDAsIDQzNCwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF92X2xvZ2xldmVsX2Mg PSBfX3B5eF90XzQ7CisrICAgIGZyZWUoX19weXhfdl9ub2RlLnUubGlzdC0+dmFsdWVzKTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzYKKy0gKiAgICAgICAgIGNk ZWYgY29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsCistICogICAgICAgICBjZGVmIGlu dCBlcnIKKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMoc2VsZi5f Y3R4LCBsb2dsZXZlbF9jKQorLSAqICAgICAgICAgcmV0dXJuIGVycgorKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTIyCisrICogICAgICAgICAgICAgICAgIHNlbGYuX2Zy ZWVfbmF0aXZlX3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tpXSkKKysgKiAgICAgICAgICAgICBm cmVlKG5vZGUudS5saXN0LnZhbHVlcykKKysgKiAgICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9 PSBNUFZfRk9STUFUX05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6CisrICogICAg ICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXNbaV0pCisgICovCistICB7Cist ICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7Cist ICAgICAgUHlfVU5CTE9DS19USFJFQURTCistICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigp OworLSAgICAgICNlbmRpZgorLSAgICAgIC8qdHJ5OiovIHsKKysgICAgX19weXhfdF81ID0gKChf X3B5eF92X25vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVApICE9IDApOworKyAgICBp ZiAoX19weXhfdF81KSB7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDM3CistICogICAgICAgICBjZGVmIGludCBlcnIKKy0gKiAgICAgICAgIHdpdGggbm9n aWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzKHNlbGYu X2N0eCwgbG9nbGV2ZWxfYykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgcmV0dXJuIGVycgorLSAqIAorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1MjMKKysgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LnZhbHVlcykKKysgKiAg ICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorKyAqICAg ICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5s aXN0LmtleXNbaV0pCisrICogICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5cykK KyAgKi8KKy0gICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzKF9f cHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9sb2dsZXZlbF9jKTsKKy0gICAgICB9CisrICAgICAg X19weXhfdF8xID0gX19weXhfdl9ub2RlLnUubGlzdC0+bnVtOworKyAgICAgIF9fcHl4X3RfMiA9 IF9fcHl4X3RfMTsKKysgICAgICBmb3IgKF9fcHl4X3RfMyA9IDA7IF9fcHl4X3RfMyA8IF9fcHl4 X3RfMjsgX19weXhfdF8zKz0xKSB7CisrICAgICAgICBfX3B5eF92X2kgPSBfX3B5eF90XzM7Cisg CistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzNgorLSAqICAgICAg ICAgY2RlZiBjb25zdCBjaGFyKiBsb2dsZXZlbF9jID0gbG9nbGV2ZWwKKy0gKiAgICAgICAgIGNk ZWYgaW50IGVycgorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyhz ZWxmLl9jdHgsIGxvZ2xldmVsX2MpCistICogICAgICAgICByZXR1cm4gZXJyCisrICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTI0CisrICogICAgICAgICAgICAgaWYg bm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKysgKiAgICAgICAgICAgICAgICAg Zm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKKysgKiAgICAgICAgICAgICAgICAgICAg IGZyZWUobm9kZS51Lmxpc3Qua2V5c1tpXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXMpCisrICogICAgICAgICAg ICAgZnJlZShub2RlLnUubGlzdCkKKyAgKi8KKy0gICAgICAvKmZpbmFsbHk6Ki8geworLSAgICAg ICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAg ICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CistICAgICAgICAgIFB5X0JMT0NLX1RIUkVB RFMKKy0gICAgICAgICAgI2VuZGlmCistICAgICAgICAgIGdvdG8gX19weXhfTDU7CistICAgICAg ICB9CistICAgICAgICBfX3B5eF9MNTo7CisrICAgICAgICBmcmVlKChfX3B5eF92X25vZGUudS5s aXN0LT5rZXlzW19fcHl4X3ZfaV0pKTsKKyAgICAgICB9CistICB9CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDM4CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAq ICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyhzZWxmLl9jdHgsIGxv Z2xldmVsX2MpCistICogICAgICAgICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAKKy0gKiAgICAgQF9lcnJvcnMKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTI1CisrICogICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5v ZGUudS5saXN0Lm51bSk6CisrICogICAgICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0 LmtleXNbaV0pCisrICogICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5cykgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxp c3QpCisrICogICAgICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgor ICAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5 SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgNDM4LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgX19weXhfciA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7CistICBnb3RvIF9f cHl4X0wwOworKyAgICAgIGZyZWUoX19weXhfdl9ub2RlLnUubGlzdC0+a2V5cyk7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMwCistICogCistICogICAgIEBfZXJy b3JzCistICogICAgIGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVsKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9yZXF1ZXN0X2xv Z19tZXNzYWdlcyIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjIKKysgKiAgICAgICAgICAgICAgICAgc2Vs Zi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51Lmxpc3QudmFsdWVzW2ldKQorKyAqICAgICAgICAg ICAgIGZyZWUobm9kZS51Lmxpc3QudmFsdWVzKQorKyAqICAgICAgICAgICAgIGlmIG5vZGUuZm9y bWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKKysg KiAgICAgICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5c1tpXSkKKyAgKi8KKysg ICAgfQorIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Mik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnNldF9sb2dfbGV2ZWwiLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworLSAg X19weXhfTDA6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2xvZ2xldmVsKTsKKy0gIF9fUHl4 X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Cist ICByZXR1cm4gX19weXhfcjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1MjYKKysgKiAgICAgICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5c1tp XSkKKysgKiAgICAgICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC5rZXlzKQorKyAqICAgICAg ICAgICAgIGZyZWUobm9kZS51Lmxpc3QpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CisrICogICAg ICAgICAgICAgZnJlZShub2RlLnUuc3RyaW5nKQorKyAqLworKyAgICBmcmVlKF9fcHl4X3Zfbm9k ZS51Lmxpc3QpOworIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDEKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxOAorICAqIAorLSAqICAgICBA X2Vycm9ycworLSAqICAgICBkZWYgbG9hZF9jb25maWcoc2VsZiwgZmlsZW5hbWUpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFwczogbXB2X2xvYWRfY29u ZmlnX2ZpbGUiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgY2RlZiBf ZnJlZV9uYXRpdmVfdmFsdWUoc2VsZiwgbXB2X25vZGUgbm9kZSk6CisrICogICAgICAgICBpZiBu b2RlLmZvcm1hdCBpbiAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBNUFZfRk9STUFUX05PREVfTUFQ KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKG5vZGUudS5saXN0Lm51bSk6CisrICogICAgICAgICAgICAgICAgIHNlbGYuX2ZyZWVf bmF0aXZlX3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tpXSkKKyAgKi8KKysgICAgYnJlYWs7Cisr ICAgIGNhc2UgTVBWX0ZPUk1BVF9TVFJJTkc6CisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF85 bG9hZF9jb25maWcoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZmls ZW5hbWUpOyAvKnByb3RvKi8KKy1zdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0Xzhsb2FkX2NvbmZpZ1tdID0gIldyYXBzOiBtcHZfbG9hZF9jb25maWdf ZmlsZSI7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfOWxvYWRfY29uZmlnKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X2ZpbGVuYW1lKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImxvYWRf Y29uZmlnICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF84bG9hZF9jb25maWcoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9f cHl4X3ZfZmlsZW5hbWUpKTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf OGxvYWRfY29uZmlnKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZmlsZW5hbWUpIHsKKy0gIGNoYXIg Y29uc3QgKl9fcHl4X3ZfX2ZpbGVuYW1lOworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTI4CisrICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdCkKKysgKiAgICAg ICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CisrICogICAgICAgICAg ICAgZnJlZShub2RlLnUuc3RyaW5nKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog CisrICogICAgIGRlZiBjb21tYW5kKHNlbGYsICpjbWRsaXN0LCBhc3luY2hyb25vdXM9RmFsc2Us IGRhdGE9Tm9uZSk6CisrICovCisrICAgIGZyZWUoX19weXhfdl9ub2RlLnUuc3RyaW5nKTsKKysK KysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyNworKyAqICAgICAgICAg ICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXMpCisrICogICAgICAgICAgICAgZnJlZShub2Rl LnUubGlzdCkKKysgKiAgICAgICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJ Tkc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBmcmVlKG5v ZGUudS5zdHJpbmcpCisrICogCisrICovCisrICAgIGJyZWFrOworKyAgICBkZWZhdWx0OiBicmVh azsKKysgIH0KKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTcKKysg KiAgICAgICAgIHJldHVybiBub2RlCisrICogCisrICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3Zh bHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICBpZiBub2RlLmZvcm1hdCBpbiAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBNUFZf Rk9STUFUX05PREVfTUFQKToKKysgKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUu bGlzdC5udW0pOgorKyAqLworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5 eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworKyAgZ290byBfX3B5eF9MMDsK KysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKysgIF9f UHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX2ZyZWVfbmF0aXZl X3ZhbHVlIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Cisr ICBfX3B5eF9yID0gMDsKKysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Ip OworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsK Kyt9CisrCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUzMAorKyAqICAgICAg ICAgICAgIGZyZWUobm9kZS51LnN0cmluZykKKysgKiAKKysgKiAgICAgZGVmIGNvbW1hbmQoc2Vs ZiwgKmNtZGxpc3QsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIiU2VuZCBhIGNvbW1hbmQgdG8gbXB2Lgor KyAqIAorKyAqLworKworKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOWNvbW1hbmQoUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2Rz KTsgLypwcm90byovCisrc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF84Y29tbWFuZFtdID0gIlNlbmQgYSBjb21tYW5kIHRvIG1wdi5cblxuICAgICAg ICBOb24tYXN5bmMgc3VjY2VzcyByZXR1cm5zIHRoZSBjb21tYW5kJ3MgcmVzcG9uc2UgZGF0YSwg b3RoZXJ3aXNlIE5vbmVcblxuICAgICAgICBBcmd1bWVudHM6XG4gICAgICAgIEFjY2VwdHMgcGFy YW1ldGVycyBhcyBhcmdzXG5cbiAgICAgICAgS2V5d29yZCBBcmd1bWVudHM6XG4gICAgICAgIGFz eW5jaHJvbm91czogVHJ1ZSB3aWxsIHJldHVybiByaWdodCBhd2F5LCBzdGF0dXMgY29tZXMgaW4g YXMgTVBWX0VWRU5UX0NPTU1BTkRfUkVQTFlcbiAgICAgICAgZGF0YTogT25seSB2YWxpZCBpZiBh c3luYywgZ2V0cyBzZW50IGJhY2sgYXMgcmVwbHlfdXNlcmRhdGEgaW4gdGhlIEV2ZW50XG5cbiAg ICAgICAgV3JhcHM6IG1wdl9jb21tYW5kX25vZGUgYW5kIG1wdl9jb21tYW5kX25vZGVfYXN5bmNc biAgICAgICAgIjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF85Y29tbWFuZChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF92 X2FzeW5jaHJvbm91cyA9IDA7CisrICBQeU9iamVjdCAqX19weXhfdl9kYXRhID0gMDsKKysgIFB5 T2JqZWN0ICpfX3B5eF92X2NtZGxpc3QgPSAwOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisr ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVu byA9IDA7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueURlY2xh cmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImNvbW1hbmQgKHdyYXBwZXIp IiwgMCk7CisrICBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSA+IDApIHsKKysgICAg X19weXhfdl9jbWRsaXN0ID0gUHlUdXBsZV9HZXRTbGljZShfX3B5eF9hcmdzLCAwLCBQeVR1cGxl X0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5eF92X2NtZGxp c3QpKSB7CisrICAgICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICAgICAgcmV0 dXJuIE5VTEw7CisrICAgIH0KKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3ZfY21kbGlzdCk7Cisr ICB9IGVsc2UgeworKyAgICBfX3B5eF92X2NtZGxpc3QgPSBfX3B5eF9lbXB0eV90dXBsZTsgX19Q eXhfSU5DUkVGKF9fcHl4X2VtcHR5X3R1cGxlKTsKKysgIH0KKysgIHsKKysgICAgc3RhdGljIFB5 T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfYXN5bmNocm9ub3VzLCZf X3B5eF9uX3NfZGF0YSwwfTsKKysgICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHswLDB9OworKyAg ICB2YWx1ZXNbMF0gPSAoKFB5T2JqZWN0ICopUHlfRmFsc2UpOworKyAgICB2YWx1ZXNbMV0gPSAo KFB5T2JqZWN0ICopUHlfTm9uZSk7CisrICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgewor KyAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKysgICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19h cmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKysgICAgICBzd2l0Y2ggKHBvc19h cmdzKSB7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgY2FzZSAgMDogYnJlYWs7CisrICAg ICAgfQorKyAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKKysgICAgICBp ZiAoa3dfYXJncyA+IDAgJiYgbGlrZWx5KGt3X2FyZ3MgPD0gMikpIHsKKysgICAgICAgIFB5X3Nz aXplX3QgaW5kZXg7CisrICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAyICYmIGt3X2Fy Z3MgPiAwOyBpbmRleCsrKSB7CisrICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5 RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsICpfX3B5eF9weWFyZ25hbWVzW2luZGV4XSk7Cisr ICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7IGt3X2FyZ3MtLTsg fQorKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDAp KSB7CisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9f cHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgMCwgImNvbW1hbmQiKSA8IDAp KSBfX1BZWF9FUlIoMCwgNTMwLCBfX3B5eF9MM19lcnJvcikKKysgICAgICB9CisrICAgIH0gZWxz ZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSA8IDApIHsKKysgICAgICBnb3RvIF9f cHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworKyAgICB9IGVsc2UgeworKyAgICB9CisrICAgIF9fcHl4 X3ZfYXN5bmNocm9ub3VzID0gdmFsdWVzWzBdOworKyAgICBfX3B5eF92X2RhdGEgPSB2YWx1ZXNb MV07CisrICB9CisrICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworKyAg X19weXhfTDVfYXJndHVwbGVfZXJyb3I6OworKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQo ImNvbW1hbmQiLCAwLCAwLCAwLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhf RVJSKDAsIDUzMCwgX19weXhfTDNfZXJyb3IpCisrICBfX3B5eF9MM19lcnJvcjo7CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdl9jbWRsaXN0KTsgX19weXhfdl9jbWRsaXN0ID0gMDsKKysgIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuY29tbWFuZCIsIF9fcHl4 X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gTlVMTDsKKysgIF9fcHl4X0w0X2FyZ3VtZW50 X3VucGFja2luZ19kb25lOjsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgX19weXhfdl9hc3luY2hyb25vdXMsIF9f cHl4X3ZfZGF0YSwgX19weXhfdl9jbWRsaXN0KTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X2NtZGxpc3QpOworKyAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisrCisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfdl9hc3luY2hyb25vdXMsIFB5T2JqZWN0ICpfX3B5eF92X2Rh dGEsIFB5T2JqZWN0ICpfX3B5eF92X2NtZGxpc3QpIHsKKysgIHN0cnVjdCBtcHZfbm9kZSBfX3B5 eF92X25vZGU7CisrICBzdHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlcmVzdWx0OworICAgaW50 IF9fcHl4X3ZfZXJyOworKyAgdWludDY0X3QgX19weXhfdl9kYXRhX2lkOworKyAgUHlPYmplY3Qg Kl9fcHl4X3ZfcmVzdWx0ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF92X3VzZXJkYXRhcyA9 IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisgICBQeU9iamVjdCAq X19weXhfdF8yID0gTlVMTDsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgY2hh ciBjb25zdCAqX19weXhfdF80OworKyAgdWludDY0X3QgX19weXhfdF80OworKyAgaW50IF9fcHl4 X3RfNTsKKysgIGludCBfX3B5eF90XzY7CisrICBpbnQgX19weXhfdF83OworKyAgaW50IF9fcHl4 X3RfODsKKysgIGNoYXIgY29uc3QgKl9fcHl4X3RfOTsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEw ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzExID0gTlVMTDsKKysgIFB5T2JqZWN0ICpf X3B5eF90XzEyID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEzID0gTlVMTDsKKysgIFB5 T2JqZWN0ICpfX3B5eF90XzE0ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzE1ID0gTlVM TDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzE2ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90 XzE3ID0gTlVMTDsKKysgIGNoYXIgY29uc3QgKl9fcHl4X3RfMTg7CisgICBpbnQgX19weXhfbGlu ZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBf X3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJsb2FkX2Nv bmZpZyIsIDApOworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZmlsZW5hbWUpOworKyAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoImNvbW1hbmQiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NDMKKy0gKiAgICAgZGVmIGxvYWRfY29uZmlnKHNlbGYsIGZp bGVuYW1lKToKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfbG9hZF9jb25maWdfZmlsZSIiIgor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU0NAorKyAqICAgICAgICAgV3Jh cHM6IG1wdl9jb21tYW5kX25vZGUgYW5kIG1wdl9jb21tYW5kX25vZGVfYXN5bmMKKysgKiAgICAg ICAgICIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgICAgICBmaWxlbmFtZSA9IF9zdHJlbmMoZmlsZW5hbWUpCistICog ICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIF9maWxlbmFtZSA9IGZpbGVuYW1lCisrICogICAgICAg ICBjZGVmIG1wdl9ub2RlIG5vZGUgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZShjbWRsaXN0LCBz ZWxmLl9mb3JtYXRfZm9yKGNtZGxpc3QpKQorKyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2Rl cmVzdWx0CisgICovCisgICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKKyAgIGlm ICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworICAgICBpZiAodW5saWtlbHkoIShfX3B5 eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7CisgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3Nl cnRpb25FcnJvcik7CistICAgICAgX19QWVhfRVJSKDAsIDQ0MywgX19weXhfTDFfZXJyb3IpCisr ICAgICAgX19QWVhfRVJSKDAsIDU0NCwgX19weXhfTDFfZXJyb3IpCisgICAgIH0KKyAgIH0KKyAg ICNlbmRpZgorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0NAorLSAq ICAgICAgICAgIiIiV3JhcHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTQ1CisrICogICAgICAgICAiIiIKKyAgKiAgICAgICAg IGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIGZpbGVuYW1lID0gX3N0cmVuYyhmaWxlbmFt ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBjb25zdCBj aGFyKiBfZmlsZW5hbWUgPSBmaWxlbmFtZQorKyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2Rl ID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUoY21kbGlzdCwgc2VsZi5fZm9ybWF0X2ZvcihjbWRs aXN0KSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBtcHZf bm9kZSBub2RlcmVzdWx0CisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKi8KKy0gIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDQ0LCBfX3B5eF9MMV9lcnJvcikKKysg IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZiksIF9fcHl4X25fc19mb3JtYXRfZm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgNTQ1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworICAgX19weXhfdF8zID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKysgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7 CisgICAgIF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CisgICAgIGlm IChsaWtlbHkoX19weXhfdF8zKSkgeworICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0 aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworQEAgLTk2NzIsNjc5ICsxMDM3Myw3MjQgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf OGxvYWRfY29uZmlnKHN0cnVjdCBfX3AKKyAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Rf MiwgZnVuY3Rpb24pOworICAgICB9CisgICB9CistICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/ IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9m aWxlbmFtZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9m aWxlbmFtZSk7CisrICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0Nh bGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9jbWRsaXN0KSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X2NtZGxpc3QpOworICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNDQ0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU0NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworLSAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2ZpbGVuYW1lLCBfX3B5eF90XzEp OworLSAgX19weXhfdF8xID0gMDsKKysgIF9fcHl4X3Zfbm9kZSA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9f cHl4X3Z0YWIpLT5fcHJlcF9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X2NtZGxp c3QsIF9fcHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDUKKy0gKiAgICAg ICAgIGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIGZpbGVuYW1lID0gX3N0cmVuYyhmaWxl bmFtZSkKKy0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogX2ZpbGVuYW1lID0gZmlsZW5hbWUg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjU0OQorICAqICAgICAgICAgY2RlZiBpbnQgZXJyCistICogICAgICAgICB3aXRo IG5vZ2lsOgorKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBkYXRhX2lkCisrICogICAgICAgICBy ZXN1bHQgPSBOb25lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHRy eToKKysgKiAgICAgICAgICAgICBkYXRhX2lkID0gaWQoZGF0YSkKKyAgKi8KKy0gIF9fcHl4X3Rf NCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfZmlsZW5hbWUpOyBpZiAodW5saWtl bHkoKCFfX3B5eF90XzQpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDQ1LCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3ZfX2ZpbGVuYW1lID0gX19weXhfdF80OworKyAgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworKyAgX19weXhfdl9yZXN1bHQgPSBQeV9Ob25lOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0NworLSAqICAgICAgICAgY2RlZiBj b25zdCBjaGFyKiBfZmlsZW5hbWUgPSBmaWxlbmFtZQorLSAqICAgICAgICAgY2RlZiBpbnQgZXJy CistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgICAgICAgICAgZXJyID0gbXB2X2xvYWRfY29uZmlnX2ZpbGUoc2VsZi5fY3R4LCBfZmls ZW5hbWUpCistICogICAgICAgICByZXR1cm4gZXJyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTUwCisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGRhdGFfaWQKKysgKiAg ICAgICAgIHJlc3VsdCA9IE5vbmUKKysgKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGRhdGFfaWQgPSBpZChkYXRhKQorKyAqICAgICAg ICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CisgICovCistICB7CistICAgICAgI2lmZGVmIFdJ VEhfVEhSRUFECistICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgUHlfVU5CTE9D S19USFJFQURTCistICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAgICNlbmRp ZgorLSAgICAgIC8qdHJ5OiovIHsKKysgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDgKKy0gKiAgICAgICAgIGNkZWYgaW50IGVycgor LSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfbG9hZF9j b25maWdfZmlsZShzZWxmLl9jdHgsIF9maWxlbmFtZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgcmV0dXJuIGVycgorLSAqIAorKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTUxCisrICogICAgICAgICByZXN1bHQgPSBOb25lCisrICogICAg ICAgICB0cnk6CisrICogICAgICAgICAgICAgZGF0YV9pZCA9IGlkKGRhdGEpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgor KyAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgICAgICAgX19weXhfdl9l cnIgPSBtcHZfbG9hZF9jb25maWdfZmlsZShfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfX2Zp bGVuYW1lKTsKKy0gICAgICB9CisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxP bmVBcmcoX19weXhfYnVpbHRpbl9pZCwgX19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNTUxLCBfX3B5eF9MNF9lcnJvcikKKysgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisrICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0FzX3VpbnQ2NF90 KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF80ID09ICgodWludDY0X3QpLTEpKSAm JiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDU1MSwgX19weXhfTDRfZXJyb3IpCisr ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICBfX3B5eF92 X2RhdGFfaWQgPSBfX3B5eF90XzQ7CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ0NworLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBfZmlsZW5hbWUgPSBm aWxlbmFtZQorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCistICogICAgICAgICB3aXRoIG5vZ2ls OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2 X2xvYWRfY29uZmlnX2ZpbGUoc2VsZi5fY3R4LCBfZmlsZW5hbWUpCistICogICAgICAgICByZXR1 cm4gZXJyCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTIKKysgKiAg ICAgICAgIHRyeToKKysgKiAgICAgICAgICAgICBkYXRhX2lkID0gaWQoZGF0YSkKKysgKiAgICAg ICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgICAgICAg ICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlKHNlbGYuX2N0eCwgJm5vZGUsICZub2RlcmVzdWx0KQor ICAqLworLSAgICAgIC8qZmluYWxseToqLyB7CistICAgICAgICAvKm5vcm1hbCBleGl0Oiovewor KyAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9hc3luY2hyb25v dXMpOyBpZiAodW5saWtlbHkoX19weXhfdF81IDwgMCkpIF9fUFlYX0VSUigwLCA1NTIsIF9fcHl4 X0w0X2Vycm9yKQorKyAgICBfX3B5eF90XzYgPSAoKCFfX3B5eF90XzUpICE9IDApOworKyAgICBp ZiAoX19weXhfdF82KSB7CisrCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjU1MworKyAqICAgICAgICAgICAgIGRhdGFfaWQgPSBpZChkYXRhKQorKyAqICAgICAgICAg ICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CisrICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgICAgIGVy ciA9IG1wdl9jb21tYW5kX25vZGUoc2VsZi5fY3R4LCAmbm9kZSwgJm5vZGVyZXN1bHQpCisrICog ICAgICAgICAgICAgICAgIHRyeToKKysgKi8KKysgICAgICB7CisgICAgICAgICAgICNpZmRlZiBX SVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAgICAgICAg ICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworKyAg ICAgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKysgICAgICAgICAgX19QeXhfRmFzdEdJTF9SZW1l bWJlcigpOworICAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNTsKKy0g ICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0w1OjsKKy0gICAgICB9CistICB9CisrICAgICAgICAg IC8qdHJ5OiovIHsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDkK Ky0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2X2xvYWRf Y29uZmlnX2ZpbGUoc2VsZi5fY3R4LCBfZmlsZW5hbWUpCistICogICAgICAgICByZXR1cm4gZXJy ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgZGVmIF9mb3JtYXRf Zm9yKHNlbGYsIHZhbHVlKToKKysgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTU0CisrICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czoKKysgKiAg ICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICAgICAgICAgIGVyciA9 IG1wdl9jb21tYW5kX25vZGUoc2VsZi5fY3R4LCAmbm9kZSwgJm5vZGVyZXN1bHQpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgdHJ5OgorKyAqICAgICAg ICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlcmVzdWx0KSBp ZiBlcnIgPj0gMCBlbHNlIE5vbmUKKyAgKi8KKy0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7Cist ICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ0OSwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF90XzE7CistICBfX3B5 eF90XzEgPSAwOworLSAgZ290byBfX3B5eF9MMDsKKysgICAgICAgICAgICBfX3B5eF92X2VyciA9 IG1wdl9jb21tYW5kX25vZGUoX19weXhfdl9zZWxmLT5fY3R4LCAoJl9fcHl4X3Zfbm9kZSksICgm X19weXhfdl9ub2RlcmVzdWx0KSk7CisrICAgICAgICAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NDEKKy0gKiAKKy0gKiAgICAgQF9lcnJvcnMKKy0gKiAgICAg ZGVmIGxvYWRfY29uZmlnKHNlbGYsIGZpbGVuYW1lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCistICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1NTMKKysgKiAgICAgICAgICAgICBkYXRhX2lkID0gaWQoZGF0YSkKKysg KiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgorKyAqICAgICAgICAgICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAg ICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlKHNlbGYuX2N0eCwgJm5vZGUsICZub2RlcmVz dWx0KQorKyAqICAgICAgICAgICAgICAgICB0cnk6CisgICovCisrICAgICAgICAgIC8qZmluYWxs eToqLyB7CisrICAgICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKysgICAgICAgICAgICAgICNp ZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsK KysgICAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKysgICAgICAgICAgICAgICNlbmRpZgor KyAgICAgICAgICAgICAgZ290byBfX3B5eF9MOTsKKysgICAgICAgICAgICB9CisrICAgICAgICAg ICAgX19weXhfTDk6OworKyAgICAgICAgICB9CisrICAgICAgfQorIAorLSAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CistICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250 ZXh0LmxvYWRfY29uZmlnIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdl9maWxlbmFtZSk7CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKy0gIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQor LS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTEKKy0gKiAgICAgICAgIHJldHVy biBlcnIKKy0gKiAKKy0gKiAgICAgZGVmIF9mb3JtYXRfZm9yKHNlbGYsIHZhbHVlKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwg YmFzZXN0cmluZyk6CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5HCisr ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1NQorKyAqICAgICAgICAg ICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X2Nv bW1hbmRfbm9kZShzZWxmLl9jdHgsICZub2RlLCAmbm9kZXJlc3VsdCkKKysgKiAgICAgICAgICAg ICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAg ICAgICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQpIGlmIGVyciA+ PSAwIGVsc2UgTm9uZQorKyAqICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAqLworKyAgICAg IC8qdHJ5OiovIHsKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExX2Zvcm1hdF9mb3IoUHlP YmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUpOyAvKnByb3RvKi8K Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xMV9mb3JtYXRfZm9yKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X3ZhbHVlKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9mb3JtYXRfZm9yICh3 cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8xMF9mb3JtYXRfZm9yKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X3Zh bHVlKSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwX2Zvcm1hdF9m b3IoQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CistICBQeU9i amVjdCAqX19weXhfciA9IE5VTEw7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAg aW50IF9fcHl4X3RfMTsKKy0gIGludCBfX3B5eF90XzI7CistICBQeU9iamVjdCAqX19weXhfdF8z ID0gTlVMTDsKKy0gIGludCBfX3B5eF90XzQ7CistICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0g IGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5v ID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfZm9ybWF0X2ZvciIsIDApOwor LQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1MgorLSAqIAorLSAqICAg ICBkZWYgX2Zvcm1hdF9mb3Ioc2VsZiwgdmFsdWUpOgorLSAqICAgICAgICAgaWYgaXNpbnN0YW5j ZSh2YWx1ZSwgYmFzZXN0cmluZyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJTkcKKy0gKiAgICAgICAgIGVsaWYgaXNp bnN0YW5jZSh2YWx1ZSwgYm9vbCk6CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTU2CisrICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9u b2RlKHNlbGYuX2N0eCwgJm5vZGUsICZub2RlcmVzdWx0KQorKyAqICAgICAgICAgICAgICAgICB0 cnk6CisrICogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVl KG5vZGVyZXN1bHQpIGlmIGVyciA+PSAwIGVsc2UgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICAgICAgICAgIGZpbmFsbHk6CisrICogICAgICAgICAgICAgICAg ICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlCYXNlU3RyaW5n X0NoZWNrKF9fcHl4X3ZfdmFsdWUpOyAKKy0gIF9fcHl4X3RfMiA9IChfX3B5eF90XzEgIT0gMCk7 CistICBpZiAoX19weXhfdF8yKSB7CisrICAgICAgICBpZiAoKChfX3B5eF92X2VyciA+PSAwKSAh PSAwKSkgeworKyAgICAgICAgICBfX3B5eF90XzIgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fY29udmVydF9ub2RlX3ZhbHVlKF9fcHl4X3Zfbm9kZXJlc3VsdCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU1NiwgX19weXhfTDExX2Vycm9yKQorKyAgICAg ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgICAgICAgX19weXhfdF8xID0gX19w eXhfdF8yOworKyAgICAgICAgICBfX3B5eF90XzIgPSAwOworKyAgICAgICAgfSBlbHNlIHsKKysg ICAgICAgICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOworKyAgICAgICAgICBfX3B5eF90XzEgPSBQ eV9Ob25lOworKyAgICAgICAgfQorKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3Jl c3VsdCwgX19weXhfdF8xKTsKKysgICAgICAgIF9fcHl4X3RfMSA9IDA7CisrICAgICAgfQorIAor LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUzCistICogICAgIGRlZiBf Zm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6CistICogICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVl LCBiYXNlc3RyaW5nKToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJTkcg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNl KHZhbHVlLCBib29sKToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9GTEFHCisr ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1OAorKyAqICAgICAgICAg ICAgICAgICAgICAgcmVzdWx0ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlcmVzdWx0KSBpZiBl cnIgPj0gMCBlbHNlIE5vbmUKKysgKiAgICAgICAgICAgICAgICAgZmluYWxseToKKysgKiAgICAg ICAgICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2Rl cmVzdWx0KQorKyAqICAgICAgICAgICAgIGVsc2U6CisgICovCistICAgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zv cm1hdChNUFZfRk9STUFUX1NUUklORyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDAsIDQ1MywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMp OworLSAgICBfX3B5eF9yID0gX19weXhfdF8zOworLSAgICBfX3B5eF90XzMgPSAwOworLSAgICBn b3RvIF9fcHl4X0wwOworKyAgICAgIC8qZmluYWxseToqLyB7CisrICAgICAgICAvKm5vcm1hbCBl eGl0OioveworKyAgICAgICAgICB7CisrICAgICAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQK KysgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworKyAgICAgICAgICAgICAgUHlf VU5CTE9DS19USFJFQURTCisrICAgICAgICAgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7 CisrICAgICAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgICAgIC8qdHJ5OiovIHsKKyAKKy0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1MgorLSAqIAorLSAqICAgICBk ZWYgX2Zvcm1hdF9mb3Ioc2VsZiwgdmFsdWUpOgorLSAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2 YWx1ZSwgYmFzZXN0cmluZyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJTkcKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0 YW5jZSh2YWx1ZSwgYm9vbCk6CisrICAgICAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1NTkKKysgKiAgICAgICAgICAgICAgICAgZmluYWxseToKKysgKiAgICAg ICAgICAgICAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgICAgICAgICAgICAg bXB2X2ZyZWVfbm9kZV9jb250ZW50cygmbm9kZXJlc3VsdCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVsc2U6CisrICogICAgICAgICAgICAgICAgIHVzZXJk YXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCisgICovCistICB9 CisrICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoKCZfX3B5eF92X25vZGVy ZXN1bHQpKTsKKysgICAgICAgICAgICAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0NTQKKy0gKiAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJp bmcpOgorLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklORworLSAqICAgICAg ICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0ZMQUcKKy0gKiAgICAgICAg IGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKKysgICAgICAgICAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTgKKysgKiAgICAgICAgICAgICAgICAgICAgIHJlc3Vs dCA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZXJlc3VsdCkgaWYgZXJyID49IDAgZWxzZSBOb25l CisrICogICAgICAgICAgICAgICAgIGZpbmFsbHk6CisrICogICAgICAgICAgICAgICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAg ICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50cygmbm9kZXJlc3VsdCkKKysgKiAgICAg ICAgICAgICBlbHNlOgorICAqLworLSAgX19weXhfdF8zID0gKChQeU9iamVjdCopJlB5Qm9vbF9U eXBlKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOworLSAgX19weXhfdF8yID0gUHlPYmpl Y3RfSXNJbnN0YW5jZShfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoX19w eXhfdF8yID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigwLCA0NTQsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBfX3B5eF90XzEg PSAoX19weXhfdF8yICE9IDApOworLSAgaWYgKF9fcHl4X3RfMSkgeworKyAgICAgICAgICAgICAg LypmaW5hbGx5OiovIHsKKysgICAgICAgICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKysgICAg ICAgICAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAgICAgICAgICAgICAgICBfX1B5 eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAgICAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMK KysgICAgICAgICAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgICAgICAgICBnb3RvIF9fcHl4 X0wxNTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBfX3B5eF9MMTU6Owor KyAgICAgICAgICAgICAgfQorKyAgICAgICAgICB9CisrICAgICAgICAgIGdvdG8gX19weXhfTDEy OworKyAgICAgICAgfQorKyAgICAgICAgX19weXhfTDExX2Vycm9yOjsKKysgICAgICAgIC8qZXhj ZXB0aW9uIGV4aXQ6Ki97CisrICAgICAgICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQor KyAgICAgICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorKyAgICAgICAgICBfX3B5eF90 XzEwID0gMDsgX19weXhfdF8xMSA9IDA7IF9fcHl4X3RfMTIgPSAwOyBfX3B5eF90XzEzID0gMDsg X19weXhfdF8xNCA9IDA7IF9fcHl4X3RfMTUgPSAwOworKyAgICAgICAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICAgICAgICAgIF9fUHl4X1hERUNSRUYoX19w eXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOworKyAgICAgICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAz KSBfX1B5eF9FeGNlcHRpb25Td2FwKCZfX3B5eF90XzEzLCAmX19weXhfdF8xNCwgJl9fcHl4X3Rf MTUpOworKyAgICAgICAgICBpZiAoKFBZX01BSk9SX1ZFUlNJT04gPCAzKSB8fCB1bmxpa2VseShf X1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfMTAsICZfX3B5eF90XzExLCAmX19weXhfdF8xMikg PCAwKSkgX19QeXhfRXJyRmV0Y2goJl9fcHl4X3RfMTAsICZfX3B5eF90XzExLCAmX19weXhfdF8x Mik7CisrICAgICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMCk7CisrICAgICAgICAgIF9f UHl4X1hHT1RSRUYoX19weXhfdF8xMSk7CisrICAgICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhf dF8xMik7CisrICAgICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMyk7CisrICAgICAgICAg IF9fUHl4X1hHT1RSRUYoX19weXhfdF8xNCk7CisrICAgICAgICAgIF9fUHl4X1hHT1RSRUYoX19w eXhfdF8xNSk7CisrICAgICAgICAgIF9fcHl4X3RfNyA9IF9fcHl4X2xpbmVubzsgX19weXhfdF84 ID0gX19weXhfY2xpbmVubzsgX19weXhfdF85ID0gX19weXhfZmlsZW5hbWU7CisrICAgICAgICAg IHsKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAor KyAgICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICAgICAgICAgICAg UHlfVU5CTE9DS19USFJFQURTCisrICAgICAgICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1i ZXIoKTsKKysgICAgICAgICAgICAgICAgI2VuZGlmCisrICAgICAgICAgICAgICAgIC8qdHJ5Oiov IHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1NQorLSAqICAg ICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklORworLSAqICAgICAgICAgZWxpZiBpc2lu c3RhbmNlKHZhbHVlLCBib29sKToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9G TEFHICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0 YW5jZSh2YWx1ZSwgaW50KToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2 NAorKyAgICAgICAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 NTkKKysgKiAgICAgICAgICAgICAgICAgZmluYWxseToKKysgKiAgICAgICAgICAgICAgICAgICAg IHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9j b250ZW50cygmbm9kZXJlc3VsdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgIGVsc2U6CisrICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVw bHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCisgICovCistICAgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zv cm1hdChNUFZfRk9STUFUX0ZMQUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigwLCA0NTUsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsK Ky0gICAgX19weXhfciA9IF9fcHl4X3RfMzsKKy0gICAgX19weXhfdF8zID0gMDsKKy0gICAgZ290 byBfX3B5eF9MMDsKKysgICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCgm X19weXhfdl9ub2RlcmVzdWx0KSk7CisrICAgICAgICAgICAgICAgIH0KKyAKKy0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1NAorLSAqICAgICAgICAgaWYgaXNpbnN0YW5j ZSh2YWx1ZSwgYmFzZXN0cmluZyk6CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRf U1RSSU5HCistICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRf RkxBRworLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorKyAgICAgICAg ICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU4CisrICogICAgICAg ICAgICAgICAgICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQpIGlm IGVyciA+PSAwIGVsc2UgTm9uZQorKyAqICAgICAgICAgICAgICAgICBmaW5hbGx5OgorKyAqICAg ICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoJm5v ZGVyZXN1bHQpCisrICogICAgICAgICAgICAgZWxzZToKKyAgKi8KKy0gIH0KKy0KKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTYKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0 YW5jZSh2YWx1ZSwgYm9vbCk6CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxB RworLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfSU5UNjQK Ky0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgorLSAqLworLSAgX19w eXhfdF8xID0gUHlJbnRfQ2hlY2soX19weXhfdl92YWx1ZSk7IAorLSAgX19weXhfdF8yID0gKF9f cHl4X3RfMSAhPSAwKTsKKy0gIGlmIChfX3B5eF90XzIpIHsKKysgICAgICAgICAgICAgICAgLypm aW5hbGx5OiovIHsKKysgICAgICAgICAgICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAg ICAgICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAgICAgICAgICAgICBf X1B5eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAgICAgICAgICAgICAgICAgUHlfQkxPQ0tfVEhS RUFEUworKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisrICAgICAgICAgICAgICAgICAgICBn b3RvIF9fcHl4X0wyMDsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAg X19weXhfTDIwOjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAg ICAgfQorKyAgICAgICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSB7CisrICAgICAgICAg ICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMyk7CisrICAgICAgICAgICAgX19QeXhfWEdJVkVS RUYoX19weXhfdF8xNCk7CisrICAgICAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xNSk7 CisrICAgICAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMywgX19weXhfdF8x NCwgX19weXhfdF8xNSk7CisrICAgICAgICAgIH0KKysgICAgICAgICAgX19QeXhfWEdJVkVSRUYo X19weXhfdF8xMCk7CisrICAgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTEpOworKyAg ICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEyKTsKKysgICAgICAgICAgX19QeXhfRXJy UmVzdG9yZShfX3B5eF90XzEwLCBfX3B5eF90XzExLCBfX3B5eF90XzEyKTsKKysgICAgICAgICAg X19weXhfdF8xMCA9IDA7IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90XzEyID0gMDsgX19weXhfdF8x MyA9IDA7IF9fcHl4X3RfMTQgPSAwOyBfX3B5eF90XzE1ID0gMDsKKysgICAgICAgICAgX19weXhf bGluZW5vID0gX19weXhfdF83OyBfX3B5eF9jbGluZW5vID0gX19weXhfdF84OyBfX3B5eF9maWxl bmFtZSA9IF9fcHl4X3RfOTsKKysgICAgICAgICAgZ290byBfX3B5eF9MNF9lcnJvcjsKKysgICAg ICAgIH0KKysgICAgICAgIF9fcHl4X0wxMjo7CisrICAgICAgfQorIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDU3CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9G T1JNQVRfRkxBRworLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorLSAq ICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0lOVDY0ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgorLSAq ICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQorKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTIKKysgKiAgICAgICAgIHRyeToKKysgKiAgICAgICAg ICAgICBkYXRhX2lkID0gaWQoZGF0YSkKKysgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9u b3VzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgIHdp dGggbm9naWw6CisrICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2Rl KHNlbGYuX2N0eCwgJm5vZGUsICZub2RlcmVzdWx0KQorICAqLworLSAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3IpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9m b3JtYXQoTVBWX0ZPUk1BVF9JTlQ2NCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDAsIDQ1NywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMp OworLSAgICBfX3B5eF9yID0gX19weXhfdF8zOworLSAgICBfX3B5eF90XzMgPSAwOworLSAgICBn b3RvIF9fcHl4X0wwOworKyAgICAgIGdvdG8gX19weXhfTDY7CisrICAgIH0KKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1NgorLSAqICAgICAgICAgZWxpZiBpc2lu c3RhbmNlKHZhbHVlLCBib29sKToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9G TEFHCistICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2 NAorLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjEKKysgKiAgICAgICAgICAgICAgICAgICAg ICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2RlcmVzdWx0KQorKyAqICAgICAgICAgICAg IGVsc2U6CisrICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRh dGEuZ2V0KGRhdGFfaWQsIE5vbmUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6CisrICogICAgICAgICAgICAgICAg ICAgICBfcmVwbHlfdXNlcmRhdGFzW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRh dGEoZGF0YSkKKyAgKi8KKy0gIH0KKysgICAgLyplbHNlKi8geworKyAgICAgIF9fcHl4X3RfMiA9 IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwg X19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU2 MSwgX19weXhfTDRfZXJyb3IpCisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICAg ICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92X2RhdGFfaWQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA1NjEsIF9fcHl4X0w0X2Vy cm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgICAgIF9fcHl4X3RfMTYg PSBOVUxMOworKyAgICAgIF9fcHl4X3RfOCA9IDA7CisrICAgICAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKysgICAgICAg IF9fcHl4X3RfMTYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICAgICAgaWYg KGxpa2VseShfX3B5eF90XzE2KSkgeworKyAgICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICAgICAgX19QeXhfSU5DUkVG KF9fcHl4X3RfMTYpOworKyAgICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAg ICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworKyAgICAgICAgICBf X3B5eF90XzggPSAxOworKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICAjaWYgQ1lUSE9OX0ZB U1RfUFlDQUxMCisrICAgICAgaWYgKFB5RnVuY3Rpb25fQ2hlY2soX19weXhfdF8yKSkgeworKyAg ICAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF8xNiwgX19weXhfdF8zLCBQ eV9Ob25lfTsKKysgICAgICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGwo X19weXhfdF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAyK19fcHl4X3RfOCk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2MSwgX19weXhfTDRfZXJyb3IpCisrICAg ICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTYpOyBfX3B5eF90XzE2ID0gMDsKKysgICAgICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Myk7IF9fcHl4X3RfMyA9IDA7CisrICAgICAgfSBlbHNlCisrICAgICAgI2VuZGlmCisrICAgICAg I2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwKKysgICAgICBpZiAoX19QeXhfUHlGYXN0Q0Z1bmN0aW9u X0NoZWNrKF9fcHl4X3RfMikpIHsKKysgICAgICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0g e19fcHl4X3RfMTYsIF9fcHl4X3RfMywgUHlfTm9uZX07CisrICAgICAgICBfX3B5eF90XzEgPSBf X1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90 XzgsIDIrX19weXhfdF84KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg NTYxLCBfX3B5eF9MNF9lcnJvcikKKysgICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNik7 IF9fcHl4X3RfMTYgPSAwOworKyAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAg ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgICAgICB9IGVs c2UKKysgICAgICAjZW5kaWYKKysgICAgICB7CisrICAgICAgICBfX3B5eF90XzE3ID0gUHlUdXBs ZV9OZXcoMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMTcpKSBfX1BZWF9FUlIo MCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKKysgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzE3 KTsKKysgICAgICAgIGlmIChfX3B5eF90XzE2KSB7CisrICAgICAgICAgIF9fUHl4X0dJVkVSRUYo X19weXhfdF8xNik7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xNywgMCwgX19weXhfdF8xNik7 IF9fcHl4X3RfMTYgPSBOVUxMOworKyAgICAgICAgfQorKyAgICAgICAgX19QeXhfR0lWRVJFRihf X3B5eF90XzMpOworKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzE3LCAwK19fcHl4 X3RfOCwgX19weXhfdF8zKTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgICAg ICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CisrICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfMTcsIDErX19weXhfdF84LCBQeV9Ob25lKTsKKysgICAgICAgIF9fcHl4X3RfMyA9IDA7 CisrICAgICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMiwgX19w eXhfdF8xNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2 MSwgX19weXhfTDRfZXJyb3IpCisrICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysg ICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzE3KTsgX19weXhfdF8xNyA9IDA7CisrICAgICAg fQorKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICAg IF9fcHl4X3ZfdXNlcmRhdGFzID0gX19weXhfdF8xOworKyAgICAgIF9fcHl4X3RfMSA9IDA7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDU4CistICogICAgICAgICBl bGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9G T1JNQVRfSU5UNjQKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9G T1JNQVRfRE9VQkxFCistICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwg bGlzdCkpOgorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjIKKysg KiAgICAgICAgICAgICBlbHNlOgorKyAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxm LnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQorKyAqICAgICAgICAgICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9 IF9SZXBseVVzZXJEYXRhKGRhdGEpCisrICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQo KQorICAqLworLSAgX19weXhfdF8yID0gUHlGbG9hdF9DaGVjayhfX3B5eF92X3ZhbHVlKTsgCist ICBfX3B5eF90XzEgPSAoX19weXhfdF8yICE9IDApOworLSAgaWYgKF9fcHl4X3RfMSkgeworKyAg ICAgIF9fcHl4X3RfNiA9IChfX3B5eF92X3VzZXJkYXRhcyA9PSBQeV9Ob25lKTsKKysgICAgICBf X3B5eF90XzUgPSAoX19weXhfdF82ICE9IDApOworKyAgICAgIGlmIChfX3B5eF90XzUpIHsKKyAK Ky0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OQorLSAqICAgICAgICAg ICAgIHJldHVybiBNUFZfRk9STUFUX0lOVDY0CistICogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo dmFsdWUsIGZsb2F0KToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9ET1VCTEUg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNl KHZhbHVlLCAodHVwbGUsIGxpc3QpKToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1B VF9OT0RFX0FSUkFZCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTYzCisrICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEu Z2V0KGRhdGFfaWQsIE5vbmUpCisrICogICAgICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBO b25lOgorKyAqICAgICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tkYXRhX2lkXSA9 IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCisrICogICAgICAgICAg ICAgICAgIHdpdGggbm9naWw6CisgICovCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Cist ICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9S TUFUX0RPVUJMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ1OSwg X19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX3B5 eF9yID0gX19weXhfdF8zOworLSAgICBfX3B5eF90XzMgPSAwOworLSAgICBnb3RvIF9fcHl4X0ww OworKyAgICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25f c19SZXBseVVzZXJEYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg NTYzLCBfX3B5eF9MNF9lcnJvcikKKysgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwor KyAgICAgICAgX19weXhfdF8xNyA9IE5VTEw7CisrICAgICAgICBpZiAoQ1lUSE9OX1VOUEFDS19N RVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAgICAg ICAgIF9fcHl4X3RfMTcgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICAgICAg ICBpZiAobGlrZWx5KF9fcHl4X3RfMTcpKSB7CisrICAgICAgICAgICAgUHlPYmplY3QqIGZ1bmN0 aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CisrICAgICAgICAgICAgX19Q eXhfSU5DUkVGKF9fcHl4X3RfMTcpOworKyAgICAgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlv bik7CisrICAgICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsK KysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgX19weXhfdF8xID0gKF9fcHl4X3Rf MTcpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8xNywgX19w eXhfdl9kYXRhKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92 X2RhdGEpOworKyAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE3KTsgX19weXhfdF8xNyA9 IDA7CisrICAgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NjMs IF9fcHl4X0w0X2Vycm9yKQorKyAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAg ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgICAgIGlm ICh1bmxpa2VseShfX1B5eF9TZXRJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2 X19yZXBseV91c2VyZGF0YXMsIF9fcHl4X3ZfZGF0YV9pZCwgX19weXhfdF8xLCB1aW50NjRfdCwg MCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAs IDU2MywgX19weXhfTDRfZXJyb3IpCisrICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsK KysgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X3RfMSk7 CisrICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OAorLSAqICAgICAgICAgZWxp ZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9S TUFUX0lOVDY0CistICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9S TUFUX0RPVUJMRQorLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxp c3QpKToKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjIKKysg KiAgICAgICAgICAgICBlbHNlOgorKyAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxm LnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQorKyAqICAgICAgICAgICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9 IF9SZXBseVVzZXJEYXRhKGRhdGEpCisrICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQo KQorICAqLworLSAgfQorKyAgICAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0NjAKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgor LSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQorLSAqICAgICAgICAgZWxp ZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfQVJSQVkKKy0g KiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisrICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2NAorKyAqICAgICAgICAgICAgICAgICBpZiB1c2Vy ZGF0YXMgaXMgTm9uZToKKysgKiAgICAgICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0YXNb ZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorKyAqICAgICAgICAg ICAgICAgICB1c2VyZGF0YXMuYWRkKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgICAgICAgICAgZXJy ID0gbXB2X2NvbW1hbmRfbm9kZV9hc3luYyhzZWxmLl9jdHgsIGRhdGFfaWQsICZub2RlKQorICAq LworLSAgX19weXhfdF8yID0gUHlUdXBsZV9DaGVjayhfX3B5eF92X3ZhbHVlKTsgCistICBfX3B5 eF90XzQgPSAoX19weXhfdF8yICE9IDApOworLSAgaWYgKCFfX3B5eF90XzQpIHsKKy0gIH0gZWxz ZSB7CistICAgIF9fcHl4X3RfMSA9IF9fcHl4X3RfNDsKKy0gICAgZ290byBfX3B5eF9MNF9ib29s X2Jpbm9wX2RvbmU7CistICB9CistICBfX3B5eF90XzQgPSBQeUxpc3RfQ2hlY2soX19weXhfdl92 YWx1ZSk7IAorLSAgX19weXhfdF8yID0gKF9fcHl4X3RfNCAhPSAwKTsKKy0gIF9fcHl4X3RfMSA9 IF9fcHl4X3RfMjsKKy0gIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7CistICBfX3B5eF90XzIg PSAoX19weXhfdF8xICE9IDApOworLSAgaWYgKF9fcHl4X3RfMikgeworKyAgICAgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X25f c19hZGQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1NjQsIF9fcHl4 X0w0X2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICAgIF9fcHl4 X3RfMTcgPSBOVUxMOworKyAgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5 KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAgICAgICBfX3B5eF90XzE3ID0gUHlN ZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgICAgIGlmIChsaWtlbHkoX19weXhfdF8x NykpIHsKKysgICAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfMik7CisrICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzE3KTsKKysg ICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKysgICAgICAgIH0KKysgICAgICB9CisrICAgICAg X19weXhfdF8xID0gKF9fcHl4X3RfMTcpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzIsIF9fcHl4X3RfMTcpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7 CisrICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE3KTsgX19weXhfdF8xNyA9IDA7CisrICAg ICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTY0LCBfX3B5eF9MNF9l cnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ2MQorLSAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQorLSAq ICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKToKKy0gKiAgICAg ICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CistICog ICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9NQVAKKysgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY1CisrICogICAgICAgICAgICAgICAgICAgICBfcmVw bHlfdXNlcmRhdGFzW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkK KysgKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCisrICogICAgICAgICAgICAgICAg IHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICAgICAgICAgIGVyciA9IG1wdl9jb21tYW5kX25vZGVfYXN5bmMoc2VsZi5fY3R4LCBkYXRhX2lk LCAmbm9kZSkKKysgKiAgICAgICAgIGZpbmFsbHk6CisgICovCistICAgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zv cm1hdChNUFZfRk9STUFUX05PREVfQVJSQVkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9f UFlYX0VSUigwLCA0NjEsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8zKTsKKy0gICAgX19weXhfciA9IF9fcHl4X3RfMzsKKy0gICAgX19weXhfdF8zID0gMDsKKy0g ICAgZ290byBfX3B5eF9MMDsKKysgICAgICB7CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAorKyAgICAgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICAgICAgUHlfVU5CTE9D S19USFJFQURTCisrICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKysgICAgICAg ICAgI2VuZGlmCisrICAgICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ2MAorLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVl LCBmbG9hdCk6CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRE9VQkxFCistICog ICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwgbGlzdCkpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9E RV9BUlJBWQorLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKysgICAg ICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY2CisrICogICAgICAg ICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorKyAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2ls OgorKyAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZV9hc3luYyhz ZWxmLl9jdHgsIGRhdGFfaWQsICZub2RlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICBmaW5hbGx5OgorKyAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3Zh bHVlKG5vZGUpCisrICovCisrICAgICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfY29tbWFuZF9u b2RlX2FzeW5jKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9kYXRhX2lkLCAoJl9fcHl4X3Zf bm9kZSkpOworKyAgICAgICAgICB9CisrCisrICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1NjUKKysgKiAgICAgICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0 YXNbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorKyAqICAgICAg ICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKKysgKiAgICAgICAgICAgICAgICAgd2l0aCBub2dp bDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICAgICAg ZXJyID0gbXB2X2NvbW1hbmRfbm9kZV9hc3luYyhzZWxmLl9jdHgsIGRhdGFfaWQsICZub2RlKQor KyAqICAgICAgICAgZmluYWxseToKKyAgKi8KKysgICAgICAgICAgLypmaW5hbGx5OiovIHsKKysg ICAgICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAgICAgI2lmZGVmIFdJVEhf VEhSRUFECisrICAgICAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAgICAg ICAgICAgUHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAgICAgI2VuZGlmCisrICAgICAgICAg ICAgICBnb3RvIF9fcHl4X0wyNDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgX19weXhf TDI0OjsKKysgICAgICAgICAgfQorKyAgICAgIH0KKysgICAgfQorKyAgICBfX3B5eF9MNjo7Cisg ICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYyCistICogICAg ICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwgbGlzdCkpOgorLSAqICAgICAgICAg ICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfQVJSQVkKKy0gKiAgICAgICAgIGVsaWYgaXNpbnN0 YW5jZSh2YWx1ZSwgZGljdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX01BUAorLSAqICAgICAgICAgcmV0dXJuIE1Q Vl9GT1JNQVRfTk9ORQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2OAor KyAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZV9hc3luYyhzZWxm Ll9jdHgsIGRhdGFfaWQsICZub2RlKQorKyAqICAgICAgICAgZmluYWxseToKKysgKiAgICAgICAg ICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICBpZiBlcnIgPCAwOgorKyAqICAgICAgICAgICAgIHJhaXNlIE1Q VkVycm9yKGVycikKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IFB5RGljdF9DaGVjayhfX3B5eF92X3Zh bHVlKTsgCistICBfX3B5eF90XzEgPSAoX19weXhfdF8yICE9IDApOworLSAgaWYgKF9fcHl4X3Rf MSkgeworKyAgLypmaW5hbGx5OiovIHsKKysgICAgLypub3JtYWwgZXhpdDoqL3sKKysgICAgICBf X3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVl KF9fcHl4X3Zfc2VsZiwgX19weXhfdl9ub2RlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgNTY4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK KysgICAgICBnb3RvIF9fcHl4X0w1OworKyAgICB9CisrICAgIF9fcHl4X0w0X2Vycm9yOjsKKysg ICAgLypleGNlcHRpb24gZXhpdDoqL3sKKysgICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xh cmUKKysgICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorKyAgICAgIF9fcHl4X3RfMTUg PSAwOyBfX3B5eF90XzE0ID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3RfMTIgPSAwOyBfX3B5 eF90XzExID0gMDsgX19weXhfdF8xMCA9IDA7CisrICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNik7IF9f cHl4X3RfMTYgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNyk7IF9fcHl4X3Rf MTcgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsK KysgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICAgICAg aWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgX19QeXhfRXhjZXB0aW9uU3dhcCgmX19weXhfdF8x MiwgJl9fcHl4X3RfMTEsICZfX3B5eF90XzEwKTsKKysgICAgICBpZiAoKFBZX01BSk9SX1ZFUlNJ T04gPCAzKSB8fCB1bmxpa2VseShfX1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfMTUsICZfX3B5 eF90XzE0LCAmX19weXhfdF8xMykgPCAwKSkgX19QeXhfRXJyRmV0Y2goJl9fcHl4X3RfMTUsICZf X3B5eF90XzE0LCAmX19weXhfdF8xMyk7CisrICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE1 KTsKKysgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTQpOworKyAgICAgIF9fUHl4X1hHT1RS RUYoX19weXhfdF8xMyk7CisrICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzEyKTsKKysgICAg ICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTEpOworKyAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhf dF8xMCk7CisrICAgICAgX19weXhfdF84ID0gX19weXhfbGluZW5vOyBfX3B5eF90XzcgPSBfX3B5 eF9jbGluZW5vOyBfX3B5eF90XzE4ID0gX19weXhfZmlsZW5hbWU7CisrICAgICAgeworKyAgICAg ICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92 YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDU2OCwgX19weXhfTDI2X2Vycm9yKQorKyAgICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisrICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKysgICAgICB9CisrICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgewor KyAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMik7CisrICAgICAgICBfX1B5eF9YR0lW RVJFRihfX3B5eF90XzExKTsKKysgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTApOwor KyAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMiwgX19weXhfdF8xMSwgX19w eXhfdF8xMCk7CisrICAgICAgfQorKyAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTUpOwor KyAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTQpOworKyAgICAgIF9fUHl4X1hHSVZFUkVG KF9fcHl4X3RfMTMpOworKyAgICAgIF9fUHl4X0VyclJlc3RvcmUoX19weXhfdF8xNSwgX19weXhf dF8xNCwgX19weXhfdF8xMyk7CisrICAgICAgX19weXhfdF8xNSA9IDA7IF9fcHl4X3RfMTQgPSAw OyBfX3B5eF90XzEzID0gMDsgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90 XzEwID0gMDsKKysgICAgICBfX3B5eF9saW5lbm8gPSBfX3B5eF90Xzg7IF9fcHl4X2NsaW5lbm8g PSBfX3B5eF90Xzc7IF9fcHl4X2ZpbGVuYW1lID0gX19weXhfdF8xODsKKysgICAgICBnb3RvIF9f cHl4X0wxX2Vycm9yOworKyAgICAgIF9fcHl4X0wyNl9lcnJvcjo7CisrICAgICAgaWYgKFBZX01B Sk9SX1ZFUlNJT04gPj0gMykgeworKyAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMik7 CisrICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzExKTsKKysgICAgICAgIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3RfMTApOworKyAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhf dF8xMiwgX19weXhfdF8xMSwgX19weXhfdF8xMCk7CisrICAgICAgfQorKyAgICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xNSk7IF9fcHl4X3RfMTUgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xNCk7IF9fcHl4X3RfMTQgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8xMyk7IF9fcHl4X3RfMTMgPSAwOworKyAgICAgIF9fcHl4X3RfMTIgPSAwOyBfX3B5eF90XzEx ID0gMDsgX19weXhfdF8xMCA9IDA7CisrICAgICAgZ290byBfX3B5eF9MMV9lcnJvcjsKKysgICAg fQorKyAgICBfX3B5eF9MNTo7CisrICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0NjMKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FS UkFZCistICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorLSAqICAgICAg ICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfTUFQICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PTkUKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjkKKysgKiAgICAgICAgIGZpbmFsbHk6CisrICogICAg ICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZSkKKysgKiAgICAgICAgIGlmIGVy ciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByYWlz ZSBNUFZFcnJvcihlcnIpCisrICogICAgICAgICByZXR1cm4gcmVzdWx0CisrICovCisrICBfX3B5 eF90XzUgPSAoKF9fcHl4X3ZfZXJyIDwgMCkgIT0gMCk7CisrICBpZiAodW5saWtlbHkoX19weXhf dF81KSkgeworKworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcwCisr ICogICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZSkKKysgKiAgICAgICAg IGlmIGVyciA8IDA6CisrICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gcmVzdWx0CisgICogCisg ICovCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4 X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05PREVfTUFQKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDYzLCBfX3B5eF9MMV9lcnJvcikKKy0g ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7Cist ICAgIF9fcHl4X3RfMyA9IDA7CistICAgIGdvdG8gX19weXhfTDA7CisrICAgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1NzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdF8xNyA9IF9fUHl4X1B5SW50X0Zy b21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzE3KSkgX19QWVhfRVJS KDAsIDU3MCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzE3KTsK KysgICAgX19weXhfdF8zID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICAgIF9fcHl4X3Rf MyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CisrICAgICAgaWYgKGxpa2VseShfX3B5 eF90XzMpKSB7CisrICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVO Q1RJT04oX19weXhfdF8yKTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOworKyAg ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQo X19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgICAgfQorKyAgICB9CisrICAgIF9fcHl4X3RfMSA9 IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhf dF8zLCBfX3B5eF90XzE3KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBf X3B5eF90XzE3KTsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAw OworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xNyk7IF9fcHl4X3RfMTcgPSAwOworKyAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NzAsIF9fcHl4X0wxX2Vycm9y KQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwg MCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICBf X1BZWF9FUlIoMCwgNTcwLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ2MgorLSAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVl LCAodHVwbGUsIGxpc3QpKToKKy0gKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT0RF X0FSUkFZCistICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRf Tk9ERV9NQVAKKy0gKiAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PTkUKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2OQorKyAqICAgICAgICAgZmluYWxseToKKysg KiAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlKQorKyAqICAgICAgICAg aWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAg IHJhaXNlIE1QVkVycm9yKGVycikKKysgKiAgICAgICAgIHJldHVybiByZXN1bHQKKyAgKi8KKyAg IH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjQKKy0gKiAgICAg ICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CistICogICAgICAgICAgICAgcmV0dXJu IE1QVl9GT1JNQVRfTk9ERV9NQVAKKy0gKiAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PTkUg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjU3MQorKyAqICAgICAgICAgaWYgZXJyIDwgMDoKKysgKiAgICAgICAgICAgICBy YWlzZSBNUFZFcnJvcihlcnIpCisrICogICAgICAgICByZXR1cm4gcmVzdWx0ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBfcHJl cF9ub2RlX2xpc3Qoc2VsZiwgdmFsdWVzKToKKysgKiAgICAgQF9lcnJvcnMKKyAgKi8KKyAgIF9f UHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2Vu dW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9OT05FKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMCwgNDY0LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOworLSAgX19weXhfciA9IF9fcHl4X3RfMzsKKy0gIF9fcHl4X3RfMyA9IDA7CisrICBf X1B5eF9JTkNSRUYoX19weXhfdl9yZXN1bHQpOworKyAgX19weXhfciA9IF9fcHl4X3ZfcmVzdWx0 OworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0NTEKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1MzAKKysgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5zdHJpbmcpCisr ICogCisrICogICAgIGRlZiBjb21tYW5kKHNlbGYsICpjbWRsaXN0LCBhc3luY2hyb25vdXM9RmFs c2UsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICIiIlNlbmQgYSBjb21tYW5kIHRvIG1wdi4KKyAgKiAKKy0gKiAgICAgZGVmIF9mb3JtYXRfZm9y KHNlbGYsIHZhbHVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg aWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CistICogICAgICAgICAgICAgcmV0dXJu IE1QVl9GT1JNQVRfU1RSSU5HCisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K KyAgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKysgIF9f UHl4X1hERUNSRUYoX19weXhfdF8yKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0g IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX2Zvcm1hdF9m b3IiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9f UHl4X1hERUNSRUYoX19weXhfdF8xNik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTcpOwor KyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5jb21tYW5k IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5 eF9yID0gTlVMTDsKKyAgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9yZXN1 bHQpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X3VzZXJkYXRhcyk7CisgICBfX1B5eF9YR0lW RVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0 dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 NjYKKy0gKiAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PTkUKKysvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTc0CisrICogCisrICogICAgIEBfZXJyb3JzCisrICogICAgIGRl ZiBnZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIiR2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9w ZXJ0eSBhc3luY2hyb25vdXNseS4KKyAgKiAKKy0gKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBf cHJlcF9ub2RlX2xpc3Qoc2VsZiwgdmFsdWVzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlCistICogICAgICAgICBjZGVmIG1wdl9m b3JtYXQgZm9ybWF0CisgICovCisgCistc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX2xpc3Qoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQ eU9iamVjdCAqX19weXhfdl92YWx1ZXMpIHsKKy0gIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF92X25v ZGU7CistICBlbnVtIG1wdl9mb3JtYXQgX19weXhfdl9mb3JtYXQ7CistICBzdHJ1Y3QgbXB2X25v ZGVfbGlzdCAqX19weXhfdl9ub2RlX2xpc3Q7CistICBQeU9iamVjdCAqX19weXhfdl9pID0gTlVM TDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlID0gTlVMTDsKKy0gIHN0cnVjdCBtcHZfbm9k ZV9saXN0ICpfX3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5X3Nz aXplX3QgX19weXhfdF8xOworLSAgaW50IF9fcHl4X3RfMjsKKy0gIFB5T2JqZWN0ICpfX3B5eF90 XzMgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CistICBQeU9iamVjdCAq KCpfX3B5eF90XzUpKFB5T2JqZWN0ICopOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7 CistICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90Xzgg PSBOVUxMOworLSAgZW51bSBtcHZfZm9ybWF0IF9fcHl4X3RfOTsKKy0gIFB5X3NzaXplX3QgX19w eXhfdF8xMDsKKysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExZ2V0X3Byb3BlcnR5X2FzeW5jKFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19w eXhfa3dkcyk7IC8qcHJvdG8qLworK3N0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlfYXN5bmNbXSA9ICJHZXRzIHRoZSB2YWx1 ZSBvZiBhIHByb3BlcnR5IGFzeW5jaHJvbm91c2x5LlxuXG4gICAgICAgIEFyZ3VtZW50czpcbiAg ICAgICAgcHJvcDogUHJvcGVydHkgdG8gZ2V0IHRoZSB2YWx1ZSBvZi5cblxuICAgICAgICBLZXl3 b3JkIGFyZ3VtZW50czpcbiAgICAgICAgZGF0YTogVmFsdWUgdG8gYmUgcGFzc2VkIGludG8gdGhl IHJlcGx5X3VzZXJkYXRhIG9mIHRoZSByZXNwb25zZSBldmVudC5cbiAgICAgICAgV3JhcHM6IG1w dl9nZXRfcHJvcGVydHlfYXN5bmMiOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExZ2V0X3Byb3BlcnR5X2FzeW5jKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykg eworKyAgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCA9IDA7CisrICBQeU9iamVjdCAqX19weXhfdl9k YXRhID0gMDsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9wcmVwX25vZGVfbGlzdCIsIDApOworLQorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2OQorLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBu b2RlCistICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0CistICogICAgICAgICBjZGVm IG1wdl9ub2RlX2xpc3QqIG5vZGVfbGlzdCA9IDxtcHZfbm9kZV9saXN0Kj5tYWxsb2Moc2l6ZW9m KG1wdl9ub2RlX2xpc3QpKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICBub2RlX2xpc3QubnVtID0gbGVuKHZhbHVlcykKKy0gKiAgICAgICAgIG5vZGVfbGlzdC52YWx1 ZXMgPSBOVUxMCistICovCistICBfX3B5eF92X25vZGVfbGlzdCA9ICgoc3RydWN0IG1wdl9ub2Rl X2xpc3QgKiltYWxsb2MoKHNpemVvZihzdHJ1Y3QgbXB2X25vZGVfbGlzdCkpKSk7CistCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDcwCistICogICAgICAgICBjZGVmIG1w dl9mb3JtYXQgZm9ybWF0CistICogICAgICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIG5vZGVfbGlz dCA9IDxtcHZfbm9kZV9saXN0Kj5tYWxsb2Moc2l6ZW9mKG1wdl9ub2RlX2xpc3QpKQorLSAqICAg ICAgICAgbm9kZV9saXN0Lm51bSA9IGxlbih2YWx1ZXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSBOVUxMCistICogICAgICAgICBu b2RlX2xpc3Qua2V5cyA9IE5VTEwKKy0gKi8KKy0gIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0xlbmd0 aChfX3B5eF92X3ZhbHVlcyk7IGlmICh1bmxpa2VseShfX3B5eF90XzEgPT0gKChQeV9zc2l6ZV90 KS0xKSkpIF9fUFlYX0VSUigwLCA0NzAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdl9ub2Rl X2xpc3QtPm51bSA9IF9fcHl4X3RfMTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0NzEKKy0gKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbm9kZV9saXN0ID0g PG1wdl9ub2RlX2xpc3QqPm1hbGxvYyhzaXplb2YobXB2X25vZGVfbGlzdCkpCistICogICAgICAg ICBub2RlX2xpc3QubnVtID0gbGVuKHZhbHVlcykKKy0gKiAgICAgICAgIG5vZGVfbGlzdC52YWx1 ZXMgPSBOVUxMICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIG5vZGVf bGlzdC5rZXlzID0gTlVMTAorLSAqICAgICAgICAgaWYgbm9kZV9saXN0Lm51bToKKy0gKi8KKy0g IF9fcHl4X3Zfbm9kZV9saXN0LT52YWx1ZXMgPSBOVUxMOworLQorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ3MgorLSAqICAgICAgICAgbm9kZV9saXN0Lm51bSA9IGxlbih2 YWx1ZXMpCistICogICAgICAgICBub2RlX2xpc3QudmFsdWVzID0gTlVMTAorLSAqICAgICAgICAg bm9kZV9saXN0LmtleXMgPSBOVUxMICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgIGlmIG5vZGVfbGlzdC5udW06CistICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVl cyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUpKQor LSAqLworLSAgX19weXhfdl9ub2RlX2xpc3QtPmtleXMgPSBOVUxMOworLQorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3MworLSAqICAgICAgICAgbm9kZV9saXN0LnZhbHVl cyA9IE5VTEwKKy0gKiAgICAgICAgIG5vZGVfbGlzdC5rZXlzID0gTlVMTAorLSAqICAgICAgICAg aWYgbm9kZV9saXN0Lm51bTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhub2RlX2xpc3QubnVt ICogc2l6ZW9mKG1wdl9ub2RlKSkKKy0gKiAgICAgICAgIGZvciBpLCB2YWx1ZSBpbiBlbnVtZXJh dGUodmFsdWVzKToKKy0gKi8KKy0gIF9fcHl4X3RfMiA9IChfX3B5eF92X25vZGVfbGlzdC0+bnVt ICE9IDApOworLSAgaWYgKF9fcHl4X3RfMikgeworLQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDc0CistICogICAgICAgICBub2RlX2xpc3Qua2V5cyA9IE5VTEwKKy0g KiAgICAgICAgIGlmIG5vZGVfbGlzdC5udW06CistICogICAgICAgICAgICAgbm9kZV9saXN0LnZh bHVlcyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUp KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBmb3IgaSwgdmFsdWUg aW4gZW51bWVyYXRlKHZhbHVlcyk6CistICogICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9y bWF0X2Zvcih2YWx1ZSkKKy0gKi8KKy0gICAgX19weXhfdl9ub2RlX2xpc3QtPnZhbHVlcyA9ICgo c3RydWN0IG1wdl9ub2RlICopbWFsbG9jKChfX3B5eF92X25vZGVfbGlzdC0+bnVtICogKHNpemVv ZihzdHJ1Y3QgbXB2X25vZGUpKSkpKTsKKy0KKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ3MworLSAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKKy0gKiAg ICAgICAgIG5vZGVfbGlzdC5rZXlzID0gTlVMTAorLSAqICAgICAgICAgaWYgbm9kZV9saXN0Lm51 bTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG5vZGVfbGlz dC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9u b2RlKSkKKy0gKiAgICAgICAgIGZvciBpLCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKToKKy0g Ki8KKy0gIH0KKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzUKKy0g KiAgICAgICAgIGlmIG5vZGVfbGlzdC5udW06CistICogICAgICAgICAgICAgbm9kZV9saXN0LnZh bHVlcyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUp KQorLSAqICAgICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9y bWF0X2Zvcih2YWx1ZSkKKy0gKiAgICAgICAgICAgICBub2RlID0gc2VsZi5fcHJlcF9uYXRpdmVf dmFsdWUodmFsdWUsIGZvcm1hdCkKKy0gKi8KKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMCk7 CistICBfX3B5eF90XzMgPSBfX3B5eF9pbnRfMDsKKy0gIGlmIChsaWtlbHkoUHlMaXN0X0NoZWNr RXhhY3QoX19weXhfdl92YWx1ZXMpKSB8fCBQeVR1cGxlX0NoZWNrRXhhY3QoX19weXhfdl92YWx1 ZXMpKSB7CistICAgIF9fcHl4X3RfNCA9IF9fcHl4X3ZfdmFsdWVzOyBfX1B5eF9JTkNSRUYoX19w eXhfdF80KTsgX19weXhfdF8xID0gMDsKKy0gICAgX19weXhfdF81ID0gTlVMTDsKKy0gIH0gZWxz ZSB7CistICAgIF9fcHl4X3RfMSA9IC0xOyBfX3B5eF90XzQgPSBQeU9iamVjdF9HZXRJdGVyKF9f cHl4X3ZfdmFsdWVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDc1 LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgIF9f cHl4X3RfNSA9IFB5X1RZUEUoX19weXhfdF80KS0+dHBfaXRlcm5leHQ7IGlmICh1bmxpa2VseSgh X19weXhfdF81KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCistICB9CistICBm b3IgKDs7KSB7CistICAgIGlmIChsaWtlbHkoIV9fcHl4X3RfNSkpIHsKKy0gICAgICBpZiAobGlr ZWx5KFB5TGlzdF9DaGVja0V4YWN0KF9fcHl4X3RfNCkpKSB7CistICAgICAgICBpZiAoX19weXhf dF8xID49IFB5TGlzdF9HRVRfU0laRShfX3B5eF90XzQpKSBicmVhazsKKy0gICAgICAgICNpZiBD WVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUwor LSAgICAgICAgX19weXhfdF82ID0gUHlMaXN0X0dFVF9JVEVNKF9fcHl4X3RfNCwgX19weXhfdF8x KTsgX19QeXhfSU5DUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfMSsrOyBpZiAodW5saWtlbHkoMCA8 IDApKSBfX1BZWF9FUlIoMCwgNDc1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICAgICNlbHNlCist ICAgICAgICBfX3B5eF90XzYgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF80LCBfX3B5eF90XzEp OyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDc1 LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAg ICAgICAgI2VuZGlmCistICAgICAgfSBlbHNlIHsKKy0gICAgICAgIGlmIChfX3B5eF90XzEgPj0g UHlUdXBsZV9HRVRfU0laRShfX3B5eF90XzQpKSBicmVhazsKKy0gICAgICAgICNpZiBDWVRIT05f QVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworLSAgICAg ICAgX19weXhfdF82ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF90XzQsIF9fcHl4X3RfMSk7IF9f UHl4X0lOQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkg X19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCistICAgICAgICAjZWxzZQorLSAgICAg ICAgX19weXhfdF82ID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfNCwgX19weXhfdF8xKTsgX19w eXhfdF8xKys7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19w eXhfTDFfZXJyb3IpCistICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgICAg ICNlbmRpZgorKyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworKyAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJnZXRfcHJvcGVydHlfYXN5 bmMgKHdyYXBwZXIpIiwgMCk7CisrICB7CisrICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5 YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3Byb3AsJl9fcHl4X25fc19kYXRhLDB9OworKyAgICBQ eU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07CisrICAgIHZhbHVlc1sxXSA9ICgoUHlPYmplY3Qg KilQeV9Ob25lKTsKKysgICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7CisrICAgICAgUHlf c3NpemVfdCBrd19hcmdzOworKyAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1 cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOworKyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKysg ICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywg MSk7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAxOiB2YWx1 ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworKyAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMDogYnJlYWs7CisrICAgICAgICBkZWZhdWx0 OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworICAgICAgIH0KKy0gICAgfSBlbHNlIHsK Ky0gICAgICBfX3B5eF90XzYgPSBfX3B5eF90XzUoX19weXhfdF80KTsKKy0gICAgICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIHsKKy0gICAgICAgIFB5T2JqZWN0KiBleGNfdHlwZSA9IFB5RXJy X09jY3VycmVkKCk7CistICAgICAgICBpZiAoZXhjX3R5cGUpIHsKKy0gICAgICAgICAgaWYgKGxp a2VseShfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoZXhjX3R5cGUsIFB5RXhjX1N0 b3BJdGVyYXRpb24pKSkgUHlFcnJfQ2xlYXIoKTsKKy0gICAgICAgICAgZWxzZSBfX1BZWF9FUlIo MCwgNDc1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19w eXhfa3dkcyk7CisrICAgICAgc3dpdGNoIChwb3NfYXJncykgeworKyAgICAgICAgY2FzZSAgMDoK KysgICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3Ry KF9fcHl4X2t3ZHMsIF9fcHl4X25fc19wcm9wKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAg IGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgICAgIENZVEhPTl9GQUxM VEhST1VHSDsKKysgICAgICAgIGNhc2UgIDE6CisrICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsK KysgICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19w eXhfa3dkcywgX19weXhfbl9zX2RhdGEpOworKyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVz WzFdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorICAgICAgICAgfQorLSAgICAgICAgYnJlYWs7Cisg ICAgICAgfQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgICB9CistICAgIF9f UHl4X1hERUNSRUZfU0VUKF9fcHl4X3ZfdmFsdWUsIF9fcHl4X3RfNik7CistICAgIF9fcHl4X3Rf NiA9IDA7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9YREVDUkVG X1NFVChfX3B5eF92X2ksIF9fcHl4X3RfMyk7CistICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50 X0FkZE9iakMoX19weXhfdF8zLCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsKKy0gICAg X19weXhfdF8zID0gX19weXhfdF82OworLSAgICBfX3B5eF90XzYgPSAwOworLQorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc2CistICogICAgICAgICAgICAgbm9kZV9s aXN0LnZhbHVlcyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2 X25vZGUpKQorLSAqICAgICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOgor LSAqICAgICAgICAgICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBub2RlID0gc2VsZi5fcHJlcF9u YXRpdmVfdmFsdWUodmFsdWUsIGZvcm1hdCkKKy0gKiAgICAgICAgICAgICBub2RlX2xpc3QudmFs dWVzW2ldID0gbm9kZQorLSAqLworLSAgICBfX3B5eF90XzcgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zvcik7 IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ3NiwgX19weXhfTDFfZXJy b3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgICBfX3B5eF90XzggPSBOVUxM OworLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVj ayhfX3B5eF90XzcpKSkgeworLSAgICAgIF9fcHl4X3RfOCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9f cHl4X3RfNyk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzgpKSB7CistICAgICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF83KTsKKy0gICAg ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzgpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0 aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF83LCBmdW5jdGlvbik7Cisr ICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworKyAgICAgICAgaWYgKHVubGlrZWx5 KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVz LCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAiZ2V0X3Byb3BlcnR5X2FzeW5jIikgPCAwKSkgX19QWVhf RVJSKDAsIDU3NCwgX19weXhfTDNfZXJyb3IpCisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAg ICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgeworKyAgICAgICAgY2Fz ZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKysgICAg ICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5 VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CisrICAgICAgICBicmVhazsKKysgICAgICAg IGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisgICAgICAgfQorICAgICB9 CistICAgIF9fcHl4X3RfNiA9IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdz KF9fcHl4X3RfNywgX19weXhfdF84LCBfX3B5eF92X3ZhbHVlKSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF83LCBfX3B5eF92X3ZhbHVlKTsKKy0gICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA0NzYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Cist ICAgIF9fcHl4X3RfOSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0FzX2VudW1fX21w dl9mb3JtYXQoX19weXhfdF82KSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkgX19Q WVhfRVJSKDAsIDQ3NiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICBfX3B5eF92X2Zvcm1hdCA9IF9fcHl4X3RfOTsKKy0K Ky0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3NworLSAqICAgICAgICAg Zm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOgorLSAqICAgICAgICAgICAgIGZvcm1h dCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCistICogICAgICAgICAgICAgbm9kZSA9IHNlbGYu X3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICBub2RlX2xpc3QudmFsdWVzW2ldID0gbm9kZQorLSAqICAg ICAgICAgcmV0dXJuIG5vZGVfbGlzdAorLSAqLworLSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoX19weXhfdl9mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzcsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF82KTsKKy0gICAgX19weXhfdl9ub2RlID0gKChzdHJ1Y3QgX19weXhfdnRh YnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19w eXhfdnRhYiktPl9wcmVwX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3ZfdmFsdWUs IF9fcHl4X3RfNik7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OworLQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc4CistICogICAg ICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkKKy0gKiAgICAgICAgICAg ICBub2RlID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUodmFsdWUsIGZvcm1hdCkKKy0gKiAgICAg ICAgICAgICBub2RlX2xpc3QudmFsdWVzW2ldID0gbm9kZSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICByZXR1cm4gbm9kZV9saXN0CistICogCistICovCistICAgIF9f cHl4X3RfMTAgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5eF92X2kpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfMTAgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBf X1BZWF9FUlIoMCwgNDc4LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgKF9fcHl4X3Zfbm9kZV9saXN0 LT52YWx1ZXNbX19weXhfdF8xMF0pID0gX19weXhfdl9ub2RlOworLQorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc1CistICogICAgICAgICBpZiBub2RlX2xpc3QubnVt OgorLSAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUqPm1hbGxvYyhu b2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKKy0gKiAgICAgICAgIGZvciBpLCB2YWx1 ZSBpbiBlbnVtZXJhdGUodmFsdWVzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCistICogICAgICAg ICAgICAgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCistICov CisrICAgIF9fcHl4X3ZfcHJvcCA9IHZhbHVlc1swXTsKKysgICAgX19weXhfdl9kYXRhID0gdmFs dWVzWzFdOworICAgfQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7 CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0KKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzkKKy0gKiAgICAgICAgICAgICBub2RlID0g c2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUodmFsdWUsIGZvcm1hdCkKKy0gKiAgICAgICAgICAgICBu b2RlX2xpc3QudmFsdWVzW2ldID0gbm9kZQorLSAqICAgICAgICAgcmV0dXJuIG5vZGVfbGlzdCAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGNkZWYgbXB2X25vZGVf bGlzdCogX3ByZXBfbm9kZV9tYXAoc2VsZiwgbWFwKToKKy0gKi8KKy0gIF9fcHl4X3IgPSBfX3B5 eF92X25vZGVfbGlzdDsKKy0gIGdvdG8gX19weXhfTDA7CistCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NDY2CistICogICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9OT05F CistICogCistICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCogX3ByZXBfbm9kZV9saXN0KHNlbGYs IHZhbHVlcyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYg bXB2X25vZGUgbm9kZQorLSAqICAgICAgICAgY2RlZiBtcHZfZm9ybWF0IGZvcm1hdAorLSAqLwor KyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKysgIF9fcHl4X0w1X2Fy Z3R1cGxlX2Vycm9yOjsKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJnZXRfcHJvcGVy dHlfYXN5bmMiLCAwLCAxLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhf RVJSKDAsIDU3NCwgX19weXhfTDNfZXJyb3IpCisrICBfX3B5eF9MM19lcnJvcjo7CisrICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmdldF9wcm9wZXJ0eV9h c3luYyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gTlVMTDsKKysgIF9fcHl4 X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlfYXN5bmMoKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwg X19weXhfdl9wcm9wLCBfX3B5eF92X2RhdGEpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf OCk7CistICBfX1B5eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0 Ll9wcmVwX25vZGVfbGlzdCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUsIDEsIDApOworLSAgX19weXhfciA9IDA7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9Y REVDUkVGKF9fcHl4X3ZfaSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfdmFsdWUpOworICAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9Cisg CistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4MQorLSAqICAgICAgICAgcmV0 dXJuIG5vZGVfbGlzdAorLSAqIAorLSAqICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25v ZGVfbWFwKHNlbGYsIG1hcCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIGNkZWYgY2hhciogY2tleQorLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBsaXN0 CistICovCistCistc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX21hcChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X21hcCkgeworLSAgY2hhciAqX19weXhfdl9ja2V5OworLSAgc3RydWN0IG1wdl9ub2RlX2xp c3QgKl9fcHl4X3ZfbGlzdDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2tleXMgPSBOVUxMOworLSAg UHlPYmplY3QgKl9fcHl4X3ZfaSA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdl9rZXkgPSBO VUxMOworLSAgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X3I7Cisrc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlf YXN5bmMoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQeU9iamVjdCAqX19weXhfdl9kYXRh KSB7CisrICB1aW50NjRfdCBfX3B5eF92X2lkX2RhdGE7CisrICBQeU9iamVjdCAqX19weXhfdl91 c2VyZGF0YXMgPSBOVUxMOworKyAgY2hhciBjb25zdCAqX19weXhfdl9wcm9wX2M7CisrICBpbnQg X19weXhfdl9lcnI7CisrICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisgICBQeU9i amVjdCAqX19weXhfdF8yID0gTlVMTDsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOwor LSAgUHlfc3NpemVfdCBfX3B5eF90XzQ7CistICBpbnQgX19weXhfdF81OworLSAgUHlPYmplY3Qg KigqX19weXhfdF82KShQeU9iamVjdCAqKTsKKysgIFB5X2hhc2hfdCBfX3B5eF90XzQ7CisrICBQ eU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKysgIGludCBfX3B5eF90XzY7CisgICBQeU9iamVj dCAqX19weXhfdF83ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzggPSBOVUxMOworLSAg Y2hhciAqX19weXhfdF85OworLSAgUHlfc3NpemVfdCBfX3B5eF90XzEwOworLSAgUHlfc3NpemVf dCBfX3B5eF90XzExOworKyAgaW50IF9fcHl4X3RfODsKKysgIGludCBfX3B5eF90Xzk7CisrICBj aGFyIGNvbnN0ICpfX3B5eF90XzEwOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25z dCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7 CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX3ByZXBfbm9kZV9tYXAiLCAwKTsKKysg IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJnZXRfcHJvcGVydHlfYXN5bmMiLCAwKTsKKysg IF9fUHl4X0lOQ1JFRihfX3B5eF92X3Byb3ApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ4NAorLSAqICAgICAgICAgY2RlZiBjaGFyKiBja2V5CistICogICAgICAg ICBjZGVmIG1wdl9ub2RlX2xpc3QqIGxpc3QKKy0gKiAgICAgICAgIGxpc3QgPSBzZWxmLl9wcmVw X25vZGVfbGlzdChtYXAudmFsdWVzKCkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgIGtleXMgPSBtYXAua2V5cygpCistICogICAgICAgICBpZiBub3QgbGVuKGtleXMp OgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4MworKyAqICAgICAgICAg ZGF0YTogVmFsdWUgdG8gYmUgcGFzc2VkIGludG8gdGhlIHJlcGx5X3VzZXJkYXRhIG9mIHRoZSBy ZXNwb25zZSBldmVudC4KKysgKiAgICAgICAgIFdyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5X2FzeW5j IiIiCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCisrICogICAgICAgICBjZGVm IHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorICAqLworLSAgX19weXhf dF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X21hcCwgX19weXhfbl9zX3Zh bHVlcyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQ4NCwgX19weXhf TDFfZXJyb3IpCisrICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKKysgIGlmICh1 bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworKyAgICBpZiAodW5saWtlbHkoIShfX3B5eF92 X3NlbGYtPl9jdHggIT0gMCkpKSB7CisrICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRp b25FcnJvcik7CisrICAgICAgX19QWVhfRVJSKDAsIDU4MywgX19weXhfTDFfZXJyb3IpCisrICAg IH0KKysgIH0KKysgICNlbmRpZgorKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjU4NAorKyAqICAgICAgICAgV3JhcHM6IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMiIiIKKysg KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHBy b3ApICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWYgdWludDY0 X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisrICogICAgICAgICB1c2VyZGF0YXMg PSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorKyAqLworKyAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1ODQsIF9fcHl4X0wxX2Vycm9yKQorICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICBfX3B5eF90XzMgPSBOVUxMOworLSAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkp IHsKKysgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF8yKSkpIHsKKyAgICAgX19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYoX19w eXhfdF8yKTsKKyAgICAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7CisgICAgICAgUHlPYmplY3Qq IGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CitAQCAtMTAzNTMs MjIzICsxMTA5OSwyMzQgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX20KKyAgICAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworICAgICB9CisgICB9CistICBfX3B5eF90 XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBf X3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7CisrICBfX3B5 eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIs IF9fcHl4X3RfMywgX19weXhfdl9wcm9wKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfdF8yLCBfX3B5eF92X3Byb3ApOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5 eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNDg0 LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDU4NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19weXhfdl9saXN0 ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9wcmVwX25vZGVfbGlzdChfX3B5eF92X3Nl bGYsIF9fcHl4X3RfMSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKysgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9wcm9wLCBfX3B5eF90XzEpOworKyAgX19w eXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODUK Ky0gKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbGlzdAorLSAqICAgICAgICAgbGlzdCA9 IHNlbGYuX3ByZXBfbm9kZV9saXN0KG1hcC52YWx1ZXMoKSkKKy0gKiAgICAgICAgIGtleXMgPSBt YXAua2V5cygpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIG5v dCBsZW4oa2V5cyk6CistICogICAgICAgICAgICAgcmV0dXJuIGxpc3QKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODUKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgK KysgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCisrICogICAgICAgICBjZGVmIHVpbnQ2 NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChp ZF9kYXRhLCBOb25lKQorKyAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6CisgICovCist ICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfbWFwLCBfX3B5 eF9uX3Nfa2V5cyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQ4NSwg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBQeU9iamVjdF9IYXNoKF9fcHl4X3ZfZGF0 YSk7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPT0gKChQeV9oYXNoX3QpLTEpKSkgX19QWVhfRVJS KDAsIDU4NSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF92X2lkX2RhdGEgPSAoKHVpbnQ2NF90 KV9fcHl4X3RfNCk7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTg2 CisrICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQorKyAqICAgICAgICAgY2RlZiB1aW50 NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKysgKiAgICAgICAgIHVzZXJkYXRh cyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgorKyAqICAg ICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVw bHlVc2VyRGF0YShkYXRhKQorKyAqLworKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF9uX3NfZ2V0KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTg2LCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gTlVMTDsKKysgIF9f cHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoX19weXhfdl9pZF9kYXRhKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTg2LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgX19weXhfdF81ID0gTlVMTDsKKysgIF9f cHl4X3RfNiA9IDA7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRf U0VMRihfX3B5eF90XzIpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKKysgICAgX19w eXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgaWYgKGxpa2VseShf X3B5eF90XzUpKSB7CisgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZV TkNUSU9OKF9fcHl4X3RfMik7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7CisrICAg ICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7CisgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKKyAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworKyAgICAg IF9fcHl4X3RfNiA9IDE7CisgICAgIH0KKyAgIH0KKy0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzMp ID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhf dF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDQ4NSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK KysgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKysgIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9fcHl4 X3RfMikpIHsKKysgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF81LCBfX3B5 eF90XzMsIFB5X05vbmV9OworKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RD YWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKKysgIH0gZWxzZQorKyAgI2VuZGlmCisrICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FM TAorKyAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7CisrICAg IFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNSwgX19weXhfdF8zLCBQeV9Ob25l fTsKKysgICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8y LCBfX3B5eF90ZW1wKzEtX19weXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKysgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAg fSBlbHNlCisrICAjZW5kaWYKKysgIHsKKysgICAgX19weXhfdF83ID0gUHlUdXBsZV9OZXcoMitf X3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA1ODYsIF9f cHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKysgICAgaWYgKF9f cHl4X3RfNSkgeworKyAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF81KTsgUHlUdXBsZV9TRVRf SVRFTShfX3B5eF90XzcsIDAsIF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IE5VTEw7CisrICAgIH0K KysgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzMpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfNywgMCtfX3B5eF90XzYsIF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0lOQ1JFRihQeV9O b25lKTsKKysgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKysgICAgUHlUdXBsZV9TRVRfSVRF TShfX3B5eF90XzcsIDErX19weXhfdF82LCBQeV9Ob25lKTsKKysgICAgX19weXhfdF8zID0gMDsK KysgICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3Rf NywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4NiwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgIH0KKyAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19weXhfdl9rZXlzID0gX19weXhfdF8xOwor KyAgX19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4NgorLSAqICAgICAgICAgbGlz dCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KG1hcC52YWx1ZXMoKSkKKy0gKiAgICAgICAgIGtleXMg PSBtYXAua2V5cygpCistICogICAgICAgICBpZiBub3QgbGVuKGtleXMpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIGxpc3QKKy0gKiAgICAgICAg IGxpc3Qua2V5cyA9IDxjaGFyKio+bWFsbG9jKGxpc3QubnVtKQorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjU4NworKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRh ID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKysgKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVw bHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCisrICogICAgICAgICBpZiB1c2VyZGF0YXMg aXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHNl bGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShk YXRhKQorKyAqICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCisgICovCistICBfX3B5eF90XzQgPSBQ eU9iamVjdF9MZW5ndGgoX19weXhfdl9rZXlzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA9PSAo KFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDQ4NiwgX19weXhfTDFfZXJyb3IpCistICBf X3B5eF90XzUgPSAoKCEoX19weXhfdF80ICE9IDApKSAhPSAwKTsKKy0gIGlmIChfX3B5eF90XzUp IHsKKysgIF9fcHl4X3RfOCA9IChfX3B5eF92X3VzZXJkYXRhcyA9PSBQeV9Ob25lKTsKKysgIF9f cHl4X3RfOSA9IChfX3B5eF90XzggIT0gMCk7CisrICBpZiAoX19weXhfdF85KSB7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODcKKy0gKiAgICAgICAgIGtleXMg PSBtYXAua2V5cygpCistICogICAgICAgICBpZiBub3QgbGVuKGtleXMpOgorLSAqICAgICAgICAg ICAgIHJldHVybiBsaXN0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg IGxpc3Qua2V5cyA9IDxjaGFyKio+bWFsbG9jKGxpc3QubnVtKQorLSAqICAgICAgICAgZm9yIGks IGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1ODgKKysgKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEu Z2V0KGlkX2RhdGEsIE5vbmUpCisrICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKKysg KiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRhdGFzID0g X1JlcGx5VXNlckRhdGEoZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgdXNlcmRhdGFzLmFkZCgpCisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3Bf YyA9IHByb3AKKyAgKi8KKy0gICAgX19weXhfciA9IF9fcHl4X3ZfbGlzdDsKKy0gICAgZ290byBf X3B5eF9MMDsKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4 X25fc19SZXBseVVzZXJEYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgNTg4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Cisr ICAgIF9fcHl4X3RfNyA9IE5VTEw7CisrICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg dW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKysgICAgICBfX3B5eF90Xzcg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICAgIGlmIChsaWtlbHkoX19weXhf dF83KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfMik7CisrICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF83KTsKKysgICAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfMiwgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQorKyAgICBfX3B5eF90XzEgPSAo X19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3Rf NywgX19weXhfdl9kYXRhKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBf X3B5eF92X2RhdGEpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9 IDA7CisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4OCwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgaWYgKHVubGlrZWx5KF9fUHl4 X1NldEl0ZW1JbnQoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfdl9pZF9kYXRh LCBfX3B5eF90XzEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAw LCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNTg4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl91c2VyZGF0 YXMsIF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg2CistICog ICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QobWFwLnZhbHVlcygpKQorLSAqICAg ICAgICAga2V5cyA9IG1hcC5rZXlzKCkKKy0gKiAgICAgICAgIGlmIG5vdCBsZW4oa2V5cyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByZXR1cm4gbGlzdAor LSAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2MobGlzdC5udW0pCisrICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODcKKysgKiAgICAgICAgIGNkZWYgdWlu dDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisrICogICAgICAgICB1c2VyZGF0 YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorKyAqICAgICAgICAg aWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1Jl cGx5VXNlckRhdGEoZGF0YSkKKysgKiAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorICAqLworICAg fQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4OAorLSAqICAgICAg ICAgaWYgbm90IGxlbihrZXlzKToKKy0gKiAgICAgICAgICAgICByZXR1cm4gbGlzdAorLSAqICAg ICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2MobGlzdC5udW0pICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGZvciBpLCBrZXkgaW4gZW51bWVyYXRlKGtleXMp OgorLSAqICAgICAgICAgICAgIGtleSA9IF9zdHJlbmMoa2V5KQorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjU4OQorKyAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6 CisrICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRh cyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisrICogICAgICAgICB1c2VyZGF0YXMuYWRkKCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBw cm9wX2MgPSBwcm9wCisrICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgX19weXhfdl9s aXN0LT5rZXlzID0gKChjaGFyICoqKW1hbGxvYyhfX3B5eF92X2xpc3QtPm51bSkpOworKyAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19w eXhfbl9zX2FkZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU4OSwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fcHl4X3Rf NyA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhv ZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICBfX3B5eF90XzcgPSBQeU1ldGhvZF9HRVRfU0VM RihfX3B5eF90XzIpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfNykpIHsKKysgICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAg ICBfX1B5eF9JTkNSRUYoX19weXhfdF83KTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24p OworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgIH0K KysgIH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzcpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfNykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19w eXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysg IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4OSwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg5CistICog ICAgICAgICAgICAgcmV0dXJuIGxpc3QKKy0gKiAgICAgICAgIGxpc3Qua2V5cyA9IDxjaGFyKio+ bWFsbG9jKGxpc3QubnVtKQorLSAqICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5 cyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBrZXkgPSBf c3RyZW5jKGtleSkKKy0gKiAgICAgICAgICAgICBja2V5ID0ga2V5CisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NTkwCisrICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2Vy ZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisrICogICAg ICAgICB1c2VyZGF0YXMuYWRkKCkKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9j ID0gcHJvcCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB3aXRoIG5v Z2lsOgorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMoCisgICov CistICBfX1B5eF9JTkNSRUYoX19weXhfaW50XzApOworLSAgX19weXhfdF8xID0gX19weXhfaW50 XzA7CistICBpZiAobGlrZWx5KFB5TGlzdF9DaGVja0V4YWN0KF9fcHl4X3Zfa2V5cykpIHx8IFB5 VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X2tleXMpKSB7CistICAgIF9fcHl4X3RfMiA9IF9fcHl4 X3Zfa2V5czsgX19QeXhfSU5DUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfNCA9IDA7CistICAgIF9f cHl4X3RfNiA9IE5VTEw7CistICB9IGVsc2UgeworLSAgICBfX3B5eF90XzQgPSAtMTsgX19weXhf dF8yID0gUHlPYmplY3RfR2V0SXRlcihfX3B5eF92X2tleXMpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF82ID0gUHlfVFlQRShfX3B5eF90XzIpLT50cF9p dGVybmV4dDsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5 eF9MMV9lcnJvcikKKy0gIH0KKy0gIGZvciAoOzspIHsKKy0gICAgaWYgKGxpa2VseSghX19weXhf dF82KSkgeworLSAgICAgIGlmIChsaWtlbHkoUHlMaXN0X0NoZWNrRXhhY3QoX19weXhfdF8yKSkp IHsKKy0gICAgICAgIGlmIChfX3B5eF90XzQgPj0gUHlMaXN0X0dFVF9TSVpFKF9fcHl4X3RfMikp IGJyZWFrOworLSAgICAgICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhP Tl9BVk9JRF9CT1JST1dFRF9SRUZTCistICAgICAgICBfX3B5eF90XzMgPSBQeUxpc3RfR0VUX0lU RU0oX19weXhfdF8yLCBfX3B5eF90XzQpOyBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsgX19weXhf dF80Kys7IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4X0wxX2Vy cm9yKQorLSAgICAgICAgI2Vsc2UKKy0gICAgICAgIF9fcHl4X3RfMyA9IFB5U2VxdWVuY2VfSVRF TShfX3B5eF90XzIsIF9fcHl4X3RfNCk7IF9fcHl4X3RfNCsrOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4X0wxX2Vycm9yKQorLSAgICAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMyk7CistICAgICAgICAjZW5kaWYKKy0gICAgICB9IGVsc2UgeworLSAg ICAgICAgaWYgKF9fcHl4X3RfNCA+PSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X3RfMikpIGJyZWFr OworLSAgICAgICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9J RF9CT1JST1dFRF9SRUZTCistICAgICAgICBfX3B5eF90XzMgPSBQeVR1cGxlX0dFVF9JVEVNKF9f cHl4X3RfMiwgX19weXhfdF80KTsgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfNCsr OyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikK Ky0gICAgICAgICNlbHNlCistICAgICAgICBfX3B5eF90XzMgPSBQeVNlcXVlbmNlX0lURU0oX19w eXhfdF8yLCBfX3B5eF90XzQpOyBfX3B5eF90XzQrKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMp KSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzMpOworLSAgICAgICAgI2VuZGlmCistICAgICAgfQorLSAgICB9IGVsc2Ugewor LSAgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNihfX3B5eF90XzIpOworLSAgICAgIGlmICh1bmxp a2VseSghX19weXhfdF8zKSkgeworLSAgICAgICAgUHlPYmplY3QqIGV4Y190eXBlID0gUHlFcnJf T2NjdXJyZWQoKTsKKy0gICAgICAgIGlmIChleGNfdHlwZSkgeworLSAgICAgICAgICBpZiAobGlr ZWx5KF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyhleGNfdHlwZSwgUHlFeGNfU3Rv cEl0ZXJhdGlvbikpKSBQeUVycl9DbGVhcigpOworLSAgICAgICAgICBlbHNlIF9fUFlYX0VSUigw LCA0ODksIF9fcHl4X0wxX2Vycm9yKQorLSAgICAgICAgfQorLSAgICAgICAgYnJlYWs7CistICAg ICAgfQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICB9CistICAgIF9fUHl4 X1hERUNSRUZfU0VUKF9fcHl4X3Zfa2V5LCBfX3B5eF90XzMpOworLSAgICBfX3B5eF90XzMgPSAw OworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfWERFQ1JFRl9TRVQo X19weXhfdl9pLCBfX3B5eF90XzEpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9BZGRP YmpDKF9fcHl4X3RfMSwgX19weXhfaW50XzEsIDEsIDAsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCA0ODksIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8zKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4 X3RfMSA9IF9fcHl4X3RfMzsKKy0gICAgX19weXhfdF8zID0gMDsKKy0KKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5MAorLSAqICAgICAgICAgbGlzdC5rZXlzID0gPGNo YXIqKj5tYWxsb2MobGlzdC5udW0pCistICogICAgICAgICBmb3IgaSwga2V5IGluIGVudW1lcmF0 ZShrZXlzKToKKy0gKiAgICAgICAgICAgICBrZXkgPSBfc3RyZW5jKGtleSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGNrZXkgPSBrZXkKKy0gKiAgICAgICAg ICAgICBsaXN0LmtleXNbaV0gPSA8Y2hhcio+bWFsbG9jKGxlbihrZXkpICsgMSkKKy0gKi8KKy0g ICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzcsIF9fcHl4X25fc19zdHJlbmMp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA0OTAsIF9fcHl4X0wxX2Vy cm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKy0gICAgX19weXhfdF84ID0gTlVM TDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9D aGVjayhfX3B5eF90XzcpKSkgeworLSAgICAgIF9fcHl4X3RfOCA9IFB5TWV0aG9kX0dFVF9TRUxG KF9fcHl4X3RfNyk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzgpKSB7CistICAgICAgICBQ eU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF83KTsKKy0g ICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzgpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1 bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF83LCBmdW5jdGlvbik7 CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzgpID8gX19QeXhf UHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNywgX19weXhfdF84LCBfX3B5eF92X2tleSkgOiBf X1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNywgX19weXhfdl9rZXkpOworLSAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7CistICAgIGlmICh1bmxpa2Vs eSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ5MCwgX19weXhfTDFfZXJyb3IpCistICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19w eXhfdF83ID0gMDsKKy0gICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2tleSwgX19weXhfdF8z KTsKKy0gICAgX19weXhfdF8zID0gMDsKKy0KKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ5MQorLSAqICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6 CistICogICAgICAgICAgICAga2V5ID0gX3N0cmVuYyhrZXkpCistICogICAgICAgICAgICAgY2tl eSA9IGtleSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgbGlz dC5rZXlzW2ldID0gPGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCistICogICAgICAgICAgICAg c3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkKKy0gKi8KKy0gICAgX19weXhfdF85ID0gX19QeXhf UHlPYmplY3RfQXNXcml0YWJsZVN0cmluZyhfX3B5eF92X2tleSk7IGlmICh1bmxpa2VseSgoIV9f cHl4X3RfOSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0OTEsIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX3B5eF92X2NrZXkgPSBfX3B5eF90Xzk7CisrICBfX3B5eF90XzEwID0g X19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCghX19w eXhfdF8xMCkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA1OTAsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfdl9wcm9wX2MgPSBfX3B5eF90XzEwOworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDkyCistICogICAgICAgICAgICAga2V5ID0gX3N0 cmVuYyhrZXkpCistICogICAgICAgICAgICAgY2tleSA9IGtleQorLSAqICAgICAgICAgICAgIGxp c3Qua2V5c1tpXSA9IDxjaGFyKj5tYWxsb2MobGVuKGtleSkgKyAxKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkK Ky0gKiAgICAgICAgIHJldHVybiBsaXN0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTkxCisrICogICAgICAgICB1c2VyZGF0YXMuYWRkKCkKKysgKiAgICAgICAgIGNkZWYg Y29uc3QgY2hhciogcHJvcF9jID0gcHJvcAorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9nZXRfcHJv cGVydHlfYXN5bmMoCisrICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKKyAgKi8KKy0gICAg X19weXhfdF8xMCA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X2tleSk7IGlmICh1bmxpa2VseShf X3B5eF90XzEwID09ICgoUHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMCwgNDkyLCBfX3B5eF9M MV9lcnJvcikKKy0gICAgX19weXhfdF8xMSA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4 X3ZfaSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8xMSA9PSAoUHlfc3NpemVfdCktMSkgJiYgUHlF cnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0OTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgICAo X19weXhfdl9saXN0LT5rZXlzW19fcHl4X3RfMTFdKSA9ICgoY2hhciAqKW1hbGxvYygoX19weXhf dF8xMCArIDEpKSk7CisrICB7CisrICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlU aHJlYWRTdGF0ZSAqX3NhdmU7CisrICAgICAgUHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19Q eXhfRmFzdEdJTF9SZW1lbWJlcigpOworKyAgICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsK KyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5MworLSAqICAgICAg ICAgICAgIGNrZXkgPSBrZXkKKy0gKiAgICAgICAgICAgICBsaXN0LmtleXNbaV0gPSA8Y2hhcio+ bWFsbG9jKGxlbihrZXkpICsgMSkKKy0gKiAgICAgICAgICAgICBzdHJjcHkobGlzdC5rZXlzW2ld LCBja2V5KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1cm4g bGlzdAorLSAqIAorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5 MgorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wCisrICogICAgICAg ICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9nZXRfcHJvcGVydHlfYXN5 bmMoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgc2Vs Zi5fY3R4LAorKyAqICAgICAgICAgICAgICAgICBpZF9kYXRhLAorICAqLworLSAgICBfX3B5eF90 XzEwID0gX19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9pKTsgaWYgKHVubGlrZWx5KChf X3B5eF90XzEwID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDQ5MywgX19weXhfTDFfZXJyb3IpCistICAgICh2b2lkKShzdHJjcHkoKF9fcHl4X3Zf bGlzdC0+a2V5c1tfX3B5eF90XzEwXSksIF9fcHl4X3ZfY2tleSkpOworKyAgICAgICAgX19weXhf dl9lcnIgPSBtcHZfZ2V0X3Byb3BlcnR5X2FzeW5jKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhf dl9pZF9kYXRhLCBfX3B5eF92X3Byb3BfYywgTVBWX0ZPUk1BVF9OT0RFKTsKKysgICAgICB9Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODkKKy0gKiAgICAgICAg ICAgICByZXR1cm4gbGlzdAorLSAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2Mo bGlzdC5udW0pCistICogICAgICAgICBmb3IgaSwga2V5IGluIGVudW1lcmF0ZShrZXlzKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGtleSA9IF9zdHJlbmMo a2V5KQorLSAqICAgICAgICAgICAgIGNrZXkgPSBrZXkKKysgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTkxCisrICogICAgICAgICB1c2VyZGF0YXMuYWRkKCkKKysgKiAg ICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAorKyAqICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9 IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMoCisrICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwK KyAgKi8KKysgICAgICAvKmZpbmFsbHk6Ki8geworKyAgICAgICAgLypub3JtYWwgZXhpdDoqL3sK KysgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAgIF9fUHl4X0Zhc3RHSUxf Rm9yZ2V0KCk7CisrICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKysgICAgICAgICAgI2VuZGlm CisrICAgICAgICAgIGdvdG8gX19weXhfTDY7CisrICAgICAgICB9CisrICAgICAgICBfX3B5eF9M Njo7CisrICAgICAgfQorICAgfQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTQKKy0gKiAgICAgICAgICAgICBs aXN0LmtleXNbaV0gPSA8Y2hhcio+bWFsbG9jKGxlbihrZXkpICsgMSkKKy0gKiAgICAgICAgICAg ICBzdHJjcHkobGlzdC5rZXlzW2ldLCBja2V5KQorLSAqICAgICAgICAgcmV0dXJuIGxpc3QgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU5OAorKyAqICAgICAgICAgICAgICAgICBNUFZfRk9STUFUX05PREUsCisrICogICAg ICAgICAgICAgKQorKyAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisgICogCistICogICAgIGNkZWYgbXB2X25vZGUgX3ByZXBfbmF0aXZlX3ZhbHVlKHNl bGYsIHZhbHVlLCBmb3JtYXQpOgorKyAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhz ZWxmLCBwcm9wLCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CisgICovCistICBfX3B5eF9yID0g X19weXhfdl9saXN0OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgIF9fcHl4X3RfMSA9 IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNTk4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworKyAgX19weXhfciA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7Cisg ICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ4MQorLSAqICAgICAgICAgcmV0dXJuIG5vZGVfbGlzdAorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjU3NAorKyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYg Z2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIkdldHMgdGhlIHZhbHVlIG9mIGEgcHJvcGVy dHkgYXN5bmNocm9ub3VzbHkuCisgICogCistICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCogX3By ZXBfbm9kZV9tYXAoc2VsZiwgbWFwKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgY2RlZiBjaGFyKiBja2V5CistICogICAgICAgICBjZGVmIG1wdl9ub2RlX2xpc3Qq IGxpc3QKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworQEAgLTEwNTc3LDYx OCArMTEzMzQsNTM5IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9tCisgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMSk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CisgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CisgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7CistICBfX1B5 eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0Ll9wcmVwX25vZGVf bWFwIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7 CistICBfX3B5eF9yID0gMDsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMu bXB2LkNvbnRleHQuZ2V0X3Byb3BlcnR5X2FzeW5jIiwgX19weXhfY2xpbmVubywgX19weXhfbGlu ZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKyAgIF9fcHl4X0wwOjsK Ky0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9rZXlzKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhf dl9pKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9rZXkpOworKyAgX19QeXhfWERFQ1JFRihf X3B5eF92X3VzZXJkYXRhcyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfcHJvcCk7CisrICBf X1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0OTYKKy0gKiAgICAgICAgIHJldHVybiBsaXN0CisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjYwMAorKyAqICAgICAgICAgcmV0dXJuIGVycgorICAqIAorLSAqICAg ICBjZGVmIG1wdl9ub2RlIF9wcmVwX25hdGl2ZV92YWx1ZShzZWxmLCB2YWx1ZSwgZm9ybWF0KTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBu b2RlCistICogICAgICAgICBub2RlLmZvcm1hdCA9IGZvcm1hdAorKyAqICAgICBkZWYgdHJ5X2dl dF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHRyeToKKysgKiAgICAgICAg ICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKQorICAq LworIAorLXN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdmFs dWUsIFB5T2JqZWN0ICpfX3B5eF92X2Zvcm1hdCkgeworLSAgc3RydWN0IG1wdl9ub2RlIF9fcHl4 X3Zfbm9kZTsKKy0gIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKy0gIGVudW0gbXB2X2Zvcm1hdCBfX3B5eF90XzE7CistICBQeU9iamVjdCAq X19weXhfdF8yID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgaW50 IF9fcHl4X3RfNDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOworLSAgUHlfc3NpemVf dCBfX3B5eF90XzY7CistICBjaGFyIGNvbnN0ICpfX3B5eF90Xzc7CistICBpbnQgX19weXhfdF84 OworLSAgaW50NjRfdCBfX3B5eF90Xzk7CistICBkb3VibGUgX19weXhfdF8xMDsKKysvKiBQeXRo b24gd3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzEzdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhQeU9iamVjdCAqX19weXhf dl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnBy b3RvKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8xM3RyeV9nZXRfcHJvcGVydHlfYXN5bmMoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CisrICBQeU9iamVj dCAqX19weXhfdl9wcm9wID0gMDsKKysgIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEgPSAwOworKyAg UHlPYmplY3QgKl9fcHl4X3ZfZGVmYXVsdCA9IDA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsK KyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfcHJlcF9uYXRpdmVfdmFs dWUiLCAwKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF92X3ZhbHVlKTsKKy0KKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTgKKy0gKiAgICAgY2RlZiBtcHZfbm9kZSBfcHJl cF9uYXRpdmVfdmFsdWUoc2VsZiwgdmFsdWUsIGZvcm1hdCk6CistICogICAgICAgICBjZGVmIG1w dl9ub2RlIG5vZGUKKy0gKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NU UklORzoKKy0gKiAgICAgICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCistICovCistICBf X3B5eF90XzEgPSAoKGVudW0gbXB2X2Zvcm1hdClfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9y bWF0KF9fcHl4X3ZfZm9ybWF0KSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkgX19Q WVhfRVJSKDAsIDQ5OCwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF92X25vZGUuZm9ybWF0ID0g X19weXhfdF8xOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5OQor LSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlCistICogICAgICAgICBub2RlLmZvcm1hdCA9 IGZvcm1hdAorLSAqICAgICAgICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5j KHZhbHVlKQorLSAqICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxl bih2YWx1ZSkgKyAxKQorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9lbnVt X19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfU1RSSU5HKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgNDk5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworLSAgX19weXhfdF8zID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3Jt YXQsIF9fcHl4X3RfMiwgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7IGlmICh1bmxp a2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ5OSwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIF9fcHl4X3RfNCA9IF9f UHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoX19weXhfdF80IDwg MCkpIF9fUFlYX0VSUigwLCA0OTksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9f cHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAoX19weXhfdF80KSB7CistCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDAKKy0gKiAgICAgICAgIG5vZGUuZm9y bWF0ID0gZm9ybWF0CistICogICAgICAgICBpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6 CistICogICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5jKHZhbHVlKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgbm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxs b2MobGVuKHZhbHVlKSArIDEpCistICogICAgICAgICAgICAgc3RyY3B5KG5vZGUudS5zdHJpbmcs IHZhbHVlKQorLSAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwg X19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDUwMCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAg ICBfX3B5eF90XzUgPSBOVUxMOworLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVu bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgICAgX19weXhfdF81ID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKy0gICAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NSkpIHsKKy0gICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElP TihfX3B5eF90XzIpOworLSAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7CistICAgICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzIsIGZ1bmN0aW9uKTsKKy0gICAgICB9CistICAgIH0KKy0gICAgX19weXhfdF8zID0gKF9f cHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzUs IF9fcHl4X3ZfdmFsdWUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9f cHl4X3ZfdmFsdWUpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9 IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUwMCwgX19w eXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgX19QeXhfREVDUkVGX1NFVChf X3B5eF92X3ZhbHVlLCBfX3B5eF90XzMpOworLSAgICBfX3B5eF90XzMgPSAwOworKyAgUHlPYmpl Y3QgKl9fcHl4X3IgPSAwOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jICh3cmFwcGVyKSIs IDApOworKyAgeworKyAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7 Jl9fcHl4X25fc19wcm9wLCZfX3B5eF9uX3NfZGF0YSwmX19weXhfbl9zX2RlZmF1bHQsMH07Cisr ICAgIFB5T2JqZWN0KiB2YWx1ZXNbM10gPSB7MCwwLDB9OworKyAgICB2YWx1ZXNbMV0gPSAoKFB5 T2JqZWN0ICopUHlfTm9uZSk7CisrICAgIHZhbHVlc1syXSA9ICgoUHlPYmplY3QgKilQeV9Ob25l KTsKKysgICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7CisrICAgICAgUHlfc3NpemVfdCBr d19hcmdzOworKyAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9T SVpFKF9fcHl4X2FyZ3MpOworKyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNh c2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CisrICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQ eVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOworKyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5 eF9hcmdzLCAwKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2Ug IDA6IGJyZWFrOworKyAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJv cjsKKysgICAgICB9CisrICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOwor KyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBp ZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2Rz LCBfX3B5eF9uX3NfcHJvcCkpICE9IDApKSBrd19hcmdzLS07CisrICAgICAgICBlbHNlIGdvdG8g X19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Cisr ICAgICAgICBjYXNlICAxOgorKyAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7CisrICAgICAgICAg IFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9f cHl4X25fc19kYXRhKTsKKysgICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1sxXSA9IHZhbHVl OyBrd19hcmdzLS07IH0KKysgICAgICAgIH0KKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsK KysgICAgICAgIGNhc2UgIDI6CisrICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKysgICAgICAg ICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywg X19weXhfbl9zX2RlZmF1bHQpOworKyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzJdID0g dmFsdWU7IGt3X2FyZ3MtLTsgfQorKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBpZiAodW5s aWtlbHkoa3dfYXJncyA+IDApKSB7CisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VP cHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywg cG9zX2FyZ3MsICJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jIikgPCAwKSkgX19QWVhfRVJSKDAsIDYw MCwgX19weXhfTDNfZXJyb3IpCisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgIHN3aXRj aCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgeworKyAgICAgICAgY2FzZSAgMzogdmFs dWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKKysgICAgICAgIENZVEhP Tl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VU X0lURU0oX19weXhfYXJncywgMSk7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAg ICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDAp OworKyAgICAgICAgYnJlYWs7CisrICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1 cGxlX2Vycm9yOworKyAgICAgIH0KKysgICAgfQorKyAgICBfX3B5eF92X3Byb3AgPSB2YWx1ZXNb MF07CisrICAgIF9fcHl4X3ZfZGF0YSA9IHZhbHVlc1sxXTsKKysgICAgX19weXhfdl9kZWZhdWx0 ID0gdmFsdWVzWzJdOworKyAgfQorKyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdf ZG9uZTsKKysgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKysgIF9fUHl4X1JhaXNlQXJndHVw bGVJbnZhbGlkKCJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jIiwgMCwgMSwgMywgUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA2MDAsIF9fcHl4X0wzX2Vycm9yKQorKyAg X19weXhfTDNfZXJyb3I6OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5t cHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5X2FzeW5jIiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKysgIHJldHVybiBOVUxMOworKyAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6 OworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8x MnRyeV9nZXRfcHJvcGVydHlfYXN5bmMoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgX19weXhfdl9wcm9wLCBfX3B5eF92X2Rh dGEsIF9fcHl4X3ZfZGVmYXVsdCk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1MDEKKy0gKiAgICAgICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoK Ky0gKiAgICAgICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCistICogICAgICAgICAgICAg bm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBzdHJjcHkobm9kZS51LnN0cmluZywg dmFsdWUpCistICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CistICov CistICAgIF9fcHl4X3RfNiA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X3ZhbHVlKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfNiA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDUwMSwg X19weXhfTDFfZXJyb3IpCistICAgIF9fcHl4X3Zfbm9kZS51LnN0cmluZyA9ICgoY2hhciAqKW1h bGxvYygoX19weXhfdF82ICsgMSkpKTsKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDIKKy0gKiAgICAgICAg ICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCistICogICAgICAgICAgICAgbm9kZS51LnN0cmlu ZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCistICogICAgICAgICAgICAgc3RyY3B5 KG5vZGUudS5zdHJpbmcsIHZhbHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CistICogICAgICAgICAgICAg bm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVsc2UgMAorLSAqLworLSAgICBfX3B5eF90XzcgPSBf X1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KCghX19w eXhfdF83KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDUwMiwgX19weXhfTDFf ZXJyb3IpCistICAgICh2b2lkKShzdHJjcHkoX19weXhfdl9ub2RlLnUuc3RyaW5nLCBfX3B5eF90 XzcpKTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8xMnRyeV9nZXRfcHJvcGVydHlfYXN5bmMoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9w cm9wLCBQeU9iamVjdCAqX19weXhfdl9kYXRhLCBQeU9iamVjdCAqX19weXhfdl9kZWZhdWx0KSB7 CisrICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucworKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhf dF8yID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworKyAgUHlPYmplY3Qg Kl9fcHl4X3RfNCA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKysgIFB5 T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7 CisrICBpbnQgX19weXhfdF84OworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cisr ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIsIDAp OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk5CistICogICAg ICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKKy0gKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0 CistICogICAgICAgICBpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUp CistICogICAgICAgICAgICAgbm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVl KSArIDEpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjAxCisrICogCisr ICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwg ZGVmYXVsdD1Ob25lKToKKysgKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9w LCBkYXRhPWRhdGEpCisrICogICAgICAgICBleGNlcHQgTVBWRXJyb3I6CisgICovCistICAgIGdv dG8gX19weXhfTDM7CistICB9CisrICB7CisrICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFy ZQorKyAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorKyAgICBfX1B5eF9FeGNlcHRpb25T YXZlKCZfX3B5eF90XzEsICZfX3B5eF90XzIsICZfX3B5eF90XzMpOworKyAgICBfX1B5eF9YR09U UkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19Q eXhfWEdPVFJFRihfX3B5eF90XzMpOworKyAgICAvKnRyeToqLyB7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTAzCistICogICAgICAgICAgICAgbm9kZS51LnN0cmlu ZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCistICogICAgICAgICAgICAgc3RyY3B5 KG5vZGUudS5zdHJpbmcsIHZhbHVlKQorLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZP Uk1BVF9GTEFHOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg bm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVsc2UgMAorLSAqICAgICAgICAgZWxpZiBmb3JtYXQg PT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NjAyCisrICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3As IGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25lKToKKysgKiAgICAgICAgIHRyeToKKysgKiAgICAgICAg ICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBleGNlcHQgTVBWRXJyb3I6Cisr ICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgKi8KKy0gIF9fcHl4X3RfMyA9IF9fUHl4 X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX0ZMQUcpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA1MDMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMyk7CistICBfX3B5eF90XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFy ZShfX3B5eF92X2Zvcm1hdCwgX19weXhfdF8zLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhf dF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTAzLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAg X19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlmICh1bmxpa2Vs eShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwMywgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIGlmIChfX3B5eF90XzQp IHsKKysgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgICAgIF9fcHl4X3RfNCA9IF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4 X25fc19nZXRfcHJvcGVydHlfYXN5bmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCA2MDIsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzQpOworKyAgICAgIF9fcHl4X3RfNSA9IFB5VHVwbGVfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNSkpIF9fUFlYX0VSUigwLCA2MDIsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzUpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3Byb3ApOwor KyAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9wcm9wKTsKKysgICAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfNSwgMCwgX19weXhfdl9wcm9wKTsKKysgICAgICBfX3B5eF90XzYgPSBfX1B5 eF9QeURpY3RfTmV3UHJlc2l6ZWQoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDYwMiwgX19weXhfTDNfZXJyb3IpCisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nik7CisrICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X3RfNiwgX19weXhfbl9zX2RhdGEs IF9fcHl4X3ZfZGF0YSkgPCAwKSBfX1BZWF9FUlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKKysg ICAgICBfX3B5eF90XzcgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfNCwgX19weXhfdF81 LCBfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA2MDIs IF9fcHl4X0wzX2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICAgIF9fcHl4X3IgPSBfX3B5eF90Xzc7CisrICAg ICAgX19weXhfdF83ID0gMDsKKysgICAgICBnb3RvIF9fcHl4X0w3X3RyeV9yZXR1cm47CisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDQKKy0gKiAgICAgICAgICAg ICBzdHJjcHkobm9kZS51LnN0cmluZywgdmFsdWUpCistICogICAgICAgICBlbGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX0ZMQUc6CistICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZh bHVlIGVsc2UgMCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBlbGlm IGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorLSAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2 NCA9IHZhbHVlCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwMQor KyAqIAorKyAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBkYXRh PU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CisrICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHlfYXN5 bmMocHJvcCwgZGF0YT1kYXRhKQorKyAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOgorICAqLwor LSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl92YWx1ZSk7IGlm ICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwNCwgX19weXhfTDFfZXJy b3IpCistICAgIGlmIChfX3B5eF90XzQpIHsKKy0gICAgICBfX3B5eF90XzggPSAxOworLSAgICB9 IGVsc2UgeworLSAgICAgIF9fcHl4X3RfOCA9IDA7CisgICAgIH0KKy0gICAgX19weXhfdl9ub2Rl LnUuZmxhZyA9IF9fcHl4X3RfODsKKysgICAgX19weXhfTDNfZXJyb3I6OworKyAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgIF9fUHl4X1hERUNSRUYoX19w eXhfdF81KTsgX19weXhfdF81ID0gMDsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9 IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDMKKy0gKiAg ICAgICAgICAgICBub2RlLnUuc3RyaW5nID0gPGNoYXIqPm1hbGxvYyhsZW4odmFsdWUpICsgMSkK Ky0gKiAgICAgICAgICAgICBzdHJjcHkobm9kZS51LnN0cmluZywgdmFsdWUpCistICogICAgICAg ICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICBub2RlLnUuZmxhZyA9IDEgaWYgdmFsdWUgZWxzZSAwCist ICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjAzCisrICogICAgICAgICB0cnk6CisrICogICAg ICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5X2FzeW5jKHByb3AsIGRhdGE9ZGF0YSkK KysgKiAgICAgICAgIGV4Y2VwdCBNUFZFcnJvcjogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisrICogCisgICovCistICAgIGdvdG8g X19weXhfTDM7CistICB9CisrICAgIF9fUHl4X0VyckZldGNoKCZfX3B5eF90XzcsICZfX3B5eF90 XzYsICZfX3B5eF90XzUpOworKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf NCwgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9F UlIoMCwgNjAzLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzQpOworKyAgICBfX3B5eF90XzggPSBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNo ZXMoX19weXhfdF83LCBfX3B5eF90XzQpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKysgICAgX19QeXhfRXJyUmVzdG9yZShfX3B5eF90XzcsIF9fcHl4X3Rf NiwgX19weXhfdF81KTsKKysgICAgX19weXhfdF83ID0gMDsgX19weXhfdF82ID0gMDsgX19weXhf dF81ID0gMDsKKysgICAgaWYgKF9fcHl4X3RfOCkgeworKyAgICAgIF9fUHl4X0FkZFRyYWNlYmFj aygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQudHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIsIF9f cHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgICAgIGlmIChf X1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfNSwgJl9fcHl4X3RfNiwgJl9fcHl4X3RfNykgPCAw KSBfX1BZWF9FUlIoMCwgNjAzLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCisrICAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNSk7CisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTA1CistICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZM QUc6CistICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVsc2UgMAorLSAq ICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlCistICog ICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKysgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA0CisrICogICAgICAgICAgICAgcmV0dXJuIHNl bGYuZ2V0X3Byb3BlcnR5X2FzeW5jKHByb3AsIGRhdGE9ZGF0YSkKKysgKiAgICAgICAgIGV4Y2Vw dCBNUFZFcnJvcjoKKysgKiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYs IHByb3AsIGRlZmF1bHQ9Tm9uZSk6CisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9G cm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9JTlQ2NCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDUwNSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4 X3ZfZm9ybWF0LCBfX3B5eF90XzIsIFB5X0VRKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzMpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA1MDUsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBfX3B5eF90 XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KF9fcHl4 X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTA1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RF Q1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKF9fcHl4X3RfNCkgeworKyAg ICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf ZGVmYXVsdCk7CisrICAgICAgX19weXhfciA9IF9fcHl4X3ZfZGVmYXVsdDsKKysgICAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKysgICAgICBfX1B5eF9ERUNSRUYo X19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83 KTsgX19weXhfdF83ID0gMDsKKysgICAgICBnb3RvIF9fcHl4X0w2X2V4Y2VwdF9yZXR1cm47Cisr ICAgIH0KKysgICAgZ290byBfX3B5eF9MNV9leGNlcHRfZXJyb3I7CisrICAgIF9fcHl4X0w1X2V4 Y2VwdF9lcnJvcjo7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 MDYKKy0gKiAgICAgICAgICAgICBub2RlLnUuZmxhZyA9IDEgaWYgdmFsdWUgZWxzZSAwCistICog ICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorLSAqICAgICAgICAgICAg IG5vZGUudS5pbnQ2NCA9IHZhbHVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOgorLSAqICAgICAgICAgICAg IG5vZGUudS5kb3VibGVfID0gdmFsdWUKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYwMQorKyAqIAorKyAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxm LCBwcm9wLCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CisrICogICAgICAgICB0cnk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRf cHJvcGVydHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKQorKyAqICAgICAgICAgZXhjZXB0IE1QVkVy cm9yOgorICAqLworLSAgICBfX3B5eF90XzkgPSBfX1B5eF9QeUludF9Bc19pbnQ2NF90KF9fcHl4 X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfOSA9PSAoKGludDY0X3QpLTEpKSAmJiBQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDUwNiwgX19weXhfTDFfZXJyb3IpCistICAg IF9fcHl4X3Zfbm9kZS51LmludDY0ID0gX19weXhfdF85OworLQorLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NTA1CistICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZf Rk9STUFUX0ZMQUc6CistICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVs c2UgMAorLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZh bHVlCistICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKy0gKi8K Ky0gICAgZ290byBfX3B5eF9MMzsKKy0gIH0KKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo1MDcKKy0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5U NjQ6CistICogICAgICAgICAgICAgbm9kZS51LmludDY0ID0gdmFsdWUKKy0gKiAgICAgICAgIGVs aWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQorLSAqICAgICAgICAg ZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorLSAqLworLSAgX19weXhfdF8z ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfRE9VQkxFKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTA3LCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgX19weXhfdF8yID0gUHlPYmplY3Rf UmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5eF9YR09U UkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUw NywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8z ID0gMDsKKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBp ZiAodW5saWtlbHkoX19weXhfdF80IDwgMCkpIF9fUFlYX0VSUigwLCA1MDcsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBpZiAo X19weXhfdF80KSB7CistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 MDgKKy0gKiAgICAgICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1ZQorLSAqICAgICAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CistICogICAgICAgICAgICAgbm9kZS51LmRv dWJsZV8gPSB2YWx1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBl bGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6CistICogICAgICAgICAgICAgbm9k ZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbGlzdCh2YWx1ZSkKKy0gKi8KKy0gICAgX19weXhf dF8xMCA9IF9fcHl4X1B5RmxvYXRfQXNEb3VibGUoX19weXhfdl92YWx1ZSk7IGlmICh1bmxpa2Vs eSgoX19weXhfdF8xMCA9PSAoZG91YmxlKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDUwOCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fcHl4X3Zfbm9kZS51LmRvdWJsZV8g PSBfX3B5eF90XzEwOworLQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTA3CistICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorLSAqICAg ICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlCistICogICAgICAgICBlbGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX0RPVUJMRTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgIG5vZGUudS5kb3VibGVfID0gdmFsdWUKKy0gKiAgICAgICAgIGVsaWYgZm9ybWF0 ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKKy0gKi8KKy0gICAgZ290byBfX3B5eF9MMzsKKy0g IH0KKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDkKKy0gKiAgICAg ICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOgorLSAqICAgICAgICAgICAgIG5v ZGUudS5kb3VibGVfID0gdmFsdWUKKy0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JN QVRfTk9ERV9BUlJBWTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QodmFsdWUpCistICogICAgICAg ICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorLSAqLworLSAgX19weXhfdF8y ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfTk9ERV9BUlJB WSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUwOSwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IFB5T2Jq ZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfZm9ybWF0LCBfX3B5eF90XzIsIFB5X0VRKTsgX19QeXhf WEdPVFJFRihfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigw LCA1MDksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7CistICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8z KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTA5LCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAg aWYgKF9fcHl4X3RfNCkgeworLQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTEwCistICogICAgICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQorLSAqICAgICAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorLSAqICAgICAgICAgICAg IG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QodmFsdWUpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9E RV9NQVA6CistICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbWFw KHZhbHVlKQorLSAqLworLSAgICBfX3B5eF92X25vZGUudS5saXN0ID0gKChzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+ X19weXhfdnRhYiktPl9wcmVwX25vZGVfbGlzdChfX3B5eF92X3NlbGYsIF9fcHl4X3ZfdmFsdWUp OworLQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA5CistICogICAg ICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKy0gKiAgICAgICAgICAgICBu b2RlLnUuZG91YmxlXyA9IHZhbHVlCistICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX05PREVfQVJSQVk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICAgICBub2RlLnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KHZhbHVlKQorLSAqICAgICAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKy0gKi8KKy0gICAgZ290byBf X3B5eF9MMzsKKy0gIH0KKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 MTEKKy0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWToKKy0g KiAgICAgICAgICAgICBub2RlLnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KHZhbHVlKQor LSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5f cHJlcF9ub2RlX21hcCh2YWx1ZSkKKy0gKiAgICAgICAgIGVsc2U6CistICovCistICBfX3B5eF90 XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9OT0RFX01B UCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUxMSwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fcHl4X3RfMiA9IFB5T2Jq ZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfZm9ybWF0LCBfX3B5eF90XzMsIFB5X0VRKTsgX19QeXhf WEdPVFJFRihfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCA1MTEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4 X3RfMyA9IDA7CistICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8y KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAg aWYgKF9fcHl4X3RfNCkgeworLQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTEyCistICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbGlz dCh2YWx1ZSkKKy0gKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6 CistICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbWFwKHZhbHVl KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBlbHNlOgorLSAqICAg ICAgICAgICAgIG5vZGUuZm9ybWF0ID0gTVBWX0ZPUk1BVF9OT05FCistICovCistICAgIF9fcHl4 X3Zfbm9kZS51Lmxpc3QgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbm9kZV9t YXAoX19weXhfdl9zZWxmLCBfX3B5eF92X3ZhbHVlKTsKKy0KKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjUxMQorLSAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZP Uk1BVF9OT0RFX0FSUkFZOgorLSAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5fcHJl cF9ub2RlX2xpc3QodmFsdWUpCistICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg bm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbWFwKHZhbHVlKQorLSAqICAgICAgICAgZWxz ZToKKy0gKi8KKy0gICAgZ290byBfX3B5eF9MMzsKKy0gIH0KKy0KKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1MTQKKy0gKiAgICAgICAgICAgICBub2RlLnUubGlzdCA9IHNl bGYuX3ByZXBfbm9kZV9tYXAodmFsdWUpCistICogICAgICAgICBlbHNlOgorLSAqICAgICAgICAg ICAgIG5vZGUuZm9ybWF0ID0gTVBWX0ZPUk1BVF9OT05FICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiBub2RlCistICogCistICovCistICAvKmVsc2UqLyB7 CistICAgIF9fcHl4X3Zfbm9kZS5mb3JtYXQgPSBNUFZfRk9STUFUX05PTkU7CisrICAgIF9fUHl4 X1hHSVZFUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMik7Cisr ICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0 KF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOworKyAgICBnb3RvIF9fcHl4X0wxX2Vy cm9yOworKyAgICBfX3B5eF9MN190cnlfcmV0dXJuOjsKKysgICAgX19QeXhfWEdJVkVSRUYoX19w eXhfdF8xKTsKKysgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfWEdJ VkVSRUYoX19weXhfdF8zKTsKKysgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xLCBf X3B5eF90XzIsIF9fcHl4X3RfMyk7CisrICAgIGdvdG8gX19weXhfTDA7CisrICAgIF9fcHl4X0w2 X2V4Y2VwdF9yZXR1cm46OworKyAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEpOworKyAgICBf X1B5eF9YR0lWRVJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzMp OworKyAgICBfX1B5eF9FeGNlcHRpb25SZXNldChfX3B5eF90XzEsIF9fcHl4X3RfMiwgX19weXhf dF8zKTsKKysgICAgZ290byBfX3B5eF9MMDsKKyAgIH0KKy0gIF9fcHl4X0wzOjsKKy0KKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTUKKy0gKiAgICAgICAgIGVsc2U6Cist ICogICAgICAgICAgICAgbm9kZS5mb3JtYXQgPSBNUFZfRk9STUFUX05PTkUKKy0gKiAgICAgICAg IHJldHVybiBub2RlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAg Y2RlZiBfZnJlZV9uYXRpdmVfdmFsdWUoc2VsZiwgbXB2X25vZGUgbm9kZSk6CistICovCistICBf X3B5eF9yID0gX19weXhfdl9ub2RlOworLSAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTYKKy0gKiAgICAgICAgIHJldHVybiBsaXN0Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjAwCisrICogICAgICAgICByZXR1 cm4gZXJyCisgICogCistICogICAgIGNkZWYgbXB2X25vZGUgX3ByZXBfbmF0aXZlX3ZhbHVlKHNl bGYsIHZhbHVlLCBmb3JtYXQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKKy0gKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0 CisrICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9u ZSwgZGVmYXVsdD1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgdHJ5OgorKyAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhw cm9wLCBkYXRhPWRhdGEpCisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAg IF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKyAgIF9f UHl4X1hERUNSRUYoX19weXhfdF81KTsKKy0gIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0 dGVyLmxpYnMubXB2LkNvbnRleHQuX3ByZXBfbmF0aXZlX3ZhbHVlIiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7CistICBfX1B5eF9wcmV0ZW5kX3Rv X2luaXRpYWxpemUoJl9fcHl4X3IpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOworKyAg X19QeXhfWERFQ1JFRihfX3B5eF90XzcpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0 ZXIubGlicy5tcHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5X2FzeW5jIiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKyAg IF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl92YWx1ZSk7CisrICBfX1B5eF9Y R0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAg cmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo1MTcKKy0gKiAgICAgICAgIHJldHVybiBub2RlCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjYwNgorKyAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICogCistICog ICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3ZhbHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBpZiBub2RlLmZvcm1hdCBpbiAoTVBW X0ZPUk1BVF9OT0RFX0FSUkFZLCBNUFZfRk9STUFUX05PREVfTUFQKToKKy0gKiAgICAgICAgICAg ICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOgorKyAqICAgICBkZWYgdHJ5X2dldF9w cm9wZXJ0eShzZWxmLCBwcm9wLCBkZWZhdWx0PU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICB0cnk6CisrICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0 X3Byb3BlcnR5KHByb3ApCisgICovCisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBzdHJ1Y3Qg bXB2X25vZGUgX19weXhfdl9ub2RlKSB7CistICBpbnQgX19weXhfdl9pOworLSAgUHlPYmplY3Qg Kl9fcHl4X3IgPSBOVUxMOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIGludCBf X3B5eF90XzE7CistICBpbnQgX19weXhfdF8yOworLSAgaW50IF9fcHl4X3RfMzsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfNTsKKysvKiBQeXRob24gd3Jh cHBlciAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzE1dHJ5X2dldF9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNXRy eV9nZXRfcHJvcGVydHkoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2Fy Z3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CisrICBQeU9iamVjdCAqX19weXhfdl9wcm9wID0g MDsKKysgIFB5T2JqZWN0ICpfX3B5eF92X2RlZmF1bHQgPSAwOworICAgaW50IF9fcHl4X2xpbmVu byA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2ZyZWVfbmF0 aXZlX3ZhbHVlIiwgMCk7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInRyeV9nZXRf cHJvcGVydHkgKHdyYXBwZXIpIiwgMCk7CisrICB7CisrICAgIHN0YXRpYyBQeU9iamVjdCAqKl9f cHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3Byb3AsJl9fcHl4X25fc19kZWZhdWx0LDB9 OworKyAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07CisrICAgIHZhbHVlc1sxXSA9ICgo UHlPYmplY3QgKilQeV9Ob25lKTsKKysgICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7Cisr ICAgICAgUHlfc3NpemVfdCBrd19hcmdzOworKyAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2Fy Z3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOworKyAgICAgIHN3aXRjaCAocG9zX2Fy Z3MpIHsKKysgICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMSk7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNl ICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworKyAgICAg ICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMDogYnJlYWs7CisrICAgICAg ICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworKyAgICAgIH0KKysgICAg ICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7CisrICAgICAgc3dpdGNoIChwb3Nf YXJncykgeworKyAgICAgICAgY2FzZSAgMDoKKysgICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sw XSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19wcm9wKSkg IT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9l cnJvcjsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDE6Cisr ICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKysgICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0g X19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2RlZmF1bHQpOwor KyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzFdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQor KyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7 CisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4 X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJ0cnlfZ2V0X3By b3BlcnR5IikgPCAwKSkgX19QWVhfRVJSKDAsIDYwNiwgX19weXhfTDNfZXJyb3IpCisrICAgICAg fQorKyAgICB9IGVsc2UgeworKyAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSkgeworKyAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShf X3B5eF9hcmdzLCAxKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNh c2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CisrICAg ICAgICBicmVhazsKKysgICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJy b3I7CisrICAgICAgfQorKyAgICB9CisrICAgIF9fcHl4X3ZfcHJvcCA9IHZhbHVlc1swXTsKKysg ICAgX19weXhfdl9kZWZhdWx0ID0gdmFsdWVzWzFdOworKyAgfQorKyAgZ290byBfX3B5eF9MNF9h cmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKysgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKysg IF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJ0cnlfZ2V0X3Byb3BlcnR5IiwgMCwgMSwgMiwg UHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA2MDYsIF9fcHl4X0wz X2Vycm9yKQorKyAgX19weXhfTDNfZXJyb3I6OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKysgIHJldHVybiBOVUxMOworKyAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5n X2RvbmU6OworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8xNHRyeV9nZXRfcHJvcGVydHkoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgX19weXhfdl9wcm9wLCBfX3B5eF92X2Rl ZmF1bHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxOAorLSAq IAorLSAqICAgICBjZGVmIF9mcmVlX25hdGl2ZV92YWx1ZShzZWxmLCBtcHZfbm9kZSBub2RlKToK Ky0gKiAgICAgICAgIGlmIG5vZGUuZm9ybWF0IGluIChNUFZfRk9STUFUX05PREVfQVJSQVksIE1Q Vl9GT1JNQVRfTk9ERV9NQVApOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKKy0gKiAgICAgICAgICAg ICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51Lmxpc3QudmFsdWVzW2ldKQorLSAq LworLSAgc3dpdGNoIChfX3B5eF92X25vZGUuZm9ybWF0KSB7CistICAgIGNhc2UgTVBWX0ZPUk1B VF9OT0RFX0FSUkFZOgorLSAgICBjYXNlIE1QVl9GT1JNQVRfTk9ERV9NQVA6CistCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTkKKy0gKiAgICAgY2RlZiBfZnJlZV9u YXRpdmVfdmFsdWUoc2VsZiwgbXB2X25vZGUgbm9kZSk6CistICogICAgICAgICBpZiBub2RlLmZv cm1hdCBpbiAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBNUFZfRk9STUFUX05PREVfTUFQKToKKy0g KiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZl X3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tpXSkKKy0gKiAgICAgICAgICAgICBmcmVlKG5vZGUu dS5saXN0LnZhbHVlcykKKy0gKi8KKy0gICAgX19weXhfdF8xID0gX19weXhfdl9ub2RlLnUubGlz dC0+bnVtOworLSAgICBfX3B5eF90XzIgPSBfX3B5eF90XzE7CistICAgIGZvciAoX19weXhfdF8z ID0gMDsgX19weXhfdF8zIDwgX19weXhfdF8yOyBfX3B5eF90XzMrPTEpIHsKKy0gICAgICBfX3B5 eF92X2kgPSBfX3B5eF90XzM7CistCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjUyMAorLSAqICAgICAgICAgaWYgbm9kZS5mb3JtYXQgaW4gKE1QVl9GT1JNQVRfTk9E RV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6CistICogICAgICAgICAgICAgZm9yIGkgaW4g cmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKKy0gKiAgICAgICAgICAgICAgICAgc2VsZi5fZnJlZV9u YXRpdmVfdmFsdWUobm9kZS51Lmxpc3QudmFsdWVzW2ldKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC52YWx1ZXMpCistICogICAg ICAgICAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKy0gKi8KKy0g ICAgICBfX3B5eF90XzQgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZl X3ZhbHVlKF9fcHl4X3Zfc2VsZiwgKF9fcHl4X3Zfbm9kZS51Lmxpc3QtPnZhbHVlc1tfX3B5eF92 X2ldKSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDUyMCwgX19weXhf TDFfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAgIH0KKy0KKy0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyMQorLSAqICAgICAgICAgICAgIGZvciBpIGlu IHJhbmdlKG5vZGUudS5saXN0Lm51bSk6CistICogICAgICAgICAgICAgICAgIHNlbGYuX2ZyZWVf bmF0aXZlX3ZhbHVlKG5vZGUudS5saXN0LnZhbHVlc1tpXSkKKy0gKiAgICAgICAgICAgICBmcmVl KG5vZGUudS5saXN0LnZhbHVlcykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6CistICogICAg ICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6CistICovCistICAg IGZyZWUoX19weXhfdl9ub2RlLnUubGlzdC0+dmFsdWVzKTsKKysgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19w eXhfcjsKKyt9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjIK Ky0gKiAgICAgICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51Lmxpc3Qu dmFsdWVzW2ldKQorLSAqICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3QudmFsdWVzKQorLSAq ICAgICAgICAgICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFu Z2Uobm9kZS51Lmxpc3QubnVtKToKKy0gKiAgICAgICAgICAgICAgICAgICAgIGZyZWUobm9kZS51 Lmxpc3Qua2V5c1tpXSkKKy0gKi8KKy0gICAgX19weXhfdF81ID0gKChfX3B5eF92X25vZGUuZm9y bWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVApICE9IDApOworLSAgICBpZiAoX19weXhfdF81KSB7 Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmpl Y3QgKl9fcHl4X3ZfZGVmYXVsdCkgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworKyAg X19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxM OworKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8z ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAgUHlPYmplY3QgKl9f cHl4X3RfNSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKysgIFB5T2Jq ZWN0ICpfX3B5eF90XzcgPSBOVUxMOworKyAgaW50IF9fcHl4X3RfODsKKysgIGludCBfX3B5eF9s aW5lbm8gPSAwOworKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50 IF9fcHl4X2NsaW5lbm8gPSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInRyeV9n ZXRfcHJvcGVydHkiLCAwKTsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTIzCistICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC52YWx1ZXMpCistICog ICAgICAgICAgICAgaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKy0gKiAg ICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICAgICAgZnJlZShub2RlLnUu bGlzdC5rZXlzW2ldKQorLSAqICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXMp CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA3CisrICogCisrICogICAg IGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6CisrICogICAg ICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBy ZXR1cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkKKysgKiAgICAgICAgIGV4Y2VwdCBNUFZFcnJv cjoKKyAgKi8KKy0gICAgICBfX3B5eF90XzEgPSBfX3B5eF92X25vZGUudS5saXN0LT5udW07Cist ICAgICAgX19weXhfdF8yID0gX19weXhfdF8xOworLSAgICAgIGZvciAoX19weXhfdF8zID0gMDsg X19weXhfdF8zIDwgX19weXhfdF8yOyBfX3B5eF90XzMrPTEpIHsKKy0gICAgICAgIF9fcHl4X3Zf aSA9IF9fcHl4X3RfMzsKKysgIHsKKysgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9kZWNsYXJlCisr ICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfYXNzaWduCisrICAgIF9fUHl4X0V4Y2VwdGlvblNhdmUo Jl9fcHl4X3RfMSwgJl9fcHl4X3RfMiwgJl9fcHl4X3RfMyk7CisrICAgIF9fUHl4X1hHT1RSRUYo X19weXhfdF8xKTsKKysgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9Y R09UUkVGKF9fcHl4X3RfMyk7CisrICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjQKKy0gKiAgICAgICAgICAgICBpZiBub2RlLmZv cm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorLSAqICAgICAgICAgICAgICAgICBmb3IgaSBp biByYW5nZShub2RlLnUubGlzdC5udW0pOgorLSAqICAgICAgICAgICAgICAgICAgICAgZnJlZShu b2RlLnUubGlzdC5rZXlzW2ldKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5cykKKy0gKiAgICAgICAgICAgICBmcmVl KG5vZGUudS5saXN0KQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 MDgKKysgKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGVmYXVsdD1Ob25l KToKKysgKiAgICAgICAgIHRyeToKKysgKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJv cGVydHkocHJvcCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZXhj ZXB0IE1QVkVycm9yOgorKyAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICovCistICAg ICAgICBmcmVlKChfX3B5eF92X25vZGUudS5saXN0LT5rZXlzW19fcHl4X3ZfaV0pKTsKKysgICAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19nZXRf cHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA2MDgsIF9f cHl4X0wzX2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworKyAgICAgIF9f cHl4X3RfNiA9IE5VTEw7CisrICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtl bHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsKKysgICAgICAgIF9fcHl4X3RfNiA9IFB5 TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNSk7CisrICAgICAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NikpIHsKKysgICAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfNSk7CisrICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzYpOworKyAg ICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3RfNSwgZnVuY3Rpb24pOworKyAgICAgICAgfQorICAgICAgIH0KKysgICAgICBf X3B5eF90XzQgPSAoX19weXhfdF82KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzUsIF9fcHl4X3RfNiwgX19weXhfdl9wcm9wKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF81LCBfX3B5eF92X3Byb3ApOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKKysgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCA2MDgsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzQpOworKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworKyAg ICAgIF9fcHl4X3IgPSBfX3B5eF90XzQ7CisrICAgICAgX19weXhfdF80ID0gMDsKKysgICAgICBn b3RvIF9fcHl4X0w3X3RyeV9yZXR1cm47CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjUyNQorLSAqICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2Rl LnUubGlzdC5udW0pOgorLSAqICAgICAgICAgICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC5r ZXlzW2ldKQorLSAqICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXMpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0 KQorLSAqICAgICAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKy0g Ki8KKy0gICAgICBmcmVlKF9fcHl4X3Zfbm9kZS51Lmxpc3QtPmtleXMpOworLQorLSAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjIKKy0gKiAgICAgICAgICAgICAgICAg c2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51Lmxpc3QudmFsdWVzW2ldKQorLSAqICAgICAg ICAgICAgIGZyZWUobm9kZS51Lmxpc3QudmFsdWVzKQorLSAqICAgICAgICAgICAgIGlmIG5vZGUu Zm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToK Ky0gKiAgICAgICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5c1tpXSkKKysgICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA3CisrICogCisrICogICAgIGRl ZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6CisrICogICAgICAg ICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByZXR1 cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkKKysgKiAgICAgICAgIGV4Y2VwdCBNUFZFcnJvcjoK KyAgKi8KKyAgICAgfQorKyAgICBfX3B5eF9MM19lcnJvcjo7CisrICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUp OyBfX3B5eF90XzUgPSAwOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3Rf NiA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjYKKy0g KiAgICAgICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5c1tpXSkKKy0gKiAgICAg ICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC5rZXlzKQorLSAqICAgICAgICAgICAgIGZyZWUo bm9kZS51Lmxpc3QpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGVs aWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CistICogICAgICAgICAgICAgZnJl ZShub2RlLnUuc3RyaW5nKQorLSAqLworLSAgICBmcmVlKF9fcHl4X3Zfbm9kZS51Lmxpc3QpOwor LQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTE4CisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDkKKysgKiAgICAgICAgIHRyeToKKysgKiAg ICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkKKysgKiAgICAgICAgIGV4 Y2VwdCBNUFZFcnJvcjogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIHJldHVybiBkZWZhdWx0CisgICogCistICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3ZhbHVl KHNlbGYsIG1wdl9ub2RlIG5vZGUpOgorLSAqICAgICAgICAgaWYgbm9kZS5mb3JtYXQgaW4gKE1Q Vl9GT1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlz dC5udW0pOgorLSAqICAgICAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2Rl LnUubGlzdC52YWx1ZXNbaV0pCisgICovCistICAgIGJyZWFrOworLSAgICBjYXNlIE1QVl9GT1JN QVRfU1RSSU5HOgorKyAgICBfX1B5eF9FcnJGZXRjaCgmX19weXhfdF80LCAmX19weXhfdF81LCAm X19weXhfdF82KTsKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzcsIF9f cHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAs IDYwOSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83 KTsKKysgICAgX19weXhfdF84ID0gX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKF9f cHl4X3RfNCwgX19weXhfdF83KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4 X3RfNyA9IDA7CisrICAgIF9fUHl4X0VyclJlc3RvcmUoX19weXhfdF80LCBfX3B5eF90XzUsIF9f cHl4X3RfNik7CisrICAgIF9fcHl4X3RfNCA9IDA7IF9fcHl4X3RfNSA9IDA7IF9fcHl4X3RfNiA9 IDA7CisrICAgIGlmIChfX3B5eF90XzgpIHsKKysgICAgICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnRyeV9nZXRfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgICAgICBpZiAoX19QeXhfR2V0RXhj ZXB0aW9uKCZfX3B5eF90XzYsICZfX3B5eF90XzUsICZfX3B5eF90XzQpIDwgMCkgX19QWVhfRVJS KDAsIDYwOSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOworKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworKyAgICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzQpOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTI4CistICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdCkKKy0gKiAgICAgICAgIGVs aWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CistICogICAgICAgICAgICAgZnJl ZShub2RlLnUuc3RyaW5nKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYxMAorKyAqICAgICAgICAgICAgIHJldHVy biBzZWxmLmdldF9wcm9wZXJ0eShwcm9wKQorKyAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOgor KyAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAKKy0gKiAgICAgZGVmIGNvbW1hbmQoc2VsZiwgKmNtZGxpc3QsIGFzeW5jaHJvbm91 cz1GYWxzZSwgZGF0YT1Ob25lKToKKysgKiAgICAgZGVmIGdldF9wcm9wZXJ0eShzZWxmLCBwcm9w KToKKyAgKi8KKy0gICAgZnJlZShfX3B5eF92X25vZGUudS5zdHJpbmcpOworKyAgICAgIF9fUHl4 X1hERUNSRUYoX19weXhfcik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZGVmYXVsdCk7 CisrICAgICAgX19weXhfciA9IF9fcHl4X3ZfZGVmYXVsdDsKKysgICAgICBfX1B5eF9ERUNSRUYo X19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81 KTsgX19weXhfdF81ID0gMDsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKKysgICAgICBnb3RvIF9fcHl4X0w2X2V4Y2VwdF9yZXR1cm47CisrICAgIH0KKysg ICAgZ290byBfX3B5eF9MNV9leGNlcHRfZXJyb3I7CisrICAgIF9fcHl4X0w1X2V4Y2VwdF9lcnJv cjo7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjcKKy0gKiAg ICAgICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdC5rZXlzKQorLSAqICAgICAgICAgICAgIGZy ZWUobm9kZS51Lmxpc3QpCistICogICAgICAgICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JN QVRfU1RSSU5HOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg ZnJlZShub2RlLnUuc3RyaW5nKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjA3CisgICogCisrICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRl ZmF1bHQ9Tm9uZSk6CisrICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkKKysgKiAg ICAgICAgIGV4Y2VwdCBNUFZFcnJvcjoKKyAgKi8KKy0gICAgYnJlYWs7CistICAgIGRlZmF1bHQ6 IGJyZWFrOworKyAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9YR0lW RVJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzMpOworKyAgICBf X1B5eF9FeGNlcHRpb25SZXNldChfX3B5eF90XzEsIF9fcHl4X3RfMiwgX19weXhfdF8zKTsKKysg ICAgZ290byBfX3B5eF9MMV9lcnJvcjsKKysgICAgX19weXhfTDdfdHJ5X3JldHVybjo7CisrICAg IF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Rf Mik7CisrICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0V4Y2VwdGlv blJlc2V0KF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOworKyAgICBnb3RvIF9fcHl4 X0wwOworKyAgICBfX3B5eF9MNl9leGNlcHRfcmV0dXJuOjsKKysgICAgX19QeXhfWEdJVkVSRUYo X19weXhfdF8xKTsKKysgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhf WEdJVkVSRUYoX19weXhfdF8zKTsKKysgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8x LCBfX3B5eF90XzIsIF9fcHl4X3RfMyk7CisrICAgIGdvdG8gX19weXhfTDA7CisgICB9CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTE3CistICogICAgICAgICByZXR1 cm4gbm9kZQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwNgorKyAqICAg ICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICogCistICogICAgIGNkZWYgX2ZyZWVfbmF0aXZl X3ZhbHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICBpZiBub2RlLmZvcm1hdCBpbiAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBN UFZfRk9STUFUX05PREVfTUFQKToKKy0gKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2Rl LnUubGlzdC5udW0pOgorKyAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eShzZWxmLCBwcm9wLCBk ZWZhdWx0PU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB0 cnk6CisrICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5KHByb3ApCisgICov CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQeV9Ob25lOyBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworICAgX19weXhfTDFfZXJy b3I6OworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworLSAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5fZnJlZV9uYXRpdmVfdmFsdWUiLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAwOwor KyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYp OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2 aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5IiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKyAg IF9fcHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUzMAorLSAqICAgICAgICAgICAgIGZyZWUobm9kZS51 LnN0cmluZykKKy0gKiAKKy0gKiAgICAgZGVmIGNvbW1hbmQoc2VsZiwgKmNtZGxpc3QsIGFzeW5j aHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgIiIiU2VuZCBhIGNvbW1hbmQgdG8gbXB2LgorKy8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo2MTIKKysgKiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAq IAorKyAqICAgICBkZWYgZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3ApOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJXcmFwczogbXB2X2dldF9wcm9wZXJ0eSIiIgor KyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVy ICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMTNjb21tYW5kKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9h cmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLworLXN0YXRpYyBjaGFyIF9fcHl4 X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJjb21tYW5kW10gPSAiU2VuZCBh IGNvbW1hbmQgdG8gbXB2LlxuXG4gICAgICAgIE5vbi1hc3luYyBzdWNjZXNzIHJldHVybnMgdGhl IGNvbW1hbmQncyByZXNwb25zZSBkYXRhLCBvdGhlcndpc2UgTm9uZVxuXG4gICAgICAgIEFyZ3Vt ZW50czpcbiAgICAgICAgQWNjZXB0cyBwYXJhbWV0ZXJzIGFzIGFyZ3NcblxuICAgICAgICBLZXl3 b3JkIEFyZ3VtZW50czpcbiAgICAgICAgYXN5bmNocm9ub3VzOiBUcnVlIHdpbGwgcmV0dXJuIHJp Z2h0IGF3YXksIHN0YXR1cyBjb21lcyBpbiBhcyBNUFZfRVZFTlRfQ09NTUFORF9SRVBMWVxuICAg ICAgICBkYXRhOiBPbmx5IHZhbGlkIGlmIGFzeW5jLCBnZXRzIHNlbnQgYmFjayBhcyByZXBseV91 c2VyZGF0YSBpbiB0aGUgRXZlbnRcblxuICAgICAgICBXcmFwczogbXB2X2NvbW1hbmRfbm9kZSBh bmQgbXB2X2NvbW1hbmRfbm9kZV9hc3luY1xuICAgICAgICAiOworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEzY29tbWFuZChQeU9iamVj dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3 ZHMpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2FzeW5jaHJvbm91cyA9IDA7CistICBQeU9iamVj dCAqX19weXhfdl9kYXRhID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2NtZGxpc3QgPSAwOwor LSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTdnZXRfcHJvcGVydHkoUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCk7IC8qcHJvdG8qLworK3N0 YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRf cHJvcGVydHlbXSA9ICJXcmFwczogbXB2X2dldF9wcm9wZXJ0eSI7Cisrc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTdnZXRfcHJvcGVydHko UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCkgeworICAgUHlP YmplY3QgKl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjb21tYW5kICh3cmFwcGVyKSIsIDApOworLSAgaWYg KFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgPiAwKSB7CistICAgIF9fcHl4X3ZfY21kbGlz dCA9IFB5VHVwbGVfR2V0U2xpY2UoX19weXhfYXJncywgMCwgUHlUdXBsZV9HRVRfU0laRShfX3B5 eF9hcmdzKSk7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdl9jbWRsaXN0KSkgeworLSAgICAg IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgICAgIHJldHVybiBOVUxMOworLSAg ICB9CistICAgIF9fUHl4X0dPVFJFRihfX3B5eF92X2NtZGxpc3QpOworLSAgfSBlbHNlIHsKKy0g ICAgX19weXhfdl9jbWRsaXN0ID0gX19weXhfZW1wdHlfdHVwbGU7IF9fUHl4X0lOQ1JFRihfX3B5 eF9lbXB0eV90dXBsZSk7CistICB9CistICB7CistICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4 X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX2FzeW5jaHJvbm91cywmX19weXhfbl9zX2RhdGEs MH07CistICAgIFB5T2JqZWN0KiB2YWx1ZXNbMl0gPSB7MCwwfTsKKy0gICAgdmFsdWVzWzBdID0g KChQeU9iamVjdCAqKVB5X0ZhbHNlKTsKKy0gICAgdmFsdWVzWzFdID0gKChQeU9iamVjdCAqKVB5 X05vbmUpOworLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKKy0gICAgICBQeV9zc2l6 ZV90IGt3X2FyZ3M7CistICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVf R0VUX1NJWkUoX19weXhfYXJncyk7CistICAgICAgc3dpdGNoIChwb3NfYXJncykgeworLSAgICAg ICAgZGVmYXVsdDoKKy0gICAgICAgIGNhc2UgIDA6IGJyZWFrOworLSAgICAgIH0KKy0gICAgICBr d19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7CistICAgICAgaWYgKGt3X2FyZ3MgPiAw ICYmIGxpa2VseShrd19hcmdzIDw9IDIpKSB7CistICAgICAgICBQeV9zc2l6ZV90IGluZGV4Owor LSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgMiAmJiBrd19hcmdzID4gMDsgaW5kZXgr KykgeworLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0 cihfX3B5eF9rd2RzLCAqX19weXhfcHlhcmduYW1lc1tpbmRleF0pOworLSAgICAgICAgICBpZiAo dmFsdWUpIHsgdmFsdWVzW2luZGV4XSA9IHZhbHVlOyBrd19hcmdzLS07IH0KKy0gICAgICAgIH0K Ky0gICAgICB9CistICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAg aWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5 eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIDAsICJjb21tYW5kIikgPCAwKSkgX19QWVhfRVJSKDAs IDUzMCwgX19weXhfTDNfZXJyb3IpCistICAgICAgfQorLSAgICB9IGVsc2UgaWYgKFB5VHVwbGVf R0VUX1NJWkUoX19weXhfYXJncykgPCAwKSB7CistICAgICAgZ290byBfX3B5eF9MNV9hcmd0dXBs ZV9lcnJvcjsKKy0gICAgfSBlbHNlIHsKKy0gICAgfQorLSAgICBfX3B5eF92X2FzeW5jaHJvbm91 cyA9IHZhbHVlc1swXTsKKy0gICAgX19weXhfdl9kYXRhID0gdmFsdWVzWzFdOworLSAgfQorLSAg Z290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKy0gIF9fcHl4X0w1X2FyZ3R1 cGxlX2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJjb21tYW5kIiwgMCwg MCwgMCwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA1MzAsIF9f cHl4X0wzX2Vycm9yKQorLSAgX19weXhfTDNfZXJyb3I6OworLSAgX19QeXhfREVDUkVGKF9fcHl4 X3ZfY21kbGlzdCk7IF9fcHl4X3ZfY21kbGlzdCA9IDA7CistICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmNvbW1hbmQiLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOworLSAgcmV0dXJuIE5VTEw7CistICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9u ZTo7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzEyY29tbWFuZCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X2FzeW5jaHJvbm91cywgX19weXhfdl9kYXRhLCBf X3B5eF92X2NtZGxpc3QpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImdldF9wcm9w ZXJ0eSAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9f cHl4X3ZfcHJvcCkpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9Y REVDUkVGKF9fcHl4X3ZfY21kbGlzdCk7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMmNvbW1hbmQoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9hc3luY2hyb25vdXMsIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEsIFB5T2JqZWN0ICpf X3B5eF92X2NtZGxpc3QpIHsKKy0gIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF92X25vZGU7CistICBz dHJ1Y3QgbXB2X25vZGUgX19weXhfdl9ub2RlcmVzdWx0OworK3N0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5KHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3ZfcHJvcCkgeworKyAgc3RydWN0IG1wdl9ub2RlIF9fcHl4X3ZfcmVz dWx0OworKyAgY2hhciBjb25zdCAqX19weXhfdl9wcm9wX2M7CisgICBpbnQgX19weXhfdl9lcnI7 CistICB1aW50NjRfdCBfX3B5eF92X2RhdGFfaWQ7CistICBQeU9iamVjdCAqX19weXhfdl9yZXN1 bHQgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfdXNlcmRhdGFzID0gTlVMTDsKKysgIFB5 T2JqZWN0ICpfX3B5eF92X3YgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwor ICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBO VUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhf dF8zID0gTlVMTDsKKy0gIHVpbnQ2NF90IF9fcHl4X3RfNDsKKysgIGNoYXIgY29uc3QgKl9fcHl4 X3RfNDsKKyAgIGludCBfX3B5eF90XzU7CistICBpbnQgX19weXhfdF82OworKyAgUHlPYmplY3Qg Kl9fcHl4X3RfNiA9IE5VTEw7CisgICBpbnQgX19weXhfdF83OworICAgaW50IF9fcHl4X3RfODsK KyAgIGNoYXIgY29uc3QgKl9fcHl4X3RfOTsKK0BAIC0xMTE5OCw0MSArMTE4NzYsMzkgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJj b21tYW5kKHN0cnVjdCBfX3B5eF8KKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEzID0gTlVMTDsKKyAg IFB5T2JqZWN0ICpfX3B5eF90XzE0ID0gTlVMTDsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzE1ID0g TlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzE2ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5 eF90XzE3ID0gTlVMTDsKKy0gIGNoYXIgY29uc3QgKl9fcHl4X3RfMTg7CisgICBpbnQgX19weXhf bGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGlu dCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjb21t YW5kIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X3Byb3BlcnR5Iiwg MCk7CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1NDQKKy0gKiAgICAgICAgIFdyYXBzOiBtcHZfY29tbWFuZF9u b2RlIGFuZCBtcHZfY29tbWFuZF9ub2RlX2FzeW5jCistICogICAgICAgICAiIiIKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MTQKKysgKiAgICAgZGVmIGdldF9wcm9wZXJ0 eShzZWxmLCBwcm9wKToKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5IiIi CisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3Zh bHVlKGNtZGxpc3QsIHNlbGYuX2Zvcm1hdF9mb3IoY21kbGlzdCkpCistICogICAgICAgICBjZGVm IG1wdl9ub2RlIG5vZGVyZXN1bHQKKysgKiAgICAgICAgIGNkZWYgbXB2X25vZGUgcmVzdWx0Cisr ICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQorICAqLworICAgI2lmbmRlZiBDWVRIT05f V0lUSE9VVF9BU1NFUlRJT05TCisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsK KyAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworICAgICAg IFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigw LCA1NDQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA2MTQsIF9fcHl4X0wx X2Vycm9yKQorICAgICB9CisgICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo1NDUKKy0gKiAgICAgICAgICIiIgorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjYxNgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorLSAq ICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUoY21k bGlzdCwgc2VsZi5fZm9ybWF0X2ZvcihjbWRsaXN0KSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlcmVzdWx0CisrICogICAgICAgICBj ZGVmIG1wdl9ub2RlIHJlc3VsdAorKyAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBw cm9wX2MgPSBwcm9wCisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKi8KKy0gIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiks IF9fcHl4X25fc19mb3JtYXRfZm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgNTQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgNjE2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzIpOworICAgX19weXhfdF8zID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMg JiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICBpZiAoQ1lUSE9OX1VO UEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Cisg ICAgIF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CisgICAgIGlmIChs aWtlbHkoX19weXhfdF8zKSkgeworICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9k X0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworQEAgLTExMjQxLDYyNSArMTE5MTcsMzMyIEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEy Y29tbWFuZChzdHJ1Y3QgX19weXhfCisgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIs IGZ1bmN0aW9uKTsKKyAgICAgfQorICAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBf X1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfY21k bGlzdCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9jbWRs aXN0KTsKKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3Byb3ApIDogX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfcHJvcCk7CisgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCA1NDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNjE2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cist ICBfX3B5eF92X25vZGUgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbmF0aXZl X3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl9jbWRsaXN0LCBfX3B5eF90XzEpOworLSAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX1B5eF9ERUNSRUZfU0VU KF9fcHl4X3ZfcHJvcCwgX19weXhfdF8xKTsKKysgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTQ5CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjE3CisrICogICAgICAgICBjZGVmIG1wdl9ub2RlIHJlc3VsdAorKyAq ICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hh ciogcHJvcF9jID0gcHJvcCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAg ICBjZGVmIGludCBlcnIKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgZGF0YV9pZAorLSAqICAg ICAgICAgcmVzdWx0ID0gTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICB0cnk6CistICogICAgICAgICAgICAgZGF0YV9pZCA9IGlkKGRhdGEpCistICovCistICBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBfX3B5eF92X3Jlc3VsdCA9IFB5X05vbmU7CistCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTUwCistICogICAgICAgICBjZGVm IHVpbnQ2NF90IGRhdGFfaWQKKy0gKiAgICAgICAgIHJlc3VsdCA9IE5vbmUKKy0gKiAgICAgICAg IHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGRhdGFf aWQgPSBpZChkYXRhKQorLSAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CisrICog ICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgLyp0cnk6Ki8geworKyAgX19weXhfdF80ID0g X19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCghX19w eXhfdF80KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDYxNywgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF92X3Byb3BfYyA9IF9fcHl4X3RfNDsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1MQorLSAqICAgICAgICAgcmVzdWx0ID0gTm9uZQor LSAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgIGRhdGFfaWQgPSBpZChkYXRhKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJv bm91czoKKy0gKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MTkKKysgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJv cF9jID0gcHJvcAorKyAqICAgICAgICAgY2RlZiBpbnQgZXJyCisrICogICAgICAgICB3aXRoIG5v Z2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgZXJyID0g bXB2X2dldF9wcm9wZXJ0eSgKKysgKiAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorICAqLwor LSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5f aWQsIF9fcHl4X3ZfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDU1MSwgX19weXhfTDRfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAg ICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5s aWtlbHkoKF9fcHl4X3RfNCA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCA1NTEsIF9fcHl4X0w0X2Vycm9yKQorLSAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAgX19weXhfdl9kYXRhX2lkID0gX19weXhfdF80 OworKyAgeworKyAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgIFB5VGhyZWFkU3RhdGUg Kl9zYXZlOworKyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworKyAgICAgIF9fUHl4X0Zhc3RHSUxf UmVtZW1iZXIoKTsKKysgICAgICAjZW5kaWYKKysgICAgICAvKnRyeToqLyB7CisgCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTIKKy0gKiAgICAgICAgIHRyeToKKy0g KiAgICAgICAgICAgICBkYXRhX2lkID0gaWQoZGF0YSkKKy0gKiAgICAgICAgICAgICBpZiBub3Qg YXN5bmNocm9ub3VzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAg ICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29t bWFuZF9ub2RlKHNlbGYuX2N0eCwgJm5vZGUsICZub2RlcmVzdWx0KQorKyAgICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYyMAorKyAqICAgICAgICAgY2RlZiBpbnQgZXJy CisrICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9nZXRf cHJvcGVydHkoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAg ICAgc2VsZi5fY3R4LAorKyAqICAgICAgICAgICAgICAgICBwcm9wX2MsCisgICovCistICAgIF9f cHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X2FzeW5jaHJvbm91cyk7IGlm ICh1bmxpa2VseShfX3B5eF90XzUgPCAwKSkgX19QWVhfRVJSKDAsIDU1MiwgX19weXhfTDRfZXJy b3IpCistICAgIF9fcHl4X3RfNiA9ICgoIV9fcHl4X3RfNSkgIT0gMCk7CistICAgIGlmIChfX3B5 eF90XzYpIHsKKysgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2dldF9wcm9wZXJ0eShfX3B5eF92 X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcHJvcF9jLCBNUFZfRk9STUFUX05PREUsICgmX19weXhfdl9y ZXN1bHQpKTsKKysgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU1MworLSAqICAgICAgICAgICAgIGRhdGFfaWQgPSBpZChkYXRhKQorLSAqICAgICAg ICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CistICogICAgICAgICAgICAgICAgIHdpdGggbm9n aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgICAg IGVyciA9IG1wdl9jb21tYW5kX25vZGUoc2VsZi5fY3R4LCAmbm9kZSwgJm5vZGVyZXN1bHQpCist ICogICAgICAgICAgICAgICAgIHRyeToKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjE5CisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AK KysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9nZXRfcHJv cGVydHkoCisrICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKKyAgKi8KKy0gICAgICB7Cisr ICAgICAgLypmaW5hbGx5OiovIHsKKysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CisgICAgICAg ICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsK Ky0gICAgICAgICAgUHlfVU5CTE9DS19USFJFQURTCistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxf UmVtZW1iZXIoKTsKKysgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAg ICAgUHlfQkxPQ0tfVEhSRUFEUworICAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgLyp0cnk6 Ki8geworLQorLSAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 NTQKKy0gKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgorLSAqICAgICAgICAgICAg ICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1h bmRfbm9kZShzZWxmLl9jdHgsICZub2RlLCAmbm9kZXJlc3VsdCkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICB0cnk6CistICogICAgICAgICAgICAgICAg ICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQpIGlmIGVyciA+PSAw IGVsc2UgTm9uZQorLSAqLworLSAgICAgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2NvbW1hbmRf bm9kZShfX3B5eF92X3NlbGYtPl9jdHgsICgmX19weXhfdl9ub2RlKSwgKCZfX3B5eF92X25vZGVy ZXN1bHQpKTsKKy0gICAgICAgICAgfQorLQorLSAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTUzCistICogICAgICAgICAgICAgZGF0YV9pZCA9IGlkKGRhdGEpCist ICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czoKKy0gKiAgICAgICAgICAgICAgICAg d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg ICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZShzZWxmLl9jdHgsICZub2RlLCAmbm9kZXJl c3VsdCkKKy0gKiAgICAgICAgICAgICAgICAgdHJ5OgorLSAqLworLSAgICAgICAgICAvKmZpbmFs bHk6Ki8geworLSAgICAgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICAgICAj aWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7 CistICAgICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICAgICAjZW5kaWYK Ky0gICAgICAgICAgICAgIGdvdG8gX19weXhfTDk7CistICAgICAgICAgICAgfQorLSAgICAgICAg ICAgIF9fcHl4X0w5OjsKKy0gICAgICAgICAgfQorKyAgICAgICAgICBnb3RvIF9fcHl4X0w1Owor KyAgICAgICAgfQorKyAgICAgICAgX19weXhfTDU6OworICAgICAgIH0KKysgIH0KKyAKKy0gICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU1CistICogICAgICAgICAgICAg ICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFu ZF9ub2RlKHNlbGYuX2N0eCwgJm5vZGUsICZub2RlcmVzdWx0KQorLSAqICAgICAgICAgICAgICAg ICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAg ICAgIHJlc3VsdCA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZXJlc3VsdCkgaWYgZXJyID49IDAg ZWxzZSBOb25lCistICogICAgICAgICAgICAgICAgIGZpbmFsbHk6CisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjI2CisrICogICAgICAgICAgICAgICAgICZyZXN1bHQsCisr ICogICAgICAgICAgICAgKQorKyAqICAgICAgICAgaWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKysgKiAg ICAgICAgIHRyeToKKyAgKi8KKy0gICAgICAvKnRyeToqLyB7CisrICBfX3B5eF90XzUgPSAoKF9f cHl4X3ZfZXJyIDwgMCkgIT0gMCk7CisrICBpZiAodW5saWtlbHkoX19weXhfdF81KSkgeworIAor LSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1NgorLSAqICAgICAg ICAgICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZShzZWxmLl9jdHgsICZub2RlLCAm bm9kZXJlc3VsdCkKKy0gKiAgICAgICAgICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgICAg ICAgICAgcmVzdWx0ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlcmVzdWx0KSBpZiBlcnIgPj0g MCBlbHNlIE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg ICAgICBmaW5hbGx5OgorLSAqICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYyNworKyAqICAgICAgICAgICAgICkK KysgKiAgICAgICAgIGlmIGVyciA8IDA6CisrICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3Io ZXJyKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB0cnk6CisrICog ICAgICAgICAgICAgdiA9IF9jb252ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQorICAqLworLSAgICAg ICAgaWYgKCgoX19weXhfdl9lcnIgPj0gMCkgIT0gMCkpIHsKKy0gICAgICAgICAgX19weXhfdF8y ID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShfX3B5 eF92X25vZGVyZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1 NTYsIF9fcHl4X0wxMV9lcnJvcikKKy0gICAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 CistICAgICAgICAgIF9fcHl4X3RfMSA9IF9fcHl4X3RfMjsKKy0gICAgICAgICAgX19weXhfdF8y ID0gMDsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKKy0gICAgICAgICAgX19weXhfdF8xID0gUHlfTm9uZTsKKy0gICAgICAgIH0KKy0gICAgICAg IF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9yZXN1bHQsIF9fcHl4X3RfMSk7CistICAgICAgICBf X3B5eF90XzEgPSAwOworKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwg X19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgNjI3LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Cisr ICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNjI3LCBfX3B5eF9MMV9lcnJvcikKKysg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fcHl4X3RfNiA9IE5VTEw7CisrICAg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19w eXhfdF8yKSkpIHsKKysgICAgICBfX3B5eF90XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90 XzIpOworKyAgICAgIGlmIChsaWtlbHkoX19weXhfdF82KSkgeworKyAgICAgICAgUHlPYmplY3Qq IGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CisrICAgICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF82KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7 CisrICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworICAgICAg IH0KKysgICAgfQorKyAgICBfX3B5eF90XzEgPSAoX19weXhfdF82KSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNiwgX19weXhfdF8zKSA6IF9fUHl4X1B5T2Jq ZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOworKyAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMp OyBfX3B5eF90XzMgPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA2MjcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK KysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4 X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEp OyBfX3B5eF90XzEgPSAwOworKyAgICBfX1BZWF9FUlIoMCwgNjI3LCBfX3B5eF9MMV9lcnJvcikK KyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU4CistICogICAg ICAgICAgICAgICAgICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQp IGlmIGVyciA+PSAwIGVsc2UgTm9uZQorLSAqICAgICAgICAgICAgICAgICBmaW5hbGx5OgorLSAq ICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMo Jm5vZGVyZXN1bHQpCistICogICAgICAgICAgICAgZWxzZToKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjYyNgorKyAqICAgICAgICAgICAgICAgICAmcmVzdWx0LAorKyAq ICAgICAgICAgICAgICkKKysgKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCisrICogICAg ICAgICB0cnk6CisgICovCistICAgICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFs IGV4aXQ6Ki97CistICAgICAgICAgIHsKKy0gICAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAorLSAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgICAgICAgICBQ eV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIo KTsKKy0gICAgICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICAgICAgLyp0cnk6Ki8geworKyAg fQorIAorLSAgICAgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTU5CistICogICAgICAgICAgICAgICAgIGZpbmFsbHk6CistICogICAgICAgICAgICAgICAgICAg ICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVf Y29udGVudHMoJm5vZGVyZXN1bHQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgICAgICBlbHNlOgorLSAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJl cGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjYyOAorKyAqICAgICAgICAgaWYgZXJyIDwgMDoKKysgKiAgICAgICAgICAg ICByYWlzZSBNUFZFcnJvcihlcnIpCisrICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICB2ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShyZXN1 bHQpCisrICogICAgICAgICBmaW5hbGx5OgorICAqLworLSAgICAgICAgICAgICAgICBtcHZfZnJl ZV9ub2RlX2NvbnRlbnRzKCgmX19weXhfdl9ub2RlcmVzdWx0KSk7CistICAgICAgICAgICAgICB9 CisrICAvKnRyeToqLyB7CisgCistICAgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTU4CistICogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfY29udmVy dF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQpIGlmIGVyciA+PSAwIGVsc2UgTm9uZQorLSAqICAgICAg ICAgICAgICAgICBmaW5hbGx5OgorLSAqICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICAgICAgICAg IG1wdl9mcmVlX25vZGVfY29udGVudHMoJm5vZGVyZXN1bHQpCistICogICAgICAgICAgICAgZWxz ZToKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYyOQorKyAqICAgICAg ICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKysgKiAgICAgICAgIHRyeToKKysgKiAgICAgICAg ICAgICB2ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShyZXN1bHQpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIGZpbmFsbHk6CisrICogICAgICAgICAgICAgd2l0aCBub2dp bDoKKyAgKi8KKy0gICAgICAgICAgICAgIC8qZmluYWxseToqLyB7CistICAgICAgICAgICAgICAg IC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFE CistICAgICAgICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAg ICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICAgICAgICAgI2VuZGlmCistICAg ICAgICAgICAgICAgICAgZ290byBfX3B5eF9MMTU7CistICAgICAgICAgICAgICAgIH0KKy0gICAg ICAgICAgICAgICAgX19weXhfTDE1OjsKKy0gICAgICAgICAgICAgIH0KKy0gICAgICAgICAgfQor LSAgICAgICAgICBnb3RvIF9fcHl4X0wxMjsKKy0gICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0wx MV9lcnJvcjo7CistICAgICAgICAvKmV4Y2VwdGlvbiBleGl0OioveworLSAgICAgICAgICBfX1B5 eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKKy0gICAgICAgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9h c3NpZ24KKy0gICAgICAgICAgX19weXhfdF8xMCA9IDA7IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90 XzEyID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3RfMTQgPSAwOyBfX3B5eF90XzE1ID0gMDsK Ky0gICAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAg ICAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgICAg ICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAgICAgICAg aWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgX19QeXhfRXhjZXB0aW9uU3dhcCgmX19weXhfdF8x MywgJl9fcHl4X3RfMTQsICZfX3B5eF90XzE1KTsKKy0gICAgICAgICAgaWYgKChQWV9NQUpPUl9W RVJTSU9OIDwgMykgfHwgdW5saWtlbHkoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5eF90XzEwLCAm X19weXhfdF8xMSwgJl9fcHl4X3RfMTIpIDwgMCkpIF9fUHl4X0VyckZldGNoKCZfX3B5eF90XzEw LCAmX19weXhfdF8xMSwgJl9fcHl4X3RfMTIpOworLSAgICAgICAgICBfX1B5eF9YR09UUkVGKF9f cHl4X3RfMTApOworLSAgICAgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTEpOworLSAgICAg ICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTIpOworLSAgICAgICAgICBfX1B5eF9YR09UUkVG KF9fcHl4X3RfMTMpOworLSAgICAgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTQpOworLSAg ICAgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTUpOworLSAgICAgICAgICBfX3B5eF90Xzcg PSBfX3B5eF9saW5lbm87IF9fcHl4X3RfOCA9IF9fcHl4X2NsaW5lbm87IF9fcHl4X3RfOSA9IF9f cHl4X2ZpbGVuYW1lOworLSAgICAgICAgICB7CistICAgICAgICAgICAgeworLSAgICAgICAgICAg ICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAq X3NhdmU7CistICAgICAgICAgICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgICAgICAg ICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAgICAgICAgICAgICAgICNlbmRpZgor LSAgICAgICAgICAgICAgICAvKnRyeToqLyB7CisrICAgIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoX19weXhfdl9yZXN1bHQpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2MjksIF9fcHl4X0w4X2Vycm9y KQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19weXhfdl92ID0gX19weXhf dF8xOworKyAgICBfX3B5eF90XzEgPSAwOworKyAgfQorIAorLSAgICAgICAgICAgICAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTkKKy0gKiAgICAgICAgICAgICAgICAg ZmluYWxseToKKy0gKiAgICAgICAgICAgICAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAg ICAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50cygmbm9kZXJlc3VsdCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGVsc2U6CistICogICAg ICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQs IE5vbmUpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMxCisrICogICAg ICAgICAgICAgdiA9IF9jb252ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQorKyAqICAgICAgICAgZmlu YWxseToKKysgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoJnJlc3Vs dCkKKysgKiAgICAgICAgIHJldHVybiB2CisgICovCistICAgICAgICAgICAgICAgICAgbXB2X2Zy ZWVfbm9kZV9jb250ZW50cygoJl9fcHl4X3Zfbm9kZXJlc3VsdCkpOworLSAgICAgICAgICAgICAg ICB9CisrICAvKmZpbmFsbHk6Ki8geworKyAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgIHsK KysgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAgIFB5VGhyZWFkU3RhdGUg Kl9zYXZlOworKyAgICAgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKysgICAgICAgICAgX19QeXhf RmFzdEdJTF9SZW1lbWJlcigpOworKyAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgLyp0cnk6 Ki8geworIAorLSAgICAgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTU4CistICogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3Zh bHVlKG5vZGVyZXN1bHQpIGlmIGVyciA+PSAwIGVsc2UgTm9uZQorLSAqICAgICAgICAgICAgICAg ICBmaW5hbGx5OgorLSAqICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICAgICAgICAgIG1wdl9mcmVl X25vZGVfY29udGVudHMoJm5vZGVyZXN1bHQpCistICogICAgICAgICAgICAgZWxzZToKKysgICAg ICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMyCisrICogICAgICAg ICBmaW5hbGx5OgorKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAg ICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoJnJlc3VsdCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgcmV0dXJuIHYKKysgKiAKKyAgKi8KKy0gICAgICAgICAgICAg ICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgICAgICAgICAgICAvKm5vcm1hbCBleGl0Oiovewor LSAgICAgICAgICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgICAgICAg ICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAgICAgICAgICAgICAgICAgICAgUHlfQkxP Q0tfVEhSRUFEUworLSAgICAgICAgICAgICAgICAgICAgI2VuZGlmCistICAgICAgICAgICAgICAg ICAgICBnb3RvIF9fcHl4X0wyMDsKKy0gICAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAg ICAgICAgX19weXhfTDIwOjsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIH0KKy0g ICAgICAgICAgfQorLSAgICAgICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSB7CistICAg ICAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMyk7CistICAgICAgICAgICAgX19QeXhf WEdJVkVSRUYoX19weXhfdF8xNCk7CistICAgICAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhf dF8xNSk7CistICAgICAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMywgX19w eXhfdF8xNCwgX19weXhfdF8xNSk7CisrICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50 cygoJl9fcHl4X3ZfcmVzdWx0KSk7CisgICAgICAgICAgIH0KKy0gICAgICAgICAgX19QeXhfWEdJ VkVSRUYoX19weXhfdF8xMCk7CistICAgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTEp OworLSAgICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEyKTsKKy0gICAgICAgICAgX19Q eXhfRXJyUmVzdG9yZShfX3B5eF90XzEwLCBfX3B5eF90XzExLCBfX3B5eF90XzEyKTsKKy0gICAg ICAgICAgX19weXhfdF8xMCA9IDA7IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90XzEyID0gMDsgX19w eXhfdF8xMyA9IDA7IF9fcHl4X3RfMTQgPSAwOyBfX3B5eF90XzE1ID0gMDsKKy0gICAgICAgICAg X19weXhfbGluZW5vID0gX19weXhfdF83OyBfX3B5eF9jbGluZW5vID0gX19weXhfdF84OyBfX3B5 eF9maWxlbmFtZSA9IF9fcHl4X3RfOTsKKy0gICAgICAgICAgZ290byBfX3B5eF9MNF9lcnJvcjsK Ky0gICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0wxMjo7CistICAgICAgfQorIAorLSAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTIKKy0gKiAgICAgICAgIHRyeToKKy0g KiAgICAgICAgICAgICBkYXRhX2lkID0gaWQoZGF0YSkKKy0gKiAgICAgICAgICAgICBpZiBub3Qg YXN5bmNocm9ub3VzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAg ICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29t bWFuZF9ub2RlKHNlbGYuX2N0eCwgJm5vZGUsICZub2RlcmVzdWx0KQorKyAgICAgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMxCisrICogICAgICAgICAgICAgdiA9IF9j b252ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQorKyAqICAgICAgICAgZmluYWxseToKKysgKiAgICAg ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29udGVudHMoJnJlc3VsdCkKKysgKiAgICAgICAg IHJldHVybiB2CisgICovCistICAgICAgZ290byBfX3B5eF9MNjsKKysgICAgICAgICAgLypmaW5h bGx5OiovIHsKKysgICAgICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAgICAg I2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgp OworKyAgICAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAgICAgI2VuZGlm CisrICAgICAgICAgICAgICBnb3RvIF9fcHl4X0wxMjsKKysgICAgICAgICAgICB9CisrICAgICAg ICAgICAgX19weXhfTDEyOjsKKysgICAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBnb3RvIF9f cHl4X0w5OworICAgICB9CisrICAgIF9fcHl4X0w4X2Vycm9yOjsKKysgICAgLypleGNlcHRpb24g ZXhpdDoqL3sKKysgICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKKysgICAgICBfX1B5 eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorKyAgICAgIF9fcHl4X3RfMTAgPSAwOyBfX3B5eF90XzEx ID0gMDsgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTMgPSAwOyBfX3B5eF90XzE0ID0gMDsgX19w eXhfdF8xNSA9IDA7CisrICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysg ICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICAgICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICAgIGlmIChQWV9NQUpP Ul9WRVJTSU9OID49IDMpIF9fUHl4X0V4Y2VwdGlvblN3YXAoJl9fcHl4X3RfMTMsICZfX3B5eF90 XzE0LCAmX19weXhfdF8xNSk7CisrICAgICAgaWYgKChQWV9NQUpPUl9WRVJTSU9OIDwgMykgfHwg dW5saWtlbHkoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5eF90XzEwLCAmX19weXhfdF8xMSwgJl9f cHl4X3RfMTIpIDwgMCkpIF9fUHl4X0VyckZldGNoKCZfX3B5eF90XzEwLCAmX19weXhfdF8xMSwg Jl9fcHl4X3RfMTIpOworKyAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMCk7CisrICAgICAg X19QeXhfWEdPVFJFRihfX3B5eF90XzExKTsKKysgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3Rf MTIpOworKyAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMyk7CisrICAgICAgX19QeXhfWEdP VFJFRihfX3B5eF90XzE0KTsKKysgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTUpOworKyAg ICAgIF9fcHl4X3RfNyA9IF9fcHl4X2xpbmVubzsgX19weXhfdF84ID0gX19weXhfY2xpbmVubzsg X19weXhfdF85ID0gX19weXhfZmlsZW5hbWU7CisrICAgICAgeworKyAgICAgICAgeworKyAgICAg ICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9z YXZlOworKyAgICAgICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAgIF9fUHl4 X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKysgICAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgICAv KnRyeToqLyB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjEK Ky0gKiAgICAgICAgICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2Rl cmVzdWx0KQorLSAqICAgICAgICAgICAgIGVsc2U6CistICogICAgICAgICAgICAgICAgIHVzZXJk YXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5v bmU6CistICogICAgICAgICAgICAgICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2RhdGFfaWRdID0g dXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKysgICAgICAgICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzIKKysgKiAgICAgICAgIGZpbmFsbHk6CisrICog ICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9k ZV9jb250ZW50cygmcmVzdWx0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICByZXR1cm4gdgorKyAqIAorICAqLworLSAgICAvKmVsc2UqLyB7CistICAgICAgX19weXhf dF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJk YXRhLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK Ky0gICAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfZGF0 YV9pZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDU2MSwgX19weXhf TDRfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgICAgX19weXhf dF8xNiA9IE5VTEw7CistICAgICAgX19weXhfdF84ID0gMDsKKy0gICAgICBpZiAoQ1lUSE9OX1VO UEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAg ICAgICAgX19weXhfdF8xNiA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgICAg ICBpZiAobGlrZWx5KF9fcHl4X3RfMTYpKSB7CistICAgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworLSAgICAgICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF8xNik7CistICAgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Cist ICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgICAg ICAgIF9fcHl4X3RfOCA9IDE7CistICAgICAgICB9CistICAgICAgfQorLSAgICAgICNpZiBDWVRI T05fRkFTVF9QWUNBTEwKKy0gICAgICBpZiAoUHlGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7 CistICAgICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzE2LCBfX3B5eF90 XzMsIFB5X05vbmV9OworLSAgICAgICAgX19weXhfdF8xID0gX19QeXhfUHlGdW5jdGlvbl9GYXN0 Q2FsbChfX3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90XzgsIDIrX19weXhfdF84KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTYxLCBfX3B5eF9MNF9lcnJvcikK Ky0gICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNik7IF9fcHl4X3RfMTYgPSAwOworLSAg ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgICAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAgICB9IGVsc2UKKy0gICAgICAjZW5kaWYKKy0g ICAgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAorLSAgICAgIGlmIChfX1B5eF9QeUZhc3RDRnVu Y3Rpb25fQ2hlY2soX19weXhfdF8yKSkgeworLSAgICAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBb M10gPSB7X19weXhfdF8xNiwgX19weXhfdF8zLCBQeV9Ob25lfTsKKy0gICAgICAgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9f cHl4X3RfOCwgMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA1NjEsIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzE2KTsgX19weXhfdF8xNiA9IDA7CistICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICAg IH0gZWxzZQorLSAgICAgICNlbmRpZgorLSAgICAgIHsKKy0gICAgICAgIF9fcHl4X3RfMTcgPSBQ eVR1cGxlX05ldygyK19fcHl4X3RfOCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xNykpIF9fUFlY X0VSUigwLCA1NjEsIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMTcpOworLSAgICAgICAgaWYgKF9fcHl4X3RfMTYpIHsKKy0gICAgICAgICAgX19QeXhfR0lW RVJFRihfX3B5eF90XzE2KTsgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzE3LCAwLCBfX3B5eF90 XzE2KTsgX19weXhfdF8xNiA9IE5VTEw7CistICAgICAgICB9CistICAgICAgICBfX1B5eF9HSVZF UkVGKF9fcHl4X3RfMyk7CistICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMTcsIDAr X19weXhfdF84LCBfX3B5eF90XzMpOworLSAgICAgICAgX19QeXhfSU5DUkVGKFB5X05vbmUpOwor LSAgICAgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKy0gICAgICAgIFB5VHVwbGVfU0VUX0lU RU0oX19weXhfdF8xNywgMStfX3B5eF90XzgsIFB5X05vbmUpOworLSAgICAgICAgX19weXhfdF8z ID0gMDsKKy0gICAgICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8y LCBfX3B5eF90XzE3LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKKy0gICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMTcpOyBfX3B5eF90XzE3ID0gMDsKKy0g ICAgICB9CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cist ICAgICAgX19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90XzE7CistICAgICAgX19weXhfdF8xID0g MDsKKy0KKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTYyCistICog ICAgICAgICAgICAgZWxzZToKKy0gKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5y ZXBseV91c2VyZGF0YS5nZXQoZGF0YV9pZCwgTm9uZSkKKy0gKiAgICAgICAgICAgICAgICAgaWYg dXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0YXNbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBf UmVwbHlVc2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkK Ky0gKi8KKy0gICAgICBfX3B5eF90XzYgPSAoX19weXhfdl91c2VyZGF0YXMgPT0gUHlfTm9uZSk7 CistICAgICAgX19weXhfdF81ID0gKF9fcHl4X3RfNiAhPSAwKTsKKy0gICAgICBpZiAoX19weXhf dF81KSB7CisrICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCgmX19weXhfdl9y ZXN1bHQpKTsKKysgICAgICAgICAgICB9CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTYzCistICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYu cmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCistICogICAgICAgICAgICAgICAgIGlm IHVzZXJkYXRhcyBpcyBOb25lOgorLSAqICAgICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJk YXRhc1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgp CistICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6CisrICAgICAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzMQorKyAqICAgICAgICAgICAgIHYgPSBfY29udmVy dF9ub2RlX3ZhbHVlKHJlc3VsdCkKKysgKiAgICAgICAgIGZpbmFsbHk6CisrICogICAgICAgICAg ICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZyZXN1bHQpCisrICogICAgICAgICByZXR1 cm4gdgorICAqLworLSAgICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIs IF9fcHl4X25fc19SZXBseVVzZXJEYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJvcikKKy0gICAgICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworLSAgICAgICAgX19weXhfdF8xNyA9IE5VTEw7CistICAgICAgICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7 CistICAgICAgICAgIF9fcHl4X3RfMTcgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOwor LSAgICAgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfMTcpKSB7CistICAgICAgICAgICAgUHlPYmpl Y3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CistICAgICAg ICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMTcpOworLSAgICAgICAgICAgIF9fUHl4X0lOQ1JF RihmdW5jdGlvbik7CistICAgICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1 bmN0aW9uKTsKKy0gICAgICAgICAgfQorKyAgICAgICAgICAgIC8qZmluYWxseToqLyB7CisrICAg ICAgICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAgICAgICAjaWZkZWYgV0lU SF9USFJFQUQKKysgICAgICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAg ICAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAgICAgICAjZW5kaWYKKysg ICAgICAgICAgICAgICAgZ290byBfX3B5eF9MMTc7CisrICAgICAgICAgICAgICB9CisrICAgICAg ICAgICAgICBfX3B5eF9MMTc6OworKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKy0gICAgICAg IF9fcHl4X3RfMSA9IChfX3B5eF90XzE3KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzIsIF9fcHl4X3RfMTcsIF9fcHl4X3ZfZGF0YSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25l QXJnKF9fcHl4X3RfMiwgX19weXhfdl9kYXRhKTsKKy0gICAgICAgIF9fUHl4X1hERUNSRUYoX19w eXhfdF8xNyk7IF9fcHl4X3RfMTcgPSAwOworLSAgICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJvcikKKy0gICAgICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworLSAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfU2V0SXRlbUludChfX3B5eF92 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2RhdGFfaWQs IF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAs IDEpIDwgMCkpIF9fUFlYX0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgICAgX19Q eXhfSU5DUkVGKF9fcHl4X3RfMSk7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Zf dXNlcmRhdGFzLCBfX3B5eF90XzEpOworLSAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTYyCistICogICAgICAgICAgICAgZWxzZToKKy0gKiAgICAgICAgICAgICAgICAgdXNl cmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoZGF0YV9pZCwgTm9uZSkKKy0gKiAgICAg ICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0YXNbZGF0YV9pZF0g PSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgICAgICAgICB1 c2VyZGF0YXMuYWRkKCkKKy0gKi8KKyAgICAgICB9CistCistICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjU2NAorLSAqICAgICAgICAgICAgICAgICBpZiB1c2VyZGF0YXMg aXMgTm9uZToKKy0gKiAgICAgICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0YXNbZGF0YV9p ZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgICAgICAg ICB1c2VyZGF0YXMuYWRkKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2 X2NvbW1hbmRfbm9kZV9hc3luYyhzZWxmLl9jdHgsIGRhdGFfaWQsICZub2RlKQorLSAqLworLSAg ICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0 YXMsIF9fcHl4X25fc19hZGQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCA1NjQsIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwor LSAgICAgIF9fcHl4X3RfMTcgPSBOVUxMOworLSAgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgICAgICBfX3B5 eF90XzE3ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKy0gICAgICAgIGlmIChsaWtl bHkoX19weXhfdF8xNykpIHsKKy0gICAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CistICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzE3KTsKKy0gICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgICAg X19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKy0gICAgICAgIH0KKysgICAg ICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSB7CisrICAgICAgICBfX1B5eF9YR0lWRVJFRihf X3B5eF90XzEzKTsKKysgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTQpOworKyAgICAg ICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xNSk7CisrICAgICAgICBfX1B5eF9FeGNlcHRpb25S ZXNldChfX3B5eF90XzEzLCBfX3B5eF90XzE0LCBfX3B5eF90XzE1KTsKKyAgICAgICB9CistICAg ICAgX19weXhfdF8xID0gKF9fcHl4X3RfMTcpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzIsIF9fcHl4X3RfMTcpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3Rf Mik7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE3KTsgX19weXhfdF8xNyA9IDA7Cist ICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTY0LCBfX3B5eF9M NF9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEw KTsKKysgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzExKTsKKysgICAgICBfX1B5eF9YR0lW RVJFRihfX3B5eF90XzEyKTsKKysgICAgICBfX1B5eF9FcnJSZXN0b3JlKF9fcHl4X3RfMTAsIF9f cHl4X3RfMTEsIF9fcHl4X3RfMTIpOworKyAgICAgIF9fcHl4X3RfMTAgPSAwOyBfX3B5eF90XzEx ID0gMDsgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTMgPSAwOyBfX3B5eF90XzE0ID0gMDsgX19w eXhfdF8xNSA9IDA7CisrICAgICAgX19weXhfbGluZW5vID0gX19weXhfdF83OyBfX3B5eF9jbGlu ZW5vID0gX19weXhfdF84OyBfX3B5eF9maWxlbmFtZSA9IF9fcHl4X3RfOTsKKysgICAgICBnb3Rv IF9fcHl4X0wxX2Vycm9yOworKyAgICB9CisrICAgIF9fcHl4X0w5OjsKKysgIH0KKyAKKy0gICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY1CistICogICAgICAgICAgICAg ICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNl ckRhdGEoZGF0YSkKKy0gKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCistICogICAg ICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1wdl9jb21tYW5kX25vZGVfYXN5bmMoc2VsZi5f Y3R4LCBkYXRhX2lkLCAmbm9kZSkKKy0gKiAgICAgICAgIGZpbmFsbHk6CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMzCisrICogICAgICAgICAgICAgd2l0aCBub2dpbDoK KysgKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50cygmcmVzdWx0KQorKyAq ICAgICAgICAgcmV0dXJuIHYgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAq ICAgICBAX2Vycm9ycworICAqLworLSAgICAgIHsKKy0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhS RUFECistICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAgICAgICAgICBQeV9VTkJM T0NLX1RIUkVBRFMKKy0gICAgICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAg ICAgICAjZW5kaWYKKy0gICAgICAgICAgLyp0cnk6Ki8geworKyAgX19QeXhfWERFQ1JFRihfX3B5 eF9yKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3YpOworKyAgX19weXhfciA9IF9fcHl4X3Zf djsKKysgIGdvdG8gX19weXhfTDA7CisgCistICAgICAgICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjU2NgorLSAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkK Ky0gKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICAgICAgICAg IGVyciA9IG1wdl9jb21tYW5kX25vZGVfYXN5bmMoc2VsZi5fY3R4LCBkYXRhX2lkLCAmbm9kZSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZmluYWxseToKKy0gKiAg ICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlKQorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjYxMgorKyAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0 CisrICogCisrICogICAgIGRlZiBnZXRfcHJvcGVydHkoc2VsZiwgcHJvcCk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5 IiIiCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICovCistICAgICAgICAgICAgX19w eXhfdl9lcnIgPSBtcHZfY29tbWFuZF9ub2RlX2FzeW5jKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19w eXhfdl9kYXRhX2lkLCAoJl9fcHl4X3Zfbm9kZSkpOworLSAgICAgICAgICB9CisgCistICAgICAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjUKKy0gKiAgICAgICAgICAg ICAgICAgICAgIF9yZXBseV91c2VyZGF0YXNbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlV c2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKKy0gKiAg ICAgICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X2NvbW1hbmRfbm9kZV9hc3luYyhzZWxm Ll9jdHgsIGRhdGFfaWQsICZub2RlKQorLSAqICAgICAgICAgZmluYWxseToKKy0gKi8KKy0gICAg ICAgICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgICAgICAvKm5vcm1hbCBleGl0OioveworLSAg ICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgICAgICBfX1B5eF9GYXN0 R0lMX0ZvcmdldCgpOworLSAgICAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworLSAgICAgICAg ICAgICAgI2VuZGlmCistICAgICAgICAgICAgICBnb3RvIF9fcHl4X0wyNDsKKy0gICAgICAgICAg ICB9CistICAgICAgICAgICAgX19weXhfTDI0OjsKKy0gICAgICAgICAgfQorLSAgICAgIH0KKy0g ICAgfQorLSAgICBfX3B5eF9MNjo7CistICB9CisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K KysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKysgIF9f UHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0 dGVyLmxpYnMubXB2LkNvbnRleHQuZ2V0X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKysgIF9fcHl4X0ww OjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl92KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dl9wcm9wKTsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY4CistICogICAgICAgICAgICAgICAgICAgICBlcnIg PSBtcHZfY29tbWFuZF9ub2RlX2FzeW5jKHNlbGYuX2N0eCwgZGF0YV9pZCwgJm5vZGUpCistICog ICAgICAgICBmaW5hbGx5OgorLSAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVl KG5vZGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIGVyciA8 IDA6CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorLSAqLworLSAgLypmaW5h bGx5OiovIHsKKy0gICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICBfX3B5eF90XzEgPSAoKHN0 cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19w eXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwg X19weXhfdl9ub2RlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTY4 LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAgICBnb3RvIF9f cHl4X0w1OworLSAgICB9CistICAgIF9fcHl4X0w0X2Vycm9yOjsKKy0gICAgLypleGNlcHRpb24g ZXhpdDoqL3sKKy0gICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKKy0gICAgICBfX1B5 eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorLSAgICAgIF9fcHl4X3RfMTUgPSAwOyBfX3B5eF90XzE0 ID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3RfMTIgPSAwOyBfX3B5eF90XzExID0gMDsgX19w eXhfdF8xMCA9IDA7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNik7IF9fcHl4X3RfMTYgPSAwOwor LSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNyk7IF9fcHl4X3RfMTcgPSAwOworLSAgICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICAgICAgaWYgKFBZX01BSk9SX1ZF UlNJT04gPj0gMykgX19QeXhfRXhjZXB0aW9uU3dhcCgmX19weXhfdF8xMiwgJl9fcHl4X3RfMTEs ICZfX3B5eF90XzEwKTsKKy0gICAgICBpZiAoKFBZX01BSk9SX1ZFUlNJT04gPCAzKSB8fCB1bmxp a2VseShfX1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfMTUsICZfX3B5eF90XzE0LCAmX19weXhf dF8xMykgPCAwKSkgX19QeXhfRXJyRmV0Y2goJl9fcHl4X3RfMTUsICZfX3B5eF90XzE0LCAmX19w eXhfdF8xMyk7CistICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE1KTsKKy0gICAgICBfX1B5 eF9YR09UUkVGKF9fcHl4X3RfMTQpOworLSAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMyk7 CistICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzEyKTsKKy0gICAgICBfX1B5eF9YR09UUkVG KF9fcHl4X3RfMTEpOworLSAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMCk7CistICAgICAg X19weXhfdF84ID0gX19weXhfbGluZW5vOyBfX3B5eF90XzcgPSBfX3B5eF9jbGluZW5vOyBfX3B5 eF90XzE4ID0gX19weXhfZmlsZW5hbWU7CistICAgICAgeworLSAgICAgICAgX19weXhfdF8xID0g KChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAq KV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3Nl bGYsIF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDU2OCwgX19weXhfTDI2X2Vycm9yKQorLSAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CistICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAg ICB9CistICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgeworLSAgICAgICAgX19QeXhf WEdJVkVSRUYoX19weXhfdF8xMik7CistICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEx KTsKKy0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTApOworLSAgICAgICAgX19QeXhf RXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMiwgX19weXhfdF8xMSwgX19weXhfdF8xMCk7CistICAg ICAgfQorLSAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTUpOworLSAgICAgIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3RfMTQpOworLSAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTMpOwor LSAgICAgIF9fUHl4X0VyclJlc3RvcmUoX19weXhfdF8xNSwgX19weXhfdF8xNCwgX19weXhfdF8x Myk7CistICAgICAgX19weXhfdF8xNSA9IDA7IF9fcHl4X3RfMTQgPSAwOyBfX3B5eF90XzEzID0g MDsgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90XzEwID0gMDsKKy0gICAg ICBfX3B5eF9saW5lbm8gPSBfX3B5eF90Xzg7IF9fcHl4X2NsaW5lbm8gPSBfX3B5eF90Xzc7IF9f cHl4X2ZpbGVuYW1lID0gX19weXhfdF8xODsKKy0gICAgICBnb3RvIF9fcHl4X0wxX2Vycm9yOwor LSAgICAgIF9fcHl4X0wyNl9lcnJvcjo7CistICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0g MykgeworLSAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMik7CistICAgICAgICBfX1B5 eF9YR0lWRVJFRihfX3B5eF90XzExKTsKKy0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Rf MTApOworLSAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMiwgX19weXhfdF8x MSwgX19weXhfdF8xMCk7CistICAgICAgfQorLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8x NSk7IF9fcHl4X3RfMTUgPSAwOworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xNCk7IF9f cHl4X3RfMTQgPSAwOworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xMyk7IF9fcHl4X3Rf MTMgPSAwOworLSAgICAgIF9fcHl4X3RfMTIgPSAwOyBfX3B5eF90XzExID0gMDsgX19weXhfdF8x MCA9IDA7CistICAgICAgZ290byBfX3B5eF9MMV9lcnJvcjsKKy0gICAgfQorLSAgICBfX3B5eF9M NTo7CistICB9CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY5Cist ICogICAgICAgICBmaW5hbGx5OgorLSAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3Zh bHVlKG5vZGUpCistICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorLSAqICAgICAgICAg cmV0dXJuIHJlc3VsdAorLSAqLworLSAgX19weXhfdF81ID0gKChfX3B5eF92X2VyciA8IDApICE9 IDApOworLSAgaWYgKHVubGlrZWx5KF9fcHl4X3RfNSkpIHsKKy0KKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjU3MAorLSAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0 aXZlX3ZhbHVlKG5vZGUpCistICogICAgICAgICBpZiBlcnIgPCAwOgorLSAqICAgICAgICAgICAg IHJhaXNlIE1QVkVycm9yKGVycikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgcmV0dXJuIHJlc3VsdAorLSAqIAorLSAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9i YWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgNTcwLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4X3RfMTcgPSBfX1B5eF9QeUludF9Gcm9tX2ludChf X3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xNykpIF9fUFlYX0VSUigwLCA1NzAs IF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xNyk7CistICAgIF9f cHl4X3RfMyA9IE5VTEw7CistICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtl bHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAgICBfX3B5eF90XzMgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkg eworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9f cHl4X3RfMik7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKKy0gICAgICAgIF9f UHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Rf MiwgZnVuY3Rpb24pOworLSAgICAgIH0KKy0gICAgfQorLSAgICBfX3B5eF90XzEgPSAoX19weXhf dF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19w eXhfdF8xNykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8x Nyk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMTcpOyBfX3B5eF90XzE3ID0gMDsKKy0gICAgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTcwLCBfX3B5eF9MMV9lcnJvcikKKy0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworLSAgICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOworLSAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAgX19QWVhfRVJS KDAsIDU3MCwgX19weXhfTDFfZXJyb3IpCistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo1NjkKKy0gKiAgICAgICAgIGZpbmFsbHk6CistICogICAgICAgICAgICAgc2Vs Zi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZSkKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihl cnIpCistICogICAgICAgICByZXR1cm4gcmVzdWx0CistICovCistICB9CistCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcxCistICogICAgICAgICBpZiBlcnIgPCAwOgor LSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKy0gKiAgICAgICAgIHJldHVybiBy ZXN1bHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICBAX2Vycm9y cworLSAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5 eF92X3Jlc3VsdCk7CistICBfX3B5eF9yID0gX19weXhfdl9yZXN1bHQ7CistICBnb3RvIF9fcHl4 X0wwOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUzMAorLSAqICAg ICAgICAgICAgIGZyZWUobm9kZS51LnN0cmluZykKKy0gKiAKKy0gKiAgICAgZGVmIGNvbW1hbmQo c2VsZiwgKmNtZGxpc3QsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiU2VuZCBhIGNvbW1hbmQgdG8gbXB2 LgorLSAqIAorLSAqLworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9M MV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMTYpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE3KTsKKy0gIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuY29tbWFuZCIsIF9fcHl4 X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5V TEw7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfcmVzdWx0KTsKKy0g IF9fUHl4X1hERUNSRUYoX19weXhfdl91c2VyZGF0YXMpOworLSAgX19QeXhfWEdJVkVSRUYoX19w eXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5 eF9yOworLX0KKy0KKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTc0CistICog CistICogICAgIEBfZXJyb3JzCistICogICAgIGRlZiBnZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwg cHJvcCwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgIiIiR2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBhc3luY2hyb25vdXNseS4KKy0gKiAK KysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjM2CisrICogCisrICogICAgIEBf ZXJyb3JzCisrICogICAgIGRlZiBzZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSwg YXN5bmNocm9ub3VzPUZhbHNlLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICAiIiJXcmFwczogbXB2X3NldF9wcm9wZXJ0eSBhbmQgbXB2X3NldF9w cm9wZXJ0eV9hc3luYyIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqLworIAor IC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTVnZXRfcHJvcGVydHlfYXN5bmMoUHlPYmplY3QgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsg Lypwcm90byovCistc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8xNGdldF9wcm9wZXJ0eV9hc3luY1tdID0gIkdldHMgdGhlIHZhbHVlIG9mIGEgcHJv cGVydHkgYXN5bmNocm9ub3VzbHkuXG5cbiAgICAgICAgQXJndW1lbnRzOlxuICAgICAgICBwcm9w OiBQcm9wZXJ0eSB0byBnZXQgdGhlIHZhbHVlIG9mLlxuXG4gICAgICAgIEtleXdvcmQgYXJndW1l bnRzOlxuICAgICAgICBkYXRhOiBWYWx1ZSB0byBiZSBwYXNzZWQgaW50byB0aGUgcmVwbHlfdXNl cmRhdGEgb2YgdGhlIHJlc3BvbnNlIGV2ZW50LlxuICAgICAgICBXcmFwczogbXB2X2dldF9wcm9w ZXJ0eV9hc3luYyI7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMTVnZXRfcHJvcGVydHlfYXN5bmMoUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7Cisrc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTlzZXRf cHJvcGVydHkoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5 T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisrc3RhdGljIGNoYXIgX19weXhfZG9jXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eVtdID0gIldyYXBzOiBt cHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIjsKKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOXNldF9wcm9w ZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmpl Y3QgKl9fcHl4X2t3ZHMpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF92X3Byb3AgPSAwOworKyAgUHlP YmplY3QgKl9fcHl4X3ZfdmFsdWUgPSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfYXN5bmNocm9u b3VzID0gMDsKKyAgIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEgPSAwOworICAgaW50IF9fcHl4X2xp bmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQg X19weXhfY2xpbmVubyA9IDA7CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImdldF9w cm9wZXJ0eV9hc3luYyAod3JhcHBlcikiLCAwKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJzZXRfcHJvcGVydHkgKHdyYXBwZXIpIiwgMCk7CisgICB7CistICAgIHN0YXRpYyBQeU9i amVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3Byb3AsJl9fcHl4X25fc19k YXRhLDB9OworLSAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07CistICAgIHZhbHVlc1sx XSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKKysgICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhf cHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHJvcCwmX19weXhfbl9zX3ZhbHVlLCZfX3B5eF9u X3NfYXN5bmNocm9ub3VzLCZfX3B5eF9uX3NfZGF0YSwwfTsKKysgICAgUHlPYmplY3QqIHZhbHVl c1s0XSA9IHswLDAsMCwwfTsKKysgICAgdmFsdWVzWzFdID0gKChQeU9iamVjdCAqKVB5X1RydWUp OworKyAgICB2YWx1ZXNbMl0gPSAoKFB5T2JqZWN0ICopUHlfRmFsc2UpOworKyAgICB2YWx1ZXNb M10gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7CisgICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2Rz KSkgeworICAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKyAgICAgICBjb25zdCBQeV9zc2l6ZV90 IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKyAgICAgICBzd2l0Y2gg KHBvc19hcmdzKSB7CisrICAgICAgICBjYXNlICA0OiB2YWx1ZXNbM10gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDMpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAg ICAgY2FzZSAgMzogdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsK KysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKyAgICAgICAgIGNhc2UgIDI6IHZhbHVlc1sx XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CisgICAgICAgICBDWVRIT05fRkFM TFRIUk9VR0g7CisgICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVN KF9fcHl4X2FyZ3MsIDApOworQEAgLTExODc1LDE1ICsxMjI1OCwzMSBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNWdldF9wcm9wZXJ0 eV9hc3luYyhQeQorICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworICAgICAgICAgY2FzZSAg MToKKyAgICAgICAgIGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCogdmFs dWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZGF0YSk7 CisrICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9f cHl4X2t3ZHMsIF9fcHl4X25fc192YWx1ZSk7CisgICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1 ZXNbMV0gPSB2YWx1ZTsga3dfYXJncy0tOyB9CisgICAgICAgICB9CisrICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAyOgorKyAgICAgICAgaWYgKGt3X2FyZ3MgPiAw KSB7CisrICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3Ry KF9fcHl4X2t3ZHMsIF9fcHl4X25fc19hc3luY2hyb25vdXMpOworKyAgICAgICAgICBpZiAodmFs dWUpIHsgdmFsdWVzWzJdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorKyAgICAgICAgfQorKyAgICAg ICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMzoKKysgICAgICAgIGlmIChr d19hcmdzID4gMCkgeworKyAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3Rf R2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZGF0YSk7CisrICAgICAgICAgIGlmICh2 YWx1ZSkgeyB2YWx1ZXNbM10gPSB2YWx1ZTsga3dfYXJncy0tOyB9CisrICAgICAgICB9CisgICAg ICAgfQorICAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1 bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlh cmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgImdldF9wcm9wZXJ0eV9hc3luYyIpIDwgMCkp IF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYgKHVubGlrZWx5 KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVz LCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0X3Byb3BlcnR5IikgPCAwKSkgX19QWVhfRVJSKDAs IDYzNiwgX19weXhfTDNfZXJyb3IpCisgICAgICAgfQorICAgICB9IGVsc2UgeworICAgICAgIHN3 aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgeworKyAgICAgICAgY2FzZSAgNDog dmFsdWVzWzNdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAzKTsKKysgICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVf R0VUX0lURU0oX19weXhfYXJncywgMik7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Cisg ICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3Ms IDEpOworICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworICAgICAgICAgY2FzZSAgMTogdmFs dWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKK0BAIC0xMTg5Miw3MCAr MTIyOTEsODMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMTVnZXRfcHJvcGVydHlfYXN5bmMoUHkKKyAgICAgICB9CisgICAgIH0KKyAg ICAgX19weXhfdl9wcm9wID0gdmFsdWVzWzBdOworLSAgICBfX3B5eF92X2RhdGEgPSB2YWx1ZXNb MV07CisrICAgIF9fcHl4X3ZfdmFsdWUgPSB2YWx1ZXNbMV07CisrICAgIF9fcHl4X3ZfYXN5bmNo cm9ub3VzID0gdmFsdWVzWzJdOworKyAgICBfX3B5eF92X2RhdGEgPSB2YWx1ZXNbM107CisgICB9 CisgICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworICAgX19weXhfTDVf YXJndHVwbGVfZXJyb3I6OworLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoImdldF9wcm9w ZXJ0eV9hc3luYyIsIDAsIDEsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZ WF9FUlIoMCwgNTc0LCBfX3B5eF9MM19lcnJvcikKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZh bGlkKCJzZXRfcHJvcGVydHkiLCAwLCAxLCA0LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3Mp KTsgX19QWVhfRVJSKDAsIDYzNiwgX19weXhfTDNfZXJyb3IpCisgICBfX3B5eF9MM19lcnJvcjo7 CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmdldF9w cm9wZXJ0eV9hc3luYyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5z ZXRfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1l KTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIE5VTEw7Cisg ICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7CistICBfX3B5eF9yID0gX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE0Z2V0X3Byb3BlcnR5X2FzeW5jKCgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zf c2VsZiksIF9fcHl4X3ZfcHJvcCwgX19weXhfdl9kYXRhKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwg X19weXhfdl9wcm9wLCBfX3B5eF92X3ZhbHVlLCBfX3B5eF92X2FzeW5jaHJvbm91cywgX19weXhf dl9kYXRhKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTRnZXRfcHJv cGVydHlfYXN5bmMoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQeU9iamVjdCAqX19weXhf dl9kYXRhKSB7CistICB1aW50NjRfdCBfX3B5eF92X2lkX2RhdGE7CistICBQeU9iamVjdCAqX19w eXhfdl91c2VyZGF0YXMgPSBOVUxMOworLSAgY2hhciBjb25zdCAqX19weXhfdl9wcm9wX2M7Cisr c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MThzZXRfcHJvcGVydHkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQeU9iamVjdCAqX19w eXhfdl92YWx1ZSwgUHlPYmplY3QgKl9fcHl4X3ZfYXN5bmNocm9ub3VzLCBQeU9iamVjdCAqX19w eXhfdl9kYXRhKSB7CisrICBlbnVtIG1wdl9mb3JtYXQgX19weXhfdl9mb3JtYXQ7CisrICBzdHJ1 Y3QgbXB2X25vZGUgX19weXhfdl92OworICAgaW50IF9fcHl4X3ZfZXJyOworKyAgdWludDY0X3Qg X19weXhfdl9kYXRhX2lkOworKyAgY2hhciBjb25zdCAqX19weXhfdl9wcm9wX2M7CisrICBQeU9i amVjdCAqX19weXhfdl91c2VyZGF0YXMgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBO VUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90 XzEgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisgICBQeU9iamVjdCAq X19weXhfdF8zID0gTlVMTDsKKy0gIFB5X2hhc2hfdCBfX3B5eF90XzQ7CistICBQeU9iamVjdCAq X19weXhfdF81ID0gTlVMTDsKKysgIGVudW0gbXB2X2Zvcm1hdCBfX3B5eF90XzQ7CisrICBjaGFy IGNvbnN0ICpfX3B5eF90XzU7CisgICBpbnQgX19weXhfdF82OworLSAgUHlPYmplY3QgKl9fcHl4 X3RfNyA9IE5VTEw7CistICBpbnQgX19weXhfdF84OworLSAgaW50IF9fcHl4X3RfOTsKKy0gIGNo YXIgY29uc3QgKl9fcHl4X3RfMTA7CisrICBpbnQgX19weXhfdF83OworKyAgUHlfaGFzaF90IF9f cHl4X3RfODsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzkgPSBOVUxMOworKyAgaW50IF9fcHl4X3Rf MTA7CisrICBQeU9iamVjdCAqX19weXhfdF8xMSA9IE5VTEw7CisrICBpbnQgX19weXhfdF8xMjsK KysgIGNoYXIgY29uc3QgKl9fcHl4X3RfMTM7CisrICBQeU9iamVjdCAqX19weXhfdF8xNCA9IE5V TEw7CisrICBQeU9iamVjdCAqX19weXhfdF8xNSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhf dF8xNiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8xNyA9IE5VTEw7CisrICBQeU9iamVj dCAqX19weXhfdF8xOCA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8xOSA9IE5VTEw7Cisg ICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJnZXRfcHJvcGVydHlfYXN5bmMiLCAwKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJzZXRfcHJvcGVydHkiLCAwKTsKKyAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3Byb3Ap OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4MworLSAqICAgICAg ICAgZGF0YTogVmFsdWUgdG8gYmUgcGFzc2VkIGludG8gdGhlIHJlcGx5X3VzZXJkYXRhIG9mIHRo ZSByZXNwb25zZSBldmVudC4KKy0gKiAgICAgICAgIFdyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5X2Fz eW5jIiIiCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjM4CisrICogICAg IGRlZiBzZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSwgYXN5bmNocm9ub3VzPUZh bHNlLCBkYXRhPU5vbmUpOgorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfcHJvcGVydHkg YW5kIG1wdl9zZXRfcHJvcGVydHlfYXN5bmMiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9j dHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgcHJvcCA9IF9zdHJl bmMocHJvcCkKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5o YXNoKGRhdGEpCisrICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0ID0gc2VsZi5fZm9y bWF0X2Zvcih2YWx1ZSkKKyAgKi8KKyAgICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9O UworICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CisgICAgIGlmICh1bmxpa2Vs eSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKyAgICAgICBQeUVycl9TZXROb25lKFB5 RXhjX0Fzc2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIoMCwgNTgzLCBfX3B5eF9MMV9l cnJvcikKKysgICAgICBfX1BZWF9FUlIoMCwgNjM4LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgfQor ICAgfQorICAgI2VuZGlmCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTg0CistICogICAgICAgICBXcmFwczogbXB2X2dldF9wcm9wZXJ0eV9hc3luYyIiIgorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzOQorKyAqICAgICAgICAgIiIiV3JhcHM6 IG1wdl9zZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRfcHJvcGVydHlfYXN5bmMiIiIKKyAgKiAgICAg ICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRf ZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCistICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxm LnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorKyAqICAgICAgICAgY2RlZiBtcHZf Zm9ybWF0IGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCisrICogICAgICAgICBjZGVm IG1wdl9ub2RlIHYgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQorICAq LworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJl bmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1ODQsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25f c19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2MzksIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICBfX3B5eF90XzMg PSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhv ZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAgLTExOTY5LDUyMyArMTIzODEsNDgwIEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE0Z2V0 X3Byb3BlcnR5X2FzeW5jKHN0CisgICB9CisgICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9f UHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9wcm9w KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X3Byb3ApOwor ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYzOSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3Byb3AsIF9fcHl4 X3RfMSk7CisgICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjU4NQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0MAor ICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMo cHJvcCkKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNo KGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHVzZXJkYXRh cyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCistICogICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgTm9uZToKKy0gKi8KKy0gIF9fcHl4X3RfNCA9IFB5T2JqZWN0X0hhc2go X19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA9PSAoKFB5X2hhc2hfdCktMSkp KSBfX1BZWF9FUlIoMCwgNTg1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3ZfaWRfZGF0YSA9 ICgodWludDY0X3QpX19weXhfdF80KTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1ODYKKy0gKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCistICogICAgICAg ICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorLSAqICAgICAg ICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5v bmU6CistICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJk YXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisrICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQg Zm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFs dWUodmFsdWUsIGZvcm1hdCkKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAqLworLSAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPnJlcGx5X3Vz ZXJkYXRhLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgNTg2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0 X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19mb3JtYXRf Zm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNjQwLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gX19Q eXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92X2lkX2RhdGEpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7CistICBfX3B5eF90XzUgPSBOVUxMOworLSAgX19weXhfdF82ID0gMDsK KysgIF9fcHl4X3RfMyA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICBfX3B5eF90XzUgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsK KysgICAgX19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgaWYg KGxpa2VseShfX3B5eF90XzMpKSB7CisgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Rf NSk7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7CisgICAgICAgX19QeXhfSU5DUkVG KGZ1bmN0aW9uKTsKKyAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24p OworLSAgICAgIF9fcHl4X3RfNiA9IDE7CistICAgIH0KKy0gIH0KKy0gICNpZiBDWVRIT05fRkFT VF9QWUNBTEwKKy0gIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9fcHl4X3RfMikpIHsKKy0gICAgUHlP YmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF81LCBfX3B5eF90XzMsIFB5X05vbmV9Owor LSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19w eXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIH0gZWxz ZQorLSAgI2VuZGlmCistICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAorLSAgaWYgKF9fUHl4X1B5 RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7CistICAgIFB5T2JqZWN0ICpfX3B5eF90 ZW1wWzNdID0ge19fcHl4X3RfNSwgX19weXhfdF8zLCBQeV9Ob25lfTsKKy0gICAgX19weXhfdF8x ID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8yLCBfX3B5eF90ZW1wKzEtX19w eXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDU4NiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsg X19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgfSBlbHNlCistICAjZW5kaWYK Ky0gIHsKKy0gICAgX19weXhfdF83ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzYpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQorLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKy0gICAgaWYgKF9fcHl4X3RfNSkgeworLSAgICAg IF9fUHl4X0dJVkVSRUYoX19weXhfdF81KTsgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDAs IF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IE5VTEw7CisgICAgIH0KKy0gICAgX19QeXhfR0lWRVJF RihfX3B5eF90XzMpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMCtfX3B5eF90 XzYsIF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gICAgX19QeXhf R0lWRVJFRihQeV9Ob25lKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDErX19w eXhfdF82LCBQeV9Ob25lKTsKKy0gICAgX19weXhfdF8zID0gMDsKKy0gICAgX19weXhfdF8xID0g X19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3RfNywgTlVMTCk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4NiwgX19weXhfTDFfZXJyb3IpCistICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsg X19weXhfdF83ID0gMDsKKyAgIH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhf UHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3ZhbHVlKSA6 IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X3ZhbHVlKTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY0MCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworLSAgX19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90XzE7CistICBfX3B5eF90XzEg PSAwOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4NworLSAqICAg ICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKy0gKiAg ICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUp CistICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1 c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgdXNlcmRhdGFzLmFk ZCgpCistICovCistICBfX3B5eF90XzggPSAoX19weXhfdl91c2VyZGF0YXMgPT0gUHlfTm9uZSk7 CistICBfX3B5eF90XzkgPSAoX19weXhfdF84ICE9IDApOworLSAgaWYgKF9fcHl4X3RfOSkgewor LQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTg4CistICogICAgICAg ICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorLSAq ICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6CistICogICAgICAgICAgICAgc2VsZi5yZXBs eV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQor LSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wCistICovCistICAgIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0 YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU4OCwgX19weXhfTDFf ZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX3B5eF90XzcgPSBO VUxMOworLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9k X0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgICAgX19weXhfdF83ID0gUHlNZXRob2RfR0VUX1NF TEYoX19weXhfdF8yKTsKKy0gICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNykpIHsKKy0gICAgICAg IFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOwor LSAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNyk7CistICAgICAgICBfX1B5eF9JTkNSRUYo ZnVuY3Rpb24pOworLSAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9u KTsKKy0gICAgICB9CistICAgIH0KKy0gICAgX19weXhfdF8xID0gKF9fcHl4X3RfNykgPyBfX1B5 eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzcsIF9fcHl4X3ZfZGF0YSkg OiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9kYXRhKTsKKy0g ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQorLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CistICAgIGlmICh1bmxpa2VseShfX1B5eF9TZXRJdGVtSW50KF9fcHl4 X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X3ZfaWRfZGF0YSwgX19weXhfdF8xLCB1aW50 NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhf RVJSKDAsIDU4OCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEp OworLSAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF90XzEpOwor LSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0KKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4NworLSAqICAgICAgICAgY2RlZiB1aW50 NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKy0gKiAgICAgICAgIHVzZXJkYXRh cyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCistICogICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVw bHlVc2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCistICovCistICB9 CisrICBfX3B5eF90XzQgPSAoKGVudW0gbXB2X2Zvcm1hdClfX1B5eF9QeUludF9Bc19lbnVtX19t cHZfZm9ybWF0KF9fcHl4X3RfMSkpOyBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIF9f UFlYX0VSUigwLCA2NDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX3B5eF92X2Zvcm1hdCA9IF9fcHl4X3RfNDsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODkKKy0gKiAgICAgICAgIGlmIHVz ZXJkYXRhcyBpcyBOb25lOgorLSAqICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRf ZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgdXNl cmRhdGFzLmFkZCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNk ZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDEKKysgKiAgICAgICAgIHByb3Ag PSBfc3RyZW5jKHByb3ApCisrICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0ID0gc2Vs Zi5fZm9ybWF0X2Zvcih2YWx1ZSkKKysgKiAgICAgICAgIGNkZWYgbXB2X25vZGUgdiA9IHNlbGYu X3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqICAgICAgICAgY2RlZiB1aW50NjRf dCBkYXRhX2lkCisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3NfYWRkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgNTg5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOworLSAgX19weXhfdF83ID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4 X3RfNyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgIGlmIChsaWtlbHkoX19w eXhfdF83KSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzcpOworLSAgICAg IF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90 XzIsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3RfNykg PyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF83KSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzIpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzcpOyBfX3B5eF90XzcgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgNTg5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Zvcm1hdChfX3B5eF92X2Zvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDY0MSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor KyAgX19weXhfdl92ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9wcmVwX25hdGl2ZV92 YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3ZfdmFsdWUsIF9fcHl4X3RfMSk7CisgICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo1OTAKKy0gKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRh W2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKy0gKiAgICAgICAg IHVzZXJkYXRhcy5hZGQoKQorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBw cm9wICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHdpdGggbm9naWw6 CistICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9wZXJ0eV9hc3luYygKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDUKKysgKiAgICAgICAgIGNkZWYgdWludDY0 X3QgZGF0YV9pZAorKyAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MKKysgKiAgICAg ICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHBy b3BfYyA9IHByb3AKKysgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgorICAqLwor LSAgX19weXhfdF8xMCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfcHJvcCk7IGlm ICh1bmxpa2VseSgoIV9fcHl4X3RfMTApICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIo MCwgNTkwLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3ZfcHJvcF9jID0gX19weXhfdF8xMDsK KysgIC8qdHJ5OiovIHsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 OTEKKy0gKiAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorLSAqICAgICAgICAgY2RlZiBjb25zdCBj aGFyKiBwcm9wX2MgPSBwcm9wCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9wZXJ0eV9h c3luYygKKy0gKiAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjQ2CisrICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHBy b3BfYworKyAqICAgICAgICAgdHJ5OgorKyAqICAgICAgICAgICAgIHByb3BfYyA9IHByb3AgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hy b25vdXM6CisrICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6CisgICovCistICB7CistICAg ICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAg ICAgUHlfVU5CTE9DS19USFJFQURTCistICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwor LSAgICAgICNlbmRpZgorLSAgICAgIC8qdHJ5OiovIHsKKysgICAgX19weXhfdF81ID0gX19QeXhf UHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF81 KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDY0NiwgX19weXhfTDRfZXJyb3Ip CisrICAgIF9fcHl4X3ZfcHJvcF9jID0gX19weXhfdF81OworIAorLSAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MgorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFy KiBwcm9wX2MgPSBwcm9wCistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAg IGVyciA9IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorLSAqICAgICAgICAgICAgICAgICBp ZF9kYXRhLAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjQ3CisrICog ICAgICAgICB0cnk6CisrICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAorKyAqICAgICAgICAg ICAgIGlmIG5vdCBhc3luY2hyb25vdXM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICAgICAgICAgIGVy ciA9IG1wdl9zZXRfcHJvcGVydHkoCisgICovCistICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9n ZXRfcHJvcGVydHlfYXN5bmMoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2lkX2RhdGEsIF9f cHl4X3ZfcHJvcF9jLCBNUFZfRk9STUFUX05PREUpOworLSAgICAgIH0KKysgICAgX19weXhfdF82 ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfYXN5bmNocm9ub3VzKTsgaWYgKHVubGlr ZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgNjQ3LCBfX3B5eF9MNF9lcnJvcikKKysg ICAgX19weXhfdF83ID0gKCghX19weXhfdF82KSAhPSAwKTsKKysgICAgaWYgKF9fcHl4X3RfNykg eworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OTEKKy0gKiAg ICAgICAgIHVzZXJkYXRhcy5hZGQoKQorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9w X2MgPSBwcm9wCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9wZXJ0eV9hc3luYygKKy0g KiAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2NDgKKysgKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCisrICogICAg ICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czoKKysgKiAgICAgICAgICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICAg ICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0eSgKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICBz ZWxmLl9jdHgsCisgICovCistICAgICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFs IGV4aXQ6Ki97CisrICAgICAgeworICAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAg ICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFE UworKyAgICAgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICAgICAgUHlfVU5CTE9D S19USFJFQURTCisrICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKyAgICAgICAg ICAgI2VuZGlmCistICAgICAgICAgIGdvdG8gX19weXhfTDY7CistICAgICAgICB9CistICAgICAg ICBfX3B5eF9MNjo7CistICAgICAgfQorLSAgfQorKyAgICAgICAgICAvKnRyeToqLyB7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTk4CistICogICAgICAgICAgICAg ICAgIE1QVl9GT1JNQVRfTk9ERSwKKy0gKiAgICAgICAgICAgICApCistICogICAgICAgICByZXR1 cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgZGVmIHRy eV9nZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZhdWx0PU5vbmUp OgorKyAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDkKKysg KiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOgorKyAqICAgICAgICAgICAgICAgICB3 aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0 eSggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICAgICAg ICAgIHNlbGYuX2N0eCwKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX2MsCisgICov CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRf RnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA1OTgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Cist ICBfX3B5eF9yID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKy0gIGdvdG8gX19weXhf TDA7CisrICAgICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfc2V0X3Byb3BlcnR5KF9fcHl4X3Zf c2VsZi0+X2N0eCwgX19weXhfdl9wcm9wX2MsIE1QVl9GT1JNQVRfTk9ERSwgKCZfX3B5eF92X3Yp KTsKKysgICAgICAgICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjU3NAorLSAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgZ2V0X3Byb3BlcnR5X2Fz eW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgICIiIkdldHMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgYXN5bmNocm9ub3Vz bHkuCistICogCisrICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 NDgKKysgKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCisrICogICAgICAgICAgICAgaWYgbm90 IGFzeW5jaHJvbm91czoKKysgKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3Nl dF9wcm9wZXJ0eSgKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCisgICov CisrICAgICAgICAgIC8qZmluYWxseToqLyB7CisrICAgICAgICAgICAgLypub3JtYWwgZXhpdDoq L3sKKysgICAgICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICAgICAgX19Q eXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKysg ICAgICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICAgICAgZ290byBfX3B5eF9MOTsKKysgICAg ICAgICAgICB9CisrICAgICAgICAgICAgX19weXhfTDk6OworKyAgICAgICAgICB9CisrICAgICAg fQorIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf NSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmdldF9wcm9wZXJ0eV9hc3luYyIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7 CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfdXNlcmRhdGFzKTsKKy0g IF9fUHl4X1hERUNSRUYoX19weXhfdl9wcm9wKTsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Ip OworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsK Ky19CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1NQorKyAqICAg ICAgICAgICAgICAgICAgICAgICAgICZ2CisrICogICAgICAgICAgICAgICAgICAgICApCisrICog ICAgICAgICAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgICAgIGRhdGFfaWQgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorKyAqICAgICAg ICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUp CisrICovCisrICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgICBfX3B5eF90XzEg PSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDY1NSwgX19weXhfTDRfZXJyb3IpCisrICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisrICAgICAgX19weXhfciA9IF9fcHl4X3RfMTsKKysgICAgICBfX3B5 eF90XzEgPSAwOworKyAgICAgIGdvdG8gX19weXhfTDNfcmV0dXJuOworIAorLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDAKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKy0gKiAK Ky0gKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25l LCBkZWZhdWx0PU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0NworICAqICAgICAgICAgdHJ5OgorLSAq ICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBkYXRhPWRh dGEpCisrICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAorKyAqICAgICAgICAgICAgIGlmIG5v dCBhc3luY2hyb25vdXM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1wdl9z ZXRfcHJvcGVydHkoCisgICovCisrICAgIH0KKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE3 dHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xN3RyeV9nZXRf cHJvcGVydHlfYXN5bmMoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2Fy Z3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CistICBQeU9iamVjdCAqX19weXhfdl9wcm9wID0g MDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3Zf ZGVmYXVsdCA9IDA7CistICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0IGNoYXIgKl9f cHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyAod3JhcHBlciki LCAwKTsKKy0gIHsKKy0gICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0g eyZfX3B5eF9uX3NfcHJvcCwmX19weXhfbl9zX2RhdGEsJl9fcHl4X25fc19kZWZhdWx0LDB9Owor LSAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCwwfTsKKy0gICAgdmFsdWVzWzFdID0gKChQ eU9iamVjdCAqKVB5X05vbmUpOworLSAgICB2YWx1ZXNbMl0gPSAoKFB5T2JqZWN0ICopUHlfTm9u ZSk7CistICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworLSAgICAgIFB5X3NzaXplX3Qg a3dfYXJnczsKKy0gICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBj YXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOworLSAg ICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNl ICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJy b3I7CistICAgICAgfQorLSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsK Ky0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNlICAwOgorLSAgICAgICAg aWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dk cywgX19weXhfbl9zX3Byb3ApKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSBnb3Rv IF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwor LSAgICAgICAgY2FzZSAgMToKKy0gICAgICAgIGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAg ICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBf X3B5eF9uX3NfZGF0YSk7CistICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbMV0gPSB2YWx1 ZTsga3dfYXJncy0tOyB9CistICAgICAgICB9CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 CistICAgICAgICBjYXNlICAyOgorLSAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7CistICAgICAg ICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMs IF9fcHl4X25fc19kZWZhdWx0KTsKKy0gICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1syXSA9 IHZhbHVlOyBrd19hcmdzLS07IH0KKy0gICAgICAgIH0KKy0gICAgICB9CistICAgICAgaWYgKHVu bGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNl T3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMs IHBvc19hcmdzLCAidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIpIDwgMCkpIF9fUFlYX0VSUigwLCA2 MDAsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjU2CisrICogICAgICAgICAgICAgICAgICAgICApCisrICogICAgICAgICAgICAgICAgIHJl dHVybiBlcnIKKysgKiAgICAgICAgICAgICBkYXRhX2lkID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHVzZXJkYXRhcyA9 IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCisrICogICAgICAgICAgICAg aWYgdXNlcmRhdGFzIGlzIE5vbmU6CisrICovCisrICAgIF9fcHl4X3RfOCA9IFB5T2JqZWN0X0hh c2goX19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfOCA9PSAoKFB5X2hhc2hfdCkt MSkpKSBfX1BZWF9FUlIoMCwgNjU2LCBfX3B5eF9MNF9lcnJvcikKKysgICAgX19weXhfdl9kYXRh X2lkID0gKCh1aW50NjRfdClfX3B5eF90XzgpOworKworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjU3CisrICogICAgICAgICAgICAgICAgIHJldHVybiBlcnIKKysgKiAg ICAgICAgICAgICBkYXRhX2lkID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKysgKiAgICAgICAgICAg ICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlz IE5vbmU6CisrICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbZGF0YV9pZF0g PSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorKyAqLworKyAgICBfX3B5eF90XzIg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEs IF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2 NTcsIF9fcHl4X0w0X2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAg X19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92X2RhdGFfaWQpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9y KQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgX19weXhfdF85ID0gTlVMTDsK KysgICAgX19weXhfdF8xMCA9IDA7CisrICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAgICAgX19weXhfdF85ID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgICBpZiAobGlrZWx5KF9fcHl4X3Rf OSkpIHsKKysgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElP TihfX3B5eF90XzIpOworKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfOSk7CisrICAgICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzIsIGZ1bmN0aW9uKTsKKysgICAgICAgIF9fcHl4X3RfMTAgPSAxOworICAgICAgIH0KKy0g ICAgfSBlbHNlIHsKKy0gICAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykp IHsKKy0gICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhf YXJncywgMik7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAy OiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAgICAg Q1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBs ZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKy0gICAgICAgIGJyZWFrOworLSAgICAgICAgZGVm YXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgfQorKyAgICAjaWYgQ1lU SE9OX0ZBU1RfUFlDQUxMCisrICAgIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9fcHl4X3RfMikpIHsK KysgICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzksIF9fcHl4X3RfMywg UHlfTm9uZX07CisrICAgICAgX19weXhfdF8xID0gX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChf X3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90XzEwLCAyK19fcHl4X3RfMTApOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9yKQorKyAg ICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85ID0gMDsKKysgICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19w eXhfdF8zID0gMDsKKysgICAgfSBlbHNlCisrICAgICNlbmRpZgorKyAgICAjaWYgQ1lUSE9OX0ZB U1RfUFlDQ0FMTAorKyAgICBpZiAoX19QeXhfUHlGYXN0Q0Z1bmN0aW9uX0NoZWNrKF9fcHl4X3Rf MikpIHsKKysgICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzksIF9fcHl4 X3RfMywgUHlfTm9uZX07CisrICAgICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFz dENhbGwoX19weXhfdF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF8xMCwgMitfX3B5eF90XzEwKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjU3LCBfX3B5eF9MNF9lcnJv cikKKysgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7CisrICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Myk7IF9fcHl4X3RfMyA9IDA7CisrICAgIH0gZWxzZQorKyAgICAjZW5kaWYKKysgICAgeworKyAg ICAgIF9fcHl4X3RfMTEgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfMTApOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMTEpKSBfX1BZWF9FUlIoMCwgNjU3LCBfX3B5eF9MNF9lcnJvcikKKysgICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xMSk7CisrICAgICAgaWYgKF9fcHl4X3RfOSkgeworKyAgICAg ICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzkpOyBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMTEs IDAsIF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IE5VTEw7CisgICAgICAgfQorKyAgICAgIF9fUHl4 X0dJVkVSRUYoX19weXhfdF8zKTsKKysgICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMTEs IDArX19weXhfdF8xMCwgX19weXhfdF8zKTsKKysgICAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7 CisrICAgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKysgICAgICBQeVR1cGxlX1NFVF9JVEVN KF9fcHl4X3RfMTEsIDErX19weXhfdF8xMCwgUHlfTm9uZSk7CisrICAgICAgX19weXhfdF8zID0g MDsKKysgICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMiwgX19w eXhfdF8xMSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY1 NywgX19weXhfTDRfZXJyb3IpCisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzExID0gMDsKKyAgICAgfQorLSAg ICBfX3B5eF92X3Byb3AgPSB2YWx1ZXNbMF07CistICAgIF9fcHl4X3ZfZGF0YSA9IHZhbHVlc1sx XTsKKy0gICAgX19weXhfdl9kZWZhdWx0ID0gdmFsdWVzWzJdOworLSAgfQorLSAgZ290byBfX3B5 eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKy0gIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9y OjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW5j IiwgMCwgMSwgMywgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA2 MDAsIF9fcHl4X0wzX2Vycm9yKQorLSAgX19weXhfTDNfZXJyb3I6OworLSAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5X2FzeW5j IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBOVUxMOworLSAgX19weXhfTDRf YXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNnRyeV9nZXRfcHJvcGVydHlfYXN5bmMoKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwg X19weXhfdl9wcm9wLCBfX3B5eF92X2RhdGEsIF9fcHl4X3ZfZGVmYXVsdCk7CistCistICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwor LSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19w eXhfdF8yID0gMDsKKysgICAgX19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90XzE7CisrICAgIF9f cHl4X3RfMSA9IDA7CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMTZ0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3ZfcHJvcCwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSwgUHlPYmplY3QgKl9fcHl4X3Zf ZGVmYXVsdCkgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgUHlPYmpl Y3QgKl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKy0g IFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5V TEw7CistICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90 XzcgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfODsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOwor LSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInRyeV9nZXRfcHJvcGVydHlf YXN5bmMiLCAwKTsKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1OAor KyAqICAgICAgICAgICAgIGRhdGFfaWQgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorKyAqICAgICAg ICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUp CisrICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtkYXRh X2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisrICogICAgICAgICAgICAg dXNlcmRhdGFzLmFkZCgpCisrICovCisrICAgIF9fcHl4X3RfNyA9IChfX3B5eF92X3VzZXJkYXRh cyA9PSBQeV9Ob25lKTsKKysgICAgX19weXhfdF82ID0gKF9fcHl4X3RfNyAhPSAwKTsKKysgICAg aWYgKF9fcHl4X3RfNikgeworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjYwMQorLSAqIAorLSAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9w LCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CistICogICAgICAgICB0cnk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVy dHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKQorLSAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOgor KyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTkKKysgKiAgICAgICAg ICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQor KyAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgorKyAqICAgICAgICAgICAgICAg ICBzZWxmLnJlcGx5X3VzZXJkYXRhW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRh dGEoZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHVz ZXJkYXRhcy5hZGQoKQorKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6CisgICovCistICB7Cist ICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQorLSAgICBfX1B5eF9QeVRocmVhZFN0YXRl X2Fzc2lnbgorLSAgICBfX1B5eF9FeGNlcHRpb25TYXZlKCZfX3B5eF90XzEsICZfX3B5eF90XzIs ICZfX3B5eF90XzMpOworLSAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4 X1hHT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzMpOworLSAg ICAvKnRyeToqLyB7CisrICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIs IF9fcHl4X25fc19SZXBseVVzZXJEYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgNjU5LCBfX3B5eF9MNF9lcnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8yKTsKKysgICAgICBfX3B5eF90XzExID0gTlVMTDsKKysgICAgICBpZiAoQ1lUSE9OX1VOUEFD S19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAg ICAgICBfX3B5eF90XzExID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgICAg IGlmIChsaWtlbHkoX19weXhfdF8xMSkpIHsKKysgICAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9u ID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CisrICAgICAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzExKTsKKysgICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysg ICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKysgICAgICAg IH0KKysgICAgICB9CisrICAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfMTEpID8gX19QeXhfUHlP YmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8xMSwgX19weXhfdl9kYXRhKSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X2RhdGEpOworKyAgICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF8xMSk7IF9fcHl4X3RfMTEgPSAwOworKyAgICAgIGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY1OSwgX19weXhfTDRfZXJyb3IpCisr ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1J bnQoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfdl9kYXRhX2lkLCBfX3B5eF90 XzEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDAp KSBfX1BZWF9FUlIoMCwgNjU5LCBfX3B5eF9MNF9lcnJvcikKKysgICAgICBfX1B5eF9JTkNSRUYo X19weXhfdF8xKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfdXNlcmRhdGFzLCBf X3B5eF90XzEpOworKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDIKKy0gKiAg ICAgZGVmIHRyeV9nZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZh dWx0PU5vbmUpOgorLSAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgIHJldHVybiBzZWxm LmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBkYXRhPWRhdGEpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIGV4Y2VwdCBNUFZFcnJvcjoKKy0gKiAgICAgICAgICAgICBy ZXR1cm4gZGVmYXVsdAorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 NTgKKysgKiAgICAgICAgICAgICBkYXRhX2lkID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKysgKiAg ICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBO b25lKQorKyAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFb ZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorKyAqICAgICAgICAg ICAgIHVzZXJkYXRhcy5hZGQoKQorICAqLworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CistICAgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0 ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX2dldF9wcm9wZXJ0eV9hc3luYyk7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDYwMiwgX19weXhfTDNfZXJyb3IpCistICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgICAgX19weXhfdF81ID0gUHlUdXBsZV9O ZXcoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDYwMiwgX19weXhf TDNfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CistICAgICAgX19QeXhf SU5DUkVGKF9fcHl4X3ZfcHJvcCk7CistICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3Byb3Ap OworLSAgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF81LCAwLCBfX3B5eF92X3Byb3ApOwor LSAgICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKKy0gICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oX19w eXhfdF82LCBfX3B5eF9uX3NfZGF0YSwgX19weXhfdl9kYXRhKSA8IDApIF9fUFlYX0VSUigwLCA2 MDIsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2JqZWN0X0Nh bGwoX19weXhfdF80LCBfX3B5eF90XzUsIF9fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhf dF83KSkgX19QWVhfRVJSKDAsIDYwMiwgX19weXhfTDNfZXJyb3IpCistICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNyk7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Cist ICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CistICAgICAgX19w eXhfciA9IF9fcHl4X3RfNzsKKy0gICAgICBfX3B5eF90XzcgPSAwOworLSAgICAgIGdvdG8gX19w eXhfTDdfdHJ5X3JldHVybjsKKysgICAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2MDEKKy0gKiAKKy0gKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHlfYXN5 bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZhdWx0PU5vbmUpOgorLSAqICAgICAgICAgdHJ5 OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIHNl bGYuZ2V0X3Byb3BlcnR5X2FzeW5jKHByb3AsIGRhdGE9ZGF0YSkKKy0gKiAgICAgICAgIGV4Y2Vw dCBNUFZFcnJvcjoKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2MAor KyAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgorKyAqICAgICAgICAgICAgICAg ICBzZWxmLnJlcGx5X3VzZXJkYXRhW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRh dGEoZGF0YSkKKysgKiAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAg ICAgICAgIGVyciA9IG1wdl9zZXRfcHJvcGVydHlfYXN5bmMoCisgICovCisrICAgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X25f c19hZGQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2NjAsIF9fcHl4 X0w0X2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdF8x MSA9IE5VTEw7CisrICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CisrICAgICAgX19weXhfdF8xMSA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfMik7CisrICAgICAgaWYgKGxpa2VseShfX3B5eF90XzExKSkgeworKyAg ICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3Rf Mik7CisrICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xMSk7CisrICAgICAgICBfX1B5eF9J TkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1 bmN0aW9uKTsKKysgICAgICB9CisgICAgIH0KKy0gICAgX19weXhfTDNfZXJyb3I6OworLSAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAgIF9fUHl4X1hERUNS RUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4 X3RfNyA9IDA7CisrICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzExKSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzExKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxO b0FyZyhfX3B5eF90XzIpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90 XzExID0gMDsKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjYw LCBfX3B5eF9MNF9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX1B5eF9ERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjYwMworLSAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgIHJldHVy biBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBkYXRhPWRhdGEpCistICogICAgICAgICBl eGNlcHQgTVBWRXJyb3I6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICAgICByZXR1cm4gZGVmYXVsdAorLSAqIAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjYxCisrICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbZGF0 YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorKyAqICAgICAgICAgICAg IHVzZXJkYXRhcy5hZGQoKQorKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9wcm9w ZXJ0eV9hc3luYygKKysgKiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKKyAgKi8KKy0g ICAgX19QeXhfRXJyRmV0Y2goJl9fcHl4X3RfNywgJl9fcHl4X3RfNiwgJl9fcHl4X3RfNSk7Cist ICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3NfTVBWRXJy b3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2MDMsIF9fcHl4X0w1 X2V4Y2VwdF9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgIF9fcHl4 X3RfOCA9IF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyhfX3B5eF90XzcsIF9fcHl4 X3RfNCk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAg ICBfX1B5eF9FcnJSZXN0b3JlKF9fcHl4X3RfNywgX19weXhfdF82LCBfX3B5eF90XzUpOworLSAg ICBfX3B5eF90XzcgPSAwOyBfX3B5eF90XzYgPSAwOyBfX3B5eF90XzUgPSAwOworLSAgICBpZiAo X19weXhfdF84KSB7CistICAgICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5t cHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5X2FzeW5jIiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlvbigm X19weXhfdF81LCAmX19weXhfdF82LCAmX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2MDMs IF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsK Ky0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF83KTsKKysgICAgeworKyAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICBQ eVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworKyAgICAg ICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworKyAgICAgICAgI2VuZGlmCisrICAgICAgICAv KnRyeToqLyB7CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYw NAorLSAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBk YXRhPWRhdGEpCistICogICAgICAgICBleGNlcHQgTVBWRXJyb3I6CistICogICAgICAgICAgICAg cmV0dXJuIGRlZmF1bHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAg ICBkZWYgdHJ5X2dldF9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkZWZhdWx0PU5vbmUpOgorKyAgICAg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYyCisrICogICAgICAgICAg ICAgdXNlcmRhdGFzLmFkZCgpCisrICogICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAg ICAgICAgICAgICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0eV9hc3luYyggICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorKyAqICAg ICAgICAgICAgICAgICAgICAgZGF0YV9pZCwKKyAgKi8KKy0gICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X2RlZmF1bHQpOworLSAgICAgIF9f cHl4X3IgPSBfX3B5eF92X2RlZmF1bHQ7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7 IF9fcHl4X3RfNSA9IDA7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3Rf NiA9IDA7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Cist ICAgICAgZ290byBfX3B5eF9MNl9leGNlcHRfcmV0dXJuOworKyAgICAgICAgICBfX3B5eF92X2Vy ciA9IG1wdl9zZXRfcHJvcGVydHlfYXN5bmMoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2Rh dGFfaWQsIF9fcHl4X3ZfcHJvcF9jLCBNUFZfRk9STUFUX05PREUsICgmX19weXhfdl92KSk7Cisr ICAgICAgICB9CisrCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NjYxCisrICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbZGF0YV9pZF0gPSB1 c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorKyAqICAgICAgICAgICAgIHVzZXJkYXRh cy5hZGQoKQorKyAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0eV9hc3lu YygKKysgKiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKKysgKi8KKysgICAgICAgIC8q ZmluYWxseToqLyB7CisrICAgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CisrICAgICAgICAgICAg I2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsK KysgICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgICAgI2VuZGlmCisrICAg ICAgICAgICAgZ290byBfX3B5eF9MMTM7CisrICAgICAgICAgIH0KKysgICAgICAgICAgX19weXhf TDEzOjsKKysgICAgICAgIH0KKyAgICAgfQorLSAgICBnb3RvIF9fcHl4X0w1X2V4Y2VwdF9lcnJv cjsKKy0gICAgX19weXhfTDVfZXhjZXB0X2Vycm9yOjsKKysgIH0KKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwMQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjY3MAorKyAqICAgICAgICAgICAgICAgICApCisrICogICAgICAgICBmaW5hbGx5 OgorKyAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKHYpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHJldHVybiBlcnIKKyAgKiAKKy0gKiAgICAg ZGVmIHRyeV9nZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZhdWx0 PU5vbmUpOgorLSAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5X2FzeW5jKHByb3AsIGRhdGE9 ZGF0YSkKKy0gKiAgICAgICAgIGV4Y2VwdCBNUFZFcnJvcjoKKyAgKi8KKy0gICAgX19QeXhfWEdJ VkVSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKKy0gICAg X19QeXhfWEdJVkVSRUYoX19weXhfdF8zKTsKKy0gICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19w eXhfdF8xLCBfX3B5eF90XzIsIF9fcHl4X3RfMyk7CistICAgIGdvdG8gX19weXhfTDFfZXJyb3I7 CistICAgIF9fcHl4X0w3X3RyeV9yZXR1cm46OworLSAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90 XzEpOworLSAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9YR0lWRVJF RihfX3B5eF90XzMpOworLSAgICBfX1B5eF9FeGNlcHRpb25SZXNldChfX3B5eF90XzEsIF9fcHl4 X3RfMiwgX19weXhfdF8zKTsKKy0gICAgZ290byBfX3B5eF9MMDsKKy0gICAgX19weXhfTDZfZXhj ZXB0X3JldHVybjo7CistICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4 X1hHSVZFUkVGKF9fcHl4X3RfMik7CistICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7Cist ICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMp OworLSAgICBnb3RvIF9fcHl4X0wwOworKyAgLypmaW5hbGx5OiovIHsKKysgICAgLypub3JtYWwg ZXhpdDoqL3sKKysgICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+ X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjcwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKysgICAgICBnb3RvIF9fcHl4X0w1OworKyAgICB9CisrICAgIF9fcHl4 X0w0X2Vycm9yOjsKKysgICAgLypleGNlcHRpb24gZXhpdDoqL3sKKysgICAgICBfX1B5eF9QeVRo cmVhZFN0YXRlX2RlY2xhcmUKKysgICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorKyAg ICAgIF9fcHl4X3RfMTQgPSAwOyBfX3B5eF90XzE1ID0gMDsgX19weXhfdF8xNiA9IDA7IF9fcHl4 X3RfMTcgPSAwOyBfX3B5eF90XzE4ID0gMDsgX19weXhfdF8xOSA9IDA7CisrICAgICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xMSk7IF9fcHl4X3RfMTEgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7CisrICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90Xzkg PSAwOworKyAgICAgIGlmIChQWV9NQUpPUl9WRVJTSU9OID49IDMpIF9fUHl4X0V4Y2VwdGlvblN3 YXAoJl9fcHl4X3RfMTcsICZfX3B5eF90XzE4LCAmX19weXhfdF8xOSk7CisrICAgICAgaWYgKChQ WV9NQUpPUl9WRVJTSU9OIDwgMykgfHwgdW5saWtlbHkoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5 eF90XzE0LCAmX19weXhfdF8xNSwgJl9fcHl4X3RfMTYpIDwgMCkpIF9fUHl4X0VyckZldGNoKCZf X3B5eF90XzE0LCAmX19weXhfdF8xNSwgJl9fcHl4X3RfMTYpOworKyAgICAgIF9fUHl4X1hHT1RS RUYoX19weXhfdF8xNCk7CisrICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE1KTsKKysgICAg ICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTYpOworKyAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhf dF8xNyk7CisrICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE4KTsKKysgICAgICBfX1B5eF9Y R09UUkVGKF9fcHl4X3RfMTkpOworKyAgICAgIF9fcHl4X3RfMTAgPSBfX3B5eF9saW5lbm87IF9f cHl4X3RfMTIgPSBfX3B5eF9jbGluZW5vOyBfX3B5eF90XzEzID0gX19weXhfZmlsZW5hbWU7Cisr ICAgICAgeworKyAgICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYikt Pl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfdik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3MCwgX19weXhfTDE1X2Vycm9yKQorKyAgICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKysgICAgICB9CisrICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJ T04gPj0gMykgeworKyAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xNyk7CisrICAgICAg ICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzE4KTsKKysgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3RfMTkpOworKyAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xNywgX19w eXhfdF8xOCwgX19weXhfdF8xOSk7CisrICAgICAgfQorKyAgICAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3RfMTQpOworKyAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTUpOworKyAgICAgIF9f UHl4X1hHSVZFUkVGKF9fcHl4X3RfMTYpOworKyAgICAgIF9fUHl4X0VyclJlc3RvcmUoX19weXhf dF8xNCwgX19weXhfdF8xNSwgX19weXhfdF8xNik7CisrICAgICAgX19weXhfdF8xNCA9IDA7IF9f cHl4X3RfMTUgPSAwOyBfX3B5eF90XzE2ID0gMDsgX19weXhfdF8xNyA9IDA7IF9fcHl4X3RfMTgg PSAwOyBfX3B5eF90XzE5ID0gMDsKKysgICAgICBfX3B5eF9saW5lbm8gPSBfX3B5eF90XzEwOyBf X3B5eF9jbGluZW5vID0gX19weXhfdF8xMjsgX19weXhfZmlsZW5hbWUgPSBfX3B5eF90XzEzOwor KyAgICAgIGdvdG8gX19weXhfTDFfZXJyb3I7CisrICAgICAgX19weXhfTDE1X2Vycm9yOjsKKysg ICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSB7CisrICAgICAgICBfX1B5eF9YR0lWRVJF RihfX3B5eF90XzE3KTsKKysgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTgpOworKyAg ICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xOSk7CisrICAgICAgICBfX1B5eF9FeGNlcHRp b25SZXNldChfX3B5eF90XzE3LCBfX3B5eF90XzE4LCBfX3B5eF90XzE5KTsKKysgICAgICB9Cisr ICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE0KTsgX19weXhfdF8xNCA9IDA7CisrICAgICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzE1KTsgX19weXhfdF8xNSA9IDA7CisrICAgICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzE2KTsgX19weXhfdF8xNiA9IDA7CisrICAgICAgX19weXhfdF8xNyA9 IDA7IF9fcHl4X3RfMTggPSAwOyBfX3B5eF90XzE5ID0gMDsKKysgICAgICBnb3RvIF9fcHl4X0wx X2Vycm9yOworKyAgICB9CisrICAgIF9fcHl4X0wzX3JldHVybjogeworKyAgICAgIF9fcHl4X3Rf MTkgPSBfX3B5eF9yOworKyAgICAgIF9fcHl4X3IgPSAwOworKyAgICAgIF9fcHl4X3RfMSA9ICgo c3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilf X3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxm LCBfX3B5eF92X3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NzAs IF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICAgIF9fcHl4X3Ig PSBfX3B5eF90XzE5OworKyAgICAgIF9fcHl4X3RfMTkgPSAwOworKyAgICAgIGdvdG8gX19weXhf TDA7CisrICAgIH0KKysgICAgX19weXhfTDU6OworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjYwMAorLSAqICAgICAgICAgcmV0dXJuIGVycgorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3MQorKyAqICAgICAgICAgZmluYWxseToKKysg KiAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZSh2KQorKyAqICAgICAgICAgcmV0 dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCistICogICAgIGRlZiB0 cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25l KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgdHJ5OgorLSAqICAg ICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBkYXRhPWRhdGEp CisrICogICAgIEBfZXJyb3JzCisrICovCisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAg X19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NzEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF9yID0gX19weXhfdF8xOworKyAgX19weXhf dF8xID0gMDsKKysgIGdvdG8gX19weXhfTDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NjM2CisrICogCisrICogICAgIEBfZXJyb3JzCisrICogICAgIGRlZiBzZXRf cHJvcGVydHkoc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSwgYXN5bmNocm9ub3VzPUZhbHNlLCBkYXRh PU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJXcmFw czogbXB2X3NldF9wcm9wZXJ0eSBhbmQgbXB2X3NldF9wcm9wZXJ0eV9hc3luYyIiIgorKyAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2Rl ICovCisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnRyeV9nZXRfcHJvcGVydHlfYXN5bmMiLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNS RUYoX19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsKKysgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xMSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJz Lm1wdi5Db250ZXh0LnNldF9wcm9wZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CistICBf X1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl91c2VyZGF0 YXMpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X3Byb3ApOworKyAgX19QeXhfWEdJVkVSRUYo X19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBf X3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA2Cist ICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Njc0CisgICogCistICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHBy b3AsIGRlZmF1bHQ9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHRyeToKKy0gKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkK KysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIHNldF9vcHRpb24oc2VsZiwgcHJvcCwgdmFs dWU9VHJ1ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIldy YXBzOiBtcHZfc2V0X29wdGlvbiIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAq LworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTl0cnlfZ2V0X3Byb3BlcnR5KFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dk cyk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzE5dHJ5X2dldF9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKytzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMXNldF9v cHRpb24oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2Jq ZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisrc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMHNldF9vcHRpb25bXSA9ICJXcmFwczogbXB2X3Nl dF9vcHRpb24iOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzIxc2V0X29wdGlvbihQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKyAgIFB5T2JqZWN0ICpfX3B5 eF92X3Byb3AgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfZGVmYXVsdCA9IDA7CisrICBQeU9i amVjdCAqX19weXhfdl92YWx1ZSA9IDA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNv bnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0g MDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgidHJ5X2dldF9wcm9wZXJ0eSAod3Jh cHBlcikiLCAwKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfb3B0aW9uICh3 cmFwcGVyKSIsIDApOworICAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25h bWVzW10gPSB7Jl9fcHl4X25fc19wcm9wLCZfX3B5eF9uX3NfZGVmYXVsdCwwfTsKKysgICAgc3Rh dGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHJvcCwmX19w eXhfbl9zX3ZhbHVlLDB9OworICAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07CistICAg IHZhbHVlc1sxXSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKKysgICAgdmFsdWVzWzFdID0gKChQ eU9iamVjdCAqKVB5X1RydWUpOworICAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKKyAg ICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CisgICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJn cyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CitAQCAtMTI1MDUsMTIgKzEyODc0LDEy IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzE5dHJ5X2dldF9wcm9wZXJ0eShQeU9iCisgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 CisgICAgICAgICBjYXNlICAxOgorICAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7CistICAgICAg ICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMs IF9fcHl4X25fc19kZWZhdWx0KTsKKysgICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhf UHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3ZhbHVlKTsKKyAgICAgICAg ICAgaWYgKHZhbHVlKSB7IHZhbHVlc1sxXSA9IHZhbHVlOyBrd19hcmdzLS07IH0KKyAgICAgICAg IH0KKyAgICAgICB9CisgICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAg ICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBf X3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAidHJ5X2dldF9wcm9wZXJ0eSIp IDwgMCkpIF9fUFlYX0VSUigwLCA2MDYsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYgKHVu bGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFy Z25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0X29wdGlvbiIpIDwgMCkpIF9fUFlYX0VS UigwLCA2NzQsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKyAgICAg ICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpIHsKK0BAIC0xMjUyMiwyNTgg KzEyODkxLDc0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzE5dHJ5X2dldF9wcm9wZXJ0eShQeU9iCisgICAgICAgfQorICAgICB9Cisg ICAgIF9fcHl4X3ZfcHJvcCA9IHZhbHVlc1swXTsKKy0gICAgX19weXhfdl9kZWZhdWx0ID0gdmFs dWVzWzFdOworKyAgICBfX3B5eF92X3ZhbHVlID0gdmFsdWVzWzFdOworICAgfQorICAgZ290byBf X3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKyAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vy cm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJ0cnlfZ2V0X3Byb3BlcnR5Iiwg MCwgMSwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA2MDYs IF9fcHl4X0wzX2Vycm9yKQorKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInNldF9vcHRp b24iLCAwLCAxLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAs IDY3NCwgX19weXhfTDNfZXJyb3IpCisgICBfX3B5eF9MM19lcnJvcjo7CistICBfX1B5eF9BZGRU cmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnRyeV9nZXRfcHJvcGVydHkiLCBf X3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X0Fk ZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuc2V0X29wdGlvbiIsIF9fcHl4 X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gTlVMTDsKKyAgIF9fcHl4X0w0X2FyZ3VtZW50 X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMTh0cnlfZ2V0X3Byb3BlcnR5KCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfcHJvcCwg X19weXhfdl9kZWZhdWx0KTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MTh0cnlfZ2V0X3Byb3BlcnR5KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfcHJvcCwgUHlPYmplY3Qg Kl9fcHl4X3ZfZGVmYXVsdCkgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwor LSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8zID0g TlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4 X3RfNSA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKy0gIFB5T2JqZWN0 ICpfX3B5eF90XzcgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfODsKKy0gIGludCBfX3B5eF9saW5l bm8gPSAwOworLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9f cHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInRyeV9nZXRf cHJvcGVydHkiLCAwKTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 MDcKKy0gKiAKKy0gKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGVmYXVs dD1Ob25lKToKKy0gKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eShwcm9wKQorLSAqICAgICAg ICAgZXhjZXB0IE1QVkVycm9yOgorLSAqLworLSAgeworLSAgICBfX1B5eF9QeVRocmVhZFN0YXRl X2RlY2xhcmUKKy0gICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KKy0gICAgX19QeXhfRXhj ZXB0aW9uU2F2ZSgmX19weXhfdF8xLCAmX19weXhfdF8yLCAmX19weXhfdF8zKTsKKy0gICAgX19Q eXhfWEdPVFJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7Cist ICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsKKy0gICAgLyp0cnk6Ki8geworLQorLSAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDgKKy0gKiAgICAgZGVmIHRyeV9n ZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGVmYXVsdD1Ob25lKToKKy0gKiAgICAgICAgIHRyeToK Ky0gKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHJvcGVydHkocHJvcCkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOgorLSAqICAg ICAgICAgICAgIHJldHVybiBkZWZhdWx0CistICovCistICAgICAgX19QeXhfWERFQ1JFRihfX3B5 eF9yKTsKKy0gICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlP YmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgNjA4LCBfX3B5eF9MM19lcnJvcikKKy0gICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKy0gICAgICBfX3B5eF90XzYgPSBOVUxMOworLSAg ICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9f cHl4X3RfNSkpKSB7CistICAgICAgICBfX3B5eF90XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5 eF90XzUpOworLSAgICAgICAgaWYgKGxpa2VseShfX3B5eF90XzYpKSB7CistICAgICAgICAgIFB5 T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzUpOworLSAg ICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF82KTsKKy0gICAgICAgICAgX19QeXhfSU5DUkVG KGZ1bmN0aW9uKTsKKy0gICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUsIGZ1bmN0 aW9uKTsKKy0gICAgICAgIH0KKy0gICAgICB9CistICAgICAgX19weXhfdF80ID0gKF9fcHl4X3Rf NikgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF81LCBfX3B5eF90XzYsIF9fcHl4 X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwgX19weXhfdl9w cm9wKTsKKy0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cist ICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjA4LCBfX3B5eF9M M19lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgICBfX3B5eF9yID0gX19weXhf dF80OworLSAgICAgIF9fcHl4X3RfNCA9IDA7CistICAgICAgZ290byBfX3B5eF9MN190cnlfcmV0 dXJuOworLQorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDcKKy0g KiAKKy0gKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGVmYXVsdD1Ob25l KToKKy0gKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eShwcm9wKQorLSAqICAgICAgICAgZXhj ZXB0IE1QVkVycm9yOgorLSAqLworLSAgICB9CistICAgIF9fcHl4X0wzX2Vycm9yOjsKKy0gICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKKy0KKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYwOQorLSAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgIHJldHVybiBzZWxm LmdldF9wcm9wZXJ0eShwcm9wKQorLSAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKy0g KiAKKy0gKi8KKy0gICAgX19QeXhfRXJyRmV0Y2goJl9fcHl4X3RfNCwgJl9fcHl4X3RfNSwgJl9f cHl4X3RfNik7CistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5 eF9uX3NfTVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA2 MDksIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7 CistICAgIF9fcHl4X3RfOCA9IF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyhfX3B5 eF90XzQsIF9fcHl4X3RfNyk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90 XzcgPSAwOworLSAgICBfX1B5eF9FcnJSZXN0b3JlKF9fcHl4X3RfNCwgX19weXhfdF81LCBfX3B5 eF90XzYpOworLSAgICBfX3B5eF90XzQgPSAwOyBfX3B5eF90XzUgPSAwOyBfX3B5eF90XzYgPSAw OworLSAgICBpZiAoX19weXhfdF84KSB7CistICAgICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuQ29udGV4dC50cnlfZ2V0X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICAgICAgaWYgKF9fUHl4X0dldEV4Y2Vw dGlvbigmX19weXhfdF82LCAmX19weXhfdF81LCAmX19weXhfdF80KSA8IDApIF9fUFlYX0VSUigw LCA2MDksIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKy0gICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF80KTsKKy0KKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjEwCistICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5KHByb3ApCist ICogICAgICAgICBleGNlcHQgTVBWRXJyb3I6CistICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1 bHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICBkZWYgZ2V0X3By b3BlcnR5KHNlbGYsIHByb3ApOgorLSAqLworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZGVmYXVsdCk7CistICAgICAgX19weXhfciA9 IF9fcHl4X3ZfZGVmYXVsdDsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhf dF80ID0gMDsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsK Ky0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gICAgICBn b3RvIF9fcHl4X0w2X2V4Y2VwdF9yZXR1cm47CistICAgIH0KKy0gICAgZ290byBfX3B5eF9MNV9l eGNlcHRfZXJyb3I7CistICAgIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcjo7CistCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDcKKy0gKiAKKy0gKiAgICAgZGVmIHRyeV9n ZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGVmYXVsdD1Ob25lKToKKy0gKiAgICAgICAgIHRyeTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHJldHVybiBzZWxm LmdldF9wcm9wZXJ0eShwcm9wKQorLSAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOgorLSAqLwor LSAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9YR0lWRVJFRihfX3B5 eF90XzIpOworLSAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9FeGNl cHRpb25SZXNldChfX3B5eF90XzEsIF9fcHl4X3RfMiwgX19weXhfdF8zKTsKKy0gICAgZ290byBf X3B5eF9MMV9lcnJvcjsKKy0gICAgX19weXhfTDdfdHJ5X3JldHVybjo7CistICAgIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMik7CistICAg IF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9f cHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMpOworLSAgICBnb3RvIF9fcHl4X0wwOworLSAg ICBfX3B5eF9MNl9leGNlcHRfcmV0dXJuOjsKKy0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8x KTsKKy0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfWEdJVkVSRUYo X19weXhfdF8zKTsKKy0gICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xLCBfX3B5eF90 XzIsIF9fcHl4X3RfMyk7CistICAgIGdvdG8gX19weXhfTDA7CistICB9CistCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA2CistICogICAgICAgICAgICAgcmV0dXJuIGRl ZmF1bHQKKy0gKiAKKy0gKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGVm YXVsdD1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgdHJ5 OgorLSAqICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eShwcm9wKQorLSAqLwor LQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7 CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnRyeV9n ZXRfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1l KTsKKy0gIF9fcHl4X3IgPSBOVUxMOworLSAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYo X19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBf X3B5eF9yOworLX0KKy0KKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjEyCist ICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKy0gKiAKKy0gKiAgICAgZGVmIGdldF9wcm9w ZXJ0eShzZWxmLCBwcm9wKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgIiIiV3JhcHM6IG1wdl9nZXRfcHJvcGVydHkiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxm Ll9jdHgKKy0gKi8KKy0KKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIxZ2V0X3Byb3BlcnR5KFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3ApOyAvKnByb3RvKi8K Ky1zdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIw Z2V0X3Byb3BlcnR5W10gPSAiV3JhcHM6IG1wdl9nZXRfcHJvcGVydHkiOworLXN0YXRpYyBQeU9i amVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIxZ2V0X3Byb3Bl cnR5KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3ApIHsKKy0g IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X3Byb3BlcnR5ICh3cmFwcGVyKSIsIDAp OworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8y MGdldF9wcm9wZXJ0eSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9wcm9wKSk7CisrICBf X3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29w dGlvbigoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilf X3B5eF92X3NlbGYpLCBfX3B5eF92X3Byb3AsIF9fcHl4X3ZfdmFsdWUpOworIAorICAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAg IHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMGdldF9wcm9wZXJ0eShzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X3Byb3ApIHsKKy0gIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF92X3Jlc3VsdDsKKy0gIGNo YXIgY29uc3QgKl9fcHl4X3ZfcHJvcF9jOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CisrICBlbnVtIG1wdl9mb3Jt YXQgX19weXhfdl9mb3JtYXQ7CisrICBzdHJ1Y3QgbXB2X25vZGUgX19weXhfdl92OworICAgaW50 IF9fcHl4X3ZfZXJyOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfdiA9IE5VTEw7CisrICBjaGFyIGNv bnN0ICpfX3B5eF92X3Byb3BfYzsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsK KyAgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfMyA9 IE5VTEw7CistICBjaGFyIGNvbnN0ICpfX3B5eF90XzQ7CistICBpbnQgX19weXhfdF81OworLSAg UHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7CisrICBlbnVtIG1wdl9mb3JtYXQgX19weXhfdF80 OworKyAgY2hhciBjb25zdCAqX19weXhfdF81OworKyAgaW50IF9fcHl4X3RfNjsKKyAgIGludCBf X3B5eF90Xzc7CistICBpbnQgX19weXhfdF84OworLSAgY2hhciBjb25zdCAqX19weXhfdF85Owor KyAgY2hhciBjb25zdCAqX19weXhfdF84OworKyAgUHlPYmplY3QgKl9fcHl4X3RfOSA9IE5VTEw7 CisgICBQeU9iamVjdCAqX19weXhfdF8xMCA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfdF8x MSA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfdF8xMiA9IE5VTEw7CisgICBQeU9iamVjdCAq X19weXhfdF8xMyA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfdF8xNCA9IE5VTEw7CistICBQ eU9iamVjdCAqX19weXhfdF8xNSA9IE5VTEw7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAg IGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5v ID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJnZXRfcHJvcGVydHkiLCAwKTsK KysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfb3B0aW9uIiwgMCk7CisgICBfX1B5 eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo2MTQKKy0gKiAgICAgZGVmIGdldF9wcm9wZXJ0eShzZWxmLCBwcm9wKToKKy0gKiAg ICAgICAgICIiIldyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5IiIiCisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Njc2CisrICogICAgIGRlZiBzZXRfb3B0aW9uKHNlbGYsIHByb3As IHZhbHVlPVRydWUpOgorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCisg ICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgIGNkZWYgbXB2X25vZGUgcmVzdWx0CisgICogICAgICAgICBwcm9wID0gX3N0 cmVuYyhwcm9wKQorKyAqICAgICAgICAgY2RlZiBtcHZfZm9ybWF0IGZvcm1hdCA9IHNlbGYuX2Zv cm1hdF9mb3IodmFsdWUpCisgICovCisgICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VSVElP TlMKKyAgIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworICAgICBpZiAodW5saWtl bHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7CisgICAgICAgUHlFcnJfU2V0Tm9uZShQ eUV4Y19Bc3NlcnRpb25FcnJvcik7CistICAgICAgX19QWVhfRVJSKDAsIDYxNCwgX19weXhfTDFf ZXJyb3IpCisrICAgICAgX19QWVhfRVJSKDAsIDY3NiwgX19weXhfTDFfZXJyb3IpCisgICAgIH0K KyAgIH0KKyAgICNlbmRpZgorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjYxNgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3NworKyAqICAgICAg ICAgIiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCisgICogICAgICAgICBhc3NlcnQgc2VsZi5f Y3R4CistICogICAgICAgICBjZGVmIG1wdl9ub2RlIHJlc3VsdAorICAqICAgICAgICAgcHJvcCA9 IF9zdHJlbmMocHJvcCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg Y2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wCistICogICAgICAgICBjZGVmIGludCBlcnIK KysgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZh bHVlKQorKyAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFs dWUodmFsdWUsIGZvcm1hdCkKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgNjE2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgNjc3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworICAgX19weXhfdF8zID0gTlVMTDsKKyAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKK0BAIC0xMjc4Nywy NzUgKzEyOTcyLDIwMCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8yMGdldF9wcm9wZXJ0eShzdHJ1Y3QgXworICAgfQorICAgX19weXhf dF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBf X3B5eF90XzMsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfMiwgX19weXhfdl9wcm9wKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYxNiwg X19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA2NzcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgIF9fUHl4X0RFQ1JFRl9T RVQoX19weXhfdl9wcm9wLCBfX3B5eF90XzEpOworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MTcKKy0gKiAgICAgICAgIGNkZWYgbXB2 X25vZGUgcmVzdWx0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njc4Cisr ICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBwcm9wID0gX3N0cmVuYyhw cm9wKQorLSAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgaW50IGVycgorLSAqICAgICAg ICAgd2l0aCBub2dpbDoKKy0gKi8KKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0FzU3Ry aW5nKF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNCkgJiYgUHlFcnJfT2Nj dXJyZWQoKSkpIF9fUFlYX0VSUigwLCA2MTcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdl9w cm9wX2MgPSBfX3B5eF90XzQ7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjE5CistICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AKKysgKiAg ICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZhbHVlKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjZGVmIG1wdl9ub2RlIHYg PSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQorICAqICAgICAgICAgY2Rl ZiBpbnQgZXJyCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9wZXJ0eSgKKy0gKiAgICAg ICAgICAgICAgICAgc2VsZi5fY3R4LAorICAqLworLSAgeworLSAgICAgICNpZmRlZiBXSVRIX1RI UkVBRAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAgICAgIFB5X1VOQkxPQ0tfVEhS RUFEUworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKy0gICAgICAjZW5kaWYKKy0g ICAgICAvKnRyeToqLyB7CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zvcik7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY3OCwgX19weXhfTDFfZXJyb3IpCisr ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fcHl4X3RfMyA9IE5VTEw7CisrICBpZiAo Q1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworKyAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAg ICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF8zKTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgIH0KKysgIH0KKysgIF9fcHl4X3Rf MSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19w eXhfdF8zLCBfX3B5eF92X3ZhbHVlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhf dF8yLCBfX3B5eF92X3ZhbHVlKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3OCwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhfdF80ID0gKChlbnVtIG1w dl9mb3JtYXQpX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2Zvcm1hdChfX3B5eF90XzEpKTsgaWYg KHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNjc4LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19w eXhfdl9mb3JtYXQgPSBfX3B5eF90XzQ7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjIwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Njc5CisrICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQorKyAqICAgICAgICAgY2RlZiBt cHZfZm9ybWF0IGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCisrICogICAgICAgICBj ZGVmIG1wdl9ub2RlIHYgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBjZGVmIGludCBlcnIKKy0g KiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9w ZXJ0eSggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBz ZWxmLl9jdHgsCistICogICAgICAgICAgICAgICAgIHByb3BfYywKKysgKiAgICAgICAgIGNkZWYg Y29uc3QgY2hhciogcHJvcF9jCisgICovCistICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9nZXRf cHJvcGVydHkoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X3Byb3BfYywgTVBWX0ZPUk1BVF9O T0RFLCAoJl9fcHl4X3ZfcmVzdWx0KSk7CistICAgICAgfQorKyAgX19weXhfdF8xID0gX19QeXhf UHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KF9fcHl4X3ZfZm9ybWF0KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjc5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19weXhfdl92ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0 cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhf dnRhYiktPl9wcmVwX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3ZfdmFsdWUsIF9f cHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAK Ky0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjE5CistICogICAgICAg ICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2ODIKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorLSAqICAgICAgICAg d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg IGVyciA9IG1wdl9nZXRfcHJvcGVydHkoCistICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwK Ky0gKi8KKy0gICAgICAvKmZpbmFsbHk6Ki8geworLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sK Ky0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxf Rm9yZ2V0KCk7CistICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgI2VuZGlm CistICAgICAgICAgIGdvdG8gX19weXhfTDU7CistICAgICAgICB9CistICAgICAgICBfX3B5eF9M NTo7CistICAgICAgfQorLSAgfQorLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjYyNgorLSAqICAgICAgICAgICAgICAgICAmcmVzdWx0LAorLSAqICAgICAgICAgICAgICkK Ky0gKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCistICogICAgICAgICB0cnk6CisrICog ICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYworKyAqICAgICAgICAgdHJ5OiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAorKyAq ICAgICAgICAgICAgIHdpdGggbm9naWw6CisgICovCistICBfX3B5eF90XzUgPSAoKF9fcHl4X3Zf ZXJyIDwgMCkgIT0gMCk7CistICBpZiAodW5saWtlbHkoX19weXhfdF81KSkgeworKyAgLyp0cnk6 Ki8geworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjI3CistICog ICAgICAgICAgICAgKQorLSAqICAgICAgICAgaWYgZXJyIDwgMDoKKy0gKiAgICAgICAgICAgICBy YWlzZSBNUFZFcnJvcihlcnIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4MworKyAqICAgICAgICAgY2RlZiBjb25z dCBjaGFyKiBwcm9wX2MKKyAgKiAgICAgICAgIHRyeToKKy0gKiAgICAgICAgICAgICB2ID0gX2Nv bnZlcnRfbm9kZV92YWx1ZShyZXN1bHQpCisrICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcCAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgd2l0aCBub2dpbDoK KysgKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9vcHRpb24oCisgICovCistICAgIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2MjcsIF9fcHl4X0wxX2Vycm9y KQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF8zID0gX19QeXhf UHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9f UFlYX0VSUigwLCA2MjcsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8zKTsKKy0gICAgX19weXhfdF82ID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICAgIF9f cHl4X3RfNiA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgICAgaWYgKGxpa2Vs eShfX3B5eF90XzYpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9H RVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzYp OworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JF Rl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4 X3RfMSA9IChfX3B5eF90XzYpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwg X19weXhfdF82LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90 XzIsIF9fcHl4X3RfMyk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICAg IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYyNywgX19weXhfTDFfZXJy b3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAw LCAwKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAg IF9fUFlYX0VSUigwLCA2MjcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzUgPSBfX1B5 eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X3Byb3ApOyBpZiAodW5saWtlbHkoKCFfX3B5eF90 XzUpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNjgzLCBfX3B5eF9MNF9lcnJv cikKKysgICAgX19weXhfdl9wcm9wX2MgPSBfX3B5eF90XzU7CisgCistICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjYKKy0gKiAgICAgICAgICAgICAgICAgJnJlc3VsdCwK Ky0gKiAgICAgICAgICAgICApCistICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njg0CisgICogICAgICAgICB0cnk6 CisrICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAorKyAqICAgICAgICAgICAgIHdpdGggbm9n aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgZXJy ID0gbXB2X3NldF9vcHRpb24oCisrICogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCisg ICovCistICB9CisrICAgIHsKKysgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAg UHlUaHJlYWRTdGF0ZSAqX3NhdmU7CisrICAgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKysgICAg ICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKysgICAgICAgICNlbmRpZgorKyAgICAgICAg Lyp0cnk6Ki8geworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYyOAor LSAqICAgICAgICAgaWYgZXJyIDwgMDoKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihl cnIpCistICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgICAgICB2ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShyZXN1bHQpCistICogICAgICAgICBm aW5hbGx5OgorKyAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njg1 CisrICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAorKyAqICAgICAgICAgICAgIHdpdGggbm9n aWw6CisrICogICAgICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRfb3B0aW9uKCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCisr ICogICAgICAgICAgICAgICAgICAgICBwcm9wX2MsCisgICovCistICAvKnRyeToqLyB7CisrICAg ICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X3NldF9vcHRpb24oX19weXhfdl9zZWxmLT5fY3R4LCBf X3B5eF92X3Byb3BfYywgTVBWX0ZPUk1BVF9OT0RFLCAoJl9fcHl4X3ZfdikpOworKyAgICAgICAg fQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjI5CistICogICAg ICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjY4NAorICAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgIHYg PSBfY29udmVydF9ub2RlX3ZhbHVlKHJlc3VsdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgZmluYWxseToKKy0gKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorKyAq ICAgICAgICAgICAgIHByb3BfYyA9IHByb3AKKysgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgIGVyciA9IG1w dl9zZXRfb3B0aW9uKAorKyAqICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorICAqLwor LSAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9u b2RlX3ZhbHVlKF9fcHl4X3ZfcmVzdWx0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgNjI5LCBfX3B5eF9MOF9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CistICAgIF9fcHl4X3ZfdiA9IF9fcHl4X3RfMTsKKy0gICAgX19weXhfdF8xID0gMDsKKysg ICAgICAgIC8qZmluYWxseToqLyB7CisrICAgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CisrICAg ICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9G b3JnZXQoKTsKKysgICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgICAgI2Vu ZGlmCisrICAgICAgICAgICAgZ290byBfX3B5eF9MODsKKysgICAgICAgICAgfQorKyAgICAgICAg ICBfX3B5eF9MODo7CisrICAgICAgICB9CisrICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzEKKy0gKiAgICAgICAgICAgICB2ID0gX2NvbnZlcnRf bm9kZV92YWx1ZShyZXN1bHQpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NjkyCisrICogICAgICAgICAgICAgICAgICkKKyAgKiAgICAgICAgIGZpbmFsbHk6CistICogICAg ICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZyZXN1bHQpCistICogICAgICAg ICByZXR1cm4gdgorKyAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKHYpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHJldHVybiBlcnIKKysgKiAK KyAgKi8KKyAgIC8qZmluYWxseToqLyB7CisgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAg eworLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAgICAgUHlUaHJlYWRTdGF0 ZSAqX3NhdmU7CistICAgICAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgICAgICBfX1B5 eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICAvKnRy eToqLyB7CistCistICAgICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjYzMgorLSAqICAgICAgICAgZmluYWxseToKKy0gKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgor LSAqICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZyZXN1bHQpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHJldHVybiB2CistICogCistICov CistICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50cygoJl9fcHl4X3ZfcmVzdWx0KSk7 CistICAgICAgICAgIH0KKy0KKy0gICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYzMQorLSAqICAgICAgICAgICAgIHYgPSBfY29udmVydF9ub2RlX3ZhbHVlKHJlc3Vs dCkKKy0gKiAgICAgICAgIGZpbmFsbHk6CistICogICAgICAgICAgICAgd2l0aCBub2dpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBtcHZfZnJlZV9u b2RlX2NvbnRlbnRzKCZyZXN1bHQpCistICogICAgICAgICByZXR1cm4gdgorLSAqLworLSAgICAg ICAgICAvKmZpbmFsbHk6Ki8geworLSAgICAgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAg ICAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAgICAgICAgIF9fUHl4X0Zhc3RH SUxfRm9yZ2V0KCk7CistICAgICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAg ICAgICAjZW5kaWYKKy0gICAgICAgICAgICAgIGdvdG8gX19weXhfTDEyOworLSAgICAgICAgICAg IH0KKy0gICAgICAgICAgICBfX3B5eF9MMTI6OworLSAgICAgICAgICB9CistICAgICAgfQorLSAg ICAgIGdvdG8gX19weXhfTDk7CisrICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRh YnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19w eXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfdik7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY5MiwgX19weXhfTDFfZXJyb3Ip CisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICAgICAgZ290byBfX3B5eF9MNTsKKyAgICAgfQor LSAgICBfX3B5eF9MOF9lcnJvcjo7CisrICAgIF9fcHl4X0w0X2Vycm9yOjsKKyAgICAgLypleGNl cHRpb24gZXhpdDoqL3sKKyAgICAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKKyAgICAg ICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorLSAgICAgIF9fcHl4X3RfMTAgPSAwOyBfX3B5 eF90XzExID0gMDsgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTMgPSAwOyBfX3B5eF90XzE0ID0g MDsgX19weXhfdF8xNSA9IDA7CisrICAgICAgX19weXhfdF85ID0gMDsgX19weXhfdF8xMCA9IDA7 IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90XzEyID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3Rf MTQgPSAwOworICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK KyAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgICAgICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gICAgICBpZiAoUFlfTUFKT1JfVkVS U0lPTiA+PSAzKSBfX1B5eF9FeGNlcHRpb25Td2FwKCZfX3B5eF90XzEzLCAmX19weXhfdF8xNCwg Jl9fcHl4X3RfMTUpOworLSAgICAgIGlmICgoUFlfTUFKT1JfVkVSU0lPTiA8IDMpIHx8IHVubGlr ZWx5KF9fUHl4X0dldEV4Y2VwdGlvbigmX19weXhfdF8xMCwgJl9fcHl4X3RfMTEsICZfX3B5eF90 XzEyKSA8IDApKSBfX1B5eF9FcnJGZXRjaCgmX19weXhfdF8xMCwgJl9fcHl4X3RfMTEsICZfX3B5 eF90XzEyKTsKKysgICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSBfX1B5eF9FeGNlcHRp b25Td2FwKCZfX3B5eF90XzEyLCAmX19weXhfdF8xMywgJl9fcHl4X3RfMTQpOworKyAgICAgIGlm ICgoUFlfTUFKT1JfVkVSU0lPTiA8IDMpIHx8IHVubGlrZWx5KF9fUHl4X0dldEV4Y2VwdGlvbigm X19weXhfdF85LCAmX19weXhfdF8xMCwgJl9fcHl4X3RfMTEpIDwgMCkpIF9fUHl4X0VyckZldGNo KCZfX3B5eF90XzksICZfX3B5eF90XzEwLCAmX19weXhfdF8xMSk7CisrICAgICAgX19QeXhfWEdP VFJFRihfX3B5eF90XzkpOworICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMCk7CisgICAg ICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzExKTsKKyAgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4 X3RfMTIpOworICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMyk7CisgICAgICAgX19QeXhf WEdPVFJFRihfX3B5eF90XzE0KTsKKy0gICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTUpOwor LSAgICAgIF9fcHl4X3RfNyA9IF9fcHl4X2xpbmVubzsgX19weXhfdF84ID0gX19weXhfY2xpbmVu bzsgX19weXhfdF85ID0gX19weXhfZmlsZW5hbWU7CisrICAgICAgX19weXhfdF82ID0gX19weXhf bGluZW5vOyBfX3B5eF90XzcgPSBfX3B5eF9jbGluZW5vOyBfX3B5eF90XzggPSBfX3B5eF9maWxl bmFtZTsKKyAgICAgICB7CistICAgICAgICB7CistICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhS RUFECistICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgICAgICAgUHlf VU5CTE9DS19USFJFQURTCistICAgICAgICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwor LSAgICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICAgIC8qdHJ5OiovIHsKKy0KKy0gICAgICAg ICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzIKKy0gKiAgICAgICAg IGZpbmFsbHk6CistICogICAgICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICAg ICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50cygmcmVzdWx0KSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICByZXR1cm4gdgorLSAqIAorLSAqLworLSAgICAgICAgICAgICAg bXB2X2ZyZWVfbm9kZV9jb250ZW50cygoJl9fcHl4X3ZfcmVzdWx0KSk7CistICAgICAgICAgICAg fQorLQorLSAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzEK Ky0gKiAgICAgICAgICAgICB2ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShyZXN1bHQpCistICogICAg ICAgICBmaW5hbGx5OgorLSAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9kZV9jb250ZW50 cygmcmVzdWx0KQorLSAqICAgICAgICAgcmV0dXJuIHYKKy0gKi8KKy0gICAgICAgICAgICAvKmZp bmFsbHk6Ki8geworLSAgICAgICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAg ICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgICAgICAgIF9fUHl4X0Zhc3RHSUxf Rm9yZ2V0KCk7CistICAgICAgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAg ICAgICAgI2VuZGlmCistICAgICAgICAgICAgICAgIGdvdG8gX19weXhfTDE3OworLSAgICAgICAg ICAgICAgfQorLSAgICAgICAgICAgICAgX19weXhfTDE3OjsKKy0gICAgICAgICAgICB9CistICAg ICAgICB9CisrICAgICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+ X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjkyLCBfX3B5eF9MMTBfZXJyb3IpCisrICAgICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworICAgICAgIH0KKyAgICAgICBpZiAoUFlfTUFKT1JfVkVSU0lP TiA+PSAzKSB7CisrICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEyKTsKKyAgICAgICAg IF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTMpOworICAgICAgICAgX19QeXhfWEdJVkVSRUYoX19w eXhfdF8xNCk7CistICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzE1KTsKKy0gICAgICAg IF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9fcHl4X3RfMTMsIF9fcHl4X3RfMTQsIF9fcHl4X3RfMTUp OworKyAgICAgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMiwgX19weXhfdF8xMywg X19weXhfdF8xNCk7CisgICAgICAgfQorKyAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfOSk7 CisgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMCk7CisgICAgICAgX19QeXhfWEdJVkVS RUYoX19weXhfdF8xMSk7CistICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMik7CistICAg ICAgX19QeXhfRXJyUmVzdG9yZShfX3B5eF90XzEwLCBfX3B5eF90XzExLCBfX3B5eF90XzEyKTsK Ky0gICAgICBfX3B5eF90XzEwID0gMDsgX19weXhfdF8xMSA9IDA7IF9fcHl4X3RfMTIgPSAwOyBf X3B5eF90XzEzID0gMDsgX19weXhfdF8xNCA9IDA7IF9fcHl4X3RfMTUgPSAwOworLSAgICAgIF9f cHl4X2xpbmVubyA9IF9fcHl4X3RfNzsgX19weXhfY2xpbmVubyA9IF9fcHl4X3RfODsgX19weXhf ZmlsZW5hbWUgPSBfX3B5eF90Xzk7CisrICAgICAgX19QeXhfRXJyUmVzdG9yZShfX3B5eF90Xzks IF9fcHl4X3RfMTAsIF9fcHl4X3RfMTEpOworKyAgICAgIF9fcHl4X3RfOSA9IDA7IF9fcHl4X3Rf MTAgPSAwOyBfX3B5eF90XzExID0gMDsgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTMgPSAwOyBf X3B5eF90XzE0ID0gMDsKKysgICAgICBfX3B5eF9saW5lbm8gPSBfX3B5eF90XzY7IF9fcHl4X2Ns aW5lbm8gPSBfX3B5eF90Xzc7IF9fcHl4X2ZpbGVuYW1lID0gX19weXhfdF84OworKyAgICAgIGdv dG8gX19weXhfTDFfZXJyb3I7CisrICAgICAgX19weXhfTDEwX2Vycm9yOjsKKysgICAgICBpZiAo UFlfTUFKT1JfVkVSU0lPTiA+PSAzKSB7CisrICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90 XzEyKTsKKysgICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTMpOworKyAgICAgICAgX19Q eXhfWEdJVkVSRUYoX19weXhfdF8xNCk7CisrICAgICAgICBfX1B5eF9FeGNlcHRpb25SZXNldChf X3B5eF90XzEyLCBfX3B5eF90XzEzLCBfX3B5eF90XzE0KTsKKysgICAgICB9CisrICAgICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAwOworKyAgICAgIF9fUHl4X1hERUNS RUYoX19weXhfdF8xMCk7IF9fcHl4X3RfMTAgPSAwOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19w eXhfdF8xMSk7IF9fcHl4X3RfMTEgPSAwOworKyAgICAgIF9fcHl4X3RfMTIgPSAwOyBfX3B5eF90 XzEzID0gMDsgX19weXhfdF8xNCA9IDA7CisgICAgICAgZ290byBfX3B5eF9MMV9lcnJvcjsKKyAg ICAgfQorLSAgICBfX3B5eF9MOTo7CisrICAgIF9fcHl4X0w1OjsKKyAgIH0KKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzMKKy0gKiAgICAgICAgICAgICB3aXRoIG5v Z2lsOgorLSAqICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZyZXN1bHQp CistICogICAgICAgICByZXR1cm4gdiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjkzCisrICogICAgICAgICBmaW5hbGx5 OgorKyAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKHYpCisrICogICAgICAg ICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKyAgKiAgICAg QF9lcnJvcnMKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX1B5eF9JTkNS RUYoX19weXhfdl92KTsKKy0gIF9fcHl4X3IgPSBfX3B5eF92X3Y7CisrICBfX3B5eF90XzEgPSBf X1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDY5MywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKysgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworICAg Z290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 MTIKKy0gKiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjY3NAorICAqIAorLSAqICAgICBkZWYgZ2V0X3Byb3BlcnR5KHNlbGYs IHByb3ApOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFw czogbXB2X2dldF9wcm9wZXJ0eSIiIgorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgc2V0 X29wdGlvbihzZWxmLCBwcm9wLCB2YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCisgICogICAgICAg ICBhc3NlcnQgc2VsZi5fY3R4CisgICovCisgCitAQCAtMTMwNjQsMTA0NyArMTMxNzQsNzk4IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzIwZ2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7Cisg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmdldF9wcm9wZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9f cHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuQ29udGV4dC5zZXRfb3B0aW9uIiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5eF9yID0gTlVMTDsKKyAgIF9fcHl4X0ww OjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl92KTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhf dl9wcm9wKTsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjYzNgorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo2OTYKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKy0gKiAgICAgZGVmIHNldF9wcm9wZXJ0 eShzZWxmLCBwcm9wLCB2YWx1ZT1UcnVlLCBhc3luY2hyb25vdXM9RmFsc2UsIGRhdGE9Tm9uZSk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZf c2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIiCisrICogICAgIGRlZiBp bml0aWFsaXplKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICAiIiJXcmFwczogbXB2X2luaXRpYWxpemUiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9j dHgKKyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIzc2V0X3Byb3BlcnR5KFB5T2Jq ZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhf a3dkcyk7IC8qcHJvdG8qLworLXN0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMjJzZXRfcHJvcGVydHlbXSA9ICJXcmFwczogbXB2X3NldF9wcm9wZXJ0 eSBhbmQgbXB2X3NldF9wcm9wZXJ0eV9hc3luYyI7Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjNzZXRfcHJvcGVydHkoUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2Rz KSB7CistICBQeU9iamVjdCAqX19weXhfdl9wcm9wID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92 X3ZhbHVlID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2FzeW5jaHJvbm91cyA9IDA7CistICBQ eU9iamVjdCAqX19weXhfdl9kYXRhID0gMDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAg Y29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8g PSAwOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzIzaW5pdGlhbGl6ZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VE IFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KKytzdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIyaW5pdGlhbGl6ZVtdID0gIldyYXBzOiBtcHZf aW5pdGlhbGl6ZSI7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMjNpbml0aWFsaXplKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhP Tl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwor ICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJzZXRfcHJvcGVydHkgKHdyYXBwZXIpIiwgMCk7CistICB7CistICAgIHN0YXRpYyBQeU9i amVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3Byb3AsJl9fcHl4X25fc192 YWx1ZSwmX19weXhfbl9zX2FzeW5jaHJvbm91cywmX19weXhfbl9zX2RhdGEsMH07CistICAgIFB5 T2JqZWN0KiB2YWx1ZXNbNF0gPSB7MCwwLDAsMH07CistICAgIHZhbHVlc1sxXSA9ICgoUHlPYmpl Y3QgKilQeV9UcnVlKTsKKy0gICAgdmFsdWVzWzJdID0gKChQeU9iamVjdCAqKVB5X0ZhbHNlKTsK Ky0gICAgdmFsdWVzWzNdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOworLSAgICBpZiAodW5saWtl bHkoX19weXhfa3dkcykpIHsKKy0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAgY29u c3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7Cist ICAgICAgc3dpdGNoIChwb3NfYXJncykgeworLSAgICAgICAgY2FzZSAgNDogdmFsdWVzWzNdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAzKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKKy0gICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMik7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNl ICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAg ICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlU dXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VH SDsKKy0gICAgICAgIGNhc2UgIDA6IGJyZWFrOworLSAgICAgICAgZGVmYXVsdDogZ290byBfX3B5 eF9MNV9hcmd0dXBsZV9lcnJvcjsKKy0gICAgICB9CistICAgICAga3dfYXJncyA9IFB5RGljdF9T aXplKF9fcHl4X2t3ZHMpOworLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKy0gICAgICAgIGNh c2UgIDA6CistICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0 SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHJvcCkpICE9IDApKSBrd19hcmdzLS07Cist ICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgICBDWVRI T05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAxOgorLSAgICAgICAgaWYgKGt3X2FyZ3Mg PiAwKSB7CistICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVt U3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc192YWx1ZSk7CistICAgICAgICAgIGlmICh2YWx1ZSkg eyB2YWx1ZXNbMV0gPSB2YWx1ZTsga3dfYXJncy0tOyB9CistICAgICAgICB9CistICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAyOgorLSAgICAgICAgaWYgKGt3X2Fy Z3MgPiAwKSB7CistICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJ dGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19hc3luY2hyb25vdXMpOworLSAgICAgICAgICBp ZiAodmFsdWUpIHsgdmFsdWVzWzJdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorLSAgICAgICAgfQor LSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMzoKKy0gICAgICAg IGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9Q eURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZGF0YSk7CistICAgICAgICAg IGlmICh2YWx1ZSkgeyB2YWx1ZXNbM10gPSB2YWx1ZTsga3dfYXJncy0tOyB9CistICAgICAgICB9 CistICAgICAgfQorLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAgICAg IGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19w eXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInNldF9wcm9wZXJ0eSIpIDwgMCkp IF9fUFlYX0VSUigwLCA2MzYsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAgIH0KKy0gICAgfSBlbHNl IHsKKy0gICAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpIHsKKy0gICAg ICAgIGNhc2UgIDQ6IHZhbHVlc1szXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMyk7 CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAzOiB2YWx1ZXNb Ml0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOworLSAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRF TShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAg IGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Cist ICAgICAgICBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVf ZXJyb3I7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4X3ZfcHJvcCA9IHZhbHVlc1swXTsK Ky0gICAgX19weXhfdl92YWx1ZSA9IHZhbHVlc1sxXTsKKy0gICAgX19weXhfdl9hc3luY2hyb25v dXMgPSB2YWx1ZXNbMl07CistICAgIF9fcHl4X3ZfZGF0YSA9IHZhbHVlc1szXTsKKy0gIH0KKy0g IGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CistICBfX3B5eF9MNV9hcmd0 dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgic2V0X3Byb3BlcnR5 IiwgMCwgMSwgNCwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA2 MzYsIF9fcHl4X0wzX2Vycm9yKQorLSAgX19weXhfTDNfZXJyb3I6OworLSAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5zZXRfcHJvcGVydHkiLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIE5VTEw7CistICBfX3B5eF9MNF9hcmd1bWVudF91 bnBhY2tpbmdfZG9uZTo7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzIyc2V0X3Byb3BlcnR5KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfcHJvcCwgX19weXhf dl92YWx1ZSwgX19weXhfdl9hc3luY2hyb25vdXMsIF9fcHl4X3ZfZGF0YSk7CisrICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiaW5pdGlhbGl6ZSAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4 X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjJpbml0aWFsaXpl KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4 X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMnNldF9w cm9wZXJ0eShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X3Zh bHVlLCBQeU9iamVjdCAqX19weXhfdl9hc3luY2hyb25vdXMsIFB5T2JqZWN0ICpfX3B5eF92X2Rh dGEpIHsKKy0gIGVudW0gbXB2X2Zvcm1hdCBfX3B5eF92X2Zvcm1hdDsKKy0gIHN0cnVjdCBtcHZf bm9kZSBfX3B5eF92X3Y7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMjJpbml0aWFsaXplKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworICAgaW50IF9fcHl4X3ZfZXJy OworLSAgdWludDY0X3QgX19weXhfdl9kYXRhX2lkOworLSAgY2hhciBjb25zdCAqX19weXhfdl9w cm9wX2M7CistICBQeU9iamVjdCAqX19weXhfdl91c2VyZGF0YXMgPSBOVUxMOworICAgUHlPYmpl Y3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5 T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7 CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKy0gIGVudW0gbXB2X2Zvcm1hdCBfX3B5 eF90XzQ7CistICBjaGFyIGNvbnN0ICpfX3B5eF90XzU7CistICBpbnQgX19weXhfdF82OworLSAg aW50IF9fcHl4X3RfNzsKKy0gIFB5X2hhc2hfdCBfX3B5eF90Xzg7CistICBQeU9iamVjdCAqX19w eXhfdF85ID0gTlVMTDsKKy0gIGludCBfX3B5eF90XzEwOworLSAgUHlPYmplY3QgKl9fcHl4X3Rf MTEgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfMTI7CistICBjaGFyIGNvbnN0ICpfX3B5eF90XzEz OworLSAgUHlPYmplY3QgKl9fcHl4X3RfMTQgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3Rf MTUgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMTYgPSBOVUxMOworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMTcgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMTggPSBOVUxMOworLSAg UHlPYmplY3QgKl9fcHl4X3RfMTkgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisg ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X3Byb3BlcnR5IiwgMCk7 CistICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJpbml0aWFsaXplIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjM4CistICogICAgIGRlZiBzZXRfcHJvcGVydHkoc2VsZiwgcHJvcCwgdmFsdWU9 VHJ1ZSwgYXN5bmNocm9ub3VzPUZhbHNlLCBkYXRhPU5vbmUpOgorLSAqICAgICAgICAgIiIiV3Jh cHM6IG1wdl9zZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRfcHJvcGVydHlfYXN5bmMiIiIKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2OTgKKysgKiAgICAgZGVmIGluaXRpYWxp emUoc2VsZik6CisrICogICAgICAgICAiIiJXcmFwczogbXB2X2luaXRpYWxpemUiIiIKKyAgKiAg ICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKy0gKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1h dCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZhbHVlKQorKyAqICAgICAgICAgY2RlZiBpbnQg ZXJyCisrICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworICAgI2lmbmRlZiBDWVRIT05fV0lU SE9VVF9BU1NFUlRJT05TCisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKyAg ICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworICAgICAgIFB5 RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCA2 MzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA2OTgsIF9fcHl4X0wxX2Vy cm9yKQorICAgICB9CisgICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2MzkKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X3Byb3BlcnR5 IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIiCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzAwCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAg ICBwcm9wID0gX3N0cmVuYyhwcm9wKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkK Ky0gKiAgICAgICAgIGNkZWYgbXB2X25vZGUgdiA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZh bHVlLCBmb3JtYXQpCisrICogICAgICAgICBjZGVmIGludCBlcnIKKysgKiAgICAgICAgIHdpdGgg bm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBlcnIg PSBtcHZfaW5pdGlhbGl6ZShzZWxmLl9jdHgpCisrICogICAgICAgICByZXR1cm4gZXJyCisgICov CistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVu Yyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDYzOSwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IE5VTEw7 CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNr KF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfMik7CistICAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkgeworLSAgICAgIFB5T2JqZWN0KiBm dW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzMpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAg ICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQor LSAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25l QXJnKF9fcHl4X3RfMiwgX19weXhfdl9wcm9wKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8z KTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDYzOSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19QeXhfREVDUkVG X1NFVChfX3B5eF92X3Byb3AsIF9fcHl4X3RfMSk7CistICBfX3B5eF90XzEgPSAwOworKyAgewor KyAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwor KyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworKyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIo KTsKKysgICAgICAjZW5kaWYKKysgICAgICAvKnRyeToqLyB7CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjQwCistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Cist ICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQorLSAqICAgICAgICAgY2RlZiBtcHZfZm9y bWF0IGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgbXB2X25vZGUgdiA9IHNlbGYuX3ByZXBfbmF0aXZl X3ZhbHVlKHZhbHVlLCBmb3JtYXQpCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NzAxCisgICogICAgICAgICBjZGVmIGludCBlcnIKKysgKiAgICAgICAgIHdpdGgg bm9naWw6CisrICogICAgICAgICAgICAgZXJyID0gbXB2X2luaXRpYWxpemUoc2VsZi5fY3R4KSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gZXJyCisrICog CisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zvcik7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY0MCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VO UEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAg ICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICBpZiAobGlr ZWx5KF9fcHl4X3RfMykpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9H RVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsK Ky0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQo X19weXhfdF8yLCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfMSA9IChfX3B5 eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBf X3B5eF92X3ZhbHVlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5 eF92X3ZhbHVlKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsK Ky0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY0MCwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19weXhfdF80ID0gKChlbnVtIG1wdl9mb3JtYXQp X19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2Zvcm1hdChfX3B5eF90XzEpKTsgaWYgKHVubGlrZWx5 KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNjQwLCBfX3B5eF9MMV9lcnJvcikKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgX19weXhfdl9mb3Jt YXQgPSBfX3B5eF90XzQ7CisrICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9pbml0aWFsaXplKF9f cHl4X3Zfc2VsZi0+X2N0eCk7CisrICAgICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjY0MQorLSAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKy0gKiAg ICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZhbHVlKQor LSAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUodmFs dWUsIGZvcm1hdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDAKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9j dHgKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBk YXRhX2lkCistICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9m b3JtYXQoX19weXhfdl9mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA2NDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Cist ICBfX3B5eF92X3YgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbmF0aXZlX3Zh bHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSwgX19weXhfdF8xKTsKKy0gIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLQorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjY0NQorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBkYXRhX2lkCist ICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYworLSAqICAgICAgICAgdHJ5OiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAor LSAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CisrICogICAgICAgICB3aXRoIG5v Z2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgZXJyID0g bXB2X2luaXRpYWxpemUoc2VsZi5fY3R4KQorKyAqICAgICAgICAgcmV0dXJuIGVycgorICAqLwor LSAgLyp0cnk6Ki8geworKyAgICAgIC8qZmluYWxseToqLyB7CisrICAgICAgICAvKm5vcm1hbCBl eGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAgICAgICAgX19QeXhf RmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAg ICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5eF9MNTsKKysgICAgICAgIH0KKysgICAgICAg IF9fcHl4X0w1OjsKKysgICAgICB9CisrICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2NDYKKy0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jCist ICogICAgICAgICB0cnk6CistICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czoK Ky0gKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3MDIKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAg ICAgZXJyID0gbXB2X2luaXRpYWxpemUoc2VsZi5fY3R4KQorKyAqICAgICAgICAgcmV0dXJuIGVy ciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiB3YWl0X2V2 ZW50KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICovCistICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5 T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNSkg JiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA2NDYsIF9fcHl4X0w0X2Vycm9yKQor LSAgICBfX3B5eF92X3Byb3BfYyA9IF9fcHl4X3RfNTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf cik7CisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcwMiwgX19weXhfTDFfZXJyb3Ip CisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fcHl4X3IgPSBfX3B5eF90XzE7Cisr ICBfX3B5eF90XzEgPSAwOworKyAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjY0NworLSAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAg ICAgIHByb3BfYyA9IHByb3AKKy0gKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgIHdpdGggbm9n aWw6CistICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfc2V0X3Byb3BlcnR5KAorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5NgorKyAqIAorKyAqICAgICBAX2Vy cm9ycworKyAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9pbml0aWFsaXplIiIiCisrICogICAg ICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICovCistICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2Jq ZWN0X0lzVHJ1ZShfX3B5eF92X2FzeW5jaHJvbm91cyk7IGlmICh1bmxpa2VseShfX3B5eF90XzYg PCAwKSkgX19QWVhfRVJSKDAsIDY0NywgX19weXhfTDRfZXJyb3IpCistICAgIF9fcHl4X3RfNyA9 ICgoIV9fcHl4X3RfNikgIT0gMCk7CistICAgIGlmIChfX3B5eF90XzcpIHsKKyAKKy0gICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjQ4CistICogICAgICAgICAgICAgcHJv cF9jID0gcHJvcAorLSAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CistICogICAg ICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRfcHJvcGVydHkoCistICogICAgICAg ICAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorLSAqLworLSAgICAgIHsKKy0gICAgICAgICAg I2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAg ICAgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgX19QeXhfRmFzdEdJTF9SZW1l bWJlcigpOworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgLyp0cnk6Ki8geworKyAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5Db250ZXh0LmluaXRpYWxpemUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworKyAgX19weXhfTDA6OworKyAgX19QeXhf WEdJVkVSRUYoX19weXhfcik7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysg IHJldHVybiBfX3B5eF9yOworK30KKyAKKy0gICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjQ5CistICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czoK Ky0gKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICAgICAgICAg IGVyciA9IG1wdl9zZXRfcHJvcGVydHkoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCistICogICAgICAgICAgICAgICAg ICAgICAgICAgcHJvcF9jLAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDQK KysgKiAgICAgICAgIHJldHVybiBlcnIKKysgKiAKKysgKiAgICAgZGVmIHdhaXRfZXZlbnQoc2Vs ZiwgdGltZW91dD1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgIiIiV3JhcHM6IG1wdl93YWl0X2V2ZW50IiIiCisrICogICAgICAgICBhc3NlcnQgc2VsZi5f Y3R4CisgICovCistICAgICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfc2V0X3Byb3BlcnR5KF9f cHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9wcm9wX2MsIE1QVl9GT1JNQVRfTk9ERSwgKCZfX3B5 eF92X3YpKTsKKy0gICAgICAgICAgfQorIAorLSAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjQ4CistICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAorLSAqICAg ICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CistICogICAgICAgICAgICAgICAgIHdpdGgg bm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAg ICAgIGVyciA9IG1wdl9zZXRfcHJvcGVydHkoCistICogICAgICAgICAgICAgICAgICAgICAgICAg c2VsZi5fY3R4LAorLSAqLworLSAgICAgICAgICAvKmZpbmFsbHk6Ki8geworLSAgICAgICAgICAg IC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0g ICAgICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CistICAgICAgICAgICAgICBQeV9C TE9DS19USFJFQURTCistICAgICAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgICAgIGdvdG8g X19weXhfTDk7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIF9fcHl4X0w5OjsKKy0gICAg ICAgICAgfQorKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjV3YWl0X2V2ZW50KFB5T2JqZWN0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7 IC8qcHJvdG8qLworK3N0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMjR3YWl0X2V2ZW50W10gPSAiV3JhcHM6IG1wdl93YWl0X2V2ZW50IjsKKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNXdh aXRfZXZlbnQoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5 T2JqZWN0ICpfX3B5eF9rd2RzKSB7CisrICBQeU9iamVjdCAqX19weXhfdl90aW1lb3V0ID0gMDsK KysgIGludCBfX3B5eF9saW5lbm8gPSAwOworKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUg PSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3Ig PSAwOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJ3YWl0X2V2ZW50ICh3cmFwcGVyKSIsIDApOworKyAgeworKyAgICBzdGF0aWMg UHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc190aW1lb3V0LDB9Owor KyAgICBQeU9iamVjdCogdmFsdWVzWzFdID0gezB9OworKyAgICB2YWx1ZXNbMF0gPSAoKFB5T2Jq ZWN0ICopUHlfTm9uZSk7CisrICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworKyAgICAg IFB5X3NzaXplX3Qga3dfYXJnczsKKysgICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0g UHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKysgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7 CisrICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2Fy Z3MsIDApOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMDog YnJlYWs7CisrICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwor KyAgICAgIH0KKysgICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7CisrICAg ICAgc3dpdGNoIChwb3NfYXJncykgeworKyAgICAgICAgY2FzZSAgMDoKKysgICAgICAgIGlmIChr d19hcmdzID4gMCkgeworKyAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3Rf R2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfdGltZW91dCk7CisrICAgICAgICAgIGlm ICh2YWx1ZSkgeyB2YWx1ZXNbMF0gPSB2YWx1ZTsga3dfYXJncy0tOyB9CisrICAgICAgICB9Cisr ICAgICAgfQorKyAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKysgICAgICAgIGlm ICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhf cHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIndhaXRfZXZlbnQiKSA8IDApKSBfX1BZ WF9FUlIoMCwgNzA0LCBfX3B5eF9MM19lcnJvcikKKysgICAgICB9CisrICAgIH0gZWxzZSB7Cisr ICAgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKSB7CisrICAgICAgICBj YXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworKyAg ICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMDogYnJlYWs7CisrICAg ICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworICAgICAgIH0KKysg ICAgfQorKyAgICBfX3B5eF92X3RpbWVvdXQgPSB2YWx1ZXNbMF07CisrICB9CisrICBnb3RvIF9f cHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworKyAgX19weXhfTDVfYXJndHVwbGVfZXJy b3I6OworKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIndhaXRfZXZlbnQiLCAwLCAwLCAx LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDcwNCwgX19weXhf TDNfZXJyb3IpCisrICBfX3B5eF9MM19lcnJvcjo7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LndhaXRfZXZlbnQiLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOworKyAgcmV0dXJuIE5VTEw7CisrICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9u ZTo7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzI0d2FpdF9ldmVudCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X3RpbWVvdXQpOworIAorLSAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTUKKy0gKiAgICAgICAgICAgICAgICAgICAg ICAgICAmdgorLSAqICAgICAgICAgICAgICAgICAgICAgKQorLSAqICAgICAgICAgICAgICAgICBy ZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBk YXRhX2lkID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKy0gKiAgICAgICAgICAgICB1c2VyZGF0YXMg PSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQorLSAqLworLSAgICAgIF9f UHl4X1hERUNSRUYoX19weXhfcik7CistICAgICAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJv bV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA2NTUsIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CistICAgICAgX19weXhfdF8xID0gMDsKKy0gICAg ICBnb3RvIF9fcHl4X0wzX3JldHVybjsKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9Cisg CistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0NworLSAqICAgICAg ICAgdHJ5OgorLSAqICAgICAgICAgICAgIHByb3BfYyA9IHByb3AKKy0gKiAgICAgICAgICAgICBp ZiBub3QgYXN5bmNocm9ub3VzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBt cHZfc2V0X3Byb3BlcnR5KAorK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzI0d2FpdF9ldmVudChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Rp bWVvdXQpIHsKKysgIGRvdWJsZSBfX3B5eF92X3RpbWVvdXRfZDsKKysgIHN0cnVjdCBtcHZfZXZl bnQgKl9fcHl4X3ZfZXZlbnQ7CisrICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisrICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgZG91YmxlIF9fcHl4X3RfMTsKKysgIGludCBfX3B5 eF90XzI7CisrICBkb3VibGUgX19weXhfdF8zOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5V TEw7CisrICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8g PSAwOworKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndhaXRfZXZlbnQi LCAwKTsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDYKKysgKiAg ICAgZGVmIHdhaXRfZXZlbnQoc2VsZiwgdGltZW91dD1Ob25lKToKKysgKiAgICAgICAgICIiIldy YXBzOiBtcHZfd2FpdF9ldmVudCIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjZGVmIGRvdWJsZSB0aW1lb3V0 X2QgPSB0aW1lb3V0IGlmIHRpbWVvdXQgaXMgbm90IE5vbmUgZWxzZSAtMQorKyAqICAgICAgICAg Y2RlZiBtcHZfZXZlbnQqIGV2ZW50CisgICovCisrICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FT U0VSVElPTlMKKysgIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworKyAgICBpZiAo dW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7CisrICAgICAgUHlFcnJfU2V0 Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7CisrICAgICAgX19QWVhfRVJSKDAsIDcwNiwgX19w eXhfTDFfZXJyb3IpCisgICAgIH0KKysgIH0KKysgICNlbmRpZgorIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjU2CistICogICAgICAgICAgICAgICAgICAgICApCist ICogICAgICAgICAgICAgICAgIHJldHVybiBlcnIKKy0gKiAgICAgICAgICAgICBkYXRhX2lkID0g PHVpbnQ2NF90Pmhhc2goZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5v bmUpCistICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzA3CisrICogICAgICAgICAiIiJXcmFwczogbXB2X3dh aXRfZXZlbnQiIiIKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIGNk ZWYgZG91YmxlIHRpbWVvdXRfZCA9IHRpbWVvdXQgaWYgdGltZW91dCBpcyBub3QgTm9uZSBlbHNl IC0xICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWYgbXB2X2V2 ZW50KiBldmVudAorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gICAgX19weXhfdF84 ID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF84ID09 ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA2NTYsIF9fcHl4X0w0X2Vycm9yKQorLSAg ICBfX3B5eF92X2RhdGFfaWQgPSAoKHVpbnQ2NF90KV9fcHl4X3RfOCk7CistCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTcKKy0gKiAgICAgICAgICAgICAgICAgcmV0 dXJuIGVycgorLSAqICAgICAgICAgICAgIGRhdGFfaWQgPSA8dWludDY0X3Q+aGFzaChkYXRhKQor LSAqICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFf aWQsIE5vbmUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgTm9uZToKKy0gKiAgICAgICAgICAgICAgICAgc2VsZi5yZXBseV91c2Vy ZGF0YVtkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCistICovCist ICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLT5y ZXBseV91c2VyZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDY1NywgX19weXhfTDRfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4 X3ZfZGF0YV9pZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDY1Nywg X19weXhfTDRfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX3B5 eF90XzkgPSBOVUxMOworLSAgICBfX3B5eF90XzEwID0gMDsKKy0gICAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAg ICBfX3B5eF90XzkgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICAgIGlmIChs aWtlbHkoX19weXhfdF85KSkgeworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhf dF85KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworLSAgICAgICAgX19weXhfdF8xMCA9IDE7 CistICAgICAgfQorLSAgICB9CistICAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKy0gICAgaWYg KFB5RnVuY3Rpb25fQ2hlY2soX19weXhfdF8yKSkgeworLSAgICAgIFB5T2JqZWN0ICpfX3B5eF90 ZW1wWzNdID0ge19fcHl4X3RfOSwgX19weXhfdF8zLCBQeV9Ob25lfTsKKy0gICAgICBfX3B5eF90 XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9f cHl4X3RfMTAsIDIrX19weXhfdF8xMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDY1NywgX19weXhfTDRfZXJyb3IpCistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzkpOyBfX3B5eF90XzkgPSAwOworLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAg ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICB9IGVsc2UK Ky0gICAgI2VuZGlmCistICAgICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCistICAgIGlmIChfX1B5 eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2soX19weXhfdF8yKSkgeworLSAgICAgIFB5T2JqZWN0ICpf X3B5eF90ZW1wWzNdID0ge19fcHl4X3RfOSwgX19weXhfdF8zLCBQeV9Ob25lfTsKKy0gICAgICBf X3B5eF90XzEgPSBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4X3Rl bXArMS1fX3B5eF90XzEwLCAyK19fcHl4X3RfMTApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF85KTsgX19weXhfdF85ID0gMDsKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAg fSBlbHNlCistICAgICNlbmRpZgorLSAgICB7CistICAgICAgX19weXhfdF8xMSA9IFB5VHVwbGVf TmV3KDIrX19weXhfdF8xMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xMSkpIF9fUFlYX0VSUigw LCA2NTcsIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzExKTsK Ky0gICAgICBpZiAoX19weXhfdF85KSB7CistICAgICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Rf OSk7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xMSwgMCwgX19weXhfdF85KTsgX19weXhfdF85 ID0gTlVMTDsKKy0gICAgICB9CistICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzMpOworLSAg ICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xMSwgMCtfX3B5eF90XzEwLCBfX3B5eF90XzMp OworLSAgICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gICAgICBfX1B5eF9HSVZFUkVGKFB5 X05vbmUpOworLSAgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xMSwgMStfX3B5eF90XzEw LCBQeV9Ob25lKTsKKy0gICAgICBfX3B5eF90XzMgPSAwOworLSAgICAgIF9fcHl4X3RfMSA9IF9f UHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90XzExLCBOVUxMKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjU3LCBfX3B5eF9MNF9lcnJvcikKKy0gICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8x MSk7IF9fcHl4X3RfMTEgPSAwOworLSAgICB9CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworLSAgICBfX3B5eF92X3VzZXJkYXRhcyA9IF9fcHl4X3RfMTsKKy0g ICAgX19weXhfdF8xID0gMDsKKysgIF9fcHl4X3RfMiA9IChfX3B5eF92X3RpbWVvdXQgIT0gUHlf Tm9uZSk7CisrICBpZiAoKF9fcHl4X3RfMiAhPSAwKSkgeworKyAgICBfX3B5eF90XzMgPSBfX3B5 eF9QeUZsb2F0X0FzRG91YmxlKF9fcHl4X3ZfdGltZW91dCk7IGlmICh1bmxpa2VseSgoX19weXhf dF8zID09IChkb3VibGUpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNzA3 LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xID0gX19weXhfdF8zOworKyAgfSBlbHNl IHsKKysgICAgX19weXhfdF8xID0gLTEuMDsKKysgIH0KKysgIF9fcHl4X3ZfdGltZW91dF9kID0g X19weXhfdF8xOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjU4 CistICogICAgICAgICAgICAgZGF0YV9pZCA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCistICogICAg ICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoZGF0YV9pZCwgTm9u ZSkKKy0gKiAgICAgICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2Rh dGFfaWRdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKy0gKiAgICAgICAgICAg ICB1c2VyZGF0YXMuYWRkKCkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MDkKKysgKiAgICAgICAgIGNkZWYgZG91YmxlIHRpbWVvdXRfZCA9IHRpbWVvdXQgaWYgdGltZW91 dCBpcyBub3QgTm9uZSBlbHNlIC0xCisrICogICAgICAgICBjZGVmIG1wdl9ldmVudCogZXZlbnQK KysgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgICAgICBldmVudCA9IG1wdl93YWl0X2V2ZW50KHNlbGYuX2N0eCwgdGltZW91dF9k KQorKyAqICAgICAgICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpCisgICovCist ICAgIF9fcHl4X3RfNyA9IChfX3B5eF92X3VzZXJkYXRhcyA9PSBQeV9Ob25lKTsKKy0gICAgX19w eXhfdF82ID0gKF9fcHl4X3RfNyAhPSAwKTsKKy0gICAgaWYgKF9fcHl4X3RfNikgeworKyAgewor KyAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwor KyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworKyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIo KTsKKysgICAgICAjZW5kaWYKKysgICAgICAvKnRyeToqLyB7CisgCistICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1OQorLSAqICAgICAgICAgICAgIHVzZXJkYXRhcyA9 IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCistICogICAgICAgICAgICAg aWYgdXNlcmRhdGFzIGlzIE5vbmU6CistICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNl cmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCist ICogICAgICAgICAgICAgd2l0aCBub2dpbDoKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3MTAKKysgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50KiBldmVudAorKyAq ICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBldmVudCA9IG1wdl93YWl0X2V2 ZW50KHNlbGYuX2N0eCwgdGltZW91dF9kKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICByZXR1cm4gRXZlbnQoKS5faW5pdChldmVudCwgc2VsZikKKysgKiAKKyAgKi8K Ky0gICAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX1Jl cGx5VXNlckRhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2NTks IF9fcHl4X0w0X2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICAg IF9fcHl4X3RfMTEgPSBOVUxMOworLSAgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg dW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAgICAgIF9fcHl4X3Rf MTEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICAgICAgaWYgKGxpa2VseShf X3B5eF90XzExKSkgeworLSAgICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9H RVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Rf MTEpOworLSAgICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgICAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworLSAgICAgICAgfQorKyAgICAgICAg X19weXhfdl9ldmVudCA9IG1wdl93YWl0X2V2ZW50KF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhf dl90aW1lb3V0X2QpOworICAgICAgIH0KKy0gICAgICBfX3B5eF90XzEgPSAoX19weXhfdF8xMSkg PyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzExLCBfX3B5eF92 X2RhdGEpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfZGF0 YSk7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzExKTsgX19weXhfdF8xMSA9IDA7Cist ICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjU5LCBfX3B5eF9M NF9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgICBpZiAodW5saWtlbHkoX19Q eXhfU2V0SXRlbUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2RhdGFf aWQsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAs IDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA2NTksIF9fcHl4X0w0X2Vycm9yKQorLSAgICAgIF9f UHl4X0lOQ1JFRihfX3B5eF90XzEpOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl91 c2VyZGF0YXMsIF9fcHl4X3RfMSk7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7CistCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjY1OAorLSAqICAgICAgICAgICAgIGRhdGFfaWQgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorLSAq ICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQs IE5vbmUpCistICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YVtkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCistICogICAgICAg ICAgICAgdXNlcmRhdGFzLmFkZCgpCistICovCistICAgIH0KKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjY2MAorLSAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcyBp cyBOb25lOgorLSAqICAgICAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2RhdGFfaWRd ID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKy0gKiAgICAgICAgICAgICB1c2Vy ZGF0YXMuYWRkKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg IHdpdGggbm9naWw6CistICogICAgICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRfcHJvcGVydHlf YXN5bmMoCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwOQorKyAq ICAgICAgICAgY2RlZiBkb3VibGUgdGltZW91dF9kID0gdGltZW91dCBpZiB0aW1lb3V0IGlzIG5v dCBOb25lIGVsc2UgLTEKKysgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50KiBldmVudAorKyAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgICAgIGV2ZW50ID0gbXB2X3dhaXRfZXZlbnQoc2VsZi5fY3R4LCB0aW1lb3V0X2QpCisrICog ICAgICAgICByZXR1cm4gRXZlbnQoKS5faW5pdChldmVudCwgc2VsZikKKyAgKi8KKy0gICAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19w eXhfbl9zX2FkZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY2MCwg X19weXhfTDRfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX3B5 eF90XzExID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAgICBfX3B5eF90XzExID0gUHlNZXRo b2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKy0gICAgICBpZiAobGlrZWx5KF9fcHl4X3RfMTEpKSB7 CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19w eXhfdF8yKTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzExKTsKKy0gICAgICAgIF9f UHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Rf MiwgZnVuY3Rpb24pOworKyAgICAgIC8qZmluYWxseToqLyB7CisrICAgICAgICAvKm5vcm1hbCBl eGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAgICAgICAgX19QeXhf RmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAg ICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5eF9MNTsKKysgICAgICAgIH0KKysgICAgICAg IF9fcHl4X0w1OjsKKyAgICAgICB9CistICAgIH0KKy0gICAgX19weXhfdF8xID0gKF9fcHl4X3Rf MTEpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMTEpIDog X19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7CistICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xMSk7IF9fcHl4X3RfMTEgPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA2NjAsIF9fcHl4X0w0X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgfQorIAor LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYxCistICogICAgICAgICAg ICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlV c2VyRGF0YShkYXRhKQorLSAqICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorLSAqICAgICAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICAgICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0eV9hc3luYygKKy0gKiAgICAgICAgICAg ICAgICAgICAgIHNlbGYuX2N0eCwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MTEKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgZXZlbnQgPSBt cHZfd2FpdF9ldmVudChzZWxmLl9jdHgsIHRpbWVvdXRfZCkKKysgKiAgICAgICAgIHJldHVybiBF dmVudCgpLl9pbml0KGV2ZW50LCBzZWxmKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogCisrICogICAgIGRlZiB3YWtldXAoc2VsZik6CisgICovCistICAgIHsKKy0gICAgICAgICNp ZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAg ICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsK Ky0gICAgICAgICNlbmRpZgorLSAgICAgICAgLyp0cnk6Ki8geworKyAgX19QeXhfWERFQ1JFRihf X3B5eF9yKTsKKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2Jq ZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KSk7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDcxMSwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgIF9fcHl4X3RfNSA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3RfNCktPl9fcHl4X3Z0YWIpLT5f aW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19w eXhfdF80KSwgX19weXhfdl9ldmVudCwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA3MTEsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKysgIF9fcHl4X3IgPSBfX3B5eF90XzU7CisrICBfX3B5eF90XzUgPSAw OworKyAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjY2MgorLSAqICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorLSAqICAg ICAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgICAgIGVyciA9IG1wdl9zZXRf cHJvcGVydHlfYXN5bmMoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICAgICAgICAgICAgIHNlbGYuX2N0eCwKKy0gKiAgICAgICAgICAgICAgICAgICAgIGRhdGFfaWQs CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzA0CisrICogICAgICAgICBy ZXR1cm4gZXJyCisrICogCisrICogICAgIGRlZiB3YWl0X2V2ZW50KHNlbGYsIHRpbWVvdXQ9Tm9u ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIldyYXBzOiBt cHZfd2FpdF9ldmVudCIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqLworLSAg ICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9zZXRfcHJvcGVydHlfYXN5bmMoX19weXhfdl9zZWxm LT5fY3R4LCBfX3B5eF92X2RhdGFfaWQsIF9fcHl4X3ZfcHJvcF9jLCBNUFZfRk9STUFUX05PREUs ICgmX19weXhfdl92KSk7CistICAgICAgICB9CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NjYxCistICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNl cmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorLSAqICAg ICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorLSAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2 X3NldF9wcm9wZXJ0eV9hc3luYygKKy0gKiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwK Ky0gKi8KKy0gICAgICAgIC8qZmluYWxseToqLyB7CistICAgICAgICAgIC8qbm9ybWFsIGV4aXQ6 Ki97CistICAgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgICAgX19QeXhf RmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAg ICAgICAgI2VuZGlmCistICAgICAgICAgICAgZ290byBfX3B5eF9MMTM7CistICAgICAgICAgIH0K Ky0gICAgICAgICAgX19weXhfTDEzOjsKKy0gICAgICAgIH0KKy0gICAgfQorLSAgfQorKyAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CisrICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LndhaXRfZXZlbnQiLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBO VUxMOworKyAgX19weXhfTDA6OworKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisrICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzAKKy0gKiAgICAgICAgICAgICAg ICAgKQorLSAqICAgICAgICAgZmluYWxseToKKy0gKiAgICAgICAgICAgICBzZWxmLl9mcmVlX25h dGl2ZV92YWx1ZSh2KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBy ZXR1cm4gZXJyCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxMworKyAqICAg ICAgICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpCisgICogCisrICogICAgIGRl ZiB3YWtldXAoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICIiIldyYXBzOiBtcHZfd2FrZXVwIiIiCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Cisg ICovCistICAvKmZpbmFsbHk6Ki8geworLSAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgIF9f cHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUo X19weXhfdl9zZWxmLCBfX3B5eF92X3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA2NzAsIF9fcHl4X0wxX2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAg ICAgIGdvdG8gX19weXhfTDU7CistICAgIH0KKy0gICAgX19weXhfTDRfZXJyb3I6OworLSAgICAv KmV4Y2VwdGlvbiBleGl0OioveworLSAgICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQor LSAgICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfYXNzaWduCistICAgICAgX19weXhfdF8xNCA9IDA7 IF9fcHl4X3RfMTUgPSAwOyBfX3B5eF90XzE2ID0gMDsgX19weXhfdF8xNyA9IDA7IF9fcHl4X3Rf MTggPSAwOyBfX3B5eF90XzE5ID0gMDsKKy0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzExKTsgX19weXhf dF8xMSA9IDA7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7CistICAgICAgaWYgKFBZ X01BSk9SX1ZFUlNJT04gPj0gMykgX19QeXhfRXhjZXB0aW9uU3dhcCgmX19weXhfdF8xNywgJl9f cHl4X3RfMTgsICZfX3B5eF90XzE5KTsKKy0gICAgICBpZiAoKFBZX01BSk9SX1ZFUlNJT04gPCAz KSB8fCB1bmxpa2VseShfX1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfMTQsICZfX3B5eF90XzE1 LCAmX19weXhfdF8xNikgPCAwKSkgX19QeXhfRXJyRmV0Y2goJl9fcHl4X3RfMTQsICZfX3B5eF90 XzE1LCAmX19weXhfdF8xNik7CistICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE0KTsKKy0g ICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTUpOworLSAgICAgIF9fUHl4X1hHT1RSRUYoX19w eXhfdF8xNik7CistICAgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzE3KTsKKy0gICAgICBfX1B5 eF9YR09UUkVGKF9fcHl4X3RfMTgpOworLSAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xOSk7 CistICAgICAgX19weXhfdF8xMCA9IF9fcHl4X2xpbmVubzsgX19weXhfdF8xMiA9IF9fcHl4X2Ns aW5lbm87IF9fcHl4X3RfMTMgPSBfX3B5eF9maWxlbmFtZTsKKy0gICAgICB7CistICAgICAgICBf X3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVl KF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgNjcwLCBfX3B5eF9MMTVfZXJyb3IpCistICAgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OworLSAgICAgIH0KKy0gICAgICBpZiAoUFlfTUFKT1JfVkVSU0lPTiA+PSAzKSB7CistICAgICAg ICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzE3KTsKKy0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3RfMTgpOworLSAgICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xOSk7CistICAgICAg ICBfX1B5eF9FeGNlcHRpb25SZXNldChfX3B5eF90XzE3LCBfX3B5eF90XzE4LCBfX3B5eF90XzE5 KTsKKy0gICAgICB9CistICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xNCk7CistICAgICAg X19QeXhfWEdJVkVSRUYoX19weXhfdF8xNSk7CistICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhf dF8xNik7CistICAgICAgX19QeXhfRXJyUmVzdG9yZShfX3B5eF90XzE0LCBfX3B5eF90XzE1LCBf X3B5eF90XzE2KTsKKy0gICAgICBfX3B5eF90XzE0ID0gMDsgX19weXhfdF8xNSA9IDA7IF9fcHl4 X3RfMTYgPSAwOyBfX3B5eF90XzE3ID0gMDsgX19weXhfdF8xOCA9IDA7IF9fcHl4X3RfMTkgPSAw OworLSAgICAgIF9fcHl4X2xpbmVubyA9IF9fcHl4X3RfMTA7IF9fcHl4X2NsaW5lbm8gPSBfX3B5 eF90XzEyOyBfX3B5eF9maWxlbmFtZSA9IF9fcHl4X3RfMTM7CistICAgICAgZ290byBfX3B5eF9M MV9lcnJvcjsKKy0gICAgICBfX3B5eF9MMTVfZXJyb3I6OworLSAgICAgIGlmIChQWV9NQUpPUl9W RVJTSU9OID49IDMpIHsKKy0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTcpOworLSAg ICAgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xOCk7CistICAgICAgICBfX1B5eF9YR0lWRVJF RihfX3B5eF90XzE5KTsKKy0gICAgICAgIF9fUHl4X0V4Y2VwdGlvblJlc2V0KF9fcHl4X3RfMTcs IF9fcHl4X3RfMTgsIF9fcHl4X3RfMTkpOworLSAgICAgIH0KKy0gICAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMTQpOyBfX3B5eF90XzE0ID0gMDsKKy0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMTUpOyBfX3B5eF90XzE1ID0gMDsKKy0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTYp OyBfX3B5eF90XzE2ID0gMDsKKy0gICAgICBfX3B5eF90XzE3ID0gMDsgX19weXhfdF8xOCA9IDA7 IF9fcHl4X3RfMTkgPSAwOworLSAgICAgIGdvdG8gX19weXhfTDFfZXJyb3I7CistICAgIH0KKy0g ICAgX19weXhfTDNfcmV0dXJuOiB7CistICAgICAgX19weXhfdF8xOSA9IF9fcHl4X3I7CistICAg ICAgX19weXhfciA9IDA7CistICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0 cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhf dnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfdik7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3MCwgX19weXhfTDFfZXJyb3IpCist ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgICAgX19weXhfciA9IF9fcHl4X3RfMTk7CistICAg ICAgX19weXhfdF8xOSA9IDA7CistICAgICAgZ290byBfX3B5eF9MMDsKKysKKysvKiBQeXRob24g d3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzI3d2FrZXVwKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVT RUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworK3N0YXRpYyBjaGFyIF9fcHl4X2RvY185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjZ3YWtldXBbXSA9ICJXcmFwczogbXB2X3dh a2V1cCI7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMjd3YWtldXAoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQ eU9iamVjdCAqdW51c2VkKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndha2V1 cCAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMjZ3YWtldXAoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7CisrCisrICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9f cHl4X3I7CisrfQorKworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzI2d2FrZXVwKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBO VUxMOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIGludCBfX3B5eF9saW5lbm8g PSAwOworKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndha2V1cCIsIDAp OworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxNQorKyAqICAgICBk ZWYgd2FrZXVwKHNlbGYpOgorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIKKysg KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfd2FrZXVwKHNlbGYu X2N0eCkKKysgKi8KKysgICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUworKyAgaWYg KHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CisrICAgIGlmICh1bmxpa2VseSghKF9fcHl4 X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKysgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2Vy dGlvbkVycm9yKTsKKysgICAgICBfX1BZWF9FUlIoMCwgNzE1LCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgfQorLSAgICBfX3B5eF9MNTo7CisgICB9CisrICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzEKKy0gKiAgICAgICAgIGZpbmFsbHk6CistICogICAg ICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUodikKKy0gKiAgICAgICAgIHJldHVybiBl cnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjcxNgorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIKKysg KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBtcHZfd2FrZXVwKHNlbGYu X2N0eCkKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMKKyAgKi8KKy0gIF9fUHl4X1hERUNSRUYoX19w eXhfcik7CistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3MSwgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF90XzE7 CistICBfX3B5eF90XzEgPSAwOworLSAgZ290byBfX3B5eF9MMDsKKysgIHsKKysgICAgICAjaWZk ZWYgV0lUSF9USFJFQUQKKysgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICBQeV9V TkJMT0NLX1RIUkVBRFMKKysgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CisrICAgICAg I2VuZGlmCisrICAgICAgLyp0cnk6Ki8geworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjYzNgorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjcxNworKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAqICAgICAgICAgd2l0aCBub2dp bDoKKysgKiAgICAgICAgICAgICBtcHZfd2FrZXVwKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgc2V0X3By b3BlcnR5KHNlbGYsIHByb3AsIHZhbHVlPVRydWUsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1O b25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6 IG1wdl9zZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRfcHJvcGVydHlfYXN5bmMiIiIKKysgKiAgICAg ZGVmIHNldF93YWtldXBfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgorKyAqLworKyAgICAgICAg bXB2X3dha2V1cChfX3B5eF92X3NlbGYtPl9jdHgpOworKyAgICAgIH0KKysKKysgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE2CisrICogICAgICAgICAiIiJXcmFwczog bXB2X3dha2V1cCIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAqICAgICAgICAg d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAg IG1wdl93YWtldXAoc2VsZi5fY3R4KQorKyAqIAorKyAqLworKyAgICAgIC8qZmluYWxseToqLyB7 CisrICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJF QUQKKysgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAgUHlfQkxP Q0tfVEhSRUFEUworKyAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5eF9MNTsK KysgICAgICAgIH0KKysgICAgICAgIF9fcHl4X0w1OjsKKysgICAgICB9CisrICB9CisrCisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzEzCisrICogICAgICAgICByZXR1cm4g RXZlbnQoKS5faW5pdChldmVudCwgc2VsZikKKysgKiAKKysgKiAgICAgZGVmIHdha2V1cChzZWxm KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIiV3JhcHM6IG1w dl93YWtldXAiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKi8KKyAKKyAgIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JF RihQeV9Ob25lKTsKKysgIGdvdG8gX19weXhfTDA7CisgICBfX3B5eF9MMV9lcnJvcjo7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2 aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5zZXRfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBf X3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkNvbnRleHQud2FrZXVwIiwgX19weXhfY2xpbmVubywgX19weXhfbGlu ZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5eF9yID0gTlVMTDsKKyAgIF9fcHl4X0wwOjsK Ky0gIF9fUHl4X1hERUNSRUYoX19weXhfdl91c2VyZGF0YXMpOworLSAgX19QeXhfWERFQ1JFRihf X3B5eF92X3Byb3ApOworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njc0CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjcxOQorKyAqICAgICAgICAgICAgIG1wdl93YWtldXAoc2VsZi5fY3R4KQorICAq IAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBwcm9wLCB2 YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIi V3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCisrICogICAgIGRlZiBzZXRfd2FrZXVwX2NhbGxiYWNr KHNlbGYsIGNhbGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgIiIiV3JhcHM6IG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrIiIiCisgICogICAgICAgICBhc3Nl cnQgc2VsZi5fY3R4CisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNXNldF9vcHRp b24oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0 ICpfX3B5eF9rd2RzKTsgLypwcm90byovCistc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHNldF9vcHRpb25bXSA9ICJXcmFwczogbXB2X3NldF9v cHRpb24iOworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzI1c2V0X29wdGlvbihQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92 X3Byb3AgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfdmFsdWUgPSAwOworLSAgaW50IF9fcHl4 X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBp bnQgX19weXhfY2xpbmVubyA9IDA7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjlzZXRfd2FrZXVwX2NhbGxiYWNrKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2NhbGxiYWNrKTsgLypwcm90byovCisrc3Rh dGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yOHNldF93 YWtldXBfY2FsbGJhY2tbXSA9ICJXcmFwczogbXB2X3NldF93YWtldXBfY2FsbGJhY2siOworK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI5 c2V0X3dha2V1cF9jYWxsYmFjayhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9jYWxsYmFjaykgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVm TmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfb3B0 aW9uICh3cmFwcGVyKSIsIDApOworLSAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9w eWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19wcm9wLCZfX3B5eF9uX3NfdmFsdWUsMH07CistICAg IFB5T2JqZWN0KiB2YWx1ZXNbMl0gPSB7MCwwfTsKKy0gICAgdmFsdWVzWzFdID0gKChQeU9iamVj dCAqKVB5X1RydWUpOworLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKKy0gICAgICBQ eV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5 VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CistICAgICAgc3dpdGNoIChwb3NfYXJncykgewor LSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdz LCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZh bHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBDWVRI T05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1 bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQorLSAgICAgIGt3X2Fy Z3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7 CistICAgICAgICBjYXNlICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19Q eXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3Byb3ApKSAhPSAwKSkg a3dfYXJncy0tOworLSAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwor LSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMToKKy0gICAgICAg IGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9Q eURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfdmFsdWUpOworLSAgICAgICAg ICBpZiAodmFsdWUpIHsgdmFsdWVzWzFdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorLSAgICAgICAg fQorLSAgICAgIH0KKy0gICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7CistICAgICAg ICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9f cHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJzZXRfb3B0aW9uIikgPCAwKSkg X19QWVhfRVJSKDAsIDY3NCwgX19weXhfTDNfZXJyb3IpCistICAgICAgfQorLSAgICB9IGVsc2Ug eworLSAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgeworLSAgICAg ICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsK Ky0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1sw XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBicmVhazsKKy0g ICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQor LSAgICB9CistICAgIF9fcHl4X3ZfcHJvcCA9IHZhbHVlc1swXTsKKy0gICAgX19weXhfdl92YWx1 ZSA9IHZhbHVlc1sxXTsKKy0gIH0KKy0gIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5n X2RvbmU7CistICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1 cGxlSW52YWxpZCgic2V0X29wdGlvbiIsIDAsIDEsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhf YXJncykpOyBfX1BZWF9FUlIoMCwgNjc0LCBfX3B5eF9MM19lcnJvcikKKy0gIF9fcHl4X0wzX2Vy cm9yOjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQu c2V0X29wdGlvbiIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gTlVMTDsKKy0g IF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3IgPSBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjRzZXRfb3B0aW9uKCgoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9f cHl4X3ZfcHJvcCwgX19weXhfdl92YWx1ZSk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgic2V0X3dha2V1cF9jYWxsYmFjayAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjhzZXRfd2FrZXVwX2NhbGxiYWNr KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4 X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X2NhbGxiYWNrKSk7CisgCisgICAvKiBmdW5j dGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAg cmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI0c2V0X29wdGlvbihzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X3ZhbHVlKSB7CistICBlbnVtIG1wdl9mb3JtYXQg X19weXhfdl9mb3JtYXQ7CistICBzdHJ1Y3QgbXB2X25vZGUgX19weXhfdl92OworLSAgaW50IF9f cHl4X3ZfZXJyOworLSAgY2hhciBjb25zdCAqX19weXhfdl9wcm9wX2M7Cisrc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjhzZXRfd2FrZXVw X2NhbGxiYWNrKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2FsbGJhY2spIHsKKysgIHVpbnQ2NF90 IF9fcHl4X3ZfbmFtZTsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIFB5 T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworKyAgdWludDY0X3QgX19weXhfdF8yOworICAgUHlP YmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CistICBlbnVtIG1wdl9mb3JtYXQgX19weXhfdF80Owor LSAgY2hhciBjb25zdCAqX19weXhfdF81OworLSAgaW50IF9fcHl4X3RfNjsKKy0gIGludCBfX3B5 eF90Xzc7CistICBjaGFyIGNvbnN0ICpfX3B5eF90Xzg7CistICBQeU9iamVjdCAqX19weXhfdF85 ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEwID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpf X3B5eF90XzExID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEyID0gTlVMTDsKKy0gIFB5 T2JqZWN0ICpfX3B5eF90XzEzID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzE0ID0gTlVM TDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9 IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhf Y2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X29wdGlvbiIs IDApOworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfcHJvcCk7CisrICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgic2V0X3dha2V1cF9jYWxsYmFjayIsIDApOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjY3NgorLSAqICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBw cm9wLCB2YWx1ZT1UcnVlKToKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X29wdGlvbiIi IgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyMQorKyAqICAgICBkZWYg c2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6CisrICogICAgICAgICAiIiJXcmFw czogbXB2X3NldF93YWtldXBfY2FsbGJhY2siIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9j dHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcHJvcCA9IF9zdHJl bmMocHJvcCkKKy0gKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3Jt YXRfZm9yKHZhbHVlKQorKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90 PmlkKHNlbGYpCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKyAgKi8KKyAg ICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUworICAgaWYgKHVubGlrZWx5KCFQeV9P cHRpbWl6ZUZsYWcpKSB7CisgICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAh PSAwKSkpIHsKKyAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKKy0g ICAgICBfX1BZWF9FUlIoMCwgNjc2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1BZWF9FUlIo MCwgNzIxLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgfQorICAgfQorICAgI2VuZGlmCisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njc3CistICogICAgICAgICAiIiJXcmFw czogbXB2X3NldF9vcHRpb24iIiIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MjIKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayIiIgor ICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorLSAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMo cHJvcCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBtcHZf Zm9ybWF0IGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCistICogICAgICAgICBjZGVm IG1wdl9ub2RlIHYgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQorKyAq ICAgICAgICAgY2RlZiB1aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90PmlkKHNlbGYpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFj aworKyAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zZXQoY2FsbGJhY2spCisgICovCist ICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7 IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY3NywgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IE5VTEw7Cist ICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9f cHl4X3RfMikpKSB7CistICAgIF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3Rf Mik7CistICAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5j dGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzMpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAg X19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAg X19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhf dF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfMiwgX19weXhfdl9wcm9wKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsg X19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDY3NywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X2J1aWx0aW5faWQsICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNzIyLCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CistICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfcHJvcCwgX19weXhf dF8xKTsKKy0gIF9fcHl4X3RfMSA9IDA7CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Bc191 aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2NF90 KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3MjIsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX3B5 eF92X25hbWUgPSAoKHVpbnQ2NF90KV9fcHl4X3RfMik7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Njc4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NzIzCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAgICBwcm9wID0g X3N0cmVuYyhwcm9wKQorLSAqICAgICAgICAgY2RlZiBtcHZfZm9ybWF0IGZvcm1hdCA9IHNlbGYu X2Zvcm1hdF9mb3IodmFsdWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIGNkZWYgbXB2X25vZGUgdiA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3Jt YXQpCistICogICAgICAgICBjZGVmIGludCBlcnIKKysgKiAgICAgICAgIGNkZWYgdWludDY0X3Qg bmFtZSA9IDx1aW50NjRfdD5pZChzZWxmKQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNh bGxiYWNrICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuY2Fs bGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNrKQorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8K Ky0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9f cHl4X3Zfc2VsZiksIF9fcHl4X25fc19mb3JtYXRfZm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgNjc4LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOworLSAgX19weXhfdF8zID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4 X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgIGlmIChsaWtlbHkoX19w eXhfdF8zKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOworKyAgX19Q eXhfSU5DUkVGKF9fcHl4X3ZfY2FsbGJhY2spOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF92X2Nh bGxiYWNrKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmNhbGxiYWNrKTsKKysgIF9f UHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmNhbGxiYWNrKTsKKysgIF9fcHl4X3Zfc2VsZi0+Y2Fs bGJhY2sgPSBfX3B5eF92X2NhbGxiYWNrOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjcyNAorKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90 PmlkKHNlbGYpCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKysgKiAgICAg ICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNrKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIG1wdl9z ZXRfd2FrZXVwX2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1lKQor KyAqLworKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3Nl bGYtPmNhbGxiYWNrdGhyZWFkLCBfX3B5eF9uX3Nfc2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMCwgNzI0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOworKyAgX19weXhfdF80ID0gTlVMTDsKKysgIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7CisrICAgIF9fcHl4 X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7CisrICAgIGlmIChsaWtlbHkoX19w eXhfdF80KSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzMpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworICAgICAg IF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90 XzIsIGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywgZnVuY3Rp b24pOworICAgICB9CisgICB9CistICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl92YWx1ZSkgOiBf X1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl92YWx1ZSk7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf dF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8zLCBf X3B5eF90XzQsIF9fcHl4X3ZfY2FsbGJhY2spIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzMsIF9fcHl4X3ZfY2FsbGJhY2spOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQp OyBfX3B5eF90XzQgPSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgNzI0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAg X19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBfX3B5eF90XzQgPSAo KGVudW0gbXB2X2Zvcm1hdClfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9ybWF0KF9fcHl4X3Rf MSkpOyBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA2NzgsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7 CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3Zf Zm9ybWF0ID0gX19weXhfdF80OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjY3OQorLSAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKy0gKiAgICAgICAgIGNk ZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZhbHVlKQorLSAqICAgICAg ICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUodmFsdWUsIGZvcm1h dCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBpbnQgZXJy CistICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYworKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjcyNQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxi YWNrCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChjYWxsYmFjaykKKysgKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9jdHgsIF9jX2NhbGxiYWNrLCA8 dm9pZCo+bmFtZSkKKysgKiAKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2Zvcm1hdChfX3B5eF92X2Zvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDY3OSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKy0gIF9fcHl4X3ZfdiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fcHJl cF9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzEpOwor LSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICB7CisrICAgICAg I2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CisrICAgICAg UHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworKyAg ICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2ODIKKy0gKiAgICAgICAgIGNkZWYgaW50IGVycgorLSAqICAgICAgICAg Y2RlZiBjb25zdCBjaGFyKiBwcm9wX2MKKy0gKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHByb3BfYyA9IHByb3AKKy0gKiAgICAgICAg ICAgICB3aXRoIG5vZ2lsOgorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjcyNgorKyAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zZXQoY2FsbGJhY2spCisr ICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIG1wdl9zZXRfd2FrZXVwX2Nh bGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1lKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiBnZXRfd2FrZXVwX3BpcGUoc2VsZik6 CisgICovCistICAvKnRyeToqLyB7CisrICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhf X3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2NhbGxi YWNrLCAoKHZvaWQgKilfX3B5eF92X25hbWUpKTsKKysgICAgICB9CisgCistICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2ODMKKy0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hh ciogcHJvcF9jCistICogICAgICAgICB0cnk6CistICogICAgICAgICAgICAgcHJvcF9jID0gcHJv cCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgd2l0aCBub2dp bDoKKy0gKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9vcHRpb24oCisrICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyNQorKyAqICAgICAgICAgc2VsZi5jYWxs YmFjayA9IGNhbGxiYWNrCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChjYWxs YmFjaykKKysgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9jdHgsIF9j X2NhbGxiYWNrLCA8dm9pZCo+bmFtZSkKKysgKiAKKyAgKi8KKy0gICAgX19weXhfdF81ID0gX19Q eXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCghX19weXhf dF81KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDY4MywgX19weXhfTDRfZXJy b3IpCistICAgIF9fcHl4X3ZfcHJvcF9jID0gX19weXhfdF81OworKyAgICAgIC8qZmluYWxseToq LyB7CisrICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lUSF9U SFJFQUQKKysgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAgUHlf QkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5eF9M NTsKKysgICAgICAgIH0KKysgICAgICAgIF9fcHl4X0w1OjsKKysgICAgICB9CisrICB9CisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2ODQKKy0gKiAgICAgICAgIHRy eToKKy0gKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCistICogICAgICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBl cnIgPSBtcHZfc2V0X29wdGlvbigKKy0gKiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MTkKKysgKiAgICAgICAgICAg ICBtcHZfd2FrZXVwKHNlbGYuX2N0eCkKKysgKiAKKysgKiAgICAgZGVmIHNldF93YWtldXBfY2Fs bGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICAiIiJXcmFwczogbXB2X3NldF93YWtldXBfY2FsbGJhY2siIiIKKysgKiAgICAgICAg IGFzc2VydCBzZWxmLl9jdHgKKyAgKi8KKy0gICAgeworLSAgICAgICAgI2lmZGVmIFdJVEhfVEhS RUFECistICAgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKy0gICAgICAgIFB5X1VOQkxPQ0tf VEhSRUFEUworLSAgICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAgICAgI2Vu ZGlmCistICAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo2ODUKKy0gKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCistICog ICAgICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3Nl dF9vcHRpb24oICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAg ICAgICAgIHNlbGYuX2N0eCwKKy0gKiAgICAgICAgICAgICAgICAgICAgIHByb3BfYywKKysgIC8q IGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JF RihQeV9Ob25lKTsKKysgIGdvdG8gX19weXhfTDA7CisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Cisr ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1 dHRlci5saWJzLm1wdi5Db250ZXh0LnNldF93YWtldXBfY2FsbGJhY2siLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSBOVUxMOworKyAg X19weXhfTDA6OworKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisrICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysKKysvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzI4CisrICogICAgICAgICAgICAgbXB2X3NldF93YWtl dXBfY2FsbGJhY2soc2VsZi5fY3R4LCBfY19jYWxsYmFjaywgPHZvaWQqPm5hbWUpCisrICogCisr ICogICAgIGRlZiBnZXRfd2FrZXVwX3BpcGUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfZ2V0X3dha2V1cF9waXBlIiIiCisrICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICovCistICAgICAgICAgIF9fcHl4X3ZfZXJyID0g bXB2X3NldF9vcHRpb24oX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X3Byb3BfYywgTVBWX0ZP Uk1BVF9OT0RFLCAoJl9fcHl4X3ZfdikpOworLSAgICAgICAgfQorIAorLSAgICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4NAorLSAqICAgICAgICAgdHJ5OgorLSAqICAg ICAgICAgICAgIHByb3BfYyA9IHByb3AKKy0gKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgIGVyciA9IG1wdl9z ZXRfb3B0aW9uKAorLSAqICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorKy8qIFB5dGhv biB3cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMzFnZXRfd2FrZXVwX3BpcGUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwg Q1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCisrc3RhdGljIGNoYXIg X19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93YWtldXBfcGlw ZVtdID0gIldyYXBzOiBtcHZfZ2V0X3dha2V1cF9waXBlIjsKKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMWdldF93YWtldXBfcGlwZShQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsK KysgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X3dha2V1cF9waXBlICh3cmFwcGVy KSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8zMGdldF93YWtldXBfcGlwZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19w eXhfcjsKKyt9CisrCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMzBnZXRfd2FrZXVwX3BpcGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKSB7CisrICBpbnQgX19weXhfdl9w aXBlOworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworKyAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworKyAgaW50IF9fcHl4X2xp bmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQg X19weXhfY2xpbmVubyA9IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X3dh a2V1cF9waXBlIiwgMCk7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzMwCisrICogICAgIGRlZiBnZXRfd2FrZXVwX3BpcGUoc2VsZik6CisrICogICAgICAgICAiIiJX cmFwczogbXB2X2dldF93YWtldXBfcGlwZSIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjZGVmIGludCBwaXBl CisrICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgICAgICAgLypmaW5hbGx5OiovIHsK Ky0gICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAgICAjaWZkZWYgV0lUSF9U SFJFQUQKKy0gICAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAgICAgICAgICAg IFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgICBnb3Rv IF9fcHl4X0w4OworLSAgICAgICAgICB9CistICAgICAgICAgIF9fcHl4X0w4OjsKKy0gICAgICAg IH0KKysgICNpZm5kZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUworKyAgaWYgKHVubGlrZWx5 KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CisrICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+ X2N0eCAhPSAwKSkpIHsKKysgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9y KTsKKysgICAgICBfX1BZWF9FUlIoMCwgNzMwLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgfQorICAg fQorKyAgI2VuZGlmCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njky CistICogICAgICAgICAgICAgICAgICkKKy0gKiAgICAgICAgIGZpbmFsbHk6CistICogICAgICAg ICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUodikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgcmV0dXJuIGVycgorLSAqIAorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjczMgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAqICAg ICAgICAgY2RlZiBpbnQgcGlwZQorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHBpcGUgPSBtcHZfZ2V0X3dha2V1cF9w aXBlKHNlbGYuX2N0eCkKKysgKiAgICAgICAgIHJldHVybiBwaXBlCisgICovCistICAvKmZpbmFs bHk6Ki8geworLSAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgIF9fcHl4X3RfMSA9ICgoc3Ry dWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5 eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBf X3B5eF92X3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2OTIsIF9f cHl4X0wxX2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICAgIGdvdG8gX19weXhf TDU7CistICAgIH0KKy0gICAgX19weXhfTDRfZXJyb3I6OworLSAgICAvKmV4Y2VwdGlvbiBleGl0 OioveworLSAgICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQorLSAgICAgIF9fUHl4X1B5 VGhyZWFkU3RhdGVfYXNzaWduCistICAgICAgX19weXhfdF85ID0gMDsgX19weXhfdF8xMCA9IDA7 IF9fcHl4X3RfMTEgPSAwOyBfX3B5eF90XzEyID0gMDsgX19weXhfdF8xMyA9IDA7IF9fcHl4X3Rf MTQgPSAwOworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK Ky0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgICAg X19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICAgIGlmIChQWV9N QUpPUl9WRVJTSU9OID49IDMpIF9fUHl4X0V4Y2VwdGlvblN3YXAoJl9fcHl4X3RfMTIsICZfX3B5 eF90XzEzLCAmX19weXhfdF8xNCk7CistICAgICAgaWYgKChQWV9NQUpPUl9WRVJTSU9OIDwgMykg fHwgdW5saWtlbHkoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5eF90XzksICZfX3B5eF90XzEwLCAm X19weXhfdF8xMSkgPCAwKSkgX19QeXhfRXJyRmV0Y2goJl9fcHl4X3RfOSwgJl9fcHl4X3RfMTAs ICZfX3B5eF90XzExKTsKKy0gICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfOSk7CistICAgICAg X19QeXhfWEdPVFJFRihfX3B5eF90XzEwKTsKKy0gICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3Rf MTEpOworLSAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhfdF8xMik7CistICAgICAgX19QeXhfWEdP VFJFRihfX3B5eF90XzEzKTsKKy0gICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTQpOworLSAg ICAgIF9fcHl4X3RfNiA9IF9fcHl4X2xpbmVubzsgX19weXhfdF83ID0gX19weXhfY2xpbmVubzsg X19weXhfdF84ID0gX19weXhfZmlsZW5hbWU7CistICAgICAgeworLSAgICAgICAgX19weXhfdF8x ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92 X3NlbGYsIF9fcHl4X3Zfdik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDY5MiwgX19weXhfTDEwX2Vycm9yKQorLSAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CistICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAg ICB9CistICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgeworLSAgICAgICAgX19QeXhf WEdJVkVSRUYoX19weXhfdF8xMik7CistICAgICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzEz KTsKKy0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTQpOworLSAgICAgICAgX19QeXhf RXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMiwgX19weXhfdF8xMywgX19weXhfdF8xNCk7CisrICB7 CisrICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7 CisrICAgICAgUHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJl cigpOworKyAgICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsKKysKKysgICAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzMKKysgKiAgICAgICAgIGNkZWYgaW50IHBp cGUKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgcGlwZSA9IG1wdl9n ZXRfd2FrZXVwX3BpcGUoc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICByZXR1cm4gcGlwZQorKyAqIAorKyAqLworKyAgICAgICAgX19weXhfdl9waXBl ID0gbXB2X2dldF93YWtldXBfcGlwZShfX3B5eF92X3NlbGYtPl9jdHgpOworICAgICAgIH0KKy0g ICAgICBfX1B5eF9YR0lWRVJFRihfX3B5eF90XzkpOworLSAgICAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3RfMTApOworLSAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTEpOworLSAgICAgIF9f UHl4X0VyclJlc3RvcmUoX19weXhfdF85LCBfX3B5eF90XzEwLCBfX3B5eF90XzExKTsKKy0gICAg ICBfX3B5eF90XzkgPSAwOyBfX3B5eF90XzEwID0gMDsgX19weXhfdF8xMSA9IDA7IF9fcHl4X3Rf MTIgPSAwOyBfX3B5eF90XzEzID0gMDsgX19weXhfdF8xNCA9IDA7CistICAgICAgX19weXhfbGlu ZW5vID0gX19weXhfdF82OyBfX3B5eF9jbGluZW5vID0gX19weXhfdF83OyBfX3B5eF9maWxlbmFt ZSA9IF9fcHl4X3RfODsKKy0gICAgICBnb3RvIF9fcHl4X0wxX2Vycm9yOworLSAgICAgIF9fcHl4 X0wxMF9lcnJvcjo7CistICAgICAgaWYgKFBZX01BSk9SX1ZFUlNJT04gPj0gMykgeworLSAgICAg ICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xMik7CistICAgICAgICBfX1B5eF9YR0lWRVJFRihf X3B5eF90XzEzKTsKKy0gICAgICAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3RfMTQpOworLSAgICAg ICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xMiwgX19weXhfdF8xMywgX19weXhfdF8x NCk7CisrCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczMgorKyAq ICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAqICAgICAgICAgY2RlZiBpbnQgcGlwZQorKyAq ICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgIHBpcGUgPSBtcHZfZ2V0X3dha2V1cF9waXBlKHNlbGYuX2N0eCkKKysgKiAgICAg ICAgIHJldHVybiBwaXBlCisrICovCisrICAgICAgLypmaW5hbGx5OiovIHsKKysgICAgICAgIC8q bm9ybWFsIGV4aXQ6Ki97CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAg ICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisr ICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICBnb3RvIF9fcHl4X0w1OworKyAgICAgICAgfQor KyAgICAgICAgX19weXhfTDU6OworICAgICAgIH0KKy0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfOSk7IF9fcHl4X3RfOSA9IDA7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEwKTsg X19weXhfdF8xMCA9IDA7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzExKTsgX19weXhf dF8xMSA9IDA7CistICAgICAgX19weXhfdF8xMiA9IDA7IF9fcHl4X3RfMTMgPSAwOyBfX3B5eF90 XzE0ID0gMDsKKy0gICAgICBnb3RvIF9fcHl4X0wxX2Vycm9yOworLSAgICB9CistICAgIF9fcHl4 X0w1OjsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2OTMK Ky0gKiAgICAgICAgIGZpbmFsbHk6CistICogICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVf dmFsdWUodikKKy0gKiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczNAorKyAqICAgICAg ICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBwaXBlID0gbXB2X2dldF93YWtldXBfcGlw ZShzZWxmLl9jdHgpCisrICogICAgICAgICByZXR1cm4gcGlwZSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogCistICogICAgIEBfZXJyb3JzCisrICogICAgIGRlZiBfX2Npbml0X18o c2VsZik6CisgICovCisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8xID0g X19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA2OTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19Q eXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9waXBlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgNzM0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOworICAgX19weXhfciA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgICBn b3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3 NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyOAorKyAqICAgICAgICAg ICAgIG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lk Kj5uYW1lKQorICAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgc2V0X29wdGlvbihz ZWxmLCBwcm9wLCB2YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCisrICogICAgIGRlZiBnZXRfd2Fr ZXVwX3BpcGUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICIiIldyYXBzOiBtcHZfZ2V0X3dha2V1cF9waXBlIiIiCisgICogICAgICAgICBhc3NlcnQgc2Vs Zi5fY3R4CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fcHl4X0wx X2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYo X19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuc2V0X29wdGlvbiIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfQWRkVHJhY2Vi YWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5nZXRfd2FrZXVwX3BpcGUiLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKyAgIF9fcHl4X3IgPSBOVUxM OworICAgX19weXhfTDA6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X3Byb3ApOworICAgX19Q eXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK KyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6Njk2CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczNgorKyAqICAg ICAgICAgcmV0dXJuIHBpcGUKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMKKy0gKiAgICAgZGVmIGlu aXRpYWxpemUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICIiIldyYXBzOiBtcHZfaW5pdGlhbGl6ZSIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAorKyAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYp CisrICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICov Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMjdpbml0aWFsaXplKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjZpbml0aWFsaXplW10gPSAiV3JhcHM6IG1wdl9pbml0 aWFsaXplIjsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8yN2luaXRpYWxpemUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqdW51c2VkKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7Cisrc3Rh dGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzNfX2Npbml0 X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0 ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMzNfX2Npbml0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CisrICBpbnQgX19w eXhfcjsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiaW5pdGlhbGl6ZSAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjZpbml0aWFsaXplKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikp OworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fY2luaXRfXyAod3JhcHBlcikiLCAw KTsKKysgIGlmICh1bmxpa2VseShQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpID4gMCkpIHsK KysgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fY2luaXRfXyIsIDEsIDAsIDAsIFB5 VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyByZXR1cm4gLTE7fQorKyAgaWYgKHVubGlrZWx5 KF9fcHl4X2t3ZHMpICYmIHVubGlrZWx5KFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpID4gMCkgJiYg dW5saWtlbHkoIV9fUHl4X0NoZWNrS2V5d29yZFN0cmluZ3MoX19weXhfa3dkcywgIl9fY2luaXRf XyIsIDApKSkgcmV0dXJuIC0xOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8zMl9fY2luaXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpKTsKKyAKKyAgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1 cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMjZpbml0aWFsaXplKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworLSAgaW50IF9fcHl4X3Zf ZXJyOworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworK3N0YXRpYyBpbnQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyX19jaW5pdF9fKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworKyAgdWlu dDY0X3QgX19weXhfdl9jdHhpZDsKKysgIGludCBfX3B5eF9yOworICAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworKyAgdWludDY0X3Qg X19weXhfdF8yOworKyAgaW50IF9fcHl4X3RfMzsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBO VUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CisgICBpbnQgX19weXhfbGluZW5v ID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5 eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJpbml0aWFsaXpl IiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19jaW5pdF9fIiwgMCk7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk4CistICogICAgIGRlZiBp bml0aWFsaXplKHNlbGYpOgorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9pbml0aWFsaXplIiIi CistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjczNworKyAqIAorKyAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOgorKyAqICAg ICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAg ICAgIHNlbGYuX2N0eCA9IG1wdl9jcmVhdGUoKQorICAqLworLSAgI2lmbmRlZiBDWVRIT05fV0lU SE9VVF9BU1NFUlRJT05TCistICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKy0g ICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworLSAgICAgIFB5 RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCA2 OTgsIF9fcHl4X0wxX2Vycm9yKQorLSAgICB9CistICB9CistICAjZW5kaWYKKysgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfYnVpbHRpbl9pZCwgKChQeU9iamVj dCAqKV9fcHl4X3Zfc2VsZikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA3MzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBf X3B5eF90XzIgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9f UFlYX0VSUigwLCA3MzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX3B5eF92X2N0eGlkID0gKCh1aW50NjRfdClfX3B5eF90 XzIpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwMAorLSAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzM4CisrICogICAgIGRlZiBfX2Npbml0X18o c2VsZik6CisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNl bGYpCisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICAgICAgZXJyID0gbXB2X2luaXRpYWxpemUoc2VsZi5fY3R4KQorLSAqICAg ICAgICAgcmV0dXJuIGVycgorKyAqICAgICAgICAgICAgIHNlbGYuX2N0eCA9IG1wdl9jcmVhdGUo KQorKyAqICAgICAgICAgaWYgbm90IHNlbGYuX2N0eDoKKyAgKi8KKyAgIHsKKyAgICAgICAjaWZk ZWYgV0lUSF9USFJFQUQKK0BAIC0xNDExNCwyMiArMTM5NzUsMjIgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjZpbml0aWFsaXplKHN0 cnVjdCBfX3AKKyAgICAgICAjZW5kaWYKKyAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAxCistICogICAgICAgICBjZGVmIGlu dCBlcnIKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzkKKysg KiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikKKyAgKiAg ICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2X2luaXRpYWxpemUo c2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1 cm4gZXJyCistICogCisrICogICAgICAgICAgICAgc2VsZi5fY3R4ID0gbXB2X2NyZWF0ZSgpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9jdHg6 CisrICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3Ii KQorICAqLworLSAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfaW5pdGlhbGl6ZShfX3B5eF92X3Nl bGYtPl9jdHgpOworKyAgICAgICAgX19weXhfdl9zZWxmLT5fY3R4ID0gbXB2X2NyZWF0ZSgpOwor ICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAw CistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAgICBjZGVmIGludCBlcnIK KysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzM4CisrICogICAgIGRl ZiBfX2Npbml0X18oc2VsZik6CisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVp bnQ2NF90PmlkKHNlbGYpCisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2X2luaXRpYWxpemUoc2VsZi5f Y3R4KQorLSAqICAgICAgICAgcmV0dXJuIGVycgorKyAqICAgICAgICAgICAgIHNlbGYuX2N0eCA9 IG1wdl9jcmVhdGUoKQorKyAqICAgICAgICAgaWYgbm90IHNlbGYuX2N0eDoKKyAgKi8KKyAgICAg ICAvKmZpbmFsbHk6Ki8geworICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKK0BAIC0xNDE0Myw2 NiArMTQwMDQsMjAwIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzI2aW5pdGlhbGl6ZShzdHJ1Y3QgX19wCisgICAgICAgfQorICAgfQor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwMgorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0MAorICAqICAgICAgICAgd2l0aCBub2dpbDoKKy0g KiAgICAgICAgICAgICBlcnIgPSBtcHZfaW5pdGlhbGl6ZShzZWxmLl9jdHgpCistICogICAgICAg ICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAg ZGVmIHdhaXRfZXZlbnQoc2VsZiwgdGltZW91dD1Ob25lKToKKysgKiAgICAgICAgICAgICBzZWxm Ll9jdHggPSBtcHZfY3JlYXRlKCkKKysgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9jdHg6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcigi Q29udGV4dCBjcmVhdGlvbiBlcnJvciIpCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFk ID0gQ2FsbGJhY2tUaHJlYWQoKQorICAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0g IF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNzAyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfciA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4 X3RfMSA9IDA7CistICBnb3RvIF9fcHl4X0wwOworKyAgX19weXhfdF8zID0gKCghKF9fcHl4X3Zf c2VsZi0+X2N0eCAhPSAwKSkgIT0gMCk7CisrICBpZiAodW5saWtlbHkoX19weXhfdF8zKSkgewor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5NgorLSAqIAorLSAqICAg ICBAX2Vycm9ycworLSAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9pbml0aWFsaXplIiIiCist ICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3NDEKKysgKiAgICAgICAgICAgICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkK KysgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9jdHg6CisrICogICAgICAgICAgICAgcmFpc2UgTVBW RXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkID0gQ2FsbGJhY2tUaHJlYWQoKQor KyAqICAgICAgICAgX2NhbGxiYWNrc1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNrdGhyZWFkCisgICov CisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3NfTVBW RXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NDEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgICAgX19weXhfdF81 ID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzQpKSkgeworKyAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfNCk7CisrICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CisrICAg ICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF80 KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworKyAgICAgICAgX19QeXhfSU5D UkVGKGZ1bmN0aW9uKTsKKysgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF80LCBmdW5j dGlvbik7CisrICAgICAgfQorKyAgICB9CisrICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzUpID8g X19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNCwgX19weXhfdF81LCBfX3B5eF9rcF9z X0NvbnRleHRfY3JlYXRpb25fZXJyb3IpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzQsIF9fcHl4X2twX3NfQ29udGV4dF9jcmVhdGlvbl9lcnJvcik7CisrICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNzQxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQg PSAwOworKyAgICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgICAgX19QWVhfRVJSKDAsIDc0MSwg X19weXhfTDFfZXJyb3IpCisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4 X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuaW5pdGlhbGl6ZSIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7 CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0MAorKyAqICAgICAgICAgd2l0aCBub2dpbDoK KysgKiAgICAgICAgICAgICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkKKysgKiAgICAgICAgIGlm IG5vdCBzZWxmLl9jdHg6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICAgICByYWlzZSBNUFZFcnJvcigiQ29udGV4dCBjcmVhdGlvbiBlcnJvciIpCisrICogICAgICAg ICBzZWxmLmNhbGxiYWNrdGhyZWFkID0gQ2FsbGJhY2tUaHJlYWQoKQorKyAqLworKyAgfQorKwor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0MgorKyAqICAgICAgICAgaWYg bm90IHNlbGYuX2N0eDoKKysgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcigiQ29udGV4dCBj cmVhdGlvbiBlcnJvciIpCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkID0gQ2FsbGJh Y2tUaHJlYWQoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBfY2Fs bGJhY2tzW2N0eGlkXSA9IHNlbGYuY2FsbGJhY2t0aHJlYWQKKysgKiAgICAgICAgIHNlbGYucmVw bHlfdXNlcmRhdGEgPSBkaWN0KCkKKysgKi8KKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF80LCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNCkpIF9fUFlYX0VSUigwLCA3NDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfNCk7CisrICBfX3B5eF90XzUgPSBOVUxMOworKyAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzQpKSkgeworKyAgICBf X3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzQpOworKyAgICBpZiAobGlrZWx5 KF9fcHl4X3RfNSkpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRf RlVOQ1RJT04oX19weXhfdF80KTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKysg ICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19w eXhfdF80LCBmdW5jdGlvbik7CisrICAgIH0KKysgIH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90 XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSkgOiBf X1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF80KTsKKysgIF9fUHl4X1hERUNSRUYoX19w eXhfdF81KTsgX19weXhfdF81ID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDc0MiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgX19QeXhf R0lWRVJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+Y2FsbGJh Y2t0aHJlYWQpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQp OworKyAgX19weXhfdl9zZWxmLT5jYWxsYmFja3RocmVhZCA9IF9fcHl4X3RfMTsKKysgIF9fcHl4 X3RfMSA9IDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQzCisr ICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKQor KyAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZCA9IENhbGxiYWNrVGhyZWFkKCkKKysgKiAg ICAgICAgIF9jYWxsYmFja3NbY3R4aWRdID0gc2VsZi5jYWxsYmFja3RocmVhZCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gZGlj dCgpCisrICogICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXSA9IHNlbGYucmVwbHlfdXNl cmRhdGEKKysgKi8KKysgIF9fcHl4X3RfMSA9IF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQ7 CisrICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKysgIGlmICh1bmxpa2VseShfX1B5eF9TZXRJ dGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3Zf Y3R4aWQsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3Qs IDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA3NDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzQ0CisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFk ID0gQ2FsbGJhY2tUaHJlYWQoKQorKyAqICAgICAgICAgX2NhbGxiYWNrc1tjdHhpZF0gPSBzZWxm LmNhbGxiYWNrdGhyZWFkCisrICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gZGljdCgp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIF9yZXBseV91c2VyZGF0 YXNbY3R4aWRdID0gc2VsZi5yZXBseV91c2VyZGF0YQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFj a3RocmVhZC5zdGFydCgpCisrICovCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeURpY3RfTmV3UHJl c2l6ZWQoMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDc0NCwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dJVkVS RUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJk YXRhKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKKysg IF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEg PSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0NQorKyAqICAg ICAgICAgX2NhbGxiYWNrc1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNrdGhyZWFkCisrICogICAgICAg ICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gZGljdCgpCisrICogICAgICAgICBfcmVwbHlfdXNlcmRh dGFzW2N0eGlkXSA9IHNlbGYucmVwbHlfdXNlcmRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zdGFydCgpCisrICogCisrICov CisrICBfX3B5eF90XzEgPSBfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhOworKyAgX19QeXhf SU5DUkVGKF9fcHl4X3RfMSk7CisrICBpZiAodW5saWtlbHkoX19QeXhfU2V0SXRlbUludChfX3B5 eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlk LCBfX3B5eF90XzEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAw LCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc0NgorKyAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IGRp Y3QoKQorKyAqICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gPSBzZWxmLnJlcGx5X3Vz ZXJkYXRhCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnN0YXJ0KCkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqLworKyAgX19w eXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPmNhbGxiYWNr dGhyZWFkLCBfX3B5eF9uX3Nfc3RhcnQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCA3NDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7 CisrICBfX3B5eF90XzUgPSBOVUxMOworKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBs aWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKKysgICAgX19weXhfdF81ID0gUHlN ZXRob2RfR0VUX1NFTEYoX19weXhfdF80KTsKKysgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7 CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfNCk7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7CisrICAgICAgX19QeXhfSU5D UkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVuY3Rp b24pOworKyAgICB9CisrICB9CisrICBfX3B5eF90XzEgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF80LCBfX3B5eF90XzUpIDogX19QeXhfUHlPYmplY3Rf Q2FsbE5vQXJnKF9fcHl4X3RfNCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4 X3RfNSA9IDA7CisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3NDYs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9E RUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjczNgorKyAqICAgICAgICAgcmV0dXJuIHBpcGUKKysgKiAKKysgKiAgICAgZGVmIF9fY2lu aXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2Rl ZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKQorKyAqICAgICAgICAgd2l0aCBu b2dpbDoKKysgKi8KKysKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9 IDA7CisrICBnb3RvIF9fcHl4X0wwOworKyAgX19weXhfTDFfZXJyb3I6OworKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzUpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGli cy5tcHYuQ29udGV4dC5fX2Npbml0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSAtMTsKKysgIF9fcHl4X0wwOjsKKyAgIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDQKKy0gKiAgICAgICAgIHJldHVybiBl cnIKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQ5CisgICogCistICogICAg IGRlZiB3YWl0X2V2ZW50KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfd2FpdF9ldmVudCIiIgorKyAqICAg ICBAX2Vycm9ycworKyAqICAgICBkZWYgb2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkYXRh PU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJXcmFw czogbXB2X29ic2VydmVfcHJvcGVydHkiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgK KyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI5d2FpdF9ldmVudChQeU9iamVjdCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMp OyAvKnByb3RvKi8KKy1zdGF0aWMgY2hhciBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzI4d2FpdF9ldmVudFtdID0gIldyYXBzOiBtcHZfd2FpdF9ldmVudCI7Cistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjl3 YWl0X2V2ZW50KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQ eU9iamVjdCAqX19weXhfa3dkcykgeworLSAgUHlPYmplY3QgKl9fcHl4X3ZfdGltZW91dCA9IDA7 Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMzVvYnNlcnZlX3Byb3BlcnR5KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpf X3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLworK3N0YXRpYyBjaGFy IF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzRvYnNlcnZlX3Byb3Bl cnR5W10gPSAiV3JhcHM6IG1wdl9vYnNlcnZlX3Byb3BlcnR5IjsKKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNW9ic2VydmVfcHJvcGVy dHkoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0 ICpfX3B5eF9rd2RzKSB7CisrICBQeU9iamVjdCAqX19weXhfdl9wcm9wID0gMDsKKysgIFB5T2Jq ZWN0ICpfX3B5eF92X2RhdGEgPSAwOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25z dCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7 CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9u cworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndhaXRfZXZlbnQgKHdyYXBwZXIpIiwg MCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgib2JzZXJ2ZV9wcm9wZXJ0eSAod3Jh cHBlcikiLCAwKTsKKyAgIHsKKy0gICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1l c1tdID0geyZfX3B5eF9uX3NfdGltZW91dCwwfTsKKy0gICAgUHlPYmplY3QqIHZhbHVlc1sxXSA9 IHswfTsKKy0gICAgdmFsdWVzWzBdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOworKyAgICBzdGF0 aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19wcm9wLCZfX3B5 eF9uX3NfZGF0YSwwfTsKKysgICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHswLDB9OworKyAgICB2 YWx1ZXNbMV0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7CisgICAgIGlmICh1bmxpa2VseShfX3B5 eF9rd2RzKSkgeworICAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKyAgICAgICBjb25zdCBQeV9z c2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKyAgICAgICBz d2l0Y2ggKHBvc19hcmdzKSB7CisrICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxl X0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwor ICAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdz LCAwKTsKKyAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKyAgICAgICAgIGNhc2UgIDA6IGJy ZWFrOworQEAgLTE0MjExLDExNyArMTQyMDYsMjkxIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI5d2FpdF9ldmVudChQeU9iamVjdCAq CisgICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworICAgICAgIHN3aXRj aCAocG9zX2FyZ3MpIHsKKyAgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBpZiAobGlrZWx5KCh2 YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nf cHJvcCkpICE9IDApKSBrd19hcmdzLS07CisrICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJn dHVwbGVfZXJyb3I7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNl ICAxOgorICAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7CistICAgICAgICAgIFB5T2JqZWN0KiB2 YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc190aW1l b3V0KTsKKy0gICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1swXSA9IHZhbHVlOyBrd19hcmdz LS07IH0KKysgICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1T dHIoX19weXhfa3dkcywgX19weXhfbl9zX2RhdGEpOworKyAgICAgICAgICBpZiAodmFsdWUpIHsg dmFsdWVzWzFdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorICAgICAgICAgfQorICAgICAgIH0KKyAg ICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7CistICAgICAgICBpZiAodW5saWtlbHko X19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMs IDAsIHZhbHVlcywgcG9zX2FyZ3MsICJ3YWl0X2V2ZW50IikgPCAwKSkgX19QWVhfRVJSKDAsIDcw NCwgX19weXhfTDNfZXJyb3IpCisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRp b25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9z X2FyZ3MsICJvYnNlcnZlX3Byb3BlcnR5IikgPCAwKSkgX19QWVhfRVJSKDAsIDc0OSwgX19weXhf TDNfZXJyb3IpCisgICAgICAgfQorICAgICB9IGVsc2UgeworICAgICAgIHN3aXRjaCAoUHlUdXBs ZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgeworLSAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKysgICAgICAgIGNhc2UgIDI6IHZhbHVl c1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CisgICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAwOiBicmVhazsKKysgICAgICAgIGNhc2UgIDE6 IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CisrICAgICAgICBi cmVhazsKKyAgICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7Cisg ICAgICAgfQorICAgICB9CistICAgIF9fcHl4X3ZfdGltZW91dCA9IHZhbHVlc1swXTsKKysgICAg X19weXhfdl9wcm9wID0gdmFsdWVzWzBdOworKyAgICBfX3B5eF92X2RhdGEgPSB2YWx1ZXNbMV07 CisgICB9CisgICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworICAgX19w eXhfTDVfYXJndHVwbGVfZXJyb3I6OworLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIndh aXRfZXZlbnQiLCAwLCAwLCAxLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhf RVJSKDAsIDcwNCwgX19weXhfTDNfZXJyb3IpCisrICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxp ZCgib2JzZXJ2ZV9wcm9wZXJ0eSIsIDAsIDEsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cykpOyBfX1BZWF9FUlIoMCwgNzQ5LCBfX3B5eF9MM19lcnJvcikKKyAgIF9fcHl4X0wzX2Vycm9y OjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQud2Fp dF9ldmVudCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwor KyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5vYnNlcnZl X3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBOVUxMOworICAg X19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OworLSAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yOHdhaXRfZXZlbnQoKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgX19w eXhfdl90aW1lb3V0KTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMzRvYnNlcnZlX3Byb3BlcnR5KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfcHJvcCwgX19w eXhfdl9kYXRhKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjh3YWl0 X2V2ZW50KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfdGltZW91dCkgeworLSAgZG91YmxlIF9fcHl4 X3ZfdGltZW91dF9kOworLSAgc3RydWN0IG1wdl9ldmVudCAqX19weXhfdl9ldmVudDsKKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNG9i c2VydmVfcHJvcGVydHkoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9wcm9wLCBQeU9iamVjdCAqX19w eXhfdl9kYXRhKSB7CisrICB1aW50NjRfdCBfX3B5eF92X2lkX2RhdGE7CisrICBQeU9iamVjdCAq X19weXhfdl91c2VyZGF0YXMgPSBOVUxMOworKyAgY2hhciAqX19weXhfdl9wcm9wYzsKKysgIGlu dCBfX3B5eF92X2VycjsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCistICBkb3VibGUgX19weXhfdF8xOworLSAgaW50IF9fcHl4X3Rf MjsKKy0gIGRvdWJsZSBfX3B5eF90XzM7CisrICBQeV9oYXNoX3QgX19weXhfdF8xOworKyAgUHlP YmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsK KyAgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfNSA9 IE5VTEw7CisrICBpbnQgX19weXhfdF82OworKyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7 CisrICBpbnQgX19weXhfdF84OworKyAgaW50IF9fcHl4X3RfOTsKKysgIGNoYXIgKl9fcHl4X3Rf MTA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVu YW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJ3YWl0X2V2ZW50IiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgib2JzZXJ2ZV9wcm9wZXJ0eSIsIDApOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfcHJv cCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzA2CistICogICAg IGRlZiB3YWl0X2V2ZW50KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CistICogICAgICAgICAiIiJXcmFw czogbXB2X3dhaXRfZXZlbnQiIiIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3NTEKKysgKiAgICAgZGVmIG9ic2VydmVfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGF0YT1Ob25l KToKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSIiIgorICAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICBjZGVmIGRvdWJsZSB0aW1lb3V0X2QgPSB0aW1lb3V0IGlmIHRpbWVvdXQgaXMgbm90 IE5vbmUgZWxzZSAtMQorLSAqICAgICAgICAgY2RlZiBtcHZfZXZlbnQqIGV2ZW50CisrICogICAg ICAgICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorKyAqICAg ICAgICAgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisgICovCisgICAjaWZuZGVmIENZ VEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKKyAgIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFn KSkgeworICAgICBpZiAodW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7Cisg ICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7CistICAgICAgX19QWVhf RVJSKDAsIDcwNiwgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19QWVhfRVJSKDAsIDc1MSwgX19w eXhfTDFfZXJyb3IpCisgICAgIH0KKyAgIH0KKyAgICNlbmRpZgorIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjcwNworLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWl0 X2V2ZW50IiIiCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzUyCisrICog ICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVydHkiIiIKKyAgKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIGNkZWYgZG91YmxlIHRpbWVvdXRfZCA9IHRpbWVv dXQgaWYgdGltZW91dCBpcyBub3QgTm9uZSBlbHNlIC0xICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50KiBldmVudAorLSAqICAgICAgICAgd2l0 aCBub2dpbDoKKysgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5o YXNoKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlkX2Rh dGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorKyAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5y ZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IChf X3B5eF92X3RpbWVvdXQgIT0gUHlfTm9uZSk7CistICBpZiAoKF9fcHl4X3RfMiAhPSAwKSkgewor LSAgICBfX3B5eF90XzMgPSBfX3B5eF9QeUZsb2F0X0FzRG91YmxlKF9fcHl4X3ZfdGltZW91dCk7 IGlmICh1bmxpa2VseSgoX19weXhfdF8zID09IChkb3VibGUpLTEpICYmIFB5RXJyX09jY3VycmVk KCkpKSBfX1BZWF9FUlIoMCwgNzA3LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19weXhfdF8xID0g X19weXhfdF8zOworLSAgfSBlbHNlIHsKKy0gICAgX19weXhfdF8xID0gLTEuMDsKKy0gIH0KKy0g IF9fcHl4X3ZfdGltZW91dF9kID0gX19weXhfdF8xOworKyAgX19weXhfdF8xID0gUHlPYmplY3Rf SGFzaChfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF8xID09ICgoUHlfaGFzaF90 KS0xKSkpIF9fUFlYX0VSUigwLCA3NTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdl9pZF9k YXRhID0gKCh1aW50NjRfdClfX3B5eF90XzEpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjcwOQorLSAqICAgICAgICAgY2RlZiBkb3VibGUgdGltZW91dF9kID0gdGlt ZW91dCBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGVsc2UgLTEKKy0gKiAgICAgICAgIGNkZWYgbXB2 X2V2ZW50KiBldmVudAorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGV2ZW50ID0gbXB2X3dhaXRfZXZlbnQoc2VsZi5f Y3R4LCB0aW1lb3V0X2QpCistICogICAgICAgICByZXR1cm4gRXZlbnQoKS5faW5pdChldmVudCwg c2VsZikKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTMKKysgKiAgICAg ICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9 IDx1aW50NjRfdD5oYXNoKGRhdGEpCisrICogICAgICAgICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhh c2goZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgdXNlcmRh dGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKysgKiAgICAgICAg IGlmIHVzZXJkYXRhcyBpcyBOb25lOgorICAqLworLSAgeworLSAgICAgICNpZmRlZiBXSVRIX1RI UkVBRAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAgICAgIFB5X1VOQkxPQ0tfVEhS RUFEUworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKy0gICAgICAjZW5kaWYKKy0g ICAgICAvKnRyeToqLyB7CisrICBfX3B5eF90XzEgPSBQeU9iamVjdF9IYXNoKF9fcHl4X3ZfZGF0 YSk7IGlmICh1bmxpa2VseShfX3B5eF90XzEgPT0gKChQeV9oYXNoX3QpLTEpKSkgX19QWVhfRVJS KDAsIDc1MywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF92X2lkX2RhdGEgPSAoKHVpbnQ2NF90 KV9fcHl4X3RfMSk7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NzEwCistICogICAgICAgICBjZGVmIG1wdl9ldmVudCogZXZlbnQKKy0gKiAgICAgICAgIHdp dGggbm9naWw6CistICogICAgICAgICAgICAgZXZlbnQgPSBtcHZfd2FpdF9ldmVudChzZWxmLl9j dHgsIHRpbWVvdXRfZCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg cmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpCistICogCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzU0CisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGlkX2Rh dGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorKyAqICAgICAgICAgaWRfZGF0YSA9IDx1aW50NjRf dD5oYXNoKGRhdGEpCisrICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRh LmdldChpZF9kYXRhLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKKysgKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3Vz ZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKyAgKi8K Ky0gICAgICAgIF9fcHl4X3ZfZXZlbnQgPSBtcHZfd2FpdF9ldmVudChfX3B5eF92X3NlbGYtPl9j dHgsIF9fcHl4X3ZfdGltZW91dF9kKTsKKy0gICAgICB9CistCistICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjcwOQorLSAqICAgICAgICAgY2RlZiBkb3VibGUgdGltZW91 dF9kID0gdGltZW91dCBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGVsc2UgLTEKKy0gKiAgICAgICAg IGNkZWYgbXB2X2V2ZW50KiBldmVudAorKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF9uX3NfZ2V0KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgX19weXhfdF80ID0gX19QeXhfUHlJbnRf RnJvbV91aW50NjRfdChfX3B5eF92X2lkX2RhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCA3NTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNCk7CisrICBfX3B5eF90XzUgPSBOVUxMOworKyAgX19weXhfdF82ID0gMDsKKysgIGlmIChD WVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykp KSB7CisrICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7CisrICAg IGlmIChsaWtlbHkoX19weXhfdF81KSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5 TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzUpOworKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVD UkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKysgICAgICBfX3B5eF90XzYgPSAxOworKyAg ICB9CisrICB9CisrICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCisrICBpZiAoUHlGdW5jdGlvbl9D aGVjayhfX3B5eF90XzMpKSB7CisrICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4 X3RfNSwgX19weXhfdF80LCBQeV9Ob25lfTsKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlGdW5j dGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1fX3B5eF90XzYsIDIrX19weXhf dF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9M MV9lcnJvcikKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwor KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf NCk7IF9fcHl4X3RfNCA9IDA7CisrICB9IGVsc2UKKysgICNlbmRpZgorKyAgI2lmIENZVEhPTl9G QVNUX1BZQ0NBTEwKKysgIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2soX19weXhfdF8z KSkgeworKyAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzUsIF9fcHl4X3Rf NCwgUHlfTm9uZX07CisrICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxs KF9fcHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTQsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKKysgIH0gZWxzZQorKyAgI2VuZGlmCisrICB7CisrICAgIF9fcHl4X3RfNyA9IFB5VHVw bGVfTmV3KDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIo MCwgNzU0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Cisr ICAgIGlmIChfX3B5eF90XzUpIHsKKysgICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNSk7IFB5 VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCBfX3B5eF90XzUpOyBfX3B5eF90XzUgPSBOVUxM OworKyAgICB9CisrICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF80KTsKKysgICAgUHlUdXBsZV9T RVRfSVRFTShfX3B5eF90XzcsIDArX19weXhfdF82LCBfX3B5eF90XzQpOworKyAgICBfX1B5eF9J TkNSRUYoUHlfTm9uZSk7CisrICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CisrICAgIFB5VHVw bGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfNiwgUHlfTm9uZSk7CisrICAgIF9fcHl4 X3RfNCA9IDA7CisrICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8z LCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCA3NTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisrICB9CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIF9fcHl4X3ZfdXNlcmRhdGFz ID0gX19weXhfdF8yOworKyAgX19weXhfdF8yID0gMDsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3NTUKKysgKiAgICAgICAgIGlkX2RhdGEgPSA8dWludDY0X3Q+aGFz aChkYXRhKQorKyAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQo aWRfZGF0YSwgTm9uZSkKKysgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisrICogICAgICAg ICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlCisrICovCisrICBfX3B5eF90XzggPSAoX19weXhf dl91c2VyZGF0YXMgPT0gUHlfTm9uZSk7CisrICBfX3B5eF90XzkgPSAoX19weXhfdF84ICE9IDAp OworKyAgaWYgKF9fcHl4X3RfOSkgeworKworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NzU2CisrICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRh LmdldChpZF9kYXRhLCBOb25lKQorKyAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6Cisr ICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9 IF9SZXBseVVzZXJEYXRhKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9IFRydWUKKysgKiAgICAgICAgIHByb3AgPSBfc3Ry ZW5jKHByb3ApCisrICovCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8z LCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDc1NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzMpOworKyAgICBfX3B5eF90XzcgPSBOVUxMOworKyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRI T0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7CisrICAgICAgX19w eXhfdF83ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKKysgICAgICBpZiAobGlrZWx5 KF9fcHl4X3RfNykpIHsKKysgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dF VF9GVU5DVElPTihfX3B5eF90XzMpOworKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNyk7 CisrICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKysgICAgICB9CisrICAgIH0KKysgICAgX19weXhf dF8yID0gKF9fcHl4X3RfNykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8zLCBf X3B5eF90XzcsIF9fcHl4X3ZfZGF0YSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfMywgX19weXhfdl9kYXRhKTsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBfX3B5 eF90XzcgPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3 NTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICAgIGlmICh1bmxpa2Vs eShfX1B5eF9TZXRJdGVtSW50KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X3Zf aWRfZGF0YSwgX19weXhfdF8yLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRf dCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc1NiwgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Zf dXNlcmRhdGFzLCBfX3B5eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19w eXhfdF8yID0gMDsKKysKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1 NQorKyAqICAgICAgICAgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisrICogICAgICAg ICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorKyAq ICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRh dGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKysgKiAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZl ZCA9IFRydWUKKysgKi8KKysgIH0KKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3NTcKKysgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgorKyAqICAgICAgICAg ICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2Vy RGF0YShkYXRhKQorKyAqICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gVHJ1ZSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQor KyAqICAgICAgICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKKysgKi8KKysgIGlmIChfX1B5eF9Q eU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3Nfb2JzZXJ2ZWQs IFB5X1RydWUpIDwgMCkgX19QWVhfRVJSKDAsIDc1NywgX19weXhfTDFfZXJyb3IpCisrCisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU4CisrICogICAgICAgICAgICAgc2Vs Zi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRh dGEpCisrICogICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlCisrICogICAgICAgICBw cm9wID0gX3N0cmVuYyhwcm9wKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICBjZGVmIGNoYXIqIHByb3BjID0gcHJvcAorKyAqICAgICAgICAgY2RlZiBpbnQgZXJyCisr ICovCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMywgX19weXhfbl9zX3N0 cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc1OCwgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgIF9fcHl4X3RfNyA9IE5V TEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0No ZWNrKF9fcHl4X3RfMykpKSB7CisrICAgIF9fcHl4X3RfNyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9f cHl4X3RfMyk7CisrICAgIGlmIChsaWtlbHkoX19weXhfdF83KSkgeworKyAgICAgIFB5T2JqZWN0 KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOworKyAgICAgIF9f UHl4X0lOQ1JFRihfX3B5eF90XzcpOworKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7Cisr ICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKysgICAgfQorKyAg fQorKyAgX19weXhfdF8yID0gKF9fcHl4X3RfNykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3Mo X19weXhfdF8zLCBfX3B5eF90XzcsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfMywgX19weXhfdl9wcm9wKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dF83KTsgX19weXhfdF83ID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDAsIDc1OCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK KysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgX19QeXhfREVD UkVGX1NFVChfX3B5eF92X3Byb3AsIF9fcHl4X3RfMik7CisrICBfX3B5eF90XzIgPSAwOworKwor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1OQorKyAqICAgICAgICAgdXNl cmRhdGFzLm9ic2VydmVkID0gVHJ1ZQorKyAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkK KysgKiAgICAgICAgIGNkZWYgY2hhciogcHJvcGMgPSBwcm9wICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqICAgICAgICAgd2l0aCBub2dp bDoKKysgKi8KKysgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9Bc1dyaXRhYmxlU3RyaW5n KF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfMTApICYmIFB5RXJyX09jY3Vy cmVkKCkpKSBfX1BZWF9FUlIoMCwgNzU5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3ZfcHJv cGMgPSBfX3B5eF90XzEwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojc2MQorKyAqICAgICAgICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKKysgKiAgICAgICAgIGNk ZWYgaW50IGVycgorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgICAgIGV2ZW50ID0gbXB2X3dhaXRfZXZlbnQoc2VsZi5fY3R4 LCB0aW1lb3V0X2QpCistICogICAgICAgICByZXR1cm4gRXZlbnQoKS5faW5pdChldmVudCwgc2Vs ZikKKysgKiAgICAgICAgICAgICBlcnIgPSBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSgKKysgKiAgICAg ICAgICAgICAgICAgc2VsZi5fY3R4LAorKyAqLworKyAgeworKyAgICAgICNpZmRlZiBXSVRIX1RI UkVBRAorKyAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworKyAgICAgIFB5X1VOQkxPQ0tfVEhS RUFEUworKyAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKysgICAgICAjZW5kaWYKKysg ICAgICAvKnRyeToqLyB7CisrCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NzYyCisrICogICAgICAgICBjZGVmIGludCBlcnIKKysgKiAgICAgICAgIHdpdGggbm9n aWw6CisrICogICAgICAgICAgICAgZXJyID0gbXB2X29ic2VydmVfcHJvcGVydHkoICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgc2VsZi5fY3R4LAorKyAq ICAgICAgICAgICAgICAgICBpZF9kYXRhLAorKyAqLworKyAgICAgICAgX19weXhfdl9lcnIgPSBt cHZfb2JzZXJ2ZV9wcm9wZXJ0eShfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfaWRfZGF0YSwg X19weXhfdl9wcm9wYywgTVBWX0ZPUk1BVF9OT0RFKTsKKysgICAgICB9CisrCisrICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2MQorKyAqICAgICAgICAgY2RlZiBjaGFy KiBwcm9wYyA9IHByb3AKKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqICAgICAgICAgd2l0 aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVy ciA9IG1wdl9vYnNlcnZlX3Byb3BlcnR5KAorKyAqICAgICAgICAgICAgICAgICBzZWxmLl9jdHgs CisgICovCisgICAgICAgLypmaW5hbGx5OiovIHsKKyAgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97 CitAQCAtMTQzMjksMTAxICsxNDQ5OCwyNDggQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjh3YWl0X2V2ZW50KHN0cnVjdCBfX3AKKyAg ICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKyAgICAgICAgICAgUHlfQkxPQ0tfVEhS RUFEUworICAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNTsKKysgICAg ICAgICAgZ290byBfX3B5eF9MNjsKKyAgICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0w1OjsKKysg ICAgICAgIF9fcHl4X0w2OjsKKyAgICAgICB9CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NzExCistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAg ICAgICAgIGV2ZW50ID0gbXB2X3dhaXRfZXZlbnQoc2VsZi5fY3R4LCB0aW1lb3V0X2QpCistICog ICAgICAgICByZXR1cm4gRXZlbnQoKS5faW5pdChldmVudCwgc2VsZikgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2OAor KyAqICAgICAgICAgICAgICAgICBNUFZfRk9STUFUX05PREUsCisrICogICAgICAgICAgICAgKQor KyAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICog CistICogICAgIGRlZiB3YWtldXAoc2VsZik6CisrICogICAgIEBfZXJyb3JzCisgICovCisgICBf X1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2Fs bE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNzExLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgX19weXhfdF81ID0gKChz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKikoKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdF80KS0+ X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRXZlbnQgKilfX3B5eF90XzQpLCBfX3B5eF92X2V2ZW50LCAoKFB5T2JqZWN0ICopX19weXhf dl9zZWxmKSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDcxMSwgX19w eXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKy0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgX19weXhfciA9IF9fcHl4X3RfNTsKKy0g IF9fcHl4X3RfNSA9IDA7CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5 eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc2OCwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fcHl4X3IgPSBf X3B5eF90XzI7CisrICBfX3B5eF90XzIgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDQKKy0gKiAgICAgICAgIHJldHVybiBl cnIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDkKKyAgKiAKKy0gKiAg ICAgZGVmIHdhaXRfZXZlbnQoc2VsZiwgdGltZW91dD1Ob25lKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWl0X2V2ZW50IiIiCisrICog ICAgIEBfZXJyb3JzCisrICogICAgIGRlZiBvYnNlcnZlX3Byb3BlcnR5KHNlbGYsIHByb3AsIGRh dGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIldy YXBzOiBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX3B5eF9MMV9lcnJv cjo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMyk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CisgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250 ZXh0LndhaXRfZXZlbnQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsKKysgIF9fUHl4X0FkZFRyYWNlYmFj aygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQub2JzZXJ2ZV9wcm9wZXJ0eSIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IE5VTEw7 CisgICBfX3B5eF9MMDo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfdXNlcmRhdGFzKTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfdl9wcm9wKTsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Ip OworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsK KyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxMworLSAqICAgICAg ICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpCisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc3MQorICAqIAorLSAqICAgICBkZWYgd2FrZXVwKHNlbGYpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFwczogbXB2X3dha2V1 cCIiIgorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgdW5vYnNlcnZlX3Byb3BlcnR5KHNl bGYsIGRhdGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJX cmFwczogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYu X2N0eAorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzF3YWtldXAoUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byov Cistc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8z MHdha2V1cFtdID0gIldyYXBzOiBtcHZfd2FrZXVwIjsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMXdha2V1cChQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zN3Vub2JzZXJ2 ZV9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9kYXRh KTsgLypwcm90byovCisrc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0eVtdID0gIldyYXBzOiBtcHZfdW5vYnNlcnZl X3Byb3BlcnR5IjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8zN3Vub2JzZXJ2ZV9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9kYXRhKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7Cisg ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIndha2V1cCAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzB3YWtldXAoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7CisrICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgidW5vYnNlcnZlX3Byb3BlcnR5ICh3cmFwcGVyKSIsIDApOworKyAg X19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNnVub2Jz ZXJ2ZV9wcm9wZXJ0eSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9kYXRhKSk7CisgCisg ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMwd2FrZXVwKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworK3N0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM2dW5v YnNlcnZlX3Byb3BlcnR5KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSkgeworKyAgdWludDY0 X3QgX19weXhfdl9pZF9kYXRhOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfdXNlcmRhdGFzID0gTlVM TDsKKysgIGludCBfX3B5eF92X2VycjsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAg IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBQeV9oYXNoX3QgX19weXhfdF8xOworKyAg UHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVM TDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3Rf NSA9IE5VTEw7CisrICBpbnQgX19weXhfdF82OworKyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5V TEw7CisrICBpbnQgX19weXhfdF84OworKyAgaW50IF9fcHl4X3RfOTsKKyAgIGludCBfX3B5eF9s aW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworICAgaW50 IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndha2V1 cCIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVub2JzZXJ2ZV9wcm9wZXJ0 eSIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxNQorLSAq ICAgICBkZWYgd2FrZXVwKHNlbGYpOgorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAi IiIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzMKKysgKiAgICAgZGVm IHVub2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKToKKysgKiAgICAgICAgICIiIldyYXBzOiBt cHZfdW5vYnNlcnZlX3Byb3BlcnR5IiIiCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICog ICAgICAgICAgICAgbXB2X3dha2V1cChzZWxmLl9jdHgpCisrICogICAgICAgICBjZGVmIHVpbnQ2 NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorKyAqICAgICAgICAgdXNlcmRhdGFz ID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKyAgKi8KKyAgICNpZm5k ZWYgQ1lUSE9OX1dJVEhPVVRfQVNTRVJUSU9OUworICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6 ZUZsYWcpKSB7CisgICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkp IHsKKyAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKKy0gICAgICBf X1BZWF9FUlIoMCwgNzE1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1BZWF9FUlIoMCwgNzcz LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgfQorICAgfQorICAgI2VuZGlmCisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE2CistICogICAgICAgICAiIiJXcmFwczogbXB2 X3dha2V1cCIiIgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3NAorKyAq ICAgICAgICAgIiIiV3JhcHM6IG1wdl91bm9ic2VydmVfcHJvcGVydHkiIiIKKysgKiAgICAgICAg IGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1 aW50NjRfdD5oYXNoKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCisr ICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgbm90IE5vbmU6CisrICovCisrICBfX3B5eF90XzEg PSBQeU9iamVjdF9IYXNoKF9fcHl4X3ZfZGF0YSk7IGlmICh1bmxpa2VseShfX3B5eF90XzEgPT0g KChQeV9oYXNoX3QpLTEpKSkgX19QWVhfRVJSKDAsIDc3NCwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF92X2lkX2RhdGEgPSAoKHVpbnQ2NF90KV9fcHl4X3RfMSk7CisrCisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc1CisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4 CisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRh KQorKyAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0 YSwgTm9uZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgaWYgdXNl cmRhdGFzIGlzIG5vdCBOb25lOgorKyAqICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9 IEZhbHNlCisrICovCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf R09UUkVGKF9fcHl4X3RfMyk7CisrICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2 NF90KF9fcHl4X3ZfaWRfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDc3NSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysg IF9fcHl4X3RfNSA9IE5VTEw7CisrICBfX3B5eF90XzYgPSAwOworKyAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKKysgICAg X19weXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKKysgICAgaWYgKGxpa2Vs eShfX3B5eF90XzUpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VU X0ZVTkNUSU9OKF9fcHl4X3RfMyk7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7Cisr ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfMywgZnVuY3Rpb24pOworKyAgICAgIF9fcHl4X3RfNiA9IDE7CisrICAgIH0KKysgIH0K KysgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKysgIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9fcHl4 X3RfMykpIHsKKysgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF81LCBfX3B5 eF90XzQsIFB5X05vbmV9OworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RD YWxsKF9fcHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhf dF80ID0gMDsKKysgIH0gZWxzZQorKyAgI2VuZGlmCisrICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FM TAorKyAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzMpKSB7CisrICAg IFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNSwgX19weXhfdF80LCBQeV9Ob25l fTsKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8z LCBfX3B5eF90ZW1wKzEtX19weXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDc3NSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKysgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMik7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAg fSBlbHNlCisrICAjZW5kaWYKKysgIHsKKysgICAgX19weXhfdF83ID0gUHlUdXBsZV9OZXcoMitf X3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA3NzUsIF9f cHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKysgICAgaWYgKF9f cHl4X3RfNSkgeworKyAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF81KTsgUHlUdXBsZV9TRVRf SVRFTShfX3B5eF90XzcsIDAsIF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IE5VTEw7CisrICAgIH0K KysgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzQpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfNywgMCtfX3B5eF90XzYsIF9fcHl4X3RfNCk7CisrICAgIF9fUHl4X0lOQ1JFRihQeV9O b25lKTsKKysgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKysgICAgUHlUdXBsZV9TRVRfSVRF TShfX3B5eF90XzcsIDErX19weXhfdF82LCBQeV9Ob25lKTsKKysgICAgX19weXhfdF80ID0gMDsK KysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzMsIF9fcHl4X3Rf NywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc3NSwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgIH0KKysgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgX19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90 XzI7CisrICBfX3B5eF90XzIgPSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjc3NgorKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90 Pmhhc2goZGF0YSkKKysgKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEu Z2V0KGlkX2RhdGEsIE5vbmUpCisrICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgbm90IE5vbmU6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICB1c2VyZGF0YXMu b2JzZXJ2ZWQgPSBGYWxzZQorKyAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcy5jb3VudGVyIDw9 IDA6CisrICovCisrICBfX3B5eF90XzggPSAoX19weXhfdl91c2VyZGF0YXMgIT0gUHlfTm9uZSk7 CisrICBfX3B5eF90XzkgPSAoX19weXhfdF84ICE9IDApOworKyAgaWYgKF9fcHl4X3RfOSkgewor KworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc3CisrICogICAgICAg ICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorKyAq ICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIG5vdCBOb25lOgorKyAqICAgICAgICAgICAgIHVzZXJk YXRhcy5vYnNlcnZlZCA9IEZhbHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgICAgICAgICBpZiB1c2VyZGF0YXMuY291bnRlciA8PSAwOgorKyAqICAgICAgICAgICAgICAg ICBkZWwgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXQorKyAqLworKyAgICBpZiAoX19QeXhf UHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX29ic2VydmVk LCBQeV9GYWxzZSkgPCAwKSBfX1BZWF9FUlIoMCwgNzc3LCBfX3B5eF9MMV9lcnJvcikKKysKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3OAorKyAqICAgICAgICAgaWYg dXNlcmRhdGFzIGlzIG5vdCBOb25lOgorKyAqICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZl ZCA9IEZhbHNlCisrICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzLmNvdW50ZXIgPD0gMDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICBkZWwgc2VsZi5y ZXBseV91c2VyZGF0YVtpZF9kYXRhXQorKyAqICAgICAgICAgY2RlZiBpbnQgZXJyCisrICovCisr ICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0 YXMsIF9fcHl4X25fc19jb3VudGVyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgNzc4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 CisrICAgIF9fcHl4X3RfMyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3RfMiwgX19weXhf aW50XzAsIFB5X0xFKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCA3NzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgX19weXhfdF85ID0gX19QeXhf UHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90XzkgPCAwKSkg X19QWVhfRVJSKDAsIDc3OCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgICBpZiAoX19weXhfdF85KSB7CisrCisrICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3OQorKyAqICAgICAgICAgICAgIHVz ZXJkYXRhcy5vYnNlcnZlZCA9IEZhbHNlCisrICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzLmNv dW50ZXIgPD0gMDoKKysgKiAgICAgICAgICAgICAgICAgZGVsIHNlbGYucmVwbHlfdXNlcmRhdGFb aWRfZGF0YV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiBp bnQgZXJyCisrICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqLworKyAgICAgIGlmICh1bmxpa2Vs eShfX1B5eF9EZWxJdGVtSW50KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X3Zf aWRfZGF0YSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEp IDwgMCkpIF9fUFlYX0VSUigwLCA3NzksIF9fcHl4X0wxX2Vycm9yKQorKworKyAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzgKKysgKiAgICAgICAgIGlmIHVzZXJkYXRh cyBpcyBub3QgTm9uZToKKysgKiAgICAgICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBGYWxz ZQorKyAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcy5jb3VudGVyIDw9IDA6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgZGVsIHNlbGYucmVwbHlfdXNl cmRhdGFbaWRfZGF0YV0KKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorKyAqLworKyAgICB9Cisr CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzYKKysgKiAgICAgICAg IGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisrICogICAgICAg ICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorKyAq ICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gRmFsc2UKKysgKiAg ICAgICAgICAgICBpZiB1c2VyZGF0YXMuY291bnRlciA8PSAwOgorKyAqLworKyAgfQorKworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4MQorKyAqICAgICAgICAgICAgICAg ICBkZWwgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXQorKyAqICAgICAgICAgY2RlZiBpbnQg ZXJyCisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICAgICAgbXB2X3dha2V1cChzZWxmLl9jdHgpCistICogCisrICogICAgICAg ICAgICAgZXJyID0gbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSgKKysgKiAgICAgICAgICAgICAgICAg c2VsZi5fY3R4LAorICAqLworICAgeworICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorQEAgLTE0 NDMzLDIyICsxNDc0OSwyMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8zMHdha2V1cChzdHJ1Y3QgX19weXhfbworICAgICAgICNlbmRp ZgorICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3MTcKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgICAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3ODIKKysgKiAgICAgICAgIGNkZWYgaW50 IGVycgorICAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfd2FrZXVw KHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICBk ZWYgc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6CisrICogICAgICAgICAgICAg ZXJyID0gbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCisrICogICAgICAgICAgICAgICAgIGlk X2RhdGEsCisgICovCistICAgICAgICBtcHZfd2FrZXVwKF9fcHl4X3Zfc2VsZi0+X2N0eCk7Cisr ICAgICAgICBfX3B5eF92X2VyciA9IG1wdl91bm9ic2VydmVfcHJvcGVydHkoX19weXhfdl9zZWxm LT5fY3R4LCBfX3B5eF92X2lkX2RhdGEpOworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE2CistICogICAgICAgICAiIiJXcmFwczogbXB2X3dh a2V1cCIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3ODEKKysgKiAgICAgICAgICAgICAgICAgZGVsIHNlbGYu cmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0KKysgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgIG1wdl93YWtldXAoc2VsZi5fY3R4KQorLSAqIAorKyAqICAgICAgICAgICAgIGVyciA9 IG1wdl91bm9ic2VydmVfcHJvcGVydHkoCisrICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwK KyAgKi8KKyAgICAgICAvKmZpbmFsbHk6Ki8geworICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sK K0BAIC0xNDQ1NiwxNDEgKzE0NzcyLDEzNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMHdha2V1cChzdHJ1Y3QgX19weXhfbworICAg ICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworICAgICAgICAgICBQeV9CTE9DS19USFJF QURTCisgICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICBnb3RvIF9fcHl4X0w1OworKyAgICAg ICAgICBnb3RvIF9fcHl4X0w3OworICAgICAgICAgfQorLSAgICAgICAgX19weXhfTDU6OworKyAg ICAgICAgX19weXhfTDc6OworICAgICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3MTMKKy0gKiAgICAgICAgIHJldHVybiBFdmVudCgpLl9pbml0KGV2 ZW50LCBzZWxmKQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4NgorKyAq ICAgICAgICAgICAgICAgICBpZF9kYXRhLAorKyAqICAgICAgICAgICAgICkKKysgKiAgICAgICAg IHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorLSAqICAgICBk ZWYgd2FrZXVwKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAiIiJXcmFwczogbXB2X3dha2V1cCIiIgorKyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6Cisr ICovCisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgX19weXhfdF8zID0gX19QeXhfUHlJ bnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigwLCA3ODYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7 CisrICBfX3B5eF9yID0gX19weXhfdF8zOworKyAgX19weXhfdF8zID0gMDsKKysgIGdvdG8gX19w eXhfTDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzcxCisrICog CisrICogICAgIEBfZXJyb3JzCisrICogICAgIGRlZiB1bm9ic2VydmVfcHJvcGVydHkoc2VsZiwg ZGF0YSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIldyYXBz OiBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5IiIiCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4 CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQeV9O b25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworICAgX19weXhf TDFfZXJyb3I6OworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29u dGV4dC53YWtldXAiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1l KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKysgIF9fUHl4X1hERUNSRUYoX19w eXhfdF81KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsKKysgIF9fUHl4X0FkZFRyYWNl YmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQudW5vYnNlcnZlX3Byb3BlcnR5IiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5eF9yID0g TlVMTDsKKyAgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl91c2VyZGF0YXMp OworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzE5CistICogICAgICAgICAgICAgbXB2X3dha2V1cChzZWxmLl9jdHgp CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4OAorKyAqICAgICAgICAgcmV0 dXJuIGVycgorICAqIAorLSAqICAgICBkZWYgc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLCBjYWxs YmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICIiIldyYXBz OiBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAorKyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgorKyAqICAgICAgICAgICAgIHJl dHVybgorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzNzZXRfd2FrZXVwX2NhbGxi YWNrKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2NhbGxiYWNrKTsg Lypwcm90byovCistc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8zMnNldF93YWtldXBfY2FsbGJhY2tbXSA9ICJXcmFwczogbXB2X3NldF93YWtldXBf Y2FsbGJhY2siOworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzMzc2V0X3dha2V1cF9jYWxsYmFjayhQeU9iamVjdCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9jYWxsYmFjaykgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM5c2h1dGRvd24oUHlPYmplY3QgKl9f cHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCisr c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MzlzaHV0ZG93bihQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0 ICp1bnVzZWQpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X3dha2V1cF9j YWxsYmFjayAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMzJzZXRfd2FrZXVwX2NhbGxiYWNrKCgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksICgoUHlP YmplY3QgKilfX3B5eF92X2NhbGxiYWNrKSk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgic2h1dGRvd24gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oKChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7CisgCisgICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwor ICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyc2V0X3dha2V1cF9jYWxsYmFjayhzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X2NhbGxiYWNrKSB7CistICB1aW50NjRfdCBfX3B5eF92X25hbWU7Cisr c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MzhzaHV0ZG93bihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICpfX3B5eF92X3NlbGYpIHsKKysgIHVpbnQ2NF90IF9fcHl4X3ZfY3R4aWQ7CisgICBQeU9iamVj dCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlP YmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CistICB1aW50NjRfdCBfX3B5eF90XzI7CistICBQeU9i amVjdCAqX19weXhfdF8zID0gTlVMTDsKKysgIGludCBfX3B5eF90XzE7CisrICBQeU9iamVjdCAq X19weXhfdF8yID0gTlVMTDsKKysgIHVpbnQ2NF90IF9fcHl4X3RfMzsKKyAgIFB5T2JqZWN0ICpf X3B5eF90XzQgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CisgICBpbnQg X19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsK KyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJzZXRfd2FrZXVwX2NhbGxiYWNrIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgic2h1dGRvd24iLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MjEKKy0gKiAgICAgZGVmIHNldF93YWtldXBfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgor LSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrIiIiCistICogICAg ICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgIGNkZWYgdWludDY0X3QgbmFtZSA9IDx1aW50NjRfdD5pZChzZWxmKQorLSAqICAgICAg ICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Nzg5CisrICogCisrICogICAgIGRlZiBzaHV0ZG93bihzZWxmKToKKysgKiAgICAg ICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICAgICAgcmV0dXJuCisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0g PHVpbnQ2NF90PmlkKHNlbGYpCisgICovCistICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VS VElPTlMKKy0gIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworLSAgICBpZiAodW5s aWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7CistICAgICAgUHlFcnJfU2V0Tm9u ZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7CistICAgICAgX19QWVhfRVJSKDAsIDcyMSwgX19weXhf TDFfZXJyb3IpCistICAgIH0KKy0gIH0KKy0gICNlbmRpZgorKyAgX19weXhfdF8xID0gKChfX3B5 eF92X3NlbGYtPl9jdHggPT0gTlVMTCkgIT0gMCk7CisrICBpZiAoX19weXhfdF8xKSB7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzIyCistICogICAgICAgICAiIiJX cmFwczogbXB2X3NldF93YWtldXBfY2FsbGJhY2siIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxm Ll9jdHgKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgbmFtZSA9IDx1aW50NjRfdD5pZChzZWxm KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmNhbGxiYWNr ID0gY2FsbGJhY2sKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNr KQorLSAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF9i dWlsdGluX2lkLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDcyMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0FzX3VpbnQ2NF90KF9f cHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09ICgodWludDY0X3QpLTEpKSAmJiBQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDcyMiwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3ZfbmFtZSA9 ICgodWludDY0X3QpX19weXhfdF8yKTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3MjMKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIGNk ZWYgdWludDY0X3QgbmFtZSA9IDx1aW50NjRfdD5pZChzZWxmKQorLSAqICAgICAgICAgc2VsZi5j YWxsYmFjayA9IGNhbGxiYWNrICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNrKQorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzkwCisrICogICAgIGRlZiBzaHV0ZG93bihzZWxmKToKKysg KiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgorKyAqICAgICAgICAgICAgIHJldHVybiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0 eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqLwor LSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfY2FsbGJhY2spOworLSAgX19QeXhfR0lWRVJFRihfX3B5 eF92X2NhbGxiYWNrKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmNhbGxiYWNrKTsK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmNhbGxiYWNrKTsKKy0gIF9fcHl4X3Zfc2Vs Zi0+Y2FsbGJhY2sgPSBfX3B5eF92X2NhbGxiYWNrOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3IpOworKyAgICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworKyAg ICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjcyNAorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90PmlkKHNlbGYp CistICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKy0gKiAgICAgICAgIHNlbGYu Y2FsbGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNrKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG1wdl9zZXRfd2FrZXVw X2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1lKQorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg5CisrICogCisrICogICAgIGRlZiBzaHV0 ZG93bihzZWxmKToKKysgKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmV0dXJuCisrICogICAgICAgICBj ZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCisgICovCistICBfX3B5eF90 XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJl YWQsIF9fcHl4X25fc19zZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigw LCA3MjQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICBf X3B5eF90XzQgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKKy0gICAgX19weXhfdF80ID0gUHlNZXRob2Rf R0VUX1NFTEYoX19weXhfdF8zKTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CistICAg ICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMyk7 CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7CistICAgICAgX19QeXhfSU5DUkVGKGZ1 bmN0aW9uKTsKKy0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywgZnVuY3Rpb24pOwor LSAgICB9CisgICB9CistICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNCwgX19weXhfdl9jYWxsYmFjaykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdl9jYWxsYmFjayk7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3MjQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8z ID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyNQorLSAqICAgICAgICAgc2VsZi5j YWxsYmFjayA9IGNhbGxiYWNrCistICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChj YWxsYmFjaykKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTEKKysgKiAg ICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgorKyAqICAgICAgICAgICAgIHJldHVybgorKyAq ICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAg ICAgICAgIG1wdl90ZXJtaW5hdGVfZGVzdHJveShzZWxmLl9jdHgpCisrICovCisrICBfX3B5eF90 XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5faWQsICgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgNzkxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAg X19weXhfdF8zID0gX19QeXhfUHlJbnRfQXNfdWludDY0X3QoX19weXhfdF8yKTsgaWYgKHVubGlr ZWx5KChfX3B5eF90XzMgPT0gKCh1aW50NjRfdCktMSkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBf X1BZWF9FUlIoMCwgNzkxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhfdl9jdHhpZCA9ICgodWludDY0X3QpX19weXhf dF8zKTsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTIKKysgKiAg ICAgICAgICAgICByZXR1cm4KKysgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWlu dDY0X3Q+aWQoc2VsZikKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxm Ll9jdHgsIF9jX2NhbGxiYWNrLCA8dm9pZCo+bmFtZSkKKy0gKiAKKysgKiAgICAgICAgICAgICBt cHZfdGVybWluYXRlX2Rlc3Ryb3koc2VsZi5fY3R4KQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFj a3RocmVhZC5zaHV0ZG93bigpCisgICovCisgICB7CisgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFE CitAQCAtMTQ2MDAsMjIgKzE0OTA5LDIyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyc2V0X3dha2V1cF9jYWxsYmFjayhzCisgICAg ICAgI2VuZGlmCisgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjcyNgorLSAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5z ZXQoY2FsbGJhY2spCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzkzCisrICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYp CisgICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG1wdl9zZXRfd2FrZXVw X2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1lKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGRlZiBnZXRfd2FrZXVwX3BpcGUoc2Vs Zik6CisrICogICAgICAgICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KHNlbGYuX2N0eCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVh ZC5zaHV0ZG93bigpCisrICogICAgICAgICBkZWwgX2NhbGxiYWNrc1tjdHhpZF0KKyAgKi8KKy0g ICAgICAgIG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfY2FsbGJhY2ssICgodm9pZCAqKV9fcHl4X3ZfbmFt ZSkpOworKyAgICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KF9fcHl4X3Zfc2VsZi0+X2N0eCk7 CisgICAgICAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MjUKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjaworLSAqICAgICAgICAgc2Vs Zi5jYWxsYmFja3RocmVhZC5zZXQoY2FsbGJhY2spCisrICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc5MgorKyAqICAgICAgICAgICAgIHJldHVybgorKyAqICAgICAgICAg Y2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKQorICAqICAgICAgICAgd2l0 aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG1w dl9zZXRfd2FrZXVwX2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1l KQorLSAqIAorKyAqICAgICAgICAgICAgIG1wdl90ZXJtaW5hdGVfZGVzdHJveShzZWxmLl9jdHgp CisrICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNodXRkb3duKCkKKyAgKi8KKyAgICAg ICAvKmZpbmFsbHk6Ki8geworICAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKK0BAIC0xNDYyMywy OCArMTQ5MzIsMTA3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzMyc2V0X3dha2V1cF9jYWxsYmFjayhzCisgICAgICAgICAgIF9fUHl4 X0Zhc3RHSUxfRm9yZ2V0KCk7CisgICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKyAgICAgICAg ICAgI2VuZGlmCistICAgICAgICAgIGdvdG8gX19weXhfTDU7CisrICAgICAgICAgIGdvdG8gX19w eXhfTDY7CisgICAgICAgICB9CistICAgICAgICBfX3B5eF9MNTo7CisrICAgICAgICBfX3B5eF9M Njo7CisgICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjcxOQorLSAqICAgICAgICAgICAgIG1wdl93YWtldXAoc2VsZi5fY3R4KQorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5NAorKyAqICAgICAgICAgd2l0aCBub2dpbDoK KysgKiAgICAgICAgICAgICBtcHZfdGVybWluYXRlX2Rlc3Ryb3koc2VsZi5fY3R4KQorKyAqICAg ICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zaHV0ZG93bigpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIGRlbCBfY2FsbGJhY2tzW2N0eGlkXQorKyAqICAgICAgICAg ZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdCisrICovCisrICBfX3B5eF90XzQgPSBfX1B5eF9Q eU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQsIF9fcHl4X25f c19zaHV0ZG93bik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc5NCwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgIF9fcHl4X3Rf NSA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhv ZF9DaGVjayhfX3B5eF90XzQpKSkgeworKyAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VM RihfX3B5eF90XzQpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsKKysgICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF80KTsKKysgICAg ICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24p OworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF80LCBmdW5jdGlvbik7CisrICAgIH0K KysgIH0KKysgIF9fcHl4X3RfMiA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19w eXhfdF80KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKysg IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc5NCwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk1CisrICog ICAgICAgICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KHNlbGYuX2N0eCkKKysgKiAgICAgICAg IHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQorKyAqICAgICAgICAgZGVsIF9jYWxsYmFj a3NbY3R4aWRdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGRlbCBf cmVwbHlfdXNlcmRhdGFzW2N0eGlkXQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUK KysgKi8KKysgIGlmICh1bmxpa2VseShfX1B5eF9EZWxJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRl cl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3ZfY3R4aWQsIHVpbnQ2NF90LCAwLCBfX1B5 eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzk1LCBf X3B5eF9MMV9lcnJvcikKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 OTYKKysgKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQorKyAqICAgICAg ICAgZGVsIF9jYWxsYmFja3NbY3R4aWRdCisrICogICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRh c1tjdHhpZF0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5j YWxsYmFjayA9IE5vbmUKKysgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBOb25lCisr ICovCisrICBpZiAodW5saWtlbHkoX19QeXhfRGVsSXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRfdCwgMCwg X19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc5 NiwgX19weXhfTDFfZXJyb3IpCisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6Nzk3CisrICogICAgICAgICBkZWwgX2NhbGxiYWNrc1tjdHhpZF0KKysgKiAgICAgICAgIGRl bCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5v bmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5yZXBseV91 c2VyZGF0YSA9IE5vbmUKKysgKiAgICAgICAgIHNlbGYuX2N0eCA9IE5VTEwKKysgKi8KKysgIF9f UHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CisrICBfX1B5 eF9HT1RSRUYoX19weXhfdl9zZWxmLT5jYWxsYmFjayk7CisrICBfX1B5eF9ERUNSRUYoX19weXhf dl9zZWxmLT5jYWxsYmFjayk7CisrICBfX3B5eF92X3NlbGYtPmNhbGxiYWNrID0gUHlfTm9uZTsK KysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTgKKysgKiAgICAgICAg IGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9 IE5vbmUKKysgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBOb25lICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuX2N0eCA9IE5VTEwKKyAgKiAKKy0g KiAgICAgZGVmIHNldF93YWtldXBfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFwczogbXB2X3NldF93YWtldXBf Y2FsbGJhY2siIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKi8KKysgIF9fUHl4 X0lOQ1JFRihQeV9Ob25lKTsKKysgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CisrICBfX1B5eF9H T1RSRUYoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSk7CisrICBfX1B5eF9ERUNSRUYoX19w eXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSk7CisrICBfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJk YXRhID0gUHlfTm9uZTsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 OTkKKysgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lCisrICogICAgICAgICBzZWxmLnJl cGx5X3VzZXJkYXRhID0gTm9uZQorKyAqICAgICAgICAgc2VsZi5fY3R4ID0gTlVMTCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgICMgZGVmIG9wZW5nbF9jYl9hcGko c2VsZik6CisrICovCisrICBfX3B5eF92X3NlbGYtPl9jdHggPSBOVUxMOworKworKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4OAorKyAqICAgICAgICAgcmV0dXJuIGVycgor KyAqIAorKyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgorKyAqICAgICAgICAgICAg IHJldHVybgorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX3B5eF9y ID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworICAgZ290byBfX3B5eF9MMDsKKyAg IF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKyAgIF9f UHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2LkNvbnRleHQuc2V0X3dha2V1cF9jYWxsYmFjayIsIF9fcHl4X2NsaW5lbm8sIF9f cHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUp OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5zaHV0 ZG93biIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAg X19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9y KTsKK0BAIC0xNDY1MiwzNzQgKzE1MDQwLDQwMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMnNldF93YWtldXBfY2FsbGJhY2socwor ICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3MjgKKy0gKiAgICAgICAgICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9j dHgsIF9jX2NhbGxiYWNrLCA8dm9pZCo+bmFtZSkKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODEzCisrICogICAgICMgICAgIHJldHVybiBjdHgKKysgKiAKKysgKiAgICAgZGVm IF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICBzZWxmLnNodXRkb3duKCkKKyAgKiAKKy0gKiAgICAgZGVmIGdldF93YWtldXBfcGlwZShz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6 IG1wdl9nZXRfd2FrZXVwX3BpcGUiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAg Ki8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM1Z2V0X3dha2V1cF9waXBlKFB5T2JqZWN0 ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8q LworLXN0YXRpYyBjaGFyIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MzRnZXRfd2FrZXVwX3BpcGVbXSA9ICJXcmFwczogbXB2X2dldF93YWtldXBfcGlwZSI7Cistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzVn ZXRfd2FrZXVwX3BpcGUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9i amVjdCAqdW51c2VkKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7Cisrc3RhdGljIHZvaWQg X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQxX19kZWFsbG9jX18oUHlP YmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworK3N0YXRpYyB2b2lkIF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80MV9fZGVhbGxvY19fKFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYpIHsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiZ2V0X3dha2V1cF9waXBlICh3cmFwcGVyKSIsIDApOworLSAgX19w eXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNGdldF93YWtl dXBfcGlwZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQg KilfX3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlYWxs b2NfXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF80MF9fZGVhbGxvY19fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5 eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8zNGdldF93YWtldXBfcGlwZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKy0gIGludCBfX3B5eF92X3Bp cGU7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Cisrc3RhdGljIHZvaWQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQwX19kZWFsbG9jX18oc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqX19weXhfdl9zZWxmKSB7CisgICBf X1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7 CisrICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzMg PSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9m aWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiZ2V0X3dha2V1cF9waXBlIiwgMCk7CisrICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18iLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3MzAKKy0gKiAgICAgZGVmIGdldF93YWtldXBfcGlwZShzZWxmKToK Ky0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfZ2V0X3dha2V1cF9waXBlIiIiCistICogICAgICAg ICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIGNkZWYgaW50IHBpcGUKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODE0CisrICogCisrICogICAgIGRlZiBfX2RlYWxsb2Nf XyhzZWxmKToKKysgKiAgICAgICAgIHNlbGYuc2h1dGRvd24oKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogCisrICogY2RlZiB2b2lkICpfY19nZXRwcm9jYWRkcmVzcyh2b2lkICpj dHgsIGNvbnN0IGNoYXIgKm5hbWUpIHdpdGggZ2lsOgorICAqLworLSAgI2lmbmRlZiBDWVRIT05f V0lUSE9VVF9BU1NFUlRJT05TCistICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsK Ky0gICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworLSAgICAg IFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigw LCA3MzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX3NodXRkb3duKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgODE0LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgX19weXhfdF8zID0gTlVMTDsKKysg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfMikpKSB7CisrICAgIF9fcHl4X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7 CisrICAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworKyAgICAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzMpOworKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKyAgICAgfQorICAgfQorLSAgI2Vu ZGlmCisrICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF8yLCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4 X3RfMik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4MTQsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczMgorLSAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorLSAqICAgICAgICAgY2RlZiBpbnQgcGlwZQorLSAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgIHBpcGUgPSBtcHZfZ2V0X3dha2V1cF9waXBlKHNlbGYuX2N0eCkKKy0gKiAgICAgICAg IHJldHVybiBwaXBlCistICovCistICB7CistICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAg ICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgUHlfVU5CTE9DS19USFJFQURTCistICAg ICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAgICNlbmRpZgorLSAgICAgIC8qdHJ5 OiovIHsKKy0KKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzMK Ky0gKiAgICAgICAgIGNkZWYgaW50IHBpcGUKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICog ICAgICAgICAgICAgcGlwZSA9IG1wdl9nZXRfd2FrZXVwX3BpcGUoc2VsZi5fY3R4KSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICByZXR1cm4gcGlwZQorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxMworKyAqICAgICAjICAgICByZXR1cm4gY3R4 CisrICogCisrICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5zaHV0ZG93bigpCisgICogCisgICovCistICAg ICAgICBfX3B5eF92X3BpcGUgPSBtcHZfZ2V0X3dha2V1cF9waXBlKF9fcHl4X3Zfc2VsZi0+X2N0 eCk7CistICAgICAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MzIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIGNkZWYgaW50 IHBpcGUKKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICBwaXBlID0gbXB2X2dldF93YWtldXBfcGlwZShzZWxmLl9jdHgp CistICogICAgICAgICByZXR1cm4gcGlwZQorKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisr ICBnb3RvIF9fcHl4X0wwOworKyAgX19weXhfTDFfZXJyb3I6OworKyAgX19QeXhfWERFQ1JFRihf X3B5eF90XzEpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworKyAgX19QeXhfWERFQ1JF RihfX3B5eF90XzMpOworKyAgX19QeXhfV3JpdGVVbnJhaXNhYmxlKCJ2aWRjdXR0ZXIubGlicy5t cHYuQ29udGV4dC5fX2RlYWxsb2NfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19w eXhfZmlsZW5hbWUsIDEsIDApOworKyAgX19weXhfTDA6OworKyAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CisrfQorKworKy8qICIodHJlZSBmcmFnbWVudCkiOjEKKysgKiBkZWYgX19y ZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5vbi10cml2 aWFsIF9fY2luaXRfXyIpCisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhf c3RhdGUpOgorICAqLworLSAgICAgIC8qZmluYWxseToqLyB7CistICAgICAgICAvKm5vcm1hbCBl eGl0OioveworLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAgICAgX19QeXhf RmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworLSAgICAgICAg ICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNTsKKy0gICAgICAgIH0KKy0gICAgICAg IF9fcHl4X0w1OjsKKy0gICAgICB9CistICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzM0CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAg IHBpcGUgPSBtcHZfZ2V0X3dha2V1cF9waXBlKHNlbGYuX2N0eCkKKy0gKiAgICAgICAgIHJldHVy biBwaXBlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgZGVmIF9f Y2luaXRfXyhzZWxmKToKKysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQzX19yZWR1Y2VfY3l0aG9u X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2Vk KTsgLypwcm90byovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfNDNfX3JlZHVjZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxm LCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9y ID0gMDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9y ID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQyX19yZWR1Y2VfY3l0 aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICop X19weXhfdl9zZWxmKSk7CisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorKworK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQy X19yZWR1Y2VfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKysgIFB5T2JqZWN0ICpfX3B5 eF9yID0gTlVMTDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBQeU9iamVjdCAq X19weXhfdF8xID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAwOworKyAgY29uc3QgY2hh ciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fIiwgMCk7CisrCisr ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoyCisrICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYp OgorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8g bm9uLXRyaXZpYWwgX19jaW5pdF9fIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq IGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgcmFp c2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5vbi10cml2aWFsIF9f Y2luaXRfXyIpCisgICovCistICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8x ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9waXBlKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNzM0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9 IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4X3R1cGxl X18zLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMiwgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3IgPSBf X3B5eF90XzE7CistICBfX3B5eF90XzEgPSAwOworLSAgZ290byBfX3B5eF9MMDsKKysgIF9fUHl4 X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKysgIF9fUFlYX0VSUigxLCAyLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjgKKy0gKiAgICAgICAgICAgICBt cHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9jdHgsIF9jX2NhbGxiYWNrLCA8dm9pZCo+bmFt ZSkKKy0gKiAKKy0gKiAgICAgZGVmIGdldF93YWtldXBfcGlwZShzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9nZXRfd2FrZXVwX3Bp cGUiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgIC8qICIodHJlZSBmcmFnbWVu dCkiOjEKKysgKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNl X18gZHVlIHRvIG5vbi10cml2aWFsIF9fY2luaXRfXyIpCisrICogZGVmIF9fc2V0c3RhdGVfY3l0 aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCisgICBfX3B5eF9MMV9lcnJvcjo7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmdldF93 YWtldXBfcGlwZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5fX3Jl ZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOworICAgX19weXhfciA9IE5VTEw7CistICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJF RihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJu IF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzYK Ky0gKiAgICAgICAgIHJldHVybiBwaXBlCistICogCistICogICAgIGRlZiBfX2Npbml0X18oc2Vs Zik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgdWludDY0 X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikKKy0gKiAgICAgICAgIHdpdGggbm9naWw6Cisr LyogIih0cmVlIGZyYWdtZW50KSI6MworKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToK KysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5v bi10cml2aWFsIF9fY2luaXRfXyIpCisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwg X19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHJhaXNl IFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Np bml0X18iKQorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIGludCBfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzdfX2Npbml0X18oUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2Rz KTsgLypwcm90byovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMzdfX2Npbml0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CistICBpbnQgX19weXhfcjsKKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80NV9f c2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3ZfX19weXhfc3RhdGUpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80NV9fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKysgIFB5 T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19jaW5pdF9fICh3cmFwcGVyKSIsIDApOworLSAg aWYgKHVubGlrZWx5KFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgPiAwKSkgeworLSAgICBf X1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19jaW5pdF9fIiwgMSwgMCwgMCwgUHlUdXBsZV9H RVRfU0laRShfX3B5eF9hcmdzKSk7IHJldHVybiAtMTt9CistICBpZiAodW5saWtlbHkoX19weXhf a3dkcykgJiYgdW5saWtlbHkoUHlEaWN0X1NpemUoX19weXhfa3dkcykgPiAwKSAmJiB1bmxpa2Vs eSghX19QeXhfQ2hlY2tLZXl3b3JkU3RyaW5ncyhfX3B5eF9rd2RzLCAiX19jaW5pdF9fIiwgMCkp KSByZXR1cm4gLTE7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzM2X19jaW5pdF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ0X19zZXRzdGF0ZV9jeXRo b25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilf X3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOworIAorICAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNl9fY2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKy0gIHVpbnQ2NF90 IF9fcHl4X3ZfY3R4aWQ7CistICBpbnQgX19weXhfcjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80NF9fc2V0c3RhdGVfY3l0aG9uX18o Q1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf c3RhdGUpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIHVpbnQ2NF90 IF9fcHl4X3RfMjsKKy0gIGludCBfX3B5eF90XzM7CistICBQeU9iamVjdCAqX19weXhfdF80ID0g TlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVu byA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19jaW5pdF9f IiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25f XyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczNworLSAq IAorLSAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOgorLSAqICAgICAgICAgY2RlZiB1aW50NjRf dCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIHNlbGYuX2N0eCA9IG1w dl9jcmVhdGUoKQorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6NAorKyAqICAgICByYWlzZSBUeXBl RXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9f IikKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CisrICog ICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJp dmlhbCBfX2Npbml0X18iKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICovCistICBf X3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5faWQsICgo UHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgNzM3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2Jq ZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4X3R1cGxlX180LCBOVUxMKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50 X0FzX3VpbnQ2NF90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09ICgodWlu dDY0X3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDczNywgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOworICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX3B5eF92X2N0eGlkID0gKCh1 aW50NjRfdClfX3B5eF90XzIpOworKyAgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczOAorLSAqICAgICBkZWYg X19jaW5pdF9fKHNlbGYpOgorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50 NjRfdD5pZChzZWxmKQorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHNlbGYuX2N0eCA9IG1wdl9jcmVhdGUoKQorLSAq ICAgICAgICAgaWYgbm90IHNlbGYuX2N0eDoKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjMKKysg KiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigi bm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKQorKyAq IGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19y ZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikKKyAgKi8KKy0gIHsKKy0gICAg ICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKy0gICAg ICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7Cist ICAgICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjczOQorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhp ZCA9IDx1aW50NjRfdD5pZChzZWxmKQorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAg ICAgICAgICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgaWYgbm90IHNlbGYuX2N0eDoKKy0gKiAgICAgICAgICAgICByYWlz ZSBNUFZFcnJvcigiQ29udGV4dCBjcmVhdGlvbiBlcnJvciIpCisrICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KKysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8x KTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX19z ZXRzdGF0ZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOworKyAgX19weXhfciA9IE5VTEw7CisrICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsK KysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7Cisr fQorKworKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MTYKKysgKiAgICAgICAg IHNlbGYuc2h1dGRvd24oKQorKyAqIAorKyAqIGNkZWYgdm9pZCAqX2NfZ2V0cHJvY2FkZHJlc3Mo dm9pZCAqY3R4LCBjb25zdCBjaGFyICpuYW1lKSB3aXRoIGdpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICByZXR1cm4gPHZvaWQgKj48aW50cHRyX3Q+KDxvYmplY3Q+Y3R4 KShuYW1lKQorKyAqIAorICAqLworLSAgICAgICAgX19weXhfdl9zZWxmLT5fY3R4ID0gbXB2X2Ny ZWF0ZSgpOworLSAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NzM4CistICogICAgIGRlZiBfX2Npbml0X18oc2VsZik6CistICogICAgICAgICBjZGVm IHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCistICogICAgICAgICB3aXRoIG5v Z2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgc2VsZi5f Y3R4ID0gbXB2X2NyZWF0ZSgpCistICogICAgICAgICBpZiBub3Qgc2VsZi5fY3R4OgorK3N0YXRp YyB2b2lkICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY19nZXRwcm9jYWRkcmVzcyh2 b2lkICpfX3B5eF92X2N0eCwgY2hhciBjb25zdCAqX19weXhfdl9uYW1lKSB7CisrICB2b2lkICpf X3B5eF9yOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIFB5T2JqZWN0ICpfX3B5 eF90XzEgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVj dCAqX19weXhfdF8zID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAg aW50cHRyX3QgX19weXhfdF81OworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cisr ICAjaWZkZWYgV0lUSF9USFJFQUQKKysgIFB5R0lMU3RhdGVfU1RBVEUgX19weXhfZ2lsc3RhdGVf c2F2ZSA9IF9fUHl4X1B5R0lMU3RhdGVfRW5zdXJlKCk7CisrICAjZW5kaWYKKysgIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfY19nZXRwcm9jYWRkcmVzcyIsIDApOworKworKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNworKyAqIAorKyAqIGNkZWYgdm9pZCAqX2Nf Z2V0cHJvY2FkZHJlc3Modm9pZCAqY3R4LCBjb25zdCBjaGFyICpuYW1lKSB3aXRoIGdpbDoKKysg KiAgICAgcmV0dXJuIDx2b2lkICo+PGludHB0cl90Pig8b2JqZWN0PmN0eCkobmFtZSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAqIGNkZWYgdm9pZCBfY191cGRhdGVjYih2 b2lkICpjdHgpIHdpdGggZ2lsOgorICAqLworLSAgICAgIC8qZmluYWxseToqLyB7CistICAgICAg ICAvKm5vcm1hbCBleGl0OioveworLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAg ICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFE UworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNTsKKy0gICAgICAg IH0KKy0gICAgICAgIF9fcHl4X0w1OjsKKy0gICAgICB9CisrICBfX3B5eF90XzIgPSBfX1B5eF9Q eUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgODE3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworKyAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X2N0eCkpOworKyAg X19weXhfdF8zID0gKChQeU9iamVjdCAqKV9fcHl4X3ZfY3R4KTsgX19weXhfdF80ID0gTlVMTDsK KysgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF8zKSkpIHsKKysgICAgX19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhf dF8zKTsKKysgICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1 bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMyk7CisrICAgICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfNCk7CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAg ICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywgZnVuY3Rpb24pOworKyAgICB9CisgICB9Cisr ICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzMsIF9fcHl4X3RfNCwgX19weXhfdF8yKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8zLCBfX3B5eF90XzIpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5 eF90XzQgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisr ICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4MTcsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhf dF8zKTsgX19weXhfdF8zID0gMDsKKysgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FzX2ludHB0 cl90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF81ID09ICgoaW50cHRyX3QpLTEp KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDgxNywgX19weXhfTDFfZXJyb3Ip CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9fcHl4X3Ig PSAoKHZvaWQgKikoKGludHB0cl90KV9fcHl4X3RfNSkpOworKyAgZ290byBfX3B5eF9MMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDAKKy0gKiAgICAgICAgIHdp dGggbm9naWw6CistICogICAgICAgICAgICAgc2VsZi5fY3R4ID0gbXB2X2NyZWF0ZSgpCistICog ICAgICAgICBpZiBub3Qgc2VsZi5fY3R4OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKQor LSAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZCA9IENhbGxiYWNrVGhyZWFkKCkKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MTYKKysgKiAgICAgICAgIHNlbGYuc2h1 dGRvd24oKQorKyAqIAorKyAqIGNkZWYgdm9pZCAqX2NfZ2V0cHJvY2FkZHJlc3Modm9pZCAqY3R4 LCBjb25zdCBjaGFyICpuYW1lKSB3aXRoIGdpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICByZXR1cm4gPHZvaWQgKj48aW50cHRyX3Q+KDxvYmplY3Q+Y3R4KShuYW1lKQor KyAqIAorICAqLworLSAgX19weXhfdF8zID0gKCghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkg IT0gMCk7CistICBpZiAodW5saWtlbHkoX19weXhfdF8zKSkgeworIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQxCistICogICAgICAgICAgICAgc2VsZi5fY3R4ID0g bXB2X2NyZWF0ZSgpCistICogICAgICAgICBpZiBub3Qgc2VsZi5fY3R4OgorLSAqICAgICAgICAg ICAgIHJhaXNlIE1QVkVycm9yKCJDb250ZXh0IGNyZWF0aW9uIGVycm9yIikgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZCA9IENhbGxi YWNrVGhyZWFkKCkKKy0gKiAgICAgICAgIF9jYWxsYmFja3NbY3R4aWRdID0gc2VsZi5jYWxsYmFj a3RocmVhZAorLSAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwg X19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIo MCwgNzQxLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Cist ICAgIF9fcHl4X3RfNSA9IE5VTEw7CistICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg dW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKKy0gICAgICBfX3B5eF90XzUg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzQpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhf dF81KSkgeworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfNCk7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKy0gICAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfNCwgZnVuY3Rpb24pOworLSAgICAgIH0KKy0gICAgfQorLSAgICBfX3B5eF90XzEgPSAo X19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzQsIF9fcHl4X3Rf NSwgX19weXhfa3Bfc19Db250ZXh0X2NyZWF0aW9uX2Vycm9yKSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF80LCBfX3B5eF9rcF9zX0NvbnRleHRfY3JlYXRpb25fZXJyb3IpOwor LSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CistICAgIGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDc0MSwgX19weXhfTDFfZXJyb3IpCist ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKKy0gICAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsK Ky0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fUFlY X0VSUigwLCA3NDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICov CisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Cisr ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CisrICBfX1B5eF9Xcml0ZVVucmFpc2FibGUoInZp ZGN1dHRlci5saWJzLm1wdi5fY19nZXRwcm9jYWRkcmVzcyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUsIDEsIDApOworKyAgX19weXhfciA9IDA7CisrICBfX3B5 eF9MMDo7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgICNpZmRlZiBXSVRI X1RIUkVBRAorKyAgX19QeXhfUHlHSUxTdGF0ZV9SZWxlYXNlKF9fcHl4X2dpbHN0YXRlX3NhdmUp OworKyAgI2VuZGlmCisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDAKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICog ICAgICAgICAgICAgc2VsZi5fY3R4ID0gbXB2X2NyZWF0ZSgpCistICogICAgICAgICBpZiBub3Qg c2VsZi5fY3R4OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg cmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKQorLSAqICAgICAgICAgc2Vs Zi5jYWxsYmFja3RocmVhZCA9IENhbGxiYWNrVGhyZWFkKCkKKysvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODE5CisrICogICAgIHJldHVybiA8dm9pZCAqPjxpbnRwdHJfdD4oPG9i amVjdD5jdHgpKG5hbWUpCisrICogCisrICogY2RlZiB2b2lkIF9jX3VwZGF0ZWNiKHZvaWQgKmN0 eCkgd2l0aCBnaWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgKDxvYmpl Y3Q+Y3R4KSgpCisrICogCisgICovCistICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzQyCistICogICAgICAgICBpZiBub3Qgc2VsZi5fY3R4OgorLSAqICAgICAg ICAgICAgIHJhaXNlIE1QVkVycm9yKCJDb250ZXh0IGNyZWF0aW9uIGVycm9yIikKKy0gKiAgICAg ICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQgPSBDYWxsYmFja1RocmVhZCgpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIF9jYWxsYmFja3NbY3R4aWRdID0gc2VsZi5jYWxs YmFja3RocmVhZAorLSAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IGRpY3QoKQorK3N0 YXRpYyB2b2lkIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX3VwZGF0ZWNiKHZvaWQg Kl9fcHl4X3ZfY3R4KSB7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgUHlPYmpl Y3QgKl9fcHl4X3RfMSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKysg IFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cisr ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVu byA9IDA7CisrICAjaWZkZWYgV0lUSF9USFJFQUQKKysgIFB5R0lMU3RhdGVfU1RBVEUgX19weXhf Z2lsc3RhdGVfc2F2ZSA9IF9fUHl4X1B5R0lMU3RhdGVfRW5zdXJlKCk7CisrICAjZW5kaWYKKysg IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfY191cGRhdGVjYiIsIDApOworKworKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgyMAorKyAqIAorKyAqIGNkZWYgdm9pZCBf Y191cGRhdGVjYih2b2lkICpjdHgpIHdpdGggZ2lsOgorKyAqICAgICAoPG9iamVjdD5jdHgpKCkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAqICMgY2RlZiBjbGFzcyBPcGVu R0xDb250ZXh0KG9iamVjdCk6CisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9f cHl4X3RfNCwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzQpKSBfX1BZWF9FUlIoMCwgNzQyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOworLSAgX19weXhfdF81ID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKKy0gICAgX19w eXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF80KTsKKy0gICAgaWYgKGxpa2VseShf X3B5eF90XzUpKSB7CistICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZV TkNUSU9OKF9fcHl4X3RfNCk7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7CisrICBf X1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKV9fcHl4X3ZfY3R4KSk7CisrICBfX3B5eF90XzIgPSAo KFB5T2JqZWN0ICopX19weXhfdl9jdHgpOyBfX3B5eF90XzMgPSBOVUxMOworKyAgaWYgKENZVEhP Tl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkg eworKyAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICBp ZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1l dGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhf dF8zKTsKKyAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JF Rl9TRVQoX19weXhfdF80LCBmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzIsIGZ1bmN0aW9uKTsKKyAgICAgfQorICAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3Rf NSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNCwgX19weXhfdF81KSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzQpOworLSAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzUpOyBfX3B5eF90XzUgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgNzQyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMp ID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dF8zKTsgX19weXhfdF8zID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDgyMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgX19QeXhfR0lW RVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0 aHJlYWQpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQpOwor LSAgX19weXhfdl9zZWxmLT5jYWxsYmFja3RocmVhZCA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3Rf MSA9IDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQzCistICog ICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKQorLSAq ICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZCA9IENhbGxiYWNrVGhyZWFkKCkKKy0gKiAgICAg ICAgIF9jYWxsYmFja3NbY3R4aWRdID0gc2VsZi5jYWxsYmFja3RocmVhZCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gZGljdCgp CistICogICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXSA9IHNlbGYucmVwbHlfdXNlcmRh dGEKKy0gKi8KKy0gIF9fcHl4X3RfMSA9IF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQ7Cist ICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKy0gIGlmICh1bmxpa2VseShfX1B5eF9TZXRJdGVt SW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3ZfY3R4 aWQsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAs IDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA3NDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf REVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3NDQKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQgPSBDYWxsYmFja1RocmVh ZCgpCistICogICAgICAgICBfY2FsbGJhY2tzW2N0eGlkXSA9IHNlbGYuY2FsbGJhY2t0aHJlYWQK Ky0gKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBkaWN0KCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gPSBzZWxm LnJlcGx5X3VzZXJkYXRhCistICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnN0YXJ0KCkK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MTkKKysgKiAgICAgcmV0dXJu IDx2b2lkICo+PGludHB0cl90Pig8b2JqZWN0PmN0eCkobmFtZSkKKysgKiAKKysgKiBjZGVmIHZv aWQgX2NfdXBkYXRlY2Iodm9pZCAqY3R4KSB3aXRoIGdpbDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAoPG9iamVjdD5jdHgpKCkKKysgKiAKKyAgKi8KKy0gIF9fcHl4X3Rf MSA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgNzQ0LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVGKF9f cHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2Vs Zi0+cmVwbHlfdXNlcmRhdGEpOworLSAgX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSA9IF9f cHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzQ1CistICogICAgICAgICBfY2FsbGJhY2tzW2N0eGlkXSA9IHNlbGYuY2Fs bGJhY2t0aHJlYWQKKy0gKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBkaWN0KCkKKy0g KiAgICAgICAgIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdID0gc2VsZi5yZXBseV91c2VyZGF0YSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhy ZWFkLnN0YXJ0KCkKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgZ290byBfX3B5eF9M MDsKKysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsK KysgIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0dGVyLmxpYnMubXB2Ll9jX3VwZGF0ZWNi IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7Cisr ICBfX3B5eF9MMDo7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgICNpZmRl ZiBXSVRIX1RIUkVBRAorKyAgX19QeXhfUHlHSUxTdGF0ZV9SZWxlYXNlKF9fcHl4X2dpbHN0YXRl X3NhdmUpOworKyAgI2VuZGlmCisrfQorKworKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo4ODYKKysgKiAgICAgICAgIG9iamVjdCBvd25lZAorICAqIAorKyAqICAgICBkZWYgX19p bml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNl bGYub3duZWQgPSBbXQorKyAqICAgICAgICAgc2VsZi5wYXJhbXNbMF0udHlwZSA9IE1QVl9SRU5E RVJfUEFSQU1fSU5WQUxJRAorICAqLworLSAgX19weXhfdF8xID0gX19weXhfdl9zZWxmLT5yZXBs eV91c2VyZGF0YTsKKy0gIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworLSAgaWYgKHVubGlrZWx5 KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3Vz ZXJkYXRhcywgX19weXhfdl9jdHhpZCwgX19weXhfdF8xLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJ bnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc0NSwgX19weXhf TDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDYKKy0gKiAgICAgICAgIHNl bGYucmVwbHlfdXNlcmRhdGEgPSBkaWN0KCkKKy0gKiAgICAgICAgIF9yZXBseV91c2VyZGF0YXNb Y3R4aWRdID0gc2VsZi5yZXBseV91c2VyZGF0YQorLSAqICAgICAgICAgc2VsZi5jYWxsYmFja3Ro cmVhZC5zdGFydCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysvKiBQeXRob24gd3Jh cHBlciAqLworK3N0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1Jl bmRlclBhcmFtc18xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisrc3RhdGljIGludCBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzFfX2luaXRfXyhQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9f cHl4X2t3ZHMpIHsKKysgIGludCBfX3B5eF9yOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlv bnMKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyAod3JhcHBlcikiLCAw KTsKKysgIGlmICh1bmxpa2VseShQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpID4gMCkpIHsK KysgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMSwgMCwgMCwgUHlU dXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IHJldHVybiAtMTt9CisrICBpZiAodW5saWtlbHko X19weXhfa3dkcykgJiYgdW5saWtlbHkoUHlEaWN0X1NpemUoX19weXhfa3dkcykgPiAwKSAmJiB1 bmxpa2VseSghX19QeXhfQ2hlY2tLZXl3b3JkU3RyaW5ncyhfX3B5eF9rd2RzLCAiX19pbml0X18i LCAwKSkpIHJldHVybiAtMTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNfUmVuZGVyUGFyYW1zX19faW5pdF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3Zfc2VsZikpOworKworKyAgLyog ZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsK KysgIHJldHVybiBfX3B5eF9yOworK30KKysKKytzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfX19pbml0X18oc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9zZWxmKSB7CisrICBp bnQgX19weXhfcjsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBQeU9iamVjdCAq X19weXhfdF8xID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAwOworKyAgY29uc3QgY2hh ciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwgMCk7CisrCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODg3CisrICogCisrICogICAgIGRlZiBfX2luaXRf XyhzZWxmKToKKysgKiAgICAgICAgIHNlbGYub3duZWQgPSBbXSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLnBhcmFtc1swXS50eXBlID0gTVBWX1JFTkRFUl9Q QVJBTV9JTlZBTElECisgICogCistICogICAgIEBfZXJyb3JzCisgICovCistICBfX3B5eF90XzQg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQs IF9fcHl4X25fc19zdGFydCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAs IDc0NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gIF9f cHl4X3RfNSA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQ eU1ldGhvZF9DaGVjayhfX3B5eF90XzQpKSkgeworLSAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9H RVRfU0VMRihfX3B5eF90XzQpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsKKy0gICAg ICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF80KTsK Ky0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVu Y3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF80LCBmdW5jdGlvbik7Cist ICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9B cmcoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0g MDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDc0NiwgX19weXhf TDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBQeUxpc3RfTmV3KDApOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4ODcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19QeXhf R0lWRVJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+b3duZWQp OworKyAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+b3duZWQpOworKyAgX19weXhfdl9zZWxm LT5vd25lZCA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzM2CistICogICAgICAgICByZXR1cm4gcGlwZQorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4OAorKyAqICAgICBkZWYgX19pbml0 X18oc2VsZik6CisrICogICAgICAgICBzZWxmLm93bmVkID0gW10KKysgKiAgICAgICAgIHNlbGYu cGFyYW1zWzBdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqIAorLSAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0g PHVpbnQ2NF90PmlkKHNlbGYpCistICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICBjZGVm IGFkZF92b2lkcChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgdm9pZCAqcCwgYmludCBv d25lZD1GYWxzZSk6CisrICovCisrICAoX19weXhfdl9zZWxmLT5wYXJhbXNbMF0pLnR5cGUgPSBN UFZfUkVOREVSX1BBUkFNX0lOVkFMSUQ7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODg2CisrICogICAgICAgICBvYmplY3Qgb3duZWQKKysgKiAKKysgKiAgICAgZGVm IF9faW5pdF9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICBzZWxmLm93bmVkID0gW10KKysgKiAgICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUgPSBNUFZf UkVOREVSX1BBUkFNX0lOVkFMSUQKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LworQEAgLTE1MDI3LDEwOTQgKzE1NDQ0LDQ3OSBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNl9fY2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXwor ICAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wxX2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdF81KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2 LkNvbnRleHQuX19jaW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVu ZGVyUGFyYW1zLl9faW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7CisgICBfX3B5eF9yID0gLTE7CisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQ5CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjg5MAorKyAqICAgICAgICAgc2VsZi5wYXJhbXNbMF0udHlwZSA9IE1QVl9SRU5E RVJfUEFSQU1fSU5WQUxJRAorICAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgb2Jz ZXJ2ZV9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVydHkiIiIK Ky0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgY2RlZiBhZGRfdm9pZHAoc2Vs ZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjb3VudCA9IGxlbihzZWxm Lm93bmVkKQorKyAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJBTVM6CisgICov CisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zOW9ic2VydmVfcHJvcGVydHkoUHlPYmplY3Qg Kl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2Rz KTsgLypwcm90byovCistc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF8zOG9ic2VydmVfcHJvcGVydHlbXSA9ICJXcmFwczogbXB2X29ic2VydmVfcHJv cGVydHkiOworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzM5b2JzZXJ2ZV9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKy0gIFB5T2JqZWN0ICpf X3B5eF92X3Byb3AgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfZGF0YSA9IDA7CistICBpbnQg X19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsK Ky0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0g IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgib2JzZXJ2ZV9wcm9wZXJ0eSAod3JhcHBlcikiLCAwKTsKKy0gIHsKKy0gICAgc3RhdGljIFB5 T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHJvcCwmX19weXhfbl9z X2RhdGEsMH07CistICAgIFB5T2JqZWN0KiB2YWx1ZXNbMl0gPSB7MCwwfTsKKy0gICAgdmFsdWVz WzFdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOworLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dk cykpIHsKKy0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAgY29uc3QgUHlfc3NpemVf dCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CistICAgICAgc3dpdGNo IChwb3NfYXJncykgeworLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRf SVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAg ICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7 CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAwOiBicmVhazsK Ky0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAg fQorLSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0 Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNlICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgo dmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9z X3Byb3ApKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1X2Fy Z3R1cGxlX2Vycm9yOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2Fz ZSAgMToKKy0gICAgICAgIGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCog dmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZGF0 YSk7CistICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbMV0gPSB2YWx1ZTsga3dfYXJncy0t OyB9CistICAgICAgICB9CistICAgICAgfQorLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4g MCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMo X19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIm9ic2Vy dmVfcHJvcGVydHkiKSA8IDApKSBfX1BZWF9FUlIoMCwgNzQ5LCBfX3B5eF9MM19lcnJvcikKKy0g ICAgICB9CistICAgIH0gZWxzZSB7CistICAgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpFKF9f cHl4X2FyZ3MpKSB7CistICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAg ICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsK Ky0gICAgICAgIGJyZWFrOworLSAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBs ZV9lcnJvcjsKKy0gICAgICB9CistICAgIH0KKy0gICAgX19weXhfdl9wcm9wID0gdmFsdWVzWzBd OworLSAgICBfX3B5eF92X2RhdGEgPSB2YWx1ZXNbMV07CistICB9CistICBnb3RvIF9fcHl4X0w0 X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworLSAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6Owor LSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIm9ic2VydmVfcHJvcGVydHkiLCAwLCAxLCAy LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDc0OSwgX19weXhf TDNfZXJyb3IpCistICBfX3B5eF9MM19lcnJvcjo7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5Db250ZXh0Lm9ic2VydmVfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOworLSAgcmV0dXJuIE5VTEw7CistICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tp bmdfZG9uZTo7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzM4b2JzZXJ2ZV9wcm9wZXJ0eSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X3Byb3AsIF9fcHl4X3Zf ZGF0YSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4b2JzZXJ2ZV9w cm9wZXJ0eShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpf X3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3Byb3AsIFB5T2JqZWN0ICpfX3B5eF92X2Rh dGEpIHsKKy0gIHVpbnQ2NF90IF9fcHl4X3ZfaWRfZGF0YTsKKy0gIFB5T2JqZWN0ICpfX3B5eF92 X3VzZXJkYXRhcyA9IE5VTEw7CistICBjaGFyICpfX3B5eF92X3Byb3BjOworLSAgaW50IF9fcHl4 X3ZfZXJyOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNfUmVuZGVyUGFyYW1zX2FkZF92b2lkcChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92X3NlbGYsIGVudW0gbXB2X3JlbmRlcl9wYXJh bV90eXBlIF9fcHl4X3ZfdCwgdm9pZCAqX19weXhfdl9wLCBzdHJ1Y3QgX19weXhfb3B0X2FyZ3Nf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfdm9pZHAgKl9fcHl4X29w dGlvbmFsX2FyZ3MpIHsKKysgIGludCBfX3B5eF92X293bmVkID0gKChpbnQpMCk7CisrICBQeU9i amVjdCAqX19weXhfdl9jb3VudCA9IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7 CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlfaGFzaF90IF9fcHl4X3RfMTsK Ky0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9 IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIFB5X3NzaXplX3QgX19w eXhfdF8yOworKyAgaW50IF9fcHl4X3RfMzsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxM OworICAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CisgICBpbnQgX19weXhfdF82OworLSAg UHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CistICBpbnQgX19weXhfdF84OworLSAgaW50IF9f cHl4X3RfOTsKKy0gIGNoYXIgKl9fcHl4X3RfMTA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsK KyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJvYnNlcnZlX3Byb3BlcnR5 IiwgMCk7CistICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKKy0KKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTEKKy0gKiAgICAgZGVmIG9ic2VydmVfcHJvcGVydHko c2VsZiwgcHJvcCwgZGF0YT1Ob25lKToKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfb2JzZXJ2 ZV9wcm9wZXJ0eSIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWlu dDY0X3Q+aGFzaChkYXRhKQorLSAqICAgICAgICAgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRh dGEpCistICovCistICAjaWZuZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKKy0gIGlmICh1 bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworLSAgICBpZiAodW5saWtlbHkoIShfX3B5eF92 X3NlbGYtPl9jdHggIT0gMCkpKSB7CistICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRp b25FcnJvcik7CistICAgICAgX19QWVhfRVJSKDAsIDc1MSwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiYWRkX3ZvaWRwIiwgMCk7CisrICBpZiAoX19weXhf b3B0aW9uYWxfYXJncykgeworKyAgICBpZiAoX19weXhfb3B0aW9uYWxfYXJncy0+X19weXhfbiA+ IDApIHsKKysgICAgICBfX3B5eF92X293bmVkID0gX19weXhfb3B0aW9uYWxfYXJncy0+b3duZWQ7 CisgICAgIH0KKyAgIH0KKy0gICNlbmRpZgorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc1MgorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9vYnNlcnZlX3Byb3BlcnR5 IiIiCistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAgICBjZGVmIHVpbnQ2 NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKy0gKiAg ICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUp CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODkxCisrICogCisrICogICAg IGNkZWYgYWRkX3ZvaWRwKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0LCB2b2lkICpwLCBi aW50IG93bmVkPUZhbHNlKToKKysgKiAgICAgICAgIGNvdW50ID0gbGVuKHNlbGYub3duZWQpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIGNvdW50ID49IE1BWF9S RU5ERVJfUEFSQU1TOgorKyAqICAgICAgICAgICAgIGlmIG93bmVkOgorICAqLworLSAgX19weXhf dF8xID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF8x ID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA3NTIsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19weXhfdl9pZF9kYXRhID0gKCh1aW50NjRfdClfX3B5eF90XzEpOworKyAgX19weXhfdF8x ID0gX19weXhfdl9zZWxmLT5vd25lZDsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAg X19weXhfdF8yID0gUHlPYmplY3RfTGVuZ3RoKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5 eF90XzIgPT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VSUigwLCA4OTEsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX3B5 eF90XzEgPSBQeUludF9Gcm9tU3NpemVfdChfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCA4OTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7CisrICBfX3B5eF92X2NvdW50ID0gX19weXhfdF8xOworKyAgX19weXhfdF8x ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTMKKy0gKiAg ICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0 YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCistICogICAgICAgICBpZF9kYXRhID0gPHVpbnQ2NF90 Pmhhc2goZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgdXNl cmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKy0gKiAgICAg ICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjg5MgorKyAqICAgICBjZGVmIGFkZF92b2lkcChzZWxmLCBtcHZfcmVuZGVyX3BhcmFt X3R5cGUgdCwgdm9pZCAqcCwgYmludCBvd25lZD1GYWxzZSk6CisrICogICAgICAgICBjb3VudCA9 IGxlbihzZWxmLm93bmVkKQorKyAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJB TVM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBpZiBvd25l ZDoKKysgKiAgICAgICAgICAgICAgICAgZnJlZShwKQorICAqLworLSAgX19weXhfdF8xID0gUHlP YmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF8xID09ICgoUHlf aGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA3NTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhf dl9pZF9kYXRhID0gKCh1aW50NjRfdClfX3B5eF90XzEpOworKyAgX19weXhfdF8xID0gUHlPYmpl Y3RfUmljaENvbXBhcmUoX19weXhfdl9jb3VudCwgX19weXhfaW50XzMyLCBQeV9HRSk7IF9fUHl4 X1hHT1RSRUYoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgODkyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0lz VHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigw LCA4OTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4 X3RfMSA9IDA7CisrICBpZiAoX19weXhfdF8zKSB7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzU0CistICogICAgICAgICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8 dWludDY0X3Q+aGFzaChkYXRhKQorLSAqICAgICAgICAgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNo KGRhdGEpCistICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChp ZF9kYXRhLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgTm9uZToKKy0gKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRh W2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5MworKyAqICAgICAgICAgY291bnQgPSBsZW4o c2VsZi5vd25lZCkKKysgKiAgICAgICAgIGlmIGNvdW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOgor KyAqICAgICAgICAgICAgIGlmIG93bmVkOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICAgICAgICAgIGZyZWUocCkKKysgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVy cm9yKCJSZW5kZXJQYXJhbXMgb3ZlcmZsb3ciKQorICAqLworLSAgX19weXhfdF8zID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF9u X3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgX19weXhfdF80ID0g X19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92X2lkX2RhdGEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhf R09UUkVGKF9fcHl4X3RfNCk7CistICBfX3B5eF90XzUgPSBOVUxMOworLSAgX19weXhfdF82ID0g MDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNr KF9fcHl4X3RfMykpKSB7CistICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfMyk7CistICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgeworLSAgICAgIFB5T2JqZWN0KiBm dW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOworLSAgICAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzUpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAg ICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKy0gICAgICBfX3B5eF90 XzYgPSAxOworLSAgICB9CistICB9CistICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCistICBpZiAo UHlGdW5jdGlvbl9DaGVjayhfX3B5eF90XzMpKSB7CistICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1w WzNdID0ge19fcHl4X3RfNSwgX19weXhfdF80LCBQeV9Ob25lfTsKKy0gICAgX19weXhfdF8yID0g X19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1fX3B5eF90 XzYsIDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg NzU0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5 eF90XzUgPSAwOworLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICB9IGVsc2UKKy0gICNlbmRpZgorLSAg I2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwKKy0gIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hl Y2soX19weXhfdF8zKSkgeworLSAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90 XzUsIF9fcHl4X3RfNCwgUHlfTm9uZX07CistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Q0Z1bmN0 aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90 XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTQsIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Cist ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKKy0gIH0gZWxzZQorLSAgI2VuZGlmCistICB7CistICAgIF9fcHl4 X3RfNyA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzcp KSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNyk7CistICAgIGlmIChfX3B5eF90XzUpIHsKKy0gICAgICBfX1B5eF9HSVZFUkVGKF9f cHl4X3RfNSk7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCBfX3B5eF90XzUpOyBfX3B5 eF90XzUgPSBOVUxMOworLSAgICB9CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF80KTsKKy0g ICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDArX19weXhfdF82LCBfX3B5eF90XzQpOwor LSAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7 CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfNiwgUHlfTm9uZSk7 CistICAgIF9fcHl4X3RfNCA9IDA7CistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0Nh bGwoX19weXhfdF8zLCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA3NTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Cist ICB9CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIF9fcHl4 X3ZfdXNlcmRhdGFzID0gX19weXhfdF8yOworLSAgX19weXhfdF8yID0gMDsKKysgICAgX19weXhf dF8zID0gKF9fcHl4X3Zfb3duZWQgIT0gMCk7CisrICAgIGlmIChfX3B5eF90XzMpIHsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTUKKy0gKiAgICAgICAgIGlkX2Rh dGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorLSAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5y ZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKy0gKiAgICAgICAgIGlmIHVzZXJkYXRh cyBpcyBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg c2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRh KGRhdGEpCistICogICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlCisrICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5NAorKyAqICAgICAgICAgaWYgY291bnQg Pj0gTUFYX1JFTkRFUl9QQVJBTVM6CisrICogICAgICAgICAgICAgaWYgb3duZWQ6CisrICogICAg ICAgICAgICAgICAgIGZyZWUocCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlJlbmRlclBhcmFtcyBvdmVyZmxvdyIpCisrICog CisgICovCistICBfX3B5eF90XzggPSAoX19weXhfdl91c2VyZGF0YXMgPT0gUHlfTm9uZSk7Cist ICBfX3B5eF90XzkgPSAoX19weXhfdF84ICE9IDApOworLSAgaWYgKF9fcHl4X3RfOSkgeworKyAg ICAgIGZyZWUoX19weXhfdl9wKTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjc1NgorLSAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5n ZXQoaWRfZGF0YSwgTm9uZSkKKy0gKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBOb25lOgorLSAq ICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBf UmVwbHlVc2VyRGF0YShkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlCistICogICAgICAgICBwcm9wID0gX3N0cmVu Yyhwcm9wKQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTMKKysg KiAgICAgICAgIGNvdW50ID0gbGVuKHNlbGYub3duZWQpCisrICogICAgICAgICBpZiBjb3VudCA+ PSBNQVhfUkVOREVSX1BBUkFNUzoKKysgKiAgICAgICAgICAgICBpZiBvd25lZDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICBmcmVlKHApCisrICogICAg ICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigiUmVuZGVyUGFyYW1zIG92ZXJmbG93IikKKyAgKi8K Ky0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzMsIF9fcHl4X25fc19SZXBs eVVzZXJEYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzU2LCBf X3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fcHl4 X3RfNyA9IE5VTEw7CistICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKKy0gICAgICBfX3B5eF90XzcgPSBQeU1ldGhv ZF9HRVRfU0VMRihfX3B5eF90XzMpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF83KSkgewor LSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfMyk7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF83KTsKKy0gICAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywg ZnVuY3Rpb24pOworLSAgICAgIH0KKyAgICAgfQorLSAgICBfX3B5eF90XzIgPSAoX19weXhfdF83 KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNywgX19weXhf dl9kYXRhKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF92X2Rh dGEpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICAg IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc1NiwgX19weXhfTDFfZXJy b3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAgaWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1J bnQoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfdl9pZF9kYXRhLCBfX3B5eF90 XzIsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDAp KSBfX1BZWF9FUlIoMCwgNzU2LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfSU5DUkVGKF9f cHl4X3RfMik7CistICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4 X3RfMik7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLQor LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU1CistICogICAgICAgICBp ZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKy0gKiAgICAgICAgIHVzZXJkYXRhcyA9IHNl bGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCistICogICAgICAgICBpZiB1c2Vy ZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2Vy RGF0YShkYXRhKQorLSAqICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gVHJ1ZQorLSAqLwor LSAgfQorLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NworLSAqICAg ICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6CistICogICAgICAgICAgICAgc2VsZi5yZXBseV91 c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCistICog ICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCistICogICAgICAgICBjZGVm IGNoYXIqIHByb3BjID0gcHJvcAorLSAqLworLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJT dHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X25fc19vYnNlcnZlZCwgUHlfVHJ1ZSkgPCAwKSBf X1BZWF9FUlIoMCwgNzU3LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3NTgKKy0gKiAgICAgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRh W2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRhdGEoZGF0YSkKKy0gKiAgICAgICAg IHVzZXJkYXRhcy5vYnNlcnZlZCA9IFRydWUKKy0gKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHBy b3ApICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgY2hhciog cHJvcGMgPSBwcm9wCistICogICAgICAgICBjZGVmIGludCBlcnIKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjg5NQorKyAqICAgICAgICAgICAgIGlmIG93bmVkOgorKyAq ICAgICAgICAgICAgICAgICBmcmVlKHApCisrICogICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJv cigiUmVuZGVyUGFyYW1zIG92ZXJmbG93IikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqIAorKyAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLnR5cGUgPSB0CisgICovCistICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMywgX19weXhfbl9zX3N0cmVuYyk7IGlm ICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc1OCwgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fcHl4X3RfNyA9IE5VTEw7CistICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfMykpKSB7CistICAgIF9fcHl4X3RfNyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7 CistICAgIGlmIChsaWtlbHkoX19weXhfdF83KSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOworLSAgICAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzcpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKysgICAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19QeU1QVkVycm9yKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgODk1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgIF9fcHl4X3RfNSA9IE5VTEw7CisrICAgIGlmIChD WVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80 KSkpIHsKKysgICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzQpOwor KyAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0 aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNCk7CisrICAgICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF81KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAg ICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVuY3Rpb24pOworKyAgICAgIH0KKyAg ICAgfQorLSAgfQorLSAgX19weXhfdF8yID0gKF9fcHl4X3RfNykgPyBfX1B5eF9QeU9iamVjdF9D YWxsMkFyZ3MoX19weXhfdF8zLCBfX3B5eF90XzcsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9i amVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdl9wcm9wKTsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDc1OCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAg X19QeXhfREVDUkVGX1NFVChfX3B5eF92X3Byb3AsIF9fcHl4X3RfMik7CistICBfX3B5eF90XzIg PSAwOworKyAgICBfX3B5eF90XzEgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwy QXJncyhfX3B5eF90XzQsIF9fcHl4X3RfNSwgX19weXhfa3Bfc19SZW5kZXJQYXJhbXNfb3ZlcmZs b3cpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X2twX3NfUmVu ZGVyUGFyYW1zX292ZXJmbG93KTsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5 eF90XzUgPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4 OTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgIF9fUHl4X1JhaXNl KF9fcHl4X3RfMSwgMCwgMCwgMCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworKyAgICBfX1BZWF9FUlIoMCwgODk1LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTkKKy0gKiAgICAgICAgIHVzZXJk YXRhcy5vYnNlcnZlZCA9IFRydWUKKy0gKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCist ICogICAgICAgICBjZGVmIGNoYXIqIHByb3BjID0gcHJvcCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICBjZGVmIGludCBlcnIKKy0gKiAgICAgICAgIHdpdGggbm9naWw6 CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTIKKysgKiAgICAgY2Rl ZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQg b3duZWQ9RmFsc2UpOgorKyAqICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25lZCkKKysgKiAg ICAgICAgIGlmIGNvdW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICAgICAgaWYgb3duZWQ6CisrICogICAgICAgICAgICAgICAg IGZyZWUocCkKKyAgKi8KKy0gIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9Bc1dyaXRhYmxl U3RyaW5nKF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfMTApICYmIFB5RXJy X09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNzU5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4 X3ZfcHJvcGMgPSBfX3B5eF90XzEwOworKyAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjc2MQorLSAqICAgICAgICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKKy0g KiAgICAgICAgIGNkZWYgaW50IGVycgorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vYnNlcnZlX3By b3BlcnR5KAorLSAqICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6ODk3CisrICogICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJv cigiUmVuZGVyUGFyYW1zIG92ZXJmbG93IikKKysgKiAKKysgKiAgICAgICAgIHNlbGYucGFyYW1z W2NvdW50XS50eXBlID0gdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICBzZWxmLnBhcmFtc1tjb3VudF0uZGF0YSA9IHAKKysgKiAgICAgICAgIHNlbGYucGFyYW1zW2Nv dW50ICsgMV0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRAorICAqLworLSAgeworLSAg ICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAg ICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsK Ky0gICAgICAjZW5kaWYKKy0gICAgICAvKnRyeToqLyB7CisrICBfX3B5eF90XzIgPSBfX1B5eF9Q eUluZGV4X0FzU3NpemVfdChfX3B5eF92X2NvdW50KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzIg PT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgODk3 LCBfX3B5eF9MMV9lcnJvcikKKysgIChfX3B5eF92X3NlbGYtPnBhcmFtc1tfX3B5eF90XzJdKS50 eXBlID0gX19weXhfdl90OworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjc2MgorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCistICogICAgICAgICB3aXRoIG5v Z2lsOgorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vYnNlcnZlX3Byb3BlcnR5KCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgIHNlbGYuX2N0eCwKKy0g KiAgICAgICAgICAgICAgICAgaWRfZGF0YSwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4OTgKKysgKiAKKysgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50XS50eXBlID0g dAorKyAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEgPSBwICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50ICsgMV0udHlwZSA9 IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRAorKyAqICAgICAgICAgc2VsZi5vd25lZC5hcHBlbmQo b3duZWQpCisgICovCistICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9vYnNlcnZlX3Byb3BlcnR5 KF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9pZF9kYXRhLCBfX3B5eF92X3Byb3BjLCBNUFZf Rk9STUFUX05PREUpOworLSAgICAgIH0KKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNT c2l6ZV90KF9fcHl4X3ZfY291bnQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoUHlfc3Np emVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4OTgsIF9fcHl4X0wx X2Vycm9yKQorKyAgKF9fcHl4X3Zfc2VsZi0+cGFyYW1zW19fcHl4X3RfMl0pLmRhdGEgPSBfX3B5 eF92X3A7CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2MQor LSAqICAgICAgICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKKy0gKiAgICAgICAgIGNkZWYgaW50 IGVycgorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vYnNlcnZlX3Byb3BlcnR5KAorLSAqICAgICAg ICAgICAgICAgICBzZWxmLl9jdHgsCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6ODk5CisrICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0udHlwZSA9IHQKKysgKiAgICAg ICAgIHNlbGYucGFyYW1zW2NvdW50XS5kYXRhID0gcAorKyAqICAgICAgICAgc2VsZi5wYXJhbXNb Y291bnQgKyAxXS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQorKyAq IAorICAqLworLSAgICAgIC8qZmluYWxseToqLyB7CistICAgICAgICAvKm5vcm1hbCBleGl0Oiov eworLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAgICAgX19QeXhfRmFzdEdJ TF9Gb3JnZXQoKTsKKy0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworLSAgICAgICAgICAjZW5k aWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNjsKKy0gICAgICAgIH0KKy0gICAgICAgIF9fcHl4 X0w2OjsKKy0gICAgICB9CistICB9CisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9BZGRPYmpD KF9fcHl4X3ZfY291bnQsIF9fcHl4X2ludF8xLCAxLCAwLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgODk5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOworKyAgX19weXhfdF8yID0gX19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19w eXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzIgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5 RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgODk5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgKF9fcHl4X3Zfc2VsZi0+ cGFyYW1zW19fcHl4X3RfMl0pLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQ7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzY4CistICogICAgICAgICAgICAg ICAgIE1QVl9GT1JNQVRfTk9ERSwKKy0gKiAgICAgICAgICAgICApCistICogICAgICAgICByZXR1 cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MDAKKysgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50XS5kYXRh ID0gcAorKyAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnQgKyAxXS50eXBlID0gTVBWX1JFTkRF Ul9QQVJBTV9JTlZBTElECisrICogICAgICAgICBzZWxmLm93bmVkLmFwcGVuZChvd25lZCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorLSAqICAgICBAX2Vycm9ycworKyAqICAg ICBjZGVmIGFkZF9pbnQoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGludCB2YWwpOgor ICAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5 SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgNzY4LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIp OworLSAgX19weXhfciA9IF9fcHl4X3RfMjsKKy0gIF9fcHl4X3RfMiA9IDA7CistICBnb3RvIF9f cHl4X0wwOworKyAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKF9fcHl4X3Zfb3du ZWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MDAsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF90XzYgPSBfX1B5 eF9QeU9iamVjdF9BcHBlbmQoX19weXhfdl9zZWxmLT5vd25lZCwgX19weXhfdF8xKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfNiA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMCwgOTAwLCBfX3B5eF9M MV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0OQorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjg5MAorKyAqICAgICAgICAgc2VsZi5wYXJhbXNbMF0udHlw ZSA9IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRAorICAqIAorLSAqICAgICBAX2Vycm9ycworLSAq ICAgICBkZWYgb2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkYXRhPU5vbmUpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVf cHJvcGVydHkiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKiAgICAgY2RlZiBh ZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3du ZWQ9RmFsc2UpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjb3Vu dCA9IGxlbihzZWxmLm93bmVkKQorKyAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9Q QVJBTVM6CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3Ig PSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOworICAg X19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworLSAgX19QeXhf WERFQ1JFRihfX3B5eF90XzMpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzQpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzcpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0 ZXIubGlicy5tcHYuQ29udGV4dC5vYnNlcnZlX3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19w eXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9SZW5kZXJQYXJhbXMuYWRkX3ZvaWRw IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5 eF9yID0gMDsKKyAgIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl91c2VyZGF0 YXMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X3Byb3ApOworKyAgX19QeXhfWERFQ1JFRihf X3B5eF92X2NvdW50KTsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3MQorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MDIKKysgKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQorICAq IAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgdW5vYnNlcnZlX3Byb3BlcnR5KHNlbGYs IGRhdGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFw czogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAorKyAqICAgICBjZGVmIGFkZF9pbnQoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGlu dCB2YWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBjZGVmIGlu dCAqcCA9IDxpbnQgKj5tYWxsb2Moc2l6ZW9mKGludCkpCisrICogICAgICAgICBwWzBdID0gdmFs CisgICovCisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80MXVub2JzZXJ2ZV9wcm9wZXJ0eShQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9kYXRhKTsgLypwcm90byov Cistc3RhdGljIGNoYXIgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80 MHVub2JzZXJ2ZV9wcm9wZXJ0eVtdID0gIldyYXBzOiBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5IjsK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF80MXVub2JzZXJ2ZV9wcm9wZXJ0eShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9kYXRhKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVub2JzZXJ2 ZV9wcm9wZXJ0eSAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDB1bm9ic2VydmVfcHJvcGVydHkoKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQ eU9iamVjdCAqKV9fcHl4X3ZfZGF0YSkpOworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICov CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOwor LX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF80MHVub2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2RhdGEp IHsKKy0gIHVpbnQ2NF90IF9fcHl4X3ZfaWRfZGF0YTsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X3Vz ZXJkYXRhcyA9IE5VTEw7CistICBpbnQgX19weXhfdl9lcnI7Cisrc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX2ludChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92 X3NlbGYsIGVudW0gbXB2X3JlbmRlcl9wYXJhbV90eXBlIF9fcHl4X3ZfdCwgaW50IF9fcHl4X3Zf dmFsKSB7CisrICBpbnQgKl9fcHl4X3ZfcDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsK KyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeV9oYXNoX3QgX19weXhfdF8xOwor LSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8zID0g TlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4 X3RfNSA9IE5VTEw7CistICBpbnQgX19weXhfdF82OworLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9 IE5VTEw7CistICBpbnQgX19weXhfdF84OworLSAgaW50IF9fcHl4X3RfOTsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzEgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cist ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgidW5vYnNlcnZlX3Byb3BlcnR5IiwgMCk7Cisr ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiYWRkX2ludCIsIDApOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3MworLSAqICAgICBkZWYgdW5vYnNlcnZlX3By b3BlcnR5KHNlbGYsIGRhdGEpOgorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl91bm9ic2VydmVf cHJvcGVydHkiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2 NF90Pmhhc2goZGF0YSkKKy0gKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRh dGEuZ2V0KGlkX2RhdGEsIE5vbmUpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTAzCisrICogCisrICogICAgIGNkZWYgYWRkX2ludChzZWxmLCBtcHZfcmVuZGVyX3BhcmFt X3R5cGUgdCwgaW50IHZhbCk6CisrICogICAgICAgICBjZGVmIGludCAqcCA9IDxpbnQgKj5tYWxs b2Moc2l6ZW9mKGludCkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IHBbMF0gPSB2YWwKKysgKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApCisgICovCistICAj aWZuZGVmIENZVEhPTl9XSVRIT1VUX0FTU0VSVElPTlMKKy0gIGlmICh1bmxpa2VseSghUHlfT3B0 aW1pemVGbGFnKSkgeworLSAgICBpZiAodW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0g MCkpKSB7CistICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7CistICAg ICAgX19QWVhfRVJSKDAsIDc3MywgX19weXhfTDFfZXJyb3IpCistICAgIH0KKy0gIH0KKy0gICNl bmRpZgorKyAgX19weXhfdl9wID0gKChpbnQgKiltYWxsb2MoKHNpemVvZihpbnQpKSkpOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3NAorLSAqICAgICAgICAgIiIi V3JhcHM6IG1wdl91bm9ic2VydmVfcHJvcGVydHkiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxm Ll9jdHgKKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNo KGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHVzZXJkYXRh cyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCistICogICAgICAgICBp ZiB1c2VyZGF0YXMgaXMgbm90IE5vbmU6CistICovCistICBfX3B5eF90XzEgPSBQeU9iamVjdF9I YXNoKF9fcHl4X3ZfZGF0YSk7IGlmICh1bmxpa2VseShfX3B5eF90XzEgPT0gKChQeV9oYXNoX3Qp LTEpKSkgX19QWVhfRVJSKDAsIDc3NCwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF92X2lkX2Rh dGEgPSAoKHVpbnQ2NF90KV9fcHl4X3RfMSk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6Nzc1CistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CistICogICAgICAg ICBjZGVmIHVpbnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorLSAqICAgICAg ICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIG5v dCBOb25lOgorLSAqICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9IEZhbHNlCistICov CistICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+ cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykp IF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMyk7CistICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3Zf aWRfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc3NSwgX19w eXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gIF9fcHl4X3RfNSA9 IE5VTEw7CistICBfX3B5eF90XzYgPSAwOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKKy0gICAgX19weXhfdF81ID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90XzUp KSB7CistICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9f cHl4X3RfMyk7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7CistICAgICAgX19QeXhf SU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywgZnVu Y3Rpb24pOworLSAgICAgIF9fcHl4X3RfNiA9IDE7CistICAgIH0KKy0gIH0KKy0gICNpZiBDWVRI T05fRkFTVF9QWUNBTEwKKy0gIGlmIChQeUZ1bmN0aW9uX0NoZWNrKF9fcHl4X3RfMykpIHsKKy0g ICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF81LCBfX3B5eF90XzQsIFB5X05v bmV9OworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3Rf MywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0g IH0gZWxzZQorLSAgI2VuZGlmCistICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAorLSAgaWYgKF9f UHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzMpKSB7CistICAgIFB5T2JqZWN0ICpf X3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNSwgX19weXhfdF80LCBQeV9Ob25lfTsKKy0gICAgX19w eXhfdF8yID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8zLCBfX3B5eF90ZW1w KzEtX19weXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDc3NSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgfSBlbHNlCistICAj ZW5kaWYKKy0gIHsKKy0gICAgX19weXhfdF83ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzYpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9y KQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKy0gICAgaWYgKF9fcHl4X3RfNSkgewor LSAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF81KTsgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzcsIDAsIF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IE5VTEw7CistICAgIH0KKy0gICAgX19QeXhf R0lWRVJFRihfX3B5eF90XzQpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNywgMCtf X3B5eF90XzYsIF9fcHl4X3RfNCk7CistICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gICAg X19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90Xzcs IDErX19weXhfdF82LCBQeV9Ob25lKTsKKy0gICAgX19weXhfdF80ID0gMDsKKy0gICAgX19weXhf dF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzMsIF9fcHl4X3RfNywgTlVMTCk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc3NSwgX19weXhfTDFfZXJyb3Ip CistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhf dF83KTsgX19weXhfdF83ID0gMDsKKy0gIH0KKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBf X3B5eF90XzMgPSAwOworLSAgX19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90XzI7CistICBfX3B5 eF90XzIgPSAwOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3Ngor LSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkK Ky0gKiAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEs IE5vbmUpCistICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgbm90IE5vbmU6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBG YWxzZQorLSAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcy5jb3VudGVyIDw9IDA6CistICovCist ICBfX3B5eF90XzggPSAoX19weXhfdl91c2VyZGF0YXMgIT0gUHlfTm9uZSk7CistICBfX3B5eF90 XzkgPSAoX19weXhfdF84ICE9IDApOworLSAgaWYgKF9fcHl4X3RfOSkgeworLQorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc3CistICogICAgICAgICB1c2VyZGF0YXMg PSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorLSAqICAgICAgICAgaWYg dXNlcmRhdGFzIGlzIG5vdCBOb25lOgorLSAqICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZl ZCA9IEZhbHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBp ZiB1c2VyZGF0YXMuY291bnRlciA8PSAwOgorLSAqICAgICAgICAgICAgICAgICBkZWwgc2VsZi5y ZXBseV91c2VyZGF0YVtpZF9kYXRhXQorLSAqLworLSAgICBpZiAoX19QeXhfUHlPYmplY3RfU2V0 QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX29ic2VydmVkLCBQeV9GYWxzZSkg PCAwKSBfX1BZWF9FUlIoMCwgNzc3LCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3OAorLSAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlz IG5vdCBOb25lOgorLSAqICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9IEZhbHNlCist ICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzLmNvdW50ZXIgPD0gMDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBkZWwgc2VsZi5yZXBseV91c2VyZGF0 YVtpZF9kYXRhXQorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCistICovCistICAgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X25f c19jb3VudGVyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzc4LCBf X3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4 X3RfMyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3RfMiwgX19weXhfaW50XzAsIFB5X0xF KTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9f UFlYX0VSUigwLCA3NzgsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgX19weXhfdF85ID0gX19QeXhfUHlPYmplY3RfSXNU cnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90XzkgPCAwKSkgX19QWVhfRVJSKDAs IDc3OCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5 eF90XzMgPSAwOworLSAgICBpZiAoX19weXhfdF85KSB7CistCistICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc3OQorLSAqICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNl cnZlZCA9IEZhbHNlCistICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzLmNvdW50ZXIgPD0gMDoK Ky0gKiAgICAgICAgICAgICAgICAgZGVsIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0gICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCistICog ICAgICAgICB3aXRoIG5vZ2lsOgorLSAqLworLSAgICAgIGlmICh1bmxpa2VseShfX1B5eF9EZWxJ dGVtSW50KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X3ZfaWRfZGF0YSwgdWlu dDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlY X0VSUigwLCA3NzksIF9fcHl4X0wxX2Vycm9yKQorLQorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3NzgKKy0gKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBub3QgTm9u ZToKKy0gKiAgICAgICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBGYWxzZQorLSAqICAgICAg ICAgICAgIGlmIHVzZXJkYXRhcy5jb3VudGVyIDw9IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZGVsIHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0 YV0KKy0gKiAgICAgICAgIGNkZWYgaW50IGVycgorLSAqLworLSAgICB9CistCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzYKKy0gKiAgICAgICAgIGNkZWYgdWludDY0 X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCistICogICAgICAgICB1c2VyZGF0YXMg PSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorLSAqICAgICAgICAgaWYg dXNlcmRhdGFzIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gRmFsc2UKKy0gKiAgICAgICAgICAgICBp ZiB1c2VyZGF0YXMuY291bnRlciA8PSAwOgorLSAqLworLSAgfQorLQorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc4MQorLSAqICAgICAgICAgICAgICAgICBkZWwgc2VsZi5y ZXBseV91c2VyZGF0YVtpZF9kYXRhXQorLSAqICAgICAgICAgY2RlZiBpbnQgZXJyCistICogICAg ICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAgICAgZXJyID0gbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSgKKy0gKiAgICAgICAgICAgICAgICAg c2VsZi5fY3R4LAorLSAqLworLSAgeworLSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAg IFB5VGhyZWFkU3RhdGUgKl9zYXZlOworLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAg IF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKy0gICAgICAjZW5kaWYKKy0gICAgICAvKnRyeToq LyB7CistCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzgyCist ICogICAgICAgICBjZGVmIGludCBlcnIKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAg ICAgICAgICAgZXJyID0gbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSggICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCistICogICAgICAgICAg ICAgICAgIGlkX2RhdGEsCistICovCistICAgICAgICBfX3B5eF92X2VyciA9IG1wdl91bm9ic2Vy dmVfcHJvcGVydHkoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2lkX2RhdGEpOworLSAgICAg IH0KKy0KKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzgxCistICog ICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdCistICogICAg ICAgICBjZGVmIGludCBlcnIKKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfdW5vYnNlcnZlX3Byb3Bl cnR5KAorLSAqICAgICAgICAgICAgICAgICBzZWxmLl9jdHgsCisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTA0CisrICogICAgIGNkZWYgYWRkX2ludChzZWxmLCBtcHZfcmVu ZGVyX3BhcmFtX3R5cGUgdCwgaW50IHZhbCk6CisrICogICAgICAgICBjZGVmIGludCAqcCA9IDxp bnQgKj5tYWxsb2Moc2l6ZW9mKGludCkpCisrICogICAgICAgICBwWzBdID0gdmFsICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApCisr ICogCisgICovCistICAgICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4aXQ6 Ki97CistICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0 R0lMX0ZvcmdldCgpOworLSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICNl bmRpZgorLSAgICAgICAgICBnb3RvIF9fcHl4X0w3OworLSAgICAgICAgfQorLSAgICAgICAgX19w eXhfTDc6OworLSAgICAgIH0KKy0gIH0KKysgIChfX3B5eF92X3BbMF0pID0gX19weXhfdl92YWw7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg2CistICogICAgICAg ICAgICAgICAgIGlkX2RhdGEsCistICogICAgICAgICAgICAgKQorLSAqICAgICAgICAgcmV0dXJu IGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTA1CisrICogICAgICAgICBjZGVmIGludCAqcCA9IDxpbnQgKj5tYWxs b2Moc2l6ZW9mKGludCkpCisrICogICAgICAgICBwWzBdID0gdmFsCisrICogICAgICAgICBzZWxm LmFkZF92b2lkcCh0LCBwKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCistICog ICAgIGRlZiBzaHV0ZG93bihzZWxmKToKKysgKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1w dl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBjaGFyICpzKToKKyAgKi8KKy0gIF9fUHl4X1hERUNSRUYo X19weXhfcik7CistICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vy cik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc4NiwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF90 XzM7CistICBfX3B5eF90XzMgPSAwOworLSAgZ290byBfX3B5eF9MMDsKKysgIF9fcHl4X3RfMSA9 ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQ YXJhbXMgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9zZWxm LCBfX3B5eF92X3QsIF9fcHl4X3ZfcCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDkwNSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3MQorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjkwMgorKyAqICAgICAgICAgc2VsZi5vd25lZC5hcHBlbmQob3du ZWQpCisgICogCistICogICAgIEBfZXJyb3JzCistICogICAgIGRlZiB1bm9ic2VydmVfcHJvcGVy dHkoc2VsZiwgZGF0YSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICIiIldyYXBzOiBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5IiIiCistICogICAgICAgICBhc3NlcnQg c2VsZi5fY3R4CisrICogICAgIGNkZWYgYWRkX2ludChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5 cGUgdCwgaW50IHZhbCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IGNkZWYgaW50ICpwID0gPGludCAqPm1hbGxvYyhzaXplb2YoaW50KSkKKysgKiAgICAgICAgIHBb MF0gPSB2YWwKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhf ciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgIGdvdG8gX19weXhfTDA7Cisg ICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7Cist ICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnVub2JzZXJ2 ZV9wcm9wZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OworLSAgX19weXhfciA9IE5VTEw7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVuZGVyUGFyYW1zLmFkZF9p bnQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9f cHl4X3IgPSAwOworICAgX19weXhfTDA6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X3VzZXJk YXRhcyk7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo3ODgKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKysvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA3CisrICogICAgICAgICBzZWxmLmFkZF92b2lk cCh0LCBwKQorICAqIAorLSAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgorLSAqICAg ICAgICAgICAgIHJldHVybgorKyAqICAgICBjZGVmIGFkZF9zdHJpbmcoc2VsZiwgbXB2X3JlbmRl cl9wYXJhbV90eXBlIHQsIGNoYXIgKnMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICBjZGVmIGNoYXIgKnAgPSA8Y2hhciAqPm1hbGxvYyhzdHJsZW4ocykgKyAxKQor KyAqICAgICAgICAgc3RyY3B5KHAsIHMpCisgICovCisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8K Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF80M3NodXRkb3duKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmpl Y3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQzc2h1dGRvd24oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs ZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7CistICBQeU9iamVjdCAqX19weXhf ciA9IDA7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoInNodXRkb3duICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80MnNodXRkb3duKCgoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOwor LQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80MnNodXRkb3duKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgewor LSAgdWludDY0X3QgX19weXhfdl9jdHhpZDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfc3RyaW5nKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKl9fcHl4X3Zfc2VsZiwg ZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgX19weXhfdl90LCBjaGFyICpfX3B5eF92X3MpIHsK KysgIGNoYXIgKl9fcHl4X3ZfcDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBpbnQgX19weXhfdF8xOworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMiA9IE5VTEw7CistICB1aW50NjRfdCBfX3B5eF90XzM7CistICBQeU9iamVjdCAq X19weXhfdF80ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOworKyAgUHlP YmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNv bnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0g MDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzaHV0ZG93biIsIDApOworKyAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoImFkZF9zdHJpbmciLCAwKTsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3ODkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MDgKKyAgKiAKKy0gKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOgorLSAqICAg ICAgICAgaWYgc2VsZi5fY3R4ID09IE5VTEw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgICAgICByZXR1cm4KKy0gKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQg PSA8dWludDY0X3Q+aWQoc2VsZikKKy0gKi8KKy0gIF9fcHl4X3RfMSA9ICgoX19weXhfdl9zZWxm LT5fY3R4ID09IE5VTEwpICE9IDApOworLSAgaWYgKF9fcHl4X3RfMSkgeworLQorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzkwCistICogICAgIGRlZiBzaHV0ZG93bihz ZWxmKToKKy0gKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgorLSAqICAgICAgICAgICAg IHJldHVybiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmIHVp bnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCistICogICAgICAgICB3aXRoIG5vZ2ls OgorLSAqLworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBfX3B5eF9yID0gUHlf Tm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgICBnb3RvIF9fcHl4X0wwOworLQorLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg5CistICogCistICogICAgIGRl ZiBzaHV0ZG93bihzZWxmKToKKy0gKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmV0dXJuCistICogICAg ICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCistICovCistICB9 CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzkxCistICogICAgICAg ICBpZiBzZWxmLl9jdHggPT0gTlVMTDoKKy0gKiAgICAgICAgICAgICByZXR1cm4KKy0gKiAgICAg ICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAg ICBtcHZfdGVybWluYXRlX2Rlc3Ryb3koc2VsZi5fY3R4KQorLSAqLworLSAgX19weXhfdF8yID0g X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF9idWlsdGluX2lkLCAoKFB5T2JqZWN0ICop X19weXhfdl9zZWxmKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc5 MSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4 X3RfMyA9IF9fUHl4X1B5SW50X0FzX3VpbnQ2NF90KF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSgo X19weXhfdF8zID09ICgodWludDY0X3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDc5MSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsg X19weXhfdF8yID0gMDsKKy0gIF9fcHl4X3ZfY3R4aWQgPSAoKHVpbnQ2NF90KV9fcHl4X3RfMyk7 CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzkyCistICogICAgICAg ICAgICAgcmV0dXJuCistICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90 PmlkKHNlbGYpCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KHNlbGYuX2N0eCkK Ky0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQorLSAqLworLSAgewor LSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwor LSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIo KTsKKy0gICAgICAjZW5kaWYKKy0gICAgICAvKnRyeToqLyB7CistCistICAgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzkzCistICogICAgICAgICBjZGVmIHVpbnQ2NF90 IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAq ICAgICAgICAgICAgIG1wdl90ZXJtaW5hdGVfZGVzdHJveShzZWxmLl9jdHgpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRv d24oKQorLSAqICAgICAgICAgZGVsIF9jYWxsYmFja3NbY3R4aWRdCistICovCistICAgICAgICBt cHZfdGVybWluYXRlX2Rlc3Ryb3koX19weXhfdl9zZWxmLT5fY3R4KTsKKy0gICAgICB9CistCist ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5MgorLSAqICAgICAgICAg ICAgIHJldHVybgorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5p ZChzZWxmKQorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgICAgIG1wdl90ZXJtaW5hdGVfZGVzdHJveShzZWxmLl9jdHgpCist ICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNodXRkb3duKCkKKy0gKi8KKy0gICAgICAv KmZpbmFsbHk6Ki8geworLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAgI2lm ZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CistICAg ICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgI2VuZGlmCistICAgICAgICAgIGdv dG8gX19weXhfTDY7CistICAgICAgICB9CistICAgICAgICBfX3B5eF9MNjo7CistICAgICAgfQor LSAgfQorLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5NAorLSAqICAg ICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfdGVybWluYXRlX2Rlc3Ryb3ko c2VsZi5fY3R4KQorLSAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zaHV0ZG93bigpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGRlbCBfY2FsbGJhY2tzW2N0 eGlkXQorLSAqICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdCistICovCistICBf X3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJh Y2t0aHJlYWQsIF9fcHl4X25fc19zaHV0ZG93bik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDc5NCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhf dF80KTsKKy0gIF9fcHl4X3RfNSA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzQpKSkgeworLSAgICBfX3B5eF90XzUg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzQpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NSkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF80KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKy0gICAgICBfX1B5 eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF80LCBm dW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfMiA9IChfX3B5eF90XzUpID8gX19Q eXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSkgOiBfX1B5eF9QeU9i amVjdF9DYWxsTm9BcmcoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsg X19weXhfdF81ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDc5NCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgX19QeXhfREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Nzk1CistICogICAgICAgICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KHNlbGYu X2N0eCkKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQorLSAqICAg ICAgICAgZGVsIF9jYWxsYmFja3NbY3R4aWRdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXQorLSAqICAgICAgICAgc2Vs Zi5jYWxsYmFjayA9IE5vbmUKKy0gKi8KKy0gIGlmICh1bmxpa2VseShfX1B5eF9EZWxJdGVtSW50 KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3ZfY3R4aWQs IHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBf X1BZWF9FUlIoMCwgNzk1LCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3OTYKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1 dGRvd24oKQorLSAqICAgICAgICAgZGVsIF9jYWxsYmFja3NbY3R4aWRdCistICogICAgICAgICBk ZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKKy0gKiAgICAgICAgIHNlbGYucmVwbHlf dXNlcmRhdGEgPSBOb25lCistICovCistICBpZiAodW5saWtlbHkoX19QeXhfRGVsSXRlbUludChf X3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0 eGlkLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAw KSkgX19QWVhfRVJSKDAsIDc5NiwgX19weXhfTDFfZXJyb3IpCistCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk3CistICogICAgICAgICBkZWwgX2NhbGxiYWNrc1tjdHhp ZF0KKy0gKiAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXQorLSAqICAgICAgICAg c2VsZi5jYWxsYmFjayA9IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IE5vbmUKKy0gKiAgICAgICAgIHNlbGYuX2N0eCA9 IE5VTEwKKysgKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlw ZSB0LCBjaGFyICpzKToKKysgKiAgICAgICAgIGNkZWYgY2hhciAqcCA9IDxjaGFyICo+bWFsbG9j KHN0cmxlbihzKSArIDEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IHN0cmNweShwLCBzKQorKyAqICAgICAgICAgc2VsZi5hZGRfdm9pZHAodCwgcCkKKyAgKi8KKy0g IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CistICBf X1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5jYWxsYmFjayk7CistICBfX1B5eF9ERUNSRUYoX19w eXhfdl9zZWxmLT5jYWxsYmFjayk7CistICBfX3B5eF92X3NlbGYtPmNhbGxiYWNrID0gUHlfTm9u ZTsKKysgIF9fcHl4X3ZfcCA9ICgoY2hhciAqKW1hbGxvYygoc3RybGVuKF9fcHl4X3ZfcykgKyAx KSkpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5OAorLSAqICAg ICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdCistICogICAgICAgICBzZWxmLmNhbGxi YWNrID0gTm9uZQorLSAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YSA9IE5vbmUgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5fY3R4ID0gTlVMTAorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwOQorKyAqICAgICBjZGVmIGFkZF9z dHJpbmcoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGNoYXIgKnMpOgorKyAqICAgICAg ICAgY2RlZiBjaGFyICpwID0gPGNoYXIgKj5tYWxsb2Moc3RybGVuKHMpICsgMSkKKysgKiAgICAg ICAgIHN0cmNweShwLCBzKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICBzZWxmLmFkZF92b2lkcCh0LCBwKQorICAqIAorICAqLworLSAgX19QeXhfSU5DUkVGKFB5X05v bmUpOworLSAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92 X3NlbGYtPnJlcGx5X3VzZXJkYXRhKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJl cGx5X3VzZXJkYXRhKTsKKy0gIF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBQeV9Ob25l OworKyAgKHZvaWQpKHN0cmNweShfX3B5eF92X3AsIF9fcHl4X3ZfcykpOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5OQorLSAqICAgICAgICAgc2VsZi5jYWxsYmFj ayA9IE5vbmUKKy0gKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBOb25lCistICogICAg ICAgICBzZWxmLl9jdHggPSBOVUxMICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTAKKysgKiAgICAgICAgIGNkZWYgY2hh ciAqcCA9IDxjaGFyICo+bWFsbG9jKHN0cmxlbihzKSArIDEpCisrICogICAgICAgICBzdHJjcHko cCwgcykKKysgKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAgZGVmIG9wZW5nbF9jYl9hcGkoc2VsZik6CisrICog ICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKKyAgKi8KKy0gIF9fcHl4X3Zfc2VsZi0+X2N0eCA9 IE5VTEw7CisrICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+ YWRkX3ZvaWRwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl90LCBfX3B5eF92X3AsIE5VTEwpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MTAsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 ODgKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5MDcKKysgKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApCisgICogCistICog ICAgIGRlZiBzaHV0ZG93bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgaWYgc2VsZi5fY3R4ID09IE5VTEw6CistICogICAgICAgICAgICAgcmV0dXJuCisr ICogICAgIGNkZWYgYWRkX3N0cmluZyhzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgY2hh ciAqcyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWYgY2hh ciAqcCA9IDxjaGFyICo+bWFsbG9jKHN0cmxlbihzKSArIDEpCisrICogICAgICAgICBzdHJjcHko cCwgcykKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19weXhfciA9 IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKyAgIGdvdG8gX19weXhfTDA7CisgICBf X3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CistICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CistICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LnNodXRkb3duIiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0g TlVMTDsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFj aygidmlkY3V0dGVyLmxpYnMubXB2Ll9SZW5kZXJQYXJhbXMuYWRkX3N0cmluZyIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhfciA9IDA7Cisg ICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MDEKKy0gKiAgICAgICAgIHNlbGYuX2N0eCA9IE5V TEwKKy0gKiAKKy0gKiAgICAgZGVmIG9wZW5nbF9jYl9hcGkoc2VsZik6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgdm9pZCAqY2IKKysvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTEyCisrICogICAgICAgICBzZWxmLmFkZF92b2lkcCh0LCBw KQorICAqIAorKyAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGZvciBpLCBqIGluIGVudW1lcmF0ZShzZWxmLm93bmVk KToKKysgKiAgICAgICAgICAgICBpZiBqOgorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICov Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNDVvcGVuZ2xfY2JfYXBpKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ1b3BlbmdsX2NiX2FwaShQeU9iamVjdCAq X19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKKytzdGF0aWMgdm9pZCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNfUmVuZGVyUGFyYW1zXzNfX2RlYWxsb2NfXyhQeU9iamVjdCAqX19weXhfdl9zZWxm KTsgLypwcm90byovCisrc3RhdGljIHZvaWQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzX1JlbmRlclBhcmFtc18zX19kZWFsbG9jX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgewor ICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJvcGVuZ2xfY2JfYXBpICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80NG9wZW5nbF9jYl9hcGkoKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7 CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18gKHdyYXBwZXIpIiwg MCk7CisrICBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzJf X2RlYWxsb2NfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5k ZXJQYXJhbXMgKilfX3B5eF92X3NlbGYpKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsK KyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfNDRvcGVuZ2xfY2JfYXBpKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworLSAgdm9pZCAqX19weXhfdl9fY3R4Owor LSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAq X19weXhfdl9jdHggPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworK3N0YXRp YyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMl9f ZGVhbGxvY19fKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQ YXJhbXMgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9fcHl4X3ZfaSA9IE5VTEw7Cisr ICBQeU9iamVjdCAqX19weXhfdl9qID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCistICBpbnQgX19weXhfdF8xOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Cisg ICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBO VUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CisrICBQeV9zc2l6ZV90IF9fcHl4 X3RfMzsKKysgIFB5T2JqZWN0ICooKl9fcHl4X3RfNCkoUHlPYmplY3QgKik7CisrICBQeU9iamVj dCAqX19weXhfdF81ID0gTlVMTDsKKysgIGludCBfX3B5eF90XzY7CisrICBQeV9zc2l6ZV90IF9f cHl4X3RfNzsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIm9wZW5nbF9jYl9hcGkiLCAwKTsKKy0KKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MDQKKy0gKiAgICAgICAgIGNkZWYgdm9pZCAqY2IKKy0g KiAKKy0gKiAgICAgICAgIF9jdHggPSBtcHZfZ2V0X3N1Yl9hcGkoc2VsZi5fY3R4LCBNUFZfU1VC X0FQSV9PUEVOR0xfQ0IpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg IGlmIG5vdCBfY3R4OgorLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJPcGVuR0wgQVBJ IG5vdCBhdmFpbGFibGUiKQorLSAqLworLSAgX19weXhfdl9fY3R4ID0gbXB2X2dldF9zdWJfYXBp KF9fcHl4X3Zfc2VsZi0+X2N0eCwgTVBWX1NVQl9BUElfT1BFTkdMX0NCKTsKKy0KKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MDUKKy0gKiAKKy0gKiAgICAgICAgIF9jdHgg PSBtcHZfZ2V0X3N1Yl9hcGkoc2VsZi5fY3R4LCBNUFZfU1VCX0FQSV9PUEVOR0xfQ0IpCistICog ICAgICAgICBpZiBub3QgX2N0eDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJPcGVuR0wgQVBJIG5vdCBhdmFpbGFibGUiKQorLSAq IAorLSAqLworLSAgX19weXhfdF8xID0gKCghKF9fcHl4X3ZfX2N0eCAhPSAwKSkgIT0gMCk7Cist ICBpZiAodW5saWtlbHkoX19weXhfdF8xKSkgeworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fZGVhbGxvY19fIiwgMCk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4MDYKKy0gKiAgICAgICAgIF9jdHggPSBtcHZfZ2V0X3N1Yl9hcGkoc2VsZi5fY3R4 LCBNUFZfU1VCX0FQSV9PUEVOR0xfQ0IpCistICogICAgICAgICBpZiBub3QgX2N0eDoKKy0gKiAg ICAgICAgICAgICByYWlzZSBNUFZFcnJvcigiT3BlbkdMIEFQSSBub3QgYXZhaWxhYmxlIikgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjkxMworICAqIAorLSAqICAgICAgICAgY3R4ID0gT3BlbkdMQ29udGV4dCgpCisrICog ICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKKysgKiAgICAgICAgIGZvciBpLCBqIGluIGVudW1l cmF0ZShzZWxmLm93bmVkKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgICAgIGlmIGo6CisrICogICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0 YSkKKyAgKi8KKy0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzMsIF9fcHl4 X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDgw NiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgX19Q eXhfSU5DUkVGKF9fcHl4X2ludF8wKTsKKysgIF9fcHl4X3RfMSA9IF9fcHl4X2ludF8wOworKyAg aWYgKGxpa2VseShQeUxpc3RfQ2hlY2tFeGFjdChfX3B5eF92X3NlbGYtPm93bmVkKSkgfHwgUHlU dXBsZV9DaGVja0V4YWN0KF9fcHl4X3Zfc2VsZi0+b3duZWQpKSB7CisrICAgIF9fcHl4X3RfMiA9 IF9fcHl4X3Zfc2VsZi0+b3duZWQ7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzMg PSAwOworICAgICBfX3B5eF90XzQgPSBOVUxMOworLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRI T0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7CistICAgICAgX19w eXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKKy0gICAgICBpZiAobGlrZWx5 KF9fcHl4X3RfNCkpIHsKKy0gICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dF VF9GVU5DVElPTihfX3B5eF90XzMpOworLSAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7 CistICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKy0gICAgICB9CistICAgIH0KKy0gICAgX19weXhf dF8yID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8zLCBf X3B5eF90XzQsIF9fcHl4X2twX3NfT3BlbkdMX0FQSV9ub3RfYXZhaWxhYmxlKSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF9rcF9zX09wZW5HTF9BUElfbm90X2F2 YWlsYWJsZSk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsK Ky0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgODA2LCBfX3B5eF9M MV9lcnJvcikKKysgIH0gZWxzZSB7CisrICAgIF9fcHl4X3RfMyA9IC0xOyBfX3B5eF90XzIgPSBQ eU9iamVjdF9HZXRJdGVyKF9fcHl4X3Zfc2VsZi0+b3duZWQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7CistICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMiwgMCwgMCwgMCk7CistICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBfX1BZWF9FUlIoMCwgODA2LCBf X3B5eF9MMV9lcnJvcikKKy0KKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjgwNQorLSAqIAorLSAqICAgICAgICAgX2N0eCA9IG1wdl9nZXRfc3ViX2FwaShzZWxmLl9jdHgs IE1QVl9TVUJfQVBJX09QRU5HTF9DQikKKy0gKiAgICAgICAgIGlmIG5vdCBfY3R4OiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoIk9w ZW5HTCBBUEkgbm90IGF2YWlsYWJsZSIpCistICogCistICovCisrICAgIF9fcHl4X3RfNCA9IFB5 X1RZUEUoX19weXhfdF8yKS0+dHBfaXRlcm5leHQ7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCisgICB9CisrICBmb3IgKDs7KSB7Cisr ICAgIGlmIChsaWtlbHkoIV9fcHl4X3RfNCkpIHsKKysgICAgICBpZiAobGlrZWx5KFB5TGlzdF9D aGVja0V4YWN0KF9fcHl4X3RfMikpKSB7CisrICAgICAgICBpZiAoX19weXhfdF8zID49IFB5TGlz dF9HRVRfU0laRShfX3B5eF90XzIpKSBicmVhazsKKysgICAgICAgICNpZiBDWVRIT05fQVNTVU1F X1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworKyAgICAgICAgX19w eXhfdF81ID0gUHlMaXN0X0dFVF9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF8zKTsgX19QeXhfSU5D UkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfMysrOyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZWF9F UlIoMCwgOTEzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICAgICNlbHNlCisrICAgICAgICBfX3B5 eF90XzUgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF8yLCBfX3B5eF90XzMpOyBfX3B5eF90XzMr KzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgOTEzLCBfX3B5eF9MMV9l cnJvcikKKysgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworKyAgICAgICAgI2VuZGlm CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGlmIChfX3B5eF90XzMgPj0gUHlUdXBsZV9HRVRf U0laRShfX3B5eF90XzIpKSBicmVhazsKKysgICAgICAgICNpZiBDWVRIT05fQVNTVU1FX1NBRkVf TUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworKyAgICAgICAgX19weXhfdF81 ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF90XzIsIF9fcHl4X3RfMyk7IF9fUHl4X0lOQ1JFRihf X3B5eF90XzUpOyBfX3B5eF90XzMrKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAs IDkxMywgX19weXhfTDFfZXJyb3IpCisrICAgICAgICAjZWxzZQorKyAgICAgICAgX19weXhfdF81 ID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF8zKTsgX19weXhfdF8zKys7IGlm ICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3Ip CisrICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKysgICAgICAgICNlbmRpZgorKyAg ICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICBfX3B5eF90XzUgPSBfX3B5eF90XzQoX19weXhf dF8yKTsKKysgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIHsKKysgICAgICAgIFB5T2Jq ZWN0KiBleGNfdHlwZSA9IFB5RXJyX09jY3VycmVkKCk7CisrICAgICAgICBpZiAoZXhjX3R5cGUp IHsKKysgICAgICAgICAgaWYgKGxpa2VseShfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNo ZXMoZXhjX3R5cGUsIFB5RXhjX1N0b3BJdGVyYXRpb24pKSkgUHlFcnJfQ2xlYXIoKTsKKysgICAg ICAgICAgZWxzZSBfX1BZWF9FUlIoMCwgOTEzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICAgIH0K KysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81 KTsKKysgICAgfQorKyAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X2osIF9fcHl4X3RfNSk7 CisrICAgIF9fcHl4X3RfNSA9IDA7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAg ICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X2ksIF9fcHl4X3RfMSk7CisrICAgIF9fcHl4X3Rf NSA9IF9fUHl4X1B5SW50X0FkZE9iakMoX19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7 IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJy b3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworKyAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsKKysgICAgX19weXhfdF8xID0gX19weXhfdF81OworKyAgICBfX3B5eF90XzUgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgwOAorLSAqICAgICAg ICAgICAgIHJhaXNlIE1QVkVycm9yKCJPcGVuR0wgQVBJIG5vdCBhdmFpbGFibGUiKQorLSAqIAor LSAqICAgICAgICAgY3R4ID0gT3BlbkdMQ29udGV4dCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIGN0eC5fY3R4ID0gPG1wdl9vcGVuZ2xfY2JfY29udGV4dCo+X2N0 eAorLSAqIAorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4 dCkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA4MDgsIF9fcHl4X0wx X2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX3B5eF92X2N0eCA9ICgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqKV9f cHl4X3RfMik7CistICBfX3B5eF90XzIgPSAwOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjgwOQorLSAqIAorLSAqICAgICAgICAgY3R4ID0gT3BlbkdMQ29udGV4dCgp CistICogICAgICAgICBjdHguX2N0eCA9IDxtcHZfb3BlbmdsX2NiX2NvbnRleHQqPl9jdHggICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICAgICAgcmV0dXJuIGN0eAor LSAqLworLSAgX19weXhfdl9jdHgtPl9jdHggPSAoKHN0cnVjdCBtcHZfb3BlbmdsX2NiX2NvbnRl eHQgKilfX3B5eF92X19jdHgpOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjgxMQorLSAqICAgICAgICAgY3R4Ll9jdHggPSA8bXB2X29wZW5nbF9jYl9jb250ZXh0Kj5f Y3R4CistICogCistICogICAgICAgICByZXR1cm4gY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxNAor ICAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6CisrICogICAgICAgICBmb3IgaSwgaiBpbiBl bnVtZXJhdGUoc2VsZi5vd25lZCk6CisrICogICAgICAgICAgICAgaWYgajogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICBmcmVlKHNlbGYucGFyYW1zW2ld LmRhdGEpCisrICogCisgICovCistICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19QeXhf SU5DUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X2N0eCkpOworLSAgX19weXhfciA9ICgoUHlPYmpl Y3QgKilfX3B5eF92X2N0eCk7CistICBnb3RvIF9fcHl4X0wwOworKyAgICBfX3B5eF90XzYgPSBf X1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9qKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8 IDApKSBfX1BZWF9FUlIoMCwgOTE0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgaWYgKF9fcHl4X3Rf NikgeworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgwMQorLSAqICAg ICAgICAgc2VsZi5fY3R4ID0gTlVMTAorLSAqIAorLSAqICAgICBkZWYgb3BlbmdsX2NiX2FwaShz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiB2b2lk ICpjYgorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTUKKysgKiAg ICAgICAgIGZvciBpLCBqIGluIGVudW1lcmF0ZShzZWxmLm93bmVkKToKKysgKiAgICAgICAgICAg ICBpZiBqOgorKyAqICAgICAgICAgICAgICAgICBmcmVlKHNlbGYucGFyYW1zW2ldLmRhdGEpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKysgKiBjZGVmIHZvaWQgKmdldF9wb2lu dGVyKGNvbnN0IGNoYXIgKm5hbWUsIG9iamVjdCBvYmopOgorICAqLworKyAgICAgIF9fcHl4X3Rf NyA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3ZfaSk7IGlmICh1bmxpa2VseSgoX19w eXhfdF83ID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJS KDAsIDkxNSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgZnJlZSgoX19weXhfdl9zZWxmLT5wYXJh bXNbX19weXhfdF83XSkuZGF0YSk7CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0g IF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9f UHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQub3BlbmdsX2NiX2Fw aSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19w eXhfciA9IE5VTEw7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YREVDUkVGKChQeU9iamVjdCAq KV9fcHl4X3ZfY3R4KTsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxMworLSAqICAgICAgICAgcmV0dXJuIGN0eAor LSAqIAorLSAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuc2h1dGRvd24oKQorKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTQKKysgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYp OgorKyAqICAgICAgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOgorKyAqICAg ICAgICAgICAgIGlmIGo6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICAgICAgICAgZnJlZShzZWxmLnBhcmFtc1tpXS5kYXRhKQorICAqIAorICAqLworKyAgICB9Cisg CistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgdm9pZCBfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfNDdfX2RlYWxsb2NfXyhQeU9iamVjdCAqX19weXhfdl9zZWxm KTsgLypwcm90byovCistc3RhdGljIHZvaWQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzQ3X19kZWFsbG9jX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X2RlYWxsb2NfXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF80Nl9fZGVhbGxvY19fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworLQorLSAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy19CistCist c3RhdGljIHZvaWQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ2X19k ZWFsbG9jX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAq X19weXhfdl9zZWxmKSB7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmpl Y3QgKl9fcHl4X3RfMSA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKy0g IFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cist ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18iLCAwKTsK Ky0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MTQKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxMworICAqIAorICAqICAgICBkZWYgX19kZWFs bG9jX18oc2VsZik6CistICogICAgICAgICBzZWxmLnNodXRkb3duKCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqIGNkZWYgdm9pZCAqX2NfZ2V0cHJvY2FkZHJlc3Modm9p ZCAqY3R4LCBjb25zdCBjaGFyICpuYW1lKSB3aXRoIGdpbDoKKysgKiAgICAgICAgIGZvciBpLCBq IGluIGVudW1lcmF0ZShzZWxmLm93bmVkKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgICAgIGlmIGo6CisrICogICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJh bXNbaV0uZGF0YSkKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19zaHV0ZG93bik7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDgxNCwgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IE5VTEw7CistICBpZiAo Q1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworLSAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAg ICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF8zKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgIH0KKyAgIH0KKy0gIF9fcHl4X3Rf MSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9f cHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDgxNCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODEzCistICogICAgICAgICByZXR1cm4gY3R4 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTEyCisrICogICAgICAgICBz ZWxmLmFkZF92b2lkcCh0LCBwKQorICAqIAorICAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuc2h1dGRvd24o KQorLSAqIAorKyAqICAgICAgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOgor KyAqICAgICAgICAgICAgIGlmIGo6CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUg Ki8KK0BAIC0xNjEyMiwzMiArMTU5MjQsMzQgQEAgc3RhdGljIHZvaWQgX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ2X19kZWFsbG9jX18oc3RydWN0IF9fcHl4X28KKyAg IF9fcHl4X0wxX2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4 X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9f UHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuX19kZWFsbG9j X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsK KysgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKKysgIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgi dmlkY3V0dGVyLmxpYnMubXB2Ll9SZW5kZXJQYXJhbXMuX19kZWFsbG9jX18iLCBfX3B5eF9jbGlu ZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsKKyAgIF9fcHl4X0wwOjsK KysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9pKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9q KTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworIH0KKyAKKyAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxCisgICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBf X3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKQorKyAqICAgICByYWlzZSBU eXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2Jq ZWN0IGZvciBwaWNrbGluZyIpCisgICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19w eXhfc3RhdGUpOgorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDlfX3JlZHVjZV9j eXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1 bnVzZWQpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF80OV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgeworK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc181X19yZWR1 Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVj dCAqdW51c2VkKTsgLypwcm90byovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzVfX3JlZHVjZV9jeXRob25fXyhQeU9iamVj dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKyAgIFB5 T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18gKHdyYXBwZXIpIiwg MCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzQ4X19yZWR1Y2VfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmKSk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc180X19yZWR1Y2VfY3l0aG9uX18oKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19w eXhfdl9zZWxmKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fUHl4X1Jl Zk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ4X19y ZWR1Y2VfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfNF9fcmVkdWNlX2N5 dGhvbl9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9zZWxmKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9 IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4 X3RfMSA9IE5VTEw7CitAQCAtMTYxNTgsMTEgKzE1OTYyLDExIEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ4X19yZWR1Y2VfY3l0aG9u X18oQ1lUCisgCisgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoyCisgICogZGVmIF9fcmVkdWNlX2N5 dGhvbl9fKHNlbGYpOgorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1 Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBj b252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKyAgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9z dGF0ZSk6CistICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1 ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKQorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNl bGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNr bGluZyIpCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2J1 aWx0aW5fVHlwZUVycm9yLCBfX3B5eF90dXBsZV9fMywgTlVMTCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0g X19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF9idWlsdGluX1R5cGVFcnJvciwgX19weXhfdHVwbGVf XzUsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAyLCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhfUmFpc2Uo X19weXhfdF8xLCAwLCAwLCAwKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworQEAgLTE2MTcwLDE0ICsxNTk3NCwxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80OF9fcmVkdWNlX2N5dGhvbl9fKENZ VAorIAorICAgLyogIih0cmVlIGZyYWdtZW50KSI6MQorICAqIGRlZiBfX3JlZHVjZV9jeXRob25f XyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICByYWlzZSBUeXBl RXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9f IikKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVy dGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorICAqIGRlZiBfX3NldHN0YXRl X2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworICAgX19weXhfTDFfZXJyb3I6OworICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzEpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5f X3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRl clBhcmFtcy5fX3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9YR0lWRVJFRihf X3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworQEAgLTE2MTg2LDI1 ICsxNTk5MCwyNSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF80OF9fcmVkdWNlX2N5dGhvbl9fKENZVAorIAorIC8qICIodHJlZSBmcmFn bWVudCkiOjMKKyAgKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6CistICogICAgIHJhaXNl IFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Np bml0X18iKQorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBj b252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCisgICogZGVmIF9fc2V0 c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1 ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKQorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNl bGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNr bGluZyIpCisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF81MV9fc2V0c3RhdGVfY3l0 aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3Rh dGUpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF81MV9fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfN19fc2V0c3Rh dGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19w eXhfc3RhdGUpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfN19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKyAgIFB5 T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyAod3JhcHBlciki LCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNTBfX3NldHN0YXRlX2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X19f cHl4X3N0YXRlKSk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzX1JlbmRlclBhcmFtc182X19zZXRzdGF0ZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3NlbGYpLCAoKFB5 T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5 eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF81MF9fc2V0c3RhdGVfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICpfX3B5eF92X3NlbGYsIENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfNl9f c2V0c3RhdGVfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0g TlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhf dF8xID0gTlVMTDsKK0BAIC0xNjIxNCwxMSArMTYwMTgsMTEgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNTBfX3NldHN0YXRlX2N5dGhv bl9fKEMKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9f IiwgMCk7CisgCisgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0CistICogICAgIHJhaXNlIFR5cGVF cnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18i KQorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0 ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCisgICogZGVmIF9fc2V0c3RhdGVf Y3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5v IGRlZmF1bHQgX19yZWR1Y2VfXyBkdWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFy YW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4 X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4X3R1cGxlX180LCBO VUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2J1aWx0aW5f VHlwZUVycm9yLCBfX3B5eF90dXBsZV9fNiwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CisgICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOworICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CitAQCAtMTYyMjYsMjY3NSArMTYwMzAsMjE4 NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF81MF9fc2V0c3RhdGVfY3l0aG9uX18oQworIAorICAgLyogIih0cmVlIGZyYWdtZW50KSI6 MworICAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKy0gKiAgICAgcmFpc2UgVHlwZUVy cm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5vbi10cml2aWFsIF9fY2luaXRfXyIp CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRl ZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKyAgKiBkZWYgX19zZXRzdGF0ZV9j eXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRvIG5v bi10cml2aWFsIF9fY2luaXRfXyIpCisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJh bXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikK KyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19weXhfTDFfZXJyb3I6 OworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2 aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5fX3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX1B5eF9BZGRUcmFjZWJh Y2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVuZGVyUGFyYW1zLl9fc2V0c3RhdGVfY3l0aG9uX18i LCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKyAgIF9fcHl4 X3IgPSBOVUxMOworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODE2CistICogICAgICAgICBzZWxmLnNodXRkb3duKCkK Ky0gKiAKKy0gKiBjZGVmIHZvaWQgKl9jX2dldHByb2NhZGRyZXNzKHZvaWQgKmN0eCwgY29uc3Qg Y2hhciAqbmFtZSkgd2l0aCBnaWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgcmV0dXJuIDx2b2lkICo+PGludHB0cl90Pig8b2JqZWN0PmN0eCkobmFtZSkKKysvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE3CisrICogICAgICAgICAgICAgICAgIGZyZWUo c2VsZi5wYXJhbXNbaV0uZGF0YSkKKyAgKiAKKysgKiBjZGVmIHZvaWQgKmdldF9wb2ludGVyKGNv bnN0IGNoYXIgKm5hbWUsIG9iamVjdCBvYmopOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgIGNkZWYgdm9pZCAqcAorKyAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxpZChvYmos IG5hbWUpOgorICAqLworIAorLXN0YXRpYyB2b2lkICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fY19nZXRwcm9jYWRkcmVzcyh2b2lkICpfX3B5eF92X2N0eCwgY2hhciBjb25zdCAqX19w eXhfdl9uYW1lKSB7Cisrc3RhdGljIHZvaWQgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2 X2dldF9wb2ludGVyKGNoYXIgY29uc3QgKl9fcHl4X3ZfbmFtZSwgUHlPYmplY3QgKl9fcHl4X3Zf b2JqKSB7CisrICB2b2lkICpfX3B5eF92X3A7CisgICB2b2lkICpfX3B5eF9yOworICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAg UHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVM TDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAgaW50IF9fcHl4X3RfMTsKKysg IHZvaWQgKl9fcHl4X3RfMjsKKysgIGludCBfX3B5eF90XzM7CisrICBpbnQgX19weXhfdF80Owor ICAgaW50cHRyX3QgX19weXhfdF81OworKyAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7Cisr ICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzggPSBO VUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfOSA9IE5VTEw7CisgICBpbnQgX19weXhfbGluZW5v ID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5 eF9jbGluZW5vID0gMDsKKy0gICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgUHlHSUxTdGF0ZV9TVEFU RSBfX3B5eF9naWxzdGF0ZV9zYXZlID0gX19QeXhfUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKy0gICNl bmRpZgorLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9jX2dldHByb2NhZGRyZXNzIiwg MCk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODE3CistICogCist ICogY2RlZiB2b2lkICpfY19nZXRwcm9jYWRkcmVzcyh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm5h bWUpIHdpdGggZ2lsOgorLSAqICAgICByZXR1cm4gPHZvaWQgKj48aW50cHRyX3Q+KDxvYmplY3Q+ Y3R4KShuYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogY2RlZiB2 b2lkIF9jX3VwZGF0ZWNiKHZvaWQgKmN0eCkgd2l0aCBnaWw6CistICovCistICBfX3B5eF90XzIg PSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgODE3LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzIpOworLSAgX19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X2N0 eCkpOworLSAgX19weXhfdF8zID0gKChQeU9iamVjdCAqKV9fcHl4X3ZfY3R4KTsgX19weXhfdF80 ID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRo b2RfQ2hlY2soX19weXhfdF8zKSkpIHsKKy0gICAgX19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NF TEYoX19weXhfdF8zKTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CistICAgICAgUHlP YmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMyk7CistICAg ICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7CistICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKKy0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywgZnVuY3Rpb24pOworLSAgICB9 CistICB9CistICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwy QXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNCwgX19weXhfdF8yKSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF90XzIpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4MTcsIF9f cHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9ERUNS RUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50 X0FzX2ludHB0cl90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF81ID09ICgoaW50 cHRyX3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDgxNywgX19weXhf TDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0g IF9fcHl4X3IgPSAoKHZvaWQgKikoKGludHB0cl90KV9fcHl4X3RfNSkpOworLSAgZ290byBfX3B5 eF9MMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJnZXRfcG9pbnRlciIsIDApOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNgorLSAqICAgICAgICAg c2VsZi5zaHV0ZG93bigpCistICogCistICogY2RlZiB2b2lkICpfY19nZXRwcm9jYWRkcmVzcyh2 b2lkICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUpIHdpdGggZ2lsOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIHJldHVybiA8dm9pZCAqPjxpbnRwdHJfdD4oPG9iamVjdD5jdHgp KG5hbWUpCistICogCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5Cisr ICogY2RlZiB2b2lkICpnZXRfcG9pbnRlcihjb25zdCBjaGFyICpuYW1lLCBvYmplY3Qgb2JqKToK KysgKiAgICAgY2RlZiB2b2lkICpwCisrICogICAgIGlmIFB5Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwg bmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHAgPSBQeUNh cHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCisrICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmos IGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6CisgICovCisrICBfX3B5eF90 XzEgPSAoUHlDYXBzdWxlX0lzVmFsaWQoX19weXhfdl9vYmosIF9fcHl4X3ZfbmFtZSkgIT0gMCk7 CisrICBpZiAoX19weXhfdF8xKSB7CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0g IF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0 dGVyLmxpYnMubXB2Ll9jX2dldHByb2NhZGRyZXNzIiwgX19weXhfY2xpbmVubywgX19weXhfbGlu ZW5vLCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7CistICBfX3B5eF9yID0gMDsKKy0gIF9fcHl4X0ww OjsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgI2lmZGVmIFdJVEhfVEhS RUFECistICBfX1B5eF9QeUdJTFN0YXRlX1JlbGVhc2UoX19weXhfZ2lsc3RhdGVfc2F2ZSk7Cist ICAjZW5kaWYKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjkyMAorKyAqICAgICBjZGVmIHZvaWQgKnAKKysgKiAgICAgaWYgUHlD YXBzdWxlX0lzVmFsaWQob2JqLCBuYW1lKToKKysgKiAgICAgICAgIHAgPSBQeUNhcHN1bGVfR2V0 UG9pbnRlcihvYmosIG5hbWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ZWxpZiBpc2luc3RhbmNlKG9iaiwgaW50KSBvciBpc2luc3RhbmNlKG9iaiwgbG9uZykgYW5kIG9i ajoKKysgKiAgICAgICAgIHAgPSA8dm9pZCAqPjxpbnRwdHJfdD5vYmoKKysgKi8KKysgICAgX19w eXhfdF8yID0gUHlDYXBzdWxlX0dldFBvaW50ZXIoX19weXhfdl9vYmosIF9fcHl4X3ZfbmFtZSk7 IGlmICh1bmxpa2VseShfX3B5eF90XzIgPT0gKCh2b2lkICopTlVMTCkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCA5MjAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF92X3Ag PSBfX3B5eF90XzI7CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxOQor LSAqICAgICByZXR1cm4gPHZvaWQgKj48aW50cHRyX3Q+KDxvYmplY3Q+Y3R4KShuYW1lKQorLSAq IAorLSAqIGNkZWYgdm9pZCBfY191cGRhdGVjYih2b2lkICpjdHgpIHdpdGggZ2lsOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICg8b2JqZWN0PmN0eCkoKQorLSAqIAorKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5CisrICogY2RlZiB2b2lkICpn ZXRfcG9pbnRlcihjb25zdCBjaGFyICpuYW1lLCBvYmplY3Qgb2JqKToKKysgKiAgICAgY2RlZiB2 b2lkICpwCisrICogICAgIGlmIFB5Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwgbmFtZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHAgPSBQeUNhcHN1bGVfR2V0UG9pbnRl cihvYmosIG5hbWUpCisrICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGludCkgb3IgaXNpbnN0 YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6CisgICovCisrICAgIGdvdG8gX19weXhfTDM7CisrICB9 CisgCistc3RhdGljIHZvaWQgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfdXBkYXRl Y2Iodm9pZCAqX19weXhfdl9jdHgpIHsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBO VUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CistICBpbnQgX19weXhfbGluZW5v ID0gMDsKKy0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5 eF9jbGluZW5vID0gMDsKKy0gICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgUHlHSUxTdGF0ZV9TVEFU RSBfX3B5eF9naWxzdGF0ZV9zYXZlID0gX19QeXhfUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKy0gICNl bmRpZgorLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9jX3VwZGF0ZWNiIiwgMCk7Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTIxCisrICogICAgIGlmIFB5Q2Fw c3VsZV9Jc1ZhbGlkKG9iaiwgbmFtZSk6CisrICogICAgICAgICBwID0gUHlDYXBzdWxlX0dldFBv aW50ZXIob2JqLCBuYW1lKQorKyAqICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBpbnQpIG9yIGlz aW5zdGFuY2Uob2JqLCBsb25nKSBhbmQgb2JqOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICBwID0gPHZvaWQgKj48aW50cHRyX3Q+b2JqCisrICogICAgIGVsc2U6Cisr ICovCisrICBfX3B5eF90XzMgPSBQeUludF9DaGVjayhfX3B5eF92X29iaik7IAorKyAgX19weXhf dF80ID0gKF9fcHl4X3RfMyAhPSAwKTsKKysgIGlmICghX19weXhfdF80KSB7CisrICB9IGVsc2Ug eworKyAgICBfX3B5eF90XzEgPSBfX3B5eF90XzQ7CisrICAgIGdvdG8gX19weXhfTDRfYm9vbF9i aW5vcF9kb25lOworKyAgfQorKyAgX19weXhfdF80ID0gUHlMb25nX0NoZWNrKF9fcHl4X3Zfb2Jq KTsgCisrICBfX3B5eF90XzMgPSAoX19weXhfdF80ICE9IDApOworKyAgaWYgKF9fcHl4X3RfMykg eworKyAgfSBlbHNlIHsKKysgICAgX19weXhfdF8xID0gX19weXhfdF8zOworKyAgICBnb3RvIF9f cHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKKysgIH0KKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2Jq ZWN0X0lzVHJ1ZShfX3B5eF92X29iaik7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19Q WVhfRVJSKDAsIDkyMSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX3B5eF90XzM7 CisrICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OworKyAgaWYgKGxpa2VseShfX3B5eF90XzEp KSB7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODIwCistICogCist ICogY2RlZiB2b2lkIF9jX3VwZGF0ZWNiKHZvaWQgKmN0eCkgd2l0aCBnaWw6CistICogICAgICg8 b2JqZWN0PmN0eCkoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjIKKysgKiAgICAgICAgIHAgPSBQeUNhcHN1bGVf R2V0UG9pbnRlcihvYmosIG5hbWUpCisrICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGludCkg b3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6CisrICogICAgICAgICBwID0gPHZvaWQg Kj48aW50cHRyX3Q+b2JqICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZWxz ZToKKysgKiAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlVua25vd24gb3IgaW52YWxpZCBwb2lu dGVyIG9iamVjdDogJXIiICUgb2JqKQorKyAqLworKyAgICBfX3B5eF90XzUgPSBfX1B5eF9QeUlu dF9Bc19pbnRwdHJfdChfX3B5eF92X29iaik7IGlmICh1bmxpa2VseSgoX19weXhfdF81ID09ICgo aW50cHRyX3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDkyMiwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3ZfcCA9ICgodm9pZCAqKSgoaW50cHRyX3QpX19weXhf dF81KSk7CisrCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjEKKysg KiAgICAgaWYgUHlDYXBzdWxlX0lzVmFsaWQob2JqLCBuYW1lKToKKysgKiAgICAgICAgIHAgPSBQ eUNhcHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCisrICogICAgIGVsaWYgaXNpbnN0YW5jZShv YmosIGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHAgPSA8dm9pZCAqPjxpbnRwdHJfdD5vYmoKKysg KiAgICAgZWxzZToKKysgKi8KKysgICAgZ290byBfX3B5eF9MMzsKKysgIH0KKysKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjQKKysgKiAgICAgICAgIHAgPSA8dm9pZCAq PjxpbnRwdHJfdD5vYmoKKysgKiAgICAgZWxzZToKKysgKiAgICAgICAgIHJhaXNlIFB5TVBWRXJy b3IoIlVua25vd24gb3IgaW52YWxpZCBwb2ludGVyIG9iamVjdDogJXIiICUgb2JqKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHJldHVybiBwCisgICogCistICogY2RlZiBj bGFzcyBPcGVuR0xDb250ZXh0KG9iamVjdCk6CisgICovCistICBfX1B5eF9JTkNSRUYoKChQeU9i amVjdCAqKV9fcHl4X3ZfY3R4KSk7CistICBfX3B5eF90XzIgPSAoKFB5T2JqZWN0ICopX19weXhf dl9jdHgpOyBfX3B5eF90XzMgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICBfX3B5eF90XzMg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3Rf MykpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKKy0gICAgICBfX1B5 eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBm dW5jdGlvbik7CisrICAvKmVsc2UqLyB7CisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF83LCBfX3B5eF9uX3NfUHlNUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF83 KSkgX19QWVhfRVJSKDAsIDkyNCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOworKyAgICBfX3B5eF90XzggPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXRTYWZlKF9f cHl4X2twX3NfVW5rbm93bl9vcl9pbnZhbGlkX3BvaW50ZXJfb2JqZWMsIF9fcHl4X3Zfb2JqKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMCwgOTI0LCBfX3B5eF9MMV9lcnJv cikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfOCk7CisrICAgIF9fcHl4X3RfOSA9IE5VTEw7 CisrICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF83KSkpIHsKKysgICAgICBfX3B5eF90XzkgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzcpOworKyAgICAgIGlmIChsaWtlbHkoX19weXhfdF85KSkgeworKyAgICAgICAgUHlP YmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNyk7CisrICAg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF85KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7CisrICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNywgZnVuY3Rpb24pOwor KyAgICAgIH0KKyAgICAgfQorKyAgICBfX3B5eF90XzYgPSAoX19weXhfdF85KSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOSwgX19weXhfdF84KSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF83LCBfX3B5eF90XzgpOworKyAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzgpOyBfX3B5eF90XzggPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9f UFlYX0VSUigwLCA5MjQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisrICAg IF9fUHl4X1JhaXNlKF9fcHl4X3RfNiwgMCwgMCwgMCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICBfX1BZWF9FUlIoMCwgOTI0LCBfX3B5eF9MMV9l cnJvcikKKyAgIH0KKy0gIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9B cmcoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDgyMCwgX19weXhf TDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7CisrICBfX3B5eF9MMzo7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODE5CistICogICAgIHJldHVybiA8dm9pZCAqPjxpbnRwdHJfdD4oPG9iamVj dD5jdHgpKG5hbWUpCistICogCistICogY2RlZiB2b2lkIF9jX3VwZGF0ZWNiKHZvaWQgKmN0eCkg d2l0aCBnaWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgKDxvYmplY3Q+ Y3R4KSgpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTI1CisrICogICAg IGVsc2U6CisrICogICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJVbmtub3duIG9yIGludmFsaWQg cG9pbnRlciBvYmplY3Q6ICVyIiAlIG9iaikKKysgKiAgICAgcmV0dXJuIHAgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqIAorKyAqIEBjeXRob24uaW50ZXJuYWwKKyAgKi8KKy0KKy0g IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IF9fcHl4X3ZfcDsKKyAgIGdv dG8gX19weXhfTDA7CistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CistICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7CistICBfX1B5eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5f Y191cGRhdGVjYiIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUs IDEsIDApOworLSAgX19weXhfTDA6OworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 CistICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gIF9fUHl4X1B5R0lMU3RhdGVfUmVsZWFzZShfX3B5 eF9naWxzdGF0ZV9zYXZlKTsKKy0gICNlbmRpZgorLX0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODI4CistICogICAgICAgICBvYmplY3QgdXBkYXRlX2NiCisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE3CisrICogICAgICAgICAgICAgICAgIGZy ZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkKKyAgKiAKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmluaXRlZCA9 IEZhbHNlCistICogICAgICAgICB3YXJuaW5ncy53YXJuKCJPcGVuR0xDb250ZXh0IGlzIGRlcHJl Y2F0ZWQsIHBsZWFzZSBzd2l0Y2ggdG8gUmVuZGVyQ29udGV4dCIsIERlcHJlY2F0aW9uV2Fybmlu ZykKKysgKiBjZGVmIHZvaWQgKmdldF9wb2ludGVyKGNvbnN0IGNoYXIgKm5hbWUsIG9iamVjdCBv YmopOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGNkZWYgdm9pZCAqcAor KyAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxpZChvYmosIG5hbWUpOgorICAqLworIAorLS8qIFB5 dGhvbiB3cmFwcGVyICovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNPcGVuR0xDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0 aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMV9f aW5pdF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9i amVjdCAqX19weXhfa3dkcykgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5ueURl Y2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fICh3cmFw cGVyKSIsIDApOworLSAgaWYgKHVubGlrZWx5KFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykg PiAwKSkgeworLSAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAxLCAw LCAwLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgcmV0dXJuIC0xO30KKy0gIGlmICh1 bmxpa2VseShfX3B5eF9rd2RzKSAmJiB1bmxpa2VseShQeURpY3RfU2l6ZShfX3B5eF9rd2RzKSA+ IDApICYmIHVubGlrZWx5KCFfX1B5eF9DaGVja0tleXdvcmRTdHJpbmdzKF9fcHl4X2t3ZHMsICJf X2luaXRfXyIsIDApKSkgcmV0dXJuIC0xOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfX19pbml0X18oKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICopX19weXhfdl9zZWxmKSk7Cist CisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9f UHl4X1hERUNSRUYoX19weXhfdF82KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsKKysg IF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsK KysgIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0dGVyLmxpYnMubXB2LmdldF9wb2ludGVy IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7Cisr ICBfX3B5eF9yID0gMDsKKysgIF9fcHl4X0wwOjsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29u dGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRpYyBpbnQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5eF92X3NlbGYp IHsKKy0gIGludCBfX3B5eF9yOworKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 MjkKKysgKiBAY3l0aG9uLmludGVybmFsCisrICogY2RlZiBjbGFzcyBSZW5kZXJGcmFtZUluZm8o b2JqZWN0KToKKysgKiAgICAgY2RlZiBfZnJvbV9zdHJ1Y3Qoc2VsZiwgbXB2X3JlbmRlcl9mcmFt ZV9pbmZvICppbmZvKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg c2VsZi5wcmVzZW50ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZP X1BSRVNFTlQpCisrICogICAgICAgICBzZWxmLnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFncyAm IE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpCisrICovCisrCisrc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNVJlbmRlckZyYW1lSW5mb19fZnJvbV9z dHJ1Y3Qoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJ bmZvICpfX3B5eF92X3NlbGYsIHN0cnVjdCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKl9fcHl4X3Zf aW5mbykgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMiA9IE5VTEw7CisrICBpbnQgX19weXhfdF8yOworICAgaW50IF9fcHl4X2xpbmVu byA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18i LCAwKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfZnJvbV9zdHJ1Y3QiLCAwKTsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MjkKKy0gKiAKKy0gKiAg ICAgZGVmIF9faW5pdF9fKHNlbGYpOgorLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB3YXJuaW5ncy53YXJuKCJP cGVuR0xDb250ZXh0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBzd2l0Y2ggdG8gUmVuZGVyQ29udGV4 dCIsIERlcHJlY2F0aW9uV2FybmluZykKKy0gKiAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MzAKKysgKiBjZGVmIGNsYXNzIFJlbmRlckZyYW1lSW5mbyhvYmplY3QpOgor KyAqICAgICBjZGVmIF9mcm9tX3N0cnVjdChzZWxmLCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKmlu Zm8pOgorKyAqICAgICAgICAgc2VsZi5wcmVzZW50ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBW X1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgIHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRF Ul9GUkFNRV9JTkZPX1JFRFJBVykKKysgKiAgICAgICAgIHNlbGYucmVwZWF0ID0gYm9vbChpbmZv WzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVBVCkKKyAgKi8KKy0gIF9fcHl4 X3Zfc2VsZi0+aW5pdGVkID0gMDsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWlu dDY0X3QoKChfX3B5eF92X2luZm9bMF0pLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BS RVNFTlQpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMwLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19weXhfdF8yID0g X19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIg PCAwKSkgX19QWVhfRVJSKDAsIDkzMCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9G cm9tTG9uZygoISghX19weXhfdF8yKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA5MzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9z ZWxmKSwgX19weXhfbl9zX3ByZXNlbnQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMw LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgzMAorLSAqICAg ICBkZWYgX19pbml0X18oc2VsZik6CistICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCist ICogICAgICAgICB3YXJuaW5ncy53YXJuKCJPcGVuR0xDb250ZXh0IGlzIGRlcHJlY2F0ZWQsIHBs ZWFzZSBzd2l0Y2ggdG8gUmVuZGVyQ29udGV4dCIsIERlcHJlY2F0aW9uV2FybmluZykgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICBkZWYgaW5pdF9nbChzZWxmLCBl eHRzLCBnZXRfcHJvY19hZGRyZXNzKToKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo5MzEKKysgKiAgICAgY2RlZiBfZnJvbV9zdHJ1Y3Qoc2VsZiwgbXB2X3JlbmRlcl9mcmFt ZV9pbmZvICppbmZvKToKKysgKiAgICAgICAgIHNlbGYucHJlc2VudCA9IGJvb2woaW5mb1swXS5m bGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19QUkVTRU5UKQorKyAqICAgICAgICAgc2VsZi5y ZWRyYXcgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUkVEUkFX KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLnJlcGVhdCA9 IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpCisrICog ICAgICAgICBzZWxmLmJsb2NrX3ZzeW5jID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRF Ul9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKQorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFs TmFtZShfX3B5eF90XzEsIF9fcHl4X25fc193YXJuaW5ncyk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDgzMCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBf X1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KCgoX19weXhfdl9pbmZvWzBdKS5mbGFncyAmIE1QVl9S RU5ERVJfRlJBTUVfSU5GT19SRURSQVcpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzEsIF9f cHl4X25fc193YXJuKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgODMw LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgX19weXhf dF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5 eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDkzMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5 T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90dXBsZV9fNSwgTlVMTCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDgzMCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3RfMikpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7CisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICop X19weXhfdl9zZWxmKSwgX19weXhfbl9zX3JlZHJhdywgX19weXhfdF8xKSA8IDApIF9fUFlYX0VS UigwLCA5MzEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODI4 CistICogICAgICAgICBvYmplY3QgdXBkYXRlX2NiCistICogCistICogICAgIGRlZiBfX2luaXRf XyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5p bml0ZWQgPSBGYWxzZQorLSAqICAgICAgICAgd2FybmluZ3Mud2FybigiT3BlbkdMQ29udGV4dCBp cyBkZXByZWNhdGVkLCBwbGVhc2Ugc3dpdGNoIHRvIFJlbmRlckNvbnRleHQiLCBEZXByZWNhdGlv bldhcm5pbmcpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTMyCisrICog ICAgICAgICBzZWxmLnByZXNlbnQgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZS QU1FX0lORk9fUFJFU0VOVCkKKysgKiAgICAgICAgIHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBd LmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFRFJBVykKKysgKiAgICAgICAgIHNlbGYu cmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVB VCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5ibG9ja192 c3luYyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19CTE9DS19W U1lOQykKKysgKiAgICAgICAgIHNlbGYudGFyZ2V0X3RpbWUgPSBpbmZvWzBdLnRhcmdldF90aW1l CisgICovCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KCgoX19weXhf dl9pbmZvWzBdKS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMyLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3Rf SXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJS KDAsIDkzMiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISghX19w eXhfdF8yKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzIsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBpZiAoX19QeXhf UHlPYmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9z X3JlcGVhdCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCA5MzIsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSAwOworLSAgZ290byBfX3B5eF9MMDsK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzMKKysgKiAgICAgICAgIHNl bGYucmVkcmF3ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JF RFJBVykKKysgKiAgICAgICAgIHNlbGYucmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBW X1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVBVCkKKysgKiAgICAgICAgIHNlbGYuYmxvY2tfdnN5bmMg PSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYudGFyZ2V0X3Rp bWUgPSBpbmZvWzBdLnRhcmdldF90aW1lCisrICogICAgICAgICByZXR1cm4gc2VsZgorKyAqLwor KyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCgoKF9fcHl4X3ZfaW5mb1sw XSkuZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNU cnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAs IDkzMywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISghX19weXhf dF8yKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBpZiAoX19QeXhfUHlP YmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX2Js b2NrX3ZzeW5jLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDkzMywgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzQKKysgKiAgICAgICAgIHNlbGYucmVw ZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVBVCkK KysgKiAgICAgICAgIHNlbGYuYmxvY2tfdnN5bmMgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZf UkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpCisrICogICAgICAgICBzZWxmLnRhcmdldF90 aW1lID0gaW5mb1swXS50YXJnZXRfdGltZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICByZXR1cm4gc2VsZgorKyAqIAorKyAqLworKyAgX19weXhfdF8xID0gX19QeXhf UHlJbnRfRnJvbV9pbnQ2NF90KChfX3B5eF92X2luZm9bMF0pLnRhcmdldF90aW1lKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTM0LCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJT dHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc190YXJnZXRfdGltZSwgX19w eXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCA5MzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTM1CisrICogICAgICAgICBzZWxmLmJsb2NrX3ZzeW5jID0gYm9v bChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKQorKyAq ICAgICAgICAgc2VsZi50YXJnZXRfdGltZSA9IGluZm9bMF0udGFyZ2V0X3RpbWUKKysgKiAgICAg ICAgIHJldHVybiBzZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiBj ZGVmIGNsYXNzIFJlbmRlckNvbnRleHQob2JqZWN0KToKKysgKi8KKysgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CisrICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOwor KyAgX19weXhfciA9ICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpOworKyAgZ290byBfX3B5eF9M MDsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjkKKysgKiBAY3l0 aG9uLmludGVybmFsCisrICogY2RlZiBjbGFzcyBSZW5kZXJGcmFtZUluZm8ob2JqZWN0KToKKysg KiAgICAgY2RlZiBfZnJvbV9zdHJ1Y3Qoc2VsZiwgbXB2X3JlbmRlcl9mcmFtZV9pbmZvICppbmZv KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5wcmVzZW50 ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpCisr ICogICAgICAgICBzZWxmLnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJf RlJBTUVfSU5GT19SRURSQVcpCisrICovCisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K KyAgIF9fcHl4X0wxX2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2Lk9wZW5HTENvbnRleHQuX19pbml0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAtMTsKKysgIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckZyYW1lSW5mby5fZnJvbV9zdHJ1Y3Qi LCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4 X3IgPSAwOworICAgX19weXhfTDA6OworKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAK Ky0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODMyCistICogICAgICAgICB3YXJu aW5ncy53YXJuKCJPcGVuR0xDb250ZXh0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBzd2l0Y2ggdG8g UmVuZGVyQ29udGV4dCIsIERlcHJlY2F0aW9uV2FybmluZykKKy0gKiAKKy0gKiAgICAgZGVmIGlu aXRfZ2woc2VsZiwgZXh0cywgZ2V0X3Byb2NfYWRkcmVzcyk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIGV4dHMgPSBfc3RyZW5jKGV4dHMpIGlmIGV4dHMgaXMgbm90 IE5vbmUgZWxzZSBOb25lCistICogICAgICAgICBjZGVmIGNoYXIqIGV4dHNjID0gTlVMTAorKy8q ICIodHJlZSBmcmFnbWVudCkiOjEKKysgKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgY2RlZiB0dXBsZSBzdGF0ZQorKyAq ICAgICBjZGVmIG9iamVjdCBfZGljdAorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xD b250ZXh0XzNpbml0X2dsKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9h cmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8zaW5pdF9nbChQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9f cHl4X2t3ZHMpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2V4dHMgPSAwOworLSAgUHlPYmplY3Qg Kl9fcHl4X3ZfZ2V0X3Byb2NfYWRkcmVzcyA9IDA7CistICBpbnQgX19weXhfbGluZW5vID0gMDsK Ky0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNVJlbmRlckZyYW1lSW5mb18xX19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCisrc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUlu Zm9fMV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVT RUQgUHlPYmplY3QgKnVudXNlZCkgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworICAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJp bml0X2dsICh3cmFwcGVyKSIsIDApOworLSAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5 eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19leHRzLCZfX3B5eF9uX3NfZ2V0X3Byb2NfYWRk cmVzcywwfTsKKy0gICAgUHlPYmplY3QqIHZhbHVlc1syXSA9IHswLDB9OworLSAgICBpZiAodW5s aWtlbHkoX19weXhfa3dkcykpIHsKKy0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAg Y29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7 CistICAgICAgc3dpdGNoIChwb3NfYXJncykgeworLSAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFd ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAgIENZVEhPTl9GQUxM VEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0o X19weXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBj YXNlICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVf ZXJyb3I7CistICAgICAgfQorLSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6ZShfX3B5eF9rd2Rz KTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNlICAwOgorLSAgICAg ICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhf a3dkcywgX19weXhfbl9zX2V4dHMpKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSBn b3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OworLSAgICAgICAgY2FzZSAgMToKKy0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9f UHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19nZXRfcHJvY19hZGRy ZXNzKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVsc2UgeworLSAgICAgICAgICBfX1B5 eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiaW5pdF9nbCIsIDEsIDIsIDIsIDEpOyBfX1BZWF9FUlIo MCwgODMyLCBfX3B5eF9MM19lcnJvcikKKy0gICAgICAgIH0KKy0gICAgICB9CistICAgICAgaWYg KHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1Bh cnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1 ZXMsIHBvc19hcmdzLCAiaW5pdF9nbCIpIDwgMCkpIF9fUFlYX0VSUigwLCA4MzIsIF9fcHl4X0wz X2Vycm9yKQorLSAgICAgIH0KKy0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4 X2FyZ3MpICE9IDIpIHsKKy0gICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAg ICB9IGVsc2UgeworLSAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJn cywgMCk7CistICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAx KTsKKy0gICAgfQorLSAgICBfX3B5eF92X2V4dHMgPSB2YWx1ZXNbMF07CistICAgIF9fcHl4X3Zf Z2V0X3Byb2NfYWRkcmVzcyA9IHZhbHVlc1sxXTsKKy0gIH0KKy0gIGdvdG8gX19weXhfTDRfYXJn dW1lbnRfdW5wYWNraW5nX2RvbmU7CistICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBf X1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiaW5pdF9nbCIsIDEsIDIsIDIsIFB5VHVwbGVfR0VU X1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgODMyLCBfX3B5eF9MM19lcnJvcikKKy0g IF9fcHl4X0wzX2Vycm9yOjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMu bXB2Lk9wZW5HTENvbnRleHQuaW5pdF9nbCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICBy ZXR1cm4gTlVMTDsKKy0gIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzJp bml0X2dsKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29u dGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfZXh0cywgX19weXhfdl9nZXRfcHJvY19hZGRy ZXNzKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyAo d3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTVSZW5kZXJGcmFtZUluZm9fX19yZWR1Y2VfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKilfX3B5eF92X3NlbGYpKTsK KyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzJpbml0X2dsKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQgKl9fcHl4 X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfZXh0cywgUHlPYmplY3QgKl9fcHl4X3ZfZ2V0X3By b2NfYWRkcmVzcykgeworLSAgY2hhciAqX19weXhfdl9leHRzYzsKKy0gIGludCBfX3B5eF92X2Vy cjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNVJl bmRlckZyYW1lSW5mb19fX3JlZHVjZV9jeXRob25fXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmpl Y3QgKl9fcHl4X3Zfc3RhdGUgPSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX2RpY3QgPSAwOwor KyAgaW50IF9fcHl4X3ZfdXNlX3NldHN0YXRlOworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxM OworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEg PSBOVUxMOworICAgaW50IF9fcHl4X3RfMjsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxM OworKyAgaW50IF9fcHl4X3RfMzsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworICAg UHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBpbnQgX19weXhfdF82OworLSAgY2hhciAq X19weXhfdF83OworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5 eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiaW5pdF9nbCIsIDApOworLSAgX19QeXhfSU5DUkVGKF9fcHl4 X3ZfZXh0cyk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODMzCist ICogCistICogICAgIGRlZiBpbml0X2dsKHNlbGYsIGV4dHMsIGdldF9wcm9jX2FkZHJlc3MpOgor LSAqICAgICAgICAgZXh0cyA9IF9zdHJlbmMoZXh0cykgaWYgZXh0cyBpcyBub3QgTm9uZSBlbHNl IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBjaGFy KiBleHRzYyA9IE5VTEwKKy0gKiAgICAgICAgIGlmIGV4dHMgaXMgbm90IE5vbmU6CistICovCist ICBfX3B5eF90XzIgPSAoX19weXhfdl9leHRzICE9IFB5X05vbmUpOworLSAgaWYgKChfX3B5eF90 XzIgIT0gMCkpIHsKKy0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9f cHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA4 MzMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAg X19weXhfdF81ID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzQpKSkgeworLSAgICAgIF9fcHl4X3RfNSA9IFB5 TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNCk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUp KSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF80KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworLSAgICAgICAg X19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhf dF80LCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4X3RfMyA9IChfX3B5 eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNCwgX19weXhfdF81LCBf X3B5eF92X2V4dHMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4 X3ZfZXh0cyk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsK Ky0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgODMzLCBfX3B5eF9M MV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBfX3B5eF90XzEgPSBfX3B5eF90XzM7 CistICAgIF9fcHl4X3RfMyA9IDA7CistICB9IGVsc2UgeworLSAgICBfX1B5eF9JTkNSRUYoUHlf Tm9uZSk7CistICAgIF9fcHl4X3RfMSA9IFB5X05vbmU7CistICB9CistICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3ZfZXh0cywgX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMSA9IDA7CisrICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18iLCAwKTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MzQKKy0gKiAgICAgZGVmIGluaXRfZ2wo c2VsZiwgZXh0cywgZ2V0X3Byb2NfYWRkcmVzcyk6CistICogICAgICAgICBleHRzID0gX3N0cmVu YyhleHRzKSBpZiBleHRzIGlzIG5vdCBOb25lIGVsc2UgTm9uZQorLSAqICAgICAgICAgY2RlZiBj aGFyKiBleHRzYyA9IE5VTEwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgaWYgZXh0cyBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgICAgICBleHRzYyA9IGV4dHMKKysg IC8qICIodHJlZSBmcmFnbWVudCkiOjUKKysgKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKKysgKiAg ICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQorKyAqICAgICBzdGF0ZSA9ICgpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3Rf XycsIE5vbmUpCisrICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorICAqLworLSAgX19weXhf dl9leHRzYyA9IE5VTEw7CisrICBfX1B5eF9JTkNSRUYoX19weXhfZW1wdHlfdHVwbGUpOworKyAg X19weXhfdl9zdGF0ZSA9IF9fcHl4X2VtcHR5X3R1cGxlOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjgzNQorLSAqICAgICAgICAgZXh0cyA9IF9zdHJlbmMoZXh0cykg aWYgZXh0cyBpcyBub3QgTm9uZSBlbHNlIE5vbmUKKy0gKiAgICAgICAgIGNkZWYgY2hhciogZXh0 c2MgPSBOVUxMCistICogICAgICAgICBpZiBleHRzIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZXh0c2MgPSBleHRzCistICogICAgICAg ICB3aXRoIG5vZ2lsOgorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6NgorKyAqICAgICBjZGVmIGJp bnQgdXNlX3NldHN0YXRlCisrICogICAgIHN0YXRlID0gKCkKKysgKiAgICAgX2RpY3QgPSBnZXRh dHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgaWYgX2RpY3QgaXMgbm90IE5vbmU6CisrICogICAgICAgICBzdGF0ZSArPSAoX2Rp Y3QsKQorICAqLworLSAgX19weXhfdF8yID0gKF9fcHl4X3ZfZXh0cyAhPSBQeV9Ob25lKTsKKy0g IF9fcHl4X3RfNiA9IChfX3B5eF90XzIgIT0gMCk7CistICBpZiAoX19weXhfdF82KSB7CisrICBf X3B5eF90XzEgPSBfX1B5eF9HZXRBdHRyMygoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19w eXhfbl9zX2RpY3QsIFB5X05vbmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigxLCA2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAg X19weXhfdl9fZGljdCA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7CisgCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MzYKKy0gKiAgICAgICAgIGNkZWYgY2hh ciogZXh0c2MgPSBOVUxMCistICogICAgICAgICBpZiBleHRzIGlzIG5vdCBOb25lOgorLSAqICAg ICAgICAgICAgIGV4dHNjID0gZXh0cyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVuZ2xfY2Jf aW5pdF9nbChzZWxmLl9jdHgsIGV4dHNjLCAmX2NfZ2V0cHJvY2FkZHJlc3MsCisrICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjo3CisrICogICAgIHN0YXRlID0gKCkKKysgKiAgICAgX2RpY3QgPSBnZXRh dHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCisrICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25l OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzdGF0ZSArPSAoX2Rp Y3QsKQorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorICAqLworLSAgICBfX3B5eF90 XzcgPSBfX1B5eF9QeU9iamVjdF9Bc1dyaXRhYmxlU3RyaW5nKF9fcHl4X3ZfZXh0cyk7IGlmICh1 bmxpa2VseSgoIV9fcHl4X3RfNykgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4 MzYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX3B5eF92X2V4dHNjID0gX19weXhfdF83OworKyAg X19weXhfdF8yID0gKF9fcHl4X3ZfX2RpY3QgIT0gUHlfTm9uZSk7CisrICBfX3B5eF90XzMgPSAo X19weXhfdF8yICE9IDApOworKyAgaWYgKF9fcHl4X3RfMykgeworIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODM1CistICogICAgICAgICBleHRzID0gX3N0cmVuYyhl eHRzKSBpZiBleHRzIGlzIG5vdCBOb25lIGVsc2UgTm9uZQorLSAqICAgICAgICAgY2RlZiBjaGFy KiBleHRzYyA9IE5VTEwKKy0gKiAgICAgICAgIGlmIGV4dHMgaXMgbm90IE5vbmU6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBleHRzYyA9IGV4dHMKKy0gKiAg ICAgICAgIHdpdGggbm9naWw6CisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKysgKiAgICAg X2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCisrICogICAgIGlmIF9kaWN0 IGlzIG5vdCBOb25lOgorKyAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorKyAqICAg ICBlbHNlOgorICAqLworLSAgfQorKyAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygxKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgOCwgX19weXhfTDFfZXJyb3IpCisr ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9f ZGljdCk7CisrICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9fZGljdCk7CisrICAgIFB5VHVwbGVf U0VUX0lURU0oX19weXhfdF8xLCAwLCBfX3B5eF92X19kaWN0KTsKKysgICAgX19weXhfdF80ID0g UHlOdW1iZXJfSW5QbGFjZUFkZChfX3B5eF92X3N0YXRlLCBfX3B5eF90XzEpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCA4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworKyAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Zfc3RhdGUsICgoUHlPYmpl Y3QqKV9fcHl4X3RfNCkpOworKyAgICBfX3B5eF90XzQgPSAwOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjgzNworLSAqICAgICAgICAgaWYgZXh0cyBpcyBub3QgTm9u ZToKKy0gKiAgICAgICAgICAgICBleHRzYyA9IGV4dHMKKy0gKiAgICAgICAgIHdpdGggbm9naWw6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZf b3BlbmdsX2NiX2luaXRfZ2woc2VsZi5fY3R4LCBleHRzYywgJl9jX2dldHByb2NhZGRyZXNzLAor LSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dm9pZCAqPmdldF9w cm9jX2FkZHJlc3MpCisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjkKKysgKiAgICAgaWYgX2Rp Y3QgaXMgbm90IE5vbmU6CisrICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQorKyAqICAgICAg ICAgdXNlX3NldHN0YXRlID0gVHJ1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgIGVsc2U6CisrICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBGYWxzZQorICAqLworLSAgewor LSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOwor LSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgIF9fUHl4X0Zhc3RHSUxfUmVtZW1iZXIo KTsKKy0gICAgICAjZW5kaWYKKy0gICAgICAvKnRyeToqLyB7CisrICAgIF9fcHl4X3ZfdXNlX3Nl dHN0YXRlID0gMTsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo4MzgKKy0gKiAgICAgICAgICAgICBleHRzYyA9IGV4dHMKKy0gKiAgICAgICAgIHdpdGggbm9n aWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9pbml0X2dsKHNlbGYuX2N0 eCwgZXh0c2MsICZfY19nZXRwcm9jYWRkcmVzcywgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dm9pZCAqPmdl dF9wcm9jX2FkZHJlc3MpCistICogICAgICAgICBpZiBlcnIgPCAwOgorKyAgICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjo3CisrICogICAgIHN0YXRlID0gKCkKKysgKiAgICAgX2RpY3QgPSBnZXRhdHRy KHNlbGYsICdfX2RpY3RfXycsIE5vbmUpCisrICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzdGF0ZSArPSAoX2RpY3Qs KQorKyAqICAgICAgICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorICAqLworLSAgICAgICAgX19weXhf dl9lcnIgPSBtcHZfb3BlbmdsX2NiX2luaXRfZ2woX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92 X2V4dHNjLCAoJl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2dldHByb2NhZGRyZXNz KSwgKCh2b2lkICopX19weXhfdl9nZXRfcHJvY19hZGRyZXNzKSk7CistICAgICAgfQorKyAgICBn b3RvIF9fcHl4X0wzOworKyAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4MzcKKy0gKiAgICAgICAgIGlmIGV4dHMgaXMgbm90IE5vbmU6CistICogICAgICAg ICAgICAgZXh0c2MgPSBleHRzCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9pbml0 X2dsKHNlbGYuX2N0eCwgZXh0c2MsICZfY19nZXRwcm9jYWRkcmVzcywKKy0gKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZvaWQgKj5nZXRfcHJvY19hZGRyZXNzKQor KyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKKysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRy dWUKKysgKiAgICAgZWxzZToKKysgKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IEZhbHNlICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgaWYgdXNlX3NldHN0YXRlOgorKyAqICAg ICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiks IDB4ZDQxZDhjZCwgTm9uZSksIHN0YXRlCisgICovCistICAgICAgLypmaW5hbGx5OiovIHsKKy0g ICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAor LSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAgICAgICAgICBQeV9CTE9DS19U SFJFQURTCistICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICBnb3RvIF9fcHl4X0w2OworLSAg ICAgICAgfQorLSAgICAgICAgX19weXhfTDY6OworLSAgICAgIH0KKysgIC8qZWxzZSovIHsKKysg ICAgX19weXhfdl91c2Vfc2V0c3RhdGUgPSAwOworICAgfQorKyAgX19weXhfTDM6OworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg0MAorLSAqICAgICAgICAgICAgIGVy ciA9IG1wdl9vcGVuZ2xfY2JfaW5pdF9nbChzZWxmLl9jdHgsIGV4dHNjLCAmX2NfZ2V0cHJvY2Fk ZHJlc3MsCistICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2b2lk ICo+Z2V0X3Byb2NfYWRkcmVzcykKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCist ICogCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgorKyAqICAgICBlbHNlOgorKyAqICAgICAg ICAgdXNlX3NldHN0YXRlID0gRmFsc2UKKysgKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVf UmVuZGVyRnJhbWVJbmZvLCAodHlwZShzZWxmKSwgMHhkNDFkOGNkLCBOb25lKSwgc3RhdGUKKysg KiAgICAgZWxzZToKKyAgKi8KKy0gIF9fcHl4X3RfNiA9ICgoX19weXhfdl9lcnIgPCAwKSAhPSAw KTsKKy0gIGlmICh1bmxpa2VseShfX3B5eF90XzYpKSB7CisrICBfX3B5eF90XzMgPSAoX19weXhf dl91c2Vfc2V0c3RhdGUgIT0gMCk7CisrICBpZiAoX19weXhfdF8zKSB7CisgCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NDEKKy0gKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPHZvaWQgKj5nZXRfcHJvY19hZGRyZXNzKQorLSAqICAgICAg ICAgaWYgZXJyIDwgMDoKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0g VHJ1ZQorKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMworKyAqICAgICAgICAgdXNlX3NldHN0 YXRlID0gRmFsc2UKKysgKiAgICAgaWYgdXNlX3NldHN0YXRlOgorKyAqICAgICAgICAgcmV0dXJu IF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwg Tm9uZSksIHN0YXRlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZWxzZToK KysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8sICh0eXBl KHNlbGYpLCAweGQ0MWQ4Y2QsIHN0YXRlKQorICAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9i YWxOYW1lKF9fcHl4X3RfMywgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzMpKSBfX1BZWF9FUlIoMCwgODQxLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7CistICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9f cHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgODQxLCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19weXhfdW5waWNrbGVfUmVu ZGVyRnJhbWVJbmZvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMSwgMTMs IF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgX19w eXhfdF81ID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2Vs eShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzMpKSkgeworLSAgICAgIF9fcHl4X3RfNSA9IFB5TWV0 aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7 CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19w eXhfdF8zKTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworLSAgICAgICAgX19Q eXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8z LCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4X3RfMSA9IChfX3B5eF90 XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF81LCBfX3B5 eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4X3RfNCk7 CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAgIGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDg0MSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4 X3RfMSA9IFB5VHVwbGVfTmV3KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigxLCAxMywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gICAgX19QeXhf UmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistICAgIF9fUFlYX0VSUigwLCA4NDEsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZikpKSk7CisrICAgIF9fUHl4X0dJVkVSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQ eU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF8xLCAwLCAoKFB5T2JqZWN0ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkp KTsKKysgICAgX19QeXhfSU5DUkVGKF9fcHl4X2ludF8yMjI0MTkxNDkpOworKyAgICBfX1B5eF9H SVZFUkVGKF9fcHl4X2ludF8yMjI0MTkxNDkpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfMSwgMSwgX19weXhfaW50XzIyMjQxOTE0OSk7CisrICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKKysgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShf X3B5eF90XzEsIDIsIFB5X05vbmUpOworKyAgICBfX3B5eF90XzUgPSBQeVR1cGxlX05ldygzKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9y KQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKysgICAgX19QeXhfR0lWRVJFRihfX3B5 eF90XzQpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNSwgMCwgX19weXhfdF80KTsK KysgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfNSwgMSwgX19weXhfdF8xKTsKKysgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfc3RhdGUp OworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Zfc3RhdGUpOworKyAgICBQeVR1cGxlX1NFVF9J VEVNKF9fcHl4X3RfNSwgMiwgX19weXhfdl9zdGF0ZSk7CisrICAgIF9fcHl4X3RfNCA9IDA7Cisr ICAgIF9fcHl4X3RfMSA9IDA7CisrICAgIF9fcHl4X3IgPSBfX3B5eF90XzU7CisrICAgIF9fcHl4 X3RfNSA9IDA7CisrICAgIGdvdG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo4NDAKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2Ni X2luaXRfZ2woc2VsZi5fY3R4LCBleHRzYywgJl9jX2dldHByb2NhZGRyZXNzLAorLSAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dm9pZCAqPmdldF9wcm9jX2FkZHJl c3MpCistICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorLSAqIAorKyAgICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxMgorKyAqICAgICBlbHNlOgorKyAqICAgICAgICAgdXNlX3NldHN0YXRl ID0gRmFsc2UKKysgKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZv LCAodHlwZShzZWxmKSwgMHhkNDFkOGNkLCBOb25lKSwgc3RhdGUKKysgKiAgICAgZWxzZToKKyAg Ki8KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NDMKKy0g KiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCistICogCistICogICAgICAgICBzZWxm LmluaXRlZCA9IFRydWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAg ICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6CisrICAvKiAiKHRyZWUgZnJhZ21l bnQpIjoxNQorKyAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5m bywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwgTm9uZSksIHN0YXRlCisrICogICAgIGVsc2U6Cisr ICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCAodHlwZShz ZWxmKSwgMHhkNDFkOGNkLCBzdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq IGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgX19w eXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUp CisgICovCistICBfX3B5eF92X3NlbGYtPmluaXRlZCA9IDE7CisrICAvKmVsc2UqLyB7CisrICAg IF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF81LCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyk7IGlmICh1 bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDEsIDE1LCBfX3B5eF9MMV9lcnJvcikKKysg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CisrICAgIF9fcHl4X3RfMSA9IFB5VHVwbGVfTmV3 KDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNSwgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9JTkNSRUYo KChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7CisrICAg IF9fUHl4X0dJVkVSRUYoKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zf c2VsZikpKSk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCAoKFB5T2JqZWN0 ICopUHlfVFlQRSgoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSkpKTsKKysgICAgX19QeXhfSU5D UkVGKF9fcHl4X2ludF8yMjI0MTkxNDkpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X2ludF8y MjI0MTkxNDkpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMSwgX19weXhfaW50 XzIyMjQxOTE0OSk7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3N0YXRlKTsKKysgICAgX19Q eXhfR0lWRVJFRihfX3B5eF92X3N0YXRlKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzEsIDIsIF9fcHl4X3Zfc3RhdGUpOworKyAgICBfX3B5eF90XzQgPSBQeVR1cGxlX05ldygyKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9y KQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgICAgX19QeXhfR0lWRVJFRihfX3B5 eF90XzUpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNCwgMCwgX19weXhfdF81KTsK KysgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKF9f cHl4X3RfNCwgMSwgX19weXhfdF8xKTsKKysgICAgX19weXhfdF81ID0gMDsKKysgICAgX19weXhf dF8xID0gMDsKKysgICAgX19weXhfciA9IF9fcHl4X3RfNDsKKysgICAgX19weXhfdF80ID0gMDsK KysgICAgZ290byBfX3B5eF9MMDsKKysgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo4MzIKKy0gKiAgICAgICAgIHdhcm5pbmdzLndhcm4oIk9wZW5HTENvbnRleHQg aXMgZGVwcmVjYXRlZCwgcGxlYXNlIHN3aXRjaCB0byBSZW5kZXJDb250ZXh0IiwgRGVwcmVjYXRp b25XYXJuaW5nKQorLSAqIAorLSAqICAgICBkZWYgaW5pdF9nbChzZWxmLCBleHRzLCBnZXRfcHJv Y19hZGRyZXNzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZXh0 cyA9IF9zdHJlbmMoZXh0cykgaWYgZXh0cyBpcyBub3QgTm9uZSBlbHNlIE5vbmUKKy0gKiAgICAg ICAgIGNkZWYgY2hhciogZXh0c2MgPSBOVUxMCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisr ICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgIGNkZWYgdHVwbGUgc3RhdGUKKysgKiAgICAgY2RlZiBvYmplY3QgX2RpY3QK KyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IFB5X05v bmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gIGdvdG8gX19weXhfTDA7CisgICBfX3B5eF9M MV9lcnJvcjo7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMyk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CisgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5PcGVuR0xDb250ZXh0LmluaXRfZ2wiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2 LlJlbmRlckZyYW1lSW5mby5fX3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9M MDo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfZXh0cyk7CisrICBfX1B5eF9YREVDUkVGKF9f cHl4X3Zfc3RhdGUpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X19kaWN0KTsKKyAgIF9fUHl4 X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Cisg ICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjg0NQorLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCistICogCistICogICAgIGRl ZiBzZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgc2VsZi51cGRhdGVfY2IgPSBjYgorLSAqICAgICAgICAgd2l0aCBu b2dpbDoKKysvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNgorKyAqICAgICBlbHNlOgorKyAqICAgICAg ICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4 ZDQxZDhjZCwgc3RhdGUpCisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhf c3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIF9fcHl4X3VucGlj a2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQorICAqLwor IAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzVzZXRfdXBkYXRlX2NhbGxiYWNrKFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2NiKTsgLypwcm90byovCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xD b250ZXh0XzVzZXRfdXBkYXRlX2NhbGxiYWNrKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X2NiKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fM19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpOyAvKnByb3Rv Ki8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNVJl bmRlckZyYW1lSW5mb18zX19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworICAgUHlPYmplY3QgKl9fcHl4X3Ig PSAwOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJzZXRfdXBkYXRlX2NhbGxiYWNrICh3cmFwcGVyKSIsIDApOworLSAgX19weXhf ciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfNHNldF91 cGRhdGVfY2FsbGJhY2soKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9P cGVuR0xDb250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfY2IpKTsK KysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fICh3cmFw cGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NVJlbmRlckZyYW1lSW5mb18yX19zZXRzdGF0ZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKV9fcHl4X3Zfc2VsZiksICgo UHlPYmplY3QgKilfX3B5eF92X19fcHl4X3N0YXRlKSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0 IGNvZGUgKi8KKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9f cHl4X3I7CisgfQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzT3BlbkdMQ29udGV4dF80c2V0X3VwZGF0ZV9jYWxsYmFjayhzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5eF92X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF92X2NiKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fMl9fc2V0c3RhdGVfY3l0aG9uX18oc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICpfX3B5 eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CisgICBQeU9iamVjdCAq X19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoInNldF91cGRhdGVfY2FsbGJhY2siLCAwKTsKKy0KKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NDYKKy0gKiAKKy0gKiAgICAgZGVmIHNl dF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOgorLSAqICAgICAgICAgc2VsZi51cGRhdGVfY2Ig PSBjYiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB3aXRoIG5vZ2ls OgorLSAqICAgICAgICAgICAgIG1wdl9vcGVuZ2xfY2Jfc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxm Ll9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQgKj5jYikKKy0gKi8KKy0gIF9fUHl4X0lOQ1JFRihf X3B5eF92X2NiKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdl9jYik7CistICBfX1B5eF9HT1RS RUYoX19weXhfdl9zZWxmLT51cGRhdGVfY2IpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2Vs Zi0+dXBkYXRlX2NiKTsKKy0gIF9fcHl4X3Zfc2VsZi0+dXBkYXRlX2NiID0gX19weXhfdl9jYjsK Ky0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NDcKKy0gKiAgICAgZGVm IHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOgorLSAqICAgICAgICAgc2VsZi51cGRhdGVf Y2IgPSBjYgorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgICAgIG1wdl9vcGVuZ2xfY2Jfc2V0X3VwZGF0ZV9jYWxsYmFjayhz ZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQgKj5jYikKKy0gKiAKKy0gKi8KKy0gIHsKKy0g ICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKy0g ICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7 CistICAgICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8geworLQorLSAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg0OAorLSAqICAgICAgICAgc2VsZi51cGRhdGVfY2Ig PSBjYgorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfb3Blbmds X2NiX3NldF91cGRhdGVfY2FsbGJhY2soc2VsZi5fY3R4LCAmX2NfdXBkYXRlY2IsIDx2b2lkICo+ Y2IpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgZGVmIGRyYXco c2VsZiwgZmJvLCB3LCBoKToKKy0gKi8KKy0gICAgICAgIG1wdl9vcGVuZ2xfY2Jfc2V0X3VwZGF0 ZV9jYWxsYmFjayhfX3B5eF92X3NlbGYtPl9jdHgsICgmX19weXhfZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX2NfdXBkYXRlY2IpLCAoKHZvaWQgKilfX3B5eF92X2NiKSk7CistICAgICAgfQorKyAg UHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisrICBpbnQgX19weXhfbGluZW5vID0gMDsKKysg IGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5v ID0gMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9f IiwgMCk7CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg0Nwor LSAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6CistICogICAgICAgICBz ZWxmLnVwZGF0ZV9jYiA9IGNiCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgbXB2X29wZW5nbF9jYl9zZXRfdXBkYXRl X2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKQorLSAqIAorKyAg LyogIih0cmVlIGZyYWdtZW50KSI6MTcKKysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2ts ZV9SZW5kZXJGcmFtZUluZm8sICh0eXBlKHNlbGYpLCAweGQ0MWQ4Y2QsIHN0YXRlKQorKyAqIGRl ZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgX19weXhf dW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKi8KKy0gICAgICAvKmZpbmFsbHk6Ki8gewor LSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFE CistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CistICAgICAgICAgIFB5X0JMT0NL X1RIUkVBRFMKKy0gICAgICAgICAgI2VuZGlmCistICAgICAgICAgIGdvdG8gX19weXhfTDU7Cist ICAgICAgICB9CistICAgICAgICBfX3B5eF9MNTo7CistICAgICAgfQorLSAgfQorKyAgaWYgKCEo bGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X19fcHl4X3N0YXRlKSl8fCgoX19weXhf dl9fX3B5eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9y LCAiRXhwZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMiLCAidHVwbGUiLCBQeV9UWVBFKF9fcHl4X3Zf X19weXhfc3RhdGUpLT50cF9uYW1lKSwgMCkpKSBfX1BZWF9FUlIoMSwgMTcsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf dW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoX19weXhfdl9zZWxmLCAoKFB5T2Jq ZWN0KilfX3B5eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDEsIDE3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODQ1CistICogICAgICAgICBzZWxmLmluaXRl ZCA9IFRydWUKKy0gKiAKKy0gKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2Ip OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLnVwZGF0ZV9j YiA9IGNiCistICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6 MTYKKysgKiAgICAgZWxzZToKKysgKiAgICAgICAgIHJldHVybiBfX3B5eF91bnBpY2tsZV9SZW5k ZXJGcmFtZUluZm8sICh0eXBlKHNlbGYpLCAweGQ0MWQ4Y2QsIHN0YXRlKQorKyAqIGRlZiBfX3Nl dHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0 ZShzZWxmLCBfX3B5eF9zdGF0ZSkKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LworICAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgIGdvdG8g X19weXhfTDA7CisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJGcmFt ZUluZm8uX19zZXRzdGF0ZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOworKyAgX19weXhfciA9IE5VTEw7CisrICBfX3B5eF9MMDo7CisgICBf X1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4NTAKKy0gKiAgICAgICAgICAgICBtcHZfb3BlbmdsX2NiX3NldF91cGRhdGVfY2Fs bGJhY2soc2VsZi5fY3R4LCAmX2NfdXBkYXRlY2IsIDx2b2lkICo+Y2IpCisrLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk1MAorKyAqICAgICAgICAgYmludCBpbml0ZWQKKyAgKiAK Ky0gKiAgICAgZGVmIGRyYXcoc2VsZiwgZmJvLCB3LCBoKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgY2RlZjoKKy0gKiAgICAgICAgICAgICBpbnQgZmJvYyA9IGZi bworKyAqICAgICBkZWYgX19pbml0X18oc2VsZiwgbXB2LCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICAgICAgICAgICBhcGlfdHlwZSwKKysgKiAgICAgICAgICAgICAg ICAgIG9wZW5nbF9pbml0X3BhcmFtcz1Ob25lLAorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVy ICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNP cGVuR0xDb250ZXh0XzdkcmF3KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF83ZHJhdyhQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9f cHl4X2t3ZHMpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2ZibyA9IDA7CistICBQeU9iamVjdCAq X19weXhfdl93ID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2ggPSAwOworK3N0YXRpYyBpbnQg X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0X18o UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpf X3B5eF9rd2RzKTsgLypwcm90byovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxm LCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKysgIFB5T2Jq ZWN0ICpfX3B5eF92X21wdiA9IDA7CisrICBQeU9iamVjdCAqX19weXhfdl9hcGlfdHlwZSA9IDA7 CisrICBQeU9iamVjdCAqX19weXhfdl9vcGVuZ2xfaW5pdF9wYXJhbXMgPSAwOworKyAgUHlPYmpl Y3QgKl9fcHl4X3ZfYWR2YW5jZWRfY29udHJvbCA9IDA7CisrICBQeU9iamVjdCAqX19weXhfdl94 MTFfZGlzcGxheSA9IDA7CisrICBQeU9iamVjdCAqX19weXhfdl93bF9kaXNwbGF5ID0gMDsKKysg IFB5T2JqZWN0ICpfX3B5eF92X2RybV9kaXNwbGF5ID0gMDsKKysgIFB5T2JqZWN0ICpfX3B5eF92 X2RybV9vc2Rfc2l6ZSA9IDA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNo YXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0g IFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKysgIGludCBfX3B5eF9yOworICAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJkcmF3ICh3cmFw cGVyKSIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fICh3cmFw cGVyKSIsIDApOworICAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVz W10gPSB7Jl9fcHl4X25fc19mYm8sJl9fcHl4X25fc193LCZfX3B5eF9uX3NfaCwwfTsKKy0gICAg UHlPYmplY3QqIHZhbHVlc1szXSA9IHswLDAsMH07CistICAgIGlmICh1bmxpa2VseShfX3B5eF9r d2RzKSkgeworLSAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKy0gICAgICBjb25zdCBQeV9zc2l6 ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKy0gICAgICBzd2l0 Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dF VF9JVEVNKF9fcHl4X2FyZ3MsIDIpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAg ICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAx KTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVl c1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6 IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQorLSAgICAgIGt3X2FyZ3Mg PSBQeURpY3RfU2l6ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7Cist ICAgICAgICBjYXNlICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhf UHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2ZibykpICE9IDApKSBrd19h cmdzLS07CistICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAxOgorLSAgICAgICAgaWYg KGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywg X19weXhfbl9zX3cpKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSB7CistICAgICAg ICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJkcmF3IiwgMSwgMywgMywgMSk7IF9fUFlY X0VSUigwLCA4NTAsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAgICAgfQorLSAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMjoKKy0gICAgICAgIGlmIChsaWtlbHkoKHZh bHVlc1syXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19o KSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVsc2UgeworLSAgICAgICAgICBfX1B5eF9S YWlzZUFyZ3R1cGxlSW52YWxpZCgiZHJhdyIsIDEsIDMsIDMsIDIpOyBfX1BZWF9FUlIoMCwgODUw LCBfX3B5eF9MM19lcnJvcikKKy0gICAgICAgIH0KKy0gICAgICB9CistICAgICAgaWYgKHVubGlr ZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0 aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBv c19hcmdzLCAiZHJhdyIpIDwgMCkpIF9fUFlYX0VSUigwLCA4NTAsIF9fcHl4X0wzX2Vycm9yKQor LSAgICAgIH0KKy0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9 IDMpIHsKKy0gICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICB9IGVsc2Ug eworLSAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Cist ICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAg ICB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOworLSAgICB9Cist ICAgIF9fcHl4X3ZfZmJvID0gdmFsdWVzWzBdOworLSAgICBfX3B5eF92X3cgPSB2YWx1ZXNbMV07 CistICAgIF9fcHl4X3ZfaCA9IHZhbHVlc1syXTsKKy0gIH0KKy0gIGdvdG8gX19weXhfTDRfYXJn dW1lbnRfdW5wYWNraW5nX2RvbmU7CistICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBf X1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiZHJhdyIsIDEsIDMsIDMsIFB5VHVwbGVfR0VUX1NJ WkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgODUwLCBfX3B5eF9MM19lcnJvcikKKy0gIF9f cHl4X0wzX2Vycm9yOjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2 Lk9wZW5HTENvbnRleHQuZHJhdyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhf ZmlsZW5hbWUpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4g TlVMTDsKKy0gIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzZkcmF3KCgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqKV9f cHl4X3Zfc2VsZiksIF9fcHl4X3ZfZmJvLCBfX3B5eF92X3csIF9fcHl4X3ZfaCk7CisrICAgIHN0 YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX21wdiwmX19w eXhfbl9zX2FwaV90eXBlLCZfX3B5eF9uX3Nfb3BlbmdsX2luaXRfcGFyYW1zLCZfX3B5eF9uX3Nf YWR2YW5jZWRfY29udHJvbCwmX19weXhfbl9zX3gxMV9kaXNwbGF5LCZfX3B5eF9uX3Nfd2xfZGlz cGxheSwmX19weXhfbl9zX2RybV9kaXNwbGF5LCZfX3B5eF9uX3NfZHJtX29zZF9zaXplLDB9Owor KyAgICBQeU9iamVjdCogdmFsdWVzWzhdID0gezAsMCwwLDAsMCwwLDAsMH07CisgCistICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwor LSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF82ZHJhdyhzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X2ZibywgUHlPYmplY3QgKl9fcHl4X3ZfdywgUHlPYmplY3QgKl9fcHl4X3Zf aCkgeworLSAgaW50IF9fcHl4X3ZfZmJvYzsKKy0gIGludCBfX3B5eF92X3djOworLSAgaW50IF9f cHl4X3ZfaGM7CistICBpbnQgX19weXhfdl9lcnI7CistICBQeU9iamVjdCAqX19weXhfciA9IE5V TEw7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgaW50IF9fcHl4X3RfMTsKKy0g IGludCBfX3B5eF90XzI7CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7Cist ICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOwor LSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImRyYXciLCAwKTsKKy0KKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NTIKKy0gKiAgICAgZGVmIGRyYXco c2VsZiwgZmJvLCB3LCBoKToKKy0gKiAgICAgICAgIGNkZWY6CistICogICAgICAgICAgICAgaW50 IGZib2MgPSBmYm8gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg IGludCB3YyA9IHcKKy0gKiAgICAgICAgICAgICBpbnQgaGMgPSBoCisrICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTIKKysgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1w diwKKysgKiAgICAgICAgICAgICAgICAgIGFwaV90eXBlLAorKyAqICAgICAgICAgICAgICAgICAg b3BlbmdsX2luaXRfcGFyYW1zPU5vbmUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgICAgICAgICAgIGFkdmFuY2VkX2NvbnRyb2w9RmFsc2UsCisrICogICAgICAgICAg ICAgICAgICB4MTFfZGlzcGxheT1Ob25lLAorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlJ bnRfQXNfaW50KF9fcHl4X3ZfZmJvKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzEgPT0gKGludCkt MSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4NTIsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19weXhfdl9mYm9jID0gX19weXhfdF8xOworKyAgICB2YWx1ZXNbMl0gPSAoKFB5T2Jq ZWN0ICopUHlfTm9uZSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 ODUzCistICogICAgICAgICBjZGVmOgorLSAqICAgICAgICAgICAgIGludCBmYm9jID0gZmJvCist ICogICAgICAgICAgICAgaW50IHdjID0gdyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgICAgICAgICAgaW50IGhjID0gaAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKysgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk1MworKyAqICAgICAgICAgICAgICAg ICAgYXBpX3R5cGUsCisrICogICAgICAgICAgICAgICAgICBvcGVuZ2xfaW5pdF9wYXJhbXM9Tm9u ZSwKKysgKiAgICAgICAgICAgICAgICAgIGFkdmFuY2VkX2NvbnRyb2w9RmFsc2UsICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgIHgxMV9kaXNwbGF5PU5v bmUsCisrICogICAgICAgICAgICAgICAgICB3bF9kaXNwbGF5PU5vbmUsCisgICovCistICBfX3B5 eF90XzEgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl93KTsgaWYgKHVubGlrZWx5KChfX3B5 eF90XzEgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4NTMs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdl93YyA9IF9fcHl4X3RfMTsKKysgICAgdmFsdWVz WzNdID0gKChQeU9iamVjdCAqKVB5X0ZhbHNlKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4NTQKKy0gKiAgICAgICAgICAgICBpbnQgZmJvYyA9IGZibworLSAqICAg ICAgICAgICAgIGludCB3YyA9IHcKKy0gKiAgICAgICAgICAgICBpbnQgaGMgPSBoICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAg ICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9kcmF3KHNlbGYuX2N0eCwgZmJvYywgd2MsIGhjKQor KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTU0CisrICogICAgICAgICAg ICAgICAgICBvcGVuZ2xfaW5pdF9wYXJhbXM9Tm9uZSwKKysgKiAgICAgICAgICAgICAgICAgIGFk dmFuY2VkX2NvbnRyb2w9RmFsc2UsCisrICogICAgICAgICAgICAgICAgICB4MTFfZGlzcGxheT1O b25lLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgICB3 bF9kaXNwbGF5PU5vbmUsCisrICogICAgICAgICAgICAgICAgICBkcm1fZGlzcGxheT1Ob25lLAor ICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3ZfaCk7IGlmICh1 bmxpa2VseSgoX19weXhfdF8xID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZ WF9FUlIoMCwgODU0LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3ZfaGMgPSBfX3B5eF90XzE7 CisrICAgIHZhbHVlc1s0XSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NTUKKy0gKiAgICAgICAgICAgICBpbnQgd2MgPSB3 CistICogICAgICAgICAgICAgaW50IGhjID0gaAorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVu Z2xfY2JfZHJhdyhzZWxmLl9jdHgsIGZib2MsIHdjLCBoYykKKy0gKiAgICAgICAgIGlmIGVyciA8 IDA6CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTUKKysgKiAgICAg ICAgICAgICAgICAgIGFkdmFuY2VkX2NvbnRyb2w9RmFsc2UsCisrICogICAgICAgICAgICAgICAg ICB4MTFfZGlzcGxheT1Ob25lLAorKyAqICAgICAgICAgICAgICAgICAgd2xfZGlzcGxheT1Ob25l LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgICBkcm1f ZGlzcGxheT1Ob25lLAorKyAqICAgICAgICAgICAgICAgICAgZHJtX29zZF9zaXplPU5vbmUKKyAg Ki8KKy0gIHsKKy0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRl ICpfc2F2ZTsKKy0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lM X1JlbWVtYmVyKCk7CistICAgICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8geworKyAgICB2YWx1 ZXNbNV0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7CisgCistICAgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6ODU2CistICogICAgICAgICAgICAgaW50IGhjID0gaAorLSAq ICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2Ni X2RyYXcoc2VsZi5fY3R4LCBmYm9jLCB3YywgaGMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJy b3IoZXJyKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTU2CisrICog ICAgICAgICAgICAgICAgICB4MTFfZGlzcGxheT1Ob25lLAorKyAqICAgICAgICAgICAgICAgICAg d2xfZGlzcGxheT1Ob25lLAorKyAqICAgICAgICAgICAgICAgICAgZHJtX2Rpc3BsYXk9Tm9uZSwg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICAgZHJtX29z ZF9zaXplPU5vbmUKKysgKiAgICAgICAgICAgICAgICAgICk6CisgICovCistICAgICAgICBfX3B5 eF92X2VyciA9IG1wdl9vcGVuZ2xfY2JfZHJhdyhfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3Zf ZmJvYywgX19weXhfdl93YywgX19weXhfdl9oYyk7CistICAgICAgfQorKyAgICB2YWx1ZXNbNl0g PSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjg1NQorLSAqICAgICAgICAgICAgIGludCB3YyA9IHcKKy0gKiAgICAgICAg ICAgICBpbnQgaGMgPSBoCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9kcmF3KHNl bGYuX2N0eCwgZmJvYywgd2MsIGhjKQorLSAqICAgICAgICAgaWYgZXJyIDwgMDoKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk1NworKyAqICAgICAgICAgICAgICAgICAg d2xfZGlzcGxheT1Ob25lLAorKyAqICAgICAgICAgICAgICAgICAgZHJtX2Rpc3BsYXk9Tm9uZSwK KysgKiAgICAgICAgICAgICAgICAgIGRybV9vc2Rfc2l6ZT1Ob25lICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgICk6CisrICogCisgICovCistICAgICAg LypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICNp ZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAg ICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICBn b3RvIF9fcHl4X0w1OworKyAgICB2YWx1ZXNbN10gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7Cisr ICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworKyAgICAgIFB5X3NzaXplX3Qga3dfYXJn czsKKysgICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShf X3B5eF9hcmdzKTsKKysgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CisrICAgICAgICBjYXNlICA4 OiB2YWx1ZXNbN10gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDcpOworKyAgICAgICAg Q1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgNzogdmFsdWVzWzZdID0gUHlUdXBs ZV9HRVRfSVRFTShfX3B5eF9hcmdzLCA2KTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsK KysgICAgICAgIGNhc2UgIDY6IHZhbHVlc1s1XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJn cywgNSk7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICA1OiB2 YWx1ZXNbNF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDQpOworKyAgICAgICAgQ1lU SE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgNDogdmFsdWVzWzNdID0gUHlUdXBsZV9H RVRfSVRFTShfX3B5eF9hcmdzLCAzKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysg ICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywg Mik7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAyOiB2YWx1 ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRf SVRFTShfX3B5eF9hcmdzLCAwKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAg ICAgIGNhc2UgIDA6IGJyZWFrOworKyAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0 dXBsZV9lcnJvcjsKKysgICAgICB9CisrICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4 X2t3ZHMpOworKyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDA6Cisr ICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihf X3B5eF9rd2RzLCBfX3B5eF9uX3NfbXB2KSkgIT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAgIGVs c2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKKysgICAgICAgIGNhc2UgIDE6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0g PSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfYXBpX3R5cGUp KSAhPSAwKSkga3dfYXJncy0tOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgIF9fUHl4X1Jh aXNlQXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDAsIDIsIDgsIDEpOyBfX1BZWF9FUlIoMCwg OTUwLCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgIH0KKysgICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKKysgICAgICAgIGNhc2UgIDI6CisrICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKysg ICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhf a3dkcywgX19weXhfbl9zX29wZW5nbF9pbml0X3BhcmFtcyk7CisrICAgICAgICAgIGlmICh2YWx1 ZSkgeyB2YWx1ZXNbMl0gPSB2YWx1ZTsga3dfYXJncy0tOyB9CisrICAgICAgICB9CisrICAgICAg ICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAzOgorKyAgICAgICAgaWYgKGt3 X2FyZ3MgPiAwKSB7CisrICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9H ZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19hZHZhbmNlZF9jb250cm9sKTsKKysgICAg ICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1szXSA9IHZhbHVlOyBrd19hcmdzLS07IH0KKysgICAg ICAgIH0KKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDQ6Cisr ICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKysgICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0g X19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3gxMV9kaXNwbGF5 KTsKKysgICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1s0XSA9IHZhbHVlOyBrd19hcmdzLS07 IH0KKysgICAgICAgIH0KKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNh c2UgIDU6CisrICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKysgICAgICAgICAgUHlPYmplY3Qq IHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3ds X2Rpc3BsYXkpOworKyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzVdID0gdmFsdWU7IGt3 X2FyZ3MtLTsgfQorKyAgICAgICAgfQorKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAg ICAgICAgY2FzZSAgNjoKKysgICAgICAgIGlmIChrd19hcmdzID4gMCkgeworKyAgICAgICAgICBQ eU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5 eF9uX3NfZHJtX2Rpc3BsYXkpOworKyAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzZdID0g dmFsdWU7IGt3X2FyZ3MtLTsgfQorKyAgICAgICAgfQorKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOworKyAgICAgICAgY2FzZSAgNzoKKysgICAgICAgIGlmIChrd19hcmdzID4gMCkgeworKyAg ICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9r d2RzLCBfX3B5eF9uX3NfZHJtX29zZF9zaXplKTsKKysgICAgICAgICAgaWYgKHZhbHVlKSB7IHZh bHVlc1s3XSA9IHZhbHVlOyBrd19hcmdzLS07IH0KKyAgICAgICAgIH0KKy0gICAgICAgIF9fcHl4 X0w1OjsKKyAgICAgICB9CistICB9CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6ODU3CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVyciA9 IG1wdl9vcGVuZ2xfY2JfZHJhdyhzZWxmLl9jdHgsIGZib2MsIHdjLCBoYykKKy0gKiAgICAgICAg IGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAg ICByYWlzZSBNUFZFcnJvcihlcnIpCistICogCistICovCistICBfX3B5eF90XzIgPSAoKF9fcHl4 X3ZfZXJyIDwgMCkgIT0gMCk7CistICBpZiAodW5saWtlbHkoX19weXhfdF8yKSkgeworLQorLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODU4CistICogICAgICAgICAgICAg ZXJyID0gbXB2X29wZW5nbF9jYl9kcmF3KHNlbGYuX2N0eCwgZmJvYywgd2MsIGhjKQorLSAqICAg ICAgICAgaWYgZXJyIDwgMDoKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgZGVmIHJlcG9ydF9mbGlw KHNlbGYsIHRpbWUpOgorLSAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfNCwgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgODU4LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NCk7CistICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgODU4LCBfX3B5eF9MMV9lcnJv cikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CistICAgIF9fcHl4X3RfNiA9IE5VTEw7 CistICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF80KSkpIHsKKy0gICAgICBfX3B5eF90XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzQpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF82KSkgeworLSAgICAgICAgUHlP YmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNCk7CistICAg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF82KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVuY3Rpb24pOwor KyAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKysgICAgICAgIGlmICh1bmxpa2Vs eShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1l cywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9faW5pdF9fIikgPCAwKSkgX19QWVhfRVJSKDAsIDk1 MCwgX19weXhfTDNfZXJyb3IpCisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgIHN3aXRj aCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgeworKyAgICAgICAgY2FzZSAgODogdmFs dWVzWzddID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCA3KTsKKysgICAgICAgIENZVEhP Tl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDc6IHZhbHVlc1s2XSA9IFB5VHVwbGVfR0VU X0lURU0oX19weXhfYXJncywgNik7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAg ICAgICBjYXNlICA2OiB2YWx1ZXNbNV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDUp OworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgNTogdmFsdWVz WzRdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCA0KTsKKysgICAgICAgIENZVEhPTl9G QUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDQ6IHZhbHVlc1szXSA9IFB5VHVwbGVfR0VUX0lU RU0oX19weXhfYXJncywgMyk7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAg ICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOwor KyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFd ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKysgICAgICAgIHZhbHVlc1swXSA9 IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CisrICAgICAgICBicmVhazsKKysgICAg ICAgIGRlZmF1bHQ6IGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisgICAgICAgfQorICAg ICB9CistICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzYpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfNCwgX19weXhfdF82LCBfX3B5eF90XzUpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4 X3RfNSA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDg1 OCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBf X1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gICAgX19QeXhfUmFpc2Uo X19weXhfdF8zLCAwLCAwLCAwKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4 X3RfMyA9IDA7CistICAgIF9fUFlYX0VSUigwLCA4NTgsIF9fcHl4X0wxX2Vycm9yKQorLQorLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODU3CistICogICAgICAgICB3aXRo IG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVuZ2xfY2JfZHJhdyhzZWxmLl9j dHgsIGZib2MsIHdjLCBoYykKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCistICog CistICovCisrICAgIF9fcHl4X3ZfbXB2ID0gdmFsdWVzWzBdOworKyAgICBfX3B5eF92X2FwaV90 eXBlID0gdmFsdWVzWzFdOworKyAgICBfX3B5eF92X29wZW5nbF9pbml0X3BhcmFtcyA9IHZhbHVl c1syXTsKKysgICAgX19weXhfdl9hZHZhbmNlZF9jb250cm9sID0gdmFsdWVzWzNdOworKyAgICBf X3B5eF92X3gxMV9kaXNwbGF5ID0gdmFsdWVzWzRdOworKyAgICBfX3B5eF92X3dsX2Rpc3BsYXkg PSB2YWx1ZXNbNV07CisrICAgIF9fcHl4X3ZfZHJtX2Rpc3BsYXkgPSB2YWx1ZXNbNl07CisrICAg IF9fcHl4X3ZfZHJtX29zZF9zaXplID0gdmFsdWVzWzddOworICAgfQorLQorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg1MAorLSAqICAgICAgICAgICAgIG1wdl9vcGVuZ2xf Y2Jfc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQgKj5j YikKKy0gKiAKKy0gKiAgICAgZGVmIGRyYXcoc2VsZiwgZmJvLCB3LCBoKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZjoKKy0gKiAgICAgICAgICAgICBpbnQg ZmJvYyA9IGZibworLSAqLworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5 eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsK Ky0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKKy0g IF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0 dGVyLmxpYnMubXB2Lk9wZW5HTENvbnRleHQuZHJhdyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xp bmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7CistICBfX3B5eF9MMDo7 CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKysgIGdvdG8gX19weXhfTDRfYXJndW1lbnRf dW5wYWNraW5nX2RvbmU7CisrICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CisrICBfX1B5eF9S YWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAwLCAyLCA4LCBQeVR1cGxlX0dFVF9TSVpF KF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDk1MCwgX19weXhfTDNfZXJyb3IpCisrICBfX3B5 eF9MM19lcnJvcjo7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5S ZW5kZXJDb250ZXh0Ll9faW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5 eF9maWxlbmFtZSk7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVy biBfX3B5eF9yOworLX0KKysgIHJldHVybiAtMTsKKysgIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFj a2luZ19kb25lOjsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNSZW5kZXJDb250ZXh0X19faW5pdF9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfbXB2LCBfX3B5 eF92X2FwaV90eXBlLCBfX3B5eF92X29wZW5nbF9pbml0X3BhcmFtcywgX19weXhfdl9hZHZhbmNl ZF9jb250cm9sLCBfX3B5eF92X3gxMV9kaXNwbGF5LCBfX3B5eF92X3dsX2Rpc3BsYXksIF9fcHl4 X3ZfZHJtX2Rpc3BsYXksIF9fcHl4X3ZfZHJtX29zZF9zaXplKTsKKyAKKy0vKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6ODYwCistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3Io ZXJyKQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk1MAorKyAqICAgICAg ICAgYmludCBpbml0ZWQKKyAgKiAKKy0gKiAgICAgZGVmIHJlcG9ydF9mbGlwKHNlbGYsIHRpbWUp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmIGludDY0X3Qg Y3RpbWUgPSB0aW1lCistICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICBkZWYgX19pbml0 X18oc2VsZiwgbXB2LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAg ICAgICAgICBhcGlfdHlwZSwKKysgKiAgICAgICAgICAgICAgICAgIG9wZW5nbF9pbml0X3BhcmFt cz1Ob25lLAorICAqLworIAorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzlyZXBvcnRf ZmxpcChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl90aW1lKTsgLypw cm90byovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNPcGVuR0xDb250ZXh0XzlyZXBvcnRfZmxpcChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl90aW1lKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJl cG9ydF9mbGlwICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfOHJlcG9ydF9mbGlwKCgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqKV9fcHl4X3Zfc2VsZiks ICgoUHlPYmplY3QgKilfX3B5eF92X3RpbWUpKTsKKy0KKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhf cjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNPcGVuR0xDb250ZXh0XzhyZXBvcnRfZmxpcChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X3RpbWUpIHsKKy0gIGludDY0X3QgX19weXhfdl9jdGltZTsKKy0gIGludCBfX3B5eF92X2Vy cjsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKytzdGF0aWMgaW50IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBQ eU9iamVjdCAqX19weXhfdl9tcHYsIFB5T2JqZWN0ICpfX3B5eF92X2FwaV90eXBlLCBQeU9iamVj dCAqX19weXhfdl9vcGVuZ2xfaW5pdF9wYXJhbXMsIFB5T2JqZWN0ICpfX3B5eF92X2FkdmFuY2Vk X2NvbnRyb2wsIFB5T2JqZWN0ICpfX3B5eF92X3gxMV9kaXNwbGF5LCBQeU9iamVjdCAqX19weXhf dl93bF9kaXNwbGF5LCBQeU9iamVjdCAqX19weXhfdl9kcm1fZGlzcGxheSwgUHlPYmplY3QgKl9f cHl4X3ZfZHJtX29zZF9zaXplKSB7CisrICBzdHJ1Y3QgbXB2X29wZW5nbF9pbml0X3BhcmFtcyBf X3B5eF92X2dsX3BhcmFtczsKKysgIHN0cnVjdCBtcHZfb3BlbmdsX2RybV9wYXJhbXMgX19weXhf dl9kcm1fcGFyYW1zOworKyAgc3RydWN0IG1wdl9vcGVuZ2xfZHJtX29zZF9zaXplIF9fcHl4X3Zf X2RybV9vc2Rfc2l6ZTsKKysgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X19SZW5kZXJQYXJhbXMgKl9fcHl4X3ZfcGFyYW1zID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5 eF92X2FycCA9IE5VTEw7CisrICBpbnQgX19weXhfdl9lcnI7CisrICBpbnQgX19weXhfcjsKKyAg IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBpbnQ2NF90IF9fcHl4X3RfMTsKKy0gIGlu dCBfX3B5eF90XzI7CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzEgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBp bnQgX19weXhfdF8zOworICAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CisgICBQeU9iamVj dCAqX19weXhfdF81ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOworKyAg aW50IF9fcHl4X3RfNjsKKysgIGludCBfX3B5eF90Xzc7CisrICBjaGFyIGNvbnN0ICpfX3B5eF90 Xzg7CisrICBQeU9iamVjdCAqKCpfX3B5eF90XzkpKFB5T2JqZWN0ICopOworKyAgaW50IF9fcHl4 X3RfMTA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2Zp bGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJyZXBvcnRfZmxpcCIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9faW5pdF9fIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODYxCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTY1Cisr ICogICAgICAgICAgICAgbXB2X29wZW5nbF9kcm1fb3NkX3NpemUgX2RybV9vc2Rfc2l6ZQorICAq IAorLSAqICAgICBkZWYgcmVwb3J0X2ZsaXAoc2VsZiwgdGltZSk6CistICogICAgICAgICBjZGVm IGludDY0X3QgY3RpbWUgPSB0aW1lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9y ZXBvcnRfZmxpcChzZWxmLl9jdHgsIGN0aW1lKQorKyAqICAgICAgICAgc2VsZi5fbXB2ID0gbXB2 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgICAgIG1lbXNldCgm Z2xfcGFyYW1zLCAwLCBzaXplb2YoZ2xfcGFyYW1zKSkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9f UHl4X1B5SW50X0FzX2ludDY0X3QoX19weXhfdl90aW1lKTsgaWYgKHVubGlrZWx5KChfX3B5eF90 XzEgPT0gKChpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4 NjEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdl9jdGltZSA9IF9fcHl4X3RfMTsKKysgIGlm ICghKGxpa2VseSgoKF9fcHl4X3ZfbXB2KSA9PSBQeV9Ob25lKSB8fCBsaWtlbHkoX19QeXhfVHlw ZVRlc3QoX19weXhfdl9tcHYsIF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0KSkpKSkgX19QWVhfRVJSKDAsIDk2NSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEg PSBfX3B5eF92X21wdjsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfR0lW RVJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+X21wdik7Cisr ICBfX1B5eF9ERUNSRUYoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZi0+X21wdikpOworKyAgX19w eXhfdl9zZWxmLT5fbXB2ID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICopX19weXhfdF8xKTsKKysgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODYyCistICogICAgIGRlZiByZXBvcnRfZmxpcChz ZWxmLCB0aW1lKToKKy0gKiAgICAgICAgIGNkZWYgaW50NjRfdCBjdGltZSA9IHRpbWUKKy0gKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2NiX3JlcG9ydF9mbGlwKHNlbGYuX2N0eCwgY3RpbWUp CistICogICAgICAgICBpZiBlcnIgPCAwOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk2NworKyAqICAgICAgICAgc2VsZi5fbXB2ID0gbXB2CisrICogCisrICogICAgICAg ICBtZW1zZXQoJmdsX3BhcmFtcywgMCwgc2l6ZW9mKGdsX3BhcmFtcykpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIG1lbXNldCgmZHJtX3BhcmFtcywgMCwgc2l6ZW9m KGRybV9wYXJhbXMpKQorKyAqICAgICAgICAgbWVtc2V0KCZfZHJtX29zZF9zaXplLCAwLCBzaXpl b2YoX2RybV9vc2Rfc2l6ZSkpCisgICovCistICB7CistICAgICAgI2lmZGVmIFdJVEhfVEhSRUFE CistICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgUHlfVU5CTE9DS19USFJFQURT CistICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAgICNlbmRpZgorLSAgICAg IC8qdHJ5OiovIHsKKysgICh2b2lkKShtZW1zZXQoKCZfX3B5eF92X2dsX3BhcmFtcyksIDAsIChz aXplb2YoX19weXhfdl9nbF9wYXJhbXMpKSkpOworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjg2MworLSAqICAgICAgICAgY2RlZiBpbnQ2NF90IGN0aW1lID0g dGltZQorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZf b3BlbmdsX2NiX3JlcG9ydF9mbGlwKHNlbGYuX2N0eCwgY3RpbWUpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6CistICogICAgICAgICAgICAgcmFp c2UgTVBWRXJyb3IoZXJyKQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk2 OAorKyAqIAorKyAqICAgICAgICAgbWVtc2V0KCZnbF9wYXJhbXMsIDAsIHNpemVvZihnbF9wYXJh bXMpKQorKyAqICAgICAgICAgbWVtc2V0KCZkcm1fcGFyYW1zLCAwLCBzaXplb2YoZHJtX3BhcmFt cykpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIG1lbXNldCgmX2Ry bV9vc2Rfc2l6ZSwgMCwgc2l6ZW9mKF9kcm1fb3NkX3NpemUpKQorKyAqIAorICAqLworLSAgICAg ICAgX19weXhfdl9lcnIgPSBtcHZfb3BlbmdsX2NiX3JlcG9ydF9mbGlwKF9fcHl4X3Zfc2VsZi0+ X2N0eCwgX19weXhfdl9jdGltZSk7CistICAgICAgfQorKyAgKHZvaWQpKG1lbXNldCgoJl9fcHl4 X3ZfZHJtX3BhcmFtcyksIDAsIChzaXplb2YoX19weXhfdl9kcm1fcGFyYW1zKSkpKTsKKyAKKy0g ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODYyCistICogICAgIGRlZiBy ZXBvcnRfZmxpcChzZWxmLCB0aW1lKToKKy0gKiAgICAgICAgIGNkZWYgaW50NjRfdCBjdGltZSA9 IHRpbWUKKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2NiX3JlcG9ydF9mbGlwKHNlbGYu X2N0eCwgY3RpbWUpCistICogICAgICAgICBpZiBlcnIgPCAwOgorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjk2OQorKyAqICAgICAgICAgbWVtc2V0KCZnbF9wYXJhbXMsIDAs IHNpemVvZihnbF9wYXJhbXMpKQorKyAqICAgICAgICAgbWVtc2V0KCZkcm1fcGFyYW1zLCAwLCBz aXplb2YoZHJtX3BhcmFtcykpCisrICogICAgICAgICBtZW1zZXQoJl9kcm1fb3NkX3NpemUsIDAs IHNpemVvZihfZHJtX29zZF9zaXplKSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq IAorKyAqICAgICAgICAgcGFyYW1zID0gX1JlbmRlclBhcmFtcygpCisgICovCistICAgICAgLypm aW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICNpZmRl ZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAgICAg ICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICBnb3Rv IF9fcHl4X0w1OworLSAgICAgICAgfQorLSAgICAgICAgX19weXhfTDU6OworLSAgICAgIH0KKy0g IH0KKysgICh2b2lkKShtZW1zZXQoKCZfX3B5eF92X19kcm1fb3NkX3NpemUpLCAwLCAoc2l6ZW9m KF9fcHl4X3ZfX2RybV9vc2Rfc2l6ZSkpKSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODY0CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAg IGVyciA9IG1wdl9vcGVuZ2xfY2JfcmVwb3J0X2ZsaXAoc2VsZi5fY3R4LCBjdGltZSkKKy0gKiAg ICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTcxCisrICogICAgICAgICBtZW1zZXQoJl9kcm1fb3NkX3NpemUsIDAsIHNpemVv ZihfZHJtX29zZF9zaXplKSkKKysgKiAKKysgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJh bXMoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisrICogICAgICAgICBpZiBh cGlfdHlwZSA9PSBzZWxmLkFQSV9PUEVOR0w6CisgICovCistICBfX3B5eF90XzIgPSAoKF9fcHl4 X3ZfZXJyIDwgMCkgIT0gMCk7CistICBpZiAodW5saWtlbHkoX19weXhfdF8yKSkgeworKyAgX19w eXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcykpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5NzEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF92X3BhcmFtcyA9ICgoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3RfMSk7CisrICBfX3B5 eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODY1 CistICogICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9yZXBvcnRfZmxpcChzZWxmLl9j dHgsIGN0aW1lKQorLSAqICAgICAgICAgaWYgZXJyIDwgMDoKKy0gKiAgICAgICAgICAgICByYWlz ZSBNUFZFcnJvcihlcnIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzMKKysgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5k ZXJQYXJhbXMoKQorKyAqIAorKyAqICAgICAgICAgaWYgYXBpX3R5cGUgPT0gc2VsZi5BUElfT1BF TkdMOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcGFyYW1z LmFkZF9zdHJpbmcoTVBWX1JFTkRFUl9QQVJBTV9BUElfVFlQRSwgTVBWX1JFTkRFUl9BUElfVFlQ RV9PUEVOR0wpCisrICogICAgICAgICBlbHNlOgorKyAqLworKyAgX19weXhfdF8xID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9z X0FQSV9PUEVOR0wpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5NzMs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF90 XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X2FwaV90eXBlLCBfX3B5eF90XzEsIFB5 X0VRKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA5NzMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1Ry dWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwg OTczLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworKyAgaWYgKGxpa2VseShfX3B5eF90XzMpKSB7CisrCisrICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzQKKysgKiAKKysgKiAgICAgICAgIGlmIGFwaV90eXBl ID09IHNlbGYuQVBJX09QRU5HTDoKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3N0cmluZyhN UFZfUkVOREVSX1BBUkFNX0FQSV9UWVBFLCBNUFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZWxzZToKKysgKiAgICAgICAg ICAgICByYWlzZSBQeU1QVkVycm9yKCJVbmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90eXBlKQor KyAqLworKyAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIp LT5hZGRfc3RyaW5nKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0FQSV9UWVBFLCBN UFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDk3NCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3MworKyAqICAgICAgICAgcGFy YW1zID0gX1JlbmRlclBhcmFtcygpCisrICogCisrICogICAgICAgICBpZiBhcGlfdHlwZSA9PSBz ZWxmLkFQSV9PUEVOR0w6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg ICAgICBwYXJhbXMuYWRkX3N0cmluZyhNUFZfUkVOREVSX1BBUkFNX0FQSV9UWVBFLCBNUFZfUkVO REVSX0FQSV9UWVBFX09QRU5HTCkKKysgKiAgICAgICAgIGVsc2U6CisrICovCisrICAgIGdvdG8g X19weXhfTDM7CisrICB9CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTc2CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9zdHJpbmcoTVBWX1JFTkRFUl9QQVJBTV9B UElfVFlQRSwgTVBWX1JFTkRFUl9BUElfVFlQRV9PUEVOR0wpCisrICogICAgICAgICBlbHNlOgor KyAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlVua25vd24gYXBpX3R5cGUgJXIiICUg YXBpX3R5cGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAgZGVm IHVuaW5pdF9nbChzZWxmKToKKysgKiAgICAgICAgIGlmIG9wZW5nbF9pbml0X3BhcmFtcyBpcyBu b3QgTm9uZToKKyAgKi8KKy0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQs IF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDg2NSwgX19weXhfTDFfZXJyb3IpCisrICAvKmVsc2UqLyB7CisrICAgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfUHlNUFZFcnJvcik7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk3NiwgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX3B5eF90XzQgPSBfX1B5eF9QeVN0cmlu Z19Gb3JtYXRTYWZlKF9fcHl4X2twX3NfVW5rbm93bl9hcGlfdHlwZV9yLCBfX3B5eF92X2FwaV90 eXBlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgOTc2LCBfX3B5eF9M MV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgIF9fcHl4X3RfNSA9 IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzUpKSBfX1BZWF9FUlIoMCwgODY1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNSk7CistICAgIF9fcHl4X3RfNiA9IE5VTEw7CistICAgIGlmIChDWVRIT05fVU5Q QUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKKy0g ICAgICBfX3B5eF90XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzQpOworLSAgICAgIGlm IChsaWtlbHkoX19weXhfdF82KSkgeworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNCk7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF82KTsKKysgICAgX19weXhfdF81ID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzEpKSkgeworKyAgICAg IF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMSk7CisrICAgICAgaWYgKGxp a2VseShfX3B5eF90XzUpKSB7CisrICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhv ZF9HRVRfRlVOQ1RJT04oX19weXhfdF8xKTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzUpOworICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdF80LCBmdW5jdGlvbik7CisrICAgICAgICBfX1B5eF9ERUNSRUZfU0VU KF9fcHl4X3RfMSwgZnVuY3Rpb24pOworICAgICAgIH0KKyAgICAgfQorLSAgICBfX3B5eF90XzMg PSAoX19weXhfdF82KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzQsIF9fcHl4 X3RfNiwgX19weXhfdF81KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF80LCBf X3B5eF90XzUpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7 CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworLSAgICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA4NjUsIF9fcHl4X0wxX2Vycm9yKQor LSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgX19weXhfdF8yID0gKF9fcHl4X3Rf NSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8xLCBfX3B5eF90XzUsIF9fcHl4 X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMSwgX19weXhfdF80KTsK KysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworICAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gICAgX19QeXhfUmFpc2UoX19w eXhfdF8zLCAwLCAwLCAwKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3Rf MyA9IDA7CistICAgIF9fUFlYX0VSUigwLCA4NjUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5NzYsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisrICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMiwgMCwgMCwgMCk7 CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX1BZ WF9FUlIoMCwgOTc2LCBfX3B5eF9MMV9lcnJvcikKKysgIH0KKysgIF9fcHl4X0wzOjsKKyAKKy0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg2NAorLSAqICAgICAgICAgd2l0 aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2NiX3JlcG9ydF9mbGlw KHNlbGYuX2N0eCwgY3RpbWUpCistICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3OAorKyAqICAgICAgICAgICAgIHJh aXNlIFB5TVBWRXJyb3IoIlVua25vd24gYXBpX3R5cGUgJXIiICUgYXBpX3R5cGUpCisgICogCisr ICogICAgICAgICBpZiBvcGVuZ2xfaW5pdF9wYXJhbXMgaXMgbm90IE5vbmU6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBzZWxmLl9nZXRfcHJvY19hZGRyZXNz ID0gb3BlbmdsX2luaXRfcGFyYW1zWyJnZXRfcHJvY19hZGRyZXNzIl0KKysgKiAgICAgICAgICAg ICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzcyA9ICZfY19nZXRwcm9jYWRkcmVzcworICAqLwor LSAgfQorKyAgX19weXhfdF8zID0gKF9fcHl4X3Zfb3BlbmdsX2luaXRfcGFyYW1zICE9IFB5X05v bmUpOworKyAgX19weXhfdF82ID0gKF9fcHl4X3RfMyAhPSAwKTsKKysgIGlmIChfX3B5eF90XzYp IHsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NjAKKy0gKiAgICAg ICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5NzkKKyAgKiAKKy0gKiAgICAgZGVmIHJlcG9ydF9mbGlwKHNlbGYsIHRpbWUp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmIGludDY0X3Qg Y3RpbWUgPSB0aW1lCistICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgaWYgb3Bl bmdsX2luaXRfcGFyYW1zIGlzIG5vdCBOb25lOgorKyAqICAgICAgICAgICAgIHNlbGYuX2dldF9w cm9jX2FkZHJlc3MgPSBvcGVuZ2xfaW5pdF9wYXJhbXNbImdldF9wcm9jX2FkZHJlc3MiXSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9w cm9jX2FkZHJlc3MgPSAmX2NfZ2V0cHJvY2FkZHJlc3MKKysgKiAgICAgICAgICAgICBnbF9wYXJh bXMuZ2V0X3Byb2NfYWRkcmVzc19jdHggPSA8dm9pZCAqPnNlbGYuX2dldF9wcm9jX2FkZHJlc3MK KyAgKi8KKysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfRGljdF9HZXRJdGVtKF9fcHl4 X3Zfb3BlbmdsX2luaXRfcGFyYW1zLCBfX3B5eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcyk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk3OSwgX19weXhfTDFfZXJyb3IpCisr ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Rf Mik7CisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPl9nZXRfcHJvY19hZGRyZXNzKTsK KysgICAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+X2dldF9wcm9jX2FkZHJlc3MpOworKyAg ICBfX3B5eF92X3NlbGYtPl9nZXRfcHJvY19hZGRyZXNzID0gX19weXhfdF8yOworKyAgICBfX3B5 eF90XzIgPSAwOworIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0g UHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0gIF9f cHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X1hE RUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF82KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxp YnMubXB2Lk9wZW5HTENvbnRleHQucmVwb3J0X2ZsaXAiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworLSAgX19weXhfTDA6 OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk4MAorKyAqICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFyYW1zIGlz IG5vdCBOb25lOgorKyAqICAgICAgICAgICAgIHNlbGYuX2dldF9wcm9jX2FkZHJlc3MgPSBvcGVu Z2xfaW5pdF9wYXJhbXNbImdldF9wcm9jX2FkZHJlc3MiXQorKyAqICAgICAgICAgICAgIGdsX3Bh cmFtcy5nZXRfcHJvY19hZGRyZXNzID0gJl9jX2dldHByb2NhZGRyZXNzICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVz c19jdHggPSA8dm9pZCAqPnNlbGYuX2dldF9wcm9jX2FkZHJlc3MKKysgKiAgICAgICAgICAgICBw YXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAmZ2xf cGFyYW1zKQorKyAqLworKyAgICBfX3B5eF92X2dsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzID0g KCZfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY19nZXRwcm9jYWRkcmVzcyk7CisgCist LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg2NworLSAqICAgICAgICAgICAgIHJh aXNlIE1QVkVycm9yKGVycikKKy0gKiAKKy0gKiAgICAgZGVmIHVuaW5pdF9nbChzZWxmKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVk OgorLSAqICAgICAgICAgICAgIHJldHVybgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTgxCisrICogICAgICAgICAgICAgc2VsZi5fZ2V0X3Byb2NfYWRkcmVzcyA9IG9w ZW5nbF9pbml0X3BhcmFtc1siZ2V0X3Byb2NfYWRkcmVzcyJdCisrICogICAgICAgICAgICAgZ2xf cGFyYW1zLmdldF9wcm9jX2FkZHJlc3MgPSAmX2NfZ2V0cHJvY2FkZHJlc3MKKysgKiAgICAgICAg ICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzc19jdHggPSA8dm9pZCAqPnNlbGYuX2dldF9w cm9jX2FkZHJlc3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAg IHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZn bF9wYXJhbXMpCisrICogICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOgorICAqLworKyAgICBf X3B5eF92X2dsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9ICgodm9pZCAqKV9fcHl4X3Zf c2VsZi0+X2dldF9wcm9jX2FkZHJlc3MpOworIAorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250 ZXh0XzExdW5pbml0X2dsKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8xMXVuaW5pdF9nbChQeU9iamVjdCAq X19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgidW5pbml0X2dsICh3cmFwcGVyKSIsIDApOworLSAgX19w eXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTB1 bmluaXRfZ2woKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xD b250ZXh0ICopX19weXhfdl9zZWxmKSk7CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5ODIKKysgKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzcyA9 ICZfY19nZXRwcm9jYWRkcmVzcworKyAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19h ZGRyZXNzX2N0eCA9IDx2b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcworKyAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMs ICZnbF9wYXJhbXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlm IGFkdmFuY2VkX2NvbnRyb2w6CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JF TkRFUl9QQVJBTV9BRFZBTkNFRF9DT05UUk9MLCAxKQorKyAqLworKyAgICBfX3B5eF90XzIgPSAo KHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9wYXJh bXMsIE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAoJl9fcHl4X3ZfZ2xfcGFy YW1zKSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk4Miwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4g X19weXhfcjsKKy19CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzgK KysgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJVbmtub3duIGFwaV90eXBlICVyIiAl IGFwaV90eXBlKQorKyAqIAorKyAqICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFyYW1zIGlzIG5v dCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgc2Vs Zi5fZ2V0X3Byb2NfYWRkcmVzcyA9IG9wZW5nbF9pbml0X3BhcmFtc1siZ2V0X3Byb2NfYWRkcmVz cyJdCisrICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3MgPSAmX2NfZ2V0 cHJvY2FkZHJlc3MKKysgKi8KKysgIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTB1bmluaXRfZ2woc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqX19weXhfdl9zZWxm KSB7CistICBpbnQgX19weXhfdl9lcnI7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Cist ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgaW50IF9fcHl4X3RfMTsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF90XzIgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7Cist ICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBO VUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxl bmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgidW5pbml0X2dsIiwgMCk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODY4CistICogCistICogICAgIGRlZiB1bmluaXRfZ2woc2VsZik6Cist ICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICByZXR1cm4KKy0gKiAgICAgICAgIHdpdGggbm9naWw6CisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTgzCisrICogICAgICAgICAgICAgZ2xf cGFyYW1zLmdldF9wcm9jX2FkZHJlc3NfY3R4ID0gPHZvaWQgKj5zZWxmLl9nZXRfcHJvY19hZGRy ZXNzCisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09Q RU5HTF9JTklUX1BBUkFNUywgJmdsX3BhcmFtcykKKysgKiAgICAgICAgIGlmIGFkdmFuY2VkX2Nv bnRyb2w6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBwYXJh bXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpCisrICogICAg ICAgICBpZiB4MTFfZGlzcGxheToKKyAgKi8KKy0gIF9fcHl4X3RfMSA9ICgoIShfX3B5eF92X3Nl bGYtPmluaXRlZCAhPSAwKSkgIT0gMCk7CistICBpZiAoX19weXhfdF8xKSB7CisrICBfX3B5eF90 XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9hZHZhbmNlZF9jb250cm9sKTsgaWYg KHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgOTgzLCBfX3B5eF9MMV9lcnJv cikKKysgIGlmIChfX3B5eF90XzYpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjg2OQorLSAqICAgICBkZWYgdW5pbml0X2dsKHNlbGYpOgorLSAqICAgICAgICAg aWYgbm90IHNlbGYuaW5pdGVkOgorLSAqICAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAg IGVyciA9IG1wdl9vcGVuZ2xfY2JfdW5pbml0X2dsKHNlbGYuX2N0eCkKKysgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4NAorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf dm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpCisr ICogICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOgorKyAqICAgICAgICAgICAgIHBhcmFtcy5h ZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6CisrICogICAgICAg ICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheQorICAqLworLSAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3IpOworLSAgICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5 X05vbmUpOworLSAgICBnb3RvIF9fcHl4X0wwOworKyAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBf X3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19w eXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVO REVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA5ODQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NjgKKy0gKiAKKy0gKiAg ICAgZGVmIHVuaW5pdF9nbChzZWxmKToKKy0gKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHJldHVybgorLSAq ICAgICAgICAgd2l0aCBub2dpbDoKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjk4MworKyAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9 IDx2b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcworKyAqICAgICAgICAgICAgIHBhcmFtcy5h ZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMp CisrICogICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9B RFZBTkNFRF9DT05UUk9MLCAxKQorKyAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6CisgICovCisg ICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODcwCistICogICAg ICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6CistICogICAgICAgICAgICAgcmV0dXJuCistICogICAg ICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl91bmluaXRfZ2woc2VsZi5fY3R4KQorLSAqICAgICAg ICAgaWYgZXJyIDwgMDoKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODUK KysgKiAgICAgICAgIGlmIGFkdmFuY2VkX2NvbnRyb2w6CisrICogICAgICAgICAgICAgcGFyYW1z LmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9BRFZBTkNFRF9DT05UUk9MLCAxKQorKyAqICAgICAg ICAgaWYgeDExX2Rpc3BsYXk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg ICAgICAgICBzZWxmLl94MTFfZGlzcGxheSA9IHgxMV9kaXNwbGF5CisrICogICAgICAgICAgICAg cGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1gxMV9ESVNQTEFZLCBnZXRfcG9pbnRl cigiRGlzcGxheSIsIHgxMV9kaXNwbGF5KSkKKyAgKi8KKy0gIHsKKy0gICAgICAjaWZkZWYgV0lU SF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKy0gICAgICBQeV9VTkJMT0NL X1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAgICAgI2VuZGlm CistICAgICAgLyp0cnk6Ki8geworKyAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVl KF9fcHl4X3ZfeDExX2Rpc3BsYXkpOyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlY X0VSUigwLCA5ODUsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fcHl4X3RfNikgeworIAorLSAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg3MQorLSAqICAgICAgICAg ICAgIHJldHVybgorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBlcnIg PSBtcHZfb3BlbmdsX2NiX3VuaW5pdF9nbChzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6CistICogICAgICAgICAgICAgcmFpc2Ug TVBWRXJyb3IoZXJyKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTg2 CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9BRFZBTkNF RF9DT05UUk9MLCAxKQorKyAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6CisrICogICAgICAgICAg ICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFN X1gxMV9ESVNQTEFZLCBnZXRfcG9pbnRlcigiRGlzcGxheSIsIHgxMV9kaXNwbGF5KSkKKysgKiAg ICAgICAgIGlmIHdsX2Rpc3BsYXk6CisgICovCistICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9v cGVuZ2xfY2JfdW5pbml0X2dsKF9fcHl4X3Zfc2VsZi0+X2N0eCk7CistICAgICAgfQorKyAgICBf X1B5eF9JTkNSRUYoX19weXhfdl94MTFfZGlzcGxheSk7CisrICAgIF9fUHl4X0dJVkVSRUYoX19w eXhfdl94MTFfZGlzcGxheSk7CisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPl94MTFf ZGlzcGxheSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPl94MTFfZGlzcGxheSk7 CisrICAgIF9fcHl4X3Zfc2VsZi0+X3gxMV9kaXNwbGF5ID0gX19weXhfdl94MTFfZGlzcGxheTsK KyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODcwCistICogICAg ICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6CistICogICAgICAgICAgICAgcmV0dXJuCistICogICAg ICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl91bmluaXRfZ2woc2VsZi5fY3R4KQorLSAqICAgICAg ICAgaWYgZXJyIDwgMDoKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4 NworKyAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6CisrICogICAgICAgICAgICAgc2VsZi5feDEx X2Rpc3BsYXkgPSB4MTFfZGlzcGxheQorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAo TVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwgZ2V0X3BvaW50ZXIoIkRpc3BsYXkiLCB4MTFf ZGlzcGxheSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIHds X2Rpc3BsYXk6CisrICogICAgICAgICAgICAgc2VsZi5fd2xfZGlzcGxheSA9IHdsX2Rpc3BsYXkK KysgKi8KKysgICAgX19weXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFi KS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX1gxMV9ESVNQTEFZ LCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9nZXRfcG9pbnRlcigoKGNoYXIgY29uc3Qg KikiRGlzcGxheSIpLCBfX3B5eF92X3gxMV9kaXNwbGF5KSwgTlVMTCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk4NywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhf dF8yID0gMDsKKysKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4NQor KyAqICAgICAgICAgaWYgYWR2YW5jZWRfY29udHJvbDoKKysgKiAgICAgICAgICAgICBwYXJhbXMu YWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpCisrICogICAgICAg ICBpZiB4MTFfZGlzcGxheTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAg ICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkKKysgKiAgICAgICAgICAgICBw YXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVy KCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkpKQorICAqLworLSAgICAgIC8qZmluYWxseToqLyB7Cist ICAgICAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQK Ky0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAgUHlfQkxPQ0tf VEhSRUFEUworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNjsKKy0g ICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0w2OjsKKy0gICAgICB9CisgICB9CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODcyCistICogICAgICAgICB3aXRoIG5vZ2ls OgorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVuZ2xfY2JfdW5pbml0X2dsKHNlbGYuX2N0 eCkKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCistICogICAgICAgICBzZWxmLmlu aXRlZCA9IEZhbHNlCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTg4Cisr ICogICAgICAgICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheQorKyAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwgZ2V0 X3BvaW50ZXIoIkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpCisrICogICAgICAgICBpZiB3bF9kaXNw bGF5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgc2VsZi5f d2xfZGlzcGxheSA9IHdsX2Rpc3BsYXkKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRw KE1QVl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwgZ2V0X3BvaW50ZXIoIndsX2Rpc3BsYXkiLCB3 bF9kaXNwbGF5KSkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9ICgoX19weXhfdl9lcnIgPCAwKSAhPSAw KTsKKy0gIGlmICh1bmxpa2VseShfX3B5eF90XzEpKSB7CisrICBfX3B5eF90XzYgPSBfX1B5eF9Q eU9iamVjdF9Jc1RydWUoX19weXhfdl93bF9kaXNwbGF5KTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf NiA8IDApKSBfX1BZWF9FUlIoMCwgOTg4LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX3B5eF90 XzYpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg3MworLSAq ICAgICAgICAgICAgIGVyciA9IG1wdl9vcGVuZ2xfY2JfdW5pbml0X2dsKHNlbGYuX2N0eCkKKy0g KiAgICAgICAgIGlmIGVyciA8IDA6CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJy KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmluaXRlZCA9 IEZhbHNlCistICogCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODkK KysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJ U1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkpKQorKyAqICAgICAgICAg aWYgd2xfZGlzcGxheToKKysgKiAgICAgICAgICAgICBzZWxmLl93bF9kaXNwbGF5ID0gd2xfZGlz cGxheSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcGFyYW1z LmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9k aXNwbGF5Iiwgd2xfZGlzcGxheSkpCisrICogICAgICAgICBpZiBkcm1fZGlzcGxheToKKyAgKi8K Ky0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzMsIF9fcHl4X25fc19NUFZF cnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDg3MywgX19weXhf TDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX3B5eF90XzQg PSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhf dF80KSkgX19QWVhfRVJSKDAsIDg3MywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzQpOworLSAgICBfX3B5eF90XzUgPSBOVUxMOworLSAgICBpZiAoQ1lUSE9OX1VO UEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7Cist ICAgICAgX19weXhfdF81ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKKy0gICAgICBp ZiAobGlrZWx5KF9fcHl4X3RfNSkpIHsKKy0gICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5 TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOworLSAgICAgICAgX19QeXhfSU5DUkVGKF9f cHl4X3RfNSk7CistICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKy0gICAgICB9CistICAgIH0KKy0g ICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF8zLCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfMywgX19weXhfdF80KTsKKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBf X3B5eF90XzUgPSAwOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKy0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgODczLCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfd2xfZGlzcGxheSk7CisrICAg IF9fUHl4X0dJVkVSRUYoX19weXhfdl93bF9kaXNwbGF5KTsKKysgICAgX19QeXhfR09UUkVGKF9f cHl4X3Zfc2VsZi0+X3dsX2Rpc3BsYXkpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxm LT5fd2xfZGlzcGxheSk7CisrICAgIF9fcHl4X3Zfc2VsZi0+X3dsX2Rpc3BsYXkgPSBfX3B5eF92 X3dsX2Rpc3BsYXk7CisrCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 OTAKKysgKiAgICAgICAgIGlmIHdsX2Rpc3BsYXk6CisrICogICAgICAgICAgICAgc2VsZi5fd2xf ZGlzcGxheSA9IHdsX2Rpc3BsYXkKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1Q Vl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwgZ2V0X3BvaW50ZXIoIndsX2Rpc3BsYXkiLCB3bF9k aXNwbGF5KSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgaWYgZHJt X2Rpc3BsYXk6CisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5Lmdl dCgiZmQiLCAtMSkKKysgKi8KKysgICAgX19weXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0 cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1z LT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFN X1dMX0RJU1BMQVksIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dldF9wb2ludGVyKCgo Y2hhciBjb25zdCAqKSJ3bF9kaXNwbGF5IiksIF9fcHl4X3Zfd2xfZGlzcGxheSksIE5VTEwpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTAsIF9fcHl4X0wxX2Vycm9y KQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMiwgMCwgMCwg MCk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBf X1BZWF9FUlIoMCwgODczLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjg3MgorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAg ICAgICAgICBlcnIgPSBtcHZfb3BlbmdsX2NiX3VuaW5pdF9nbChzZWxmLl9jdHgpCistICogICAg ICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxz ZQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTg4CisrICogICAgICAg ICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheQorKyAqICAgICAgICAgICAgIHBh cmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwgZ2V0X3BvaW50ZXIo IkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpCisrICogICAgICAgICBpZiB3bF9kaXNwbGF5OiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgc2VsZi5fd2xfZGlzcGxh eSA9IHdsX2Rpc3BsYXkKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5E RVJfUEFSQU1fV0xfRElTUExBWSwgZ2V0X3BvaW50ZXIoIndsX2Rpc3BsYXkiLCB3bF9kaXNwbGF5 KSkKKyAgKi8KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4 NzQKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJy b3IoZXJyKQorLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogCistICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTEKKysgKiAgICAgICAgICAgICBzZWxm Ll93bF9kaXNwbGF5ID0gd2xfZGlzcGxheQorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9p ZHAoTVBWX1JFTkRFUl9QQVJBTV9XTF9ESVNQTEFZLCBnZXRfcG9pbnRlcigid2xfZGlzcGxheSIs IHdsX2Rpc3BsYXkpKQorKyAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3Bs YXkuZ2V0KCJmZCIsIC0xKQorKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRy bV9kaXNwbGF5LmdldCgiY3J0Y19pZCIsIC0xKQorICAqLworLSAgX19weXhfdl9zZWxmLT5pbml0 ZWQgPSAwOworKyAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfZHJt X2Rpc3BsYXkpOyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlYX0VSUigwLCA5OTEs IF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fcHl4X3RfNikgeworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjg2NworLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9y KGVycikKKy0gKiAKKy0gKiAgICAgZGVmIHVuaW5pdF9nbChzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgorLSAqICAgICAg ICAgICAgIHJldHVybgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTky CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJ U1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCisrICogICAgICAg ICBpZiBkcm1fZGlzcGxheToKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rp c3BsYXkuZ2V0KCJmZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICAgICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwg LTEpCisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxh eS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0xKQorICAqLworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9Q eU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfZHJtX2Rpc3BsYXksIF9fcHl4X25fc19nZXQpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTIsIF9fcHl4X0wxX2Vycm9y KQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdF8xID0gX19QeXhf UHlPYmplY3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3R1cGxlX183LCBOVUxMKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTkyLCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworKyAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhf dF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzcgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCA5OTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgICAgX19weXhfdl9kcm1fcGFyYW1zLmZk ID0gX19weXhfdF83OworIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9y ID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0g IF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF81KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2Lk9wZW5HTENvbnRleHQudW5pbml0X2dsIiwgX19weXhfY2xpbmVubywgX19weXhf bGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsKKy0gIF9fcHl4X0ww OjsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjg3NgorLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQorLSAq IAorLSAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHNlbGYudW5pbml0X2dsKCkKKy0gKiAKKysgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MworKyAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6 CisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAt MSkKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQo ImNydGNfaWQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3Jf aWQiLCAtMSkKKysgKiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19y ZXF1ZXN0X3B0ciIsIE5vbmUpCisgICovCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0 X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5MywgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVj dF9DYWxsKF9fcHl4X3RfMSwgX19weXhfdHVwbGVfXzgsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7CisrICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzIpOyBp ZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDAsIDk5MywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX3B5eF92X2RybV9wYXJhbXMuY3J0Y19pZCA9 IF9fcHl4X3RfNzsKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyB2b2lkIF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTNfX2RlYWxsb2NfXyhQ eU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCistc3RhdGljIHZvaWQgX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8xM19fZGVhbGxvY19fKFB5T2Jq ZWN0ICpfX3B5eF92X3NlbGYpIHsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18gKHdyYXBwZXIpIiwgMCk7Cist ICBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzEyX19kZWFs bG9jX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250 ZXh0ICopX19weXhfdl9zZWxmKSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0g IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLX0KKy0KKy1zdGF0aWMgdm9pZCBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzEyX19kZWFsbG9jX18o c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqX19w eXhfdl9zZWxmKSB7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMSA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKy0gIFB5 T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBj b25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9 IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18iLCAwKTsKKy0K Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NzcKKy0gKiAKKy0gKiAgICAg ZGVmIF9fZGVhbGxvY19fKHNlbGYpOgorLSAqICAgICAgICAgc2VsZi51bmluaXRfZ2woKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogREVGIE1BWF9SRU5ERVJfUEFSQU1T ID0gMzIKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5NAorKyAqICAg ICAgICAgICAgIGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCisrICog ICAgICAgICAgICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lk IiwgLTEpCisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlz cGxheS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9w dHIiLCBOb25lKQorKyAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKKyAgKi8KKy0g IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4 X3Zfc2VsZiksIF9fcHl4X25fc191bmluaXRfZ2wpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA4NzcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMik7CistICBfX3B5eF90XzMgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9E UyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAgX19weXhfdF8z ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90 XzMpKSB7CistICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9O KF9fcHl4X3RfMik7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7CistICAgICAgX19Q eXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwg ZnVuY3Rpb24pOworLSAgICB9CistICB9CistICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpIDogX19QeXhfUHlP YmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7 IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA4NzcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihf X3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKF9fcHl4X3ZfZHJtX2Rpc3BsYXksIF9fcHl4X25fc19nZXQpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdF8xID0gX19QeXhfUHlPYmpl Y3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3R1cGxlX185LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTk0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworKyAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF8xKTsg aWYgKHVubGlrZWx5KChfX3B5eF90XzcgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgICAgX19weXhfdl9kcm1fcGFyYW1zLmNvbm5lY3Rv cl9pZCA9IF9fcHl4X3RfNzsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo4NzYKKy0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKKy0gKiAKKy0gKiAgICAgZGVm IF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBzZWxmLnVuaW5pdF9nbCgpCistICogCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5OTUKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1f ZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNv bm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpCisrICogICAg ICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9wdHIiLCBOb25l KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgaWYgYXJwIGlz IG5vdCBOb25lOgorKyAqICAgICAgICAgICAgICAgICBkcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0 X3B0ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5nZXRfcG9pbnRlcihhcnAsICJkcm1Nb2RlQXRv bWljUmVxKiIpCisgICovCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5NSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9f cHl4X3RfMSwgX19weXhfdHVwbGVfXzEwLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgOTk1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMik7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwor KyAgICBfX3B5eF92X2FycCA9IF9fcHl4X3RfMjsKKysgICAgX19weXhfdF8yID0gMDsKKyAKKy0g IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgZ290byBfX3B5eF9MMDsKKy0gIF9fcHl4X0wx X2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYo X19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X1dyaXRl VW5yYWlzYWJsZSgidmlkY3V0dGVyLmxpYnMubXB2Lk9wZW5HTENvbnRleHQuX19kZWFsbG9jX18i LCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsKKy0g IF9fcHl4X0wwOjsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLX0KKy0KKy0v KiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2Vs Zi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGlu ZyIpCistICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk2CisrICogICAgICAgICAgICAg ZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNvbm5lY3Rvcl9pZCIs IC0xKQorKyAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVl c3RfcHRyIiwgTm9uZSkKKysgKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5h dG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJw LCAiZHJtTW9kZUF0b21pY1JlcSoiKQorKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVy X2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkKKyAgKi8KKysgICAgX19weXhf dF82ID0gKF9fcHl4X3ZfYXJwICE9IFB5X05vbmUpOworKyAgICBfX3B5eF90XzMgPSAoX19weXhf dF82ICE9IDApOworKyAgICBpZiAoX19weXhfdF8zKSB7CisgCistLyogUHl0aG9uIHdyYXBwZXIg Ki8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09w ZW5HTENvbnRleHRfMTVfX3JlZHVjZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBD WVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTVfX3Jl ZHVjZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2Jq ZWN0ICp1bnVzZWQpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2Vf Y3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF8xNF9fcmVkdWNlX2N5dGhvbl9fKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqKV9fcHl4X3Zf c2VsZikpOworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0KKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTRf X3JlZHVjZV9jeXRob25fXyhDWVRIT05fVU5VU0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X09wZW5HTENvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3Qg Kl9fcHl4X3IgPSBOVUxMOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2Jq ZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25z dCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7 CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18iLCAwKTsK Ky0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjIKKy0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18o c2VsZik6CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252 ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0 ZSk6CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0 ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCisrICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk5NworKyAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNw bGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRyIiwgTm9uZSkKKysgKiAgICAgICAgICAgICBpZiBh cnAgaXMgbm90IE5vbmU6CisrICogICAgICAgICAgICAgICAgIGRybV9wYXJhbXMuYXRvbWljX3Jl cXVlc3RfcHRyID0gPF9kcm1Nb2RlQXRvbWljUmVxICoqPmdldF9wb2ludGVyKGFycCwgImRybU1v ZGVBdG9taWNSZXEqIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAt MSkKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJN X0RJU1BMQVksICZkcm1fcGFyYW1zKQorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmpl Y3RfQ2FsbChfX3B5eF9idWlsdGluX1R5cGVFcnJvciwgX19weXhfdHVwbGVfXzYsIE5VTEwpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAyLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAw LCAwLCAwKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAg X19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fcHl4X3RfOCA9IF9fUHl4 X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfYXJwKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF84 KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDk5NywgX19weXhfTDFfZXJyb3Ip CisrICAgICAgX19weXhfdl9kcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0X3B0ciA9ICgoc3RydWN0 IF9kcm1Nb2RlQXRvbWljUmVxICoqKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dldF9w b2ludGVyKF9fcHl4X3RfOCwgX19weXhfa3Bfc19kcm1Nb2RlQXRvbWljUmVxKSk7CisgCistICAv KiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2Vs Zi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGlu ZyIpCistICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorKyAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTYKKysgKiAgICAgICAgICAg ICBkcm1fcGFyYW1zLmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lk IiwgLTEpCisrICogICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVx dWVzdF9wdHIiLCBOb25lKQorKyAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgICBkcm1fcGFyYW1z LmF0b21pY19yZXF1ZXN0X3B0ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5nZXRfcG9pbnRlcihh cnAsICJkcm1Nb2RlQXRvbWljUmVxKiIpCisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5yZW5k ZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJlbmRlcl9mZCIsIC0xKQorICAqLworKyAgICB9Cisg CistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2Lk9wZW5HTENvbnRleHQuX19yZWR1Y2VfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5v LCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworLSAg X19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0KKy0vKiAiKHRyZWUgZnJhZ21lbnQpIjozCist ICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorLSAqICAgICByYWlzZSBUeXBlRXJyb3Io InNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlj a2xpbmciKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNl bGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xp bmciKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk4CisrICogICAg ICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOgorKyAqICAgICAgICAgICAgICAgICBkcm1fcGFy YW1zLmF0b21pY19yZXF1ZXN0X3B0ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5nZXRfcG9pbnRl cihhcnAsICJkcm1Nb2RlQXRvbWljUmVxKiIpCisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5y ZW5kZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJlbmRlcl9mZCIsIC0xKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVO REVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJtX3BhcmFtcykKKysgKiAgICAgICAgIGlmIGRybV9v c2Rfc2l6ZToKKyAgKi8KKysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgOTk4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMik7CisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19w eXhfdF8yLCBfX3B5eF90dXBsZV9fMTEsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA5OTgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisr ICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfNyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJS KDAsIDk5OCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworKyAgICBfX3B5eF92X2RybV9wYXJhbXMucmVuZGVyX2ZkID0gX19weXhf dF83OworIAorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzE3X19zZXRzdGF0ZV9jeXRo b25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0 ZSk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzT3BlbkdMQ29udGV4dF8xN19fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9f cHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKy0gIFB5T2JqZWN0 ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsK Ky0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250 ZXh0XzE2X19zZXRzdGF0ZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X09wZW5HTENvbnRleHQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19w eXhfdl9fX3B5eF9zdGF0ZSkpOworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0K Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5H TENvbnRleHRfMTZfX3NldHN0YXRlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqX19weXhfdl9zZWxmLCBD WVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CistICBQeU9iamVj dCAqX19weXhfciA9IE5VTEw7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlP YmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CistICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0gIGNv bnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5vID0g MDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fIiwg MCk7CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0CistICogICAgIHJhaXNlIFR5cGVFcnJv cigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBw aWNrbGluZyIpCistICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUp OgorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVk IHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTkKKysgKiAg ICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVB dG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQorKyAqICAg ICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJf ZmQiLCAtMSkKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFS QU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1zKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6CisrICogICAgICAgICAgICAgX2RybV9vc2Rf c2l6ZS53aWR0aCwgX2RybV9vc2Rfc2l6ZS5oZWlnaHQgPSBkcm1fb3NkX3NpemUKKyAgKi8KKy0g IF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3Is IF9fcHl4X3R1cGxlX183LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0g IF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7CistICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fUFlYX0VSUigxLCA0LCBfX3B5eF9MMV9lcnJvcikK KysgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRk X3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAoJl9f cHl4X3ZfZHJtX3BhcmFtcyksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA5OTksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAv KiAiKHRyZWUgZnJhZ21lbnQpIjozCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgor LSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRv IGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhv bl9fKHNlbGYsIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEg UHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTkxCisrICogICAgICAgICAgICAgc2VsZi5fd2xfZGlzcGxheSA9IHdsX2Rp c3BsYXkKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1f V0xfRElTUExBWSwgZ2V0X3BvaW50ZXIoIndsX2Rpc3BsYXkiLCB3bF9kaXNwbGF5KSkKKysgKiAg ICAgICAgIGlmIGRybV9kaXNwbGF5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkKKysg KiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNydGNf aWQiLCAtMSkKKyAgKi8KKysgIH0KKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAg X19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19QeXhf QWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuT3BlbkdMQ29udGV4dC5fX3NldHN0YXRl X2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 CistICBfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCist LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4NgorLSAqICAgICAgICAgb2JqZWN0 IG93bmVkCistICogCistICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5vd25lZCA9IFtdCistICogICAgICAgICBz ZWxmLnBhcmFtc1swXS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElECisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAwMAorKyAqICAgICAgICAgICAgIGRybV9wYXJh bXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkKKysgKiAgICAg ICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZk cm1fcGFyYW1zKQorKyAqICAgICAgICAgaWYgZHJtX29zZF9zaXplOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgX2RybV9vc2Rfc2l6ZS53aWR0aCwgX2RybV9v c2Rfc2l6ZS5oZWlnaHQgPSBkcm1fb3NkX3NpemUKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRk X3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6ZSkKKyAg Ki8KKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X2RybV9vc2Rf c2l6ZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDEwMDAsIF9f cHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fcHl4X3RfMykgeworIAorLS8qIFB5dGhvbiB3cmFwcGVy ICovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVy UGFyYW1zXzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhf YXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgaW50IF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMV9faW5pdF9fKFB5T2Jq ZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhf a3dkcykgeworLSAgaW50IF9fcHl4X3I7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwor LSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fICh3cmFwcGVyKSIsIDApOwor LSAgaWYgKHVubGlrZWx5KFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgPiAwKSkgeworLSAg ICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAxLCAwLCAwLCBQeVR1cGxl X0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgcmV0dXJuIC0xO30KKy0gIGlmICh1bmxpa2VseShfX3B5 eF9rd2RzKSAmJiB1bmxpa2VseShQeURpY3RfU2l6ZShfX3B5eF9rd2RzKSA+IDApICYmIHVubGlr ZWx5KCFfX1B5eF9DaGVja0tleXdvcmRTdHJpbmdzKF9fcHl4X2t3ZHMsICJfX2luaXRfXyIsIDAp KSkgcmV0dXJuIC0xOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM19SZW5kZXJQYXJhbXNfX19pbml0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmKSk7CistCistICAvKiBmdW5j dGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAg cmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19fX2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92X3NlbGYpIHsKKy0gIGludCBf X3B5eF9yOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5 eF90XzEgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpf X3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18iLCAwKTsKKy0KKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODcKKy0gKiAKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNl bGYpOgorLSAqICAgICAgICAgc2VsZi5vd25lZCA9IFtdICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFN X0lOVkFMSUQKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDEKKysg KiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BM QVksICZkcm1fcGFyYW1zKQorKyAqICAgICAgICAgaWYgZHJtX29zZF9zaXplOgorKyAqICAgICAg ICAgICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9kcm1fb3NkX3NpemUuaGVpZ2h0ID0gZHJtX29z ZF9zaXplICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBwYXJh bXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6 ZSkKKyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IFB5TGlzdF9OZXcoMCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDg4NywgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPm93bmVkKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF92 X3NlbGYtPm93bmVkKTsKKy0gIF9fcHl4X3Zfc2VsZi0+b3duZWQgPSBfX3B5eF90XzE7CistICBf X3B5eF90XzEgPSAwOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4 OAorLSAqICAgICBkZWYgX19pbml0X18oc2VsZik6CistICogICAgICAgICBzZWxmLm93bmVkID0g W10KKy0gKiAgICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lO VkFMSUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICBjZGVmIGFk ZF92b2lkcChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgdm9pZCAqcCwgYmludCBvd25l ZD1GYWxzZSk6CistICovCistICAoX19weXhfdl9zZWxmLT5wYXJhbXNbMF0pLnR5cGUgPSBNUFZf UkVOREVSX1BBUkFNX0lOVkFMSUQ7CisrICAgIGlmICgobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFj dChfX3B5eF92X2RybV9vc2Rfc2l6ZSkpKSB8fCAoUHlMaXN0X0NoZWNrRXhhY3QoX19weXhfdl9k cm1fb3NkX3NpemUpKSkgeworKyAgICAgIFB5T2JqZWN0KiBzZXF1ZW5jZSA9IF9fcHl4X3ZfZHJt X29zZF9zaXplOworKyAgICAgIFB5X3NzaXplX3Qgc2l6ZSA9IF9fUHl4X1B5U2VxdWVuY2VfU0la RShzZXF1ZW5jZSk7CisrICAgICAgaWYgKHVubGlrZWx5KHNpemUgIT0gMikpIHsKKysgICAgICAg IGlmIChzaXplID4gMikgX19QeXhfUmFpc2VUb29NYW55VmFsdWVzRXJyb3IoMik7CisrICAgICAg ICBlbHNlIGlmIChzaXplID49IDApIF9fUHl4X1JhaXNlTmVlZE1vcmVWYWx1ZXNFcnJvcihzaXpl KTsKKysgICAgICAgIF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICB9 CisrICAgICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9C T1JST1dFRF9SRUZTCisrICAgICAgaWYgKGxpa2VseShQeVR1cGxlX0NoZWNrRXhhY3Qoc2VxdWVu Y2UpKSkgeworKyAgICAgICAgX19weXhfdF8xID0gUHlUdXBsZV9HRVRfSVRFTShzZXF1ZW5jZSwg MCk7IAorKyAgICAgICAgX19weXhfdF8yID0gUHlUdXBsZV9HRVRfSVRFTShzZXF1ZW5jZSwgMSk7 IAorKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBfX3B5eF90XzEgPSBQeUxpc3RfR0VUX0lURU0o c2VxdWVuY2UsIDApOyAKKysgICAgICAgIF9fcHl4X3RfMiA9IFB5TGlzdF9HRVRfSVRFTShzZXF1 ZW5jZSwgMSk7IAorKyAgICAgIH0KKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKysg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKysgICAgICAjZWxzZQorKyAgICAgIF9fcHl4 X3RfMSA9IFB5U2VxdWVuY2VfSVRFTShzZXF1ZW5jZSwgMCk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDEwMDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworKyAgICAgIF9fcHl4X3RfMiA9IFB5U2VxdWVuY2VfSVRFTShzZXF1 ZW5jZSwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwMDEsIF9f cHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICAgICNl bmRpZgorKyAgICB9IGVsc2UgeworKyAgICAgIFB5X3NzaXplX3QgaW5kZXggPSAtMTsKKysgICAg ICBfX3B5eF90XzQgPSBQeU9iamVjdF9HZXRJdGVyKF9fcHl4X3ZfZHJtX29zZF9zaXplKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3Ip CisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgICAgX19weXhfdF85ID0gUHlf VFlQRShfX3B5eF90XzQpLT50cF9pdGVybmV4dDsKKysgICAgICBpbmRleCA9IDA7IF9fcHl4X3Rf MSA9IF9fcHl4X3RfOShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIGdvdG8g X19weXhfTDExX3VucGFja2luZ19mYWlsZWQ7CisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CisrICAgICAgaW5kZXggPSAxOyBfX3B5eF90XzIgPSBfX3B5eF90XzkoX19weXhfdF80KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBnb3RvIF9fcHl4X0wxMV91bnBhY2tpbmdfZmFpbGVk OworKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICAgIGlmIChfX1B5eF9JdGVy bmV4dFVucGFja0VuZENoZWNrKF9fcHl4X3RfOShfX3B5eF90XzQpLCAyKSA8IDApIF9fUFlYX0VS UigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX3B5eF90XzkgPSBOVUxMOworKyAg ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgICAgIGdvdG8g X19weXhfTDEyX3VucGFja2luZ19kb25lOworKyAgICAgIF9fcHl4X0wxMV91bnBhY2tpbmdfZmFp bGVkOjsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysg ICAgICBfX3B5eF90XzkgPSBOVUxMOworKyAgICAgIGlmIChfX1B5eF9JdGVyRmluaXNoKCkgPT0g MCkgX19QeXhfUmFpc2VOZWVkTW9yZVZhbHVlc0Vycm9yKGluZGV4KTsKKysgICAgICBfX1BZWF9F UlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19weXhfTDEyX3VucGFja2luZ19k b25lOjsKKysgICAgfQorKyAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhf dF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzcgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9Q eUludF9Bc19pbnQoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzEwID09IChpbnQp LTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJy b3IpCisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBf X3B5eF92X19kcm1fb3NkX3NpemUud2lkdGggPSBfX3B5eF90Xzc7CisrICAgIF9fcHl4X3ZfX2Ry bV9vc2Rfc2l6ZS5oZWlnaHQgPSBfX3B5eF90XzEwOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjg4NgorLSAqICAgICAgICAgb2JqZWN0IG93bmVkCisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAyCisrICogICAgICAgICBpZiBkcm1fb3Nk X3NpemU6CisrICogICAgICAgICAgICAgX2RybV9vc2Rfc2l6ZS53aWR0aCwgX2RybV9vc2Rfc2l6 ZS5oZWlnaHQgPSBkcm1fb3NkX3NpemUKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRw KE1QVl9SRU5ERVJfUEFSQU1fRFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6ZSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorLSAqICAgICBkZWYgX19pbml0X18oc2VsZik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYub3duZWQgPSBbXQor LSAqICAgICAgICAgc2VsZi5wYXJhbXNbMF0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJ RAorKyAqICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2NyZWF0ZSgmc2VsZi5fY3R4 LCBzZWxmLl9tcHYuX2N0eCwgcGFyYW1zLnBhcmFtcykKKyAgKi8KKysgICAgX19weXhfdF8yID0g KChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBh cmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFy YW1zLCBNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgKCZfX3B5eF92X19kcm1fb3NkX3Np emUpLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTAwMiwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworLSAgX19weXhfciA9IDA7CistICBnb3RvIF9fcHl4X0wwOworLSAgX19weXhf TDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRlclBhcmFtcy5fX2luaXRfXyIsIF9fcHl4 X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IC0x OworLSAgX19weXhfTDA6OworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICBy ZXR1cm4gX19weXhfcjsKKy19CistCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojg5MAorLSAqICAgICAgICAgc2VsZi5wYXJhbXNbMF0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1f SU5WQUxJRAorLSAqIAorLSAqICAgICBjZGVmIGFkZF92b2lkcChzZWxmLCBtcHZfcmVuZGVyX3Bh cmFtX3R5cGUgdCwgdm9pZCAqcCwgYmludCBvd25lZD1GYWxzZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNvdW50ID0gbGVuKHNlbGYub3duZWQpCistICogICAg ICAgICBpZiBjb3VudCA+PSBNQVhfUkVOREVSX1BBUkFNUzoKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwMDAKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLnJlbmRl cl9mZCA9IGRybV9kaXNwbGF5LmdldCgicmVuZGVyX2ZkIiwgLTEpCisrICogICAgICAgICAgICAg cGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJtX3BhcmFt cykKKysgKiAgICAgICAgIGlmIGRybV9vc2Rfc2l6ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9kcm1fb3NkX3NpemUu aGVpZ2h0ID0gZHJtX29zZF9zaXplCisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChN UFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgJl9kcm1fb3NkX3NpemUpCisgICovCistCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQ YXJhbXNfYWRkX3ZvaWRwKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19S ZW5kZXJQYXJhbXMgKl9fcHl4X3Zfc2VsZiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgX19w eXhfdl90LCB2b2lkICpfX3B5eF92X3AsIHN0cnVjdCBfX3B5eF9vcHRfYXJnc185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF92b2lkcCAqX19weXhfb3B0aW9uYWxfYXJn cykgeworLSAgaW50IF9fcHl4X3Zfb3duZWQgPSAoKGludCkwKTsKKy0gIFB5T2JqZWN0ICpfX3B5 eF92X2NvdW50ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0g IFB5X3NzaXplX3QgX19weXhfdF8yOworLSAgaW50IF9fcHl4X3RfMzsKKy0gIFB5T2JqZWN0ICpf X3B5eF90XzQgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBpbnQg X19weXhfdF82OworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5 eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiYWRkX3ZvaWRwIiwgMCk7CistICBpZiAoX19weXhfb3B0aW9u YWxfYXJncykgeworLSAgICBpZiAoX19weXhfb3B0aW9uYWxfYXJncy0+X19weXhfbiA+IDApIHsK Ky0gICAgICBfX3B5eF92X293bmVkID0gX19weXhfb3B0aW9uYWxfYXJncy0+b3duZWQ7CistICAg IH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTEKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDA0CisrICogICAgICAgICAgICAg cGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgJl9kcm1fb3Nk X3NpemUpCisgICogCistICogICAgIGNkZWYgYWRkX3ZvaWRwKHNlbGYsIG1wdl9yZW5kZXJfcGFy YW1fdHlwZSB0LCB2b2lkICpwLCBiaW50IG93bmVkPUZhbHNlKToKKy0gKiAgICAgICAgIGNvdW50 ID0gbGVuKHNlbGYub3duZWQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIGlmIGNvdW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOgorLSAqICAgICAgICAgICAgIGlmIG93 bmVkOgorLSAqLworLSAgX19weXhfdF8xID0gX19weXhfdl9zZWxmLT5vd25lZDsKKy0gIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gUHlPYmplY3RfTGVuZ3RoKF9fcHl4 X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlY X0VSUigwLCA4OTEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistICBfX3B5eF90XzEgPSBQeUludF9Gcm9tU3NpemVfdChfX3B5eF90 XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4OTEsIF9fcHl4X0wx X2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX3B5eF92X2NvdW50ID0g X19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4OTIKKy0gKiAgICAgY2RlZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRl cl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOgorLSAqICAgICAgICAg Y291bnQgPSBsZW4oc2VsZi5vd25lZCkKKy0gKiAgICAgICAgIGlmIGNvdW50ID49IE1BWF9SRU5E RVJfUEFSQU1TOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg aWYgb3duZWQ6CistICogICAgICAgICAgICAgICAgIGZyZWUocCkKKy0gKi8KKy0gIF9fcHl4X3Rf MSA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfY291bnQsIF9fcHl4X2ludF8zMiwgUHlf R0UpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDg5MiwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90XzMgPSBfX1B5eF9Q eU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBf X1BZWF9FUlIoMCwgODkyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworLSAgaWYgKF9fcHl4X3RfMykgeworLQorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODkzCistICogICAgICAgICBjb3VudCA9IGxlbihz ZWxmLm93bmVkKQorLSAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJBTVM6Cist ICogICAgICAgICAgICAgaWYgb3duZWQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICAgICAgZnJlZShwKQorLSAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJy b3IoIlJlbmRlclBhcmFtcyBvdmVyZmxvdyIpCisrICogICAgICAgICBlcnIgPSBtcHZfcmVuZGVy X2NvbnRleHRfY3JlYXRlKCZzZWxmLl9jdHgsIHNlbGYuX21wdi5fY3R4LCBwYXJhbXMucGFyYW1z KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBpZiBlcnIgPCAwOgor KyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKyAgKi8KKy0gICAgX19weXhfdF8z ID0gKF9fcHl4X3Zfb3duZWQgIT0gMCk7CistICAgIGlmIChfX3B5eF90XzMpIHsKKysgIF9fcHl4 X3ZfZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2NyZWF0ZSgoJl9fcHl4X3Zfc2VsZi0+X2N0eCks IF9fcHl4X3Zfc2VsZi0+X21wdi0+X2N0eCwgX19weXhfdl9wYXJhbXMtPnBhcmFtcyk7CisgCist ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5NAorLSAqICAgICAgICAg aWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJBTVM6CistICogICAgICAgICAgICAgaWYgb3duZWQ6 CistICogICAgICAgICAgICAgICAgIGZyZWUocCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlJlbmRlclBhcmFtcyBvdmVyZmxv dyIpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAwNQorICAqIAorKyAq ICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2NyZWF0ZSgmc2VsZi5fY3R4LCBzZWxm Ll9tcHYuX2N0eCwgcGFyYW1zLnBhcmFtcykKKysgKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihl cnIpCisrICogICAgICAgICBzZWxmLmluaXRlZCA9IFRydWUKKyAgKi8KKy0gICAgICBmcmVlKF9f cHl4X3ZfcCk7CistCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5 MworLSAqICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25lZCkKKy0gKiAgICAgICAgIGlmIGNv dW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOgorLSAqICAgICAgICAgICAgIGlmIG93bmVkOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgIGZyZWUocCkKKy0g KiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJSZW5kZXJQYXJhbXMgb3ZlcmZsb3ciKQor LSAqLworLSAgICB9CisrICBfX3B5eF90XzMgPSAoKF9fcHl4X3ZfZXJyIDwgMCkgIT0gMCk7Cisr ICBpZiAodW5saWtlbHkoX19weXhfdF8zKSkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODk1CistICogICAgICAgICAgICAgaWYgb3duZWQ6CistICogICAgICAg ICAgICAgICAgIGZyZWUocCkKKy0gKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJSZW5k ZXJQYXJhbXMgb3ZlcmZsb3ciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDA2CisrICogICAgICAgICBlcnIgPSBt cHZfcmVuZGVyX2NvbnRleHRfY3JlYXRlKCZzZWxmLl9jdHgsIHNlbGYuX21wdi5fY3R4LCBwYXJh bXMucGFyYW1zKQorKyAqICAgICAgICAgaWYgZXJyIDwgMDoKKysgKiAgICAgICAgICAgICByYWlz ZSBNUFZFcnJvcihlcnIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IHNlbGYuaW5pdGVkID0gVHJ1ZQorICAqIAorLSAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRd LnR5cGUgPSB0CisgICovCistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80 LCBfX3B5eF9uX3NfUHlNUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhf RVJSKDAsIDg5NSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF8xLCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAxMDA2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7CisrICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4 X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAwNiwgX19w eXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgICBfX3B5eF90 XzUgPSBOVUxMOworLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkpKSB7CistICAgICAgX19weXhfdF81ID0gUHlNZXRob2Rf R0VUX1NFTEYoX19weXhfdF80KTsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1 bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzEpKSkgeworKyAgICAgIF9fcHl4X3RfNSA9 IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMSk7CisgICAgICAgaWYgKGxpa2VseShfX3B5eF90 XzUpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJ T04oX19weXhfdF80KTsKKysgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dF VF9GVU5DVElPTihfX3B5eF90XzEpOworICAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7 CisgICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzQsIGZ1bmN0aW9uKTsKKysgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19w eXhfdF8xLCBmdW5jdGlvbik7CisgICAgICAgfQorICAgICB9CistICAgIF9fcHl4X3RfMSA9IChf X3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNCwgX19weXhfdF81 LCBfX3B5eF9rcF9zX1JlbmRlclBhcmFtc19vdmVyZmxvdykgOiBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfNCwgX19weXhfa3Bfc19SZW5kZXJQYXJhbXNfb3ZlcmZsb3cpOworKyAg ICBfX3B5eF90XzIgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzEsIF9fcHl4X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8xLCBfX3B5eF90XzQpOworICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9f cHl4X3RfNSA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDg5NSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gICAgX19QeXhfUmFp c2UoX19weXhfdF8xLCAwLCAwLCAwKTsKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgMTAwNiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0g ICAgX19QWVhfRVJSKDAsIDg5NSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X1JhaXNlKF9f cHl4X3RfMiwgMCwgMCwgMCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworKyAgICBfX1BZWF9FUlIoMCwgMTAwNiwgX19weXhfTDFfZXJyb3IpCisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTIKKy0gKiAgICAgY2RlZiBhZGRf dm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9 RmFsc2UpOgorLSAqICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25lZCkKKy0gKiAgICAgICAg IGlmIGNvdW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICAgICAgaWYgb3duZWQ6CistICogICAgICAgICAgICAgICAgIGZyZWUo cCkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDUKKysgKiAKKysg KiAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2Vs Zi5fbXB2Ll9jdHgsIHBhcmFtcy5wYXJhbXMpCisrICogICAgICAgICBpZiBlcnIgPCAwOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3Io ZXJyKQorKyAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCisgICovCisgICB9CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODk3CistICogICAgICAgICAgICAgcmFp c2UgUHlNUFZFcnJvcigiUmVuZGVyUGFyYW1zIG92ZXJmbG93IikKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDA3CisrICogICAgICAgICBpZiBlcnIgPCAwOgorKyAqICAg ICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKysgKiAgICAgICAgIHNlbGYuaW5pdGVkID0g VHJ1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCistICogICAgICAgICBzZWxm LnBhcmFtc1tjb3VudF0udHlwZSA9IHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEgPSBwCistICogICAgICAgICBzZWxmLnBh cmFtc1tjb3VudCArIDFdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQKKysgKiAgICAg QF9lcnJvcnMKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9f cHl4X3ZfY291bnQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoUHlfc3NpemVfdCktMSkg JiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4OTcsIF9fcHl4X0wxX2Vycm9yKQor LSAgKF9fcHl4X3Zfc2VsZi0+cGFyYW1zW19fcHl4X3RfMl0pLnR5cGUgPSBfX3B5eF92X3Q7Cisr ICBfX3B5eF92X3NlbGYtPmluaXRlZCA9IDE7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODk4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTUw CisrICogICAgICAgICBiaW50IGluaXRlZAorICAqIAorLSAqICAgICAgICAgc2VsZi5wYXJhbXNb Y291bnRdLnR5cGUgPSB0CistICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0uZGF0YSA9IHAg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5wYXJhbXNbY291 bnQgKyAxXS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElECistICogICAgICAgICBzZWxm Lm93bmVkLmFwcGVuZChvd25lZCkKKy0gKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhf QXNTc2l6ZV90KF9fcHl4X3ZfY291bnQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoUHlf c3NpemVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4OTgsIF9fcHl4 X0wxX2Vycm9yKQorLSAgKF9fcHl4X3Zfc2VsZi0+cGFyYW1zW19fcHl4X3RfMl0pLmRhdGEgPSBf X3B5eF92X3A7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODk5Cist ICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0udHlwZSA9IHQKKy0gKiAgICAgICAgIHNlbGYu cGFyYW1zW2NvdW50XS5kYXRhID0gcAorLSAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnQgKyAx XS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQorLSAqIAorLSAqLwor LSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfQWRkT2JqQyhfX3B5eF92X2NvdW50LCBfX3B5eF9p bnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDg5 OSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4 X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgo X19weXhfdF8yID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDg5OSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKy0gIChfX3B5eF92X3NlbGYtPnBhcmFtc1tfX3B5eF90XzJdKS50eXBl ID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjkwMAorLSAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEgPSBw CistICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudCArIDFdLnR5cGUgPSBNUFZfUkVOREVSX1BB UkFNX0lOVkFMSUQKKy0gKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGNkZWYgYWRkX2ludChzZWxmLCBt cHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgaW50IHZhbCk6CistICovCistICBfX3B5eF90XzEgPSBf X1B5eF9QeUJvb2xfRnJvbUxvbmcoX19weXhfdl9vd25lZCk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDkwMCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0FwcGVuZChfX3B5eF92 X3NlbGYtPm93bmVkLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF82ID09ICgoaW50 KS0xKSkpIF9fUFlYX0VSUigwLCA5MDAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODkwCistICogICAgICAgICBzZWxmLnBhcmFtc1swXS50eXBlID0gTVBWX1JF TkRFUl9QQVJBTV9JTlZBTElECistICogCistICogICAgIGNkZWYgYWRkX3ZvaWRwKHNlbGYsIG1w dl9yZW5kZXJfcGFyYW1fdHlwZSB0LCB2b2lkICpwLCBiaW50IG93bmVkPUZhbHNlKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25l ZCkKKy0gKiAgICAgICAgIGlmIGNvdW50ID49IE1BWF9SRU5ERVJfUEFSQU1TOgorKyAqICAgICBk ZWYgX19pbml0X18oc2VsZiwgbXB2LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICAgICAgICAgICBhcGlfdHlwZSwKKysgKiAgICAgICAgICAgICAgICAgIG9wZW5nbF9p bml0X3BhcmFtcz1Ob25lLAorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCist ICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworKyAgX19weXhfciA9 IDA7CisgICBnb3RvIF9fcHl4X0wwOworICAgX19weXhfTDFfZXJyb3I6OworICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzQpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworLSAgX19Q eXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRlclBhcmFtcy5hZGRfdm9p ZHAiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9f cHl4X3IgPSAwOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVu ZGVyQ29udGV4dC5fX2luaXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhf ZmlsZW5hbWUpOworKyAgX19weXhfciA9IC0xOworICAgX19weXhfTDA6OworLSAgX19QeXhfWERF Q1JFRihfX3B5eF92X2NvdW50KTsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19Q eXhfWERFQ1JFRigoUHlPYmplY3QgKilfX3B5eF92X3BhcmFtcyk7CisrICBfX1B5eF9YREVDUkVG KF9fcHl4X3ZfYXJwKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0 dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 MDIKKy0gKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQorKy8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDEwCisgICogCistICogICAgIGNkZWYgYWRkX2ludChzZWxm LCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgaW50IHZhbCk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgaW50ICpwID0gPGludCAqPm1hbGxvYyhzaXplb2Yo aW50KSkKKy0gKiAgICAgICAgIHBbMF0gPSB2YWwKKysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAg ZGVmIHNldF9pY2NfcHJvZmlsZShzZWxmLCBpY2NfYmxvYik6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWY6CisrICogICAgICAgICAgICAgbXB2X3JlbmRlcl9w YXJhbSBwYXJhbQorICAqLworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF9pbnQoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9zZWxmLCBlbnVtIG1wdl9y ZW5kZXJfcGFyYW1fdHlwZSBfX3B5eF92X3QsIGludCBfX3B5eF92X3ZhbCkgeworLSAgaW50ICpf X3B5eF92X3A7CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfM3NldF9pY2NfcHJvZmls ZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9pY2NfYmxvYik7IC8q cHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF8zc2V0X2ljY19wcm9maWxlKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYs IFB5T2JqZWN0ICpfX3B5eF92X2ljY19ibG9iKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7 CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoInNldF9pY2NfcHJvZmlsZSAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2Zp bGUoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0 ICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfaWNjX2Jsb2IpKTsKKysKKysg IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisrCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2ZpbGUo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9pY2NfYmxvYikgeworKyAgc3RydWN0IG1wdl9y ZW5kZXJfcGFyYW0gX19weXhfdl9wYXJhbTsKKysgIHN0cnVjdCBtcHZfYnl0ZV9hcnJheSBfX3B5 eF92X3ZhbDsKKysgIGludCBfX3B5eF92X2VycjsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVM TDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8x ID0gTlVMTDsKKysgIGludCBfX3B5eF90XzE7CisrICBpbnQgX19weXhfdF8yOworKyAgUHlPYmpl Y3QgKl9fcHl4X3RfMyA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKysg IFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOworKyAgY2hhciAqX19weXhfdF82OworKyAgUHlf c3NpemVfdCBfX3B5eF90Xzc7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNo YXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0g IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJhZGRfaW50IiwgMCk7CisrICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgic2V0X2ljY19wcm9maWxlIiwgMCk7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTAzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTAxNgorKyAqICAgICAgICAgICAgIGludCBlcnIKKyAgKiAKKy0gKiAgICAgY2Rl ZiBhZGRfaW50KHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBpbnQgdmFsKToKKy0gKiAg ICAgICAgIGNkZWYgaW50ICpwID0gPGludCAqPm1hbGxvYyhzaXplb2YoaW50KSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcFswXSA9IHZhbAorLSAqICAgICAgICAg c2VsZi5hZGRfdm9pZHAodCwgcCkKKysgKiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGljY19i bG9iLCBieXRlcyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICByYWlzZSBQeU1QVkVycm9yKCJpY2NfYmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIp CisrICogICAgICAgICB2YWwuZGF0YSA9IDx2b2lkICo+PGNoYXIgKj5pY2NfYmxvYgorICAqLwor LSAgX19weXhfdl9wID0gKChpbnQgKiltYWxsb2MoKHNpemVvZihpbnQpKSkpOworKyAgX19weXhf dF8xID0gUHlCeXRlc19DaGVjayhfX3B5eF92X2ljY19ibG9iKTsgCisrICBfX3B5eF90XzIgPSAo KCEoX19weXhfdF8xICE9IDApKSAhPSAwKTsKKysgIGlmICh1bmxpa2VseShfX3B5eF90XzIpKSB7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA0CistICogICAgIGNk ZWYgYWRkX2ludChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgaW50IHZhbCk6CistICog ICAgICAgICBjZGVmIGludCAqcCA9IDxpbnQgKj5tYWxsb2Moc2l6ZW9mKGludCkpCistICogICAg ICAgICBwWzBdID0gdmFsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg IHNlbGYuYWRkX3ZvaWRwKHQsIHApCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDE3CisgICogCisrICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpY2NfYmxvYiwg Ynl0ZXMpOgorKyAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoImljY19ibG9iIHNob3Vs ZCBiZSBhIGJ5dGVzIGluc3RhbmNlIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgdmFsLmRhdGEgPSA8dm9pZCAqPjxjaGFyICo+aWNjX2Jsb2IKKysgKiAgICAgICAg IHZhbC5zaXplID0gbGVuKGljY19ibG9iKQorICAqLworLSAgKF9fcHl4X3ZfcFswXSkgPSBfX3B5 eF92X3ZhbDsKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4 X25fc19QeU1QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwg MTAxNywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAg ICBfX3B5eF90XzUgPSBOVUxMOworKyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVu bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkpKSB7CisrICAgICAgX19weXhfdF81ID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF80KTsKKysgICAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NSkpIHsKKysgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElP TihfX3B5eF90XzQpOworKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7CisrICAgICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzQsIGZ1bmN0aW9uKTsKKysgICAgICB9CisrICAgIH0KKysgICAgX19weXhfdF8zID0gKF9f cHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF80LCBfX3B5eF90XzUs IF9fcHl4X2twX3NfaWNjX2Jsb2Jfc2hvdWxkX2JlX2FfYnl0ZXNfaW5zdGEpIDogX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X2twX3NfaWNjX2Jsb2Jfc2hvdWxkX2Jl X2FfYnl0ZXNfaW5zdGEpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3Rf NSA9IDA7CisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDEwMTcs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgIF9fUHl4X1JhaXNlKF9f cHl4X3RfMywgMCwgMCwgMCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworKyAgICBfX1BZWF9FUlIoMCwgMTAxNywgX19weXhfTDFfZXJyb3IpCisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA1CistICogICAgICAgICBjZGVmIGlu dCAqcCA9IDxpbnQgKj5tYWxsb2Moc2l6ZW9mKGludCkpCistICogICAgICAgICBwWzBdID0gdmFs CistICogICAgICAgICBzZWxmLmFkZF92b2lkcCh0LCBwKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE2CisrICog ICAgICAgICAgICAgaW50IGVycgorICAqIAorLSAqICAgICBjZGVmIGFkZF9zdHJpbmcoc2VsZiwg bXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGNoYXIgKnMpOgorKyAqICAgICAgICAgaWYgbm90IGlz aW5zdGFuY2UoaWNjX2Jsb2IsIGJ5dGVzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoImljY19ibG9iIHNob3VsZCBiZSBhIGJ5 dGVzIGluc3RhbmNlIikKKysgKiAgICAgICAgIHZhbC5kYXRhID0gPHZvaWQgKj48Y2hhciAqPmlj Y19ibG9iCisgICovCistICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmLT5fX3B5eF92 dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl90LCBfX3B5eF92X3AsIE5VTEwp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MDUsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKysgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MDIKKy0gKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMTgKKysgKiAgICAgICAgIGlmIG5v dCBpc2luc3RhbmNlKGljY19ibG9iLCBieXRlcyk6CisrICogICAgICAgICAgICAgcmFpc2UgUHlN UFZFcnJvcigiaWNjX2Jsb2Igc2hvdWxkIGJlIGEgYnl0ZXMgaW5zdGFuY2UiKQorKyAqICAgICAg ICAgdmFsLmRhdGEgPSA8dm9pZCAqPjxjaGFyICo+aWNjX2Jsb2IgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgdmFsLnNpemUgPSBsZW4oaWNjX2Jsb2IpCisgICogCist ICogICAgIGNkZWYgYWRkX2ludChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgaW50IHZh bCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWYgaW50ICpw ID0gPGludCAqPm1hbGxvYyhzaXplb2YoaW50KSkKKy0gKiAgICAgICAgIHBbMF0gPSB2YWwKKyAg Ki8KKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0FzV3JpdGFibGVTdHJpbmcoX19weXhf dl9pY2NfYmxvYik7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNikgJiYgUHlFcnJfT2NjdXJyZWQo KSkpIF9fUFlYX0VSUigwLCAxMDE4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3ZfdmFsLmRh dGEgPSAoKHZvaWQgKikoKGNoYXIgKilfX3B5eF90XzYpKTsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsK Ky0gIGdvdG8gX19weXhfTDA7CistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5f UmVuZGVyUGFyYW1zLmFkZF9pbnQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAwOworLSAgX19weXhfTDA6OworLSAgX19QeXhfWEdJ VkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJl dHVybiBfX3B5eF9yOworLX0KKy0KKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTA3CistICogICAgICAgICBzZWxmLmFkZF92b2lkcCh0LCBwKQorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwMTkKKysgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9y KCJpY2NfYmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIpCisrICogICAgICAgICB2YWwu ZGF0YSA9IDx2b2lkICo+PGNoYXIgKj5pY2NfYmxvYgorKyAqICAgICAgICAgdmFsLnNpemUgPSBs ZW4oaWNjX2Jsb2IpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAg Y2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBjaGFyICpzKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiBjaGFyICpwID0g PGNoYXIgKj5tYWxsb2Moc3RybGVuKHMpICsgMSkKKy0gKiAgICAgICAgIHN0cmNweShwLCBzKQor KyAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSUNDX1BST0ZJTEUKKyAg Ki8KKysgIF9fcHl4X3RfNyA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X2ljY19ibG9iKTsgaWYg KHVubGlrZWx5KF9fcHl4X3RfNyA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDEw MTksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdl92YWwuc2l6ZSA9IF9fcHl4X3RfNzsKKyAK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRl clBhcmFtc19hZGRfc3RyaW5nKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X19SZW5kZXJQYXJhbXMgKl9fcHl4X3Zfc2VsZiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUg X19weXhfdl90LCBjaGFyICpfX3B5eF92X3MpIHsKKy0gIGNoYXIgKl9fcHl4X3ZfcDsKKy0gIFB5 T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOwor LSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImFkZF9zdHJpbmciLCAwKTsK Ky0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDgKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDIxCisrICogICAgICAgICB2YWwuc2l6ZSA9IGxl bihpY2NfYmxvYikKKysgKiAKKysgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BB UkFNX0lDQ19QUk9GSUxFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IHBhcmFtLmRhdGEgPSAmdmFsCisgICogCistICogICAgIGNkZWYgYWRkX3N0cmluZyhzZWxmLCBt cHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgY2hhciAqcyk6CistICogICAgICAgICBjZGVmIGNoYXIg KnAgPSA8Y2hhciAqPm1hbGxvYyhzdHJsZW4ocykgKyAxKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICBzdHJjcHkocCwgcykKKy0gKiAgICAgICAgIHNlbGYuYWRkX3Zv aWRwKHQsIHApCisgICovCistICBfX3B5eF92X3AgPSAoKGNoYXIgKiltYWxsb2MoKHN0cmxlbihf X3B5eF92X3MpICsgMSkpKTsKKysgIF9fcHl4X3ZfcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFS QU1fSUNDX1BST0ZJTEU7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTA5CistICogICAgIGNkZWYgYWRkX3N0cmluZyhzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUg dCwgY2hhciAqcyk6CistICogICAgICAgICBjZGVmIGNoYXIgKnAgPSA8Y2hhciAqPm1hbGxvYyhz dHJsZW4ocykgKyAxKQorLSAqICAgICAgICAgc3RyY3B5KHAsIHMpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyMgorKyAqIAorKyAqICAgICAgICAgcGFyYW0u dHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSUNDX1BST0ZJTEUKKysgKiAgICAgICAgIHBhcmFtLmRh dGEgPSAmdmFsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKysgKiAgICAgICAg IHdpdGggbm9naWw6CisgICovCistICAodm9pZCkoc3RyY3B5KF9fcHl4X3ZfcCwgX19weXhfdl9z KSk7CisrICBfX3B5eF92X3BhcmFtLmRhdGEgPSAoJl9fcHl4X3ZfdmFsKTsKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTAKKy0gKiAgICAgICAgIGNkZWYgY2hhciAq cCA9IDxjaGFyICo+bWFsbG9jKHN0cmxlbihzKSArIDEpCistICogICAgICAgICBzdHJjcHkocCwg cykKKy0gKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI0CisrICog ICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAorICAqIAorLSAqICAgICBkZWYgX19kZWFsbG9jX18o c2VsZik6CisrICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0 ZXIoc2VsZi5fY3R4LCBwYXJhbSkKKysgKiAgICAgICAgIHJldHVybiBlcnIKKyAgKi8KKy0gIF9f cHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2 X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19w eXhfdl9zZWxmLCBfX3B5eF92X3QsIF9fcHl4X3ZfcCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDkxMCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OworKyAgeworKyAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgIFB5VGhyZWFkU3RhdGUg Kl9zYXZlOworKyAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworKyAgICAgIF9fUHl4X0Zhc3RHSUxf UmVtZW1iZXIoKTsKKysgICAgICAjZW5kaWYKKysgICAgICAvKnRyeToqLyB7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA3CistICogICAgICAgICBzZWxmLmFkZF92 b2lkcCh0LCBwKQorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw MjUKKysgKiAKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgZXJyID0g bXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBwYXJhbSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmV0dXJuIGVycgorICAqIAorLSAq ICAgICBjZGVmIGFkZF9zdHJpbmcoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGNoYXIg KnMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmIGNoYXIg KnAgPSA8Y2hhciAqPm1hbGxvYyhzdHJsZW4ocykgKyAxKQorLSAqICAgICAgICAgc3RyY3B5KHAs IHMpCisgICovCisrICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9yZW5kZXJfY29udGV4dF9zZXRf cGFyYW1ldGVyKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9wYXJhbSk7CisrICAgICAgfQor IAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gUHlfTm9uZTsgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0gIF9fcHl4X0wxX2Vycm9y OjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2Ll9SZW5kZXJQYXJhbXMuYWRkX3N0cmluZyIsIF9fcHl4X2NsaW5l bm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IDA7CistICBf X3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKy0gIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTIKKy0gKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQs IHApCistICogCistICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3du ZWQpOgorLSAqICAgICAgICAgICAgIGlmIGo6CistICovCistCistLyogUHl0aG9uIHdyYXBwZXIg Ki8KKy1zdGF0aWMgdm9pZCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVy UGFyYW1zXzNfX2RlYWxsb2NfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCist c3RhdGljIHZvaWQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFt c18zX19kZWFsbG9jX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworLSAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlYWxsb2Nf XyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19S ZW5kZXJQYXJhbXNfMl9fZGVhbGxvY19fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3Zfc2VsZikpOworLQorLSAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy19Cist Cistc3RhdGljIHZvaWQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBh cmFtc18yX19kZWFsbG9jX18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X1JlbmRlclBhcmFtcyAqX19weXhfdl9zZWxmKSB7CistICBQeU9iamVjdCAqX19weXhfdl9pID0g TlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2ogPSBOVUxMOworLSAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMiA9IE5VTEw7CistICBQeV9zc2l6ZV90IF9fcHl4X3RfMzsKKy0gIFB5T2JqZWN0 ICooKl9fcHl4X3RfNCkoUHlPYmplY3QgKik7CistICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVM TDsKKy0gIGludCBfX3B5eF90XzY7CistICBQeV9zc2l6ZV90IF9fcHl4X3RfNzsKKy0gIGludCBf X3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOwor LSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo Il9fZGVhbGxvY19fIiwgMCk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTEzCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjQKKysg KiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsCisgICogCistICogICAgIGRlZiBfX2RlYWxsb2Nf XyhzZWxmKToKKy0gKiAgICAgICAgIGZvciBpLCBqIGluIGVudW1lcmF0ZShzZWxmLm93bmVkKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGlmIGo6CistICog ICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkKKysgKiAgICAgICAgIHdp dGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBl cnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRlcihzZWxmLl9jdHgsIHBhcmFtKQor KyAqICAgICAgICAgcmV0dXJuIGVycgorICAqLworLSAgX19QeXhfSU5DUkVGKF9fcHl4X2ludF8w KTsKKy0gIF9fcHl4X3RfMSA9IF9fcHl4X2ludF8wOworLSAgaWYgKGxpa2VseShQeUxpc3RfQ2hl Y2tFeGFjdChfX3B5eF92X3NlbGYtPm93bmVkKSkgfHwgUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4 X3Zfc2VsZi0+b3duZWQpKSB7CistICAgIF9fcHl4X3RfMiA9IF9fcHl4X3Zfc2VsZi0+b3duZWQ7 IF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzMgPSAwOworLSAgICBfX3B5eF90XzQg PSBOVUxMOworLSAgfSBlbHNlIHsKKy0gICAgX19weXhfdF8zID0gLTE7IF9fcHl4X3RfMiA9IFB5 T2JqZWN0X0dldEl0ZXIoX19weXhfdl9zZWxmLT5vd25lZCk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOworLSAgICBfX3B5eF90XzQgPSBQeV9UWVBFKF9fcHl4X3RfMiktPnRwX2l0 ZXJuZXh0OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4 X0wxX2Vycm9yKQorLSAgfQorLSAgZm9yICg7OykgeworLSAgICBpZiAobGlrZWx5KCFfX3B5eF90 XzQpKSB7CistICAgICAgaWYgKGxpa2VseShQeUxpc3RfQ2hlY2tFeGFjdChfX3B5eF90XzIpKSkg eworLSAgICAgICAgaWYgKF9fcHl4X3RfMyA+PSBQeUxpc3RfR0VUX1NJWkUoX19weXhfdF8yKSkg YnJlYWs7CistICAgICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9O X0FWT0lEX0JPUlJPV0VEX1JFRlMKKy0gICAgICAgIF9fcHl4X3RfNSA9IFB5TGlzdF9HRVRfSVRF TShfX3B5eF90XzIsIF9fcHl4X3RfMyk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90 XzMrKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJy b3IpCistICAgICAgICAjZWxzZQorLSAgICAgICAgX19weXhfdF81ID0gUHlTZXF1ZW5jZV9JVEVN KF9fcHl4X3RfMiwgX19weXhfdF8zKTsgX19weXhfdF8zKys7IGlmICh1bmxpa2VseSghX19weXhf dF81KSkgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCistICAgICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF81KTsKKy0gICAgICAgICNlbmRpZgorLSAgICAgIH0gZWxzZSB7CistICAg ICAgICBpZiAoX19weXhfdF8zID49IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdF8yKSkgYnJlYWs7 CistICAgICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lE X0JPUlJPV0VEX1JFRlMKKy0gICAgICAgIF9fcHl4X3RfNSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfdF8yLCBfX3B5eF90XzMpOyBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsgX19weXhfdF8zKys7 IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4X0wxX2Vycm9yKQor LSAgICAgICAgI2Vsc2UKKy0gICAgICAgIF9fcHl4X3RfNSA9IFB5U2VxdWVuY2VfSVRFTShfX3B5 eF90XzIsIF9fcHl4X3RfMyk7IF9fcHl4X3RfMysrOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkp IF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNSk7CistICAgICAgICAjZW5kaWYKKy0gICAgICB9CistICAgIH0gZWxzZSB7Cist ICAgICAgX19weXhfdF81ID0gX19weXhfdF80KF9fcHl4X3RfMik7CistICAgICAgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzUpKSB7CistICAgICAgICBQeU9iamVjdCogZXhjX3R5cGUgPSBQeUVycl9P Y2N1cnJlZCgpOworLSAgICAgICAgaWYgKGV4Y190eXBlKSB7CistICAgICAgICAgIGlmIChsaWtl bHkoX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19TdG9w SXRlcmF0aW9uKSkpIFB5RXJyX0NsZWFyKCk7CistICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAs IDkxMywgX19weXhfTDFfZXJyb3IpCisrICAgICAgLypmaW5hbGx5OiovIHsKKysgICAgICAgIC8q bm9ybWFsIGV4aXQ6Ki97CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAg ICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisr ICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICBnb3RvIF9fcHl4X0w2OworICAgICAgICAgfQor LSAgICAgICAgYnJlYWs7CisrICAgICAgICBfX3B5eF9MNjo7CisgICAgICAgfQorLSAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzUpOworLSAgICB9CistICAgIF9fUHl4X1hERUNSRUZfU0VUKF9f cHl4X3ZfaiwgX19weXhfdF81KTsKKy0gICAgX19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfSU5D UkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4X1hERUNSRUZfU0VUKF9fcHl4X3ZfaSwgX19weXhf dF8xKTsKKy0gICAgX19weXhfdF81ID0gX19QeXhfUHlJbnRfQWRkT2JqQyhfX3B5eF90XzEsIF9f cHl4X2ludF8xLCAxLCAwLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIo MCwgOTEzLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7Cist ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOworLSAgICBfX3B5eF90XzEgPSBfX3B5eF90XzU7 CistICAgIF9fcHl4X3RfNSA9IDA7CistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5MTQKKy0gKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOgorLSAqICAgICAgICAg Zm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOgorLSAqICAgICAgICAgICAgIGlmIGo6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZnJlZShz ZWxmLnBhcmFtc1tpXS5kYXRhKQorLSAqIAorLSAqLworLSAgICBfX3B5eF90XzYgPSBfX1B5eF9Q eU9iamVjdF9Jc1RydWUoX19weXhfdl9qKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBf X1BZWF9FUlIoMCwgOTE0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgaWYgKF9fcHl4X3RfNikgewor LQorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTUKKy0gKiAgICAg ICAgIGZvciBpLCBqIGluIGVudW1lcmF0ZShzZWxmLm93bmVkKToKKy0gKiAgICAgICAgICAgICBp ZiBqOgorLSAqICAgICAgICAgICAgICAgICBmcmVlKHNlbGYucGFyYW1zW2ldLmRhdGEpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiBjZGVmIHZvaWQgKmdldF9wb2ludGVy KGNvbnN0IGNoYXIgKm5hbWUsIG9iamVjdCBvYmopOgorLSAqLworLSAgICAgIF9fcHl4X3RfNyA9 IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3ZfaSk7IGlmICh1bmxpa2VseSgoX19weXhf dF83ID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAs IDkxNSwgX19weXhfTDFfZXJyb3IpCistICAgICAgZnJlZSgoX19weXhfdl9zZWxmLT5wYXJhbXNb X19weXhfdF83XSkuZGF0YSk7CistCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjkxNAorLSAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6CistICogICAgICAgICBm b3IgaSwgaiBpbiBlbnVtZXJhdGUoc2VsZi5vd25lZCk6CistICogICAgICAgICAgICAgaWYgajog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICBmcmVlKHNl bGYucGFyYW1zW2ldLmRhdGEpCistICogCistICovCistICAgIH0KKysgIH0KKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxMworKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwMjYKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAg ICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBw YXJhbSkKKysgKiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqIAorLSAqICAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6CistICogICAgICAgICBmb3Ig aSwgaiBpbiBlbnVtZXJhdGUoc2VsZi5vd25lZCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICBpZiBqOgorLSAqICAgICAgICAgICAgICAgICBmcmVlKHNlbGYu cGFyYW1zW2ldLmRhdGEpCisrICogICAgIEBfZXJyb3JzCisgICovCistICB9CistICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgIF9fcHl4 X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTAyNiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9H T1RSRUYoX19weXhfdF8zKTsKKysgIF9fcHl4X3IgPSBfX3B5eF90XzM7CisrICBfX3B5eF90XzMg PSAwOworKyAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5MTIKKy0gKiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAxMAorICAqIAorLSAqICAgICBkZWYgX19kZWFs bG9jX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGZv ciBpLCBqIGluIGVudW1lcmF0ZShzZWxmLm93bmVkKToKKy0gKiAgICAgICAgICAgICBpZiBqOgor KyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgc2V0X2ljY19wcm9maWxlKHNlbGYsIGljY19i bG9iKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZjoKKysg KiAgICAgICAgICAgICBtcHZfcmVuZGVyX3BhcmFtIHBhcmFtCisgICovCisgCisgICAvKiBmdW5j dGlvbiBleGl0IGNvZGUgKi8KKy0gIGdvdG8gX19weXhfTDA7CisgICBfX3B5eF9MMV9lcnJvcjo7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Mik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNCk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CistICBfX1B5eF9Xcml0ZVVucmFp c2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5fUmVuZGVyUGFyYW1zLl9fZGVhbGxvY19fIiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSwgMSwgMCk7CisrICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0LnNldF9pY2Nf cHJvZmlsZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwor KyAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4 X3ZfaSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfaik7CisrICBfX1B5eF9YR0lWRVJFRihf X3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9f cHl4X3I7CisgfQorIAorLS8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0gKiBkZWYgX19yZWR1Y2Vf Y3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcmFp c2UgVHlwZUVycm9yKCJzZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9u IG9iamVjdCBmb3IgcGlja2xpbmciKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYs IF9fcHl4X3N0YXRlKToKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyOQor KyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgc2V0X2FtYmllbnRfbGlnaHQoc2Vs ZiwgbHV4KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZjoK KysgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX3BhcmFtIHBhcmFtCisgICovCisgCisgLyogUHl0 aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM19SZW5kZXJQYXJhbXNfNV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBh cmFtc181X19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqdW51c2VkKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzVzZXRfYW1iaWVudF9saWdodChQeU9i amVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9sdXgpOyAvKnByb3RvKi8KKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNv bnRleHRfNXNldF9hbWJpZW50X2xpZ2h0KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X2x1eCkgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVm TmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVj ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzRfX3JlZHVjZV9jeXRob25fXygoKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92 X3NlbGYpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfYW1iaWVudF9saWdo dCAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNSZW5kZXJDb250ZXh0XzRzZXRfYW1iaWVudF9saWdodCgoKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpLCAo KFB5T2JqZWN0ICopX19weXhfdl9sdXgpKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAq LworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsK KyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNfUmVuZGVyUGFyYW1zXzRfX3JlZHVjZV9jeXRob25fXyhDWVRIT05fVU5VU0VEIHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKl9fcHl4X3Zfc2Vs ZikgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz UmVuZGVyQ29udGV4dF80c2V0X2FtYmllbnRfbGlnaHQoc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9sdXgpIHsKKysgIHN0cnVjdCBtcHZfcmVuZGVyX3BhcmFtIF9fcHl4X3ZfcGFyYW07Cisr ICBpbnQgX19weXhfdl92YWw7CisrICBpbnQgX19weXhfdl9lcnI7CisgICBQeU9iamVjdCAqX19w eXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfMSA9IE5VTEw7CisrICBpbnQgX19weXhfdF8xOworKyAgUHlPYmplY3QgKl9fcHl4 X3RfMiA9IE5VTEw7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9f cHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyIsIDApOworKyAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoInNldF9hbWJpZW50X2xpZ2h0IiwgMCk7CisgCistICAvKiAi KHRyZWUgZnJhZ21lbnQpIjoyCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorLSAq ICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8g YSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CistICog ICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBh IFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDM1CisrICogICAgICAgICAgICAgaW50IGVycgorKyAqIAorKyAqICAgICAg ICAgdmFsID0gbHV4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHBh cmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0FNQklFTlRfTElHSFQKKysgKiAgICAgICAgIHBh cmFtLmRhdGEgPSAmdmFsCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxs KF9fcHl4X2J1aWx0aW5fVHlwZUVycm9yLCBfX3B5eF90dXBsZV9fOCwgTlVMTCk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDAp OworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX1BZWF9F UlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Bc19p bnQoX19weXhfdl9sdXgpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMSA9PSAoaW50KS0xKSAmJiBQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwMzUsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfdl92YWwgPSBfX3B5eF90XzE7CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCist ICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZl cnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYgX19zZXRzdGF0 ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTAzNgorKyAqIAorKyAqICAgICAgICAgdmFsID0gbHV4CisrICogICAgICAg ICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9BTUJJRU5UX0xJR0hUICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsCisrICogCisg ICovCisrICBfX3B5eF92X3BhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0FNQklFTlRfTElH SFQ7CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X0wxX2Vycm9yOjsK Ky0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2Ll9SZW5kZXJQYXJhbXMuX19yZWR1Y2VfY3l0aG9uX18iLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxM OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0KKy0vKiAiKHRyZWUgZnJhZ21lbnQp IjozCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorLSAqICAgICByYWlzZSBUeXBl RXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0 IGZvciBwaWNrbGluZyIpCistICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhf c3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJhaXNlIFR5cGVF cnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3Qg Zm9yIHBpY2tsaW5nIikKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM3 CisrICogICAgICAgICB2YWwgPSBsdXgKKysgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVO REVSX1BBUkFNX0FNQklFTlRfTElHSFQKKysgKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgICAgIHdpdGggbm9naWw6 CisgICovCisrICBfX3B5eF92X3BhcmFtLmRhdGEgPSAoJl9fcHl4X3ZfdmFsKTsKKyAKKy0vKiBQ eXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc183X19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qcHJvdG8qLwor LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRl clBhcmFtc183X19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOwor LSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfNl9fc2V0c3RhdGVf Y3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zICopX19weXhfdl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfc3RhdGUp KTsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM5CisrICogICAgICAg ICBwYXJhbS5kYXRhID0gJnZhbAorKyAqIAorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJf Y29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwgcGFyYW0pCisrICogICAgICAgICByZXR1 cm4gZXJyCisrICovCisrICB7CisrICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlU aHJlYWRTdGF0ZSAqX3NhdmU7CisrICAgICAgUHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19Q eXhfRmFzdEdJTF9SZW1lbWJlcigpOworKyAgICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsK KyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CisrICAgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0MAorKyAqIAorKyAqICAgICAgICAgd2l0aCBub2dpbDoK KysgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRlcihz ZWxmLl9jdHgsIHBhcmFtKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAg ICByZXR1cm4gZXJyCisrICogCisrICovCisrICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9yZW5k ZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9wYXJh bSk7CisrICAgICAgfQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc182X19zZXRzdGF0ZV9jeXRob25fXyhDWVRIT05fVU5V U0VEIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMg Kl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0 ZSkgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgaW50IF9fcHl4X2xp bmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQg X19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRz dGF0ZV9jeXRob25fXyIsIDApOworKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDM5CisrICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAorKyAqIAorKyAqICAgICAg ICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwgcGFy YW0pCisrICogICAgICAgICByZXR1cm4gZXJyCisrICovCisrICAgICAgLypmaW5hbGx5OiovIHsK KysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAorKyAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAgICAgICBQeV9CTE9D S19USFJFQURTCisrICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICBnb3RvIF9fcHl4X0w1Owor KyAgICAgICAgfQorKyAgICAgICAgX19weXhfTDU6OworKyAgICAgIH0KKysgIH0KKyAKKy0gIC8q ICIodHJlZSBmcmFnbWVudCkiOjQKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLnBhcmFt cyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQor LSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKy0gKiAgICAg cmFpc2UgVHlwZUVycm9yKCJzZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0 aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0MQorKyAqICAgICAgICAgd2l0 aCBub2dpbDoKKysgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3Bh cmFtZXRlcihzZWxmLl9jdHgsIHBhcmFtKQorKyAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiBnZXRfbmV4dF9mcmFtZV9p bmZvKHNlbGYpOgorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5 eF9idWlsdGluX1R5cGVFcnJvciwgX19weXhfdHVwbGVfXzksIE5VTEwpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCA0LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgX19QWVhfRVJSKDEs IDQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgIF9fcHl4 X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTA0MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKysgIF9fcHl4X3IgPSBfX3B5eF90XzI7CisrICBfX3B5eF90XzIg PSAwOworKyAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjMKKy0g KiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6CistICogICAgIHJhaXNlIFR5cGVFcnJvcigi c2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBp Y2tsaW5nIikKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJz ZWxmLnBhcmFtcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlj a2xpbmciKQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjkKKysgKiAK KysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIHNldF9hbWJpZW50X2xpZ2h0KHNlbGYsIGx1 eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWY6CisrICog ICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBwYXJhbQorICAqLworIAorICAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fUmVu ZGVyUGFyYW1zLl9fc2V0c3RhdGVfY3l0aG9uX18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5l bm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9f UHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckNvbnRleHQuc2V0X2Ft YmllbnRfbGlnaHQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1l KTsKKyAgIF9fcHl4X3IgPSBOVUxMOworKyAgX19weXhfTDA6OworICAgX19QeXhfWEdJVkVSRUYo X19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBf X3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE3Cist ICogICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkKKysvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0MworKyAqICAgICAgICAgcmV0dXJuIGVycgorICAq IAorLSAqIGNkZWYgdm9pZCAqZ2V0X3BvaW50ZXIoY29uc3QgY2hhciAqbmFtZSwgb2JqZWN0IG9i aik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgY2RlZiB2b2lkICpwCist ICogICAgIGlmIFB5Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwgbmFtZSk6CisrICogICAgIGRlZiBnZXRf bmV4dF9mcmFtZV9pbmZvKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICBjZGVmOgorKyAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfZnJhbWVfaW5mbyBpbmZv CisgICovCisgCistc3RhdGljIHZvaWQgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dl dF9wb2ludGVyKGNoYXIgY29uc3QgKl9fcHl4X3ZfbmFtZSwgUHlPYmplY3QgKl9fcHl4X3Zfb2Jq KSB7CistICB2b2lkICpfX3B5eF92X3A7CistICB2b2lkICpfX3B5eF9yOworKy8qIFB5dGhvbiB3 cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNSZW5kZXJDb250ZXh0XzdnZXRfbmV4dF9mcmFtZV9pbmZvKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworK3N0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF83Z2V0X25leHRfZnJhbWVfaW5mbyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5V U0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKysgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi Z2V0X25leHRfZnJhbWVfaW5mbyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4dF9mcmFtZV9p bmZvKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dCAqKV9fcHl4X3Zfc2VsZikpOworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKysK KytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfNmdldF9uZXh0X2ZyYW1lX2luZm8oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmKSB7CisrICBzdHJ1Y3QgbXB2 X3JlbmRlcl9mcmFtZV9pbmZvIF9fcHl4X3ZfaW5mbzsKKysgIHN0cnVjdCBtcHZfcmVuZGVyX3Bh cmFtIF9fcHl4X3ZfcGFyYW07CisrICBpbnQgX19weXhfdl9lcnI7CisrICBQeU9iamVjdCAqX19w eXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgaW50IF9fcHl4 X3RfMTsKKy0gIHZvaWQgKl9fcHl4X3RfMjsKKy0gIGludCBfX3B5eF90XzM7CistICBpbnQgX19w eXhfdF80OworLSAgaW50cHRyX3QgX19weXhfdF81OworLSAgUHlPYmplY3QgKl9fcHl4X3RfNiA9 IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5 eF90XzggPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfOSA9IE5VTEw7CisrICBQeU9iamVj dCAqX19weXhfdF8yID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworKyAg UHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVM TDsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5h bWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoImdldF9wb2ludGVyIiwgMCk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTE5CistICogY2RlZiB2b2lkICpnZXRfcG9pbnRlcihjb25zdCBjaGFy ICpuYW1lLCBvYmplY3Qgb2JqKToKKy0gKiAgICAgY2RlZiB2b2lkICpwCistICogICAgIGlmIFB5 Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwgbmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgIHAgPSBQeUNhcHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCistICogICAg IGVsaWYgaXNpbnN0YW5jZShvYmosIGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBv Ymo6CistICovCistICBfX3B5eF90XzEgPSAoUHlDYXBzdWxlX0lzVmFsaWQoX19weXhfdl9vYmos IF9fcHl4X3ZfbmFtZSkgIT0gMCk7CistICBpZiAoX19weXhfdF8xKSB7CisrICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiZ2V0X25leHRfZnJhbWVfaW5mbyIsIDApOworIAorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTIwCistICogICAgIGNkZWYgdm9pZCAqcAor LSAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxpZChvYmosIG5hbWUpOgorLSAqICAgICAgICAgcCA9 IFB5Q2Fwc3VsZV9HZXRQb2ludGVyKG9iaiwgbmFtZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBpbnQpIG9yIGlzaW5zdGFuY2Uob2Jq LCBsb25nKSBhbmQgb2JqOgorLSAqICAgICAgICAgcCA9IDx2b2lkICo+PGludHB0cl90Pm9iagor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNDgKKysgKiAgICAgICAgICAg ICBtcHZfcmVuZGVyX3BhcmFtIHBhcmFtCisrICogCisrICogICAgICAgICBwYXJhbS50eXBlID0g TVBWX1JFTkRFUl9QQVJBTV9ORVhUX0ZSQU1FX0lORk8gICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZpbmZvCisrICogICAgICAgICB3aXRoIG5v Z2lsOgorICAqLworLSAgICBfX3B5eF90XzIgPSBQeUNhcHN1bGVfR2V0UG9pbnRlcihfX3B5eF92 X29iaiwgX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA9PSAoKHZvaWQgKilO VUxMKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDkyMCwgX19weXhfTDFfZXJy b3IpCistICAgIF9fcHl4X3ZfcCA9IF9fcHl4X3RfMjsKKysgIF9fcHl4X3ZfcGFyYW0udHlwZSA9 IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZPOworIAorLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5CistICogY2RlZiB2b2lkICpnZXRfcG9pbnRlcihjb25z dCBjaGFyICpuYW1lLCBvYmplY3Qgb2JqKToKKy0gKiAgICAgY2RlZiB2b2lkICpwCistICogICAg IGlmIFB5Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwgbmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHAgPSBQeUNhcHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCist ICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcp IGFuZCBvYmo6CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0OQorKyAq IAorKyAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9J TkZPCisrICogICAgICAgICBwYXJhbS5kYXRhID0gJmluZm8gICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBlcnIgPSBt cHZfcmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oc2VsZi5fY3R4LCBwYXJhbSkKKyAgKi8KKy0gICAg Z290byBfX3B5eF9MMzsKKy0gIH0KKysgIF9fcHl4X3ZfcGFyYW0uZGF0YSA9ICgmX19weXhfdl9p bmZvKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjEKKy0gKiAg ICAgaWYgUHlDYXBzdWxlX0lzVmFsaWQob2JqLCBuYW1lKToKKy0gKiAgICAgICAgIHAgPSBQeUNh cHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCistICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmos IGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHAgPSA8dm9pZCAqPjxpbnRwdHJfdD5vYmoKKy0gKiAg ICAgZWxzZToKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDUwCisrICog ICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9ORVhUX0ZSQU1FX0lORk8KKysg KiAgICAgICAgIHBhcmFtLmRhdGEgPSAmaW5mbworKyAqICAgICAgICAgd2l0aCBub2dpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5k ZXJfY29udGV4dF9nZXRfaW5mbyhzZWxmLl9jdHgsIHBhcmFtKQorKyAqICAgICAgICAgaWYgZXJy IDwgMDoKKyAgKi8KKy0gIF9fcHl4X3RfMyA9IFB5SW50X0NoZWNrKF9fcHl4X3Zfb2JqKTsgCist ICBfX3B5eF90XzQgPSAoX19weXhfdF8zICE9IDApOworLSAgaWYgKCFfX3B5eF90XzQpIHsKKy0g IH0gZWxzZSB7CistICAgIF9fcHl4X3RfMSA9IF9fcHl4X3RfNDsKKy0gICAgZ290byBfX3B5eF9M NF9ib29sX2Jpbm9wX2RvbmU7CistICB9CistICBfX3B5eF90XzQgPSBQeUxvbmdfQ2hlY2soX19w eXhfdl9vYmopOyAKKy0gIF9fcHl4X3RfMyA9IChfX3B5eF90XzQgIT0gMCk7CistICBpZiAoX19w eXhfdF8zKSB7CistICB9IGVsc2UgeworLSAgICBfX3B5eF90XzEgPSBfX3B5eF90XzM7CistICAg IGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworLSAgfQorLSAgX19weXhfdF8zID0gX19Q eXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zfb2JqKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8 IDApKSBfX1BZWF9FUlIoMCwgOTIxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfMSA9IF9f cHl4X3RfMzsKKy0gIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7CistICBpZiAobGlrZWx5KF9f cHl4X3RfMSkpIHsKKysgIHsKKysgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAgICBQeVRo cmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKysgICAgICBfX1B5 eF9GYXN0R0lMX1JlbWVtYmVyKCk7CisrICAgICAgI2VuZGlmCisrICAgICAgLyp0cnk6Ki8gewor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTIyCistICogICAgICAg ICBwID0gUHlDYXBzdWxlX0dldFBvaW50ZXIob2JqLCBuYW1lKQorLSAqICAgICBlbGlmIGlzaW5z dGFuY2Uob2JqLCBpbnQpIG9yIGlzaW5zdGFuY2Uob2JqLCBsb25nKSBhbmQgb2JqOgorLSAqICAg ICAgICAgcCA9IDx2b2lkICo+PGludHB0cl90Pm9iaiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgIGVsc2U6CistICogICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJVbmtub3du IG9yIGludmFsaWQgcG9pbnRlciBvYmplY3Q6ICVyIiAlIG9iaikKKysgICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDUxCisrICogICAgICAgICBwYXJhbS5kYXRhID0g JmluZm8KKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgZXJyID0gbXB2 X3JlbmRlcl9jb250ZXh0X2dldF9pbmZvKHNlbGYuX2N0eCwgcGFyYW0pICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIGVyciA8IDA6CisrICogICAgICAgICAgICAg cmFpc2UgTVBWRXJyb3IoZXJyKQorICAqLworLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeUludF9B c19pbnRwdHJfdChfX3B5eF92X29iaik7IGlmICh1bmxpa2VseSgoX19weXhfdF81ID09ICgoaW50 cHRyX3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDkyMiwgX19weXhf TDFfZXJyb3IpCistICAgIF9fcHl4X3ZfcCA9ICgodm9pZCAqKSgoaW50cHRyX3QpX19weXhfdF81 KSk7CisrICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhf X3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW0pOworKyAgICAgIH0KKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyMQorLSAqICAgICBpZiBQeUNhcHN1bGVf SXNWYWxpZChvYmosIG5hbWUpOgorLSAqICAgICAgICAgcCA9IFB5Q2Fwc3VsZV9HZXRQb2ludGVy KG9iaiwgbmFtZSkKKy0gKiAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgaW50KSBvciBpc2luc3Rh bmNlKG9iaiwgbG9uZykgYW5kIG9iajogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgcCA9IDx2b2lkICo+PGludHB0cl90Pm9iagorLSAqICAgICBlbHNlOgorKyAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDUwCisrICogICAgICAgICBwYXJh bS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9ORVhUX0ZSQU1FX0lORk8KKysgKiAgICAgICAgIHBh cmFtLmRhdGEgPSAmaW5mbworKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9n ZXRfaW5mbyhzZWxmLl9jdHgsIHBhcmFtKQorKyAqICAgICAgICAgaWYgZXJyIDwgMDoKKyAgKi8K Ky0gICAgZ290byBfX3B5eF9MMzsKKysgICAgICAvKmZpbmFsbHk6Ki8geworKyAgICAgICAgLypu b3JtYWwgZXhpdDoqL3sKKysgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgICAg IF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CisrICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKysg ICAgICAgICAgI2VuZGlmCisrICAgICAgICAgIGdvdG8gX19weXhfTDU7CisrICAgICAgICB9Cisr ICAgICAgICBfX3B5eF9MNTo7CisrICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjkyNAorLSAqICAgICAgICAgcCA9IDx2b2lkICo+PGludHB0cl90 Pm9iagorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigiVW5rbm93 biBvciBpbnZhbGlkIHBvaW50ZXIgb2JqZWN0OiAlciIgJSBvYmopICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgcmV0dXJuIHAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDUyCisrICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAg IGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhzZWxmLl9jdHgsIHBhcmFtKQorKyAq ICAgICAgICAgaWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKyAgKiAKKyAgKi8KKy0gIC8qZWxzZSovIHsK Ky0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzcsIF9fcHl4X25fc19QeU1Q VkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgOTI0LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICAgIF9fcHl4X3Rf OCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdFNhZmUoX19weXhfa3Bfc19Vbmtub3duX29yX2ludmFs aWRfcG9pbnRlcl9vYmplYywgX19weXhfdl9vYmopOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOCkp IF9fUFlYX0VSUigwLCA5MjQsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF84KTsKKy0gICAgX19weXhfdF85ID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzcpKSkgeworLSAgICAg IF9fcHl4X3RfOSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNyk7CistICAgICAgaWYgKGxp a2VseShfX3B5eF90XzkpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhv ZF9HRVRfRlVOQ1RJT04oX19weXhfdF83KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzkpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdF83LCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9f cHl4X3RfNiA9IChfX3B5eF90XzkpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf NywgX19weXhfdF85LCBfX3B5eF90XzgpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzcsIF9fcHl4X3RfOCk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19weXhf dF85ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7Cist ICAgIGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkyNCwgX19weXhfTDFf ZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgICBfX1B5eF9ERUNSRUYo X19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gICAgX19QeXhfUmFpc2UoX19weXhfdF82LCAw LCAwLCAwKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cist ICAgIF9fUFlYX0VSUigwLCA5MjQsIF9fcHl4X0wxX2Vycm9yKQorLSAgfQorLSAgX19weXhfTDM6 OworKyAgX19weXhfdF8xID0gKChfX3B5eF92X2VyciA8IDApICE9IDApOworKyAgaWYgKHVubGlr ZWx5KF9fcHl4X3RfMSkpIHsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5MjUKKy0gKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlVua25v d24gb3IgaW52YWxpZCBwb2ludGVyIG9iamVjdDogJXIiICUgb2JqKQorLSAqICAgICByZXR1cm4g cCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDUzCisrICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250 ZXh0X2dldF9pbmZvKHNlbGYuX2N0eCwgcGFyYW0pCisrICogICAgICAgICBpZiBlcnIgPCAwOgor KyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqIAorLSAqIEBjeXRob24uaW50ZXJuYWwKKysgKiAgICAgICAgIHJldHVybiBS ZW5kZXJGcmFtZUluZm8oKS5fZnJvbV9zdHJ1Y3QoJmluZm8pCisgICovCistICBfX3B5eF9yID0g X19weXhfdl9wOworLSAgZ290byBfX3B5eF9MMDsKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFs TmFtZShfX3B5eF90XzMsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDAsIDEwNTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8zKTsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19w eXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDUzLCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgIF9fcHl4 X3RfNSA9IE5VTEw7CisrICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHko UHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKKysgICAgICBfX3B5eF90XzUgPSBQeU1ldGhv ZF9HRVRfU0VMRihfX3B5eF90XzMpOworKyAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgewor KyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfMyk7CisrICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKysgICAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywg ZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQorKyAgICBfX3B5eF90XzIgPSAoX19weXhfdF81 KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNSwgX19weXhf dF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF90XzQpOwor KyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMDUzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworKyAgICBfX1B5eF9SYWlzZShfX3B5eF90XzIsIDAsIDAsIDApOworKyAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgX19QWVhfRVJSKDAsIDEw NTMsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjkxNworLSAqICAgICAgICAgICAgICAgICBmcmVlKHNlbGYucGFyYW1zW2ldLmRhdGEpCisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDUyCisrICogICAgICAgICB3 aXRoIG5vZ2lsOgorKyAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRf aW5mbyhzZWxmLl9jdHgsIHBhcmFtKQorKyAqICAgICAgICAgaWYgZXJyIDwgMDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikK KyAgKiAKKy0gKiBjZGVmIHZvaWQgKmdldF9wb2ludGVyKGNvbnN0IGNoYXIgKm5hbWUsIG9iamVj dCBvYmopOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgdm9pZCAq cAorLSAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxpZChvYmosIG5hbWUpOgorLSAqLworLQorLSAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfOCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7CistICBf X1B5eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5nZXRfcG9pbnRlciIsIF9f cHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUsIDEsIDApOworLSAgX19w eXhfciA9IDA7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0KKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTI5CistICogQGN5dGhvbi5pbnRlcm5hbAorLSAqIGNkZWYgY2xhc3MgUmVuZGVy RnJhbWVJbmZvKG9iamVjdCk6CistICogICAgIGNkZWYgX2Zyb21fc3RydWN0KHNlbGYsIG1wdl9y ZW5kZXJfZnJhbWVfaW5mbyAqaW5mbyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgIHNlbGYucHJlc2VudCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJf RlJBTUVfSU5GT19QUkVTRU5UKQorLSAqICAgICAgICAgc2VsZi5yZWRyYXcgPSBib29sKGluZm9b MF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUkVEUkFXKQorLSAqLworLQorLXN0YXRp YyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUlu Zm9fX2Zyb21fc3RydWN0KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Jl bmRlckZyYW1lSW5mbyAqX19weXhfdl9zZWxmLCBzdHJ1Y3QgbXB2X3JlbmRlcl9mcmFtZV9pbmZv ICpfX3B5eF92X2luZm8pIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0g IGludCBfX3B5eF90XzI7CistICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0IGNoYXIg Kl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfZnJvbV9zdHJ1Y3QiLCAwKTsKKy0KKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzAKKy0gKiBjZGVmIGNsYXNzIFJlbmRlckZy YW1lSW5mbyhvYmplY3QpOgorLSAqICAgICBjZGVmIF9mcm9tX3N0cnVjdChzZWxmLCBtcHZfcmVu ZGVyX2ZyYW1lX2luZm8gKmluZm8pOgorLSAqICAgICAgICAgc2VsZi5wcmVzZW50ID0gYm9vbChp bmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBd LmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFRFJBVykKKy0gKiAgICAgICAgIHNlbGYu cmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVB VCkKKy0gKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKChfX3B5 eF92X2luZm9bMF0pLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMwLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhf RVJSKDAsIDkzMCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISgh X19weXhfdF8yKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzAs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19Q eXhfUHlPYmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhf bl9zX3ByZXNlbnQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMwLCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLQorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMQorLSAqICAgICBjZGVmIF9mcm9t X3N0cnVjdChzZWxmLCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKmluZm8pOgorLSAqICAgICAgICAg c2VsZi5wcmVzZW50ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZP X1BSRVNFTlQpCistICogICAgICAgICBzZWxmLnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFncyAm IE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgIHNlbGYucmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JF TkRFUl9GUkFNRV9JTkZPX1JFUEVBVCkKKy0gKiAgICAgICAgIHNlbGYuYmxvY2tfdnN5bmMgPSBi b29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpCist ICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KCgoX19weXhfdl9p bmZvWzBdKS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNU cnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAs IDkzMSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISghX19weXhf dF8yKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzEsIF9fcHl4 X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhfUHlP YmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX3Jl ZHJhdywgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCA5MzEsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTMyCistICogICAgICAgICBzZWxmLnByZXNlbnQg PSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fUFJFU0VOVCkKKy0g KiAgICAgICAgIHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9G UkFNRV9JTkZPX1JFRFJBVykKKy0gKiAgICAgICAgIHNlbGYucmVwZWF0ID0gYm9vbChpbmZvWzBd LmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVBVCkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5ibG9ja192c3luYyA9IGJvb2woaW5mb1swXS5m bGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19CTE9DS19WU1lOQykKKy0gKiAgICAgICAgIHNl bGYudGFyZ2V0X3RpbWUgPSBpbmZvWzBdLnRhcmdldF90aW1lCistICovCistICBfX3B5eF90XzEg PSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KCgoX19weXhfdl9pbmZvWzBdKS5mbGFncyAmIE1Q Vl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgOTMyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlm ICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDkzMiwgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4 X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISghX19weXhfdF8yKSkpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cigo KFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX3JlcGVhdCwgX19weXhfdF8xKSA8 IDApIF9fUFlYX0VSUigwLCA5MzIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTMzCistICogICAgICAgICBzZWxmLnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFn cyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpCistICogICAgICAgICBzZWxmLnJlcGVh dCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpCist ICogICAgICAgICBzZWxmLmJsb2NrX3ZzeW5jID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JF TkRFUl9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICBzZWxmLnRhcmdldF90aW1lID0gaW5mb1swXS50YXJnZXRfdGltZQorLSAq ICAgICAgICAgcmV0dXJuIHNlbGYKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zy b21fdWludDY0X3QoKChfX3B5eF92X2luZm9bMF0pLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9J TkZPX0JMT0NLX1ZTWU5DKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDkzMywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9f cHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtlbHko X19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX3B5eF90XzEgPSBfX1B5 eF9QeUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3RfMikpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAq KV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19ibG9ja192c3luYywgX19weXhfdF8xKSA8IDApIF9f UFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisrICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTM0CistICogICAgICAgICBzZWxmLnJlcGVhdCA9IGJvb2woaW5mb1swXS5mbGFn cyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpCistICogICAgICAgICBzZWxmLmJsb2Nr X3ZzeW5jID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX0JMT0NL X1ZTWU5DKQorLSAqICAgICAgICAgc2VsZi50YXJnZXRfdGltZSA9IGluZm9bMF0udGFyZ2V0X3Rp bWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIHNlbGYK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU1CisrICogICAgICAgICAg ICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorICAqIAorLSAqLworLSAgX19weXhfdF8xID0gX19QeXhf UHlJbnRfRnJvbV9pbnQ2NF90KChfX3B5eF92X2luZm9bMF0pLnRhcmdldF90aW1lKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTM0LCBfX3B5eF9MMV9lcnJvcikKKy0g IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJT dHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc190YXJnZXRfdGltZSwgX19w eXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCA5MzQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTM1CistICogICAgICAgICBzZWxmLmJsb2NrX3ZzeW5jID0gYm9v bChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKQorLSAq ICAgICAgICAgc2VsZi50YXJnZXRfdGltZSA9IGluZm9bMF0udGFyZ2V0X3RpbWUKKy0gKiAgICAg ICAgIHJldHVybiBzZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAg IHJldHVybiBSZW5kZXJGcmFtZUluZm8oKS5fZnJvbV9zdHJ1Y3QoJmluZm8pICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiBjZGVmIGNsYXNzIFJlbmRlckNvbnRleHQob2Jq ZWN0KToKKysgKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOgorICAqLwor ICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICop X19weXhfdl9zZWxmKSk7CistICBfX3B5eF9yID0gKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZik7 CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVjdCAqKV9f cHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8pKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTA1NSwgX19weXhfTDFfZXJyb3IpCisr ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fcHl4X3RfMyA9ICgoc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKSgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICopX19w eXhfdF8yKS0+X19weXhfdnRhYiktPl9mcm9tX3N0cnVjdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKV9fcHl4X3RfMiksICgmX19weXhf dl9pbmZvKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDEwNTUsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9ERUNS RUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fcHl4X3IgPSBfX3B5eF90XzM7Cisr ICBfX3B5eF90XzMgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5MjkKKy0gKiBAY3l0aG9uLmludGVybmFsCistICogY2RlZiBj bGFzcyBSZW5kZXJGcmFtZUluZm8ob2JqZWN0KToKKy0gKiAgICAgY2RlZiBfZnJvbV9zdHJ1Y3Qo c2VsZiwgbXB2X3JlbmRlcl9mcmFtZV9pbmZvICppbmZvKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5wcmVzZW50ID0gYm9vbChpbmZvWzBdLmZsYWdzICYg TVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpCistICogICAgICAgICBzZWxmLnJlZHJhdyA9 IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpCisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0MworKyAqICAgICAgICAgcmV0dXJu IGVycgorKyAqIAorKyAqICAgICBkZWYgZ2V0X25leHRfZnJhbWVfaW5mbyhzZWxmKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZjoKKysgKiAgICAgICAgICAg ICBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gaW5mbworICAqLworIAorICAgLyogZnVuY3Rpb24gZXhp dCBjb2RlICovCisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJGcmFt ZUluZm8uX2Zyb21fc3RydWN0IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7CistICBfX3B5eF9yID0gMDsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsK KysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80 KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckNvbnRleHQuZ2V0X25leHRfZnJhbWVfaW5mbyIsIF9f cHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhfciA9 IE5VTEw7CisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAor LS8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgY2RlZiB0dXBsZSBzdGF0ZQor LSAqICAgICBjZGVmIG9iamVjdCBfZGljdAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDU3CisrICogICAgICAgICByZXR1cm4gUmVuZGVyRnJhbWVJbmZvKCkuX2Zyb21fc3Ry dWN0KCZpbmZvKQorKyAqIAorKyAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBj Yik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHdpdGggbm9naWw6 CisrICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3NldF91cGRhdGVfY2FsbGJhY2so c2VsZi5fY3R4LCAmX2NfdXBkYXRlY2IsIDx2b2lkICo+Y2IpCisgICovCisgCisgLyogUHl0aG9u IHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNVJlbmRlckZyYW1lSW5mb18xX19yZWR1Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4 X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFt ZUluZm9fMV9fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9V TlVTRUQgUHlPYmplY3QgKnVudXNlZCkgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF85c2V0X3VwZGF0ZV9jYWxsYmFjayhQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9jYik7IC8qcHJvdG8qLwor K3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVy Q29udGV4dF85c2V0X3VwZGF0ZV9jYWxsYmFjayhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9jYikgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3Jl ZHVjZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX19yZWR1Y2VfY3l0aG9uX18oKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKilf X3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfdXBkYXRl X2NhbGxiYWNrICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfOHNldF91cGRhdGVfY2FsbGJhY2soKChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopX19weXhf dl9zZWxmKSwgKChQeU9iamVjdCAqKV9fcHl4X3ZfY2IpKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4g X19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX19yZWR1Y2VfY3l0aG9uX18oc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICpfX3B5eF92X3NlbGYp IHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X3N0YXRlID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92 X19kaWN0ID0gMDsKKy0gIGludCBfX3B5eF92X3VzZV9zZXRzdGF0ZTsKKytzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfOHNldF91 cGRhdGVfY2FsbGJhY2soc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVu ZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9jYikgeworICAgUHlP YmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0g IFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfMjsKKy0gIGludCBf X3B5eF90XzM7CistICBQeU9iamVjdCAqX19weXhfdF80ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpf X3B5eF90XzUgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFy ICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18iLCAwKTsKKy0KKy0g IC8qICIodHJlZSBmcmFnbWVudCkiOjUKKy0gKiAgICAgY2RlZiBvYmplY3QgX2RpY3QKKy0gKiAg ICAgY2RlZiBiaW50IHVzZV9zZXRzdGF0ZQorLSAqICAgICBzdGF0ZSA9ICgpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3Rf XycsIE5vbmUpCistICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorLSAqLworLSAgX19QeXhf SU5DUkVGKF9fcHl4X2VtcHR5X3R1cGxlKTsKKy0gIF9fcHl4X3Zfc3RhdGUgPSBfX3B5eF9lbXB0 eV90dXBsZTsKKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjYKKy0gKiAgICAgY2RlZiBiaW50 IHVzZV9zZXRzdGF0ZQorLSAqICAgICBzdGF0ZSA9ICgpCistICogICAgIF9kaWN0ID0gZ2V0YXR0 cihzZWxmLCAnX19kaWN0X18nLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorLSAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0 LCkKKy0gKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEF0dHIzKCgoUHlPYmplY3QgKilfX3B5 eF92X3NlbGYpLCBfX3B5eF9uX3NfZGljdCwgUHlfTm9uZSk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CistICBfX3B5eF92X19kaWN0ID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0g MDsKKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjcKKy0gKiAgICAgc3RhdGUgPSAoKQorLSAq ICAgICBfZGljdCA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywgTm9uZSkKKy0gKiAgICAgaWYg X2RpY3QgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIHN0YXRlICs9IChfZGljdCwpCistICogICAgICAgICB1c2Vfc2V0c3RhdGUgPSBUcnVlCist ICovCistICBfX3B5eF90XzIgPSAoX19weXhfdl9fZGljdCAhPSBQeV9Ob25lKTsKKy0gIF9fcHl4 X3RfMyA9IChfX3B5eF90XzIgIT0gMCk7CistICBpZiAoX19weXhfdF8zKSB7CistCistICAgIC8q ICIodHJlZSBmcmFnbWVudCkiOjgKKy0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2Rp Y3RfXycsIE5vbmUpCistICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOgorLSAqICAgICAgICAg c3RhdGUgKz0gKF9kaWN0LCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgdXNlX3NldHN0YXRlID0gVHJ1ZQorLSAqICAgICBlbHNlOgorLSAqLworLSAgICBfX3B5eF90 XzEgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MSwgOCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAg ICBfX1B5eF9JTkNSRUYoX19weXhfdl9fZGljdCk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhf dl9fZGljdCk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAwLCBfX3B5eF92X19k aWN0KTsKKy0gICAgX19weXhfdF80ID0gUHlOdW1iZXJfSW5QbGFjZUFkZChfX3B5eF92X3N0YXRl LCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCA4LCBf X3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICBfX1B5eF9ERUNSRUZfU0VU KF9fcHl4X3Zfc3RhdGUsICgoUHlPYmplY3QqKV9fcHl4X3RfNCkpOworLSAgICBfX3B5eF90XzQg PSAwOworLQorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo5CistICogICAgIGlmIF9kaWN0IGlz IG5vdCBOb25lOgorLSAqICAgICAgICAgc3RhdGUgKz0gKF9kaWN0LCkKKy0gKiAgICAgICAgIHVz ZV9zZXRzdGF0ZSA9IFRydWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBl bHNlOgorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gRmFsc2UKKy0gKi8KKy0gICAgX19weXhf dl91c2Vfc2V0c3RhdGUgPSAxOworLQorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3CistICog ICAgIHN0YXRlID0gKCkKKy0gKiAgICAgX2RpY3QgPSBnZXRhdHRyKHNlbGYsICdfX2RpY3RfXycs IE5vbmUpCistICogICAgIGlmIF9kaWN0IGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgICAgICBzdGF0ZSArPSAoX2RpY3QsKQorLSAqICAgICAgICAgdXNl X3NldHN0YXRlID0gVHJ1ZQorLSAqLworLSAgICBnb3RvIF9fcHl4X0wzOworLSAgfQorLQorLSAg LyogIih0cmVlIGZyYWdtZW50KSI6MTEKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IFRydWUK Ky0gKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHVzZV9zZXRzdGF0ZSA9IEZhbHNlICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgaWYgdXNlX3NldHN0YXRlOgorLSAqICAgICAg ICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4 ZDQxZDhjZCwgTm9uZSksIHN0YXRlCistICovCistICAvKmVsc2UqLyB7CistICAgIF9fcHl4X3Zf dXNlX3NldHN0YXRlID0gMDsKKy0gIH0KKy0gIF9fcHl4X0wzOjsKKysgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJzZXRfdXBkYXRlX2NhbGxiYWNrIiwgMCk7CisgCistICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxMgorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0g RmFsc2UKKy0gKiAgICAgaWYgdXNlX3NldHN0YXRlOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCAo dHlwZShzZWxmKSwgMHhkNDFkOGNkLCBOb25lKSwgc3RhdGUKKy0gKiAgICAgZWxzZToKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU4CisrICogCisrICogICAgIGRlZiBz ZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKToKKysgKiAgICAgICAgIHdpdGggbm9naWw6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2Nv bnRleHRfc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQg Kj5jYikKKysgKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKKyAgKi8KKy0gIF9fcHl4X3Rf MyA9IChfX3B5eF92X3VzZV9zZXRzdGF0ZSAhPSAwKTsKKy0gIGlmIChfX3B5eF90XzMpIHsKKysg IHsKKysgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAgICBQeVRocmVhZFN0YXRlICpfc2F2 ZTsKKysgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKysgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVt YmVyKCk7CisrICAgICAgI2VuZGlmCisrICAgICAgLyp0cnk6Ki8geworIAorLSAgICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxMworLSAqICAgICAgICAgdXNlX3NldHN0YXRlID0gRmFsc2UKKy0gKiAg ICAgaWYgdXNlX3NldHN0YXRlOgorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwgTm9uZSksIHN0YXRlICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgZWxzZToKKy0gKiAgICAgICAgIHJldHVy biBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8sICh0eXBlKHNlbGYpLCAweGQ0MWQ4Y2Qs IHN0YXRlKQorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTkK KysgKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOgorKyAqICAgICAgICAg d2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3VwZGF0 ZV9jYWxsYmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQgKj5jYikgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi51cGRhdGVfY2IgPSBjYgorKyAq IAorICAqLworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFt ZUluZm8pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCAxMywgX19weXhf TDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgICBfX3B5eF90XzEg PSBQeVR1cGxlX05ldygzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwg MTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAg X19QeXhfSU5DUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3Nl bGYpKSkpOworLSAgICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpKSkpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwg MCwgKChQeU9iamVjdCAqKVB5X1RZUEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7Cist ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9pbnRfMjIyNDE5MTQ5KTsKKy0gICAgX19QeXhfR0lWRVJF RihfX3B5eF9pbnRfMjIyNDE5MTQ5KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEs IDEsIF9fcHl4X2ludF8yMjI0MTkxNDkpOworLSAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7Cist ICAgIF9fUHl4X0dJVkVSRUYoUHlfTm9uZSk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF8xLCAyLCBQeV9Ob25lKTsKKy0gICAgX19weXhfdF81ID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1 bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKy0g ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF80 KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzUsIDAsIF9fcHl4X3RfNCk7CistICAg IF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzUsIDEsIF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3N0YXRlKTsKKy0g ICAgX19QeXhfR0lWRVJFRihfX3B5eF92X3N0YXRlKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShf X3B5eF90XzUsIDIsIF9fcHl4X3Zfc3RhdGUpOworLSAgICBfX3B5eF90XzQgPSAwOworLSAgICBf X3B5eF90XzEgPSAwOworLSAgICBfX3B5eF9yID0gX19weXhfdF81OworLSAgICBfX3B5eF90XzUg PSAwOworLSAgICBnb3RvIF9fcHl4X0wwOworKyAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3Nl dF91cGRhdGVfY2FsbGJhY2soX19weXhfdl9zZWxmLT5fY3R4LCAoJl9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2X19jX3VwZGF0ZWNiKSwgKCh2b2lkICopX19weXhfdl9jYikpOworKyAgICAg IH0KKyAKKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKKy0gKiAgICAgZWxzZToKKy0gKiAg ICAgICAgIHVzZV9zZXRzdGF0ZSA9IEZhbHNlCistICogICAgIGlmIHVzZV9zZXRzdGF0ZTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlj a2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwgTm9uZSksIHN0YXRl CistICogICAgIGVsc2U6CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwNTgKKysgKiAKKysgKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOgor KyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9zZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYu X2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKQorKyAqICAgICAgICAgc2VsZi51cGRhdGVf Y2IgPSBjYgorICAqLworKyAgICAgIC8qZmluYWxseToqLyB7CisrICAgICAgICAvKm5vcm1hbCBl eGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAgICAgICAgX19QeXhf RmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAg ICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5eF9MNTsKKysgICAgICAgIH0KKysgICAgICAg IF9fcHl4X0w1OjsKKysgICAgICB9CisgICB9CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox NQorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgKHR5 cGUoc2VsZiksIDB4ZDQxZDhjZCwgTm9uZSksIHN0YXRlCistICogICAgIGVsc2U6CistICogICAg ICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCAodHlwZShzZWxmKSwg MHhkNDFkOGNkLCBzdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIGRlZiBf X3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19weXhfdW5w aWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoc2VsZiwgX19weXhfc3RhdGUpCisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2MAorKyAqICAgICAgICAgd2l0aCBu b2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3VwZGF0ZV9jYWxs YmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQgKj5jYikKKysgKiAgICAgICAgIHNl bGYudXBkYXRlX2NiID0gY2IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAq ICAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAqLworLSAgLyplbHNlKi8geworLSAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3IpOworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf NSwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8pOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNSkpIF9fUFlYX0VSUigxLCAxNSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzUpOworLSAgICBfX3B5eF90XzEgPSBQeVR1cGxlX05ldygzKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTUsIF9fcHl4X0wxX2Vycm9yKQor LSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfSU5DUkVGKCgoUHlPYmpl Y3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkpOworLSAgICBfX1B5eF9H SVZFUkVGKCgoUHlPYmplY3QgKilQeV9UWVBFKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKSkp OworLSAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMSwgMCwgKChQeU9iamVjdCAqKVB5X1RZ UEUoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpKSk7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF9pbnRfMjIyNDE5MTQ5KTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF9pbnRfMjIyNDE5MTQ5 KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4X2ludF8yMjI0MTkx NDkpOworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9zdGF0ZSk7CistICAgIF9fUHl4X0dJVkVS RUYoX19weXhfdl9zdGF0ZSk7CistICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xLCAyLCBf X3B5eF92X3N0YXRlKTsKKy0gICAgX19weXhfdF80ID0gUHlUdXBsZV9OZXcoMik7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEsIDE1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF81KTsK Ky0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDAsIF9fcHl4X3RfNSk7CistICAgIF9f UHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQs IDEsIF9fcHl4X3RfMSk7CistICAgIF9fcHl4X3RfNSA9IDA7CistICAgIF9fcHl4X3RfMSA9IDA7 CistICAgIF9fcHl4X3IgPSBfX3B5eF90XzQ7CistICAgIF9fcHl4X3RfNCA9IDA7CistICAgIGdv dG8gX19weXhfTDA7CistICB9CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9jYik7CisrICBfX1B5 eF9HSVZFUkVGKF9fcHl4X3ZfY2IpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+dXBk YXRlX2NiKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnVwZGF0ZV9jYik7CisrICBf X3B5eF92X3NlbGYtPnVwZGF0ZV9jYiA9IF9fcHl4X3ZfY2I7CisgCistICAvKiAiKHRyZWUgZnJh Z21lbnQpIjoxCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgdHVwbGUgc3RhdGUKKy0gKiAgICAgY2RlZiBv YmplY3QgX2RpY3QKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU3Cisr ICogICAgICAgICByZXR1cm4gUmVuZGVyRnJhbWVJbmZvKCkuX2Zyb21fc3RydWN0KCZpbmZvKQor KyAqIAorKyAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAg ICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3NldF91cGRhdGVfY2FsbGJhY2soc2VsZi5fY3R4LCAm X2NfdXBkYXRlY2IsIDx2b2lkICo+Y2IpCisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNv ZGUgKi8KKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsK Ky0gIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81 KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckZyYW1l SW5mby5fX3JlZHVjZV9jeXRob25fXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19w eXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7CistICBfX3B5eF9MMDo7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3Zfc3RhdGUpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X19kaWN0 KTsKKysgIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisgICBfX1B5 eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOwor ICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICIodHJlZSBmcmFnbWVudCkiOjE2CistICog ICAgIGVsc2U6CistICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJ bmZvLCAodHlwZShzZWxmKSwgMHhkNDFkOGNkLCBzdGF0ZSkKKy0gKiBkZWYgX19zZXRzdGF0ZV9j eXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoc2VsZiwg X19weXhfc3RhdGUpCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjIKKysg KiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKKysgKiAKKysgKiAgICAgZGVmIHVwZGF0ZShz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgY2RlZiB1aW50 NjRfdCByZXQKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisgICovCisgCisgLyogUHl0aG9uIHdy YXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNVJlbmRlckZyYW1lSW5mb18zX19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhf dl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qcHJvdG8qLworLXN0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE1UmVuZGVyRnJhbWVJ bmZvXzNfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzExdXBkYXRlKFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF8xMXVwZGF0ZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2Jq ZWN0ICp1bnVzZWQpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRzdGF0 ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fMl9fc2V0c3RhdGVfY3l0aG9uX18oKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKilf X3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOworKyAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVwZGF0ZSAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4 X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEwdXBk YXRlKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dCAqKV9fcHl4X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNVJlbmRl ckZyYW1lSW5mb18yX19zZXRzdGF0ZV9jeXRob25fXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3ZfX19weXhfc3RhdGUpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTB1cGRhdGUoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmKSB7CisrICB1 aW50NjRfdCBfX3B5eF92X3JldDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsK KyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUg PSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18iLCAwKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJ1cGRhdGUiLCAwKTsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjE3Cist ICogICAgICAgICByZXR1cm4gX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCAodHlwZShz ZWxmKSwgMHhkNDFkOGNkLCBzdGF0ZSkKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxm LCBfX3B5eF9zdGF0ZSk6CistICogICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19f c2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2NAorKyAqICAgICBkZWYg dXBkYXRlKHNlbGYpOgorKyAqICAgICAgICAgY2RlZiB1aW50NjRfdCByZXQKKysgKiAgICAgICAg IHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICByZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRfdXBkYXRlKHNlbGYuX2N0eCkKKysgKiAgICAgICAg IHJldHVybiByZXQKKyAgKi8KKy0gIGlmICghKGxpa2VseShQeVR1cGxlX0NoZWNrRXhhY3QoX19w eXhfdl9fX3B5eF9zdGF0ZSkpfHwoKF9fcHl4X3ZfX19weXhfc3RhdGUpID09IFB5X05vbmUpfHwo UHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkV4cGVjdGVkICUuMTZzLCBnb3QgJS4yMDBz IiwgInR1cGxlIiwgUHlfVFlQRShfX3B5eF92X19fcHl4X3N0YXRlKS0+dHBfbmFtZSksIDApKSkg X19QWVhfRVJSKDEsIDE3LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfMSA9IF9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0 X3N0YXRlKF9fcHl4X3Zfc2VsZiwgKChQeU9iamVjdCopX19weXhfdl9fX3B5eF9zdGF0ZSkpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNywgX19weXhfTDFfZXJyb3Ip CisrICB7CisrICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlUaHJlYWRTdGF0ZSAq X3NhdmU7CisrICAgICAgUHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19QeXhfRmFzdEdJTF9S ZW1lbWJlcigpOworKyAgICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsKKysKKysgICAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY1CisrICogICAgICAgICBjZGVm IHVpbnQ2NF90IHJldAorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBy ZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRfdXBkYXRlKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmV0dXJuIHJldAorKyAqIAorKyAqLworKyAgICAg ICAgX19weXhfdl9yZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRfdXBkYXRlKF9fcHl4X3Zfc2VsZi0+ X2N0eCk7CisrICAgICAgfQorKworKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDY0CisrICogICAgIGRlZiB1cGRhdGUoc2VsZik6CisrICogICAgICAgICBjZGVmIHVp bnQ2NF90IHJldAorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldCA9IG1wdl9yZW5kZXJfY29udGV4dF91cGRhdGUo c2VsZi5fY3R4KQorKyAqICAgICAgICAgcmV0dXJuIHJldAorKyAqLworKyAgICAgIC8qZmluYWxs eToqLyB7CisrICAgICAgICAvKm5vcm1hbCBleGl0OioveworKyAgICAgICAgICAjaWZkZWYgV0lU SF9USFJFQUQKKysgICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKysgICAgICAgICAg UHlfQkxPQ0tfVEhSRUFEUworKyAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgZ290byBfX3B5 eF9MNTsKKysgICAgICAgIH0KKysgICAgICAgIF9fcHl4X0w1OjsKKysgICAgICB9CisrICB9Cisr CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2NgorKyAqICAgICAgICAg d2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICByZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRfdXBk YXRlKHNlbGYuX2N0eCkKKysgKiAgICAgICAgIHJldHVybiByZXQgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqLworKyAgX19QeXhfWERFQ1JF RihfX3B5eF9yKTsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoX19w eXhfdl9yZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDY2LCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX3B5eF9yID0gX19weXhfdF8xOwor KyAgX19weXhfdF8xID0gMDsKKysgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAiKHRyZWUgZnJh Z21lbnQpIjoxNgorLSAqICAgICBlbHNlOgorLSAqICAgICAgICAgcmV0dXJuIF9fcHl4X3VucGlj a2xlX1JlbmRlckZyYW1lSW5mbywgKHR5cGUoc2VsZiksIDB4ZDQxZDhjZCwgc3RhdGUpCistICog ZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19f c2V0X3N0YXRlKHNlbGYsIF9fcHl4X3N0YXRlKQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwNjIKKysgKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKKysgKiAKKysg KiAgICAgZGVmIHVwZGF0ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgY2RlZiB1aW50NjRfdCByZXQKKysgKiAgICAgICAgIHdpdGggbm9naWw6CisgICov CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQeV9Ob25lOyBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworICAgX19weXhfTDFfZXJy b3I6OworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyRnJhbWVJbmZvLl9fc2V0c3RhdGVfY3l0aG9uX18i LCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckNvbnRleHQudXBkYXRlIiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5eF9y ID0gTlVMTDsKKyAgIF9fcHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworQEAg LTE4OTAyLDk4ICsxODIxOCw4MCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNVJlbmRlckZyYW1lSW5mb18yX19zZXRzdGF0ZV9jeQorICAgcmV0dXJu IF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTAK Ky0gKiAgICAgICAgIGJpbnQgaW5pdGVkCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwNjkKKyAgKiAKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1wdiwgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICAgYXBpX3R5cGUsCistICog ICAgICAgICAgICAgICAgICBvcGVuZ2xfaW5pdF9wYXJhbXM9Tm9uZSwKKysgKiAgICAgQF9lcnJv cnMKKysgKiAgICAgZGVmIHJlbmRlcihzZWxmLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLAorKyAqICAgICAgICAgICAgICAg IGZsaXBfeT1GYWxzZSwKKyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBp bnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0 X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0 ICpfX3B5eF9rd2RzKTsgLypwcm90byovCistc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKy0gIFB5 T2JqZWN0ICpfX3B5eF92X21wdiA9IDA7CistICBQeU9iamVjdCAqX19weXhfdl9hcGlfdHlwZSA9 IDA7CistICBQeU9iamVjdCAqX19weXhfdl9vcGVuZ2xfaW5pdF9wYXJhbXMgPSAwOworLSAgUHlP YmplY3QgKl9fcHl4X3ZfYWR2YW5jZWRfY29udHJvbCA9IDA7CistICBQeU9iamVjdCAqX19weXhf dl94MTFfZGlzcGxheSA9IDA7CistICBQeU9iamVjdCAqX19weXhfdl93bF9kaXNwbGF5ID0gMDsK Ky0gIFB5T2JqZWN0ICpfX3B5eF92X2RybV9kaXNwbGF5ID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5 eF92X2RybV9vc2Rfc2l6ZSA9IDA7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEzcmVuZGVyKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJv dG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz UmVuZGVyQ29udGV4dF8xM3JlbmRlcihQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF92 X29wZW5nbF9mYm8gPSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfZmxpcF95ID0gMDsKKysgIFB5 T2JqZWN0ICpfX3B5eF92X2RlcHRoID0gMDsKKysgIFB5T2JqZWN0ICpfX3B5eF92X2Jsb2NrX2Zv cl90YXJnZXRfdGltZSA9IDA7CisrICBQeU9iamVjdCAqX19weXhfdl9za2lwX3JlbmRlcmluZyA9 IDA7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVu YW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIGludCBfX3B5eF9yOwor KyAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK Ky0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyAod3JhcHBlcikiLCAwKTsK KysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJyZW5kZXIgKHdyYXBwZXIpIiwgMCk7Cisg ICB7CistICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhf bl9zX21wdiwmX19weXhfbl9zX2FwaV90eXBlLCZfX3B5eF9uX3Nfb3BlbmdsX2luaXRfcGFyYW1z LCZfX3B5eF9uX3NfYWR2YW5jZWRfY29udHJvbCwmX19weXhfbl9zX3gxMV9kaXNwbGF5LCZfX3B5 eF9uX3Nfd2xfZGlzcGxheSwmX19weXhfbl9zX2RybV9kaXNwbGF5LCZfX3B5eF9uX3NfZHJtX29z ZF9zaXplLDB9OworLSAgICBQeU9iamVjdCogdmFsdWVzWzhdID0gezAsMCwwLDAsMCwwLDAsMH07 CistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTIKKy0gKiAgICAg ZGVmIF9faW5pdF9fKHNlbGYsIG1wdiwKKy0gKiAgICAgICAgICAgICAgICAgIGFwaV90eXBlLAor LSAqICAgICAgICAgICAgICAgICAgb3BlbmdsX2luaXRfcGFyYW1zPU5vbmUsICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgIGFkdmFuY2VkX2NvbnRyb2w9 RmFsc2UsCistICogICAgICAgICAgICAgICAgICB4MTFfZGlzcGxheT1Ob25lLAorLSAqLworLSAg ICB2YWx1ZXNbMl0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7CisrICAgIHN0YXRpYyBQeU9iamVj dCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX29wZW5nbF9mYm8sJl9fcHl4X25f c19mbGlwX3ksJl9fcHl4X25fc19kZXB0aCwmX19weXhfbl9zX2Jsb2NrX2Zvcl90YXJnZXRfdGlt ZSwmX19weXhfbl9zX3NraXBfcmVuZGVyaW5nLDB9OworKyAgICBQeU9iamVjdCogdmFsdWVzWzVd ID0gezAsMCwwLDAsMH07CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5NTMKKy0gKiAgICAgICAgICAgICAgICAgIGFwaV90eXBlLAorLSAqICAgICAgICAgICAgICAg ICAgb3BlbmdsX2luaXRfcGFyYW1zPU5vbmUsCistICogICAgICAgICAgICAgICAgICBhZHZhbmNl ZF9jb250cm9sPUZhbHNlLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAgICAgICAgICB4MTFfZGlzcGxheT1Ob25lLAorLSAqICAgICAgICAgICAgICAgICAgd2xfZGlz cGxheT1Ob25lLAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MAor KyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgcmVuZGVyKHNlbGYsCisrICogICAgICAgICAg ICAgICAgb3BlbmdsX2Zibz1Ob25lLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorKyAqICAgICAgICAgICAgICAgIGRlcHRoPU5v bmUsCisgICovCistICAgIHZhbHVlc1szXSA9ICgoUHlPYmplY3QgKilQeV9GYWxzZSk7CisrICAg IHZhbHVlc1swXSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk1NAorLSAqICAgICAgICAgICAgICAgICAgb3BlbmdsX2lu aXRfcGFyYW1zPU5vbmUsCistICogICAgICAgICAgICAgICAgICBhZHZhbmNlZF9jb250cm9sPUZh bHNlLAorLSAqICAgICAgICAgICAgICAgICAgeDExX2Rpc3BsYXk9Tm9uZSwgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICAgd2xfZGlzcGxheT1Ob25lLAor LSAqICAgICAgICAgICAgICAgICAgZHJtX2Rpc3BsYXk9Tm9uZSwKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwNzEKKysgKiAgICAgZGVmIHJlbmRlcihzZWxmLAorKyAq ICAgICAgICAgICAgICAgIG9wZW5nbF9mYm89Tm9uZSwKKysgKiAgICAgICAgICAgICAgICBmbGlw X3k9RmFsc2UsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAg ICBkZXB0aD1Ob25lLAorKyAqICAgICAgICAgICAgICAgIGJsb2NrX2Zvcl90YXJnZXRfdGltZT1U cnVlLAorICAqLworLSAgICB2YWx1ZXNbNF0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7CisrICAg IHZhbHVlc1sxXSA9ICgoUHlPYmplY3QgKilQeV9GYWxzZSk7CisgCistICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTUKKy0gKiAgICAgICAgICAgICAgICAgIGFkdmFuY2Vk X2NvbnRyb2w9RmFsc2UsCistICogICAgICAgICAgICAgICAgICB4MTFfZGlzcGxheT1Ob25lLAor LSAqICAgICAgICAgICAgICAgICAgd2xfZGlzcGxheT1Ob25lLCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgICBkcm1fZGlzcGxheT1Ob25lLAorLSAqICAg ICAgICAgICAgICAgICAgZHJtX29zZF9zaXplPU5vbmUKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwNzIKKysgKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUs CisrICogICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorKyAqICAgICAgICAgICAgICAgIGRl cHRoPU5vbmUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAg ICBibG9ja19mb3JfdGFyZ2V0X3RpbWU9VHJ1ZSwKKysgKiAgICAgICAgICAgICAgICBza2lwX3Jl bmRlcmluZz1GYWxzZSk6CisgICovCistICAgIHZhbHVlc1s1XSA9ICgoUHlPYmplY3QgKilQeV9O b25lKTsKKysgICAgdmFsdWVzWzJdID0gKChQeU9iamVjdCAqKVB5X05vbmUpOworIAorLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTU2CistICogICAgICAgICAgICAgICAg ICB4MTFfZGlzcGxheT1Ob25lLAorLSAqICAgICAgICAgICAgICAgICAgd2xfZGlzcGxheT1Ob25l LAorLSAqICAgICAgICAgICAgICAgICAgZHJtX2Rpc3BsYXk9Tm9uZSwgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICAgZHJtX29zZF9zaXplPU5vbmUKKy0g KiAgICAgICAgICAgICAgICAgICk6CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDczCisrICogICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorKyAqICAgICAgICAg ICAgICAgIGRlcHRoPU5vbmUsCisrICogICAgICAgICAgICAgICAgYmxvY2tfZm9yX3RhcmdldF90 aW1lPVRydWUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAg ICBza2lwX3JlbmRlcmluZz1GYWxzZSk6CisrICogCisgICovCistICAgIHZhbHVlc1s2XSA9ICgo UHlPYmplY3QgKilQeV9Ob25lKTsKKysgICAgdmFsdWVzWzNdID0gKChQeU9iamVjdCAqKVB5X1Ry dWUpOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTU3CistICog ICAgICAgICAgICAgICAgICB3bF9kaXNwbGF5PU5vbmUsCistICogICAgICAgICAgICAgICAgICBk cm1fZGlzcGxheT1Ob25lLAorLSAqICAgICAgICAgICAgICAgICAgZHJtX29zZF9zaXplPU5vbmUg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAgICAgKToKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNzQKKysgKiAgICAgICAgICAg ICAgICBkZXB0aD1Ob25lLAorKyAqICAgICAgICAgICAgICAgIGJsb2NrX2Zvcl90YXJnZXRfdGlt ZT1UcnVlLAorKyAqICAgICAgICAgICAgICAgIHNraXBfcmVuZGVyaW5nPUZhbHNlKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorKyAqICAgICAgICAgY2RlZjoKKyAgKi8KKy0g ICAgdmFsdWVzWzddID0gKChQeU9iamVjdCAqKVB5X05vbmUpOworKyAgICB2YWx1ZXNbNF0gPSAo KFB5T2JqZWN0ICopUHlfRmFsc2UpOworICAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsK KyAgICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CisgICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3Nf YXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CisgICAgICAgc3dpdGNoIChwb3Nf YXJncykgeworLSAgICAgICAgY2FzZSAgODogdmFsdWVzWzddID0gUHlUdXBsZV9HRVRfSVRFTShf X3B5eF9hcmdzLCA3KTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNh c2UgIDc6IHZhbHVlc1s2XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgNik7CistICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICA2OiB2YWx1ZXNbNV0gPSBQ eVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDUpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOworICAgICAgICAgY2FzZSAgNTogdmFsdWVzWzRdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5 eF9hcmdzLCA0KTsKKyAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKyAgICAgICAgIGNhc2Ug IDQ6IHZhbHVlc1szXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMyk7CitAQCAtMTkw MTAsNjIgKzE4MzA4LDQwIEBAIHN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0X18oUHlPYmplY3QgKl9fCisgICAgICAga3dfYXJn cyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworICAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsK KyAgICAgICAgIGNhc2UgIDA6CistICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5 eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfbXB2KSkgIT0gMCkpIGt3 X2FyZ3MtLTsKKy0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysg ICAgICAgIGlmIChrd19hcmdzID4gMCkgeworKyAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBf X1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nfb3BlbmdsX2Zibyk7 CisrICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbMF0gPSB2YWx1ZTsga3dfYXJncy0tOyB9 CisrICAgICAgICB9CisgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisgICAgICAgICBjYXNl ICAxOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0 ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2FwaV90eXBlKSkgIT0gMCkpIGt3X2FyZ3MtLTsK Ky0gICAgICAgIGVsc2UgeworLSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgi X19pbml0X18iLCAwLCAyLCA4LCAxKTsgX19QWVhfRVJSKDAsIDk1MCwgX19weXhfTDNfZXJyb3Ip CisrICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKysgICAgICAgICAgUHlPYmplY3QqIHZhbHVl ID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2ZsaXBfeSk7 CisrICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbMV0gPSB2YWx1ZTsga3dfYXJncy0tOyB9 CisgICAgICAgICB9CisgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisgICAgICAgICBjYXNl ICAyOgorICAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7CistICAgICAgICAgIFB5T2JqZWN0KiB2 YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19vcGVu Z2xfaW5pdF9wYXJhbXMpOworKyAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURp Y3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZGVwdGgpOworICAgICAgICAgICBp ZiAodmFsdWUpIHsgdmFsdWVzWzJdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorICAgICAgICAgfQor ICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworICAgICAgICAgY2FzZSAgMzoKKyAgICAgICAg IGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9Q eURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfYWR2YW5jZWRfY29udHJvbCk7 CisrICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9f cHl4X2t3ZHMsIF9fcHl4X25fc19ibG9ja19mb3JfdGFyZ2V0X3RpbWUpOworICAgICAgICAgICBp ZiAodmFsdWUpIHsgdmFsdWVzWzNdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorICAgICAgICAgfQor ICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworICAgICAgICAgY2FzZSAgNDoKKyAgICAgICAg IGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9Q eURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfeDExX2Rpc3BsYXkpOworKyAg ICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9r d2RzLCBfX3B5eF9uX3Nfc2tpcF9yZW5kZXJpbmcpOworICAgICAgICAgICBpZiAodmFsdWUpIHsg dmFsdWVzWzRdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQorICAgICAgICAgfQorLSAgICAgICAgQ1lU SE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgNToKKy0gICAgICAgIGlmIChrd19hcmdz ID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeURpY3RfR2V0SXRl bVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nfd2xfZGlzcGxheSk7CistICAgICAgICAgIGlmICh2 YWx1ZSkgeyB2YWx1ZXNbNV0gPSB2YWx1ZTsga3dfYXJncy0tOyB9CistICAgICAgICB9CistICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICA2OgorLSAgICAgICAgaWYg KGt3X2FyZ3MgPiAwKSB7CistICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGlj dF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19kcm1fZGlzcGxheSk7CistICAgICAg ICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNbNl0gPSB2YWx1ZTsga3dfYXJncy0tOyB9CistICAgICAg ICB9CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICA3OgorLSAg ICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7CistICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9f UHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19kcm1fb3NkX3NpemUp OworLSAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzddID0gdmFsdWU7IGt3X2FyZ3MtLTsg fQorLSAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDAp KSB7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9f cHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJfX2luaXRf XyIpIDwgMCkpIF9fUFlYX0VSUigwLCA5NTAsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYg KHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9w eWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAicmVuZGVyIikgPCAwKSkgX19QWVhfRVJS KDAsIDEwNjksIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKyAgICAg ICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpIHsKKy0gICAgICAgIGNhc2Ug IDg6IHZhbHVlc1s3XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgNyk7CistICAgICAg ICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICA3OiB2YWx1ZXNbNl0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDYpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OworLSAgICAgICAgY2FzZSAgNjogdmFsdWVzWzVdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCA1KTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKyAgICAgICAgIGNhc2UgIDU6 IHZhbHVlc1s0XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgNCk7CisgICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7CisgICAgICAgICBjYXNlICA0OiB2YWx1ZXNbM10gPSBQeVR1cGxl X0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDMpOworQEAgLTE5MDczLDM2ICsxODM0OSwzNSBAQCBzdGF0 aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMV9f aW5pdF9fKFB5T2JqZWN0ICpfXworICAgICAgICAgY2FzZSAgMzogdmFsdWVzWzJdID0gUHlUdXBs ZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKKyAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsK KyAgICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJn cywgMSk7CistICAgICAgICB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3Ms IDApOworLSAgICAgICAgYnJlYWs7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAg ICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDAp OworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMDogYnJlYWs7 CisgICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworICAgICAg IH0KKyAgICAgfQorLSAgICBfX3B5eF92X21wdiA9IHZhbHVlc1swXTsKKy0gICAgX19weXhfdl9h cGlfdHlwZSA9IHZhbHVlc1sxXTsKKy0gICAgX19weXhfdl9vcGVuZ2xfaW5pdF9wYXJhbXMgPSB2 YWx1ZXNbMl07CistICAgIF9fcHl4X3ZfYWR2YW5jZWRfY29udHJvbCA9IHZhbHVlc1szXTsKKy0g ICAgX19weXhfdl94MTFfZGlzcGxheSA9IHZhbHVlc1s0XTsKKy0gICAgX19weXhfdl93bF9kaXNw bGF5ID0gdmFsdWVzWzVdOworLSAgICBfX3B5eF92X2RybV9kaXNwbGF5ID0gdmFsdWVzWzZdOwor LSAgICBfX3B5eF92X2RybV9vc2Rfc2l6ZSA9IHZhbHVlc1s3XTsKKy0gIH0KKy0gIGdvdG8gX19w eXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CisrICAgIF9fcHl4X3Zfb3BlbmdsX2ZibyA9 IHZhbHVlc1swXTsKKysgICAgX19weXhfdl9mbGlwX3kgPSB2YWx1ZXNbMV07CisrICAgIF9fcHl4 X3ZfZGVwdGggPSB2YWx1ZXNbMl07CisrICAgIF9fcHl4X3ZfYmxvY2tfZm9yX3RhcmdldF90aW1l ID0gdmFsdWVzWzNdOworKyAgICBfX3B5eF92X3NraXBfcmVuZGVyaW5nID0gdmFsdWVzWzRdOwor KyAgfQorKyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKyAgIF9fcHl4 X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2lu aXRfXyIsIDAsIDIsIDgsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIo MCwgOTUwLCBfX3B5eF9MM19lcnJvcikKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJy ZW5kZXIiLCAwLCAwLCA1LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJS KDAsIDEwNjksIF9fcHl4X0wzX2Vycm9yKQorICAgX19weXhfTDNfZXJyb3I6OworLSAgX19QeXhf QWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dC5fX2luaXRfXyIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhf QWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dC5yZW5kZXIiLCBf X3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKyAgIF9fUHl4X1Jl Zk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIC0xOworKyAgcmV0dXJuIE5VTEw7Cisg ICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7CistICBfX3B5eF9yID0gX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXygoKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92 X3NlbGYpLCBfX3B5eF92X21wdiwgX19weXhfdl9hcGlfdHlwZSwgX19weXhfdl9vcGVuZ2xfaW5p dF9wYXJhbXMsIF9fcHl4X3ZfYWR2YW5jZWRfY29udHJvbCwgX19weXhfdl94MTFfZGlzcGxheSwg X19weXhfdl93bF9kaXNwbGF5LCBfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5eF92X2RybV9vc2Rf c2l6ZSk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVu ZGVyQ29udGV4dF8xMnJlbmRlcigoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X29wZW5nbF9mYm8sIF9f cHl4X3ZfZmxpcF95LCBfX3B5eF92X2RlcHRoLCBfX3B5eF92X2Jsb2NrX2Zvcl90YXJnZXRfdGlt ZSwgX19weXhfdl9za2lwX3JlbmRlcmluZyk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTUwCistICogICAgICAgICBiaW50IGluaXRlZAorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjkKKyAgKiAKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNl bGYsIG1wdiwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgICAg ICAgYXBpX3R5cGUsCistICogICAgICAgICAgICAgICAgICBvcGVuZ2xfaW5pdF9wYXJhbXM9Tm9u ZSwKKysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIHJlbmRlcihzZWxmLCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLAor KyAqICAgICAgICAgICAgICAgIGZsaXBfeT1GYWxzZSwKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLworQEAgLTE5MTEwLDc4NiArMTgzODUsNjI2IEBAIHN0YXRpYyBpbnQgX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0X18oUHlP YmplY3QgKl9fCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIGludCBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X3ZfbXB2LCBQeU9iamVjdCAqX19weXhfdl9hcGlfdHlwZSwgUHlP YmplY3QgKl9fcHl4X3Zfb3BlbmdsX2luaXRfcGFyYW1zLCBQeU9iamVjdCAqX19weXhfdl9hZHZh bmNlZF9jb250cm9sLCBQeU9iamVjdCAqX19weXhfdl94MTFfZGlzcGxheSwgUHlPYmplY3QgKl9f cHl4X3Zfd2xfZGlzcGxheSwgUHlPYmplY3QgKl9fcHl4X3ZfZHJtX2Rpc3BsYXksIFB5T2JqZWN0 ICpfX3B5eF92X2RybV9vc2Rfc2l6ZSkgeworLSAgc3RydWN0IG1wdl9vcGVuZ2xfaW5pdF9wYXJh bXMgX19weXhfdl9nbF9wYXJhbXM7CistICBzdHJ1Y3QgbXB2X29wZW5nbF9kcm1fcGFyYW1zIF9f cHl4X3ZfZHJtX3BhcmFtczsKKy0gIHN0cnVjdCBtcHZfb3BlbmdsX2RybV9vc2Rfc2l6ZSBfX3B5 eF92X19kcm1fb3NkX3NpemU7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEycmVuZGVyKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3Qg Kl9fcHl4X3Zfb3BlbmdsX2ZibywgUHlPYmplY3QgKl9fcHl4X3ZfZmxpcF95LCBQeU9iamVjdCAq X19weXhfdl9kZXB0aCwgUHlPYmplY3QgKl9fcHl4X3ZfYmxvY2tfZm9yX3RhcmdldF90aW1lLCBQ eU9iamVjdCAqX19weXhfdl9za2lwX3JlbmRlcmluZykgeworKyAgc3RydWN0IG1wdl9vcGVuZ2xf ZmJvIF9fcHl4X3ZfZmJvOworICAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX1JlbmRlclBhcmFtcyAqX19weXhfdl9wYXJhbXMgPSBOVUxMOworLSAgUHlPYmplY3QgKl9f cHl4X3ZfYXJwID0gTlVMTDsKKy0gIGludCBfX3B5eF92X2VycjsKKy0gIGludCBfX3B5eF9yOwor KyAgaW50IF9fcHl4X3ZfcmV0OworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOwor LSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBpbnQgX19weXhfdF8yOworICAgaW50 IF9fcHl4X3RfMzsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgUHlPYmplY3Qg Kl9fcHl4X3RfNSA9IE5VTEw7CisrICBpbnQgX19weXhfdF81OworICAgaW50IF9fcHl4X3RfNjsK Ky0gIGludCBfX3B5eF90Xzc7CistICBjaGFyIGNvbnN0ICpfX3B5eF90Xzg7CistICBQeU9iamVj dCAqKCpfX3B5eF90XzkpKFB5T2JqZWN0ICopOworLSAgaW50IF9fcHl4X3RfMTA7CisgICBpbnQg X19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsK KyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0 KCJfX2luaXRfXyIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJlbmRlciIs IDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk2NQorLSAqICAg ICAgICAgICAgIG1wdl9vcGVuZ2xfZHJtX29zZF9zaXplIF9kcm1fb3NkX3NpemUKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDc5CisrICogICAgICAgICAgICAgbXB2X29w ZW5nbF9mYm8gZmJvCisgICogCistICogICAgICAgICBzZWxmLl9tcHYgPSBtcHYgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcGFyYW1zID0gX1JlbmRlclBhcmFtcygp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAgICAgIG1lbXNldCgm Z2xfcGFyYW1zLCAwLCBzaXplb2YoZ2xfcGFyYW1zKSkKKysgKiAgICAgICAgIGlmIG9wZW5nbF9m Ym86CisgICovCistICBpZiAoIShsaWtlbHkoKChfX3B5eF92X21wdikgPT0gUHlfTm9uZSkgfHwg bGlrZWx5KF9fUHl4X1R5cGVUZXN0KF9fcHl4X3ZfbXB2LCBfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCkpKSkpIF9fUFlYX0VSUigwLCA5NjUsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19weXhfdF8xID0gX19weXhfdl9tcHY7CistICBfX1B5eF9JTkNSRUYoX19weXhfdF8x KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92 X3NlbGYtPl9tcHYpOworLSAgX19QeXhfREVDUkVGKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYt Pl9tcHYpKTsKKy0gIF9fcHl4X3Zfc2VsZi0+X21wdiA9ICgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3RfMSk7CisrICBfX3B5eF90XzEgPSBf X1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDEwNzksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CisrICBfX3B5eF92X3BhcmFtcyA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3RfMSk7CisgICBfX3B5eF90XzEgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk2NworLSAqICAgICAg ICAgc2VsZi5fbXB2ID0gbXB2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA4MQorKyAqICAgICAgICAgcGFyYW1zID0gX1JlbmRlclBhcmFtcygpCisgICogCistICogICAg ICAgICBtZW1zZXQoJmdsX3BhcmFtcywgMCwgc2l6ZW9mKGdsX3BhcmFtcykpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIG1lbXNldCgmZHJtX3BhcmFtcywgMCwgc2l6 ZW9mKGRybV9wYXJhbXMpKQorLSAqICAgICAgICAgbWVtc2V0KCZfZHJtX29zZF9zaXplLCAwLCBz aXplb2YoX2RybV9vc2Rfc2l6ZSkpCisrICogICAgICAgICBpZiBvcGVuZ2xfZmJvOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgbWVtc2V0KCZmYm8sIDAsIHNp emVvZihmYm8pKQorKyAqICAgICAgICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJv IiwgMCkgb3IgMAorICAqLworLSAgKHZvaWQpKG1lbXNldCgoJl9fcHl4X3ZfZ2xfcGFyYW1zKSwg MCwgKHNpemVvZihfX3B5eF92X2dsX3BhcmFtcykpKSk7CisrICBfX3B5eF90XzIgPSBfX1B5eF9Q eU9iamVjdF9Jc1RydWUoX19weXhfdl9vcGVuZ2xfZmJvKTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf MiA8IDApKSBfX1BZWF9FUlIoMCwgMTA4MSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19weXhf dF8yKSB7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTY4CistICog CistICogICAgICAgICBtZW1zZXQoJmdsX3BhcmFtcywgMCwgc2l6ZW9mKGdsX3BhcmFtcykpCist ICogICAgICAgICBtZW1zZXQoJmRybV9wYXJhbXMsIDAsIHNpemVvZihkcm1fcGFyYW1zKSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgbWVtc2V0KCZfZHJtX29zZF9z aXplLCAwLCBzaXplb2YoX2RybV9vc2Rfc2l6ZSkpCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDgyCisgICogCisrICogICAgICAgICBpZiBvcGVuZ2xfZmJvOgorKyAq ICAgICAgICAgICAgIG1lbXNldCgmZmJvLCAwLCBzaXplb2YoZmJvKSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgi ZmJvIiwgMCkgb3IgMAorKyAqICAgICAgICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdCisg ICovCistICAodm9pZCkobWVtc2V0KCgmX19weXhfdl9kcm1fcGFyYW1zKSwgMCwgKHNpemVvZihf X3B5eF92X2RybV9wYXJhbXMpKSkpOworKyAgICAodm9pZCkobWVtc2V0KCgmX19weXhfdl9mYm8p LCAwLCAoc2l6ZW9mKF9fcHl4X3ZfZmJvKSkpKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5NjkKKy0gKiAgICAgICAgIG1lbXNldCgmZ2xfcGFyYW1zLCAwLCBzaXpl b2YoZ2xfcGFyYW1zKSkKKy0gKiAgICAgICAgIG1lbXNldCgmZHJtX3BhcmFtcywgMCwgc2l6ZW9m KGRybV9wYXJhbXMpKQorLSAqICAgICAgICAgbWVtc2V0KCZfZHJtX29zZF9zaXplLCAwLCBzaXpl b2YoX2RybV9vc2Rfc2l6ZSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0g KiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJhbXMoKQorKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA4MworKyAqICAgICAgICAgaWYgb3BlbmdsX2ZibzoKKysgKiAg ICAgICAgICAgICBtZW1zZXQoJmZibywgMCwgc2l6ZW9mKGZibykpCisrICogICAgICAgICAgICAg ZmJvLmZibyA9IG9wZW5nbF9mYm8uZ2V0KCJmYm8iLCAwKSBvciAwICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBmYm8udyA9IG9wZW5nbF9mYm9bInciXQorKyAq ICAgICAgICAgICAgIGZiby5oID0gb3BlbmdsX2Zib1siaCJdCisgICovCistICAodm9pZCkobWVt c2V0KCgmX19weXhfdl9fZHJtX29zZF9zaXplKSwgMCwgKHNpemVvZihfX3B5eF92X19kcm1fb3Nk X3NpemUpKSkpOworKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3Zfb3BlbmdsX2ZibywgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90 XzEsIF9fcHl4X3R1cGxlX18xMiwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhf dF80KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICAg IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzQpOyBpZiAodW5saWtl bHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikKKysg ICAgaWYgKCFfX3B5eF90XzIpIHsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKKysgICAgfSBlbHNlIHsKKysgICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeUlu dF9Bc19pbnQoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzUgPT0gKGludCktMSkg JiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikK KysgICAgICBfX3B5eF90XzMgPSBfX3B5eF90XzU7CisrICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgICAgZ290byBfX3B5eF9MNF9ib29sX2Jpbm9wX2Rv bmU7CisrICAgIH0KKysgICAgX19weXhfdF8zID0gMDsKKysgICAgX19weXhfTDRfYm9vbF9iaW5v cF9kb25lOjsKKysgICAgX19weXhfdl9mYm8uZmJvID0gX19weXhfdF8zOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3MQorLSAqICAgICAgICAgbWVtc2V0KCZfZHJt X29zZF9zaXplLCAwLCBzaXplb2YoX2RybV9vc2Rfc2l6ZSkpCistICogCistICogICAgICAgICBw YXJhbXMgPSBfUmVuZGVyUGFyYW1zKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq IAorLSAqICAgICAgICAgaWYgYXBpX3R5cGUgPT0gc2VsZi5BUElfT1BFTkdMOgorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4NAorKyAqICAgICAgICAgICAgIG1lbXNl dCgmZmJvLCAwLCBzaXplb2YoZmJvKSkKKysgKiAgICAgICAgICAgICBmYm8uZmJvID0gb3Blbmds X2Ziby5nZXQoImZibyIsIDApIG9yIDAKKysgKiAgICAgICAgICAgICBmYm8udyA9IG9wZW5nbF9m Ym9bInciXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgZmJv LmggPSBvcGVuZ2xfZmJvWyJoIl0KKysgKiAgICAgICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0 ID0gb3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDApIG9yIDAKKyAgKi8KKy0gIF9f cHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMpKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTcxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdl9wYXJhbXMgPSAoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF90XzEpOworLSAgX19w eXhfdF8xID0gMDsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfRGljdF9HZXRJdGVt KF9fcHl4X3Zfb3BlbmdsX2ZibywgX19weXhfbl9zX3cpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCAxMDg0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNCk7CisrICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90 XzQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDEwODQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgICAgX19weXhfdl9mYm8udyA9IF9fcHl4 X3RfMzsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzMKKy0gKiAg ICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJhbXMoKQorLSAqIAorLSAqICAgICAgICAgaWYgYXBp X3R5cGUgPT0gc2VsZi5BUElfT1BFTkdMOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgICAgICAgICAgcGFyYW1zLmFkZF9zdHJpbmcoTVBWX1JFTkRFUl9QQVJBTV9BUElfVFlQ RSwgTVBWX1JFTkRFUl9BUElfVFlQRV9PUEVOR0wpCistICogICAgICAgICBlbHNlOgorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4NQorKyAqICAgICAgICAgICAgIGZi by5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJvIiwgMCkgb3IgMAorKyAqICAgICAgICAgICAgIGZi by53ID0gb3BlbmdsX2Zib1sidyJdCisrICogICAgICAgICAgICAgZmJvLmggPSBvcGVuZ2xfZmJv WyJoIl0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGZiby5p bnRlcm5hbF9mb3JtYXQgPSBvcGVuZ2xfZmJvLmdldCgiaW50ZXJuYWxfZm9ybWF0IiwgMCkgb3Ig MAorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVO R0xfRkJPLCAmZmJvKQorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX0FQSV9PUEVOR0wpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5NzMsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX3B5eF90XzIgPSBQeU9iamVjdF9S aWNoQ29tcGFyZShfX3B5eF92X2FwaV90eXBlLCBfX3B5eF90XzEsIFB5X0VRKTsgX19QeXhfWEdP VFJFRihfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5 NzMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7CistICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8yKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwgOTczLCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgaWYg KGxpa2VseShfX3B5eF90XzMpKSB7CisrICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0Rp Y3RfR2V0SXRlbShfX3B5eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc19oKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA4NSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Bc19p bnQoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGludCktMSkgJiYgUHlF cnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDg1LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgIF9fcHl4X3ZfZmJv LmggPSBfX3B5eF90XzM7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5NzQKKy0gKiAKKy0gKiAgICAgICAgIGlmIGFwaV90eXBlID09IHNlbGYuQVBJX09QRU5HTDoK Ky0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3N0cmluZyhNUFZfUkVOREVSX1BBUkFNX0FQSV9U WVBFLCBNUFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgZWxzZToKKy0gKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9y KCJVbmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90eXBlKQorKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA4NgorKyAqICAgICAgICAgICAgIGZiby53ID0gb3BlbmdsX2Zi b1sidyJdCisrICogICAgICAgICAgICAgZmJvLmggPSBvcGVuZ2xfZmJvWyJoIl0KKysgKiAgICAg ICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0ID0gb3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zv cm1hdCIsIDApIG9yIDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfRkJPLCAmZmJvKQor KyAqICAgICAgICAgaWYgZmxpcF95OgorICAqLworLSAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBf X3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19w eXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfc3RyaW5nKF9fcHl4X3ZfcGFyYW1zLCBNUFZf UkVOREVSX1BBUkFNX0FQSV9UWVBFLCBNUFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk3NCwgX19weXhfTDFfZXJyb3IpCist ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDg2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNCk7CisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwo X19weXhfdF80LCBfX3B5eF90dXBsZV9fMTMsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAxMDg2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAw OworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYg KHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJy b3IpCisrICAgIGlmICghX19weXhfdF8yKSB7CisrICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisrICAgIH0gZWxzZSB7CisrICAgICAgX19weXhfdF81ID0gX19Q eXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF81ID09IChp bnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFf ZXJyb3IpCisrICAgICAgX19weXhfdF8zID0gX19weXhfdF81OworKyAgICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICAgIGdvdG8gX19weXhfTDZfYm9vbF9i aW5vcF9kb25lOworKyAgICB9CisrICAgIF9fcHl4X3RfMyA9IDA7CisrICAgIF9fcHl4X0w2X2Jv b2xfYmlub3BfZG9uZTo7CisrICAgIF9fcHl4X3ZfZmJvLmludGVybmFsX2Zvcm1hdCA9IF9fcHl4 X3RfMzsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3MworKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4NworKyAqICAgICAgICAgICAg IGZiby5oID0gb3BlbmdsX2Zib1siaCJdCisrICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zv cm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBvciAwCisrICogICAg ICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZm Ym8pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGlmIGZsaXBfeToK KysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwg MSkKKysgKi8KKysgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92 dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9G Qk8sICgmX19weXhfdl9mYm8pLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgMTA4NywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODEKKyAgKiAgICAgICAgIHBh cmFtcyA9IF9SZW5kZXJQYXJhbXMoKQorICAqIAorLSAqICAgICAgICAgaWYgYXBpX3R5cGUgPT0g c2VsZi5BUElfT1BFTkdMOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICAgICAgcGFyYW1zLmFkZF9zdHJpbmcoTVBWX1JFTkRFUl9QQVJBTV9BUElfVFlQRSwgTVBWX1JF TkRFUl9BUElfVFlQRV9PUEVOR0wpCistICogICAgICAgICBlbHNlOgorKyAqICAgICAgICAgaWYg b3BlbmdsX2ZibzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAg IG1lbXNldCgmZmJvLCAwLCBzaXplb2YoZmJvKSkKKysgKiAgICAgICAgICAgICBmYm8uZmJvID0g b3BlbmdsX2Ziby5nZXQoImZibyIsIDApIG9yIDAKKyAgKi8KKy0gICAgZ290byBfX3B5eF9MMzsK KyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzYKKy0gKiAg ICAgICAgICAgICBwYXJhbXMuYWRkX3N0cmluZyhNUFZfUkVOREVSX1BBUkFNX0FQSV9UWVBFLCBN UFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCkKKy0gKiAgICAgICAgIGVsc2U6CistICogICAgICAg ICAgICAgcmFpc2UgUHlNUFZFcnJvcigiVW5rbm93biBhcGlfdHlwZSAlciIgJSBhcGlfdHlwZSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICAgICAgaWYgb3Blbmds X2luaXRfcGFyYW1zIGlzIG5vdCBOb25lOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwODgKKysgKiAgICAgICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0ID0gb3Blbmds X2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDApIG9yIDAKKysgKiAgICAgICAgICAgICBwYXJh bXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykKKysgKiAgICAg ICAgIGlmIGZsaXBfeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fRkxJUF9ZLCAxKQorKyAqICAgICAg ICAgaWYgZGVwdGggaXMgbm90IE5vbmU6CisgICovCistICAvKmVsc2UqLyB7CistICAgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfUHlNUFZFcnJvcik7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk3NiwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9mbGlwX3kpOyBp ZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMDg4LCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX3B5eF90XzIpIHsKKysKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwODkKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9S RU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykKKysgKiAgICAgICAgIGlmIGZsaXBfeToKKysg KiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgaWYgZGVwdGggaXMgbm90 IE5vbmU6CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9E RVBUSCwgZGVwdGgpCisrICovCisrICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJz dHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFt cy0+X19weXhfdnRhYiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1f RkxJUF9ZLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA4OSwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX3B5 eF90XzQgPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXRTYWZlKF9fcHl4X2twX3NfVW5rbm93bl9hcGlf dHlwZV9yLCBfX3B5eF92X2FwaV90eXBlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgOTc2LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NCk7CistICAgIF9fcHl4X3RfNSA9IE5VTEw7CistICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhP RFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8xKSkpIHsKKy0gICAgICBfX3B5 eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzEpOworLSAgICAgIGlmIChsaWtlbHko X19weXhfdF81KSkgeworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VU X0ZVTkNUSU9OKF9fcHl4X3RfMSk7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsK Ky0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3RfMSwgZnVuY3Rpb24pOworLSAgICAgIH0KKy0gICAgfQorLSAgICBfX3B5eF90 XzIgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzEsIF9f cHl4X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8x LCBfX3B5eF90XzQpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9 IDA7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5NzYsIF9fcHl4X0wxX2Vycm9y KQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMiwgMCwgMCwg MCk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBf X1BZWF9FUlIoMCwgOTc2LCBfX3B5eF9MMV9lcnJvcikKKysKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwODgKKysgKiAgICAgICAgICAgICBmYm8uaW50ZXJuYWxfZm9y bWF0ID0gb3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDApIG9yIDAKKysgKiAgICAg ICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZi bykKKysgKiAgICAgICAgIGlmIGZsaXBfeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fRkxJUF9ZLCAx KQorKyAqICAgICAgICAgaWYgZGVwdGggaXMgbm90IE5vbmU6CisrICovCisgICB9CistICBfX3B5 eF9MMzo7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTc4CistICog ICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigiVW5rbm93biBhcGlfdHlwZSAlciIgJSBhcGlf dHlwZSkKKy0gKiAKKy0gKiAgICAgICAgIGlmIG9wZW5nbF9pbml0X3BhcmFtcyBpcyBub3QgTm9u ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHNlbGYuX2dl dF9wcm9jX2FkZHJlc3MgPSBvcGVuZ2xfaW5pdF9wYXJhbXNbImdldF9wcm9jX2FkZHJlc3MiXQor LSAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzID0gJl9jX2dldHByb2Nh ZGRyZXNzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MAorKyAqICAg ICAgICAgaWYgZmxpcF95OgorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5E RVJfUEFSQU1fRkxJUF9ZLCAxKQorKyAqICAgICAgICAgaWYgZGVwdGggaXMgbm90IE5vbmU6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2lu dChNUFZfUkVOREVSX1BBUkFNX0RFUFRILCBkZXB0aCkKKysgKiAgICAgICAgIGlmIG5vdCBibG9j a19mb3JfdGFyZ2V0X3RpbWU6CisgICovCistICBfX3B5eF90XzMgPSAoX19weXhfdl9vcGVuZ2xf aW5pdF9wYXJhbXMgIT0gUHlfTm9uZSk7CistICBfX3B5eF90XzYgPSAoX19weXhfdF8zICE9IDAp OworKyAgX19weXhfdF8yID0gKF9fcHl4X3ZfZGVwdGggIT0gUHlfTm9uZSk7CisrICBfX3B5eF90 XzYgPSAoX19weXhfdF8yICE9IDApOworICAgaWYgKF9fcHl4X3RfNikgeworIAorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTc5CistICogCistICogICAgICAgICBpZiBv cGVuZ2xfaW5pdF9wYXJhbXMgaXMgbm90IE5vbmU6CistICogICAgICAgICAgICAgc2VsZi5fZ2V0 X3Byb2NfYWRkcmVzcyA9IG9wZW5nbF9pbml0X3BhcmFtc1siZ2V0X3Byb2NfYWRkcmVzcyJdICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0 X3Byb2NfYWRkcmVzcyA9ICZfY19nZXRwcm9jYWRkcmVzcworLSAqICAgICAgICAgICAgIGdsX3Bh cmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9IDx2b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVz cworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MQorKyAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fRkxJUF9ZLCAxKQorKyAqICAg ICAgICAgaWYgZGVwdGggaXMgbm90IE5vbmU6CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9p bnQoTVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwgZGVwdGgpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6CisrICogICAg ICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VU X1RJTUUsIDApCisgICovCistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0RpY3RfR2V0 SXRlbShfX3B5eF92X29wZW5nbF9pbml0X3BhcmFtcywgX19weXhfbl9zX2dldF9wcm9jX2FkZHJl c3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5NzksIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfR0lWRVJF RihfX3B5eF90XzIpOworLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdl9zZWxmLT5fZ2V0X3Byb2Nf YWRkcmVzcyk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPl9nZXRfcHJvY19hZGRy ZXNzKTsKKy0gICAgX19weXhfdl9zZWxmLT5fZ2V0X3Byb2NfYWRkcmVzcyA9IF9fcHl4X3RfMjsK Ky0gICAgX19weXhfdF8yID0gMDsKKysgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfQXNfaW50 KF9fcHl4X3ZfZGVwdGgpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoaW50KS0xKSAmJiBQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwOTEsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50 KF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0RFUFRILCBfX3B5eF90XzMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDkxLCBfX3B5eF9MMV9lcnJvcikK KysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTgwCistICogICAgICAgICBpZiBvcGVuZ2xfaW5pdF9wYXJhbXMgaXMgbm90IE5vbmU6 CistICogICAgICAgICAgICAgc2VsZi5fZ2V0X3Byb2NfYWRkcmVzcyA9IG9wZW5nbF9pbml0X3Bh cmFtc1siZ2V0X3Byb2NfYWRkcmVzcyJdCistICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9w cm9jX2FkZHJlc3MgPSAmX2NfZ2V0cHJvY2FkZHJlc3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9IDx2 b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcworLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf dm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpCisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkwCisrICogICAgICAgICBp ZiBmbGlwX3k6CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJB TV9GTElQX1ksIDEpCisrICogICAgICAgICBpZiBkZXB0aCBpcyBub3QgTm9uZTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9S RU5ERVJfUEFSQU1fREVQVEgsIGRlcHRoKQorKyAqICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90 YXJnZXRfdGltZToKKyAgKi8KKy0gICAgX19weXhfdl9nbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVz cyA9ICgmX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfZ2V0cHJvY2FkZHJlc3MpOwor KyAgfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTgxCistICog ICAgICAgICAgICAgc2VsZi5fZ2V0X3Byb2NfYWRkcmVzcyA9IG9wZW5nbF9pbml0X3BhcmFtc1si Z2V0X3Byb2NfYWRkcmVzcyJdCistICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2Fk ZHJlc3MgPSAmX2NfZ2V0cHJvY2FkZHJlc3MKKy0gKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0 X3Byb2NfYWRkcmVzc19jdHggPSA8dm9pZCAqPnNlbGYuX2dldF9wcm9jX2FkZHJlc3MgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAo TVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpCistICogICAg ICAgICBpZiBhZHZhbmNlZF9jb250cm9sOgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwOTIKKysgKiAgICAgICAgIGlmIGRlcHRoIGlzIG5vdCBOb25lOgorKyAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIGRlcHRoKQorKyAq ICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90YXJnZXRfdGltZTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFS QU1fQkxPQ0tfRk9SX1RBUkdFVF9USU1FLCAwKQorKyAqICAgICAgICAgaWYgc2tpcF9yZW5kZXJp bmc6CisgICovCistICAgIF9fcHl4X3ZfZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3NfY3R4ID0g KCh2b2lkICopX19weXhfdl9zZWxmLT5fZ2V0X3Byb2NfYWRkcmVzcyk7CisrICBfX3B5eF90XzYg PSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUpOyBp ZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlYX0VSUigwLCAxMDkyLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X3RfMiA9ICgoIV9fcHl4X3RfNikgIT0gMCk7CisrICBpZiAoX19weXhf dF8yKSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODIKKy0g KiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzcyA9ICZfY19nZXRwcm9jYWRk cmVzcworLSAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9IDx2 b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcworLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf dm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIGFkdmFuY2VkX2NvbnRy b2w6CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9BRFZB TkNFRF9DT05UUk9MLCAxKQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA5MworKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQ VEgsIGRlcHRoKQorKyAqICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90YXJnZXRfdGltZToKKysg KiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0JMT0NLX0ZPUl9U QVJHRVRfVElNRSwgMCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg aWYgc2tpcF9yZW5kZXJpbmc6CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JF TkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkKKyAgKi8KKy0gICAgX19weXhfdF8yID0gKChz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFt cyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1z LCBNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9JTklUX1BBUkFNUywgKCZfX3B5eF92X2dsX3BhcmFt cyksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5ODIsIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fcHl4X3RfMSA9ICgoc3Ry dWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMg KilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1Q Vl9SRU5ERVJfUEFSQU1fQkxPQ0tfRk9SX1RBUkdFVF9USU1FLCAwKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA5MywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3OAor LSAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlVua25vd24gYXBpX3R5cGUgJXIiICUg YXBpX3R5cGUpCistICogCistICogICAgICAgICBpZiBvcGVuZ2xfaW5pdF9wYXJhbXMgaXMgbm90 IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBzZWxm Ll9nZXRfcHJvY19hZGRyZXNzID0gb3BlbmdsX2luaXRfcGFyYW1zWyJnZXRfcHJvY19hZGRyZXNz Il0KKy0gKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzcyA9ICZfY19nZXRw cm9jYWRkcmVzcworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5Mgor KyAqICAgICAgICAgaWYgZGVwdGggaXMgbm90IE5vbmU6CisrICogICAgICAgICAgICAgcGFyYW1z LmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwgZGVwdGgpCisrICogICAgICAgICBpZiBu b3QgYmxvY2tfZm9yX3RhcmdldF90aW1lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1Jf VEFSR0VUX1RJTUUsIDApCisrICogICAgICAgICBpZiBza2lwX3JlbmRlcmluZzoKKyAgKi8KKyAg IH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODMKKy0gKiAgICAg ICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzc19jdHggPSA8dm9pZCAqPnNlbGYuX2dl dF9wcm9jX2FkZHJlc3MKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5E RVJfUEFSQU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAmZ2xfcGFyYW1zKQorLSAqICAgICAgICAgaWYg YWR2YW5jZWRfY29udHJvbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwg MSkKKy0gKiAgICAgICAgIGlmIHgxMV9kaXNwbGF5OgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwOTQKKysgKiAgICAgICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3Rp bWU6CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9D S19GT1JfVEFSR0VUX1RJTUUsIDApCisrICogICAgICAgICBpZiBza2lwX3JlbmRlcmluZzogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50 KE1QVl9SRU5ERVJfUEFSQU1fU0tJUF9SRU5ERVJJTkcsIDEpCisrICogCisgICovCistICBfX3B5 eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9hZHZhbmNlZF9jb250cm9sKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgOTgzLCBfX3B5eF9MMV9l cnJvcikKKy0gIGlmIChfX3B5eF90XzYpIHsKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0 X0lzVHJ1ZShfX3B5eF92X3NraXBfcmVuZGVyaW5nKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8 IDApKSBfX1BZWF9FUlIoMCwgMTA5NCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19weXhfdF8y KSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODQKKy0gKiAg ICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0lOSVRf UEFSQU1TLCAmZ2xfcGFyYW1zKQorLSAqICAgICAgICAgaWYgYWR2YW5jZWRfY29udHJvbDoKKy0g KiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NP TlRST0wsIDEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIHgx MV9kaXNwbGF5OgorLSAqICAgICAgICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3Bs YXkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTUKKysgKiAgICAg ICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0JMT0NLX0ZPUl9UQVJHRVRf VElNRSwgMCkKKysgKiAgICAgICAgIGlmIHNraXBfcmVuZGVyaW5nOgorKyAqICAgICAgICAgICAg IHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fU0tJUF9SRU5ERVJJTkcsIDEpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgICAgIHdpdGggbm9naWw6Cisg ICovCistICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRhYikt PmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJP TCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk4NCwgX19weXhf TDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgX19weXhfdF8xID0gKChzdHJ1Y3Qg X19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9f cHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywgTVBWX1JF TkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDEwOTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODMKKy0gKiAgICAgICAg ICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzc19jdHggPSA8dm9pZCAqPnNlbGYuX2dldF9w cm9jX2FkZHJlc3MKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJf UEFSQU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAmZ2xfcGFyYW1zKQorLSAqICAgICAgICAgaWYgYWR2 YW5jZWRfY29udHJvbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkK Ky0gKiAgICAgICAgIGlmIHgxMV9kaXNwbGF5OgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTA5NAorKyAqICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90YXJnZXRfdGlt ZToKKysgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0JMT0NL X0ZPUl9UQVJHRVRfVElNRSwgMCkKKysgKiAgICAgICAgIGlmIHNraXBfcmVuZGVyaW5nOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQo TVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkKKysgKiAKKyAgKi8KKyAgIH0KKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODUKKy0gKiAgICAgICAgIGlm IGFkdmFuY2VkX2NvbnRyb2w6CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JF TkRFUl9QQVJBTV9BRFZBTkNFRF9DT05UUk9MLCAxKQorLSAqICAgICAgICAgaWYgeDExX2Rpc3Bs YXk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBzZWxmLl94 MTFfZGlzcGxheSA9IHgxMV9kaXNwbGF5CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lk cChNUFZfUkVOREVSX1BBUkFNX1gxMV9ESVNQTEFZLCBnZXRfcG9pbnRlcigiRGlzcGxheSIsIHgx MV9kaXNwbGF5KSkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDk3Cisr ICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRF UklORywgMSkKKysgKiAKKysgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRfcmVu ZGVyKHNlbGYuX2N0eCwgcGFyYW1zLnBhcmFtcykKKysgKiAgICAgICAgIHJldHVybiByZXQKKyAg Ki8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X3gxMV9kaXNw bGF5KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgOTg1LCBfX3B5 eF9MMV9lcnJvcikKKy0gIGlmIChfX3B5eF90XzYpIHsKKysgIHsKKysgICAgICAjaWZkZWYgV0lU SF9USFJFQUQKKysgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICBQeV9VTkJMT0NL X1RIUkVBRFMKKysgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CisrICAgICAgI2VuZGlm CisrICAgICAgLyp0cnk6Ki8geworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTg2CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJB TV9BRFZBTkNFRF9DT05UUk9MLCAxKQorLSAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6CistICog ICAgICAgICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVO REVSX1BBUkFNX1gxMV9ESVNQTEFZLCBnZXRfcG9pbnRlcigiRGlzcGxheSIsIHgxMV9kaXNwbGF5 KSkKKy0gKiAgICAgICAgIGlmIHdsX2Rpc3BsYXk6CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA5OAorKyAqIAorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysg KiAgICAgICAgICAgICByZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRfcmVuZGVyKHNlbGYuX2N0eCwg cGFyYW1zLnBhcmFtcykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg cmV0dXJuIHJldAorKyAqIAorICAqLworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdl94MTFfZGlz cGxheSk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdl94MTFfZGlzcGxheSk7CistICAgIF9f UHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPl94MTFfZGlzcGxheSk7CistICAgIF9fUHl4X0RFQ1JF RihfX3B5eF92X3NlbGYtPl94MTFfZGlzcGxheSk7CistICAgIF9fcHl4X3Zfc2VsZi0+X3gxMV9k aXNwbGF5ID0gX19weXhfdl94MTFfZGlzcGxheTsKKysgICAgICAgIF9fcHl4X3ZfcmV0ID0gbXB2 X3JlbmRlcl9jb250ZXh0X3JlbmRlcihfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW1z LT5wYXJhbXMpOworKyAgICAgIH0KKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk4NworLSAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6CistICogICAgICAgICAgICAg c2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheQorLSAqICAgICAgICAgICAgIHBhcmFtcy5h ZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwgZ2V0X3BvaW50ZXIoIkRpc3Bs YXkiLCB4MTFfZGlzcGxheSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgIGlmIHdsX2Rpc3BsYXk6CistICogICAgICAgICAgICAgc2VsZi5fd2xfZGlzcGxheSA9IHds X2Rpc3BsYXkKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5Nwor KyAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fU0tJUF9SRU5E RVJJTkcsIDEpCisrICogCisrICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3Jl bmRlcihzZWxmLl9jdHgsIHBhcmFtcy5wYXJhbXMpCisrICogICAgICAgICByZXR1cm4gcmV0Cisg ICovCistICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRhYikt PmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwg X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3BvaW50ZXIoKChjaGFyIGNvbnN0ICop IkRpc3BsYXkiKSwgX19weXhfdl94MTFfZGlzcGxheSksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA5ODcsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7CisrICAgICAgLypmaW5hbGx5OiovIHsKKysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97 CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICBfX1B5eF9GYXN0R0lM X0ZvcmdldCgpOworKyAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgICNlbmRp ZgorKyAgICAgICAgICBnb3RvIF9fcHl4X0wxNDsKKysgICAgICAgIH0KKysgICAgICAgIF9fcHl4 X0wxNDo7CisrICAgICAgfQorKyAgfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTg1CistICogICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOgorLSAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwg MSkKKy0gKiAgICAgICAgIGlmIHgxMV9kaXNwbGF5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheQorLSAq ICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9YMTFfRElTUExB WSwgZ2V0X3BvaW50ZXIoIkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5OQorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAg ICAgICAgICAgICByZXQgPSBtcHZfcmVuZGVyX2NvbnRleHRfcmVuZGVyKHNlbGYuX2N0eCwgcGFy YW1zLnBhcmFtcykKKysgKiAgICAgICAgIHJldHVybiByZXQgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqIAorKyAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6CisgICovCistICB9 CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRf RnJvbV9pbnQoX19weXhfdl9yZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAxMDk5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor KyAgX19weXhfciA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7CisrICBnb3RvIF9fcHl4 X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4OAorLSAqICAg ICAgICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkKKy0gKiAgICAgICAgICAg ICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2lu dGVyKCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkpKQorLSAqICAgICAgICAgaWYgd2xfZGlzcGxheTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rp c3BsYXkgPSB3bF9kaXNwbGF5CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZf UkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlz cGxheSkpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2OQorKyAqIAor KyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgcmVuZGVyKHNlbGYsICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUsCisrICog ICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhf UHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zfd2xfZGlzcGxheSk7IGlmICh1bmxpa2VseShfX3B5eF90 XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk4OCwgX19weXhfTDFfZXJyb3IpCistICBpZiAoX19weXhf dF82KSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODkKKy0g KiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BM QVksIGdldF9wb2ludGVyKCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkpKQorLSAqICAgICAgICAgaWYg d2xfZGlzcGxheToKKy0gKiAgICAgICAgICAgICBzZWxmLl93bF9kaXNwbGF5ID0gd2xfZGlzcGxh eSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcGFyYW1zLmFk ZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNw bGF5Iiwgd2xfZGlzcGxheSkpCistICogICAgICAgICBpZiBkcm1fZGlzcGxheToKKy0gKi8KKy0g ICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zfd2xfZGlzcGxheSk7CistICAgIF9fUHl4X0dJVkVSRUYo X19weXhfdl93bF9kaXNwbGF5KTsKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+X3ds X2Rpc3BsYXkpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5fd2xfZGlzcGxheSk7 CistICAgIF9fcHl4X3Zfc2VsZi0+X3dsX2Rpc3BsYXkgPSBfX3B5eF92X3dsX2Rpc3BsYXk7Cisr ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4 X1hERUNSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKysgIF9f UHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckNvbnRleHQucmVuZGVy IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5 eF9yID0gTlVMTDsKKysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hERUNSRUYoKFB5T2JqZWN0ICop X19weXhfdl9wYXJhbXMpOworKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisrICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MAorLSAqICAgICAgICAgaWYgd2xf ZGlzcGxheToKKy0gKiAgICAgICAgICAgICBzZWxmLl93bF9kaXNwbGF5ID0gd2xfZGlzcGxheQor LSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9XTF9ESVNQ TEFZLCBnZXRfcG9pbnRlcigid2xfZGlzcGxheSIsIHdsX2Rpc3BsYXkpKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBpZiBkcm1fZGlzcGxheToKKy0gKiAgICAgICAg ICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKQorKy8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTAxCisrICogICAgICAgICByZXR1cm4gcmV0Cisr ICogCisrICogICAgIGRlZiByZXBvcnRfc3dhcChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfcmVu ZGVyX2NvbnRleHRfcmVwb3J0X3N3YXAoc2VsZi5fY3R4KQorICAqLworLSAgICBfX3B5eF90XzIg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9w YXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwgX19weXhfZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfZ2V0X3BvaW50ZXIoKChjaGFyIGNvbnN0ICopIndsX2Rpc3BsYXkiKSwgX19weXhf dl93bF9kaXNwbGF5KSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDk5MCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwor LSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4OAorLSAqICAgICAgICAgICAgIHNlbGYu X3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3Zv aWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5Iiwg eDExX2Rpc3BsYXkpKQorLSAqICAgICAgICAgaWYgd2xfZGlzcGxheTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNw bGF5CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dM X0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCistICovCist ICB9CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTVyZXBvcnRfc3dhcChQeU9iamVj dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3Rv Ki8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMTVyZXBvcnRfc3dhcChQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05f VU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKysg IF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgicmVwb3J0X3N3YXAgKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNHJlcG9ydF9zd2FwKCgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKV9fcHl4X3Zf c2VsZikpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MQorLSAq ICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5CistICogICAgICAgICAg ICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2lu dGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCistICogICAgICAgICBpZiBkcm1fZGlzcGxh eTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIGRybV9wYXJh bXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCistICogICAgICAgICAgICAgZHJtX3Bh cmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpCistICovCistICBf X3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9kcm1fZGlzcGxheSk7IGlm ICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk5MSwgX19weXhfTDFfZXJy b3IpCistICBpZiAoX19weXhfdF82KSB7CisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysg IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTkyCistICogICAgICAg ICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9w b2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCistICogICAgICAgICBpZiBkcm1fZGlz cGxheToKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJm ZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZHJt X3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpCistICogICAg ICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNvbm5l Y3Rvcl9pZCIsIC0xKQorLSAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3ZfZHJtX2Rpc3BsYXksIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2Fs bChfX3B5eF90XzIsIF9fcHl4X3R1cGxlX18xMCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDk5MiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKKy0gICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMSk7IGlmICh1 bmxpa2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZ WF9FUlIoMCwgOTkyLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3ZfZHJtX3BhcmFtcy5mZCA9IF9fcHl4X3Rf NzsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMTRyZXBvcnRfc3dhcChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKysgIFB5T2JqZWN0ICpfX3B5 eF9yID0gTlVMTDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgicmVwb3J0X3N3YXAiLCAwKTsKKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk5MworLSAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6Cist ICogICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkK Ky0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNy dGNfaWQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg IGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQi LCAtMSkKKy0gKiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19yZXF1 ZXN0X3B0ciIsIE5vbmUpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEw MgorKyAqIAorKyAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6CisrICogICAgICAgICB3aXRo IG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgbXB2 X3JlbmRlcl9jb250ZXh0X3JlcG9ydF9zd2FwKHNlbGYuX2N0eCkKKysgKiAKKyAgKi8KKy0gICAg X19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2RybV9kaXNwbGF5 LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg OTkzLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAg IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8xLCBfX3B5eF90dXBsZV9f MTEsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTMsIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3RfNyA9IF9fUHl4 X1B5SW50X0FzX2ludChfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoaW50 KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDk5MywgX19weXhfTDFfZXJy b3IpCistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBf X3B5eF92X2RybV9wYXJhbXMuY3J0Y19pZCA9IF9fcHl4X3RfNzsKKysgIHsKKysgICAgICAjaWZk ZWYgV0lUSF9USFJFQUQKKysgICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICBQeV9V TkJMT0NLX1RIUkVBRFMKKysgICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CisrICAgICAg I2VuZGlmCisrICAgICAgLyp0cnk6Ki8geworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTk0CistICogICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNw bGF5LmdldCgiZmQiLCAtMSkKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBk cm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1z LmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxh eS5nZXQoImF0b21pY19yZXF1ZXN0X3B0ciIsIE5vbmUpCistICogICAgICAgICAgICAgaWYgYXJw IGlzIG5vdCBOb25lOgorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExMDMKKysgKiAgICAgZGVmIHJlcG9ydF9zd2FwKHNlbGYpOgorKyAqICAgICAgICAgd2l0aCBu b2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfcmVwb3J0X3N3YXAoc2Vs Zi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiBm cmVlKHNlbGYpOgorICAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRy U3RyKF9fcHl4X3ZfZHJtX2Rpc3BsYXksIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChf X3B5eF90XzIsIF9fcHl4X3R1cGxlX18xMiwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsK Ky0gICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMSk7IGlmICh1bmxp a2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9F UlIoMCwgOTk0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3ZfZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBf X3B5eF90Xzc7CisrICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfcmVwb3J0X3N3YXAoX19weXhf dl9zZWxmLT5fY3R4KTsKKysgICAgICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5OTUKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1f ZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNv bm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpCistICogICAg ICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9wdHIiLCBOb25l KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgaWYgYXJwIGlz IG5vdCBOb25lOgorLSAqICAgICAgICAgICAgICAgICBkcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0 X3B0ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5nZXRfcG9pbnRlcihhcnAsICJkcm1Nb2RlQXRv bWljUmVxKiIpCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDIK KysgKiAKKysgKiAgICAgZGVmIHJlcG9ydF9zd2FwKHNlbGYpOgorKyAqICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIG1wdl9y ZW5kZXJfY29udGV4dF9yZXBvcnRfc3dhcChzZWxmLl9jdHgpCisrICogCisgICovCistICAgIF9f cHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwg X19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5 NSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBf X3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMSwgX19weXhfdHVwbGVfXzEz LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTk1LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICBfX3B5eF92X2FycCA9IF9fcHl4 X3RfMjsKKy0gICAgX19weXhfdF8yID0gMDsKKysgICAgICAvKmZpbmFsbHk6Ki8geworKyAgICAg ICAgLypub3JtYWwgZXhpdDoqL3sKKysgICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAg ICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CisrICAgICAgICAgIFB5X0JMT0NLX1RIUkVB RFMKKysgICAgICAgICAgI2VuZGlmCisrICAgICAgICAgIGdvdG8gX19weXhfTDU7CisrICAgICAg ICB9CisrICAgICAgICBfX3B5eF9MNTo7CisrICAgICAgfQorKyAgfQorIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk2CistICogICAgICAgICAgICAgZHJtX3BhcmFt cy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0xKQorLSAq ICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRyIiwg Tm9uZSkKKy0gKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVx dWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9k ZUF0b21pY1JlcSoiKQorLSAqICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0gZHJt X2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTAxCisrICogICAgICAgICByZXR1cm4gcmV0CisrICogCisrICogICAgIGRl ZiByZXBvcnRfc3dhcChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfcmVw b3J0X3N3YXAoc2VsZi5fY3R4KQorICAqLworLSAgICBfX3B5eF90XzYgPSAoX19weXhfdl9hcnAg IT0gUHlfTm9uZSk7CistICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzYgIT0gMCk7CistICAgIGlm IChfX3B5eF90XzMpIHsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTk3CistICogICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVx dWVzdF9wdHIiLCBOb25lKQorLSAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKKy0g KiAgICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1v ZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZHJtX3BhcmFtcy5yZW5k ZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJlbmRlcl9mZCIsIC0xKQorLSAqICAgICAgICAgICAg IHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9EUk1fRElTUExBWSwgJmRybV9wYXJh bXMpCistICovCistICAgICAgX19weXhfdF84ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19w eXhfdl9hcnApOyBpZiAodW5saWtlbHkoKCFfX3B5eF90XzgpICYmIFB5RXJyX09jY3VycmVkKCkp KSBfX1BZWF9FUlIoMCwgOTk3LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICBfX3B5eF92X2RybV9w YXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gKChzdHJ1Y3QgX2RybU1vZGVBdG9taWNSZXEgKiop X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3BvaW50ZXIoX19weXhfdF84LCBfX3B5 eF9rcF9zX2RybU1vZGVBdG9taWNSZXEpKTsKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor KyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3IpOworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICBy ZXR1cm4gX19weXhfcjsKKyt9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk5NgorLSAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJt X2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKKy0gKiAgICAgICAgICAgICBhcnAgPSBk cm1fZGlzcGxheS5nZXQoImF0b21pY19yZXF1ZXN0X3B0ciIsIE5vbmUpCistICogICAgICAgICAg ICAgaWYgYXJwIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICAgICAgICAgIGRybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gPF9kcm1Nb2Rl QXRvbWljUmVxICoqPmdldF9wb2ludGVyKGFycCwgImRybU1vZGVBdG9taWNSZXEqIikKKy0gKiAg ICAgICAgICAgICBkcm1fcGFyYW1zLnJlbmRlcl9mZCA9IGRybV9kaXNwbGF5LmdldCgicmVuZGVy X2ZkIiwgLTEpCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDUKKysgKiAg ICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfcmVwb3J0X3N3YXAoc2VsZi5fY3R4KQorKyAq IAorKyAqICAgICBkZWYgZnJlZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgorKyAqICAgICAgICAgICAgIHJldHVybgor ICAqLworLSAgICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 OTgKKy0gKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6CistICogICAgICAgICAgICAg ICAgIGRybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gPF9kcm1Nb2RlQXRvbWljUmVxICoq PmdldF9wb2ludGVyKGFycCwgImRybU1vZGVBdG9taWNSZXEqIikKKy0gKiAgICAgICAgICAgICBk cm1fcGFyYW1zLnJlbmRlcl9mZCA9IGRybV9kaXNwbGF5LmdldCgicmVuZGVyX2ZkIiwgLTEpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3Zv aWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1zKQorLSAqICAgICAg ICAgaWYgZHJtX29zZF9zaXplOgorLSAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKF9fcHl4X3ZfZHJtX2Rpc3BsYXksIF9fcHl4X25fc19nZXQpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTgsIF9fcHl4X0wxX2Vycm9yKQorLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmpl Y3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3R1cGxlX18xNCwgTlVMTCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5OCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhf dF8yID0gMDsKKy0gICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMSk7 IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkp KSBfX1BZWF9FUlIoMCwgOTk4LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3ZfZHJtX3BhcmFtcy5yZW5kZXJf ZmQgPSBfX3B5eF90Xzc7CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTdmcmVlKFB5 T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8q cHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF8xN2ZyZWUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqdW51c2VkKSB7CisrICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBf X1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo ImZyZWUgKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZyZWUoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSk7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTkKKy0gKiAgICAgICAgICAgICAg ICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+ Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQorLSAqICAgICAgICAgICAgIGRy bV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkKKy0g KiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BM QVksICZkcm1fcGFyYW1zKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICBpZiBkcm1fb3NkX3NpemU6CistICogICAgICAgICAgICAgX2RybV9vc2Rfc2l6ZS53aWR0aCwg X2RybV9vc2Rfc2l6ZS5oZWlnaHQgPSBkcm1fb3NkX3NpemUKKy0gKi8KKy0gICAgX19weXhfdF8x ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRl clBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3Zf cGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAoJl9fcHl4X3ZfZHJtX3BhcmFt cyksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5OTksIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICAvKiBmdW5jdGlvbiBleGl0IGNv ZGUgKi8KKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIF9fcHl4 X3I7CisrfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTkxCist ICogICAgICAgICAgICAgc2VsZi5fd2xfZGlzcGxheSA9IHdsX2Rpc3BsYXkKKy0gKiAgICAgICAg ICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwgZ2V0X3Bv aW50ZXIoIndsX2Rpc3BsYXkiLCB3bF9kaXNwbGF5KSkKKy0gKiAgICAgICAgIGlmIGRybV9kaXNw bGF5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZHJtX3Bh cmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkKKy0gKiAgICAgICAgICAgICBkcm1f cGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKKy0gKi8KKy0g IH0KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMTZmcmVlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBO VUxMOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIGludCBfX3B5eF90XzE7Cisr ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZnJlZSIsIDApOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDAKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1z LnJlbmRlcl9mZCA9IGRybV9kaXNwbGF5LmdldCgicmVuZGVyX2ZkIiwgLTEpCistICogICAgICAg ICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJt X3BhcmFtcykKKy0gKiAgICAgICAgIGlmIGRybV9vc2Rfc2l6ZTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9kcm1fb3Nk X3NpemUuaGVpZ2h0ID0gZHJtX29zZF9zaXplCistICogICAgICAgICAgICAgcGFyYW1zLmFkZF92 b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgJl9kcm1fb3NkX3NpemUpCistICov CistICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9kcm1fb3NkX3Np emUpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigwLCAxMDAwLCBfX3B5 eF9MMV9lcnJvcikKKy0gIGlmIChfX3B5eF90XzMpIHsKKy0KKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwMDEKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRw KE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1zKQorLSAqICAgICAgICAg aWYgZHJtX29zZF9zaXplOgorLSAqICAgICAgICAgICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9k cm1fb3NkX3NpemUuaGVpZ2h0ID0gZHJtX29zZF9zaXplICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1f RFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6ZSkKKy0gKiAKKy0gKi8KKy0gICAgaWYgKChsaWtl bHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfZHJtX29zZF9zaXplKSkpIHx8IChQeUxpc3Rf Q2hlY2tFeGFjdChfX3B5eF92X2RybV9vc2Rfc2l6ZSkpKSB7CistICAgICAgUHlPYmplY3QqIHNl cXVlbmNlID0gX19weXhfdl9kcm1fb3NkX3NpemU7CistICAgICAgUHlfc3NpemVfdCBzaXplID0g X19QeXhfUHlTZXF1ZW5jZV9TSVpFKHNlcXVlbmNlKTsKKy0gICAgICBpZiAodW5saWtlbHkoc2l6 ZSAhPSAyKSkgeworLSAgICAgICAgaWYgKHNpemUgPiAyKSBfX1B5eF9SYWlzZVRvb01hbnlWYWx1 ZXNFcnJvcigyKTsKKy0gICAgICAgIGVsc2UgaWYgKHNpemUgPj0gMCkgX19QeXhfUmFpc2VOZWVk TW9yZVZhbHVlc0Vycm9yKHNpemUpOworLSAgICAgICAgX19QWVhfRVJSKDAsIDEwMDEsIF9fcHl4 X0wxX2Vycm9yKQorLSAgICAgIH0KKy0gICAgICAjaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JP UyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMKKy0gICAgICBpZiAobGlrZWx5KFB5VHVw bGVfQ2hlY2tFeGFjdChzZXF1ZW5jZSkpKSB7CistICAgICAgICBfX3B5eF90XzEgPSBQeVR1cGxl X0dFVF9JVEVNKHNlcXVlbmNlLCAwKTsgCistICAgICAgICBfX3B5eF90XzIgPSBQeVR1cGxlX0dF VF9JVEVNKHNlcXVlbmNlLCAxKTsgCistICAgICAgfSBlbHNlIHsKKy0gICAgICAgIF9fcHl4X3Rf MSA9IFB5TGlzdF9HRVRfSVRFTShzZXF1ZW5jZSwgMCk7IAorLSAgICAgICAgX19weXhfdF8yID0g UHlMaXN0X0dFVF9JVEVNKHNlcXVlbmNlLCAxKTsgCistICAgICAgfQorLSAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzEpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOworLSAgICAg ICNlbHNlCistICAgICAgX19weXhfdF8xID0gUHlTZXF1ZW5jZV9JVEVNKHNlcXVlbmNlLCAwKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJy b3IpCistICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgICAgX19weXhfdF8yID0g UHlTZXF1ZW5jZV9JVEVNKHNlcXVlbmNlLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMik7CistICAgICAgI2VuZGlmCistICAgIH0gZWxzZSB7CistICAgICAgUHlfc3NpemVf dCBpbmRleCA9IC0xOworLSAgICAgIF9fcHl4X3RfNCA9IFB5T2JqZWN0X0dldEl0ZXIoX19weXhf dl9kcm1fb3NkX3NpemUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAx MDAxLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0g ICAgICBfX3B5eF90XzkgPSBQeV9UWVBFKF9fcHl4X3RfNCktPnRwX2l0ZXJuZXh0OworLSAgICAg IGluZGV4ID0gMDsgX19weXhfdF8xID0gX19weXhfdF85KF9fcHl4X3RfNCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgZ290byBfX3B5eF9MMTFfdW5wYWNraW5nX2ZhaWxlZDsKKy0gICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgICBpbmRleCA9IDE7IF9fcHl4X3RfMiA9IF9f cHl4X3RfOShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIGdvdG8gX19weXhf TDExX3VucGFja2luZ19mYWlsZWQ7CistICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Cist ICAgICAgaWYgKF9fUHl4X0l0ZXJuZXh0VW5wYWNrRW5kQ2hlY2soX19weXhfdF85KF9fcHl4X3Rf NCksIDIpIDwgMCkgX19QWVhfRVJSKDAsIDEwMDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgICAgIF9f cHl4X3RfOSA9IE5VTEw7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7CistICAgICAgZ290byBfX3B5eF9MMTJfdW5wYWNraW5nX2RvbmU7CistICAgICAgX19w eXhfTDExX3VucGFja2luZ19mYWlsZWQ6OworLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQp OyBfX3B5eF90XzQgPSAwOworLSAgICAgIF9fcHl4X3RfOSA9IE5VTEw7CistICAgICAgaWYgKF9f UHl4X0l0ZXJGaW5pc2goKSA9PSAwKSBfX1B5eF9SYWlzZU5lZWRNb3JlVmFsdWVzRXJyb3IoaW5k ZXgpOworLSAgICAgIF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgICBf X3B5eF9MMTJfdW5wYWNraW5nX2RvbmU6OworLSAgICB9CistICAgIF9fcHl4X3RfNyA9IF9fUHl4 X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoaW50 KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwMDEsIF9fcHl4X0wxX2Vy cm9yKQorLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAg X19weXhfdF8xMCA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzIpOyBpZiAodW5saWtlbHko KF9fcHl4X3RfMTAgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigw LCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9f cHl4X3RfMiA9IDA7CistICAgIF9fcHl4X3ZfX2RybV9vc2Rfc2l6ZS53aWR0aCA9IF9fcHl4X3Rf NzsKKy0gICAgX19weXhfdl9fZHJtX29zZF9zaXplLmhlaWdodCA9IF9fcHl4X3RfMTA7CistCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAyCistICogICAgICAgICBp ZiBkcm1fb3NkX3NpemU6CistICogICAgICAgICAgICAgX2RybV9vc2Rfc2l6ZS53aWR0aCwgX2Ry bV9vc2Rfc2l6ZS5oZWlnaHQgPSBkcm1fb3NkX3NpemUKKy0gKiAgICAgICAgICAgICBwYXJhbXMu YWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6ZSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMDYKKyAgKiAKKy0gKiAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4 dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9jdHgsIHBhcmFtcy5wYXJhbXMpCisrICog ICAgIGRlZiBmcmVlKHNlbGYpOgorKyAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcmV0dXJuCisrICogICAg ICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgICBfX3B5eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92 dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9w YXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJf UEFSQU1fRFJNX09TRF9TSVpFLCAoJl9fcHl4X3ZfX2RybV9vc2Rfc2l6ZSksIE5VTEwpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMDAyLCBfX3B5eF9MMV9lcnJvcikK Ky0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhfdF8xID0gKCghKF9fcHl4X3Zfc2VsZi0+aW5p dGVkICE9IDApKSAhPSAwKTsKKysgIGlmIChfX3B5eF90XzEpIHsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDAKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1z LnJlbmRlcl9mZCA9IGRybV9kaXNwbGF5LmdldCgicmVuZGVyX2ZkIiwgLTEpCistICogICAgICAg ICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJt X3BhcmFtcykKKy0gKiAgICAgICAgIGlmIGRybV9vc2Rfc2l6ZTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9kcm1fb3Nk X3NpemUuaGVpZ2h0ID0gZHJtX29zZF9zaXplCistICogICAgICAgICAgICAgcGFyYW1zLmFkZF92 b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgJl9kcm1fb3NkX3NpemUpCisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTA3CisrICogICAgIGRlZiBmcmVl KHNlbGYpOgorKyAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgorKyAqICAgICAgICAgICAg IHJldHVybiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB3aXRoIG5v Z2lsOgorKyAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0eCkK KyAgKi8KKy0gIH0KKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAgX19weXhfciA9 IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgICAgZ290byBfX3B5eF9MMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDA0CistICogICAgICAgICAg ICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgJl9kcm1f b3NkX3NpemUpCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTA2Cisg ICogCistICogICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfY3JlYXRlKCZzZWxmLl9j dHgsIHNlbGYuX21wdi5fY3R4LCBwYXJhbXMucGFyYW1zKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICBpZiBlcnIgPCAwOgorLSAqICAgICAgICAgICAgIHJhaXNlIE1Q VkVycm9yKGVycikKKysgKiAgICAgZGVmIGZyZWUoc2VsZik6CisrICogICAgICAgICBpZiBub3Qg c2VsZi5pbml0ZWQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICByZXR1cm4KKysgKiAgICAgICAgIHdpdGggbm9naWw6CisgICovCistICBfX3B5eF92X2VyciA9 IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoKCZfX3B5eF92X3NlbGYtPl9jdHgpLCBfX3B5eF92 X3NlbGYtPl9tcHYtPl9jdHgsIF9fcHl4X3ZfcGFyYW1zLT5wYXJhbXMpOworKyAgfQorIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDUKKy0gKiAKKy0gKiAgICAgICAg IGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9j dHgsIHBhcmFtcy5wYXJhbXMpCistICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorLSAq ICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEwOAorKyAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgorKyAqICAgICAg ICAgICAgIHJldHVybgorKyAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYu X2N0eCkKKysgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKKyAgKi8KKy0gIF9fcHl4X3Rf MyA9ICgoX19weXhfdl9lcnIgPCAwKSAhPSAwKTsKKy0gIGlmICh1bmxpa2VseShfX3B5eF90XzMp KSB7CisrICB7CisrICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECisrICAgICAgUHlUaHJlYWRTdGF0 ZSAqX3NhdmU7CisrICAgICAgUHlfVU5CTE9DS19USFJFQURTCisrICAgICAgX19QeXhfRmFzdEdJ TF9SZW1lbWJlcigpOworKyAgICAgICNlbmRpZgorKyAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDYKKy0gKiAgICAgICAgIGVyciA9 IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9jdHgsIHBh cmFtcy5wYXJhbXMpCistICogICAgICAgICBpZiBlcnIgPCAwOgorLSAqICAgICAgICAgICAgIHJh aXNlIE1QVkVycm9yKGVycikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgc2VsZi5pbml0ZWQgPSBUcnVlCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEwOQorKyAqICAgICAgICAgICAgIHJldHVybgorKyAqICAgICAgICAgd2l0aCBu b2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuaW5pdGVkID0g RmFsc2UKKyAgKiAKKyAgKi8KKy0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzEsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDEwMDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKy0gICAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDA2LCBfX3B5eF9MMV9lcnJv cikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgIF9fcHl4X3RfNSA9IE5VTEw7 CistICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF8xKSkpIHsKKy0gICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzEpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgeworLSAgICAgICAgUHlP YmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMSk7CistICAg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5j dGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMSwgZnVuY3Rpb24pOwor KyAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X2ZyZWUoX19weXhfdl9zZWxmLT5fY3R4KTsKKyAg ICAgICB9CistICAgIH0KKy0gICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9i amVjdF9DYWxsMkFyZ3MoX19weXhfdF8xLCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMSwgX19weXhfdF80KTsKKy0gICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhf dF80KTsgX19weXhfdF80ID0gMDsKKy0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgMTAwNiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzIpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAg X19QeXhfUmFpc2UoX19weXhfdF8yLCAwLCAwLCAwKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUFlYX0VSUigwLCAxMDA2LCBfX3B5eF9MMV9l cnJvcikKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDUKKy0g KiAKKy0gKiAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoJnNlbGYuX2N0 eCwgc2VsZi5fbXB2Ll9jdHgsIHBhcmFtcy5wYXJhbXMpCistICogICAgICAgICBpZiBlcnIgPCAw OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmFpc2UgTVBW RXJyb3IoZXJyKQorLSAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCisrICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDgKKysgKiAgICAgICAgIGlmIG5vdCBzZWxm LmluaXRlZDoKKysgKiAgICAgICAgICAgICByZXR1cm4KKysgKiAgICAgICAgIHdpdGggbm9naWw6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVy X2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCisrICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNl CisgICovCisrICAgICAgLypmaW5hbGx5OiovIHsKKysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97 CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorKyAgICAgICAgICBfX1B5eF9GYXN0R0lM X0ZvcmdldCgpOworKyAgICAgICAgICBQeV9CTE9DS19USFJFQURTCisrICAgICAgICAgICNlbmRp ZgorKyAgICAgICAgICBnb3RvIF9fcHl4X0w2OworKyAgICAgICAgfQorKyAgICAgICAgX19weXhf TDY6OworKyAgICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDA3CistICogICAgICAgICBpZiBlcnIgPCAwOgorLSAqICAgICAgICAgICAgIHJhaXNl IE1QVkVycm9yKGVycikKKy0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0gVHJ1ZSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTExMAorKyAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiAgICAgICAgICAgICBtcHZfcmVuZGVy X2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCisrICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNl ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMKKysg KiAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAqLworLSAgX19weXhfdl9zZWxmLT5pbml0ZWQgPSAx OworKyAgX19weXhfdl9zZWxmLT5pbml0ZWQgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk1MAorLSAqICAgICAgICAgYmludCBpbml0ZWQKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTA1CisrICogICAgICAgICAgICAgbXB2X3JlbmRl cl9jb250ZXh0X3JlcG9ydF9zd2FwKHNlbGYuX2N0eCkKKyAgKiAKKy0gKiAgICAgZGVmIF9faW5p dF9fKHNlbGYsIG1wdiwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg ICAgICAgICAgYXBpX3R5cGUsCistICogICAgICAgICAgICAgICAgICBvcGVuZ2xfaW5pdF9wYXJh bXM9Tm9uZSwKKysgKiAgICAgZGVmIGZyZWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKysgKiAgICAgICAgICAgICBy ZXR1cm4KKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9 IDA7CistICBnb3RvIF9fcHl4X0wwOworLSAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERF Q1JFRihfX3B5eF90XzEpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworLSAgX19QeXhf WERFQ1JFRihfX3B5eF90XzQpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworLSAgX19Q eXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dC5fX2luaXRf XyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19w eXhfciA9IC0xOworKyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsK KyAgIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoKFB5T2JqZWN0ICopX19weXhfdl9wYXJh bXMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X2FycCk7CisrICBfX1B5eF9YR0lWRVJFRihf X3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9f cHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDEwCisr LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTIKKysgKiAgICAgICAgIHNlbGYu aW5pdGVkID0gRmFsc2UKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMKKy0gKiAgICAgZGVmIHNldF9p Y2NfcHJvZmlsZShzZWxmLCBpY2NfYmxvYik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgIGNkZWY6CistICogICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBwYXJh bQorKyAqICAgICBkZWYgY2xvc2Uoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKysgKiAgICAgICAgICAgICByZXR1cm4K KyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8zc2V0X2ljY19wcm9maWxl KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2ljY19ibG9iKTsgLypw cm90byovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNSZW5kZXJDb250ZXh0XzNzZXRfaWNjX3Byb2ZpbGUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwg UHlPYmplY3QgKl9fcHl4X3ZfaWNjX2Jsb2IpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTljbG9zZShQeU9iamVjdCAq X19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8K KytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfMTljbG9zZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5 T2JqZWN0ICp1bnVzZWQpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X2lj Y19wcm9maWxlICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMnNldF9pY2NfcHJvZmlsZSgoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3Nl bGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9pY2NfYmxvYikpOworKyAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoImNsb3NlICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMThjbG9zZSgoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3Nl bGYpKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRf aWNjX3Byb2ZpbGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9pY2NfYmxvYikgeworLSAg c3RydWN0IG1wdl9yZW5kZXJfcGFyYW0gX19weXhfdl9wYXJhbTsKKy0gIHN0cnVjdCBtcHZfYnl0 ZV9hcnJheSBfX3B5eF92X3ZhbDsKKy0gIGludCBfX3B5eF92X2VycjsKKytzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMThjbG9z ZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICpf X3B5eF92X3NlbGYpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1Jl Zk5hbm55RGVjbGFyYXRpb25zCisgICBpbnQgX19weXhfdF8xOworLSAgaW50IF9fcHl4X3RfMjsK Ky0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9 IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKy0gIGNoYXIgKl9fcHl4X3Rf NjsKKy0gIFB5X3NzaXplX3QgX19weXhfdF83OworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7Cist ICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVu byA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X2ljY19wcm9maWxlIiwg MCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiY2xvc2UiLCAwKTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE2CistICogICAgICAgICAgICAgaW50 IGVycgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTMKKyAgKiAKKy0g KiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGljY19ibG9iLCBieXRlcyk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJpY2Nf YmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIpCistICogICAgICAgICB2YWwuZGF0YSA9 IDx2b2lkICo+PGNoYXIgKj5pY2NfYmxvYgorLSAqLworLSAgX19weXhfdF8xID0gUHlCeXRlc19D aGVjayhfX3B5eF92X2ljY19ibG9iKTsgCistICBfX3B5eF90XzIgPSAoKCEoX19weXhfdF8xICE9 IDApKSAhPSAwKTsKKy0gIGlmICh1bmxpa2VseShfX3B5eF90XzIpKSB7CistCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE3CistICogCistICogICAgICAgICBpZiBu b3QgaXNpbnN0YW5jZShpY2NfYmxvYiwgYnl0ZXMpOgorLSAqICAgICAgICAgICAgIHJhaXNlIFB5 TVBWRXJyb3IoImljY19ibG9iIHNob3VsZCBiZSBhIGJ5dGVzIGluc3RhbmNlIikgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgdmFsLmRhdGEgPSA8dm9pZCAqPjxjaGFy ICo+aWNjX2Jsb2IKKy0gKiAgICAgICAgIHZhbC5zaXplID0gbGVuKGljY19ibG9iKQorLSAqLwor LSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX1B5TVBW RXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDE3LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICAgIF9fcHl4X3Rf NSA9IE5VTEw7CistICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlN ZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKKy0gICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9H RVRfU0VMRihfX3B5eF90XzQpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF81KSkgeworLSAg ICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3Rf NCk7CistICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKy0gICAgICAgIF9fUHl4X0lO Q1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNCwgZnVu Y3Rpb24pOworLSAgICAgIH0KKy0gICAgfQorLSAgICBfX3B5eF90XzMgPSAoX19weXhfdF81KSA/ IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzQsIF9fcHl4X3RfNSwgX19weXhfa3Bf c19pY2NfYmxvYl9zaG91bGRfYmVfYV9ieXRlc19pbnN0YSkgOiBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfNCwgX19weXhfa3Bfc19pY2NfYmxvYl9zaG91bGRfYmVfYV9ieXRlc19p bnN0YSk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0g ICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTAxNywgX19weXhfTDFf ZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9ERUNSRUYo X19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gICAgX19QeXhfUmFpc2UoX19weXhfdF8zLCAw LCAwLCAwKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Cist ICAgIF9fUFlYX0VSUigwLCAxMDE3LCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMTYKKy0gKiAgICAgICAgICAgICBpbnQgZXJyCist ICogCistICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpY2NfYmxvYiwgYnl0ZXMpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJv cigiaWNjX2Jsb2Igc2hvdWxkIGJlIGEgYnl0ZXMgaW5zdGFuY2UiKQorLSAqICAgICAgICAgdmFs LmRhdGEgPSA8dm9pZCAqPjxjaGFyICo+aWNjX2Jsb2IKKy0gKi8KKy0gIH0KKy0KKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE4CistICogICAgICAgICBpZiBub3QgaXNp bnN0YW5jZShpY2NfYmxvYiwgYnl0ZXMpOgorLSAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJy b3IoImljY19ibG9iIHNob3VsZCBiZSBhIGJ5dGVzIGluc3RhbmNlIikKKy0gKiAgICAgICAgIHZh bC5kYXRhID0gPHZvaWQgKj48Y2hhciAqPmljY19ibG9iICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHZhbC5zaXplID0gbGVuKGljY19ibG9iKQorLSAqIAorLSAqLwor LSAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfQXNXcml0YWJsZVN0cmluZyhfX3B5eF92X2lj Y19ibG9iKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF82KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDAsIDEwMTgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdl92YWwuZGF0YSA9 ICgodm9pZCAqKSgoY2hhciAqKV9fcHl4X3RfNikpOworLQorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwMTkKKy0gKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJp Y2NfYmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIpCistICogICAgICAgICB2YWwuZGF0 YSA9IDx2b2lkICo+PGNoYXIgKj5pY2NfYmxvYgorLSAqICAgICAgICAgdmFsLnNpemUgPSBsZW4o aWNjX2Jsb2IpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgICAg IHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lDQ19QUk9GSUxFCisrICogICAgIGRlZiBj bG9zZShzZWxmKToKKysgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIHJldHVybgorKyAqICAgICAgICAgd2l0 aCBub2dpbDoKKyAgKi8KKy0gIF9fcHl4X3RfNyA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X2lj Y19ibG9iKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNyA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19Q WVhfRVJSKDAsIDEwMTksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdl92YWwuc2l6ZSA9IF9f cHl4X3RfNzsKKysgIF9fcHl4X3RfMSA9ICgoIShfX3B5eF92X3NlbGYtPmluaXRlZCAhPSAwKSkg IT0gMCk7CisrICBpZiAoX19weXhfdF8xKSB7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTAyMQorLSAqICAgICAgICAgdmFsLnNpemUgPSBsZW4oaWNjX2Jsb2IpCist ICogCistICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JQ0NfUFJPRklM RSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBwYXJhbS5kYXRhID0g JnZhbAorLSAqIAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExNAor KyAqICAgICBkZWYgY2xvc2Uoc2VsZik6CisrICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6 CisrICogICAgICAgICAgICAgcmV0dXJuICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgIHdpdGggbm9naWw6CisrICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0 X2ZyZWUoc2VsZi5fY3R4KQorICAqLworLSAgX19weXhfdl9wYXJhbS50eXBlID0gTVBWX1JFTkRF Ul9QQVJBTV9JQ0NfUFJPRklMRTsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysgICAg X19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgICAgZ290byBfX3B5 eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDIyCistICog CistICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JQ0NfUFJPRklMRQor LSAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZ2YWwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExMworICAqIAorKyAq ICAgICBkZWYgY2xvc2Uoc2VsZik6CisrICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICByZXR1cm4KKyAgKiAg ICAgICAgIHdpdGggbm9naWw6CisgICovCistICBfX3B5eF92X3BhcmFtLmRhdGEgPSAoJl9fcHl4 X3ZfdmFsKTsKKysgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDI0CistICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAorLSAqIAorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMTUKKysgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRl ZDoKKysgKiAgICAgICAgICAgICByZXR1cm4KKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVy X2NvbnRleHRfc2V0X3BhcmFtZXRlcihzZWxmLl9jdHgsIHBhcmFtKQorLSAqICAgICAgICAgcmV0 dXJuIGVycgorKyAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0 eCkKKysgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKKyAgKi8KKyAgIHsKKyAgICAgICAj aWZkZWYgV0lUSF9USFJFQUQKK0BAIC0xOTg5OSwyMiArMTkwMTQsMjIgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRf aWNjX3Byb2ZpbGUKKyAgICAgICAjZW5kaWYKKyAgICAgICAvKnRyeToqLyB7CisgCistICAgICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyNQorLSAqIAorKyAgICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTYKKysgKiAgICAgICAgICAgICBy ZXR1cm4KKyAgKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAgICAgZXJyID0gbXB2 X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBwYXJhbSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJuIGVycgorKyAqICAgICAgICAg ICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQorICAqIAorICAqLwor LSAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRlcihf X3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW0pOworKyAgICAgICAgbXB2X3JlbmRlcl9j b250ZXh0X2ZyZWUoX19weXhfdl9zZWxmLT5fY3R4KTsKKyAgICAgICB9CisgCistICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjQKKy0gKiAgICAgICAgIHBhcmFtLmRh dGEgPSAmdmFsCistICogCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExMTUKKysgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKysgKiAgICAgICAgICAgICBy ZXR1cm4KKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRl cihzZWxmLl9jdHgsIHBhcmFtKQorLSAqICAgICAgICAgcmV0dXJuIGVycgorKyAqICAgICAgICAg ICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0eCkKKysgKiAgICAgICAgIHNlbGYu aW5pdGVkID0gRmFsc2UKKyAgKi8KKyAgICAgICAvKmZpbmFsbHk6Ki8geworICAgICAgICAgLypu b3JtYWwgZXhpdDoqL3sKK0BAIC0xOTkyOCwxNDg1ICsxOTA0MywxNTA1IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yc2V0 X2ljY19wcm9maWxlCisgICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwMjYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTE3CisgICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9y ZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwgcGFyYW0pCistICogICAgICAg ICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAg ICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCisrICogICAgICAgICBzZWxmLmlu aXRlZCA9IEZhbHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAg QF9lcnJvcnMKKysgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOgorICAqLworLSAgX19QeXhf WERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9f cHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTAyNiwg X19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fcHl4X3Ig PSBfX3B5eF90XzM7CistICBfX3B5eF90XzMgPSAwOworLSAgZ290byBfX3B5eF9MMDsKKysgIF9f cHl4X3Zfc2VsZi0+aW5pdGVkID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDEwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExMgor KyAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQorICAqIAorLSAqICAgICBAX2Vycm9ycwor LSAqICAgICBkZWYgc2V0X2ljY19wcm9maWxlKHNlbGYsIGljY19ibG9iKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZjoKKy0gKiAgICAgICAgICAgICBtcHZf cmVuZGVyX3BhcmFtIHBhcmFtCisrICogICAgIGRlZiBjbG9zZShzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgorKyAqICAg ICAgICAgICAgIHJldHVybgorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCist ICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CistICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0LnNldF9p Y2NfcHJvZmlsZSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OworLSAgX19weXhfciA9IE5VTEw7CisrICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVG KFB5X05vbmUpOworICAgX19weXhfTDA6OworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7Cisg ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0K KyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyOQorKy8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE5CisrICogICAgICAgICBzZWxmLmluaXRlZCA9IEZh bHNlCisrICogCisrICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5jbG9zZSgpCisgICogCistICogICAgIEBf ZXJyb3JzCistICogICAgIGRlZiBzZXRfYW1iaWVudF9saWdodChzZWxmLCBsdXgpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmOgorLSAqICAgICAgICAgICAg IG1wdl9yZW5kZXJfcGFyYW0gcGFyYW0KKyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLwor LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVy Q29udGV4dF81c2V0X2FtYmllbnRfbGlnaHQoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfbHV4KTsgLypwcm90byovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzVzZXRfYW1iaWVudF9saWdodChQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9sdXgpIHsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gMDsKKytzdGF0aWMgdm9pZCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNSZW5kZXJDb250ZXh0XzIxX19kZWFsbG9jX18oUHlPYmplY3QgKl9fcHl4X3Zfc2Vs Zik7IC8qcHJvdG8qLworK3N0YXRpYyB2b2lkIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfMjFfX2RlYWxsb2NfXyhQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7 CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoInNldF9hbWJpZW50X2xpZ2h0ICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNHNldF9hbWJpZW50 X2xpZ2h0KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29u dGV4dCAqKV9fcHl4X3Zfc2VsZiksICgoUHlPYmplY3QgKilfX3B5eF92X2x1eCkpOworKyAgX19Q eXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZGVhbGxvY19fICh3cmFwcGVyKSIsIDApOworKyAg X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yMF9fZGVhbGxv Y19fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dCAqKV9fcHl4X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworIH0KKyAK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfNHNldF9hbWJpZW50X2xpZ2h0KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zf bHV4KSB7CistICBzdHJ1Y3QgbXB2X3JlbmRlcl9wYXJhbSBfX3B5eF92X3BhcmFtOworLSAgaW50 IF9fcHl4X3ZfdmFsOworLSAgaW50IF9fcHl4X3ZfZXJyOworLSAgUHlPYmplY3QgKl9fcHl4X3Ig PSBOVUxMOworK3N0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMjBfX2RlYWxsb2NfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKyAgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCistICBpbnQgX19weXhfdF8xOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9 IE5VTEw7CisgICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5 eF90XzMgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpf X3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0X2FtYmllbnRfbGlnaHQiLCAwKTsKKysgIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlYWxsb2NfXyIsIDApOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMzUKKy0gKiAgICAgICAgICAgICBpbnQgZXJyCisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEyMAorICAqIAorLSAqICAgICAg ICAgdmFsID0gbHV4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHBh cmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0FNQklFTlRfTElHSFQKKy0gKiAgICAgICAgIHBh cmFtLmRhdGEgPSAmdmFsCisrICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKKysgKiAgICAg ICAgIHNlbGYuY2xvc2UoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICog Y2RlZiBjbGFzcyBPcGVuR0xSZW5kZXJDb250ZXh0KFJlbmRlckNvbnRleHQpOgorICAqLworLSAg X19weXhfdF8xID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3ZfbHV4KTsgaWYgKHVubGlrZWx5 KChfX3B5eF90XzEgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigw LCAxMDM1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3ZfdmFsID0gX19weXhfdF8xOworKyAg X19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhf dl9zZWxmKSwgX19weXhfbl9zX2Nsb3NlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgMTEyMCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKKysgIF9fcHl4X3RfMyA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICBfX3B5eF90XzMgPSBQ eU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykp IHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19w eXhfdF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKKysgICAgICBfX1B5eF9J TkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5j dGlvbik7CisrICAgIH0KKysgIH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVj dF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19w eXhfdF8zID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEx MjAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwMzYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE5Cisr ICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCisgICogCistICogICAgICAgICB2YWwgPSBs dXgKKy0gKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0FNQklFTlRfTElH SFQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcGFyYW0uZGF0YSA9 ICZ2YWwKKysgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmNsb3NlKCkKKyAgKiAKKyAgKi8KKy0gIF9fcHl4 X3ZfcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fQU1CSUVOVF9MSUdIVDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM3CistICogICAgICAgICB2YWwgPSBs dXgKKy0gKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0FNQklFTlRfTElH SFQKKy0gKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICovCistICBfX3B5eF92X3Bh cmFtLmRhdGEgPSAoJl9fcHl4X3ZfdmFsKTsKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor KyAgZ290byBfX3B5eF9MMDsKKysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNS RUYoX19weXhfdF8zKTsKKysgIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0dGVyLmxpYnMu bXB2LlJlbmRlckNvbnRleHQuX19kZWFsbG9jX18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5l bm8sIF9fcHl4X2ZpbGVuYW1lLCAxLCAwKTsKKysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworK30KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDM5CistICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAorLSAqIAorLSAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwg cGFyYW0pCistICogICAgICAgICByZXR1cm4gZXJyCisrLyogIih0cmVlIGZyYWdtZW50KSI6MQor KyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVy dGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorKyAqIGRlZiBfX3NldHN0YXRl X2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKyAgKi8KKy0gIHsKKy0gICAgICAjaWZkZWYg V0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsKKy0gICAgICBQeV9VTkJM T0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAgICAgI2Vu ZGlmCistICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwNDAKKy0gKiAKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAg ICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4 LCBwYXJhbSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmV0dXJu IGVycgorLSAqIAorLSAqLworLSAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfcmVuZGVyX2NvbnRl eHRfc2V0X3BhcmFtZXRlcihfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW0pOworLSAg ICAgIH0KKysvKiBQeXRob24gd3JhcHBlciAqLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yM19fcmVkdWNlX2N5dGhvbl9f KFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7 IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF8yM19fcmVkdWNlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgeworKyAgUHlPYmplY3QgKl9f cHl4X3IgPSAwOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKysgIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzIy X19yZWR1Y2VfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSk7CisgCistICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwMzkKKy0gKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFs CistICogCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0 ZXIoc2VsZi5fY3R4LCBwYXJhbSkKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKy0gKi8KKy0gICAg ICAvKmZpbmFsbHk6Ki8geworLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAg I2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7Cist ICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgI2VuZGlmCistICAgICAgICAg IGdvdG8gX19weXhfTDU7CistICAgICAgICB9CistICAgICAgICBfX3B5eF9MNTo7CistICAgICAg fQorLSAgfQorKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOworK30KKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDQxCistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAq ICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYu X2N0eCwgcGFyYW0pCistICogICAgICAgICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgZGVmIGdldF9uZXh0X2ZyYW1lX2luZm8oc2VsZik6Cisr c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJD b250ZXh0XzIyX19yZWR1Y2VfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKysg IFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z CisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAw OworKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2Ns aW5lbm8gPSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhv bl9fIiwgMCk7CisrCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoyCisrICogZGVmIF9fcmVkdWNl X2N5dGhvbl9fKHNlbGYpOgorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5u b3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwg X19weXhfc3RhdGUpOgorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3Qg YmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorICAqLworLSAg X19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21f aW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MTA0MSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9f cHl4X3IgPSBfX3B5eF90XzI7CistICBfX3B5eF90XzIgPSAwOworLSAgZ290byBfX3B5eF9MMDsK KysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJy b3IsIF9fcHl4X3R1cGxlX18xNCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CisrICBfX1B5eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOworKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJy b3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyOQorLSAqIAor LSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgc2V0X2FtYmllbnRfbGlnaHQoc2VsZiwgbHV4 KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZjoKKy0gKiAg ICAgICAgICAgICBtcHZfcmVuZGVyX3BhcmFtIHBhcmFtCisrICAvKiAiKHRyZWUgZnJhZ21lbnQp IjoxCisrICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBj b252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCisrICogZGVmIF9fc2V0 c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorICAqLworIAorICAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMik7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5k ZXJDb250ZXh0LnNldF9hbWJpZW50X2xpZ2h0IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5v LCBfX3B5eF9maWxlbmFtZSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0Ll9fcmVkdWNl X2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 CisgICBfX3B5eF9yID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNDMKKy0g KiAgICAgICAgIHJldHVybiBlcnIKKy0gKiAKKy0gKiAgICAgZGVmIGdldF9uZXh0X2ZyYW1lX2lu Zm8oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGNkZWY6 CistICogICAgICAgICAgICAgbXB2X3JlbmRlcl9mcmFtZV9pbmZvIGluZm8KKysvKiAiKHRyZWUg ZnJhZ21lbnQpIjozCisrICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorKyAqICAgICBy YWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9u IG9iamVjdCBmb3IgcGlja2xpbmciKQorKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYs IF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICByYWlz ZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9i amVjdCBmb3IgcGlja2xpbmciKQorICAqLworIAorIC8qIFB5dGhvbiB3cmFwcGVyICovCistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250 ZXh0XzdnZXRfbmV4dF9mcmFtZV9pbmZvKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9V TlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF83Z2V0X25leHRfZnJh bWVfaW5mbyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1 bnVzZWQpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfMjVfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLypwcm90byovCisrc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 XzI1X19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9fX3B5eF9zdGF0ZSkgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworICAgX19Q eXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJn ZXRfbmV4dF9mcmFtZV9pbmZvICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNmdldF9uZXh0X2ZyYW1lX2lu Zm8oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0 ICopX19weXhfdl9zZWxmKSk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19zZXRz dGF0ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzI0X19zZXRzdGF0ZV9jeXRob25fXygo KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilf X3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOworIAorICAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNmdldF9uZXh0X2ZyYW1lX2lu Zm8oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAq X19weXhfdl9zZWxmKSB7CistICBzdHJ1Y3QgbXB2X3JlbmRlcl9mcmFtZV9pbmZvIF9fcHl4X3Zf aW5mbzsKKy0gIHN0cnVjdCBtcHZfcmVuZGVyX3BhcmFtIF9fcHl4X3ZfcGFyYW07CistICBpbnQg X19weXhfdl9lcnI7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNSZW5kZXJDb250ZXh0XzI0X19zZXRzdGF0ZV9jeXRob25fXyhDWVRIT05fVU5VU0VE IHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9f cHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkg eworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKKy0gIGludCBfX3B5eF90XzE7CistICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsK Ky0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9 IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5 eF90XzEgPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpf X3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X25leHRfZnJhbWVfaW5mbyIsIDApOworLQorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNDgKKy0gKiAgICAgICAgICAgICBt cHZfcmVuZGVyX3BhcmFtIHBhcmFtCistICogCistICogICAgICAgICBwYXJhbS50eXBlID0gTVBW X1JFTkRFUl9QQVJBTV9ORVhUX0ZSQU1FX0lORk8gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZpbmZvCistICogICAgICAgICB3aXRoIG5vZ2ls OgorLSAqLworLSAgX19weXhfdl9wYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9ORVhUX0ZS QU1FX0lORk87CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA0OQor LSAqIAorLSAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFN RV9JTkZPCistICogICAgICAgICBwYXJhbS5kYXRhID0gJmluZm8gICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBlcnIg PSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oc2VsZi5fY3R4LCBwYXJhbSkKKy0gKi8KKy0g IF9fcHl4X3ZfcGFyYW0uZGF0YSA9ICgmX19weXhfdl9pbmZvKTsKKysgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fIiwgMCk7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MAorLSAqICAgICAgICAgcGFyYW0udHlwZSA9IE1Q Vl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZPCistICogICAgICAgICBwYXJhbS5kYXRhID0g JmluZm8KKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oc2Vs Zi5fY3R4LCBwYXJhbSkKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6CisrICAvKiAiKHRyZWUgZnJh Z21lbnQpIjo0CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBj b252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCisrICogZGVmIF9fc2V0 c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorKyAqICAgICByYWlzZSBUeXBlRXJy b3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3Ig cGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICovCistICB7CistICAg ICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAg ICAgUHlfVU5CTE9DS19USFJFQURTCistICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOwor LSAgICAgICNlbmRpZgorLSAgICAgIC8qdHJ5OiovIHsKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5 T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4X3R1cGxlX18xNSwgTlVM TCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9SYWlzZShfX3B5eF90 XzEsIDAsIDAsIDApOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 CisrICBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCisgCistICAgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MQorLSAqICAgICAgICAgcGFyYW0uZGF0YSA9 ICZpbmZvCistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVyciA9IG1w dl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhzZWxmLl9jdHgsIHBhcmFtKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBpZiBlcnIgPCAwOgorLSAqICAgICAgICAgICAg IHJhaXNlIE1QVkVycm9yKGVycikKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjMKKysgKiBkZWYg X19yZWR1Y2VfY3l0aG9uX18oc2VsZik6CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5f Y3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIp CisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4 IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCisg ICovCistICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhf X3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW0pOworLSAgICAgIH0KKyAKKy0gICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MAorLSAqICAgICAgICAgcGFyYW0u dHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZPCistICogICAgICAgICBwYXJh bS5kYXRhID0gJmluZm8KKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0 X2luZm8oc2VsZi5fY3R4LCBwYXJhbSkKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6CistICovCist ICAgICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAg ICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgp OworLSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICNlbmRpZgorLSAgICAg ICAgICBnb3RvIF9fcHl4X0w1OworLSAgICAgICAgfQorLSAgICAgICAgX19weXhfTDU6OworLSAg ICAgIH0KKy0gIH0KKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfTDFfZXJy b3I6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dC5fX3NldHN0YXRlX2N5dGhvbl9fIiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9y ID0gTlVMTDsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MgorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0g KiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0X2luZm8oc2VsZi5fY3R4 LCBwYXJhbSkKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCisrLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMjMKKyAgKiAKKysgKiBjZGVmIGNsYXNzIE9wZW5HTFJl bmRlckNvbnRleHQoUmVuZGVyQ29udGV4dCk6CisrICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBt cHYsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgIGdl dF9wcm9jX2FkZHJlc3MsCisrICogICAgICAgICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpOgor ICAqLworLSAgX19weXhfdF8xID0gKChfX3B5eF92X2VyciA8IDApICE9IDApOworLSAgaWYgKHVu bGlrZWx5KF9fcHl4X3RfMSkpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwNTMKKy0gKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVuZGVyX2NvbnRleHRfZ2V0 X2luZm8oc2VsZi5fY3R4LCBwYXJhbSkKKy0gKiAgICAgICAgIGlmIGVyciA8IDA6CistICogICAg ICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogCistICogICAgICAgICByZXR1cm4gUmVuZGVyRnJhbWVJbmZvKCkuX2Zyb21fc3RydWN0 KCZpbmZvKQorLSAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMywg X19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIo MCwgMTA1MywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwor LSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1 bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwNTMsIF9fcHl4X0wxX2Vycm9yKQor LSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgX19weXhfdF81ID0gTlVMTDsKKy0g ICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzMpKSkgeworLSAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfMyk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CistICAgICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsKKy0gICAgICAg IF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlvbik7CistICAg ICAgfQorKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMp OyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x OU9wZW5HTFJlbmRlckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5 T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgeworKyAgUHlPYmplY3Qg Kl9fcHl4X3ZfbXB2ID0gMDsKKysgIFB5T2JqZWN0ICpfX3B5eF92X2dldF9wcm9jX2FkZHJlc3Mg PSAwOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfYXJncyA9IDA7CisrICBQeU9iamVjdCAqX19weXhf dl9rd2FyZ3MgPSAwOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFyICpf X3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisrICBpbnQg X19weXhfcjsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19pbml0X18gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF92X2t3YXJn cyA9IFB5RGljdF9OZXcoKTsgaWYgKHVubGlrZWx5KCFfX3B5eF92X2t3YXJncykpIHJldHVybiAt MTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X2t3YXJncyk7CisrICBpZiAoUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKSA+IDIpIHsKKysgICAgX19weXhfdl9hcmdzID0gUHlUdXBsZV9HZXRT bGljZShfX3B5eF9hcmdzLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsKKysgICAg aWYgKHVubGlrZWx5KCFfX3B5eF92X2FyZ3MpKSB7CisrICAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3Zfa3dhcmdzKTsgX19weXhfdl9rd2FyZ3MgPSAwOworKyAgICAgIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworKyAgICAgIHJldHVybiAtMTsKKyAgICAgfQorLSAgICBfX3B5eF90XzIg PSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4 X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBf X3B5eF90XzQpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7 CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMDUzLCBfX3B5eF9MMV9lcnJvcikK Ky0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICBfX1B5eF9SYWlzZShfX3B5eF90XzIsIDAsIDAsIDAp OworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgX19Q WVhfRVJSKDAsIDEwNTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhf dl9hcmdzKTsKKysgIH0gZWxzZSB7CisrICAgIF9fcHl4X3ZfYXJncyA9IF9fcHl4X2VtcHR5X3R1 cGxlOyBfX1B5eF9JTkNSRUYoX19weXhfZW1wdHlfdHVwbGUpOworKyAgfQorKyAgeworKyAgICBz dGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19tcHYsJl9f cHl4X25fc19nZXRfcHJvY19hZGRyZXNzLDB9OworKyAgICBQeU9iamVjdCogdmFsdWVzWzJdID0g ezAsMH07CisrICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworKyAgICAgIFB5X3NzaXpl X3Qga3dfYXJnczsKKysgICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9H RVRfU0laRShfX3B5eF9hcmdzKTsKKysgICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CisrICAgICAg ICBkZWZhdWx0OgorKyAgICAgICAgY2FzZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRF TShfX3B5eF9hcmdzLCAxKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAg IGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Cisr ICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAwOiBicmVhazsKKysg ICAgICB9CisrICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworKyAgICAg IHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBpZiAobGlr ZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5 eF9uX3NfbXB2KSkgIT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAgIGVsc2UgZ290byBfX3B5eF9M NV9hcmd0dXBsZV9lcnJvcjsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAg IGNhc2UgIDE6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3Rf R2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcykpICE9IDAp KSBrd19hcmdzLS07CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgX19QeXhfUmFpc2VBcmd0 dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAxMTIzLCBf X3B5eF9MM19lcnJvcikKKysgICAgICAgIH0KKysgICAgICB9CisrICAgICAgaWYgKHVubGlrZWx5 KGt3X2FyZ3MgPiAwKSkgeworKyAgICAgICAgY29uc3QgUHlfc3NpemVfdCB1c2VkX3Bvc19hcmdz ID0gKHBvc19hcmdzIDwgMikgPyBwb3NfYXJncyA6IDI7CisrICAgICAgICBpZiAodW5saWtlbHko X19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMs IF9fcHl4X3Zfa3dhcmdzLCB2YWx1ZXMsIHVzZWRfcG9zX2FyZ3MsICJfX2luaXRfXyIpIDwgMCkp IF9fUFlYX0VSUigwLCAxMTIzLCBfX3B5eF9MM19lcnJvcikKKysgICAgICB9CisrICAgIH0gZWxz ZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSA8IDIpIHsKKysgICAgICBnb3RvIF9f cHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworKyAgICB9IGVsc2UgeworKyAgICAgIHZhbHVlc1swXSA9 IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CisrICAgICAgdmFsdWVzWzFdID0gUHlU dXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKysgICAgfQorKyAgICBfX3B5eF92X21wdiA9 IHZhbHVlc1swXTsKKysgICAgX19weXhfdl9nZXRfcHJvY19hZGRyZXNzID0gdmFsdWVzWzFdOwor KyAgfQorKyAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKysgIF9fcHl4 X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2lu aXRfXyIsIDAsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIo MCwgMTEyMywgX19weXhfTDNfZXJyb3IpCisrICBfX3B5eF9MM19lcnJvcjo7CisrICBfX1B5eF9E RUNSRUYoX19weXhfdl9hcmdzKTsgX19weXhfdl9hcmdzID0gMDsKKysgIF9fUHl4X0RFQ1JFRihf X3B5eF92X2t3YXJncyk7IF9fcHl4X3Zfa3dhcmdzID0gMDsKKysgIF9fUHl4X0FkZFRyYWNlYmFj aygidmlkY3V0dGVyLmxpYnMubXB2Lk9wZW5HTFJlbmRlckNvbnRleHQuX19pbml0X18iLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIC0xOworKyAgX19weXhfTDRfYXJndW1lbnRf dW5wYWNraW5nX2RvbmU6OworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xOU9wZW5HTFJlbmRlckNvbnRleHRfX19pbml0X18oKChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSwg X19weXhfdl9tcHYsIF9fcHl4X3ZfZ2V0X3Byb2NfYWRkcmVzcywgX19weXhfdl9hcmdzLCBfX3B5 eF92X2t3YXJncyk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDUyCistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIGVyciA9IG1wdl9y ZW5kZXJfY29udGV4dF9nZXRfaW5mbyhzZWxmLl9jdHgsIHBhcmFtKQorLSAqICAgICAgICAgaWYg ZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHJh aXNlIE1QVkVycm9yKGVycikKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19QeXhf WERFQ1JFRihfX3B5eF92X2FyZ3MpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X2t3YXJncyk7 CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiBfX3B5eF9yOwor K30KKysKKytzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5H TFJlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhf dl9tcHYsIFB5T2JqZWN0ICpfX3B5eF92X2dldF9wcm9jX2FkZHJlc3MsIFB5T2JqZWN0ICpfX3B5 eF92X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF92X2t3YXJncykgeworKyAgUHlPYmplY3QgKl9fcHl4 X3ZfaW5pdF9wYXJhbXMgPSBOVUxMOworKyAgaW50IF9fcHl4X3I7CisrICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CisrICBQeU9iamVj dCAqX19weXhfdF8yID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworKyAg UHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CisrICBpbnQgX19weXhfbGluZW5vID0gMDsKKysg IGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5v ID0gMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyIsIDApOworKwor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMjcKKysgKiAgICAgICAgICAg ICAgICAgICphcmdzLCAqKmt3YXJncyk6CisrICogICAgICAgICBpbml0X3BhcmFtcyA9IHsKKysg KiAgICAgICAgICAgICAiZ2V0X3Byb2NfYWRkcmVzcyI6IGdldF9wcm9jX2FkZHJlc3MgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgfQorKyAqICAgICAgICAgUmVuZGVy Q29udGV4dC5fX2luaXRfXyhzZWxmLCBtcHYsIFJlbmRlckNvbnRleHQuQVBJX09QRU5HTCwKKysg Ki8KKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEyNywgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF90XzEs IF9fcHl4X25fc19nZXRfcHJvY19hZGRyZXNzLCBfX3B5eF92X2dldF9wcm9jX2FkZHJlc3MpIDwg MCkgX19QWVhfRVJSKDAsIDExMjcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdl9pbml0X3Bh cmFtcyA9ICgoUHlPYmplY3QqKV9fcHl4X3RfMSk7CisrICBfX3B5eF90XzEgPSAwOworKworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMjkKKysgKiAgICAgICAgICAgICAi Z2V0X3Byb2NfYWRkcmVzcyI6IGdldF9wcm9jX2FkZHJlc3MKKysgKiAgICAgICAgIH0KKysgKiAg ICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0LkFQ SV9PUEVOR0wsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW5pdF9wYXJhbXMsICphcmdzLCAqKmt3YXJncykKKyAgKiAKKyAg Ki8KKy0gIH0KKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9i amVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSwg X19weXhfbl9zX2luaXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAx MTI5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQpLCBfX3B5eF9uX3NfQVBJX09Q RU5HTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExMjksIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1NQorLSAqICAgICAgICAgICAgIHJhaXNlIE1QVkVy cm9yKGVycikKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTMwCisrICog ICAgICAgICB9CisrICogICAgICAgICBSZW5kZXJDb250ZXh0Ll9faW5pdF9fKHNlbGYsIG1wdiwg UmVuZGVyQ29udGV4dC5BUElfT1BFTkdMLAorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbml0X3BhcmFtcywgKmFyZ3MsICoqa3dhcmdzKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisgICogCistICogICAgICAgICByZXR1cm4gUmVuZGVyRnJhbWVJbmZvKCkuX2Zyb21f c3RydWN0KCZpbmZvKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogY2xhc3MgQ2Fs bGJhY2tUaHJlYWQoVGhyZWFkKToKKysgKi8KKysgIF9fcHl4X3RfMyA9IFB5VHVwbGVfTmV3KDQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgX19QeXhfSU5DUkVGKCgoUHlP YmplY3QgKilfX3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X0dJVkVSRUYoKChQeU9iamVjdCAqKV9f cHl4X3Zfc2VsZikpOworKyAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDAsICgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X0lOQ1JFRihfX3B5eF92X21wdik7CisrICBf X1B5eF9HSVZFUkVGKF9fcHl4X3ZfbXB2KTsKKysgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8z LCAxLCBfX3B5eF92X21wdik7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMik7CisrICBQeVR1 cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMiwgX19weXhfdF8yKTsKKysgIF9fUHl4X0lOQ1JFRihf X3B5eF92X2luaXRfcGFyYW1zKTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdl9pbml0X3BhcmFt cyk7CisrICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfMywgMywgX19weXhfdl9pbml0X3BhcmFt cyk7CisrICBfX3B5eF90XzIgPSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExMjkKKysgKiAgICAgICAgICAgICAiZ2V0X3Byb2NfYWRkcmVzcyI6IGdldF9wcm9j X2FkZHJlc3MKKysgKiAgICAgICAgIH0KKysgKiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0 X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0LkFQSV9PUEVOR0wsICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXJh bXMsICphcmdzLCAqKmt3YXJncykKKyAgKiAKKy0gKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJh Y2soc2VsZiwgY2IpOgorICAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4 X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbykpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMDU1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3Rf MiA9IFB5TnVtYmVyX0FkZChfX3B5eF90XzMsIF9fcHl4X3ZfYXJncyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExMjksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7CistICBfX3B5eF90XzMgPSAoKHN0cnVjdCBfX3B5eF92dGFic3Ry dWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKikoKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKV9fcHl4X3RfMikt Pl9fcHl4X3Z0YWIpLT5fZnJvbV9zdHJ1Y3QoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKilfX3B5eF90XzIpLCAoJl9fcHl4X3ZfaW5mbykp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMDU1LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzAKKysgKiAgICAgICAgIH0KKysg KiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0 LkFQSV9PUEVOR0wsCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfcGFy YW1zLCAqYXJncywgKiprd2FyZ3MpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAK KysgKiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOgorKyAqLworKyAgX19weXhfdF8zID0g UHlEaWN0X0NvcHkoX19weXhfdl9rd2FyZ3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9f UFlYX0VSUigwLCAxMTMwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzMpOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMjkKKysgKiAg ICAgICAgICAgICAiZ2V0X3Byb2NfYWRkcmVzcyI6IGdldF9wcm9jX2FkZHJlc3MKKysgKiAgICAg ICAgIH0KKysgKiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0X18oc2VsZiwgbXB2LCBSZW5k ZXJDb250ZXh0LkFQSV9PUEVOR0wsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXJhbXMsICphcmdzLCAqKmt3YXJn cykKKysgKiAKKysgKi8KKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhf dF8xLCBfX3B5eF90XzIsIF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDAsIDExMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NCk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19weXhfciA9IF9fcHl4X3Rf MzsKKy0gIF9fcHl4X3RfMyA9IDA7CistICBnb3RvIF9fcHl4X0wwOworKyAgX19QeXhfREVDUkVG KF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDQzCistICogICAgICAgICByZXR1cm4gZXJyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEyMworICAqIAorLSAqICAgICBkZWYgZ2V0X25leHRfZnJhbWVfaW5mbyhzZWxm KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZjoKKy0gKiAg ICAgICAgICAgICBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gaW5mbworKyAqIGNkZWYgY2xhc3MgT3Bl bkdMUmVuZGVyQ29udGV4dChSZW5kZXJDb250ZXh0KToKKysgKiAgICAgZGVmIF9faW5pdF9fKHNl bGYsIG1wdiwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAg ICAgZ2V0X3Byb2NfYWRkcmVzcywKKysgKiAgICAgICAgICAgICAgICAgICphcmdzLCAqKmt3YXJn cyk6CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3IgPSAw OworKyAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNS RUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKyAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdF81KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxp YnMubXB2LlJlbmRlckNvbnRleHQuZ2V0X25leHRfZnJhbWVfaW5mbyIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7CisrICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5PcGVuR0xSZW5kZXJDb250ZXh0 Ll9faW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 CisrICBfX3B5eF9yID0gLTE7CisgICBfX3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5 eF9yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9pbml0X3BhcmFtcyk7CisgICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1NworLSAqICAgICAgICAgcmV0dXJuIFJl bmRlckZyYW1lSW5mbygpLl9mcm9tX3N0cnVjdCgmaW5mbykKKy0gKiAKKy0gKiAgICAgZGVmIHNl dF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29u dGV4dF9zZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAq PmNiKQorKy8qICIodHJlZSBmcmFnbWVudCkiOjEKKysgKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18o c2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgcmFpc2UgVHlwZUVy cm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9y IHBpY2tsaW5nIikKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0 ZSk6CisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfOXNldF91cGRhdGVf Y2FsbGJhY2soUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2IpOyAv KnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfOXNldF91cGRhdGVfY2FsbGJhY2soUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2IpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNvbnRleHRfM19fcmVkdWNlX2N5 dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVu dXNlZCk7IC8qcHJvdG8qLworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF8zX19yZWR1Y2VfY3l0aG9uX18oUHlPYmpl Y3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7CisgICBQ eU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldF91cGRhdGVfY2FsbGJhY2sgKHdyYXBwZXIp IiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVu ZGVyQ29udGV4dF84c2V0X3VwZGF0ZV9jYWxsYmFjaygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0 ICopX19weXhfdl9jYikpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNl X2N5dGhvbl9fICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNvbnRleHRfMl9fcmVkdWNlX2N5dGhvbl9fKCgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4 dCAqKV9fcHl4X3Zfc2VsZikpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBf X1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAK Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfOHNldF91cGRhdGVfY2FsbGJhY2soc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhf dl9jYikgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzE5T3BlbkdMUmVuZGVyQ29udGV4dF8yX19yZWR1Y2VfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0 ICpfX3B5eF92X3NlbGYpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0 X3VwZGF0ZV9jYWxsYmFjayIsIDApOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7Cisr ICBpbnQgX19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX3JlZHVjZV9jeXRob25fXyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwNTgKKy0gKiAKKy0gKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJh Y2soc2VsZiwgY2IpOgorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9zZXRfdXBkYXRl X2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKQorLSAqICAgICAg ICAgc2VsZi51cGRhdGVfY2IgPSBjYgorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MgorKyAqIGRl ZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxm Ll9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5n IikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhv bl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9j dHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikK KyAgKi8KKy0gIHsKKy0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0 YXRlICpfc2F2ZTsKKy0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0 R0lMX1JlbWVtYmVyKCk7CistICAgICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8geworKyAgX19w eXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF9idWlsdGluX1R5cGVFcnJvciwgX19w eXhfdHVwbGVfXzE2LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MSwgMiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9f UHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKKysgIF9fUFlYX0VSUigxLCAyLCBfX3B5eF9MMV9lcnJvcikKKyAK Ky0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU5CistICogICAg IGRlZiBzZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKToKKy0gKiAgICAgICAgIHdpdGggbm9n aWw6CistICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3NldF91cGRhdGVfY2FsbGJh Y2soc2VsZi5fY3R4LCAmX2NfdXBkYXRlY2IsIDx2b2lkICo+Y2IpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKKy0gKiAKKy0gKi8K Ky0gICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9zZXRfdXBkYXRlX2NhbGxiYWNrKF9fcHl4X3Zf c2VsZi0+X2N0eCwgKCZfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY191cGRhdGVjYiks ICgodm9pZCAqKV9fcHl4X3ZfY2IpKTsKKy0gICAgICB9CistCistICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTgKKy0gKiAKKy0gKiAgICAgZGVmIHNldF91cGRhdGVf Y2FsbGJhY2soc2VsZiwgY2IpOgorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9zZXRf dXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKQorLSAq ICAgICAgICAgc2VsZi51cGRhdGVfY2IgPSBjYgorLSAqLworLSAgICAgIC8qZmluYWxseToqLyB7 CistICAgICAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJF QUQKKy0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAgUHlfQkxP Q0tfVEhSRUFEUworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNTsK Ky0gICAgICAgIH0KKy0gICAgICAgIF9fcHl4X0w1OjsKKy0gICAgICB9CistICB9CistCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2MAorLSAqICAgICAgICAgd2l0aCBu b2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3VwZGF0ZV9jYWxs YmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQgKj5jYikKKy0gKiAgICAgICAgIHNl bGYudXBkYXRlX2NiID0gY2IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAq ICAgICBkZWYgdXBkYXRlKHNlbGYpOgorLSAqLworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfY2Ip OworLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X2NiKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92 X3NlbGYtPnVwZGF0ZV9jYik7CistICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT51cGRhdGVf Y2IpOworLSAgX19weXhfdl9zZWxmLT51cGRhdGVfY2IgPSBfX3B5eF92X2NiOworLQorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTcKKy0gKiAgICAgICAgIHJldHVybiBS ZW5kZXJGcmFtZUluZm8oKS5fZnJvbV9zdHJ1Y3QoJmluZm8pCistICogCistICogICAgIGRlZiBz ZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2Nv bnRleHRfc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLl9jdHgsICZfY191cGRhdGVjYiwgPHZvaWQg Kj5jYikKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjEKKysgKiBkZWYgX19yZWR1Y2VfY3l0aG9u X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgcmFpc2UgVHlw ZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3Qg Zm9yIHBpY2tsaW5nIikKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9z dGF0ZSk6CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3Ig PSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBfX3B5eF9MMV9lcnJvcjo7Cisr ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1 dHRlci5saWJzLm1wdi5PcGVuR0xSZW5kZXJDb250ZXh0Ll9fcmVkdWNlX2N5dGhvbl9fIiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0g TlVMTDsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwNjIKKy0gKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IK Ky0gKiAKKy0gKiAgICAgZGVmIHVwZGF0ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgY2RlZiB1aW50NjRfdCByZXQKKy0gKiAgICAgICAgIHdpdGggbm9n aWw6CisrLyogIih0cmVlIGZyYWdtZW50KSI6MworKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhz ZWxmKToKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZl cnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKysgKiBkZWYgX19zZXRzdGF0 ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRl ZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKyAgKi8KKyAKKyAvKiBQeXRob24g d3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF8xMXVwZGF0ZShQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTF1cGRhdGUo UHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKSB7 Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVu R0xSZW5kZXJDb250ZXh0XzVfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKTsgLypwcm90byovCisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250 ZXh0XzVfX3NldHN0YXRlX2N5dGhvbl9fKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7CisgICBf X1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo InVwZGF0ZSAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEwdXBkYXRlKCgoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworKyAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18gKHdyYXBwZXIp IiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3Bl bkdMUmVuZGVyQ29udGV4dF80X19zZXRzdGF0ZV9jeXRob25fXygoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYp LCAoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOworIAorICAgLyogZnVuY3Rpb24g ZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJldHVy biBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTB1cGRhdGUoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmKSB7CistICB1aW50 NjRfdCBfX3B5eF92X3JldDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xOU9wZW5HTFJlbmRlckNvbnRleHRfNF9fc2V0c3RhdGVfY3l0aG9uX18oQ1lU SE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xS ZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4 X3ZfX19weXhfc3RhdGUpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKyAg IGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBO VUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoInVwZGF0ZSIsIDApOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwNjQKKy0gKiAgICAgZGVmIHVwZGF0ZShzZWxmKToKKy0gKiAgICAgICAgIGNkZWYgdWlu dDY0X3QgcmV0CistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3VwZGF0ZShz ZWxmLl9jdHgpCistICogICAgICAgICByZXR1cm4gcmV0CistICovCistICB7CistICAgICAgI2lm ZGVmIFdJVEhfVEhSRUFECistICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgUHlf VU5CTE9DS19USFJFQURTCistICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAg ICNlbmRpZgorLSAgICAgIC8qdHJ5OiovIHsKKy0KKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDY1CistICogICAgICAgICBjZGVmIHVpbnQ2NF90IHJldAorLSAq ICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICByZXQgPSBtcHZfcmVuZGVyX2Nv bnRleHRfdXBkYXRlKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgcmV0dXJuIHJldAorLSAqIAorLSAqLworLSAgICAgICAgX19weXhfdl9yZXQgPSBt cHZfcmVuZGVyX2NvbnRleHRfdXBkYXRlKF9fcHl4X3Zfc2VsZi0+X2N0eCk7CistICAgICAgfQor LQorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY0CistICogICAg IGRlZiB1cGRhdGUoc2VsZik6CistICogICAgICAgICBjZGVmIHVpbnQ2NF90IHJldAorLSAqICAg ICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgIHJldCA9IG1wdl9yZW5kZXJfY29udGV4dF91cGRhdGUoc2VsZi5fY3R4KQorLSAqICAg ICAgICAgcmV0dXJuIHJldAorLSAqLworLSAgICAgIC8qZmluYWxseToqLyB7CistICAgICAgICAv Km5vcm1hbCBleGl0OioveworLSAgICAgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAg ICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0gICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwor LSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgZ290byBfX3B5eF9MNTsKKy0gICAgICAgIH0K Ky0gICAgICAgIF9fcHl4X0w1OjsKKy0gICAgICB9CistICB9CisrICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19zZXRzdGF0ZV9jeXRob25fXyIsIDApOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjYKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICog ICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3VwZGF0ZShzZWxmLl9jdHgpCist ICogICAgICAgICByZXR1cm4gcmV0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAK Ky0gKiAgICAgQF9lcnJvcnMKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKysgKiAgICAgcmFp c2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBv YmplY3QgZm9yIHBpY2tsaW5nIikKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBf X3B5eF9zdGF0ZSk6CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBi ZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKi8KKy0gIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBf X3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfcmV0KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA2NiwgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2J1aWx0aW5fVHlwZUVycm9y LCBfX3B5eF90dXBsZV9fMTcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigxLCA0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgX19weXhfciA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7CistICBnb3RvIF9fcHl4 X0wwOworKyAgX19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsKKysgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wx X2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjIKKy0g KiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKKy0gKiAKKy0gKiAgICAgZGVmIHVwZGF0ZShz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZiB1aW50 NjRfdCByZXQKKy0gKiAgICAgICAgIHdpdGggbm9naWw6CisrICAvKiAiKHRyZWUgZnJhZ21lbnQp IjozCisrICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorKyAqICAgICByYWlzZSBUeXBl RXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBm b3IgcGlja2xpbmciKQorKyAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0 YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICByYWlzZSBUeXBlRXJy b3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3Ig cGlja2xpbmciKQorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX3B5 eF9MMV9lcnJvcjo7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9BZGRU cmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0LnVwZGF0ZSIsIF9fcHl4 X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuT3BlbkdMUmVuZGVyQ29udGV4dC5fX3NldHN0YXRl X2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 CisgICBfX3B5eF9yID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjkKKysv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMworICAqIAorLSAqICAgICBAX2Vy cm9ycworLSAqICAgICBkZWYgcmVuZGVyKHNlbGYsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUsCistICogICAgICAgICAgICAg ICAgZmxpcF95PUZhbHNlLAorKyAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6CisrICog ICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCisrICogICAgICAgICBzZWxmLmRhZW1vbiA9 IFRydWUKKyAgKi8KKyAKKyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xM3JlbmRlcihQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9f cHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIoUHlPYmplY3QgKl9fcHl4X3Zf c2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CistICBQ eU9iamVjdCAqX19weXhfdl9vcGVuZ2xfZmJvID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2Zs aXBfeSA9IDA7CistICBQeU9iamVjdCAqX19weXhfdl9kZXB0aCA9IDA7CistICBQeU9iamVjdCAq X19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3Zf c2tpcF9yZW5kZXJpbmcgPSAwOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cisr c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFj a1RocmVhZF8xX19pbml0X18oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xX19pbml0X18gPSB7Il9faW5pdF9fIiwg KFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhy ZWFkXzFfX2luaXRfXywgTUVUSF9PLCAwfTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzFfX2luaXRfXyhQeU9iamVjdCAq X19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworICAgUHlPYmplY3QgKl9fcHl4 X3IgPSAwOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJyZW5kZXIgKHdyYXBwZXIpIiwgMCk7CistICB7CistICAgIHN0YXRpYyBQ eU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX29wZW5nbF9mYm8sJl9f cHl4X25fc19mbGlwX3ksJl9fcHl4X25fc19kZXB0aCwmX19weXhfbl9zX2Jsb2NrX2Zvcl90YXJn ZXRfdGltZSwmX19weXhfbl9zX3NraXBfcmVuZGVyaW5nLDB9OworLSAgICBQeU9iamVjdCogdmFs dWVzWzVdID0gezAsMCwwLDAsMH07CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19p bml0X18gKHdyYXBwZXIpIiwgMCk7CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfX19pbml0X18oX19weXhfc2VsZiwgKChQeU9iamVj dCAqKV9fcHl4X3Zfc2VsZikpOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTA3MAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgcmVuZGVyKHNlbGYsCist ICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorLSAqICAgICAgICAgICAg ICAgIGRlcHRoPU5vbmUsCistICovCistICAgIHZhbHVlc1swXSA9ICgoUHlPYmplY3QgKilQeV9O b25lKTsKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDcxCistICogICAgIGRlZiByZW5kZXIoc2VsZiwKKy0g KiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUsCistICogICAgICAgICAgICAgICAgZmxp cF95PUZhbHNlLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg ICAgZGVwdGg9Tm9uZSwKKy0gKiAgICAgICAgICAgICAgICBibG9ja19mb3JfdGFyZ2V0X3RpbWU9 VHJ1ZSwKKy0gKi8KKy0gICAgdmFsdWVzWzFdID0gKChQeU9iamVjdCAqKVB5X0ZhbHNlKTsKKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNr VGhyZWFkX19faW5pdF9fKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF92X3NlbGYpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKysgIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsK KysgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9 IE5VTEw7CisrICBpbnQgX19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9fcHl4X2Zp bGVuYW1lID0gTlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKysgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJfX2luaXRfXyIsIDApOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA3MgorLSAqICAgICAgICAgICAgICAgIG9wZW5nbF9mYm89Tm9u ZSwKKy0gKiAgICAgICAgICAgICAgICBmbGlwX3k9RmFsc2UsCistICogICAgICAgICAgICAgICAg ZGVwdGg9Tm9uZSwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAg ICAgIGJsb2NrX2Zvcl90YXJnZXRfdGltZT1UcnVlLAorLSAqICAgICAgICAgICAgICAgIHNraXBf cmVuZGVyaW5nPUZhbHNlKToKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTM0CisrICogY2xhc3MgQ2FsbGJhY2tUaHJlYWQoVGhyZWFkKToKKysgKiAgICAgZGVmIF9faW5p dF9fKHNlbGYpOgorKyAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorKyAqICAg ICAgICAgc2VsZi5sb2NrID0gU2VtYXBob3JlKCkKKyAgKi8KKy0gICAgdmFsdWVzWzJdID0gKChQ eU9iamVjdCAqKVB5X05vbmUpOworKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzIsIF9fcHl4X25fc19UaHJlYWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VS UigwLCAxMTM0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwor KyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzIsIF9fcHl4 X25fc19pbml0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTEzNCwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhfdF8yID0gTlVMTDsKKysg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19w eXhfdF8zKSkpIHsKKysgICAgX19weXhfdF8yID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8z KTsKKysgICAgaWYgKGxpa2VseShfX3B5eF90XzIpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0 aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMyk7CisrICAgICAgX19QeXhfSU5D UkVGKF9fcHl4X3RfMik7CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBf X1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMywgZnVuY3Rpb24pOworKyAgICB9CisrICB9CisrICBf X3B5eF90XzEgPSAoX19weXhfdF8yKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzMsIF9fcHl4X3RfMiwgX19weXhfdl9zZWxmKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8zLCBfX3B5eF92X3NlbGYpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MTEzNCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDczCistICogICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorLSAqICAg ICAgICAgICAgICAgIGRlcHRoPU5vbmUsCistICogICAgICAgICAgICAgICAgYmxvY2tfZm9yX3Rh cmdldF90aW1lPVRydWUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICAgICAgICBza2lwX3JlbmRlcmluZz1GYWxzZSk6CistICogCisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTEzNQorKyAqICAgICBkZWYgX19pbml0X18oc2VsZik6CisrICog ICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKysgKiAgICAgICAgIHNlbGYuZGFlbW9uID0g VHJ1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmxvY2sg PSBTZW1hcGhvcmUoKQorKyAqICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkKKyAgKi8K Ky0gICAgdmFsdWVzWzNdID0gKChQeU9iamVjdCAqKVB5X1RydWUpOworKyAgaWYgKF9fUHl4X1B5 T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfZGFlbW9uLCBQeV9UcnVl KSA8IDApIF9fUFlYX0VSUigwLCAxMTM1LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNzQKKy0gKiAgICAgICAgICAgICAgICBkZXB0 aD1Ob25lLAorLSAqICAgICAgICAgICAgICAgIGJsb2NrX2Zvcl90YXJnZXRfdGltZT1UcnVlLAor LSAqICAgICAgICAgICAgICAgIHNraXBfcmVuZGVyaW5nPUZhbHNlKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICAgICAgY2RlZjoKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTM2CisrICogICAgICAgICBUaHJlYWQuX19pbml0X18oc2Vs ZikKKysgKiAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorKyAqICAgICAgICAgc2VsZi5sb2Nr ID0gU2VtYXBob3JlKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg c2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkKKysgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25l CisgICovCistICAgIHZhbHVlc1s0XSA9ICgoUHlPYmplY3QgKilQeV9GYWxzZSk7CistICAgIGlm ICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworLSAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKy0g ICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNlICA1OiB2YWx1 ZXNbNF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDQpOworLSAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgNDogdmFsdWVzWzNdID0gUHlUdXBsZV9HRVRf SVRFTShfX3B5eF9hcmdzLCAzKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAg ICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7 CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAyOiB2YWx1ZXNb MV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRF TShfX3B5eF9hcmdzLCAwKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAg IGNhc2UgIDA6IGJyZWFrOworLSAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBs ZV9lcnJvcjsKKy0gICAgICB9CistICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3 ZHMpOworLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKy0gICAgICAgIGNhc2UgIDA6CistICAg ICAgICBpZiAoa3dfYXJncyA+IDApIHsKKy0gICAgICAgICAgUHlPYmplY3QqIHZhbHVlID0gX19Q eXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX29wZW5nbF9mYm8pOwor LSAgICAgICAgICBpZiAodmFsdWUpIHsgdmFsdWVzWzBdID0gdmFsdWU7IGt3X2FyZ3MtLTsgfQor LSAgICAgICAgfQorLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAg MToKKy0gICAgICAgIGlmIChrd19hcmdzID4gMCkgeworLSAgICAgICAgICBQeU9iamVjdCogdmFs dWUgPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZmxpcF95 KTsKKy0gICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1sxXSA9IHZhbHVlOyBrd19hcmdzLS07 IH0KKy0gICAgICAgIH0KKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNh c2UgIDI6CistICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKy0gICAgICAgICAgUHlPYmplY3Qq IHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2Rl cHRoKTsKKy0gICAgICAgICAgaWYgKHZhbHVlKSB7IHZhbHVlc1syXSA9IHZhbHVlOyBrd19hcmdz LS07IH0KKy0gICAgICAgIH0KKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAg IGNhc2UgIDM6CistICAgICAgICBpZiAoa3dfYXJncyA+IDApIHsKKy0gICAgICAgICAgUHlPYmpl Y3QqIHZhbHVlID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9z X2Jsb2NrX2Zvcl90YXJnZXRfdGltZSk7CistICAgICAgICAgIGlmICh2YWx1ZSkgeyB2YWx1ZXNb M10gPSB2YWx1ZTsga3dfYXJncy0tOyB9CistICAgICAgICB9CistICAgICAgICBDWVRIT05fRkFM TFRIUk9VR0g7CistICAgICAgICBjYXNlICA0OgorLSAgICAgICAgaWYgKGt3X2FyZ3MgPiAwKSB7 CistICAgICAgICAgIFB5T2JqZWN0KiB2YWx1ZSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9f cHl4X2t3ZHMsIF9fcHl4X25fc19za2lwX3JlbmRlcmluZyk7CistICAgICAgICAgIGlmICh2YWx1 ZSkgeyB2YWx1ZXNbNF0gPSB2YWx1ZTsga3dfYXJncy0tOyB9CistICAgICAgICB9CistICAgICAg fQorLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxp a2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmdu YW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInJlbmRlciIpIDwgMCkpIF9fUFlYX0VSUigwLCAx MDY5LCBfX3B5eF9MM19lcnJvcikKKy0gICAgICB9CistICAgIH0gZWxzZSB7CistICAgICAgc3dp dGNoIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKSB7CistICAgICAgICBjYXNlICA1OiB2 YWx1ZXNbNF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDQpOworLSAgICAgICAgQ1lU SE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgNDogdmFsdWVzWzNdID0gUHlUdXBsZV9H RVRfSVRFTShfX3B5eF9hcmdzLCAzKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0g ICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywg Mik7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAyOiB2YWx1 ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRf SVRFTShfX3B5eF9hcmdzLCAwKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAg ICAgIGNhc2UgIDA6IGJyZWFrOworLSAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0 dXBsZV9lcnJvcjsKKy0gICAgICB9CisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfMywgX19weXhfbl9zX1NlbWFwaG9yZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDExMzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Myk7CisrICBfX3B5eF90XzIgPSBOVUxMOworKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzMpKSkgeworKyAgICBfX3B5eF90XzIg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzMpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3Rf MikpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF8zKTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKysgICAgICBfX1B5 eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBm dW5jdGlvbik7CisgICAgIH0KKy0gICAgX19weXhfdl9vcGVuZ2xfZmJvID0gdmFsdWVzWzBdOwor LSAgICBfX3B5eF92X2ZsaXBfeSA9IHZhbHVlc1sxXTsKKy0gICAgX19weXhfdl9kZXB0aCA9IHZh bHVlc1syXTsKKy0gICAgX19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUgPSB2YWx1ZXNbM107 CistICAgIF9fcHl4X3Zfc2tpcF9yZW5kZXJpbmcgPSB2YWx1ZXNbNF07CisgICB9CistICBnb3Rv IF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworLSAgX19weXhfTDVfYXJndHVwbGVf ZXJyb3I6OworLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInJlbmRlciIsIDAsIDAsIDUs IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMTA2OSwgX19weXhf TDNfZXJyb3IpCistICBfX3B5eF9MM19lcnJvcjo7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0LnJlbmRlciIsIF9fcHl4X2NsaW5lbm8sIF9f cHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhfdF8xID0gKF9fcHl4X3RfMikg PyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdF8yKSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzMpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMTEzNiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK KysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgaWYgKF9fUHl4 X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9jaywgX19weXhf dF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTM2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExMzcKKysgKiAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorKyAq ICAgICAgICAgc2VsZi5sb2NrID0gU2VtYXBob3JlKCkKKysgKiAgICAgICAgIHNlbGYubG9jay5h Y3F1aXJlKFRydWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNl bGYuY2FsbGJhY2sgPSBOb25lCisrICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZQor KyAqLworKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3Nl bGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIo MCwgMTEzNywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysg IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF8zLCBfX3B5eF9u X3NfYWNxdWlyZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExMzcs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIF9fcHl4X3RfMyA9IE5VTEw7Cisr ICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5 eF90XzIpKSkgeworKyAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIp OworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMykpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF8zKTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9f UHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgIH0KKysgIH0KKysgIF9f cHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf MiwgX19weXhfdF8zLCBQeV9UcnVlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhf dF8yLCBQeV9UcnVlKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMzcsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYo X19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx MzgKKysgKiAgICAgICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgpCisrICogICAgICAgICBzZWxm LmxvY2suYWNxdWlyZShUcnVlKQorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0g RmFsc2UKKysgKiAKKysgKi8KKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4 X3Zfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNrLCBQeV9Ob25lKSA8IDApIF9fUFlYX0VSUigwLCAx MTM4LCBfX3B5eF9MMV9lcnJvcikKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTM5CisrICogICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQorKyAqICAgICAg ICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKKysgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IEZh bHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgZGVmIHNodXRk b3duKHNlbGYpOgorKyAqLworKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhf dl9zZWxmLCBfX3B5eF9uX3NfaXNzaHV0ZG93biwgUHlfRmFsc2UpIDwgMCkgX19QWVhfRVJSKDAs IDExMzksIF9fcHl4X0wxX2Vycm9yKQorKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExMzMKKysgKiAKKysgKiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOgorKyAq ICAgICBkZWYgX19pbml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQorKyAqICAgICAgICAgc2VsZi5kYWVtb24g PSBUcnVlCisrICovCisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3Ig PSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOworKyAg X19weXhfTDFfZXJyb3I6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzIpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOworKyAgX19Q eXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQuX19pbml0 X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9f cHl4X3IgPSBOVUxMOworKyAgX19weXhfTDA6OworKyAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7 CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBOVUxMOworLSAg X19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OworLSAgX19weXhfciA9IF9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTJyZW5kZXIoKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopX19weXhfdl9z ZWxmKSwgX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF92X2ZsaXBfeSwgX19weXhfdl9kZXB0aCwg X19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUsIF9fcHl4X3Zfc2tpcF9yZW5kZXJpbmcpOwor KyAgcmV0dXJuIF9fcHl4X3I7CisrfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwNjkKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQorKyAq ICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gRmFsc2UKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMK Ky0gKiAgICAgZGVmIHJlbmRlcihzZWxmLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLAorLSAqICAgICAgICAgICAgICAgIGZs aXBfeT1GYWxzZSwKKysgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlCisrICogICAg ICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorICAqLworIAorKy8qIFB5dGhvbiB3cmFwcGVyICov Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxs YmFja1RocmVhZF8zc2h1dGRvd24oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF92X3NlbGYpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8zc2h1dGRvd24gPSB7InNodXRkb3du IiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNr VGhyZWFkXzNzaHV0ZG93biwgTUVUSF9PLCAwfTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzNzaHV0ZG93bihQeU9iamVj dCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmplY3QgKl9f cHl4X3IgPSAwOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJzaHV0ZG93biAod3JhcHBlcikiLCAwKTsKKysgIF9fcHl4X3IgPSBf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8yc2h1dGRvd24o X19weXhfc2VsZiwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOworKworICAgLyogZnVuY3Rp b24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAgIHJl dHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTJyZW5kZXIoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBQeU9iamVj dCAqX19weXhfdl9vcGVuZ2xfZmJvLCBQeU9iamVjdCAqX19weXhfdl9mbGlwX3ksIFB5T2JqZWN0 ICpfX3B5eF92X2RlcHRoLCBQeU9iamVjdCAqX19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUs IFB5T2JqZWN0ICpfX3B5eF92X3NraXBfcmVuZGVyaW5nKSB7CistICBzdHJ1Y3QgbXB2X29wZW5n bF9mYm8gX19weXhfdl9mYm87CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fUmVuZGVyUGFyYW1zICpfX3B5eF92X3BhcmFtcyA9IE5VTEw7CistICBpbnQgX19weXhf dl9yZXQ7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTRDYWxsYmFja1RocmVhZF8yc2h1dGRvd24oQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhf c2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBO VUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90 XzEgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfMjsKKy0gIGludCBfX3B5eF90XzM7CistICBQeU9i amVjdCAqX19weXhfdF80ID0gTlVMTDsKKy0gIGludCBfX3B5eF90XzU7CistICBpbnQgX19weXhf dF82OworKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhf dF8zID0gTlVMTDsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19w eXhfZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoInJlbmRlciIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoInNodXRkb3duIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTA3OQorLSAqICAgICAgICAgICAgIG1wdl9vcGVuZ2xfZmJvIGZibworLSAqIAor LSAqICAgICAgICAgcGFyYW1zID0gX1JlbmRlclBhcmFtcygpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQyCisgICog CistICogICAgICAgICBpZiBvcGVuZ2xfZmJvOgorKyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6 CisrICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lCisrICogICAgICAgICBz ZWxmLmxvY2sucmVsZWFzZSgpCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9D YWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f UmVuZGVyUGFyYW1zKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEw NzksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX3B5 eF92X3BhcmFtcyA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1Jl bmRlclBhcmFtcyAqKV9fcHl4X3RfMSk7CistICBfX3B5eF90XzEgPSAwOworKyAgaWYgKF9fUHl4 X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfaXNzaHV0ZG93biwg UHlfVHJ1ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE0MiwgX19weXhfTDFfZXJyb3IpCisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4MQorLSAqICAgICAgICAgcGFyYW1z ID0gX1JlbmRlclBhcmFtcygpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTE0MworKyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6CisrICogICAgICAgICBzZWxmLmlzc2h1 dGRvd24gPSBUcnVlCisrICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisgICog CistICogICAgICAgICBpZiBvcGVuZ2xfZmJvOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICAgICAgbWVtc2V0KCZmYm8sIDAsIHNpemVvZihmYm8pKQorLSAqICAgICAg ICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJvIiwgMCkgb3IgMAorICAqLworLSAg X19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zfb3BlbmdsX2Zibyk7IGlm ICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDEwODEsIF9fcHl4X0wxX2Vy cm9yKQorLSAgaWYgKF9fcHl4X3RfMikgeworKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJT dHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2ssIFB5X05vbmUpIDwgMCkgX19QWVhf RVJSKDAsIDExNDMsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA4MgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExNDQKKysgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRydWUKKysgKiAgICAgICAgIHNl bGYuY2FsbGJhY2sgPSBOb25lCisrICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKy0gKiAgICAgICAgIGlmIG9wZW5nbF9mYm86 CistICogICAgICAgICAgICAgbWVtc2V0KCZmYm8sIDAsIHNpemVvZihmYm8pKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgZmJvLmZibyA9IG9wZW5nbF9mYm8u Z2V0KCJmYm8iLCAwKSBvciAwCistICogICAgICAgICAgICAgZmJvLncgPSBvcGVuZ2xfZmJvWyJ3 Il0KKy0gKi8KKy0gICAgKHZvaWQpKG1lbXNldCgoJl9fcHl4X3ZfZmJvKSwgMCwgKHNpemVvZihf X3B5eF92X2ZibykpKSk7CistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDgzCistICogICAgICAgICBpZiBvcGVuZ2xfZmJvOgorLSAqICAgICAgICAgICAgIG1lbXNl dCgmZmJvLCAwLCBzaXplb2YoZmJvKSkKKy0gKiAgICAgICAgICAgICBmYm8uZmJvID0gb3Blbmds X2Ziby5nZXQoImZibyIsIDApIG9yIDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdCistICogICAgICAgICAgICAgZmJv LmggPSBvcGVuZ2xfZmJvWyJoIl0KKysgKiAgICAgZGVmIGNhbGwoc2VsZik6CisgICovCistICAg IF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9vcGVuZ2xfZmJv LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MTA4MywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAg ICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMSwgX19weXhfdHVwbGVf XzE1LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA4Mywg X19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAgX19weXhfdF8yID0gX19Q eXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAw KSkgX19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBpZiAoIV9fcHl4X3Rf MikgeworLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAg ICB9IGVsc2UgeworLSAgICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90 XzQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNSA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICAgIF9fcHl4X3Rf MyA9IF9fcHl4X3RfNTsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKKy0gICAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKKysgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9j ayk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExNDQsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX3B5eF90XzMgPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfMiwgX19weXhfbl9zX3JlbGVhc2UpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTQ0LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CisrICBfX3B5eF90XzIgPSBOVUxMOworKyAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKKysgICAg X19weXhfdF8yID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKKysgICAgaWYgKGxpa2Vs eShfX3B5eF90XzIpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VU X0ZVTkNUSU9OKF9fcHl4X3RfMyk7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMik7Cisr ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfMywgZnVuY3Rpb24pOworICAgICB9CistICAgIF9fcHl4X3RfMyA9IDA7CistICAgIF9f cHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7CistICAgIF9fcHl4X3ZfZmJvLmZibyA9IF9fcHl4X3Rf MzsKKy0KKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODQKKy0gKiAg ICAgICAgICAgICBtZW1zZXQoJmZibywgMCwgc2l6ZW9mKGZibykpCistICogICAgICAgICAgICAg ZmJvLmZibyA9IG9wZW5nbF9mYm8uZ2V0KCJmYm8iLCAwKSBvciAwCistICogICAgICAgICAgICAg ZmJvLncgPSBvcGVuZ2xfZmJvWyJ3Il0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgICAgIGZiby5oID0gb3BlbmdsX2Zib1siaCJdCistICogICAgICAgICAgICAgZmJv LmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBv ciAwCistICovCistICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0RpY3RfR2V0SXRlbShf X3B5eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc193KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMTA4NCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF80 KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQo KSkpIF9fUFlYX0VSUigwLCAxMDg0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAgIF9fcHl4X3ZfZmJvLncgPSBfX3B5eF90 XzM7CistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg1CistICog ICAgICAgICAgICAgZmJvLmZibyA9IG9wZW5nbF9mYm8uZ2V0KCJmYm8iLCAwKSBvciAwCistICog ICAgICAgICAgICAgZmJvLncgPSBvcGVuZ2xfZmJvWyJ3Il0KKy0gKiAgICAgICAgICAgICBmYm8u aCA9IG9wZW5nbF9mYm9bImgiXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9m b3JtYXQiLCAwKSBvciAwCistICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVO REVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCistICovCistICAgIF9fcHl4X3RfNCA9IF9fUHl4 X1B5T2JqZWN0X0RpY3RfR2V0SXRlbShfX3B5eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc19oKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA4NSwgX19weXhfTDFfZXJy b3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgICBfX3B5eF90XzMgPSBfX1B5 eF9QeUludF9Bc19pbnQoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGlu dCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDg1LCBfX3B5eF9MMV9l cnJvcikKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAg IF9fcHl4X3ZfZmJvLmggPSBfX3B5eF90XzM7CisrICB9CisrICBfX3B5eF90XzEgPSAoX19weXhf dF8yKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF90XzIpIDog X19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCAxMTQ0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwODYKKy0gKiAgICAgICAgICAgICBmYm8udyA9IG9wZW5n bF9mYm9bInciXQorLSAqICAgICAgICAgICAgIGZiby5oID0gb3BlbmdsX2Zib1siaCJdCistICog ICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRlcm5h bF9mb3JtYXQiLCAwKSBvciAwICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZi bykKKy0gKiAgICAgICAgIGlmIGZsaXBfeToKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTQxCisrICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZQorKyAqIAor KyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRydWUKKysgKiAgICAgICAgIHNlbGYuY2Fs bGJhY2sgPSBOb25lCisgICovCistICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0 dHJTdHIoX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzQpOworLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxs KF9fcHl4X3RfNCwgX19weXhfdHVwbGVfXzE2LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKy0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlm ICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDEwODYsIF9fcHl4X0wxX2Vy cm9yKQorLSAgICBpZiAoIV9fcHl4X3RfMikgeworLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICB9IGVsc2UgeworLSAgICAgIF9fcHl4X3RfNSA9IF9f UHl4X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNSA9PSAo aW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwODYsIF9fcHl4X0wx X2Vycm9yKQorLSAgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNTsKKy0gICAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAgICBnb3RvIF9fcHl4X0w2X2Jvb2xf Ymlub3BfZG9uZTsKKy0gICAgfQorLSAgICBfX3B5eF90XzMgPSAwOworLSAgICBfX3B5eF9MNl9i b29sX2Jpbm9wX2RvbmU6OworLSAgICBfX3B5eF92X2Ziby5pbnRlcm5hbF9mb3JtYXQgPSBfX3B5 eF90XzM7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg3Cist ICogICAgICAgICAgICAgZmJvLmggPSBvcGVuZ2xfZmJvWyJoIl0KKy0gKiAgICAgICAgICAgICBm Ym8uaW50ZXJuYWxfZm9ybWF0ID0gb3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDAp IG9yIDAKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1f T1BFTkdMX0ZCTywgJmZibykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgaWYgZmxpcF95OgorLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJf UEFSQU1fRkxJUF9ZLCAxKQorLSAqLworLSAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92 dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9w YXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJf UEFSQU1fT1BFTkdMX0ZCTywgKCZfX3B5eF92X2ZibyksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDg3LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9yID0gUHlfTm9u ZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworKyAgZ290byBfX3B5eF9MMDsKKysgIF9fcHl4X0wx X2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X1hERUNSRUYo X19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNhbGxiYWNrVGhyZWFkLnNodXRkb3duIiwgX19w eXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0g TlVMTDsKKysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDgxCistICogICAgICAgICBw YXJhbXMgPSBfUmVuZGVyUGFyYW1zKCkKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTE0NgorKyAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQorKyAqIAorKyAqICAgICBk ZWYgY2FsbChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg c2VsZi5sb2NrLnJlbGVhc2UoKQorICAqIAorLSAqICAgICAgICAgaWYgb3BlbmdsX2ZibzogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG1lbXNldCgmZmJvLCAw LCBzaXplb2YoZmJvKSkKKy0gKiAgICAgICAgICAgICBmYm8uZmJvID0gb3BlbmdsX2Ziby5nZXQo ImZibyIsIDApIG9yIDAKKyAgKi8KKy0gIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDg4CistICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9w ZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBvciAwCistICogICAgICAgICAgICAg cGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCistICog ICAgICAgICBpZiBmbGlwX3k6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg ICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKKy0gKiAg ICAgICAgIGlmIGRlcHRoIGlzIG5vdCBOb25lOgorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhf UHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfZmxpcF95KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8 IDApKSBfX1BZWF9FUlIoMCwgMTA4OCwgX19weXhfTDFfZXJyb3IpCistICBpZiAoX19weXhfdF8y KSB7CisrLyogUHl0aG9uIHdyYXBwZXIgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzVjYWxsKFB5T2JqZWN0ICpfX3B5 eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypwcm90byovCisrc3RhdGljIFB5TWV0 aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRf NWNhbGwgPSB7ImNhbGwiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzE0Q2FsbGJhY2tUaHJlYWRfNWNhbGwsIE1FVEhfTywgMH07Cisrc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF81Y2FsbChQ eU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikgeworKyAgUHlPYmpl Y3QgKl9fcHl4X3IgPSAwOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjYWxsICh3cmFwcGVyKSIsIDApOworKyAgX19weXhfciA9 IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzRjYWxsKF9f cHl4X3NlbGYsICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODkKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRk X3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykKKy0gKiAgICAgICAgIGlm IGZsaXBfeToKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFN X0ZMSVBfWSwgMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgaWYg ZGVwdGggaXMgbm90IE5vbmU6CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JF TkRFUl9QQVJBTV9ERVBUSCwgZGVwdGgpCistICovCistICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0 IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilf X3B5eF92X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9S RU5ERVJfUEFSQU1fRkxJUF9ZLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMTA4OSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIC8qIGZ1 bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7Cisr ICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDg4CistICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5n bF9mYm8uZ2V0KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBvciAwCistICogICAgICAgICAgICAgcGFy YW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCistICogICAg ICAgICBpZiBmbGlwX3k6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKKy0gKiAgICAg ICAgIGlmIGRlcHRoIGlzIG5vdCBOb25lOgorLSAqLworLSAgfQorK3N0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNGNhbGwoQ1lU SE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZikg eworKyAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4 X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKysgIGludCBfX3B5 eF9saW5lbm8gPSAwOworKyAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworKyAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImNh bGwiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkwCist ICogICAgICAgICBpZiBmbGlwX3k6CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBW X1JFTkRFUl9QQVJBTV9GTElQX1ksIDEpCistICogICAgICAgICBpZiBkZXB0aCBpcyBub3QgTm9u ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIHBhcmFtcy5h ZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIGRlcHRoKQorLSAqICAgICAgICAgaWYgbm90 IGJsb2NrX2Zvcl90YXJnZXRfdGltZToKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTQ3CisrICogCisrICogICAgIGRlZiBjYWxsKHNlbGYpOgorKyAqICAgICAgICAgc2Vs Zi5sb2NrLnJlbGVhc2UoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICog ICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOgorICAqLworLSAgX19weXhfdF8yID0gKF9fcHl4 X3ZfZGVwdGggIT0gUHlfTm9uZSk7CistICBfX3B5eF90XzYgPSAoX19weXhfdF8yICE9IDApOwor LSAgaWYgKF9fcHl4X3RfNikgeworKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgMTE0NywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYo X19weXhfdF8yKTsKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19w eXhfdF8yLCBfX3B5eF9uX3NfcmVsZWFzZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDExNDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Myk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fcHl4 X3RfMiA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzMpKSkgeworKyAgICBfX3B5eF90XzIgPSBQeU1ldGhvZF9HRVRf U0VMRihfX3B5eF90XzMpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMikpIHsKKysgICAgICBQ eU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsKKysg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rp b24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlvbik7CisrICAg IH0KKysgIH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzIpID8gX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4X3RfMikgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9Bcmco X19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsK KysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNDcsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9ERUNSRUYoX19w eXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5 MQorLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fRkxJUF9Z LCAxKQorLSAqICAgICAgICAgaWYgZGVwdGggaXMgbm90IE5vbmU6CistICogICAgICAgICAgICAg cGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwgZGVwdGgpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3Rp bWU6CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9D S19GT1JfVEFSR0VUX1RJTUUsIDApCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTE0NgorKyAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQorKyAqIAorKyAqICAgICBk ZWYgY2FsbChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg c2VsZi5sb2NrLnJlbGVhc2UoKQorKyAqIAorICAqLworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9Q eUludF9Bc19pbnQoX19weXhfdl9kZXB0aCk7IGlmICh1bmxpa2VseSgoX19weXhfdF8zID09IChp bnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTA5MSwgX19weXhfTDFf ZXJyb3IpCistICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1 dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhfdnRh YiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIF9fcHl4 X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwOTEsIF9fcHl4 X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDkwCistICogICAgICAgICBpZiBmbGlwX3k6CistICogICAgICAg ICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9GTElQX1ksIDEpCistICogICAg ICAgICBpZiBkZXB0aCBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIGRl cHRoKQorLSAqICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90YXJnZXRfdGltZToKKy0gKi8KKy0g IH0KKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IFB5X05vbmU7IF9f UHl4X0lOQ1JFRihQeV9Ob25lKTsKKysgIGdvdG8gX19weXhfTDA7CisrICBfX3B5eF9MMV9lcnJv cjo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9BZGRUcmFjZWJh Y2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1RocmVhZC5jYWxsIiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsKKysg IF9fcHl4X0wwOjsKKysgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworKyAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MgorLSAqICAgICAgICAgaWYgZGVwdGggaXMg bm90IE5vbmU6CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJB TV9ERVBUSCwgZGVwdGgpCistICogICAgICAgICBpZiBub3QgYmxvY2tfZm9yX3RhcmdldF90aW1l OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcGFyYW1zLmFk ZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCistICogICAg ICAgICBpZiBza2lwX3JlbmRlcmluZzoKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTE0OQorKyAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQorKyAqIAorKyAqICAgICBk ZWYgc2V0KHNlbGYsIGNhbGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisrICogCisgICovCistICBfX3B5eF90 XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUp OyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlYX0VSUigwLCAxMDkyLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fcHl4X3RfMiA9ICgoIV9fcHl4X3RfNikgIT0gMCk7CistICBpZiAoX19w eXhfdF8yKSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkz CistICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwg ZGVwdGgpCistICogICAgICAgICBpZiBub3QgYmxvY2tfZm9yX3RhcmdldF90aW1lOgorLSAqICAg ICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQkxPQ0tfRk9SX1RBUkdF VF9USU1FLCAwKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBpZiBz a2lwX3JlbmRlcmluZzoKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVS X1BBUkFNX1NLSVBfUkVOREVSSU5HLCAxKQorLSAqLworLSAgICBfX3B5eF90XzEgPSAoKHN0cnVj dCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICop X19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4X3ZfcGFyYW1zLCBNUFZf UkVOREVSX1BBUkFNX0JMT0NLX0ZPUl9UQVJHRVRfVElNRSwgMCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwOTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7CistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkyCist ICogICAgICAgICBpZiBkZXB0aCBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgICAgICBwYXJhbXMu YWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0RFUFRILCBkZXB0aCkKKy0gKiAgICAgICAgIGlmIG5v dCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0JMT0NLX0ZPUl9U QVJHRVRfVElNRSwgMCkKKy0gKiAgICAgICAgIGlmIHNraXBfcmVuZGVyaW5nOgorLSAqLworLSAg fQorLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTQKKy0gKiAgICAg ICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6CistICogICAgICAgICAgICAgcGFyYW1z LmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCistICog ICAgICAgICBpZiBza2lwX3JlbmRlcmluZzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fU0tJUF9SRU5E RVJJTkcsIDEpCistICogCistICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1Ry dWUoX19weXhfdl9za2lwX3JlbmRlcmluZyk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkg X19QWVhfRVJSKDAsIDEwOTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgaWYgKF9fcHl4X3RfMikgewor LQorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NQorLSAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQkxPQ0tfRk9SX1RBUkdFVF9U SU1FLCAwKQorLSAqICAgICAgICAgaWYgc2tpcF9yZW5kZXJpbmc6CistICogICAgICAgICAgICAg cGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0g Ki8KKy0gICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+ YWRkX2ludChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywg MSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwOTUsIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDk0CistICogICAgICAgICBpZiBub3QgYmxvY2tfZm9yX3RhcmdldF90 aW1lOgorLSAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQkxP Q0tfRk9SX1RBUkdFVF9USU1FLCAwKQorLSAqICAgICAgICAgaWYgc2tpcF9yZW5kZXJpbmc6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2lu dChNUFZfUkVOREVSX1BBUkFNX1NLSVBfUkVOREVSSU5HLCAxKQorLSAqIAorLSAqLworLSAgfQor LQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTcKKy0gKiAgICAgICAg ICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX1NLSVBfUkVOREVSSU5HLCAxKQor LSAqIAorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgICAgIHJldCA9IG1wdl9yZW5kZXJfY29udGV4dF9yZW5kZXIoc2VsZi5f Y3R4LCBwYXJhbXMucGFyYW1zKQorLSAqICAgICAgICAgcmV0dXJuIHJldAorLSAqLworKy8qIFB5 dGhvbiB3cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF83c2V0KFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9i amVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKytzdGF0 aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFj a1RocmVhZF83c2V0ID0geyJzZXQiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldp dGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVh ZF83c2V0LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgMH07Cisrc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF83c2V0KFB5 T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4 X2t3ZHMpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYgPSAwOworKyAgUHlPYmplY3QgKl9f cHl4X3ZfY2FsbGJhY2sgPSAwOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cisr ICBQeU9iamVjdCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucwor KyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldCAod3JhcHBlcikiLCAwKTsKKyAgIHsK Ky0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRocmVhZFN0YXRlICpfc2F2ZTsK Ky0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5eF9GYXN0R0lMX1JlbWVtYmVy KCk7CistICAgICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8geworLQorLSAgICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTgKKy0gKiAKKy0gKiAgICAgICAgIHdpdGgg bm9naWw6CistICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3JlbmRlcihz ZWxmLl9jdHgsIHBhcmFtcy5wYXJhbXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgIHJldHVybiByZXQKKy0gKiAKKy0gKi8KKy0gICAgICAgIF9fcHl4X3ZfcmV0ID0g bXB2X3JlbmRlcl9jb250ZXh0X3JlbmRlcihfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFy YW1zLT5wYXJhbXMpOworKyAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10g PSB7Jl9fcHl4X25fc19zZWxmLCZfX3B5eF9uX3NfY2FsbGJhY2ssMH07CisrICAgIFB5T2JqZWN0 KiB2YWx1ZXNbMl0gPSB7MCwwfTsKKysgICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7Cisr ICAgICAgUHlfc3NpemVfdCBrd19hcmdzOworKyAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2Fy Z3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOworKyAgICAgIHN3aXRjaCAocG9zX2Fy Z3MpIHsKKysgICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMSk7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNl ICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworKyAgICAg ICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMDogYnJlYWs7CisrICAgICAg ICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworICAgICAgIH0KKy0KKy0g ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NworLSAqICAgICAgICAg ICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fU0tJUF9SRU5ERVJJTkcsIDEpCist ICogCistICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3JlbmRlcihzZWxmLl9j dHgsIHBhcmFtcy5wYXJhbXMpCistICogICAgICAgICByZXR1cm4gcmV0CistICovCistICAgICAg LypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CistICAgICAgICAgICNp ZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworLSAg ICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICBn b3RvIF9fcHl4X0wxNDsKKysgICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7 CisrICAgICAgc3dpdGNoIChwb3NfYXJncykgeworKyAgICAgICAgY2FzZSAgMDoKKysgICAgICAg IGlmIChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3 ZHMsIF9fcHl4X25fc19zZWxmKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAgIGVsc2UgZ290 byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsK KysgICAgICAgIGNhc2UgIDE6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5 eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfY2FsbGJhY2spKSAhPSAw KSkga3dfYXJncy0tOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJn dHVwbGVJbnZhbGlkKCJzZXQiLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4 X0wzX2Vycm9yKQorICAgICAgICAgfQorLSAgICAgICAgX19weXhfTDE0OjsKKyAgICAgICB9Cisr ICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworKyAgICAgICAgaWYgKHVubGlrZWx5 KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVz LCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0IikgPCAwKSkgX19QWVhfRVJSKDAsIDExNDksIF9f cHl4X0wzX2Vycm9yKQorKyAgICAgIH0KKysgICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpF KF9fcHl4X2FyZ3MpICE9IDIpIHsKKysgICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9y OworKyAgICB9IGVsc2UgeworKyAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMCk7CisrICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCAxKTsKKysgICAgfQorKyAgICBfX3B5eF92X3NlbGYgPSB2YWx1ZXNbMF07CisrICAgIF9f cHl4X3ZfY2FsbGJhY2sgPSB2YWx1ZXNbMV07CisgICB9CisrICBnb3RvIF9fcHl4X0w0X2FyZ3Vt ZW50X3VucGFja2luZ19kb25lOworKyAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6OworKyAgX19Q eXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInNldCIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUo X19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMTE0OSwgX19weXhfTDNfZXJyb3IpCisrICBfX3B5 eF9MM19lcnJvcjo7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5D YWxsYmFja1RocmVhZC5zZXQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2Zp bGVuYW1lKTsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIE5V TEw7CisrICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7CisrICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNnNldChfX3B5 eF9zZWxmLCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfY2FsbGJhY2spOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTkKKy0gKiAgICAgICAgIHdpdGggbm9naWw6Cist ICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3JlbmRlcihzZWxmLl9jdHgs IHBhcmFtcy5wYXJhbXMpCistICogICAgICAgICByZXR1cm4gcmV0ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworKyAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gX19weXhfcjsKKyt9CisrCisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF82 c2V0KENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92 X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X2NhbGxiYWNrKSB7CisrICBQeU9iamVjdCAqX19weXhf ciA9IE5VTEw7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgaW50IF9fcHl4X2xp bmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQg X19weXhfY2xpbmVubyA9IDA7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0Iiwg MCk7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1MAorICAqIAor LSAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6CisrICogICAgIGRlZiBzZXQoc2VsZiwgY2Fs bGJhY2spOgorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKysgKiAgICAgZGVmIHJ1bihzZWxmKToKKyAgKi8KKy0g IF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9t X2ludChfX3B5eF92X3JldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDEwOTksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBf X3B5eF9yID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKy0gIGdvdG8gX19weXhfTDA7 CisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25f c19jYWxsYmFjaywgX19weXhfdl9jYWxsYmFjaykgPCAwKSBfX1BZWF9FUlIoMCwgMTE1MCwgX19w eXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2 OQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDkKKysgKiAgICAgICAg IHNlbGYubG9jay5yZWxlYXNlKCkKKysgKiAKKysgKiAgICAgZGVmIHNldChzZWxmLCBjYWxsYmFj ayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuY2FsbGJh Y2sgPSBjYWxsYmFjaworICAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgcmVuZGVy KHNlbGYsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICBv cGVuZ2xfZmJvPU5vbmUsCistICogICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorICAqLwor IAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9yID0gUHlfTm9uZTsgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworKyAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wxX2Vycm9y OjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhf dF80KTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckNv bnRleHQucmVuZGVyIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFt ZSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1Ro cmVhZC5zZXQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsK KyAgIF9fcHl4X3IgPSBOVUxMOworICAgX19weXhfTDA6OworLSAgX19QeXhfWERFQ1JFRigoUHlP YmplY3QgKilfX3B5eF92X3BhcmFtcyk7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAg IF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQor IAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTAxCistICogICAgICAgICBy ZXR1cm4gcmV0CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTIKKysgKiAg ICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjaworICAqIAorLSAqICAgICBkZWYgcmVwb3J0 X3N3YXAoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHdp dGggbm9naWw6CistICogICAgICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3JlcG9ydF9zd2Fw KHNlbGYuX2N0eCkKKysgKiAgICAgZGVmIHJ1bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNzaHV0ZG93bjoKKysgKiAgICAg ICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQorICAqLworIAorIC8qIFB5dGhvbiB3cmFw cGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNSZW5kZXJDb250ZXh0XzE1cmVwb3J0X3N3YXAoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lU SE9OX1VOVVNFRCBQeU9iamVjdCAqdW51c2VkKTsgLypwcm90byovCistc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE1cmVwb3J0 X3N3YXAoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51 c2VkKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTRDYWxsYmFja1RocmVhZF85cnVuKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9zZWxmKTsgLypwcm90byovCisrc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfOXJ1biA9IHsicnVuIiwgKFB5Q0Z1 bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzly dW4sIE1FVEhfTywgMH07Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF85cnVuKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9zZWxmKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5 eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJl cG9ydF9zd2FwICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTRyZXBvcnRfc3dhcCgoKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYp KTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJydW4gKHdyYXBwZXIpIiwgMCk7Cisr ICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJl YWRfOHJ1bihfX3B5eF9zZWxmLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7CisgCisgICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNHJlcG9ydF9zd2FwKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4X3Zf c2VsZikgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzE0Q2FsbGJhY2tUaHJlYWRfOHJ1bihDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxm LCBQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7 CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoInJlcG9ydF9zd2FwIiwgMCk7CisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsK KysgIGludCBfX3B5eF90XzI7CisrICBpbnQgX19weXhfdF8zOworKyAgUHlPYmplY3QgKl9fcHl4 X3RfNCA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzYgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CisrICBp bnQgX19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVM TDsKKysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250 ZXh0KCJydW4iLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTAyCistICogCistICogICAgIGRlZiByZXBvcnRfc3dhcChzZWxmKToKKy0gKiAgICAgICAgIHdp dGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBt cHZfcmVuZGVyX2NvbnRleHRfcmVwb3J0X3N3YXAoc2VsZi5fY3R4KQorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNTMKKyAgKiAKKysgKiAgICAgZGVmIHJ1bihzZWxmKToK KysgKiAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmlzc2h1dGRvd246ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQorKyAq ICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2Fs bGJhY2sgZWxzZSBOb25lCisgICovCistICB7CistICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECist ICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7CistICAgICAgUHlfVU5CTE9DS19USFJFQURTCist ICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJlcigpOworLSAgICAgICNlbmRpZgorLSAgICAgIC8q dHJ5OiovIHsKKysgIHdoaWxlICgxKSB7CisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0 X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfaXNzaHV0ZG93bik7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNTMsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhf RVJSKDAsIDExNTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKKysgICAgX19weXhfdF8zID0gKCghX19weXhfdF8yKSAhPSAwKTsK KysgICAgaWYgKCFfX3B5eF90XzMpIGJyZWFrOworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExMDMKKy0gKiAgICAgZGVmIHJlcG9ydF9zd2FwKHNlbGYpOgor LSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRl eHRfcmVwb3J0X3N3YXAoc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU0CisrICogICAgIGRlZiBy dW4oc2VsZik6CisrICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3NodXRkb3duOgorKyAqICAg ICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBp ZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9uZQorICAqIAorLSAqICAgICBkZWYgZnJlZShzZWxmKToK KyAgKi8KKy0gICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9yZXBvcnRfc3dhcChfX3B5eF92X3Nl bGYtPl9jdHgpOworLSAgICAgIH0KKy0KKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEwMgorLSAqIAorLSAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6CistICog ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3JlcG9ydF9zd2FwKHNlbGYuX2N0eCkKKysgICAg X19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4 X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTE1NCwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgICBfX3B5 eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNCwgX19weXhfbl9zX2Fj cXVpcmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAxMTU0LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CisrICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgICBfX3B5eF90XzQgPSBOVUxMOwor KyAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzUpKSkgeworKyAgICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfNSk7CisrICAgICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CisrICAgICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF81KTsKKysgICAgICAg IF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworKyAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKKysgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF81LCBmdW5jdGlvbik7CisrICAg ICAgfQorKyAgICB9CisrICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmpl Y3RfQ2FsbDJBcmdzKF9fcHl4X3RfNSwgX19weXhfdF80LCBQeV9UcnVlKSA6IF9fUHl4X1B5T2Jq ZWN0X0NhbGxPbmVBcmcoX19weXhfdF81LCBQeV9UcnVlKTsKKysgICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxMTU0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwor KyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTUKKysgKiAgICAgICAgIHdoaWxlIG5v dCBzZWxmLmlzc2h1dGRvd246CisrICogICAgICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1 ZSkKKysgKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBpZiBz ZWxmLmNhbGxiYWNrIGVsc2UgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICog CisrICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgorICAqLworLSAgICAg IC8qZmluYWxseToqLyB7CistICAgICAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgICAgICAj aWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICAgICAgX19QeXhfRmFzdEdJTF9Gb3JnZXQoKTsKKy0g ICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUworLSAgICAgICAgICAjZW5kaWYKKy0gICAgICAgICAg Z290byBfX3B5eF9MNTsKKysgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jYWxsYmFjayk7IGlmICh1bmxpa2VseSghX19weXhf dF81KSkgX19QWVhfRVJSKDAsIDExNTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF81KTsKKysgICAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9f cHl4X3RfNSk7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDExNTUs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81 ID0gMDsKKysgICAgaWYgKF9fcHl4X3RfMykgeworKyAgICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5 T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfbXB2X2NhbGxiYWNrKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTE1NSwgX19weXhfTDFfZXJy b3IpCisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgICAgX19weXhfdF82ID0g X19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jYWxsYmFj ayk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExNTUsIF9fcHl4X0wx X2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKyAgICAgIF9fcHl4X3Rf NyA9IE5VTEw7CisrICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlN ZXRob2RfQ2hlY2soX19weXhfdF80KSkpIHsKKysgICAgICAgIF9fcHl4X3RfNyA9IFB5TWV0aG9k X0dFVF9TRUxGKF9fcHl4X3RfNCk7CisrICAgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfNykpIHsK KysgICAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9f cHl4X3RfNCk7CisrICAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzcpOworKyAgICAgICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfNCwgZnVuY3Rpb24pOworICAgICAgICAgfQorLSAgICAgICAgX19weXhfTDU6OworICAg ICAgIH0KKysgICAgICBfX3B5eF90XzUgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0Nh bGwyQXJncyhfX3B5eF90XzQsIF9fcHl4X3RfNywgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfdF80LCBfX3B5eF90XzYpOworKyAgICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKKysgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlY X0VSUigwLCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF81KTsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysg ICAgICBfX3B5eF90XzEgPSBfX3B5eF90XzU7CisrICAgICAgX19weXhfdF81ID0gMDsKKysgICAg fSBlbHNlIHsKKysgICAgICBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICAgICAgX19weXhfdF8x ID0gUHlfTm9uZTsKKysgICAgfQorKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTAxCistICogICAgICAgICByZXR1cm4gcmV0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTE1MgorKyAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisgICog CistICogICAgIGRlZiByZXBvcnRfc3dhcChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfcmVuZGVy X2NvbnRleHRfcmVwb3J0X3N3YXAoc2VsZi5fY3R4KQorKyAqICAgICBkZWYgcnVuKHNlbGYpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5p c3NodXRkb3duOgorKyAqICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCisgICov CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fcHl4X3IgPSBQeV9Ob25lOyBf X1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOworKyAgX19weXhfTDFfZXJy b3I6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzQpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworKyAgX19QeXhfWERFQ1JFRihf X3B5eF90XzYpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOworKyAgX19QeXhfQWRkVHJh Y2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQucnVuIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gTlVMTDsK KysgIF9fcHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVm TmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDUKKy0gKiAgICAgICAgICAgICBtcHZfcmVu ZGVyX2NvbnRleHRfcmVwb3J0X3N3YXAoc2VsZi5fY3R4KQorKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTU3CisrICogICAgICAgICAgICAgc2VsZi5tcHZfY2FsbGJhY2soc2Vs Zi5jYWxsYmFjaykgaWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUKKyAgKiAKKy0gKiAgICAgZGVm IGZyZWUoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlm IG5vdCBzZWxmLmluaXRlZDoKKy0gKiAgICAgICAgICAgICByZXR1cm4KKysgKiAgICAgZGVmIG1w dl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgIHRyeToKKysgKiAgICAgICAgICAgICBjYWxsYmFjaygpCisgICovCisgCisg LyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTdmcmVlKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8x N2ZyZWUoUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqdW51 c2VkKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTRDYWxsYmFja1RocmVhZF8xMW1wdl9jYWxsYmFjayhQeU9iamVjdCAqX19weXhfc2VsZiwgUHlP YmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisrc3Rh dGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJh Y2tUaHJlYWRfMTFtcHZfY2FsbGJhY2sgPSB7Im1wdl9jYWxsYmFjayIsIChQeUNGdW5jdGlvbiko dm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNENhbGxiYWNrVGhyZWFkXzExbXB2X2NhbGxiYWNrLCBNRVRIX1ZBUkFSR1N8TUVUSF9L RVlXT1JEUywgMH07Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTRDYWxsYmFja1RocmVhZF8xMW1wdl9jYWxsYmFjayhQeU9iamVjdCAqX19weXhfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CisrICBDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYgPSAwOworKyAgUHlPYmplY3QgKl9fcHl4 X3ZfY2FsbGJhY2sgPSAwOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFy ICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBQ eU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImZyZWUgKHdyYXBwZXIpIiwgMCk7CistICBfX3B5 eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZy ZWUoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0 ICopX19weXhfdl9zZWxmKSk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgibXB2X2Nh bGxiYWNrICh3cmFwcGVyKSIsIDApOworKyAgeworKyAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5 eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19zZWxmLCZfX3B5eF9uX3NfY2FsbGJhY2ssMH07 CisrICAgIFB5T2JqZWN0KiB2YWx1ZXNbMl0gPSB7MCwwfTsKKysgICAgaWYgKHVubGlrZWx5KF9f cHl4X2t3ZHMpKSB7CisrICAgICAgUHlfc3NpemVfdCBrd19hcmdzOworKyAgICAgIGNvbnN0IFB5 X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOworKyAgICAg IHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 CisrICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2Fy Z3MsIDApOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMDog YnJlYWs7CisrICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwor KyAgICAgIH0KKysgICAgICBrd19hcmdzID0gUHlEaWN0X1NpemUoX19weXhfa3dkcyk7CisrICAg ICAgc3dpdGNoIChwb3NfYXJncykgeworKyAgICAgICAgY2FzZSAgMDoKKysgICAgICAgIGlmIChs aWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9f cHl4X25fc19zZWxmKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAgIGVsc2UgZ290byBfX3B5 eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAg ICAgIGNhc2UgIDE6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURp Y3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfY2FsbGJhY2spKSAhPSAwKSkga3df YXJncy0tOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJ bnZhbGlkKCJtcHZfY2FsbGJhY2siLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDExNTcsIF9f cHl4X0wzX2Vycm9yKQorKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBpZiAodW5saWtlbHko a3dfYXJncyA+IDApKSB7CisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25h bEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2Fy Z3MsICJtcHZfY2FsbGJhY2siKSA8IDApKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDNfZXJy b3IpCisrICAgICAgfQorKyAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cykgIT0gMikgeworKyAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisrICAgIH0g ZWxzZSB7CisrICAgICAgdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAw KTsKKysgICAgICB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOwor KyAgICB9CisrICAgIF9fcHl4X3Zfc2VsZiA9IHZhbHVlc1swXTsKKysgICAgX19weXhfdl9jYWxs YmFjayA9IHZhbHVlc1sxXTsKKysgIH0KKysgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNr aW5nX2RvbmU7CisrICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CisrICBfX1B5eF9SYWlzZUFy Z3R1cGxlSW52YWxpZCgibXB2X2NhbGxiYWNrIiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShf X3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MM19lcnJvcikKKysgIF9fcHl4 X0wzX2Vycm9yOjsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNh bGxiYWNrVGhyZWFkLm1wdl9jYWxsYmFjayIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICBy ZXR1cm4gTlVMTDsKKysgIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKysgIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8x MG1wdl9jYWxsYmFjayhfX3B5eF9zZWxmLCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfY2FsbGJhY2sp OworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTZmcmVlKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKl9fcHl4 X3Zfc2VsZikgeworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTBtcHZfY2FsbGJhY2soQ1lUSE9OX1VOVVNFRCBQeU9iamVj dCAqX19weXhfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9i amVjdCAqX19weXhfdl9jYWxsYmFjaykgeworKyAgUHlPYmplY3QgKl9fcHl4X3ZfZSA9IE5VTEw7 CisgICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0 aW9ucworLSAgaW50IF9fcHl4X3RfMTsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJm cmVlIiwgMCk7CisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIFB5T2JqZWN0ICpf X3B5eF90XzIgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CisrICBQeU9i amVjdCAqX19weXhfdF80ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwor KyAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7CisrICBpbnQgX19weXhfdF83OworKyAgUHlP YmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF85ID0gTlVMTDsK KysgIFB5T2JqZWN0ICpfX3B5eF90XzEwID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEx ID0gTlVMTDsKKysgIGludCBfX3B5eF9saW5lbm8gPSAwOworKyAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOworKyAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworKyAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIm1wdl9jYWxsYmFjayIsIDApOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMDYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTU4CisgICogCistICogICAgIGRlZiBmcmVlKHNlbGYpOgorLSAqICAgICAgICAg aWYgbm90IHNlbGYuaW5pdGVkOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICAgICAgcmV0dXJuCistICogICAgICAgICB3aXRoIG5vZ2lsOgorKyAqICAgICBkZWYgbXB2 X2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKToKKysgKiAgICAgICAgIHRyeTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGNhbGxiYWNrKCkKKysgKiAgICAgICAg IGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgKi8KKy0gIF9fcHl4X3RfMSA9ICgoIShfX3B5eF92 X3NlbGYtPmluaXRlZCAhPSAwKSkgIT0gMCk7CistICBpZiAoX19weXhfdF8xKSB7CisrICB7Cisr ICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQorKyAgICBfX1B5eF9QeVRocmVhZFN0YXRl X2Fzc2lnbgorKyAgICBfX1B5eF9FeGNlcHRpb25TYXZlKCZfX3B5eF90XzEsICZfX3B5eF90XzIs ICZfX3B5eF90XzMpOworKyAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4 X1hHT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzMpOworKyAg ICAvKnRyeToqLyB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTA3CistICogICAgIGRlZiBmcmVlKHNlbGYpOgorLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5p dGVkOgorLSAqICAgICAgICAgICAgIHJldHVybiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29u dGV4dF9mcmVlKHNlbGYuX2N0eCkKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTE1OQorKyAqICAgICBkZWYgbXB2X2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKToKKysg KiAgICAgICAgIHRyeToKKysgKiAgICAgICAgICAgICBjYWxsYmFjaygpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKysgKiAg ICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJweW1wdiBlcnJvciBkdXJpbmcgY2FsbGJhY2s6 ICVzXG4iICUgZSkKKyAgKi8KKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19w eXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gICAgZ290byBfX3B5eF9M MDsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9jYWxsYmFjayk7CisrICAgICAgX19weXhf dF81ID0gX19weXhfdl9jYWxsYmFjazsgX19weXhfdF82ID0gTlVMTDsKKysgICAgICBpZiAoQ1lU SE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNSkp KSB7CisrICAgICAgICBfX3B5eF90XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzUpOwor KyAgICAgICAgaWYgKGxpa2VseShfX3B5eF90XzYpKSB7CisrICAgICAgICAgIFB5T2JqZWN0KiBm dW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzUpOworKyAgICAgICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF82KTsKKysgICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKKysgICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzUsIGZ1bmN0aW9uKTsKKysg ICAgICAgIH0KKysgICAgICB9CisrICAgICAgX19weXhfdF80ID0gKF9fcHl4X3RfNikgPyBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwgX19weXhfdF82KSA6IF9fUHl4X1B5T2Jq ZWN0X0NhbGxOb0FyZyhfX3B5eF90XzUpOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKKysgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCAxMTU5LCBfX3B5eF9MM19lcnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF80KTsKKysgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKysg ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDYKKysgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1OAorICAqIAorLSAqICAgICBkZWYgZnJlZShzZWxmKToK Ky0gKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICAgICAgICAgIHJldHVybgorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKysg KiAgICAgZGVmIG1wdl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6CisrICogICAgICAgICB0cnk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBjYWxsYmFjaygp CisrICogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICovCistICB9CisrICAgIH0K KysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgICAgZ290byBfX3B5eF9MOF90cnlfZW5kOwor KyAgICBfX3B5eF9MM19lcnJvcjo7CisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAw OworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwOAorLSAqICAgICAgICAgaWYgbm90 IHNlbGYuaW5pdGVkOgorLSAqICAgICAgICAgICAgIHJldHVybgorLSAqICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG1wdl9y ZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0eCkKKy0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0g RmFsc2UKKy0gKi8KKy0gIHsKKy0gICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgICBQeVRo cmVhZFN0YXRlICpfc2F2ZTsKKy0gICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKy0gICAgICBfX1B5 eF9GYXN0R0lMX1JlbWVtYmVyKCk7CistICAgICAgI2VuZGlmCistICAgICAgLyp0cnk6Ki8gewor LQorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDkKKy0gKiAg ICAgICAgICAgICByZXR1cm4KKy0gKiAgICAgICAgIHdpdGggbm9naWw6CistICogICAgICAgICAg ICAgbXB2X3JlbmRlcl9jb250ZXh0X2ZyZWUoc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTYwCisrICogICAgICAgICB0cnk6CisrICogICAg ICAgICAgICAgY2FsbGJhY2soKQorKyAqICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgc3lzLnN0ZGVyci53 cml0ZSgicHltcHYgZXJyb3IgZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAlIGUpCisgICogCisgICov CistICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShfX3B5eF92X3NlbGYtPl9jdHgpOwor LSAgICAgIH0KKysgICAgX19weXhfdF83ID0gX19QeXhfUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcygo KFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0aW9uKVswXSkpKTsKKysg ICAgaWYgKF9fcHl4X3RfNykgeworKyAgICAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2LkNhbGxiYWNrVGhyZWFkLm1wdl9jYWxsYmFjayIsIF9fcHl4X2NsaW5lbm8sIF9f cHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgICAgIGlmIChfX1B5eF9HZXRFeGNlcHRp b24oJl9fcHl4X3RfNCwgJl9fcHl4X3RfNSwgJl9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwg MTE2MCwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzQpOworKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworKyAgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworKyAgICAgIF9f cHl4X3ZfZSA9IF9fcHl4X3RfNTsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEwOAorLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOgorLSAqICAgICAg ICAgICAgIHJldHVybgorLSAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYu X2N0eCkKKy0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKKysgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2MQorKyAqICAgICAgICAgICAgIGNhbGxiYWNrKCkK KysgKiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKysgKiAgICAgICAgICAgICBzeXMu c3RkZXJyLndyaXRlKCJweW1wdiBlcnJvciBkdXJpbmcgY2FsbGJhY2s6ICVzXG4iICUgZSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAqIGNkZWYgdm9pZCBfY19jYWxsYmFj ayh2b2lkKiBkKSB3aXRoIGdpbDoKKyAgKi8KKy0gICAgICAvKmZpbmFsbHk6Ki8geworLSAgICAg ICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAg ICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7CistICAgICAgICAgIFB5X0JMT0NLX1RIUkVB RFMKKy0gICAgICAgICAgI2VuZGlmCistICAgICAgICAgIGdvdG8gX19weXhfTDY7CisrICAgICAg X19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzksIF9fcHl4X25fc19zeXMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlYX0VSUigwLCAxMTYxLCBfX3B5eF9MNV9leGNlcHRf ZXJyb3IpCisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfOSk7CisrICAgICAgX19weXhfdF8x MCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF85LCBfX3B5eF9uX3Nfc3RkZXJy KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEwKSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4X0w1 X2V4Y2VwdF9lcnJvcikKKysgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xMCk7CisrICAgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7CisrICAgICAgX19weXhfdF85 ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzEwLCBfX3B5eF9uX3Nfd3JpdGUp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlYX0VSUigwLCAxMTYxLCBfX3B5eF9MNV9l eGNlcHRfZXJyb3IpCisrICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfOSk7CisrICAgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMTApOyBfX3B5eF90XzEwID0gMDsKKysgICAgICBfX3B5eF90XzEw ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0U2FmZShfX3B5eF9rcF9zX3B5bXB2X2Vycm9yX2R1cmlu Z19jYWxsYmFja19zLCBfX3B5eF92X2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMTApKSBfX1BZ WF9FUlIoMCwgMTE2MSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEwKTsKKysgICAgICBfX3B5eF90XzExID0gTlVMTDsKKysgICAgICBpZiAoQ1lU SE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzkpKSkg eworKyAgICAgICAgX19weXhfdF8xMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfOSk7Cisr ICAgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfMTEpKSB7CisrICAgICAgICAgIFB5T2JqZWN0KiBm dW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzkpOworKyAgICAgICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF8xMSk7CisrICAgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlv bik7CisrICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF85LCBmdW5jdGlvbik7Cisg ICAgICAgICB9CistICAgICAgICBfX3B5eF9MNjo7CisgICAgICAgfQorLSAgfQorKyAgICAgIF9f cHl4X3RfOCA9IChfX3B5eF90XzExKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzksIF9fcHl4X3RfMTEsIF9fcHl4X3RfMTApIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzksIF9fcHl4X3RfMTApOworKyAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xMSk7 IF9fcHl4X3RfMTEgPSAwOworKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEwKTsgX19weXhf dF8xMCA9IDA7CisrICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMCwg MTE2MSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorKyAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzgpOworKyAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAwOworKyAg ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworKyAgICAgIF9fUHl4 X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgICAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICAgIGdvdG8gX19weXhfTDRfZXhjZXB0aW9uX2hhbmRs ZWQ7CisrICAgIH0KKysgICAgZ290byBfX3B5eF9MNV9leGNlcHRfZXJyb3I7CisrICAgIF9fcHl4 X0w1X2V4Y2VwdF9lcnJvcjo7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTExMAorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfcmVu ZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCistICogICAgICAgICBzZWxmLmluaXRlZCA9IEZh bHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExNTgKKyAgKiAKKy0gKiAgICAgZGVmIGNsb3NlKHNlbGYpOgorKyAq ICAgICBkZWYgbXB2X2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKToKKysgKiAgICAgICAgIHRyeTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGNhbGxiYWNrKCkK KysgKiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgKi8KKy0gIF9fcHl4X3Zfc2Vs Zi0+aW5pdGVkID0gMDsKKysgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xKTsKKysgICAgX19Q eXhfWEdJVkVSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8zKTsK KysgICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xLCBfX3B5eF90XzIsIF9fcHl4X3Rf Myk7CisrICAgIGdvdG8gX19weXhfTDFfZXJyb3I7CisrICAgIF9fcHl4X0w0X2V4Y2VwdGlvbl9o YW5kbGVkOjsKKysgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xKTsKKysgICAgX19QeXhfWEdJ VkVSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8zKTsKKysgICAg X19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xLCBfX3B5eF90XzIsIF9fcHl4X3RfMyk7Cisr ICAgIF9fcHl4X0w4X3RyeV9lbmQ6OworKyAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExMDUKKy0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfcmVw b3J0X3N3YXAoc2VsZi5fY3R4KQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExNTcKKysgKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBp ZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9uZQorICAqIAorLSAqICAgICBkZWYgZnJlZShzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgaWYgbm90IHNlbGYuaW5p dGVkOgorLSAqICAgICAgICAgICAgIHJldHVybgorKyAqICAgICBkZWYgbXB2X2NhbGxiYWNrKHNl bGYsIGNhbGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg dHJ5OgorKyAqICAgICAgICAgICAgIGNhbGxiYWNrKCkKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9u IGV4aXQgY29kZSAqLworICAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25l KTsKKysgIGdvdG8gX19weXhfTDA7CisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CisrICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7CisrICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfOSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTApOworKyAg X19QeXhfWERFQ1JFRihfX3B5eF90XzExKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0 dGVyLmxpYnMubXB2LkNhbGxiYWNrVGhyZWFkLm1wdl9jYWxsYmFjayIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhfciA9IE5VTEw7CisgICBf X3B5eF9MMDo7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfZSk7CisgICBfX1B5eF9YR0lWRVJF RihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJu IF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTEy CistICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCisrLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExNjMKKysgKiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJweW1w diBlcnJvciBkdXJpbmcgY2FsbGJhY2s6ICVzXG4iICUgZSkKKyAgKiAKKy0gKiAgICAgZGVmIGNs b3NlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBpZiBu b3Qgc2VsZi5pbml0ZWQ6CistICogICAgICAgICAgICAgcmV0dXJuCisrICogY2RlZiB2b2lkIF9j X2NhbGxiYWNrKHZvaWQqIGQpIHdpdGggZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgIGNkZWYgdWludDY0X3QgbmFtZSA9IDx1aW50NjRfdD5kCisrICogICAgIGNhbGxi YWNrID0gX2NhbGxiYWNrcy5nZXQobmFtZSkKKyAgKi8KKyAKKy0vKiBQeXRob24gd3JhcHBlciAq LworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVu ZGVyQ29udGV4dF8xOWNsb3NlKFB5T2JqZWN0ICpfX3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKnVudXNlZCk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xOWNsb3NlKFB5T2JqZWN0ICpf X3B5eF92X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKnVudXNlZCkgeworLSAgUHlPYmpl Y3QgKl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjbG9zZSAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3Ig PSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE4Y2xvc2Uo KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICop X19weXhfdl9zZWxmKSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF8xOGNsb3NlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckNvbnRleHQgKl9fcHl4X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOwor K3N0YXRpYyB2b2lkIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2NhbGxiYWNrKHZv aWQgKl9fcHl4X3ZfZCkgeworKyAgdWludDY0X3QgX19weXhfdl9uYW1lOworKyAgUHlPYmplY3Qg Kl9fcHl4X3ZfY2FsbGJhY2sgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMK Ky0gIGludCBfX3B5eF90XzE7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiY2xvc2Ui LCAwKTsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4 X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzQgPSBOVUxMOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBj aGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cisr ICAjaWZkZWYgV0lUSF9USFJFQUQKKysgIFB5R0lMU3RhdGVfU1RBVEUgX19weXhfZ2lsc3RhdGVf c2F2ZSA9IF9fUHl4X1B5R0lMU3RhdGVfRW5zdXJlKCk7CisrICAjZW5kaWYKKysgIF9fUHl4X1Jl Zk5hbm55U2V0dXBDb250ZXh0KCJfY19jYWxsYmFjayIsIDApOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMTMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTY0CisgICogCistICogICAgIGRlZiBjbG9zZShzZWxmKToKKy0gKiAgICAgICAg IGlmIG5vdCBzZWxmLmluaXRlZDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgICAgIHJldHVybgorLSAqICAgICAgICAgd2l0aCBub2dpbDoKKysgKiBjZGVmIHZvaWQg X2NfY2FsbGJhY2sodm9pZCogZCkgd2l0aCBnaWw6CisrICogICAgIGNkZWYgdWludDY0X3QgbmFt ZSA9IDx1aW50NjRfdD5kICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgY2Fs bGJhY2sgPSBfY2FsbGJhY2tzLmdldChuYW1lKQorKyAqICAgICBjYWxsYmFjay5jYWxsKCkKKyAg Ki8KKy0gIF9fcHl4X3RfMSA9ICgoIShfX3B5eF92X3NlbGYtPmluaXRlZCAhPSAwKSkgIT0gMCk7 CistICBpZiAoX19weXhfdF8xKSB7CisrICBfX3B5eF92X25hbWUgPSAoKHVpbnQ2NF90KV9fcHl4 X3ZfZCk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE0Cist ICogICAgIGRlZiBjbG9zZShzZWxmKToKKy0gKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoK Ky0gKiAgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgd2l0aCBub2dpbDoKKy0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRf ZnJlZShzZWxmLl9jdHgpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2 NQorKyAqIGNkZWYgdm9pZCBfY19jYWxsYmFjayh2b2lkKiBkKSB3aXRoIGdpbDoKKysgKiAgICAg Y2RlZiB1aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90PmQKKysgKiAgICAgY2FsbGJhY2sgPSBfY2Fs bGJhY2tzLmdldChuYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGNh bGxiYWNrLmNhbGwoKQorICAqLworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBf X3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworLSAgICBnb3RvIF9fcHl4 X0wwOworKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fY2FsbGJhY2tzLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTE2NSwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21f dWludDY0X3QoX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgMTE2NSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsK KysgIF9fcHl4X3RfNCA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICBfX3B5eF90XzQgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsK KysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhf dF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKKysgICAgICBfX1B5eF9JTkNS RUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlv bik7CisrICAgIH0KKysgIH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlP YmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8z KTsgX19weXhfdF8zID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDExNjUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Cisr ICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fcHl4X3ZfY2Fs bGJhY2sgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExMworLSAqIAorLSAqICAgICBkZWYgY2xvc2Uoc2Vs Zik6CistICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICByZXR1cm4KKy0gKiAgICAgICAgIHdpdGggbm9naWw6 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2NgorKyAqICAgICBjZGVm IHVpbnQ2NF90IG5hbWUgPSA8dWludDY0X3Q+ZAorKyAqICAgICBjYWxsYmFjayA9IF9jYWxsYmFj a3MuZ2V0KG5hbWUpCisrICogICAgIGNhbGxiYWNrLmNhbGwoKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICovCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KF9fcHl4X3ZfY2FsbGJhY2ssIF9fcHl4X25fc19jYWxsKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgMTE2NiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYo X19weXhfdF8yKTsKKysgIF9fcHl4X3RfMyA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19N RVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICBfX3B5 eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICBpZiAobGlrZWx5KF9f cHl4X3RfMykpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVO Q1RJT04oX19weXhfdF8yKTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKKysgICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhf dF8yLCBmdW5jdGlvbik7CisrICAgIH0KKyAgIH0KKysgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMp ID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dF8zKTsgX19weXhfdF8zID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDExNjYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExMTUKKy0gKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKy0g KiAgICAgICAgICAgICByZXR1cm4KKy0gKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJl ZShzZWxmLl9jdHgpCistICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCistICovCistICB7 CistICAgICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgUHlUaHJlYWRTdGF0ZSAqX3NhdmU7 CistICAgICAgUHlfVU5CTE9DS19USFJFQURTCistICAgICAgX19QeXhfRmFzdEdJTF9SZW1lbWJl cigpOworLSAgICAgICNlbmRpZgorLSAgICAgIC8qdHJ5OiovIHsKKy0KKy0gICAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE2CistICogICAgICAgICAgICAgcmV0dXJu CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29u dGV4dF9mcmVlKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQorLSAqIAorLSAqLworLSAgICAgICAgbXB2X3JlbmRl cl9jb250ZXh0X2ZyZWUoX19weXhfdl9zZWxmLT5fY3R4KTsKKy0gICAgICB9CistCistICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTUKKy0gKiAgICAgICAgIGlmIG5v dCBzZWxmLmluaXRlZDoKKy0gKiAgICAgICAgICAgICByZXR1cm4KKy0gKiAgICAgICAgIHdpdGgg bm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBtcHZf cmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCistICogICAgICAgICBzZWxmLmluaXRlZCA9 IEZhbHNlCistICovCistICAgICAgLypmaW5hbGx5OiovIHsKKy0gICAgICAgIC8qbm9ybWFsIGV4 aXQ6Ki97CistICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgICAgICBfX1B5eF9G YXN0R0lMX0ZvcmdldCgpOworLSAgICAgICAgICBQeV9CTE9DS19USFJFQURTCistICAgICAgICAg ICNlbmRpZgorLSAgICAgICAgICBnb3RvIF9fcHl4X0w2OworLSAgICAgICAgfQorLSAgICAgICAg X19weXhfTDY6OworLSAgICAgIH0KKy0gIH0KKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTE3CistICogICAgICAgICB3aXRoIG5vZ2lsOgorLSAqICAgICAgICAgICAg IG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0eCkKKy0gKiAgICAgICAgIHNlbGYuaW5p dGVkID0gRmFsc2UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqICAgICBk ZWYgX19kZWFsbG9jX18oc2VsZik6CistICovCistICBfX3B5eF92X3NlbGYtPmluaXRlZCA9IDA7 CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExMgorLSAqICAgICAg ICAgc2VsZi5pbml0ZWQgPSBGYWxzZQorLSAqIAorLSAqICAgICBkZWYgY2xvc2Uoc2VsZik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRl ZDoKKy0gKiAgICAgICAgICAgICByZXR1cm4KKy0gKi8KKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0g IF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTkKKy0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0g RmFsc2UKKy0gKiAKKy0gKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmNsb3NlKCkKKy0gKiAKKy0gKi8KKy0K Ky0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyB2b2lkIF9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjFfX2RlYWxsb2NfXyhQeU9iamVjdCAqX19weXhf dl9zZWxmKTsgLypwcm90byovCistc3RhdGljIHZvaWQgX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzUmVuZGVyQ29udGV4dF8yMV9fZGVhbGxvY19fKFB5T2JqZWN0ICpfX3B5eF92X3Nl bGYpIHsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19kZWFsbG9jX18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzIwX19kZWFsbG9jX18oKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopX19weXhfdl9z ZWxmKSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55 RmluaXNoQ29udGV4dCgpOworLX0KKy0KKy1zdGF0aWMgdm9pZCBfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzIwX19kZWFsbG9jX18oc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmKSB7Cist ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5V TEw7CistICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90 XzMgPSBOVUxMOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5 eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18iLCAwKTsKKy0KKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIwCistICogCistICogICAgIGRlZiBfX2RlYWxsb2Nf XyhzZWxmKToKKy0gKiAgICAgICAgIHNlbGYuY2xvc2UoKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogCistICogY2RlZiBjbGFzcyBPcGVuR0xSZW5kZXJDb250ZXh0KFJlbmRlckNv bnRleHQpOgorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigo KFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX2Nsb3NlKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTEyMCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IE5VTEw7CistICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewor LSAgICBfX3B5eF90XzMgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICBpZiAo bGlrZWx5KF9fcHl4X3RfMykpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhv ZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8z KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9T RVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfMSA9IChf X3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3Rf MykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDExMjAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLQorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTkKKy0gKiAgICAgICAgIHNlbGYuaW5pdGVkID0g RmFsc2UKKy0gKiAKKy0gKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmNsb3NlKCkKKy0gKiAKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTYzCisrICogICAgICAgICAgICAgc3lzLnN0 ZGVyci53cml0ZSgicHltcHYgZXJyb3IgZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAlIGUpCisrICog CisrICogY2RlZiB2b2lkIF9jX2NhbGxiYWNrKHZvaWQqIGQpIHdpdGggZ2lsOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGNkZWYgdWludDY0X3QgbmFtZSA9IDx1aW50NjRf dD5kCisrICogICAgIGNhbGxiYWNrID0gX2NhbGxiYWNrcy5nZXQobmFtZSkKKyAgKi8KKyAKKyAg IC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworQEAgLTIxNDE1LDc3NCArMjA1NTAsMTI0NCBAQCBz dGF0aWMgdm9pZCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 XzIwX19kZWFsbG9jX18oc3RydWN0CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7Cist ICBfX1B5eF9Xcml0ZVVucmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0 Ll9fZGVhbGxvY19fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFt ZSwgMSwgMCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CisrICBfX1B5eF9Xcml0ZVVu cmFpc2FibGUoInZpZGN1dHRlci5saWJzLm1wdi5fY19jYWxsYmFjayIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUsIDEsIDApOworICAgX19weXhfTDA6OworKyAg X19QeXhfWERFQ1JFRihfX3B5eF92X2NhbGxiYWNrKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOworKyAgI2lmZGVmIFdJVEhfVEhSRUFECisrICBfX1B5eF9QeUdJTFN0YXRlX1Jl bGVhc2UoX19weXhfZ2lsc3RhdGVfc2F2ZSk7CisrICAjZW5kaWYKKyB9CisgCisgLyogIih0cmVl IGZyYWdtZW50KSI6MQorLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBj YW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorLSAq IGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiBkZWYgX19w eXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZChfX3B5eF90eXBlLCBsb25nIF9fcHl4X2NoZWNr c3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg Y2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhf cmVzdWx0CisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjNfX3JlZHVj ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0 ICp1bnVzZWQpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjNfX3JlZHVjZV9jeXRob25fXyhQeU9iamVj dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsKKytzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X19weXhfdW5waWNr bGVfRW5kT2ZGaWxlUmVhY2hlZChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisrc3RhdGljIFB5TWV0aG9k RGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfX3B5eF91bnBpY2tsZV9FbmRP ZkZpbGVSZWFjaGVkID0geyJfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkIiwgKFB5Q0Z1 bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzdfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkLCBNRVRIX1ZBUkFS R1N8TUVUSF9LRVlXT1JEUywgMH07Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN19fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQoUHlPYmplY3Qg Kl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykg eworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSA9IDA7CisrICBsb25nIF9fcHl4X3Zf X19weXhfY2hlY2tzdW07CisrICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSA9IDA7Cisr ICBpbnQgX19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0g MDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF9yID0g X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8yMl9fcmVkdWNl X2N5dGhvbl9fKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dCAqKV9fcHl4X3Zfc2VsZikpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo Il9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQgKHdyYXBwZXIpIiwgMCk7CisrICB7Cisr ICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsmX19weXhfbl9zX3B5 eF90eXBlLCZfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCZfX3B5eF9uX3NfcHl4X3N0YXRlLDB9Owor KyAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCwwfTsKKysgICAgaWYgKHVubGlrZWx5KF9f cHl4X2t3ZHMpKSB7CisrICAgICAgUHlfc3NpemVfdCBrd19hcmdzOworKyAgICAgIGNvbnN0IFB5 X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpOworKyAgICAg IHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDM6IHZhbHVlc1syXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 CisrICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2Fy Z3MsIDEpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMTog dmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKysgICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDA6IGJyZWFrOworKyAgICAgICAgZGVm YXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAgICB9CisrICAgICAga3df YXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworKyAgICAgIHN3aXRjaCAocG9zX2FyZ3Mp IHsKKysgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBf X1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X3R5cGUpKSAh PSAwKSkga3dfYXJncy0tOworKyAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vy cm9yOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgY2FzZSAgMToKKysg ICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9f cHl4X2t3ZHMsIF9fcHl4X25fc19weXhfY2hlY2tzdW0pKSAhPSAwKSkga3dfYXJncy0tOworKyAg ICAgICAgZWxzZSB7CisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5 eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkIiwgMSwgMywgMywgMSk7IF9fUFlYX0VSUigxLCAx LCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgIH0KKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VH SDsKKysgICAgICAgIGNhc2UgIDI6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMl0gPSBf X1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X3N0YXRlKSkg IT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICBfX1B5eF9SYWlz ZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCIsIDEsIDMs IDMsIDIpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCisrICAgICAgICB9CisrICAg ICAgfQorKyAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKysgICAgICAgIGlmICh1 bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlh cmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJl YWNoZWQiKSA8IDApKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCisrICAgICAgfQor KyAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0gMykgeworKyAg ICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisrICAgIH0gZWxzZSB7CisrICAgICAg dmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKysgICAgICB2YWx1 ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAgICAgIHZhbHVlc1sy XSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CisrICAgIH0KKysgICAgX19weXhf dl9fX3B5eF90eXBlID0gdmFsdWVzWzBdOworKyAgICBfX3B5eF92X19fcHl4X2NoZWNrc3VtID0g X19QeXhfUHlJbnRfQXNfbG9uZyh2YWx1ZXNbMV0pOyBpZiAodW5saWtlbHkoKF9fcHl4X3ZfX19w eXhfY2hlY2tzdW0gPT0gKGxvbmcpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIo MSwgMSwgX19weXhfTDNfZXJyb3IpCisrICAgIF9fcHl4X3ZfX19weXhfc3RhdGUgPSB2YWx1ZXNb Ml07CisrICB9CisrICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworKyAg X19weXhfTDVfYXJndHVwbGVfZXJyb3I6OworKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQo Il9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQiLCAxLCAzLCAzLCBQeVR1cGxlX0dFVF9T SVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorKyAgX19w eXhfTDNfZXJyb3I6OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYu X19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xp bmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 CisrICByZXR1cm4gTlVMTDsKKysgIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsK KysgIF9fcHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNl9fcHl4X3VucGlj a2xlX0VuZE9mRmlsZVJlYWNoZWQoX19weXhfc2VsZiwgX19weXhfdl9fX3B5eF90eXBlLCBfX3B5 eF92X19fcHl4X2NoZWNrc3VtLCBfX3B5eF92X19fcHl4X3N0YXRlKTsKKyAKKyAgIC8qIGZ1bmN0 aW9uIGV4aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICBy ZXR1cm4gX19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzIyX19yZWR1Y2VfY3l0aG9uX18oQ1lUSE9O X1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250 ZXh0ICpfX3B5eF92X3NlbGYpIHsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl82X19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZChDWVRIT05fVU5V U0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90eXBlLCBs b25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRl KSB7CisrICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvciA9IDA7CisrICBQeU9i amVjdCAqX19weXhfdl9fX3B5eF9yZXN1bHQgPSAwOworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBO VUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90 XzEgPSBOVUxMOworKyAgaW50IF9fcHl4X3RfMTsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBO VUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhf dF80ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOworKyAgaW50IF9fcHl4 X3RfNjsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhfZmls ZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9fIiwgMCk7CisrICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCIsIDApOworIAor LSAgLyogIih0cmVlIGZyYWdtZW50KSI6MgorLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxm KToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRl ZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToK Ky0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0 byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKysgIC8qICIodHJlZSBmcmFnbWVudCki OjQKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBv YmplY3QgX19weXhfcmVzdWx0CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4NTZiZTli NjogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZnJvbSBwaWNrbGUg aW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlz ZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHg1NmJl OWI2ID0gKGVycm9yLCByZWFzb24pKSIgJSBfX3B5eF9jaGVja3N1bSkKKyAgKi8KKy0gIF9fcHl4 X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4 X3R1cGxlX18xNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEs IDIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5 eF9SYWlzZShfX3B5eF90XzEsIDAsIDAsIDApOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistICBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzEgPSAoKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gIT0gMHg1NmJlOWI2KSAhPSAwKTsK KysgIGlmIChfX3B5eF90XzEpIHsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0gKiBk ZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0 byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRo b25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjUKKysg KiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3Vt ICE9IDB4NTZiZTliNjoKKysgKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJv ciBhcyBfX3B5eF9QaWNrbGVFcnJvciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAo JXMgdnMgMHg1NmJlOWI2ID0gKGVycm9yLCByZWFzb24pKSIgJSBfX3B5eF9jaGVja3N1bSkKKysg KiAgICAgX19weXhfcmVzdWx0ID0gRW5kT2ZGaWxlUmVhY2hlZC5fX25ld19fKF9fcHl4X3R5cGUp CisgICovCisrICAgIF9fcHl4X3RfMiA9IFB5TGlzdF9OZXcoMSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19QaWNrbGVFcnJvcik7 CisrICAgIF9fUHl4X0dJVkVSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKysgICAgUHlMaXN0 X1NFVF9JVEVNKF9fcHl4X3RfMiwgMCwgX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKysgICAgX19w eXhfdF8zID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc19waWNrbGUsIF9fcHl4X3RfMiwgLTEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikK KysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9JbXBvcnRGcm9tKF9f cHl4X3RfMywgX19weXhfbl9zX1BpY2tsZUVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdl9fX3B5 eF9QaWNrbGVFcnJvciA9IF9fcHl4X3RfMjsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMg PSAwOworIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZp ZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0Ll9fcmVkdWNlX2N5dGhvbl9fIiwgX19weXhf Y2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVM TDsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistLyogIih0cmVlIGZyYWdtZW50 KSI6MworLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKy0gKiAgICAgcmFpc2UgVHlw ZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3Qg Zm9yIHBpY2tsaW5nIikKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9z dGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcmFpc2UgVHlwZUVy cm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9y IHBpY2tsaW5nIikKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6NgorKyAqICAgICBpZiBfX3B5 eF9jaGVja3N1bSAhPSAweDU2YmU5YjY6CisrICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQg UGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgICAgIHJhaXNlIF9fcHl4 X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDU2YmU5YjYgPSAo ZXJyb3IsIHJlYXNvbikpIiAlIF9fcHl4X2NoZWNrc3VtKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgIF9fcHl4X3Jlc3VsdCA9IEVuZE9mRmlsZVJlYWNoZWQuX19uZXdfXyhf X3B5eF90eXBlKQorKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKyAgKi8KKysg ICAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9sb25nKF9fcHl4X3ZfX19weXhfY2hlY2tz dW0pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9l cnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICAgIF9fcHl4X3RfNCA9IF9f UHl4X1B5U3RyaW5nX0Zvcm1hdChfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192 c18weDU2LCBfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigx LCA2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX1B5eF9JTkNS RUYoX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcik7CisrICAgIF9fcHl4X3RfMiA9IF9fcHl4X3Zf X19weXhfUGlja2xlRXJyb3I7IF9fcHl4X3RfNSA9IE5VTEw7CisrICAgIGlmIChDWVRIT05fVU5Q QUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKysg ICAgICBfX3B5eF90XzUgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICAgIGlm IChsaWtlbHkoX19weXhfdF81KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CisrICAgICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF81KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQorKyAg ICBfX3B5eF90XzMgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzIsIF9fcHl4X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8yLCBfX3B5eF90XzQpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9f cHl4X3RfNSA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAw OworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9M MV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX1B5eF9SYWlzZShfX3B5eF90XzMs IDAsIDAsIDApOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsK KysgICAgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorIAorLS8qIFB5dGhvbiB3cmFw cGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNSZW5kZXJDb250ZXh0XzI1X19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAqX19weXhfdl9z ZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7IC8qcHJvdG8qLworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8y NV9fc2V0c3RhdGVfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9f cHl4X3ZfX19weXhfc3RhdGUpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19z ZXRzdGF0ZV9jeXRob25fXyAod3JhcHBlcikiLCAwKTsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzI0X19zZXRzdGF0ZV9jeXRob25f XygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQg KilfX3B5eF92X3NlbGYpLCAoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9zdGF0ZSkpOworKyAg ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0CisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2ts ZUVycm9yCisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorKyAqICAgICBpZiBfX3B5 eF9jaGVja3N1bSAhPSAweDU2YmU5YjY6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysg KiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVF cnJvcgorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBj aGVja3N1bXMgKCVzIHZzIDB4NTZiZTliNiA9IChlcnJvciwgcmVhc29uKSkiICUgX19weXhfY2hl Y2tzdW0pCisrICovCisrICB9CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorKyAg LyogIih0cmVlIGZyYWdtZW50KSI6NworKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBp Y2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlzZSBfX3B5eF9Q aWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHg1NmJlOWI2ID0gKGVy cm9yLCByZWFzb24pKSIgJSBfX3B5eF9jaGVja3N1bSkKKysgKiAgICAgX19weXhfcmVzdWx0ID0g RW5kT2ZGaWxlUmVhY2hlZC5fX25ld19fKF9fcHl4X3R5cGUpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6CisrICogICAgICAg ICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoPEVuZE9mRmlsZVJl YWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICovCisrICBfX3B5eF90XzIgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCksIF9fcHl4X25fc19uZXcpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgX19weXhfdF80ID0gTlVMTDsKKysgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7 CisrICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CisrICAgIGlm IChsaWtlbHkoX19weXhfdF80KSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0 aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzQpOworKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKysgICAgfQorKyAgfQorKyAgX19weXhfdF8zID0g KF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90 XzQsIF9fcHl4X3ZfX19weXhfdHlwZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfMiwgX19weXhfdl9fX3B5eF90eXBlKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEs IDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fcHl4X3ZfX19weXhfcmVz dWx0ID0gX19weXhfdF8zOworKyAgX19weXhfdF8zID0gMDsKKyAKKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjRfX3NldHN0 YXRlX2N5dGhvbl9fKENZVEhPTl9VTlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2Jq ZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7 CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9 IE5VTEw7CistICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0IGNoYXIgKl9fcHl4X2Zp bGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5h bm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fIiwgMCk7CisrICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjo4CisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21w YXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHg1NmJlOWI2ID0gKGVycm9yLCByZWFzb24pKSIgJSBf X3B5eF9jaGVja3N1bSkKKysgKiAgICAgX19weXhfcmVzdWx0ID0gRW5kT2ZGaWxlUmVhY2hlZC5f X25ld19fKF9fcHl4X3R5cGUpCisrICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBfX3B5eF91bnBpY2tsZV9F bmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoPEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3Vs dCwgX19weXhfc3RhdGUpCisrICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKysgKi8KKysgIF9f cHl4X3RfMSA9IChfX3B5eF92X19fcHl4X3N0YXRlICE9IFB5X05vbmUpOworKyAgX19weXhfdF82 ID0gKF9fcHl4X3RfMSAhPSAwKTsKKysgIGlmIChfX3B5eF90XzYpIHsKKyAKKy0gIC8qICIodHJl ZSBmcmFnbWVudCkiOjQKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90 IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYg X19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CistICogICAgIHJhaXNlIFR5 cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0 IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgICAgLyogIih0 cmVlIGZyYWdtZW50KSI6OQorKyAqICAgICBfX3B5eF9yZXN1bHQgPSBFbmRPZkZpbGVSZWFjaGVk Ll9fbmV3X18oX19weXhfdHlwZSkKKysgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6 CisrICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUo PEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorKyAqIGNkZWYg X19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKEVuZE9mRmlsZVJlYWNo ZWQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisgICovCistICBfX3B5eF90XzEg PSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2J1aWx0aW5fVHlwZUVycm9yLCBfX3B5eF90dXBs ZV9fMTgsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCA0LCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfUmFp c2UoX19weXhfdF8xLCAwLCAwLCAwKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworLSAgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAo IShsaWtlbHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5 eF92X19fcHl4X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJy b3IsICJFeHBlY3RlZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZUEUoX19weXhf dl9fX3B5eF9zdGF0ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCA5LCBfX3B5eF9MMV9l cnJvcikKKysgICAgX19weXhfdF8zID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19w eXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKCgoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqKV9fcHl4X3ZfX19weXhf cmVzdWx0KSwgKChQeU9iamVjdCopX19weXhfdl9fX3B5eF9zdGF0ZSkpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA5LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MworLSAqIGRlZiBfX3JlZHVjZV9j eXRob25fXyhzZWxmKToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90 IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYg X19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJl IGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKysgICAgLyogIih0 cmVlIGZyYWdtZW50KSI6OAorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIklu Y29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4NTZiZTliNiA9IChlcnJvciwgcmVhc29uKSki ICUgX19weXhfY2hlY2tzdW0pCisrICogICAgIF9fcHl4X3Jlc3VsdCA9IEVuZE9mRmlsZVJlYWNo ZWQuX19uZXdfXyhfX3B5eF90eXBlKQorKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9u ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgX19weXhfdW5waWNr bGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKDxFbmRPZkZpbGVSZWFjaGVkPiBfX3B5eF9y ZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CisrICovCisr ICB9CisrCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMAorKyAqICAgICBpZiBfX3B5eF9zdGF0 ZSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNo ZWRfX3NldF9zdGF0ZSg8RW5kT2ZGaWxlUmVhY2hlZD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0 ZSkKKysgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogY2RlZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUo RW5kT2ZGaWxlUmVhY2hlZCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKysgKiAg ICAgX19weXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5yZWFz b24gPSBfX3B5eF9zdGF0ZVsxXQorKyAqLworKyAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKysg IF9fUHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdCk7CisrICBfX3B5eF9yID0gX19weXhf dl9fX3B5eF9yZXN1bHQ7CisrICBnb3RvIF9fcHl4X0wwOworKworKyAgLyogIih0cmVlIGZyYWdt ZW50KSI6MQorKyAqIGRlZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkKF9fcHl4X3R5 cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgorKyAqICAg ICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKyAgKi8KKyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworICAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEp OworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4 dC5fX3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5 eF9maWxlbmFtZSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CisrICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNSk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJz Lm1wdi5fX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkIiwgX19weXhfY2xpbmVubywgX19w eXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5eF9yID0gTlVMTDsKKysgIF9fcHl4 X0wwOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcik7CisrICBf X1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKyAgIF9fUHl4X1hHSVZFUkVGKF9f cHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMjMKKy0g KiAKKy0gKiBjZGVmIGNsYXNzIE9wZW5HTFJlbmRlckNvbnRleHQoUmVuZGVyQ29udGV4dCk6Cist ICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtcHYsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgICAgICAgICAgIGdldF9wcm9jX2FkZHJlc3MsCistICogICAgICAgICAg ICAgICAgICAqYXJncywgKiprd2FyZ3MpOgorKy8qICIodHJlZSBmcmFnbWVudCkiOjExCisrICog ICAgICAgICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoPEVuZE9m RmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICogICAgIHJldHVybiBf X3B5eF9yZXN1bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3Nl dF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIF9fcHl4X3Jlc3VsdC5lcnJv ciA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0gX19weXhfc3RhdGVbMV0K KysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0 LCAnX19kaWN0X18nKToKKyAgKi8KKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBp bnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF8x X19pbml0X18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5 T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCistc3RhdGljIGludCBfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVj dCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3 ZHMpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X21wdiA9IDA7CistICBQeU9iamVjdCAqX19weXhf dl9nZXRfcHJvY19hZGRyZXNzID0gMDsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X2FyZ3MgPSAwOwor LSAgUHlPYmplY3QgKl9fcHl4X3Zfa3dhcmdzID0gMDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRf X3NldF9zdGF0ZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZp bGVSZWFjaGVkICpfX3B5eF92X19fcHl4X3Jlc3VsdCwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf c3RhdGUpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCisrICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKysgIGludCBfX3B5 eF90XzI7CisrICBQeV9zc2l6ZV90IF9fcHl4X3RfMzsKKysgIGludCBfX3B5eF90XzQ7CisrICBp bnQgX19weXhfdF81OworKyAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7CisrICBQeU9iamVj dCAqX19weXhfdF83ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzggPSBOVUxMOworICAg aW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5V TEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBpbnQgX19weXhfcjsKKy0gIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19p bml0X18gKHdyYXBwZXIpIiwgMCk7CistICBfX3B5eF92X2t3YXJncyA9IFB5RGljdF9OZXcoKTsg aWYgKHVubGlrZWx5KCFfX3B5eF92X2t3YXJncykpIHJldHVybiAtMTsKKy0gIF9fUHl4X0dPVFJF RihfX3B5eF92X2t3YXJncyk7CistICBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSA+ IDIpIHsKKy0gICAgX19weXhfdl9hcmdzID0gUHlUdXBsZV9HZXRTbGljZShfX3B5eF9hcmdzLCAy LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsKKy0gICAgaWYgKHVubGlrZWx5KCFfX3B5 eF92X2FyZ3MpKSB7CistICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Zfa3dhcmdzKTsgX19weXhf dl9rd2FyZ3MgPSAwOworLSAgICAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAg ICAgIHJldHVybiAtMTsKKy0gICAgfQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdl9hcmdzKTsK Ky0gIH0gZWxzZSB7CistICAgIF9fcHl4X3ZfYXJncyA9IF9fcHl4X2VtcHR5X3R1cGxlOyBfX1B5 eF9JTkNSRUYoX19weXhfZW1wdHlfdHVwbGUpOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIl9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZSIsIDApOworKwor KyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKKysgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAor KyAqIGNkZWYgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKEVuZE9m RmlsZVJlYWNoZWQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIF9f cHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0g X19weXhfc3RhdGVbMV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBpZiBs ZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycp OgorKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVsy XSkKKysgKi8KKysgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUp KSB7CisrICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9i amVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOworKyAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4 X0wxX2Vycm9yKQorICAgfQorLSAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFy Z25hbWVzW10gPSB7Jl9fcHl4X25fc19tcHYsJl9fcHl4X25fc19nZXRfcHJvY19hZGRyZXNzLDB9 OworLSAgICBQeU9iamVjdCogdmFsdWVzWzJdID0gezAsMH07CistICAgIGlmICh1bmxpa2VseShf X3B5eF9rd2RzKSkgeworLSAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKy0gICAgICBjb25zdCBQ eV9zc2l6ZV90IHBvc19hcmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKy0gICAg ICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBkZWZhdWx0OgorLSAgICAgICAgY2FzZSAg MjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAgICB9CistICAgICAga3dfYXJncyA9IFB5 RGljdF9TaXplKF9fcHl4X2t3ZHMpOworLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKy0gICAg ICAgIGNhc2UgIDA6CistICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURp Y3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfbXB2KSkgIT0gMCkpIGt3X2FyZ3Mt LTsKKy0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKy0gICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6CistICAgICAgICBpZiAobGlr ZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5 eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcykpICE9IDApKSBrd19hcmdzLS07CistICAgICAgICBlbHNl IHsKKy0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwg MiwgMiwgMSk7IF9fUFlYX0VSUigwLCAxMTIzLCBfX3B5eF9MM19lcnJvcikKKy0gICAgICAgIH0K Ky0gICAgICB9CisrICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3Zf X19weXhfc3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90 XzEpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5lcnJvcik7CisrICBf X1B5eF9ERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPmVycm9yKTsKKysgIF9fcHl4X3ZfX19w eXhfcmVzdWx0LT5lcnJvciA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7CisrICBpZiAo dW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworKyAgICBQeUVycl9T ZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNj cmlwdGFibGUiKTsKKysgICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKysgIH0K KysgIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0 ZSwgMSwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CisrICBf X1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlYXNvbik7CisrICBfX1B5eF9ERUNS RUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlYXNvbik7CisrICBfX3B5eF92X19fcHl4X3Jlc3Vs dC0+cmVhc29uID0gX19weXhfdF8xOworKyAgX19weXhfdF8xID0gMDsKKysKKysgIC8qICIodHJl ZSBmcmFnbWVudCkiOjEzCisrICogY2RlZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVk X19zZXRfc3RhdGUoRW5kT2ZGaWxlUmVhY2hlZCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0 YXRlKToKKysgKiAgICAgX19weXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMF07IF9fcHl4 X3Jlc3VsdC5yZWFzb24gPSBfX3B5eF9zdGF0ZVsxXQorKyAqICAgICBpZiBsZW4oX19weXhfc3Rh dGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBk YXRlKF9fcHl4X3N0YXRlWzJdKQorKyAqLworKyAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhf c3RhdGUgPT0gUHlfTm9uZSkpIHsKKysgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJv ciwgIm9iamVjdCBvZiB0eXBlICdOb25lVHlwZScgaGFzIG5vIGxlbigpIik7CisrICAgIF9fUFlY X0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCisrICB9CisrICBfX3B5eF90XzMgPSBQeVR1cGxl X0dFVF9TSVpFKF9fcHl4X3ZfX19weXhfc3RhdGUpOyBpZiAodW5saWtlbHkoX19weXhfdF8zID09 ICgoUHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfdF80ID0gKChfX3B5eF90XzMgPiAyKSAhPSAwKTsKKysgIGlmIChfX3B5eF90XzQpIHsK KysgIH0gZWxzZSB7CisrICAgIF9fcHl4X3RfMiA9IF9fcHl4X3RfNDsKKysgICAgZ290byBfX3B5 eF9MNF9ib29sX2Jpbm9wX2RvbmU7CisrICB9CisrICBfX3B5eF90XzQgPSBfX1B5eF9IYXNBdHRy KCgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3Jlc3VsdCksIF9fcHl4X25fc19kaWN0KTsgaWYg KHVubGlrZWx5KF9fcHl4X3RfNCA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF81ID0gKF9fcHl4X3RfNCAhPSAwKTsKKysgIF9fcHl4X3Rf MiA9IF9fcHl4X3RfNTsKKysgIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7CisrICBpZiAoX19w eXhfdF8yKSB7CisrCisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjE0CisrICogICAgIF9fcHl4 X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0gX19w eXhfc3RhdGVbMV0KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIo X19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKysgKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2Rp Y3RfXy51cGRhdGUoX19weXhfc3RhdGVbMl0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKi8KKysgICAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2Jq ZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoX19weXhfdF82LCBfX3B5eF9uX3NfdXBkYXRlKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF83KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CisrICAgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7 CisrICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2Jq ZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CisrICAgICAgX19QWVhfRVJSKDEsIDE0LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgfQorKyAgICBfX3B5eF90XzYgPSBfX1B5eF9HZXRJdGVtSW50X1R1 cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDIsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9u ZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDE0LCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAgIF9fcHl4 X3RfOCA9IE5VTEw7CisrICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfNykpKSB7CisrICAgICAgX19weXhfdF84ID0gUHlNZXRob2Rf R0VUX1NFTEYoX19weXhfdF83KTsKKysgICAgICBpZiAobGlrZWx5KF9fcHl4X3RfOCkpIHsKKysg ICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90 XzcpOworKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfOCk7CisrICAgICAgICBfX1B5eF9J TkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzcsIGZ1 bmN0aW9uKTsKKysgICAgICB9CisrICAgIH0KKysgICAgX19weXhfdF8xID0gKF9fcHl4X3RfOCkg PyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF83LCBfX3B5eF90XzgsIF9fcHl4X3Rf NikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNywgX19weXhfdF82KTsKKysg ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9 IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKworKyAg ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMworKyAqIGNkZWYgX19weXhfdW5waWNrbGVfRW5kT2ZG aWxlUmVhY2hlZF9fc2V0X3N0YXRlKEVuZE9mRmlsZVJlYWNoZWQgX19weXhfcmVzdWx0LCB0dXBs ZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRl WzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0gX19weXhfc3RhdGVbMV0KKysgKiAgICAgaWYgbGVu KF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9f ZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVsyXSkKKysgKi8KKysgIH0KKysKKysgIC8qICIodHJl ZSBmcmFnbWVudCkiOjExCisrICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFj aGVkX19zZXRfc3RhdGUoPEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3Rh dGUpCisrICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xl X0VuZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3Vs dCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgIF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVh c29uID0gX19weXhfc3RhdGVbMV0KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5k IGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKysgKi8KKysKKysgIC8qIGZ1bmN0 aW9uIGV4aXQgY29kZSAqLworKyAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9O b25lKTsKKysgIGdvdG8gX19weXhfTDA7CisrICBfX3B5eF9MMV9lcnJvcjo7CisrICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7CisrICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNyk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7CisrICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9FbmRP ZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKKysgIF9fcHl4X3IgPSAwOworKyAgX19weXhfTDA6OworKyAgX19QeXhf WEdJVkVSRUYoX19weXhfcik7CisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysg IHJldHVybiBfX3B5eF9yOworK30KKysKKysvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisrICogZGVm IF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1 bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGNk ZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jl c3VsdAorKyAqLworKworKy8qIFB5dGhvbiB3cmFwcGVyICovCisrc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOV9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2Uo UHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19w eXhfa3dkcyk7IC8qcHJvdG8qLworK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl85X19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSA9IHsiX19weXhfdW5w aWNrbGVfTG9nTWVzc2FnZSIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtl eXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl85X19weXhfdW5waWNrbGVfTG9n TWVzc2FnZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9OworK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzlfX3B5eF91bnBpY2tsZV9Mb2dNZXNz YWdlKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3Qg Kl9fcHl4X2t3ZHMpIHsKKysgIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUgPSAwOworKyAg bG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtOworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf c3RhdGUgPSAwOworKyAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5 eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisrICBQeU9iamVj dCAqX19weXhfciA9IDA7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UgKHdyYXBwZXIp IiwgMCk7CisrICB7CisrICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9 IHsmX19weXhfbl9zX3B5eF90eXBlLCZfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCZfX3B5eF9uX3Nf cHl4X3N0YXRlLDB9OworKyAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCwwfTsKKysgICAg aWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7CisrICAgICAgUHlfc3NpemVfdCBrd19hcmdzOwor KyAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4 X2FyZ3MpOworKyAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDM6IHZh bHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CisrICAgICAgICBDWVRI T05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dF VF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAg ICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAw KTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDA6IGJyZWFr OworKyAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAg ICB9CisrICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworKyAgICAgIHN3 aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDA6CisrICAgICAgICBpZiAobGlrZWx5 KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9u X3NfcHl4X3R5cGUpKSAhPSAwKSkga3dfYXJncy0tOworKyAgICAgICAgZWxzZSBnb3RvIF9fcHl4 X0w1X2FyZ3R1cGxlX2Vycm9yOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAg ICAgY2FzZSAgMToKKysgICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGlj dF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhfY2hlY2tzdW0pKSAhPSAwKSkg a3dfYXJncy0tOworKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVw bGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlIiwgMSwgMywgMywgMSk7IF9fUFlY X0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgIH0KKysgICAgICAgIENZVEhPTl9G QUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDI6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1 ZXNbMl0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4 X3N0YXRlKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICBf X1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSIsIDEs IDMsIDMsIDIpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCisrICAgICAgICB9Cisr ICAgICAgfQorICAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGNv bnN0IFB5X3NzaXplX3QgdXNlZF9wb3NfYXJncyA9IChwb3NfYXJncyA8IDIpID8gcG9zX2FyZ3Mg OiAyOworLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3Jkcyhf X3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCBfX3B5eF92X2t3YXJncywgdmFsdWVzLCB1c2Vk X3Bvc19hcmdzLCAiX19pbml0X18iKSA8IDApKSBfX1BZWF9FUlIoMCwgMTEyMywgX19weXhfTDNf ZXJyb3IpCisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRz KF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJfX3B5 eF91bnBpY2tsZV9Mb2dNZXNzYWdlIikgPCAwKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vy cm9yKQorICAgICAgIH0KKy0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2Fy Z3MpIDwgMikgeworKyAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykg IT0gMykgeworICAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisgICAgIH0gZWxz ZSB7CisgICAgICAgdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsK KyAgICAgICB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworKyAg ICAgIHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CisgICAgIH0K Ky0gICAgX19weXhfdl9tcHYgPSB2YWx1ZXNbMF07CistICAgIF9fcHl4X3ZfZ2V0X3Byb2NfYWRk cmVzcyA9IHZhbHVlc1sxXTsKKysgICAgX19weXhfdl9fX3B5eF90eXBlID0gdmFsdWVzWzBdOwor KyAgICBfX3B5eF92X19fcHl4X2NoZWNrc3VtID0gX19QeXhfUHlJbnRfQXNfbG9uZyh2YWx1ZXNb MV0pOyBpZiAodW5saWtlbHkoKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gPT0gKGxvbmcpLTEpICYm IFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCisrICAg IF9fcHl4X3ZfX19weXhfc3RhdGUgPSB2YWx1ZXNbMl07CisgICB9CisgICBnb3RvIF9fcHl4X0w0 X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6Owor LSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwgMiwgMiwgUHlUdXBs ZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCAxMTIzLCBfX3B5eF9MM19lcnJv cikKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9Mb2dNZXNz YWdlIiwgMSwgMywgMywgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigx LCAxLCBfX3B5eF9MM19lcnJvcikKKyAgIF9fcHl4X0wzX2Vycm9yOjsKKy0gIF9fUHl4X0RFQ1JF RihfX3B5eF92X2FyZ3MpOyBfX3B5eF92X2FyZ3MgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4 X3Zfa3dhcmdzKTsgX19weXhfdl9rd2FyZ3MgPSAwOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2 aWRjdXR0ZXIubGlicy5tcHYuT3BlbkdMUmVuZGVyQ29udGV4dC5fX2luaXRfXyIsIF9fcHl4X2Ns aW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19QeXhfQWRkVHJhY2Vi YWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSIsIF9fcHl4 X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19QeXhfUmVmTmFu bnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gLTE7CisrICByZXR1cm4gTlVMTDsKKyAgIF9f cHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0X19faW5pdF9fKCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCAq KV9fcHl4X3Zfc2VsZiksIF9fcHl4X3ZfbXB2LCBfX3B5eF92X2dldF9wcm9jX2FkZHJlc3MsIF9f cHl4X3ZfYXJncywgX19weXhfdl9rd2FyZ3MpOworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl84X19weXhfdW5waWNrbGVfTG9nTWVzc2FnZShfX3B5eF9zZWxmLCBf X3B5eF92X19fcHl4X3R5cGUsIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIF9fcHl4X3ZfX19weXhf c3RhdGUpOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9YREVDUkVG KF9fcHl4X3ZfYXJncyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Zfa3dhcmdzKTsKKyAgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAor LXN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVy Q29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9P cGVuR0xSZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X21wdiwg UHlPYmplY3QgKl9fcHl4X3ZfZ2V0X3Byb2NfYWRkcmVzcywgUHlPYmplY3QgKl9fcHl4X3ZfYXJn cywgUHlPYmplY3QgKl9fcHl4X3Zfa3dhcmdzKSB7CistICBQeU9iamVjdCAqX19weXhfdl9pbml0 X3BhcmFtcyA9IE5VTEw7CistICBpbnQgX19weXhfcjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84X19weXhfdW5waWNrbGVfTG9nTWVzc2FnZShDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90 eXBlLCBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4 X3N0YXRlKSB7CisrICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvciA9IDA7Cisr ICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9yZXN1bHQgPSAwOworKyAgUHlPYmplY3QgKl9fcHl4 X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2JqZWN0ICpf X3B5eF90XzEgPSBOVUxMOworKyAgaW50IF9fcHl4X3RfMTsKKyAgIFB5T2JqZWN0ICpfX3B5eF90 XzIgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CisrICBQeU9iamVjdCAq X19weXhfdF80ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOworKyAgaW50 IF9fcHl4X3RfNjsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19w eXhfZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSIsIDApOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMjcKKy0gKiAgICAgICAgICAgICAgICAgICph cmdzLCAqKmt3YXJncyk6CistICogICAgICAgICBpbml0X3BhcmFtcyA9IHsKKy0gKiAgICAgICAg ICAgICAiZ2V0X3Byb2NfYWRkcmVzcyI6IGdldF9wcm9jX2FkZHJlc3MgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgfQorLSAqICAgICAgICAgUmVuZGVyQ29udGV4dC5f X2luaXRfXyhzZWxmLCBtcHYsIFJlbmRlckNvbnRleHQuQVBJX09QRU5HTCwKKysgIC8qICIodHJl ZSBmcmFnbWVudCkiOjQKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysg KiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3Vt ICE9IDB4ODc3NGZhZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg ZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICog ICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAo JXMgdnMgMHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwgdGV4dCkpIiAlIF9f cHl4X2NoZWNrc3VtKQorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlEaWN0X05ld1ByZXNp emVkKDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTI3LCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgaWYgKFB5RGljdF9T ZXRJdGVtKF9fcHl4X3RfMSwgX19weXhfbl9zX2dldF9wcm9jX2FkZHJlc3MsIF9fcHl4X3ZfZ2V0 X3Byb2NfYWRkcmVzcykgPCAwKSBfX1BZWF9FUlIoMCwgMTEyNywgX19weXhfTDFfZXJyb3IpCist ICBfX3B5eF92X2luaXRfcGFyYW1zID0gKChQeU9iamVjdCopX19weXhfdF8xKTsKKy0gIF9fcHl4 X3RfMSA9IDA7CisrICBfX3B5eF90XzEgPSAoKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gIT0gMHg4 Nzc0ZmFlKSAhPSAwKTsKKysgIGlmIChfX3B5eF90XzEpIHsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTI5CistICogICAgICAgICAgICAgImdldF9wcm9jX2FkZHJl c3MiOiBnZXRfcHJvY19hZGRyZXNzCistICogICAgICAgICB9CistICogICAgICAgICBSZW5kZXJD b250ZXh0Ll9faW5pdF9fKHNlbGYsIG1wdiwgUmVuZGVyQ29udGV4dC5BUElfT1BFTkdMLCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGluaXRfcGFyYW1zLCAqYXJncywgKiprd2FyZ3MpCistICogCisrICAgIC8qICIodHJlZSBm cmFnbWVudCkiOjUKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CisrICogICAgIGlm IF9fcHl4X2NoZWNrc3VtICE9IDB4ODc3NGZhZToKKysgKiAgICAgICAgIGZyb20gcGlja2xlIGlt cG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvciAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRp YmxlIGNoZWNrc3VtcyAoJXMgdnMgMHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZp eCwgdGV4dCkpIiAlIF9fcHl4X2NoZWNrc3VtKQorKyAqICAgICBfX3B5eF9yZXN1bHQgPSBMb2dN ZXNzYWdlLl9fbmV3X18oX19weXhfdHlwZSkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5 T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJDb250ZXh0KSwgX19weXhfbl9zX2luaXQpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cigoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHQpLCBfX3B5eF9uX3NfQVBJX09QRU5HTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDExMjksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMik7CisrICAgIF9fcHl4X3RfMiA9IFB5TGlzdF9OZXcoMSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19QaWNrbGVFcnJvcik7 CisrICAgIF9fUHl4X0dJVkVSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKysgICAgUHlMaXN0 X1NFVF9JVEVNKF9fcHl4X3RfMiwgMCwgX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKysgICAgX19w eXhfdF8zID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc19waWNrbGUsIF9fcHl4X3RfMiwgLTEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikK KysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9JbXBvcnRGcm9tKF9f cHl4X3RfMywgX19weXhfbl9zX1BpY2tsZUVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdl9fX3B5 eF9QaWNrbGVFcnJvciA9IF9fcHl4X3RfMjsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMg PSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzAKKy0gKiAg ICAgICAgIH0KKy0gKiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0X18oc2VsZiwgbXB2LCBS ZW5kZXJDb250ZXh0LkFQSV9PUEVOR0wsCistICogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGluaXRfcGFyYW1zLCAqYXJncywgKiprd2FyZ3MpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAKKy0gKiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOgorKyAgICAvKiAi KHRyZWUgZnJhZ21lbnQpIjo2CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4ODc3NGZh ZToKKysgKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9Q aWNrbGVFcnJvcgorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0 aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ODc3NGZhZSA9IChsZXZlbCwgbG9nX2xldmVsLCBwcmVm aXgsIHRleHQpKSIgJSBfX3B5eF9jaGVja3N1bSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICBfX3B5eF9yZXN1bHQgPSBMb2dNZXNzYWdlLl9fbmV3X18oX19weXhfdHlwZSkK KysgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6CisgICovCistICBfX3B5eF90XzMg PSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwg MTEyOSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9f UHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7CistICBfX1B5eF9HSVZFUkVG KCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsKKy0gIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF8zLCAwLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7CistICBfX1B5eF9JTkNSRUYoX19w eXhfdl9tcHYpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF92X21wdik7CistICBQeVR1cGxlX1NF VF9JVEVNKF9fcHl4X3RfMywgMSwgX19weXhfdl9tcHYpOworLSAgX19QeXhfR0lWRVJFRihfX3B5 eF90XzIpOworLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDIsIF9fcHl4X3RfMik7Cist ICBfX1B5eF9JTkNSRUYoX19weXhfdl9pbml0X3BhcmFtcyk7CistICBfX1B5eF9HSVZFUkVGKF9f cHl4X3ZfaW5pdF9wYXJhbXMpOworLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDMsIF9f cHl4X3ZfaW5pdF9wYXJhbXMpOworLSAgX19weXhfdF8yID0gMDsKKysgICAgX19weXhfdF8yID0g X19QeXhfUHlJbnRfRnJvbV9sb25nKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0pOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7CisrICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5U3RyaW5nX0Zv cm1hdChfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDg3LCBfX3B5eF90 XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9l cnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9fX3B5 eF9QaWNrbGVFcnJvcik7CisrICAgIF9fcHl4X3RfMiA9IF9fcHl4X3ZfX19weXhfUGlja2xlRXJy b3I7IF9fcHl4X3RfNSA9IE5VTEw7CisrICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg dW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKysgICAgICBfX3B5eF90XzUg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworKyAgICAgIGlmIChsaWtlbHkoX19weXhf dF81KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNU SU9OKF9fcHl4X3RfMik7CisrICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsKKysgICAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfMiwgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQorKyAgICBfX3B5eF90XzMgPSAo X19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3Rf NSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5 eF90XzQpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Cisr ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA2LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworKyAgICBfX1B5eF9SYWlzZShfX3B5eF90XzMsIDAsIDAsIDApOworKyAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgICAgX19QWVhfRVJS KDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExMjkKKy0gKiAgICAgICAgICAgICAiZ2V0X3Byb2NfYWRkcmVzcyI6IGdldF9wcm9j X2FkZHJlc3MKKy0gKiAgICAgICAgIH0KKy0gKiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0 X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0LkFQSV9PUEVOR0wsICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXJh bXMsICphcmdzLCAqKmt3YXJncykKKy0gKiAKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6NAor KyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgorKyAqICAgICBjZGVmIG9iamVj dCBfX3B5eF9yZXN1bHQKKysgKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHg4Nzc0ZmFlOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBv cnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgICAgIHJhaXNlIF9f cHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUg PSAobGV2ZWwsIGxvZ19sZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pCisg ICovCistICBfX3B5eF90XzIgPSBQeU51bWJlcl9BZGQoX19weXhfdF8zLCBfX3B5eF92X2FyZ3Mp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTEzMAorLSAqICAgICAgICAgfQorLSAqICAgICAgICAgUmVuZGVyQ29udGV4 dC5fX2luaXRfXyhzZWxmLCBtcHYsIFJlbmRlckNvbnRleHQuQVBJX09QRU5HTCwKKy0gKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXJhbXMsICphcmdzLCAqKmt3YXJncykg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqIGNsYXNzIENhbGxiYWNrVGhy ZWFkKFRocmVhZCk6CisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3CisrICogICAgICAgICBmcm9t IHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAg ICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2 cyAweDg3NzRmYWUgPSAobGV2ZWwsIGxvZ19sZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhf Y2hlY2tzdW0pCisrICogICAgIF9fcHl4X3Jlc3VsdCA9IExvZ01lc3NhZ2UuX19uZXdfXyhfX3B5 eF90eXBlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGlmIF9fcHl4X3N0 YXRlIGlzIG5vdCBOb25lOgorKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9f c2V0X3N0YXRlKDxMb2dNZXNzYWdlPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorICAqLwor LSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzEsIF9fcHl4X3RfMiwg X19weXhfdl9rd2FyZ3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAx MTI5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0 dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlKSwgX19weXhfbl9zX25ldyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Cisr ICBfX3B5eF90XzQgPSBOVUxMOworKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtl bHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKysgICAgX19weXhfdF80ID0gUHlNZXRo b2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysgICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7Cisr ICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3Rf Mik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7CisrICAgICAgX19QeXhfSU5DUkVG KGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24p OworKyAgICB9CisrICB9CisrICBfX3B5eF90XzMgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdl9fX3B5eF90eXBlKSA6 IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X19fcHl4X3R5cGUp OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNywgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cist ICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysgIF9fcHl4X3ZfX19w eXhfcmVzdWx0ID0gX19weXhfdF8zOworKyAgX19weXhfdF8zID0gMDsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIzCistICogCistICogY2RlZiBjbGFzcyBPcGVu R0xSZW5kZXJDb250ZXh0KFJlbmRlckNvbnRleHQpOgorLSAqICAgICBkZWYgX19pbml0X18oc2Vs ZiwgbXB2LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgICAg ICBnZXRfcHJvY19hZGRyZXNzLAorLSAqICAgICAgICAgICAgICAgICAgKmFyZ3MsICoqa3dhcmdz KToKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKysgKiAgICAgICAgIHJhaXNlIF9fcHl4X1Bp Y2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUgPSAobGV2 ZWwsIGxvZ19sZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pCisrICogICAg IF9fcHl4X3Jlc3VsdCA9IExvZ01lc3NhZ2UuX19uZXdfXyhfX3B5eF90eXBlKQorKyAqICAgICBp ZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKDxMb2dNZXNz YWdlPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19weXhfcmVz dWx0CisgICovCisrICBfX3B5eF90XzEgPSAoX19weXhfdl9fX3B5eF9zdGF0ZSAhPSBQeV9Ob25l KTsKKysgIF9fcHl4X3RfNiA9IChfX3B5eF90XzEgIT0gMCk7CisrICBpZiAoX19weXhfdF82KSB7 CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSAwOworLSAgZ290 byBfX3B5eF9MMDsKKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhf dF8xKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19w eXhfdF8zKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Lk9wZW5H TFJlbmRlckNvbnRleHQuX19pbml0X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9f cHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAtMTsKKy0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4 X1hERUNSRUYoX19weXhfdl9pbml0X3BhcmFtcyk7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENv bnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy0KKy0vKiAiKHRyZWUgZnJhZ21lbnQp IjoxCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBj b252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpCistICogZGVmIF9fc2V0 c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorKyAgICAvKiAiKHRyZWUgZnJhZ21l bnQpIjo5CisrICogICAgIF9fcHl4X3Jlc3VsdCA9IExvZ01lc3NhZ2UuX19uZXdfXyhfX3B5eF90 eXBlKQorKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIF9f cHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhfcmVz dWx0LCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBy ZXR1cm4gX19weXhfcmVzdWx0CisrICogY2RlZiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19z ZXRfc3RhdGUoTG9nTWVzc2FnZSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKyAg Ki8KKysgICAgaWYgKCEobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X19fcHl4X3N0 YXRlKSl8fCgoX19weXhfdl9fX3B5eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQeUVycl9Gb3JtYXQo UHlFeGNfVHlwZUVycm9yLCAiRXhwZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMiLCAidHVwbGUiLCBQ eV9UWVBFKF9fcHl4X3ZfX19weXhfc3RhdGUpLT50cF9uYW1lKSwgMCkpKSBfX1BZWF9FUlIoMSwg OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2X19fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZSgoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilfX3B5eF92X19fcHl4 X3Jlc3VsdCksICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgOSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzMpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF8zX19yZWR1 Y2VfY3l0aG9uX18oUHlPYmplY3QgKl9fcHl4X3Zfc2VsZiwgQ1lUSE9OX1VOVVNFRCBQeU9iamVj dCAqdW51c2VkKTsgLypwcm90byovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzNfX3JlZHVjZV9jeXRob25fXyhQ eU9iamVjdCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICp1bnVzZWQpIHsK Ky0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19yZWR1Y2VfY3l0aG9uX18gKHdyYXBw ZXIpIiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5 T3BlbkdMUmVuZGVyQ29udGV4dF8yX19yZWR1Y2VfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxm KSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF8y X19yZWR1Y2VfY3l0aG9uX18oQ1lUSE9OX1VOVVNFRCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ICpfX3B5eF92X3NlbGYpIHsKKy0gIFB5 T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOwor LSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcmVkdWNlX2N5dGhvbl9f IiwgMCk7CisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKysgKiAgICAgICAgIHJhaXNlIF9f cHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUg PSAobGV2ZWwsIGxvZ19sZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pCisr ICogICAgIF9fcHl4X3Jlc3VsdCA9IExvZ01lc3NhZ2UuX19uZXdfXyhfX3B5eF90eXBlKQorKyAq ICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKDxM b2dNZXNzYWdlPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19w eXhfcmVzdWx0CisrICovCisrICB9CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoyCistICog ZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNl bGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xp bmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogZGVmIF9fc2V0c3RhdGVfY3l0 aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYu X2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmci KQorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTAKKysgKiAgICAgaWYgX19weXhfc3RhdGUgaXMg bm90IE5vbmU6CisrICogICAgICAgICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3Rh dGUoPExvZ01lc3NhZ2U+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICogICAgIHJldHVy biBfX3B5eF9yZXN1bHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIGNkZWYgX19w eXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKExvZ01lc3NhZ2UgX19weXhfcmVzdWx0 LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIF9fcHl4X3Jlc3VsdC5sZXZlbCA9IF9fcHl4 X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubG9nX2xldmVsID0gX19weXhfc3RhdGVbMV07IF9fcHl4 X3Jlc3VsdC5wcmVmaXggPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnRleHQgPSBfX3B5 eF9zdGF0ZVszXQorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5 eF9idWlsdGluX1R5cGVFcnJvciwgX19weXhfdHVwbGVfXzE5LCBOVUxMKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7Cist ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fUFlYX0VSUigx LCAyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICBfX1B5 eF9JTkNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQpOworKyAgX19weXhfciA9IF9fcHl4X3ZfX19w eXhfcmVzdWx0OworKyAgZ290byBfX3B5eF9MMDsKKyAKKyAgIC8qICIodHJlZSBmcmFnbWVudCki OjEKKy0gKiBkZWYgX19yZWR1Y2VfY3l0aG9uX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNv bnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYgX19zZXRz dGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CisrICogZGVmIF9fcHl4X3VucGlja2xl X0xvZ01lc3NhZ2UoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4 X1BpY2tsZUVycm9yCisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorICAqLworIAor ICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5s aWJzLm1wdi5PcGVuR0xSZW5kZXJDb250ZXh0Ll9fcmVkdWNlX2N5dGhvbl9fIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CisrICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfNCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CisrICBfX1B5eF9BZGRU cmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlIiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5eF9y ID0gTlVMTDsKKysgIF9fcHl4X0wwOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9Q aWNrbGVFcnJvcik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKyAg IF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogIih0cmVlIGZyYWdtZW50KSI6Mwor LSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9y KCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBp Y2tsaW5nIikKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJz ZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2ts aW5nIikKKysvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMQorKyAqICAgICAgICAgX19weXhfdW5waWNr bGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKDxMb2dNZXNzYWdlPiBfX3B5eF9yZXN1bHQsIF9fcHl4 X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CisrICogY2RlZiBfX3B5eF91bnBp Y2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoTG9nTWVzc2FnZSBfX3B5eF9yZXN1bHQsIHR1cGxl IF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBfX3B5 eF9yZXN1bHQubGV2ZWwgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LmxvZ19sZXZlbCA9 IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQucHJlZml4ID0gX19weXhfc3RhdGVbMl07IF9f cHl4X3Jlc3VsdC50ZXh0ID0gX19weXhfc3RhdGVbM10KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0 YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKyAgKi8KKyAK Ky0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF81X19zZXRzdGF0ZV9jeXRob25f XyhQeU9iamVjdCAqX19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSk7 IC8qcHJvdG8qLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF81X19zZXRzdGF0ZV9jeXRob25fXyhQeU9iamVjdCAq X19weXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworLSAgUHlPYmpl Y3QgKl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4 X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3NldHN0YXRlX2N5dGhvbl9fICh3cmFwcGVyKSIsIDAp OworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5HTFJl bmRlckNvbnRleHRfNF9fc2V0c3RhdGVfY3l0aG9uX18oKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ICopX19weXhfdl9zZWxmKSwgKChQ eU9iamVjdCAqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQg Y29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19w eXhfcjsKKy19CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzRfX3NldHN0YXRlX2N5dGhvbl9fKENZVEhPTl9V TlVTRUQgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVy Q29udGV4dCAqX19weXhfdl9zZWxmLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF92X19f cHl4X3N0YXRlKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9fX3B5eF9yZXN1bHQs IFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CisgICBQeU9iamVjdCAqX19weXhfciA9 IE5VTEw7CisgICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgUHlPYmplY3QgKl9fcHl4 X3RfMSA9IE5VTEw7CisrICBpbnQgX19weXhfdF8yOworKyAgUHlfc3NpemVfdCBfX3B5eF90XzM7 CisrICBpbnQgX19weXhfdF80OworKyAgaW50IF9fcHl4X3RfNTsKKysgIFB5T2JqZWN0ICpfX3B5 eF90XzYgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CisrICBQeU9iamVj dCAqX19weXhfdF84ID0gTlVMTDsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3Qg Y2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwor LSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fc2V0c3RhdGVfY3l0aG9uX18iLCAwKTsK KysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdl X19zZXRfc3RhdGUiLCAwKTsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKy0gKiAgICAg cmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhv biBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxm LCBfX3B5eF9zdGF0ZSk6CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5v dCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjEyCisrICogICAg IHJldHVybiBfX3B5eF9yZXN1bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2Vf X3NldF9zdGF0ZShMb2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgor KyAqICAgICBfX3B5eF9yZXN1bHQubGV2ZWwgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0 LmxvZ19sZXZlbCA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQucHJlZml4ID0gX19weXhf c3RhdGVbMl07IF9fcHl4X3Jlc3VsdC50ZXh0ID0gX19weXhfc3RhdGVbM10gICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFz YXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgorKyAqICAgICAgICAgX19weXhfcmVzdWx0 Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9f UHl4X1B5T2JqZWN0X0NhbGwoX19weXhfYnVpbHRpbl9UeXBlRXJyb3IsIF9fcHl4X3R1cGxlX18y MCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDQsIF9fcHl4 X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9u ZSkpIHsKKysgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScg b2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CisrICAgIF9fUFlYX0VSUigxLCAxMiwgX19w eXhfTDFfZXJyb3IpCisrICB9CisrICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxl KF9fcHl4X3ZfX19weXhfc3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywg MCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfUmFpc2Uo X19weXhfdF8xLCAwLCAwLCAwKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworLSAgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQorLQorLSAgLyogIih0 cmVlIGZyYWdtZW50KSI6MworLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKy0gKiAg ICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5 dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhz ZWxmLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg cmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhv biBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKi8KKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29k ZSAqLworLSAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwor LSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuT3BlbkdMUmVuZGVyQ29u dGV4dC5fX3NldHN0YXRlX2N5dGhvbl9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBf X3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X0dJVkVSRUYoX19w eXhfdF8xKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+bGV2ZWwpOwor KyAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5sZXZlbCk7CisrICBfX3B5eF92 X19fcHl4X3Jlc3VsdC0+bGV2ZWwgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworKyAg aWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKysgICAgUHlF cnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBz dWJzY3JpcHRhYmxlIik7CisrICAgIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisr ICB9CisrICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhf c3RhdGUsIDEsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOwor KyAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5sb2dfbGV2ZWwpOworKyAgX19Q eXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5sb2dfbGV2ZWwpOworKyAgX19weXhfdl9f X3B5eF9yZXN1bHQtPmxvZ19sZXZlbCA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7Cisr ICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworKyAgICBQ eUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90 IHN1YnNjcmlwdGFibGUiKTsKKysgICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikK KysgIH0KKysgIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5 eF9zdGF0ZSwgMiwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7 CisrICBfX1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnByZWZpeCk7CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnByZWZpeCk7CisrICBfX3B5eF92X19fcHl4 X3Jlc3VsdC0+cHJlZml4ID0gX19weXhfdF8xOworKyAgX19weXhfdF8xID0gMDsKKysgIGlmICh1 bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7CisrICAgIFB5RXJyX1Nl dFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2Ny aXB0YWJsZSIpOworKyAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgfQor KyAgX19weXhfdF8xID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRl LCAzLCBsb25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKysgIF9f UHl4X0dPVFJFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+dGV4dCk7CisrICBfX1B5eF9ERUNSRUYo X19weXhfdl9fX3B5eF9yZXN1bHQtPnRleHQpOworKyAgX19weXhfdl9fX3B5eF9yZXN1bHQtPnRl eHQgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworKworKyAgLyogIih0cmVlIGZyYWdt ZW50KSI6MTMKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZShM b2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgorKyAqICAgICBfX3B5 eF9yZXN1bHQubGV2ZWwgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LmxvZ19sZXZlbCA9 IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQucHJlZml4ID0gX19weXhfc3RhdGVbMl07IF9f cHl4X3Jlc3VsdC50ZXh0ID0gX19weXhfc3RhdGVbM10KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0 YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVw ZGF0ZShfX3B5eF9zdGF0ZVs0XSkKKysgKi8KKysgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4 X3N0YXRlID09IFB5X05vbmUpKSB7CisrICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJy b3IsICJvYmplY3Qgb2YgdHlwZSAnTm9uZVR5cGUnIGhhcyBubyBsZW4oKSIpOworKyAgICBfX1BZ WF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgfQorKyAgX19weXhfdF8zID0gUHlUdXBs ZV9HRVRfU0laRShfX3B5eF92X19fcHl4X3N0YXRlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA9 PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fcHl4X3RfNCA9ICgoX19weXhfdF8zID4gNCkgIT0gMCk7CisrICBpZiAoX19weXhfdF80KSB7 CisrICB9IGVsc2UgeworKyAgICBfX3B5eF90XzIgPSBfX3B5eF90XzQ7CisrICAgIGdvdG8gX19w eXhfTDRfYm9vbF9iaW5vcF9kb25lOworKyAgfQorKyAgX19weXhfdF80ID0gX19QeXhfSGFzQXR0 cigoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlm ICh1bmxpa2VseShfX3B5eF90XzQgPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNSA9IChfX3B5eF90XzQgIT0gMCk7CisrICBfX3B5eF90 XzIgPSBfX3B5eF90XzU7CisrICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OworKyAgaWYgKF9f cHl4X3RfMikgeworKworKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNAorKyAqICAgICBfX3B5 eF9yZXN1bHQubGV2ZWwgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LmxvZ19sZXZlbCA9 IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQucHJlZml4ID0gX19weXhfc3RhdGVbMl07IF9f cHl4X3Jlc3VsdC50ZXh0ID0gX19weXhfc3RhdGVbM10KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0 YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKysgKiAgICAg ICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbNF0pICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKi8KKysgICAgX19weXhfdF82ID0gX19QeXhfUHlPYmpl Y3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9u X3NfZGljdCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAgIF9fcHl4X3Rf NyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF82LCBfX3B5eF9uX3NfdXBkYXRl KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKysgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICAgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4 X3N0YXRlID09IFB5X05vbmUpKSB7CisrICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF cnJvciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CisrICAgICAg X19QWVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgfQorKyAgICBfX3B5eF90XzYg PSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDQsIGxvbmcsIDEs IF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNik7CisrICAgIF9fcHl4X3RfOCA9IE5VTEw7CisrICAgIGlmIChDWVRIT05fVU5QQUNL X01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNykpKSB7CisrICAgICAg X19weXhfdF84ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF83KTsKKysgICAgICBpZiAobGlr ZWx5KF9fcHl4X3RfOCkpIHsKKysgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9k X0dFVF9GVU5DVElPTihfX3B5eF90XzcpOworKyAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Rf OCk7CisrICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVD UkVGX1NFVChfX3B5eF90XzcsIGZ1bmN0aW9uKTsKKysgICAgICB9CisrICAgIH0KKysgICAgX19w eXhfdF8xID0gKF9fcHl4X3RfOCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF83 LCBfX3B5eF90XzgsIF9fcHl4X3RfNikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfNywgX19weXhfdF82KTsKKysgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90 XzggPSAwOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysg ICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworKworKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMworKyAqIGNkZWYg X19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKExvZ01lc3NhZ2UgX19weXhfcmVz dWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIF9fcHl4X3Jlc3VsdC5sZXZlbCA9IF9f cHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubG9nX2xldmVsID0gX19weXhfc3RhdGVbMV07IF9f cHl4X3Jlc3VsdC5wcmVmaXggPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnRleHQgPSBf X3B5eF9zdGF0ZVszXQorKyAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0 cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzRd KQorKyAqLworKyAgfQorKworKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKKysgKiAgICAgICAg IF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhf cmVzdWx0LCBfX3B5eF9zdGF0ZSkKKysgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorKyAqIGNk ZWYgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKExvZ01lc3NhZ2UgX19weXhf cmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgX19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3Vs dC5sb2dfbGV2ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnByZWZpeCA9IF9fcHl4 X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNdCisrICogICAgIGlm IGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9f Jyk6CisrICovCisrCisrICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKysgIF9fcHl4X3IgPSBQ eV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICBnb3RvIF9fcHl4X0wwOworKyAgX19w eXhfTDFfZXJyb3I6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzYpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOworKyAgX19QeXhf WERFQ1JFRihfX3B5eF90XzgpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGli cy5tcHYuX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlIiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisrICBfX3B5eF9yID0gMDsKKysgIF9f cHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworICAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMzMKKy0gKiAKKy0gKiBjbGFzcyBDYWxsYmFja1RocmVh ZChUaHJlYWQpOgorLSAqICAgICBkZWYgX19pbml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQorLSAqICAgICAg ICAgc2VsZi5kYWVtb24gPSBUcnVlCisrLyogIih0cmVlIGZyYWdtZW50KSI6MQorKyAqIGRlZiBf X3B5eF91bnBpY2tsZV9Qcm9wZXJ0eShfX3B5eF90eXBlLCBsb25nIF9fcHl4X2NoZWNrc3VtLCBf X3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgY2RlZiBv YmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0 CisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzFfX2luaXRfXyhQeU9i amVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0 YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxi YWNrVGhyZWFkXzFfX2luaXRfXyA9IHsiX19pbml0X18iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMV9faW5pdF9fLCBNRVRIX08s IDB9OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0 Q2FsbGJhY2tUaHJlYWRfMV9faW5pdF9fKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAq X19weXhfdl9zZWxmKSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTFfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eShQeU9iamVjdCAqX19weXhfc2VsZiwg UHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byovCisr c3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzExX19w eXhfdW5waWNrbGVfUHJvcGVydHkgPSB7Il9fcHl4X3VucGlja2xlX1Byb3BlcnR5IiwgKFB5Q0Z1 bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzExX19weXhfdW5waWNrbGVfUHJvcGVydHksIE1FVEhfVkFSQVJHU3xNRVRI X0tFWVdPUkRTLCAwfTsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xMV9fcHl4X3VucGlja2xlX1Byb3BlcnR5KFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQ eU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKysgIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3R5cGUgPSAwOworKyAgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3Vt OworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUgPSAwOworKyAgaW50IF9fcHl4X2xp bmVubyA9IDA7CisrICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisrICBpbnQg X19weXhfY2xpbmVubyA9IDA7CisgICBQeU9iamVjdCAqX19weXhfciA9IDA7CisgICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5p dF9fICh3cmFwcGVyKSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNENhbGxiYWNrVGhyZWFkX19faW5pdF9fKF9fcHl4X3NlbGYsICgoUHlPYmplY3Qg KilfX3B5eF92X3NlbGYpKTsKKysgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91 bnBpY2tsZV9Qcm9wZXJ0eSAod3JhcHBlcikiLCAwKTsKKysgIHsKKysgICAgc3RhdGljIFB5T2Jq ZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHl4X3R5cGUsJl9fcHl4X25f c19weXhfY2hlY2tzdW0sJl9fcHl4X25fc19weXhfc3RhdGUsMH07CisrICAgIFB5T2JqZWN0KiB2 YWx1ZXNbM10gPSB7MCwwLDB9OworKyAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKKysg ICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CisrICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJn cyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CisrICAgICAgc3dpdGNoIChwb3NfYXJn cykgeworKyAgICAgICAgY2FzZSAgMzogdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5 eF9hcmdzLCAyKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2Ug IDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CisrICAgICAg ICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworKyAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OworKyAgICAgICAgY2FzZSAgMDogYnJlYWs7CisrICAgICAgICBkZWZhdWx0OiBnb3RvIF9fcHl4 X0w1X2FyZ3R1cGxlX2Vycm9yOworKyAgICAgIH0KKysgICAgICBrd19hcmdzID0gUHlEaWN0X1Np emUoX19weXhfa3dkcyk7CisrICAgICAgc3dpdGNoIChwb3NfYXJncykgeworKyAgICAgICAgY2Fz ZSAgMDoKKysgICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9HZXRJ dGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhfdHlwZSkpICE9IDApKSBrd19hcmdzLS07 CisrICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CisrICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICBjYXNlICAxOgorKyAgICAgICAgaWYgKGxpa2Vs eSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhf bl9zX3B5eF9jaGVja3N1bSkpICE9IDApKSBrd19hcmdzLS07CisrICAgICAgICBlbHNlIHsKKysg ICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3VucGlja2xlX1Byb3Bl cnR5IiwgMSwgMywgMywgMSk7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKysgICAg ICAgIH0KKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgIGNhc2UgIDI6Cisr ICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMl0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihf X3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X3N0YXRlKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKysgICAg ICAgIGVsc2UgeworKyAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhf dW5waWNrbGVfUHJvcGVydHkiLCAxLCAzLCAzLCAyKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wz X2Vycm9yKQorKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBpZiAodW5saWtlbHkoa3dfYXJn cyA+IDApKSB7CisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdv cmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJf X3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSIpIDwgMCkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19l cnJvcikKKysgICAgICB9CisrICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSAhPSAzKSB7CisrICAgICAgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKysgICAg fSBlbHNlIHsKKysgICAgICB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3Ms IDApOworKyAgICAgIHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7 CisrICAgICAgdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKKysg ICAgfQorKyAgICBfX3B5eF92X19fcHl4X3R5cGUgPSB2YWx1ZXNbMF07CisrICAgIF9fcHl4X3Zf X19weXhfY2hlY2tzdW0gPSBfX1B5eF9QeUludF9Bc19sb25nKHZhbHVlc1sxXSk7IGlmICh1bmxp a2VseSgoX19weXhfdl9fX3B5eF9jaGVja3N1bSA9PSAobG9uZyktMSkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKysgICAgX19weXhfdl9fX3B5 eF9zdGF0ZSA9IHZhbHVlc1syXTsKKysgIH0KKysgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5w YWNraW5nX2RvbmU7CisrICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CisrICBfX1B5eF9SYWlz ZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfUHJvcGVydHkiLCAxLCAzLCAzLCBQeVR1 cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9y KQorKyAgX19weXhfTDNfZXJyb3I6OworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIu bGlicy5tcHYuX19weXhfdW5waWNrbGVfUHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworKyAgcmV0dXJuIE5VTEw7CisrICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7 CisrICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwX19weXhfdW5w aWNrbGVfUHJvcGVydHkoX19weXhfc2VsZiwgX19weXhfdl9fX3B5eF90eXBlLCBfX3B5eF92X19f cHl4X2NoZWNrc3VtLCBfX3B5eF92X19fcHl4X3N0YXRlKTsKKyAKKyAgIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4g X19weXhfcjsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF9fX2luaXRfXyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0 ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7Cisrc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0 eShDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9f X3B5eF90eXBlLCBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIFB5T2JqZWN0ICpfX3B5eF92 X19fcHl4X3N0YXRlKSB7CisrICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvciA9 IDA7CisrICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9yZXN1bHQgPSAwOworICAgUHlPYmplY3Qg Kl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIFB5T2Jq ZWN0ICpfX3B5eF90XzEgPSBOVUxMOworKyAgaW50IF9fcHl4X3RfMTsKKyAgIFB5T2JqZWN0ICpf X3B5eF90XzIgPSBOVUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CisrICBQeU9i amVjdCAqX19weXhfdF80ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzUgPSBOVUxMOwor KyAgaW50IF9fcHl4X3RfNjsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hh ciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwgMCk7CisrICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfUHJvcGVydHkiLCAwKTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM0CistICogY2xhc3MgQ2FsbGJhY2tU aHJlYWQoVGhyZWFkKToKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorLSAqICAgICAgICAg VGhyZWFkLl9faW5pdF9fKHNlbGYpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorLSAqICAgICAgICAgc2VsZi5sb2NrID0gU2VtYXBo b3JlKCkKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKysgKiAgICAgY2RlZiBvYmplY3QgX19w eXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CisrICogICAg IGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4MDU3MmQxMTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4 X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21w YXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEsIG5hbWUpKSIgJSBfX3B5 eF9jaGVja3N1bSkKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8y LCBfX3B5eF9uX3NfVGhyZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgMTEzNCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0g IF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF8yLCBfX3B5eF9u X3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDExMzQsIF9f cHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9ERUNS RUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIF9fcHl4X3RfMiA9IE5VTEw7CistICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfMykpKSB7CistICAgIF9fcHl4X3RfMiA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7 CistICAgIGlmIChsaWtlbHkoX19weXhfdF8yKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzMpOworLSAgICAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzMsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAgX19w eXhfdF8xID0gKF9fcHl4X3RfMikgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8z LCBfX3B5eF90XzIsIF9fcHl4X3Zfc2VsZikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9f cHl4X3RfMywgX19weXhfdl9zZWxmKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsgX19w eXhfdF8yID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEx MzQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5 eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19weXhfdF8xID0gKChfX3B5eF92X19fcHl4X2No ZWNrc3VtICE9IDB4MDU3MmQxMSkgIT0gMCk7CisrICBpZiAoX19weXhfdF8xKSB7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNQorLSAqICAgICBkZWYgX19pbml0 X18oc2VsZik6CistICogICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKy0gKiAgICAgICAg IHNlbGYuZGFlbW9uID0gVHJ1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBzZWxmLmxvY2sgPSBTZW1hcGhvcmUoKQorLSAqICAgICAgICAgc2VsZi5sb2NrLmFjcXVp cmUoVHJ1ZSkKKy0gKi8KKy0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zf c2VsZiwgX19weXhfbl9zX2RhZW1vbiwgUHlfVHJ1ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTEzNSwg X19weXhfTDFfZXJyb3IpCisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjUKKysgKiAgICAgY2Rl ZiBvYmplY3QgX19weXhfcmVzdWx0CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4MDU3 MmQxMToKKysgKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5 eF9QaWNrbGVFcnJvciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBy YWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgw NTcyZDExID0gKGRhdGEsIG5hbWUpKSIgJSBfX3B5eF9jaGVja3N1bSkKKysgKiAgICAgX19weXhf cmVzdWx0ID0gUHJvcGVydHkuX19uZXdfXyhfX3B5eF90eXBlKQorKyAqLworKyAgICBfX3B5eF90 XzIgPSBQeUxpc3RfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigx LCA1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICAg IF9fUHl4X0lOQ1JFRihfX3B5eF9uX3NfUGlja2xlRXJyb3IpOworKyAgICBfX1B5eF9HSVZFUkVG KF9fcHl4X25fc19QaWNrbGVFcnJvcik7CisrICAgIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90XzIs IDAsIF9fcHl4X25fc19QaWNrbGVFcnJvcik7CisrICAgIF9fcHl4X3RfMyA9IF9fUHl4X0ltcG9y dChfX3B5eF9uX3NfcGlja2xlLCBfX3B5eF90XzIsIC0xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsK KysgICAgX19weXhfdF8yID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzMsIF9fcHl4X25fc19Q aWNrbGVFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9f cHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhf SU5DUkVGKF9fcHl4X3RfMik7CisrICAgIF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IgPSBfX3B5 eF90XzI7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM2CistICogICAgICAgICBUaHJlYWQuX19pbml0 X18oc2VsZikKKy0gKiAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQorLSAqICAgICAgICAgc2Vs Zi5sb2NrID0gU2VtYXBob3JlKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sg PSBOb25lCisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjYKKysgKiAgICAgaWYgX19weXhfY2hl Y2tzdW0gIT0gMHgwNTcyZDExOgorKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2ts ZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNr bGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEs IG5hbWUpKSIgJSBfX3B5eF9jaGVja3N1bSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICBfX3B5eF9yZXN1bHQgPSBQcm9wZXJ0eS5fX25ld19fKF9fcHl4X3R5cGUpCisrICog ICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorICAqLworLSAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzMsIF9fcHl4X25fc19TZW1hcGhvcmUpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTM2LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzMpOworLSAgX19weXhfdF8yID0gTlVMTDsKKy0gIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsK Ky0gICAgX19weXhfdF8yID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8zKTsKKy0gICAgaWYg KGxpa2VseShfX3B5eF90XzIpKSB7CistICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMyk7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Rf Mik7CistICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3RfMywgZnVuY3Rpb24pOworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9G cm9tX2xvbmcoX19weXhfdl9fX3B5eF9jaGVja3N1bSk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2tw X3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4MDUsIF9fcHl4X3RfMik7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9f cHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9y KTsKKysgICAgX19weXhfdF8yID0gX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcjsgX19weXhfdF81 ID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfMik7CisrICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CisrICAg ICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8y KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworKyAgICAgICAgX19QeXhfSU5D UkVGKGZ1bmN0aW9uKTsKKysgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5j dGlvbik7CisrICAgICAgfQorICAgICB9CisrICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8g X19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF81LCBfX3B5eF90XzQp IDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfNCk7CisrICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKysgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgIGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8zKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 CisrICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMywgMCwgMCwgMCk7CisrICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworKyAgICBfX1BZWF9FUlIoMSwgNiwgX19weXhf TDFfZXJyb3IpCisrCisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKysgKiAgICAgY2RlZiBv YmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0 CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4MDU3MmQxMTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9y IGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJv cigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEsIG5hbWUp KSIgJSBfX3B5eF9jaGVja3N1bSkKKysgKi8KKyAgIH0KKy0gIF9fcHl4X3RfMSA9IChfX3B5eF90 XzIpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4X3RfMikgOiBf X1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8zKTsKKy0gIF9fUHl4X1hERUNSRUYoX19w eXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDExMzYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmIChf X1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2xvY2ssIF9f cHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTEzNiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTM3CistICogICAgICAgICBzZWxmLmRhZW1vbiA9IFRydWUK Ky0gKiAgICAgICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgpCistICogICAgICAgICBzZWxmLmxv Y2suYWNxdWlyZShUcnVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICBzZWxmLmNhbGxiYWNrID0gTm9uZQorLSAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gRmFs c2UKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjcKKysgKiAgICAgICAgIGZyb20gcGlja2xlIGlt cG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgorKyAqICAgICAgICAgcmFpc2Ug X19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4MDU3MmQx MSA9IChkYXRhLCBuYW1lKSkiICUgX19weXhfY2hlY2tzdW0pCisrICogICAgIF9fcHl4X3Jlc3Vs dCA9IFByb3BlcnR5Ll9fbmV3X18oX19weXhfdHlwZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIF9f cHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoPFByb3BlcnR5PiBfX3B5eF9yZXN1bHQs IF9fcHl4X3N0YXRlKQorICAqLworLSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMCwgMTEzNywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYo X19weXhfdF8zKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19w eXhfdF8zLCBfX3B5eF9uX3NfYWNxdWlyZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDExMzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlP YmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5KSwgX19weXhfbl9zX25ldyk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMik7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIF9f cHl4X3RfMyA9IE5VTEw7CisrICBfX3B5eF90XzQgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAg X19weXhfdF8zID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKy0gICAgaWYgKGxpa2Vs eShfX3B5eF90XzMpKSB7CisrICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfMik7CisrICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgeworICAgICAgIFB5T2JqZWN0KiBm dW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzMpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworICAg ICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF90XzIsIGZ1bmN0aW9uKTsKKyAgICAgfQorICAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3Rf MykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzMsIFB5X1Ry dWUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIFB5X1RydWUpOworLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEzNywgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIF9fcHl4X3RfMyA9IChfX3B5eF90XzQpID8gX19QeXhf UHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF92X19fcHl4X3R5 cGUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfX19weXhf dHlwZSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKysgIF9fcHl4X3ZfX19weXhfcmVzdWx0ID0gX19weXhfdF8zOworKyAgX19weXhfdF8zID0g MDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM4CistICogICAg ICAgICBzZWxmLmxvY2sgPSBTZW1hcGhvcmUoKQorLSAqICAgICAgICAgc2VsZi5sb2NrLmFjcXVp cmUoVHJ1ZSkKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IEZhbHNlCistICog CisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo4CisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNr bGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEs IG5hbWUpKSIgJSBfX3B5eF9jaGVja3N1bSkKKysgKiAgICAgX19weXhfcmVzdWx0ID0gUHJvcGVy dHkuX19uZXdfXyhfX3B5eF90eXBlKQorKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9u ZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgX19weXhfdW5waWNr bGVfUHJvcGVydHlfX3NldF9zdGF0ZSg8UHJvcGVydHk+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3Rh dGUpCisrICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKyAgKi8KKy0gIGlmIChfX1B5eF9QeU9i amVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNrLCBQeV9Ob25l KSA8IDApIF9fUFlYX0VSUigwLCAxMTM4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9 IChfX3B5eF92X19fcHl4X3N0YXRlICE9IFB5X05vbmUpOworKyAgX19weXhfdF82ID0gKF9fcHl4 X3RfMSAhPSAwKTsKKysgIGlmIChfX3B5eF90XzYpIHsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTM5CistICogICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVl KQorLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKKy0gKiAgICAgICAgIHNlbGYuaXNz aHV0ZG93biA9IEZhbHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAg ICAgZGVmIHNodXRkb3duKHNlbGYpOgorKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo5CisrICog ICAgIF9fcHl4X3Jlc3VsdCA9IFByb3BlcnR5Ll9fbmV3X18oX19weXhfdHlwZSkKKysgKiAgICAg aWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6CisrICogICAgICAgICBfX3B5eF91bnBpY2tsZV9Q cm9wZXJ0eV9fc2V0X3N0YXRlKDxQcm9wZXJ0eT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0 CisrICogY2RlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKFByb3BlcnR5IF9f cHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgorICAqLworLSAgaWYgKF9fUHl4X1B5T2Jq ZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfaXNzaHV0ZG93biwgUHlfRmFs c2UpIDwgMCkgX19QWVhfRVJSKDAsIDExMzksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAoIShs aWtlbHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5eF92 X19fcHl4X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3Is ICJFeHBlY3RlZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0dXBsZSIsIFB5X1RZUEUoX19weXhfdl9f X3B5eF9zdGF0ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlYX0VSUigxLCA5LCBfX3B5eF9MMV9lcnJv cikKKysgICAgX19weXhfdF8zID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf dW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCAoKFB5T2JqZWN0 KilfX3B5eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsK KysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMworLSAqIAorLSAqIGNsYXNzIENhbGxi YWNrVGhyZWFkKFRocmVhZCk6CistICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCist ICogICAgICAgICBzZWxmLmRhZW1vbiA9IFRydWUKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6 OAorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVj a3N1bXMgKCVzIHZzIDB4MDU3MmQxMSA9IChkYXRhLCBuYW1lKSkiICUgX19weXhfY2hlY2tzdW0p CisrICogICAgIF9fcHl4X3Jlc3VsdCA9IFByb3BlcnR5Ll9fbmV3X18oX19weXhfdHlwZSkKKysg KiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoPFBy b3BlcnR5PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19weXhf cmVzdWx0CisgICovCisrICB9CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9f cHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CisrICAvKiAiKHRyZWUgZnJh Z21lbnQpIjoxMAorKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKysgKiAgICAg ICAgIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoPFByb3BlcnR5PiBfX3B5eF9y ZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19z ZXRfc3RhdGUoUHJvcGVydHkgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICog ICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5uYW1l ID0gX19weXhfc3RhdGVbMV0KKysgKi8KKysgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CisrICBf X1B5eF9JTkNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQpOworKyAgX19weXhfciA9IF9fcHl4X3Zf X19weXhfcmVzdWx0OworICAgZ290byBfX3B5eF9MMDsKKysKKysgIC8qICIodHJlZSBmcmFnbWVu dCkiOjEKKysgKiBkZWYgX19weXhfdW5waWNrbGVfUHJvcGVydHkoX19weXhfdHlwZSwgbG9uZyBf X3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgIGNkZWYgb2Jq ZWN0IF9fcHl4X3Jlc3VsdAorKyAqLworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisg ICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMik7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBf X1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1RocmVhZC5fX2lu aXRfXyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAg X19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOwor KyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVf UHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsK KyAgIF9fcHl4X3IgPSBOVUxMOworICAgX19weXhfTDA6OworKyAgX19QeXhfWERFQ1JFRihfX3B5 eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9y ZXN1bHQpOworICAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQorLSAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0g RmFsc2UKKy0gKiAKKy0gKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlCistICogICAg ICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorKy8qICIodHJlZSBmcmFnbWVudCkiOjExCisrICog ICAgICAgICBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKDxQcm9wZXJ0eT4gX19w eXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKysgKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorKyAq IGNkZWYgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShQcm9wZXJ0eSBfX3B5eF9y ZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQu bmFtZSA9IF9fcHl4X3N0YXRlWzFdCisrICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFu ZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CisgICovCisgCistLyogUHl0aG9u IHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNENhbGxiYWNrVGhyZWFkXzNzaHV0ZG93bihQeU9iamVjdCAqX19weXhfc2VsZiwgUHlP YmplY3QgKl9fcHl4X3Zfc2VsZik7IC8qcHJvdG8qLworLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5 eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzNzaHV0ZG93biA9 IHsic2h1dGRvd24iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzE0Q2FsbGJhY2tUaHJlYWRfM3NodXRkb3duLCBNRVRIX08sIDB9OworLXN0YXRpYyBQeU9iamVj dCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfM3NodXRk b3duKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7CistICBQ eU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNodXRkb3duICh3cmFwcGVyKSIsIDApOworLSAg X19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFk XzJzaHV0ZG93bihfX3B5eF9zZWxmLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7CistCist ICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4 dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMnNodXRkb3duKENZVEhP Tl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X3NlbGYpIHsK KytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Vu cGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUHJvcGVydHkgKl9fcHl4X3ZfX19weXhfcmVzdWx0LCBQeU9iamVjdCAqX19weXhf dl9fX3B5eF9zdGF0ZSkgeworICAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworICAgX19QeXhf UmVmTmFubnlEZWNsYXJhdGlvbnMKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAg UHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVM TDsKKysgIGludCBfX3B5eF90XzI7CisrICBQeV9zc2l6ZV90IF9fcHl4X3RfMzsKKysgIGludCBf X3B5eF90XzQ7CisrICBpbnQgX19weXhfdF81OworKyAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5V TEw7CisrICBQeU9iamVjdCAqX19weXhfdF83ID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90 XzggPSBOVUxMOworICAgaW50IF9fcHl4X2xpbmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5 eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgic2h1dGRvd24iLCAwKTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTQyCistICogCistICogICAgIGRlZiBzaHV0ZG93bihzZWxm KToKKy0gKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRydWUgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKKy0gKiAgICAgICAg IHNlbGYubG9jay5yZWxlYXNlKCkKKy0gKi8KKy0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRy U3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2lzc2h1dGRvd24sIFB5X1RydWUpIDwgMCkgX19Q WVhfRVJSKDAsIDExNDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUiLCAwKTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQzCistICogICAgIGRlZiBzaHV0ZG93 bihzZWxmKToKKy0gKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRydWUKKy0gKiAgICAgICAg IHNlbGYuY2FsbGJhY2sgPSBOb25lICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKKy0gKiAKKysgIC8qICIodHJlZSBmcmFnbWVudCki OjEyCisrICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xl X1Byb3BlcnR5X19zZXRfc3RhdGUoUHJvcGVydHkgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9z dGF0ZSk6CisrICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4 X3Jlc3VsdC5uYW1lID0gX19weXhfc3RhdGVbMV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1 bHQsICdfX2RpY3RfXycpOgorKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0 ZShfX3B5eF9zdGF0ZVsyXSkKKyAgKi8KKy0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3Ry KF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNrLCBQeV9Ob25lKSA8IDApIF9fUFlYX0VS UigwLCAxMTQzLCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTQ0CistICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlCistICog ICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorLSAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVh c2UoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGRlZiBjYWxs KHNlbGYpOgorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhf dF8yKTsKKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF8y LCBfX3B5eF9uX3NfcmVsZWFzZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDAsIDExNDQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Cist ICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIF9fcHl4X3RfMiA9 IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9D aGVjayhfX3B5eF90XzMpKSkgeworLSAgICBfX3B5eF90XzIgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzMpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMikpIHsKKy0gICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8zKTsKKy0gICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwor LSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8zLCBmdW5jdGlvbik7CistICAgIH0KKysg IGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7CisrICAgIFB5 RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qg c3Vic2NyaXB0YWJsZSIpOworKyAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQor ICAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3RfMikgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25l QXJnKF9fcHl4X3RfMywgX19weXhfdF8yKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5 eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJy b3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhf c3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK KysgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X19f cHl4X3Jlc3VsdC0+ZGF0YSk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQt PmRhdGEpOworKyAgX19weXhfdl9fX3B5eF9yZXN1bHQtPmRhdGEgPSBfX3B5eF90XzE7CisrICBf X3B5eF90XzEgPSAwOworKyAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlf Tm9uZSkpIHsKKysgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlw ZScgb2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CisrICAgIF9fUFlYX0VSUigxLCAxMiwg X19weXhfTDFfZXJyb3IpCisrICB9CisrICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1 cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDEsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9u ZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR0lW RVJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5u YW1lKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+bmFtZSk7CisrICBf X3B5eF92X19fcHl4X3Jlc3VsdC0+bmFtZSA9IF9fcHl4X3RfMTsKKysgIF9fcHl4X3RfMSA9IDA7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQorLSAqICAgICAg ICAgc2VsZi5pc3NodXRkb3duID0gRmFsc2UKKy0gKiAKKy0gKiAgICAgZGVmIHNodXRkb3duKHNl bGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmlzc2h1 dGRvd24gPSBUcnVlCistICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorKyAgLyogIih0 cmVlIGZyYWdtZW50KSI6MTMKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRf c3RhdGUoUHJvcGVydHkgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAg IF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5uYW1lID0g X19weXhfc3RhdGVbMV0KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0 dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVsy XSkKKyAgKi8KKysgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUp KSB7CisrICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJvYmplY3Qgb2YgdHlw ZSAnTm9uZVR5cGUnIGhhcyBubyBsZW4oKSIpOworKyAgICBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgfQorKyAgX19weXhfdF8zID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF92 X19fcHl4X3N0YXRlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA9PSAoKFB5X3NzaXplX3QpLTEp KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNCA9ICgoX19w eXhfdF8zID4gMikgIT0gMCk7CisrICBpZiAoX19weXhfdF80KSB7CisrICB9IGVsc2UgeworKyAg ICBfX3B5eF90XzIgPSBfX3B5eF90XzQ7CisrICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9k b25lOworKyAgfQorKyAgX19weXhfdF80ID0gX19QeXhfSGFzQXR0cigoKFB5T2JqZWN0ICopX19w eXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlmICh1bmxpa2VseShfX3B5eF90 XzQgPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfNSA9IChfX3B5eF90XzQgIT0gMCk7CisrICBfX3B5eF90XzIgPSBfX3B5eF90XzU7Cisr ICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OworKyAgaWYgKF9fcHl4X3RfMikgeworIAorLSAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5D UkVGKFB5X05vbmUpOworLSAgZ290byBfX3B5eF9MMDsKKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0g IF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsK Ky0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkNhbGxiYWNrVGhyZWFkLnNodXRkb3duIiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsKKy0gIF9f cHl4X0wwOjsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlG aW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNDYKKy0gKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNl KCkKKy0gKiAKKy0gKiAgICAgZGVmIGNhbGwoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKKy0gKiAKKysgICAgLyogIih0 cmVlIGZyYWdtZW50KSI6MTQKKysgKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0 ZVswXTsgX19weXhfcmVzdWx0Lm5hbWUgPSBfX3B5eF9zdGF0ZVsxXQorKyAqICAgICBpZiBsZW4o X19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgor KyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVsyXSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqLworKyAgICBfX3B5eF90XzYgPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3Jlc3VsdCks IF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwg MTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgICAg X19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzYsIF9fcHl4X25f c191cGRhdGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigxLCAxNCwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgICAgaWYgKHVubGlrZWx5KF9fcHl4 X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKysgICAgICBQeUVycl9TZXRTdHJpbmcoUHlF eGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsK KysgICAgICBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICB9CisrICAgIF9f cHl4X3RfNiA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMiwg bG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9H T1RSRUYoX19weXhfdF82KTsKKysgICAgX19weXhfdF84ID0gTlVMTDsKKysgICAgaWYgKENZVEhP Tl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF83KSkpIHsK KysgICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzcpOworKyAgICAg IGlmIChsaWtlbHkoX19weXhfdF84KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0g UHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNyk7CisrICAgICAgICBfX1B5eF9JTkNSRUYo X19weXhfdF84KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBf X1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNywgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQor KyAgICBfX3B5eF90XzEgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhf X3B5eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF83LCBfX3B5eF90XzYpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7 IF9fcHl4X3RfOCA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYg PSAwOworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxNCwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFk XzVjYWxsKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKTsgLypw cm90byovCistc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18z bXB2XzE0Q2FsbGJhY2tUaHJlYWRfNWNhbGwgPSB7ImNhbGwiLCAoUHlDRnVuY3Rpb24pX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNWNhbGwsIE1FVEhfTywg MH07Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRD YWxsYmFja1RocmVhZF81Y2FsbChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjYWxsICh3cmFwcGVy KSIsIDApOworLSAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENh bGxiYWNrVGhyZWFkXzRjYWxsKF9fcHl4X3NlbGYsICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYp KTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKy19CistCistc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF80Y2FsbChD WVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxm KSB7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7CistICBfX1B5eF9SZWZOYW5ueURlY2xh cmF0aW9ucworLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5VTEw7CistICBQeU9iamVjdCAqX19w eXhfdF8yID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgaW50IF9f cHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Cist ICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi Y2FsbCIsIDApOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDcK Ky0gKiAKKy0gKiAgICAgZGVmIGNhbGwoc2VsZik6CistICogICAgICAgICBzZWxmLmxvY2sucmVs ZWFzZSgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAgICAgZGVmIHNl dChzZWxmLCBjYWxsYmFjayk6CisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjEzCisrICogY2Rl ZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKFByb3BlcnR5IF9fcHl4X3Jlc3Vs dCwgdHVwbGUgX19weXhfc3RhdGUpOgorKyAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4 X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubmFtZSA9IF9fcHl4X3N0YXRlWzFdCisrICogICAgIGlm IGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9f Jyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIF9fcHl4X3Jlc3Vs dC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMl0pCisgICovCistICBfX3B5eF90XzIgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2xvY2spOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTQ3LCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gX19QeXhfUHlP YmplY3RfR2V0QXR0clN0cihfX3B5eF90XzIsIF9fcHl4X25fc19yZWxlYXNlKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTE0NywgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5 eF90XzIgPSAwOworLSAgX19weXhfdF8yID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7CistICAgIF9fcHl4 X3RfMiA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMyk7CistICAgIGlmIChsaWtlbHkoX19w eXhfdF8yKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzMpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOworLSAgICAg IF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90 XzMsIGZ1bmN0aW9uKTsKKy0gICAgfQorICAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3RfMikg PyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdF8yKSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMTE0NywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTE0NgorLSAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQorLSAq IAorLSAqICAgICBkZWYgY2FsbChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQorLSAqIAorKyAgLyogIih0cmVlIGZyYWdt ZW50KSI6MTEKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUo PFByb3BlcnR5PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19w eXhfcmVzdWx0CisrICogY2RlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKFBy b3BlcnR5IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07 IF9fcHl4X3Jlc3VsdC5uYW1lID0gX19weXhfc3RhdGVbMV0KKysgKiAgICAgaWYgbGVuKF9fcHl4 X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKyAgKi8K KyAKKyAgIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworQEAgLTIyMTkwLDQzICsyMTc5NSw0NSBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxi YWNrVGhyZWFkXzRjYWxsKENZVEhPTl9VTgorICAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wx X2Vycm9yOjsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYo X19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X0FkZFRy YWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNhbGxiYWNrVGhyZWFkLmNhbGwiLCBfX3B5eF9j bGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxM OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzcpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOworKyAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZSIs IF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhf ciA9IDA7CisgICBfX3B5eF9MMDo7CisgICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAor LS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ5CistICogICAgICAgICBzZWxm LmxvY2sucmVsZWFzZSgpCistICogCistICogICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmNhbGxiYWNrID0g Y2FsbGJhY2sKKy0gKiAKKysvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisrICogZGVmIF9fcHl4X3Vu cGlja2xlX0V2ZW50KF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRl KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBjZGVmIG9iamVjdCBfX3B5 eF9QaWNrbGVFcnJvcgorKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKyAgKi8KKyAK KyAvKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfN3NldChQeU9iamVjdCAqX19weXhfc2Vs ZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypwcm90byov Cistc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0 Q2FsbGJhY2tUaHJlYWRfN3NldCA9IHsic2V0IiwgKFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVu Y3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJh Y2tUaHJlYWRfN3NldCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9OworLXN0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRf N3NldChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0 ICpfX3B5eF9rd2RzKSB7CistICBQeU9iamVjdCAqX19weXhfdl9zZWxmID0gMDsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF92X2NhbGxiYWNrID0gMDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19fcHl4X3VucGlja2xlX0V2ZW50KFB5T2JqZWN0ICpfX3B5 eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnBy b3RvKi8KKytzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNfX3B5eF91bnBpY2tsZV9FdmVudCA9IHsiX19weXhfdW5waWNrbGVfRXZlbnQiLCAoUHlD RnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNfX3B5eF91bnBpY2tsZV9FdmVudCwgTUVUSF9WQVJBUkdTfE1FVEhf S0VZV09SRFMsIDB9OworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzX19weXhfdW5waWNrbGVfRXZlbnQoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2Jq ZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykgeworKyAgUHlPYmplY3QgKl9f cHl4X3ZfX19weXhfdHlwZSA9IDA7CisrICBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW07Cisr ICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSA9IDA7CisgICBpbnQgX19weXhfbGluZW5v ID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5 eF9jbGluZW5vID0gMDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKyAgIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0ICh3cmFw cGVyKSIsIDApOworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xl X0V2ZW50ICh3cmFwcGVyKSIsIDApOworICAgeworLSAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5 eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19zZWxmLCZfX3B5eF9uX3NfY2FsbGJhY2ssMH07 CistICAgIFB5T2JqZWN0KiB2YWx1ZXNbMl0gPSB7MCwwfTsKKysgICAgc3RhdGljIFB5T2JqZWN0 ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHl4X3R5cGUsJl9fcHl4X25fc19w eXhfY2hlY2tzdW0sJl9fcHl4X25fc19weXhfc3RhdGUsMH07CisrICAgIFB5T2JqZWN0KiB2YWx1 ZXNbM10gPSB7MCwwLDB9OworICAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsKKyAgICAg ICBQeV9zc2l6ZV90IGt3X2FyZ3M7CisgICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3NfYXJncyA9 IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CisgICAgICAgc3dpdGNoIChwb3NfYXJncykg eworKyAgICAgICAgY2FzZSAgMzogdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCAyKTsKKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKyAgICAgICAgIGNhc2UgIDI6 IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CisgICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7CisgICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQeVR1cGxl X0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworQEAgLTIyMjM3LDIwNyArMjE4NDQsMzc4IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tU aHJlYWRfN3NldChQeU9iamVjdCAqCisgICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4 X2t3ZHMpOworICAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKyAgICAgICAgIGNhc2UgIDA6Cist ICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihf X3B5eF9rd2RzLCBfX3B5eF9uX3Nfc2VsZikpICE9IDApKSBrd19hcmdzLS07CisrICAgICAgICBp ZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2Rz LCBfX3B5eF9uX3NfcHl4X3R5cGUpKSAhPSAwKSkga3dfYXJncy0tOworICAgICAgICAgZWxzZSBn b3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OworICAgICAgICAgY2FzZSAgMToKKy0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9f UHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19jYWxsYmFjaykpICE9 IDApKSBrd19hcmdzLS07CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9Q eURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X2NoZWNrc3VtKSkgIT0g MCkpIGt3X2FyZ3MtLTsKKyAgICAgICAgIGVsc2UgeworLSAgICAgICAgICBfX1B5eF9SYWlzZUFy Z3R1cGxlSW52YWxpZCgic2V0IiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5 eF9MM19lcnJvcikKKysgICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4 X3VucGlja2xlX0V2ZW50IiwgMSwgMywgMywgMSk7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19l cnJvcikKKysgICAgICAgIH0KKysgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAg IGNhc2UgIDI6CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMl0gPSBfX1B5eF9QeURpY3Rf R2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X3N0YXRlKSkgIT0gMCkpIGt3X2Fy Z3MtLTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52 YWxpZCgiX19weXhfdW5waWNrbGVfRXZlbnQiLCAxLCAzLCAzLCAyKTsgX19QWVhfRVJSKDEsIDEs IF9fcHl4X0wzX2Vycm9yKQorICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBpZiAodW5saWtl bHkoa3dfYXJncyA+IDApKSB7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRp b25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9z X2FyZ3MsICJzZXQiKSA8IDApKSBfX1BZWF9FUlIoMCwgMTE0OSwgX19weXhfTDNfZXJyb3IpCisr ICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3 ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJfX3B5eF91bnBpY2ts ZV9FdmVudCIpIDwgMCkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKyAgICAgICB9 CistICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7Cisr ICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAzKSB7CisgICAg ICAgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKyAgICAgfSBlbHNlIHsKKyAgICAgICB2 YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworICAgICAgIHZhbHVl c1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CisrICAgICAgdmFsdWVzWzJd ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAyKTsKKyAgICAgfQorLSAgICBfX3B5eF92 X3NlbGYgPSB2YWx1ZXNbMF07CistICAgIF9fcHl4X3ZfY2FsbGJhY2sgPSB2YWx1ZXNbMV07Cisr ICAgIF9fcHl4X3ZfX19weXhfdHlwZSA9IHZhbHVlc1swXTsKKysgICAgX19weXhfdl9fX3B5eF9j aGVja3N1bSA9IF9fUHl4X1B5SW50X0FzX2xvbmcodmFsdWVzWzFdKTsgaWYgKHVubGlrZWx5KChf X3B5eF92X19fcHl4X2NoZWNrc3VtID09IChsb25nKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorKyAgICBfX3B5eF92X19fcHl4X3N0YXRl ID0gdmFsdWVzWzJdOworICAgfQorICAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdf ZG9uZTsKKyAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVw bGVJbnZhbGlkKCJzZXQiLCAxLCAyLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsg X19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wzX2Vycm9yKQorKyAgX19QeXhfUmFpc2VBcmd0dXBs ZUludmFsaWQoIl9fcHl4X3VucGlja2xlX0V2ZW50IiwgMSwgMywgMywgUHlUdXBsZV9HRVRfU0la RShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKyAgIF9fcHl4 X0wzX2Vycm9yOjsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNh bGxiYWNrVGhyZWFkLnNldCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOworKyAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhf dW5waWNrbGVfRXZlbnQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIE5VTEw7 CisgICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7CistICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNnNldChfX3B5eF9z ZWxmLCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfY2FsbGJhY2spOworKyAgX19weXhfciA9IF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMl9fcHl4X3VucGlja2xlX0V2ZW50KF9fcHl4X3Nl bGYsIF9fcHl4X3ZfX19weXhfdHlwZSwgX19weXhfdl9fX3B5eF9jaGVja3N1bSwgX19weXhfdl9f X3B5eF9zdGF0ZSk7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKyAgIF9fUHl4X1Jl Zk5hbm55RmluaXNoQ29udGV4dCgpOworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLXN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJl YWRfNnNldChDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19w eXhfdl9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9jYWxsYmFjaykgeworK3N0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEyX19weXhfdW5waWNrbGVfRXZlbnQo Q1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfX19w eXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19weXhfdl9f X3B5eF9zdGF0ZSkgeworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IgPSAw OworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfcmVzdWx0ID0gMDsKKyAgIFB5T2JqZWN0ICpf X3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICBpbnQgX19w eXhfdF8xOworKyAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CisrICBQeU9iamVjdCAqX19w eXhfdF8zID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAgUHlPYmpl Y3QgKl9fcHl4X3RfNSA9IE5VTEw7CisrICBpbnQgX19weXhfdF82OworICAgaW50IF9fcHl4X2xp bmVubyA9IDA7CisgICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CisgICBpbnQg X19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgic2V0Iiwg MCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfRXZlbnQi LCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTUwCistICog CistICogICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOgorLSAqICAgICAgICAgc2VsZi5jYWxs YmFjayA9IGNhbGxiYWNrICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiAg ICAgZGVmIHJ1bihzZWxmKToKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKysgKiAgICAgY2Rl ZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVz dWx0CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4ZGEzOGMyNTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVy cm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVF cnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhkYTM4YzI1ID0gKGRhdGEsIGVy cm9yLCBpZCwgcmVwbHlfdXNlcmRhdGEpKSIgJSBfX3B5eF9jaGVja3N1bSkKKyAgKi8KKy0gIGlm IChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NhbGxi YWNrLCBfX3B5eF92X2NhbGxiYWNrKSA8IDApIF9fUFlYX0VSUigwLCAxMTUwLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X3RfMSA9ICgoX19weXhfdl9fX3B5eF9jaGVja3N1bSAhPSAweGRhMzhj MjUpICE9IDApOworKyAgaWYgKF9fcHl4X3RfMSkgeworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExNDkKKy0gKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKKy0g KiAKKy0gKiAgICAgZGVmIHNldChzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjaworLSAqIAorKyAg ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1CisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3Vs dAorKyAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweGRhMzhjMjU6CisrICogICAgICAgICBm cm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJy b3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJv ciwgaWQsIHJlcGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hlY2tzdW0pCisrICogICAgIF9fcHl4 X3Jlc3VsdCA9IEV2ZW50Ll9fbmV3X18oX19weXhfdHlwZSkKKyAgKi8KKysgICAgX19weXhfdF8y ID0gUHlMaXN0X05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwg NSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBf X1B5eF9JTkNSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKysgICAgX19QeXhfR0lWRVJFRihf X3B5eF9uX3NfUGlja2xlRXJyb3IpOworKyAgICBQeUxpc3RfU0VUX0lURU0oX19weXhfdF8yLCAw LCBfX3B5eF9uX3NfUGlja2xlRXJyb3IpOworKyAgICBfX3B5eF90XzMgPSBfX1B5eF9JbXBvcnQo X19weXhfbl9zX3BpY2tsZSwgX19weXhfdF8yLCAtMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8z KSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8zKTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisr ICAgIF9fcHl4X3RfMiA9IF9fUHl4X0ltcG9ydEZyb20oX19weXhfdF8zLCBfX3B5eF9uX3NfUGlj a2xlRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzIpOworKyAgICBfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yID0gX19weXhf dF8yOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgCistICAvKiBmdW5jdGlv biBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9u ZSk7CisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjYKKysgKiAgICAgaWYgX19weXhfY2hlY2tz dW0gIT0gMHhkYTM4YzI1OgorKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVy cm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVF cnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhkYTM4YzI1ID0gKGRhdGEsIGVy cm9yLCBpZCwgcmVwbHlfdXNlcmRhdGEpKSIgJSBfX3B5eF9jaGVja3N1bSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBfX3B5eF9yZXN1bHQgPSBFdmVudC5fX25ld19fKF9f cHl4X3R5cGUpCisrICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorKyAqLworKyAg ICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2xvbmcoX19weXhfdl9fX3B5eF9jaGVja3N1 bSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdF80ID0gX19Q eXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3Zz XzB4ZGEsIF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEs IDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X0lOQ1JF RihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKysgICAgX19weXhfdF8yID0gX19weXhfdl9f X3B5eF9QaWNrbGVFcnJvcjsgX19weXhfdF81ID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAg ICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CisrICAgICAgaWYg KGxpa2VseShfX3B5eF90XzUpKSB7CisrICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1l dGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzUpOworKyAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICAgIF9fUHl4 X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CisrICAgICAgfQorKyAgICB9CisrICAg IF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4 X3RfMiwgX19weXhfdF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzIsIF9fcHl4X3RfNCk7CisrICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19w eXhfdF81ID0gMDsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7 CisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wx X2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMywg MCwgMCwgMCk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOwor KyAgICBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrCisrICAgIC8qICIodHJlZSBm cmFnbWVudCkiOjQKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAg ICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CisrICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9 IDB4ZGEzOGMyNTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgZnJv bSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAg ICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMg dnMgMHhkYTM4YzI1ID0gKGRhdGEsIGVycm9yLCBpZCwgcmVwbHlfdXNlcmRhdGEpKSIgJSBfX3B5 eF9jaGVja3N1bSkKKysgKi8KKysgIH0KKysKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjcKKysg KiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVF cnJvcgorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBj aGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQsIHJlcGx5X3VzZXJk YXRhKSkiICUgX19weXhfY2hlY2tzdW0pCisrICogICAgIF9fcHl4X3Jlc3VsdCA9IEV2ZW50Ll9f bmV3X18oX19weXhfdHlwZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBp ZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0V2 ZW50X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqLwor KyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19w eXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KSwgX19weXhfbl9zX25ldyk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICBfX3B5eF90XzQgPSBOVUxMOworKyAgaWYg KENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8y KSkpIHsKKysgICAgX19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKysg ICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0g UHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfMik7CisrICAgICAgX19QeXhfSU5DUkVGKF9f cHl4X3RfNCk7CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rpb24pOworKyAgICB9CisrICB9CisrICBfX3B5eF90 XzMgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9f cHl4X3RfNCwgX19weXhfdl9fX3B5eF90eXBlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8yLCBfX3B5eF92X19fcHl4X3R5cGUpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMSwgNywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhfdl9fX3B5 eF9yZXN1bHQgPSBfX3B5eF90XzM7CisrICBfX3B5eF90XzMgPSAwOworKworKyAgLyogIih0cmVl IGZyYWdtZW50KSI6OAorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29t cGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQsIHJl cGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hlY2tzdW0pCisrICogICAgIF9fcHl4X3Jlc3VsdCA9 IEV2ZW50Ll9fbmV3X18oX19weXhfdHlwZSkKKysgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90 IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIF9fcHl4X3Vu cGlja2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRl KQorKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CisrICovCisrICBfX3B5eF90XzEgPSAoX19w eXhfdl9fX3B5eF9zdGF0ZSAhPSBQeV9Ob25lKTsKKysgIF9fcHl4X3RfNiA9IChfX3B5eF90XzEg IT0gMCk7CisrICBpZiAoX19weXhfdF82KSB7CisrCisrICAgIC8qICIodHJlZSBmcmFnbWVudCki OjkKKysgKiAgICAgX19weXhfcmVzdWx0ID0gRXZlbnQuX19uZXdfXyhfX3B5eF90eXBlKQorKyAq ICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIF9fcHl4X3VucGlj a2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQK KysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoRXZlbnQgX19weXhfcmVz dWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICovCisrICAgIGlmICghKGxpa2VseShQeVR1cGxl X0NoZWNrRXhhY3QoX19weXhfdl9fX3B5eF9zdGF0ZSkpfHwoKF9fcHl4X3ZfX19weXhfc3RhdGUp ID09IFB5X05vbmUpfHwoUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkV4cGVjdGVkICUu MTZzLCBnb3QgJS4yMDBzIiwgInR1cGxlIiwgUHlfVFlQRShfX3B5eF92X19fcHl4X3N0YXRlKS0+ dHBfbmFtZSksIDApKSkgX19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5 eF90XzMgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9FdmVu dF9fc2V0X3N0YXRlKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQgKilfX3B5eF92X19fcHl4X3Jlc3VsdCksICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3Rh dGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgOSwgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgICBfX1B5eF9ERUNSRUYo X19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6 OAorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVj a3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQsIHJlcGx5X3VzZXJkYXRh KSkiICUgX19weXhfY2hlY2tzdW0pCisrICogICAgIF9fcHl4X3Jlc3VsdCA9IEV2ZW50Ll9fbmV3 X18oX19weXhfdHlwZSkKKysgKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0V2ZW50 X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICBy ZXR1cm4gX19weXhfcmVzdWx0CisrICovCisrICB9CisrCisrICAvKiAiKHRyZWUgZnJhZ21lbnQp IjoxMAorKyAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIF9f cHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4 X3N0YXRlKQorKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoRXZlbnQg X19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIF9fcHl4X3Jlc3VsdC5k YXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzFd OyBfX3B5eF9yZXN1bHQuaWQgPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJlcGx5X3Vz ZXJkYXRhID0gX19weXhfc3RhdGVbM10KKysgKi8KKysgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CisrICBfX1B5eF9JTkNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQpOworKyAgX19weXhfciA9IF9f cHl4X3ZfX19weXhfcmVzdWx0OworICAgZ290byBfX3B5eF9MMDsKKysKKysgIC8qICIodHJlZSBm cmFnbWVudCkiOjEKKysgKiBkZWYgX19weXhfdW5waWNrbGVfRXZlbnQoX19weXhfdHlwZSwgbG9u ZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgIGNkZWYg b2JqZWN0IF9fcHl4X3Jlc3VsdAorKyAqLworKworKyAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICov CisgICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5s aWJzLm1wdi5DYWxsYmFja1RocmVhZC5zZXQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8s IF9fcHl4X2ZpbGVuYW1lKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4 X1hERUNSRUYoX19weXhfdF8zKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsKKysgIF9f UHl4X1hERUNSRUYoX19weXhfdF81KTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVy LmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX0V2ZW50IiwgX19weXhfY2xpbmVubywgX19weXhfbGlu ZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX3B5eF9yID0gTlVMTDsKKyAgIF9fcHl4X0wwOjsK KysgIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcik7CisrICBfX1B5eF9Y REVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3Ip OworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhfcjsK KyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTIKKy0gKiAgICAg ICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjaworLSAqIAorLSAqICAgICBkZWYgcnVuKHNlbGYp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB3aGlsZSBub3Qgc2Vs Zi5pc3NodXRkb3duOgorLSAqICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCisr LyogIih0cmVlIGZyYWdtZW50KSI6MTEKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0V2ZW50 X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorKyAqICAgICBy ZXR1cm4gX19weXhfcmVzdWx0CisrICogY2RlZiBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0 YXRlKEV2ZW50IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVb MF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQuaWQg PSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJlcGx5X3VzZXJkYXRhID0gX19weXhfc3Rh dGVbM10KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhf cmVzdWx0LCAnX19kaWN0X18nKToKKyAgKi8KKyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tU aHJlYWRfOXJ1bihQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3Zfc2VsZik7 IC8qcHJvdG8qLworLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzlydW4gPSB7InJ1biIsIChQeUNGdW5jdGlvbilfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF85cnVuLCBNRVRIX08s IDB9OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0 Q2FsbGJhY2tUaHJlYWRfOXJ1bihQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3Zfc2VsZikgeworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlE ZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJydW4gKHdyYXBwZXIp IiwgMCk7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2Fs bGJhY2tUaHJlYWRfOHJ1bihfX3B5eF9zZWxmLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7 CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNo Q29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7CistfQorLQorLXN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfOHJ1bihDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9zZWxmKSB7 Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91 bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X0V2ZW50ICpfX3B5eF92X19fcHl4X3Jlc3VsdCwgUHlPYmplY3QgKl9fcHl4X3ZfX19w eXhfc3RhdGUpIHsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCisgICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKyAgIGludCBf X3B5eF90XzI7CistICBpbnQgX19weXhfdF8zOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5V TEw7CistICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90 XzYgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CisrICBlbnVtIG1wdl9l dmVudF9pZCBfX3B5eF90XzM7CisrICBpbnQgX19weXhfdF80OworKyAgUHlfc3NpemVfdCBfX3B5 eF90XzU7CisrICBpbnQgX19weXhfdF82OworKyAgaW50IF9fcHl4X3RfNzsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzggPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfOSA9IE5VTEw7CisrICBQ eU9iamVjdCAqX19weXhfdF8xMCA9IE5VTEw7CisgICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAg IGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5v ID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJydW4iLCAwKTsKKy0KKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTUzCistICogCistICogICAgIGRlZiBy dW4oc2VsZik6CistICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3NodXRkb3duOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUo VHJ1ZSkKKy0gKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBp ZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9uZQorLSAqLworLSAgd2hpbGUgKDEpIHsKKy0gICAgX19w eXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25f c19pc3NodXRkb3duKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE1 MywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBf X3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgMTE1MywgX19weXhfTDFfZXJyb3IpCistICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICBfX3B5eF90XzMg PSAoKCFfX3B5eF90XzIpICE9IDApOworLSAgICBpZiAoIV9fcHl4X3RfMykgYnJlYWs7CisrICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0 ZSIsIDApOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1NAor LSAqICAgICBkZWYgcnVuKHNlbGYpOgorLSAqICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNzaHV0 ZG93bjoKKy0gKiAgICAgICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgc2VsZi5tcHZfY2FsbGJhY2soc2Vs Zi5jYWxsYmFjaykgaWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUKKy0gKiAKKysgIC8qICIodHJl ZSBmcmFnbWVudCkiOjEyCisrICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKysgKiBjZGVmIF9f cHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoRXZlbnQgX19weXhfcmVzdWx0LCB0dXBsZSBf X3B5eF9zdGF0ZSk6CisrICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07 IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQuaWQgPSBf X3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJlcGx5X3VzZXJkYXRhID0gX19weXhfc3RhdGVb M10gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBpZiBsZW4oX19weXhfc3Rh dGUpID4gNCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgorKyAqICAgICAg ICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkKKyAgKi8KKy0g ICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9f cHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTE1 NCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgICBf X3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNCwgX19weXhfbl9z X2FjcXVpcmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAxMTU0LCBf X3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CistICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBfX3B5eF90XzQgPSBOVUxM OworLSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVj ayhfX3B5eF90XzUpKSkgeworLSAgICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9f cHl4X3RfNSk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7CistICAgICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF81KTsKKy0gICAg ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworKyAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19w eXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKysgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVF cnJvciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CisrICAgIF9f UFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisrICB9CisrICBfX3B5eF90XzEgPSBfX1B5 eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4 X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworKyAgX19QeXhfR09UUkVGKF9fcHl4X3Zf X19weXhfcmVzdWx0LT5kYXRhKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3Vs dC0+ZGF0YSk7CisrICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+ZGF0YSA9IF9fcHl4X3RfMTsKKysg IF9fcHl4X3RfMSA9IDA7CisrICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQ eV9Ob25lKSkgeworKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVU eXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsKKysgICAgX19QWVhfRVJSKDEsIDEy LCBfX3B5eF9MMV9lcnJvcikKKysgIH0KKysgIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRf VHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMSwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9s b25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF90 XzIgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90 XzIgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigxLCAxMiwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK KysgIF9fcHl4X3ZfX19weXhfcmVzdWx0LT5lcnJvciA9IF9fcHl4X3RfMjsKKysgIGlmICh1bmxp a2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7CisrICAgIFB5RXJyX1NldFN0 cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0 YWJsZSIpOworKyAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgfQorKyAg X19weXhfdF8xID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAy LCBsb25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKysgIF9fcHl4X3RfMyA9ICgoZW51bSBtcHZfZXZlbnRfaWQpX19Q eXhfUHlJbnRfQXNfZW51bV9fbXB2X2V2ZW50X2lkKF9fcHl4X3RfMSkpOyBpZiAodW5saWtlbHko UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9fcHl4X3ZfX19weXhf cmVzdWx0LT5pZCA9IF9fcHl4X3RfMzsKKysgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0 YXRlID09IFB5X05vbmUpKSB7CisrICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3Is ICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOworKyAgICBfX1BZWF9F UlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgfQorKyAgX19weXhfdF8xID0gX19QeXhfR2V0 SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAzLCBsb25nLCAxLCBfX1B5eF9QeUlu dF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysg IF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKysgIF9fUHl4X0dPVFJFRihfX3B5eF92X19fcHl4 X3Jlc3VsdC0+cmVwbHlfdXNlcmRhdGEpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhf cmVzdWx0LT5yZXBseV91c2VyZGF0YSk7CisrICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+cmVwbHlf dXNlcmRhdGEgPSBfX3B5eF90XzE7CisrICBfX3B5eF90XzEgPSAwOworKworKyAgLyogIih0cmVl IGZyYWdtZW50KSI6MTMKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUo RXZlbnQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIF9fcHl4X3Jl c3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0 YXRlWzFdOyBfX3B5eF9yZXN1bHQuaWQgPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJl cGx5X3VzZXJkYXRhID0gX19weXhfc3RhdGVbM10KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRl KSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0 ZShfX3B5eF9zdGF0ZVs0XSkKKysgKi8KKysgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0 YXRlID09IFB5X05vbmUpKSB7CisrICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3Is ICJvYmplY3Qgb2YgdHlwZSAnTm9uZVR5cGUnIGhhcyBubyBsZW4oKSIpOworKyAgICBfX1BZWF9F UlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgfQorKyAgX19weXhfdF81ID0gUHlUdXBsZV9H RVRfU0laRShfX3B5eF92X19fcHl4X3N0YXRlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNSA9PSAo KFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfNiA9ICgoX19weXhfdF81ID4gNCkgIT0gMCk7CisrICBpZiAoX19weXhfdF82KSB7Cisr ICB9IGVsc2UgeworKyAgICBfX3B5eF90XzQgPSBfX3B5eF90XzY7CisrICAgIGdvdG8gX19weXhf TDRfYm9vbF9iaW5vcF9kb25lOworKyAgfQorKyAgX19weXhfdF82ID0gX19QeXhfSGFzQXR0cigo KFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlmICh1 bmxpa2VseShfX3B5eF90XzYgPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfNyA9IChfX3B5eF90XzYgIT0gMCk7CisrICBfX3B5eF90XzQg PSBfX3B5eF90Xzc7CisrICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OworKyAgaWYgKF9fcHl4 X3RfNCkgeworKworKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNAorKyAqICAgICBfX3B5eF9y ZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9z dGF0ZVsxXTsgX19weXhfcmVzdWx0LmlkID0gX19weXhfc3RhdGVbMl07IF9fcHl4X3Jlc3VsdC5y ZXBseV91c2VyZGF0YSA9IF9fcHl4X3N0YXRlWzNdCisrICogICAgIGlmIGxlbihfX3B5eF9zdGF0 ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CisrICogICAgICAg ICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzRdKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICovCisrICAgIF9fcHl4X3RfOCA9IF9fUHl4X1B5T2JqZWN0 X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfcmVzdWx0KSwgX19weXhfbl9z X2RpY3QpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOCkpIF9fUFlYX0VSUigxLCAxNCwgX19weXhf TDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzgpOworKyAgICBfX3B5eF90Xzkg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfOCwgX19weXhfbl9zX3VwZGF0ZSk7 IGlmICh1bmxpa2VseSghX19weXhfdF85KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJv cikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfOSk7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzgpOyBfX3B5eF90XzggPSAwOworKyAgICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9z dGF0ZSA9PSBQeV9Ob25lKSkgeworKyAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJy b3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOworKyAgICAgIF9f UFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCisrICAgIH0KKysgICAgX19weXhfdF84ID0g X19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCA0LCBsb25nLCAxLCBf X1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOCkp IF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzgpOworKyAgICBfX3B5eF90XzEwID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF85KSkpIHsKKysgICAgICBf X3B5eF90XzEwID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF85KTsKKysgICAgICBpZiAobGlr ZWx5KF9fcHl4X3RfMTApKSB7CisrICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhv ZF9HRVRfRlVOQ1RJT04oX19weXhfdF85KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzEwKTsKKyAgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBfX1B5eF9E RUNSRUZfU0VUKF9fcHl4X3RfNSwgZnVuY3Rpb24pOworKyAgICAgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF90XzksIGZ1bmN0aW9uKTsKKyAgICAgICB9CisgICAgIH0KKy0gICAgX19weXhfdF8x ID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF81LCBfX3B5 eF90XzQsIFB5X1RydWUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzUsIFB5 X1RydWUpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7Cist ICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNTQsIF9fcHl4X0wx X2Vycm9yKQorKyAgICBfX3B5eF90XzEgPSAoX19weXhfdF8xMCkgPyBfX1B5eF9QeU9iamVjdF9D YWxsMkFyZ3MoX19weXhfdF85LCBfX3B5eF90XzEwLCBfX3B5eF90XzgpIDogX19QeXhfUHlPYmpl Y3RfQ2FsbE9uZUFyZyhfX3B5eF90XzksIF9fcHl4X3RfOCk7CisrICAgIF9fUHl4X1hERUNSRUYo X19weXhfdF8xMCk7IF9fcHl4X3RfMTAgPSAwOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF84 KTsgX19weXhfdF84ID0gMDsKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisrICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAwOworICAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExNTUKKy0gKiAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmlzc2h1dGRvd246Cist ICogICAgICAgICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkKKy0gKiAgICAgICAgICAgICBz ZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBpZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9u ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGRlZiBtcHZfY2Fs bGJhY2soc2VsZiwgY2FsbGJhY2spOgorKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMworKyAq IGNkZWYgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShFdmVudCBfX3B5eF9yZXN1bHQs IHR1cGxlIF9fcHl4X3N0YXRlKToKKysgKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9z dGF0ZVswXTsgX19weXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jlc3Vs dC5pZCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQucmVwbHlfdXNlcmRhdGEgPSBfX3B5 eF9zdGF0ZVszXQorKyAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0cihf X3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzRdKQor ICAqLworLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zf c2VsZiwgX19weXhfbl9zX2NhbGxiYWNrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZ WF9FUlIoMCwgMTE1NSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzUpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF81KTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwgMTE1NSwgX19weXhfTDFf ZXJyb3IpCistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworLSAg ICBpZiAoX19weXhfdF8zKSB7CistICAgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19tcHZfY2FsbGJhY2spOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNrKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE1NSwgX19weXhfTDFfZXJyb3IpCist ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICAgICAgX19weXhfdF83ID0gTlVMTDsK Ky0gICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVj ayhfX3B5eF90XzQpKSkgeworLSAgICAgICAgX19weXhfdF83ID0gUHlNZXRob2RfR0VUX1NFTEYo X19weXhfdF80KTsKKy0gICAgICAgIGlmIChsaWtlbHkoX19weXhfdF83KSkgeworLSAgICAgICAg ICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF80KTsK Ky0gICAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNyk7CistICAgICAgICAgIF9fUHl4X0lO Q1JFRihmdW5jdGlvbik7CistICAgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF80LCBm dW5jdGlvbik7CistICAgICAgICB9CistICAgICAgfQorLSAgICAgIF9fcHl4X3RfNSA9IChfX3B5 eF90XzcpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNCwgX19weXhfdF83LCBf X3B5eF90XzYpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3Rf Nik7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAg ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICAgIGlmICh1 bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDExNTUsIF9fcHl4X0wxX2Vycm9yKQor LSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICAgIF9fcHl4X3RfMSA9IF9fcHl4X3RfNTsKKy0g ICAgICBfX3B5eF90XzUgPSAwOworLSAgICB9IGVsc2UgeworLSAgICAgIF9fUHl4X0lOQ1JFRihQ eV9Ob25lKTsKKy0gICAgICBfX3B5eF90XzEgPSBQeV9Ob25lOworLSAgICB9CistICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworICAgfQorIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTIKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJhY2sg PSBjYWxsYmFjaworLSAqIAorLSAqICAgICBkZWYgcnVuKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3NodXRkb3duOgorLSAq ICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCisrICAvKiAiKHRyZWUgZnJhZ21l bnQpIjoxMQorKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZSg8RXZl bnQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICogICAgIHJldHVybiBfX3B5eF9yZXN1 bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoRXZlbnQgX19weXhf cmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0 LmVycm9yID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jlc3VsdC5pZCA9IF9fcHl4X3N0YXRlWzJd OyBfX3B5eF9yZXN1bHQucmVwbHlfdXNlcmRhdGEgPSBfX3B5eF9zdGF0ZVszXQorKyAqICAgICBp ZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3Rf XycpOgorICAqLworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCitAQCAtMjI0NDUsNDUg KzIyMjIzLDQ1IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzE0Q2FsbGJhY2tUaHJlYWRfOHJ1bihDWVRIT05fVU5VCisgICBnb3RvIF9fcHl4X0wwOwor ICAgX19weXhfTDFfZXJyb3I6OworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzQpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzYpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOwor LSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQu cnVuIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBf X3B5eF9yID0gTlVMTDsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsKKysgIF9fUHl4X1hE RUNSRUYoX19weXhfdF85KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xMCk7CisrICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9FdmVudF9f c2V0X3N0YXRlIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7 CisrICBfX3B5eF9yID0gMDsKKyAgIF9fcHl4X0wwOjsKKyAgIF9fUHl4X1hHSVZFUkVGKF9fcHl4 X3IpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICByZXR1cm4gX19weXhf cjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTcKKy0gKiAg ICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBpZiBzZWxmLmNhbGxi YWNrIGVsc2UgTm9uZQorLSAqIAorLSAqICAgICBkZWYgbXB2X2NhbGxiYWNrKHNlbGYsIGNhbGxi YWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgdHJ5OgorLSAq ICAgICAgICAgICAgIGNhbGxiYWNrKCkKKysvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisrICogZGVm IF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyhfX3B5eF90eXBlLCBsb25nIF9fcHl4X2No ZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19w eXhfcmVzdWx0CisgICovCisgCisgLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzExbXB2 X2NhbGxiYWNrKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlP YmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlNZXRob2REZWYgX19weXhf bWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xMW1wdl9jYWxsYmFj ayA9IHsibXB2X2NhbGxiYWNrIiwgKFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRo S2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRf MTFtcHZfY2FsbGJhY2ssIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfTsKKy1zdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFk XzExbXB2X2NhbGxiYWNrKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJn cywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKy0gIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9f cHl4X3Zfc2VsZiA9IDA7CistICBQeU9iamVjdCAqX19weXhfdl9jYWxsYmFjayA9IDA7Cisrc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVfX3B5eF91bnBp Y2tsZV9SZW5kZXJGcmFtZUluZm8oUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5 eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcyk7IC8qcHJvdG8qLworK3N0YXRpYyBQeU1ldGhv ZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNV9fcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mbyA9IHsiX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvIiwgKFB5Q0Z1 bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzE1X19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCBNRVRIX1ZBUkFS R1N8TUVUSF9LRVlXT1JEUywgMH07Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTVfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8oUHlPYmplY3Qg Kl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dkcykg eworKyAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSA9IDA7CisrICBsb25nIF9fcHl4X3Zf X19weXhfY2hlY2tzdW07CisrICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSA9IDA7Cisg ICBpbnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIFB5T2JqZWN0ICpfX3B5eF9yID0g MDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgibXB2X2NhbGxiYWNrICh3cmFwcGVyKSIsIDApOworKyAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyAod3JhcHBlcikiLCAw KTsKKyAgIHsKKy0gICAgc3RhdGljIFB5T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZf X3B5eF9uX3Nfc2VsZiwmX19weXhfbl9zX2NhbGxiYWNrLDB9OworLSAgICBQeU9iamVjdCogdmFs dWVzWzJdID0gezAsMH07CisrICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNb XSA9IHsmX19weXhfbl9zX3B5eF90eXBlLCZfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCZfX3B5eF9u X3NfcHl4X3N0YXRlLDB9OworKyAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCwwfTsKKyAg ICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7CisgICAgICAgUHlfc3NpemVfdCBrd19hcmdz OworICAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9f cHl4X2FyZ3MpOworICAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKysgICAgICAgIGNhc2UgIDM6 IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CisrICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7CisgICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxl X0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwor ICAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdz LCAwKTsKK0BAIC0yMjQ5NCw2MDY4ICsyMjI3MiwyMzcwIEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTFtcHZfY2FsbGJh Y2soCisgICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworICAgICAgIHN3 aXRjaCAocG9zX2FyZ3MpIHsKKyAgICAgICAgIGNhc2UgIDA6CistICAgICAgICBpZiAobGlrZWx5 KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9u X3Nfc2VsZikpICE9IDApKSBrd19hcmdzLS07CisrICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNb MF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X3R5 cGUpKSAhPSAwKSkga3dfYXJncy0tOworICAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1X2FyZ3R1 cGxlX2Vycm9yOworICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworICAgICAgICAgY2FzZSAg MToKKy0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVt U3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19jYWxsYmFjaykpICE9IDApKSBrd19hcmdzLS07Cisr ICAgICAgICBpZiAobGlrZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihf X3B5eF9rd2RzLCBfX3B5eF9uX3NfcHl4X2NoZWNrc3VtKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKyAg ICAgICAgIGVsc2UgeworLSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgibXB2 X2NhbGxiYWNrIiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MM19lcnJv cikKKysgICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3VucGlja2xl X1JlbmRlckZyYW1lSW5mbyIsIDEsIDMsIDMsIDEpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNf ZXJyb3IpCisrICAgICAgICB9CisrICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAg ICBjYXNlICAyOgorKyAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzJdID0gX19QeXhfUHlEaWN0 X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF9zdGF0ZSkpICE9IDApKSBrd19h cmdzLS07CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUlu dmFsaWQoIl9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIDEsIDMsIDMsIDIpOyBfX1BZ WF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCisgICAgICAgICB9CisgICAgICAgfQorICAgICAg IGlmICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5 eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwg dmFsdWVzLCBwb3NfYXJncywgIm1wdl9jYWxsYmFjayIpIDwgMCkpIF9fUFlYX0VSUigwLCAxMTU3 LCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlv bmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3Nf YXJncywgIl9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIpIDwgMCkpIF9fUFlYX0VSUigx LCAxLCBfX3B5eF9MM19lcnJvcikKKyAgICAgICB9CistICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9H RVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7CisrICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRf U0laRShfX3B5eF9hcmdzKSAhPSAzKSB7CisgICAgICAgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9l cnJvcjsKKyAgICAgfSBlbHNlIHsKKyAgICAgICB2YWx1ZXNbMF0gPSBQeVR1cGxlX0dFVF9JVEVN KF9fcHl4X2FyZ3MsIDApOworICAgICAgIHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfYXJncywgMSk7CisrICAgICAgdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9h cmdzLCAyKTsKKyAgICAgfQorLSAgICBfX3B5eF92X3NlbGYgPSB2YWx1ZXNbMF07CistICAgIF9f cHl4X3ZfY2FsbGJhY2sgPSB2YWx1ZXNbMV07CisrICAgIF9fcHl4X3ZfX19weXhfdHlwZSA9IHZh bHVlc1swXTsKKysgICAgX19weXhfdl9fX3B5eF9jaGVja3N1bSA9IF9fUHl4X1B5SW50X0FzX2xv bmcodmFsdWVzWzFdKTsgaWYgKHVubGlrZWx5KChfX3B5eF92X19fcHl4X2NoZWNrc3VtID09IChs b25nKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vy cm9yKQorKyAgICBfX3B5eF92X19fcHl4X3N0YXRlID0gdmFsdWVzWzJdOworICAgfQorICAgZ290 byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKyAgIF9fcHl4X0w1X2FyZ3R1cGxl X2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJtcHZfY2FsbGJhY2siLCAx LCAyLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDExNTcs IF9fcHl4X0wzX2Vycm9yKQorKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3Vu cGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIDEsIDMsIDMsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhf YXJncykpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCisgICBfX3B5eF9MM19lcnJv cjo7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1Ro cmVhZC5tcHZfY2FsbGJhY2siLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2Zp bGVuYW1lKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4 X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywg X19weXhfZmlsZW5hbWUpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisgICBy ZXR1cm4gTlVMTDsKKyAgIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9f cHl4X3IgPSBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8x MG1wdl9jYWxsYmFjayhfX3B5eF9zZWxmLCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfY2FsbGJhY2sp OworKyAgX19weXhfciA9IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9fcHl4X3Vu cGlja2xlX1JlbmRlckZyYW1lSW5mbyhfX3B5eF9zZWxmLCBfX3B5eF92X19fcHl4X3R5cGUsIF9f cHl4X3ZfX19weXhfY2hlY2tzdW0sIF9fcHl4X3ZfX19weXhfc3RhdGUpOworIAorICAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKyAg IHJldHVybiBfX3B5eF9yOworIH0KKyAKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNrKENZVEhPTl9V TlVTRUQgUHlPYmplY3QgKl9fcHl4X3NlbGYsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKl9fcHl4 X3Zfc2VsZiwgUHlPYmplY3QgKl9fcHl4X3ZfY2FsbGJhY2spIHsKKy0gIFB5T2JqZWN0ICpfX3B5 eF92X2UgPSBOVUxMOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzE0X19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvKENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUsIGxvbmcgX19w eXhfdl9fX3B5eF9jaGVja3N1bSwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKysg IFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yID0gMDsKKysgIFB5T2JqZWN0ICpf X3B5eF92X19fcHl4X3Jlc3VsdCA9IDA7CisgICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Cisg ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5V TEw7CisrICBpbnQgX19weXhfdF8xOworICAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Cisg ICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKyAgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBO VUxMOworICAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhf dF82ID0gTlVMTDsKKy0gIGludCBfX3B5eF90Xzc7CistICBQeU9iamVjdCAqX19weXhfdF84ID0g TlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzkgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4 X3RfMTAgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMTEgPSBOVUxMOworKyAgaW50IF9f cHl4X3RfNjsKKyAgIGludCBfX3B5eF9saW5lbm8gPSAwOworICAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIm1wdl9jYWxsYmFjayIsIDApOworKyAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIDApOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTgKKy0gKiAKKy0gKiAgICAgZGVm IG1wdl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6CistICogICAgICAgICB0cnk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBjYWxsYmFjaygpCistICogICAg ICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Cisr ICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgIGNkZWYgb2JqZWN0 IF9fcHl4X3Jlc3VsdAorKyAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweGQ0MWQ4Y2Q6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9y dCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgorKyAqICAgICAgICAgcmFpc2UgX19w eXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZDQxZDhjZCA9 ICgpKSIgJSBfX3B5eF9jaGVja3N1bSkKKyAgKi8KKy0gIHsKKy0gICAgX19QeXhfUHlUaHJlYWRT dGF0ZV9kZWNsYXJlCistICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfYXNzaWduCistICAgIF9fUHl4 X0V4Y2VwdGlvblNhdmUoJl9fcHl4X3RfMSwgJl9fcHl4X3RfMiwgJl9fcHl4X3RfMyk7CistICAg IF9fUHl4X1hHT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19QeXhfWEdPVFJFRihfX3B5eF90XzIp OworLSAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7CistICAgIC8qdHJ5OiovIHsKKysgIF9f cHl4X3RfMSA9ICgoX19weXhfdl9fX3B5eF9jaGVja3N1bSAhPSAweGQ0MWQ4Y2QpICE9IDApOwor KyAgaWYgKF9fcHl4X3RfMSkgeworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTU5CistICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgor LSAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgIGNhbGxiYWNrKCkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorLSAq ICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInB5bXB2IGVycm9yIGR1cmluZyBjYWxsYmFj azogJXNcbiIgJSBlKQorKyAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1CisrICogICAgIGNkZWYg b2JqZWN0IF9fcHl4X3Jlc3VsdAorKyAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweGQ0MWQ4 Y2Q6CisrICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhf UGlja2xlRXJyb3IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgcmFp c2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZDQx ZDhjZCA9ICgpKSIgJSBfX3B5eF9jaGVja3N1bSkKKysgKiAgICAgX19weXhfcmVzdWx0ID0gUmVu ZGVyRnJhbWVJbmZvLl9fbmV3X18oX19weXhfdHlwZSkKKyAgKi8KKy0gICAgICBfX1B5eF9JTkNS RUYoX19weXhfdl9jYWxsYmFjayk7CistICAgICAgX19weXhfdF81ID0gX19weXhfdl9jYWxsYmFj azsgX19weXhfdF82ID0gTlVMTDsKKy0gICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNSkpKSB7CistICAgICAgICBfX3B5eF90 XzYgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzUpOworLSAgICAgICAgaWYgKGxpa2VseShf X3B5eF90XzYpKSB7CistICAgICAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dF VF9GVU5DVElPTihfX3B5eF90XzUpOworLSAgICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF82 KTsKKy0gICAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgICAgX19QeXhf REVDUkVGX1NFVChfX3B5eF90XzUsIGZ1bmN0aW9uKTsKKy0gICAgICAgIH0KKy0gICAgICB9Cist ICAgICAgX19weXhfdF80ID0gKF9fcHl4X3RfNikgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfNSwgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90 XzUpOworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0g ICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMTU5LCBfX3B5eF9M M19lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgICAgX19weXhfdF8yID0gUHlMaXN0X05ldygxKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3Ip CisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgICBfX1B5eF9JTkNSRUYoX19weXhf bl9zX1BpY2tsZUVycm9yKTsKKysgICAgX19QeXhfR0lWRVJFRihfX3B5eF9uX3NfUGlja2xlRXJy b3IpOworKyAgICBQeUxpc3RfU0VUX0lURU0oX19weXhfdF8yLCAwLCBfX3B5eF9uX3NfUGlja2xl RXJyb3IpOworKyAgICBfX3B5eF90XzMgPSBfX1B5eF9JbXBvcnQoX19weXhfbl9zX3BpY2tsZSwg X19weXhfdF8yLCAtMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDUs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKysgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fcHl4X3RfMiA9IF9f UHl4X0ltcG9ydEZyb20oX19weXhfdF8zLCBfX3B5eF9uX3NfUGlja2xlRXJyb3IpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOwor KyAgICBfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yID0gX19weXhfdF8yOworKyAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExNTgKKy0gKiAKKy0gKiAgICAgZGVmIG1wdl9jYWxsYmFjayhzZWxmLCBjYWxs YmFjayk6CistICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICAgICBjYWxsYmFjaygpCistICogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFz IGU6CisrICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjYKKysgKiAgICAgaWYgX19weXhfY2hlY2tz dW0gIT0gMHhkNDFkOGNkOgorKyAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVy cm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCisrICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVF cnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhkNDFkOGNkID0gKCkpIiAlIF9f cHl4X2NoZWNrc3VtKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIF9fcHl4 X3Jlc3VsdCA9IFJlbmRlckZyYW1lSW5mby5fX25ld19fKF9fcHl4X3R5cGUpCisrICogICAgIGlm IF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorICAqLworKyAgICBfX3B5eF90XzIgPSBfX1B5eF9Q eUludF9Gcm9tX2xvbmcoX19weXhfdl9fX3B5eF9jaGVja3N1bSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9f cHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4ZDQsIF9fcHl4X3RfMik7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Mik7IF9fcHl4X3RfMiA9IDA7CisrICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X1BpY2ts ZUVycm9yKTsKKysgICAgX19weXhfdF8yID0gX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcjsgX19w eXhfdF81ID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2Vs eShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworKyAgICAgIF9fcHl4X3RfNSA9IFB5TWV0 aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CisrICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7 CisrICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19w eXhfdF8yKTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworKyAgICAgICAgX19Q eXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8y LCBmdW5jdGlvbik7CisrICAgICAgfQorICAgICB9CistICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOyBfX3B5 eF90XzIgPSAwOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7 CistICAgIGdvdG8gX19weXhfTDhfdHJ5X2VuZDsKKy0gICAgX19weXhfTDNfZXJyb3I6OworLSAg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICAgIF9fcHl4X3Rf MyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19w eXhfdF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIs IF9fcHl4X3RfNCk7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0g MDsKKy0gICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICBf X1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgICAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzMpOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhf dF8yID0gMDsKKysgICAgX19QeXhfUmFpc2UoX19weXhfdF8zLCAwLCAwLCAwKTsKKysgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisrICAgIF9fUFlYX0VSUigxLCA2 LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExNjAKKy0gKiAgICAgICAgIHRyeToKKy0gKiAgICAgICAgICAgICBjYWxsYmFjaygpCist ICogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJweW1wdiBlcnJvciBkdXJp bmcgY2FsbGJhY2s6ICVzXG4iICUgZSkKKy0gKiAKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6 NAorKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgorKyAqICAgICBjZGVmIG9i amVjdCBfX3B5eF9yZXN1bHQKKysgKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHhkNDFkOGNk OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBmcm9tIHBpY2tsZSBp bXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgICAgIHJhaXNl IF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGQ0MWQ4 Y2QgPSAoKSkiICUgX19weXhfY2hlY2tzdW0pCisgICovCistICAgIF9fcHl4X3RfNyA9IF9fUHl4 X1B5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoKChQeU9iamVjdCAqKSgmKChQeVR5cGVPYmplY3QqKVB5 RXhjX0V4Y2VwdGlvbilbMF0pKSk7CistICAgIGlmIChfX3B5eF90XzcpIHsKKy0gICAgICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1RocmVhZC5tcHZfY2Fs bGJhY2siLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0g ICAgICBpZiAoX19QeXhfR2V0RXhjZXB0aW9uKCZfX3B5eF90XzQsICZfX3B5eF90XzUsICZfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNjAsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKy0g ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF81KTsKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF81KTsKKy0gICAgICBfX3B5eF92X2UgPSBfX3B5eF90XzU7CisrICB9CisgCist ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNjEKKy0gKiAgICAgICAg ICAgICBjYWxsYmFjaygpCistICogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CistICog ICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgicHltcHYgZXJyb3IgZHVyaW5nIGNhbGxiYWNr OiAlc1xuIiAlIGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0gKiBjZGVm IHZvaWQgX2NfY2FsbGJhY2sodm9pZCogZCkgd2l0aCBnaWw6CisrICAvKiAiKHRyZWUgZnJhZ21l bnQpIjo3CisrICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19w eXhfUGlja2xlRXJyb3IKKysgKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNv bXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGQ0MWQ4Y2QgPSAoKSkiICUgX19weXhfY2hlY2tz dW0pCisrICogICAgIF9fcHl4X3Jlc3VsdCA9IFJlbmRlckZyYW1lSW5mby5fX25ld19fKF9fcHl4 X3R5cGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgaWYgX19weXhfc3Rh dGUgaXMgbm90IE5vbmU6CisrICogICAgICAgICBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUlu Zm9fX3NldF9zdGF0ZSg8UmVuZGVyRnJhbWVJbmZvPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRl KQorICAqLworLSAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF85LCBfX3B5 eF9uX3Nfc3lzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzkpKSBfX1BZWF9FUlIoMCwgMTE2MSwg X19weXhfTDVfZXhjZXB0X2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzkpOwor LSAgICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfOSwg X19weXhfbl9zX3N0ZGVycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xMCkpIF9fUFlYX0VSUigw LCAxMTYxLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCistICAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMTApOworLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAwOwor LSAgICAgIF9fcHl4X3RfOSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF8xMCwg X19weXhfbl9zX3dyaXRlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzkpKSBfX1BZWF9FUlIoMCwg MTE2MSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorLSAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzkpOworLSAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEwKTsgX19weXhfdF8xMCA9IDA7Cist ICAgICAgX19weXhfdF8xMCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdFNhZmUoX19weXhfa3Bfc19w eW1wdl9lcnJvcl9kdXJpbmdfY2FsbGJhY2tfcywgX19weXhfdl9lKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEwKSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKy0g ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xMCk7CistICAgICAgX19weXhfdF8xMSA9IE5VTEw7 CistICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF85KSkpIHsKKy0gICAgICAgIF9fcHl4X3RfMTEgPSBQeU1ldGhvZF9HRVRfU0VM RihfX3B5eF90XzkpOworLSAgICAgICAgaWYgKGxpa2VseShfX3B5eF90XzExKSkgeworLSAgICAg ICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF85 KTsKKy0gICAgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMTEpOworLSAgICAgICAgICBfX1B5 eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Rf OSwgZnVuY3Rpb24pOworLSAgICAgICAgfQorLSAgICAgIH0KKy0gICAgICBfX3B5eF90XzggPSAo X19weXhfdF8xMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF85LCBfX3B5eF90 XzExLCBfX3B5eF90XzEwKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF85LCBf X3B5eF90XzEwKTsKKy0gICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzEx ID0gMDsKKy0gICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xMCk7IF9fcHl4X3RfMTAgPSAwOwor LSAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF84KSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4 X0w1X2V4Y2VwdF9lcnJvcikKKy0gICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF84KTsKKy0gICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85ID0gMDsKKy0gICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF84KTsgX19weXhfdF84ID0gMDsKKy0gICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUp OyBfX3B5eF90XzUgPSAwOworLSAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKKy0gICAgICBnb3RvIF9fcHl4X0w0X2V4Y2VwdGlvbl9oYW5kbGVkOworKyAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyksIF9fcHl4X25fc19uZXcp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgX19weXhfdF80ID0gTlVMTDsKKysg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfMikpKSB7CisrICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7 CisrICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworKyAgICAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzQpOworKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKyAgICAgfQorLSAgICBnb3RvIF9f cHl4X0w1X2V4Y2VwdF9lcnJvcjsKKy0gICAgX19weXhfTDVfZXhjZXB0X2Vycm9yOjsKKysgIH0K KysgIF9fcHl4X3RfMyA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF92X19fcHl4X3R5cGUpIDogX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfX19weXhfdHlwZSk7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MykpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisrICBf X3B5eF92X19fcHl4X3Jlc3VsdCA9IF9fcHl4X3RfMzsKKysgIF9fcHl4X3RfMyA9IDA7CisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU4CistICogCistICogICAg IGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgorLSAqICAgICAgICAgdHJ5OiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgY2FsbGJhY2soKQorLSAq ICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6 OAorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVj a3N1bXMgKCVzIHZzIDB4ZDQxZDhjZCA9ICgpKSIgJSBfX3B5eF9jaGVja3N1bSkKKysgKiAgICAg X19weXhfcmVzdWx0ID0gUmVuZGVyRnJhbWVJbmZvLl9fbmV3X18oX19weXhfdHlwZSkKKysgKiAg ICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRl KDxSZW5kZXJGcmFtZUluZm8+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICogICAgIHJl dHVybiBfX3B5eF9yZXN1bHQKKysgKi8KKysgIF9fcHl4X3RfMSA9IChfX3B5eF92X19fcHl4X3N0 YXRlICE9IFB5X05vbmUpOworKyAgX19weXhfdF82ID0gKF9fcHl4X3RfMSAhPSAwKTsKKysgIGlm IChfX3B5eF90XzYpIHsKKysKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6OQorKyAqICAgICBf X3B5eF9yZXN1bHQgPSBSZW5kZXJGcmFtZUluZm8uX19uZXdfXyhfX3B5eF90eXBlKQorKyAqICAg ICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xl X1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKDxSZW5kZXJGcmFtZUluZm8+IF9fcHl4X3Jlc3Vs dCwgX19weXhfc3RhdGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgcmV0 dXJuIF9fcHl4X3Jlc3VsdAorKyAqIGNkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZv X19zZXRfc3RhdGUoUmVuZGVyRnJhbWVJbmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3Rh dGUpOgorKyAqLworKyAgICBpZiAoIShsaWtlbHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4X3Zf X19weXhfc3RhdGUpKXx8KChfX3B5eF92X19fcHl4X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5RXJy X0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJFeHBlY3RlZCAlLjE2cywgZ290ICUuMjAwcyIsICJ0 dXBsZSIsIFB5X1RZUEUoX19weXhfdl9fX3B5eF9zdGF0ZSktPnRwX25hbWUpLCAwKSkpIF9fUFlY X0VSUigxLCA5LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8zID0gX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3Rh dGUoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUlu Zm8gKilfX3B5eF92X19fcHl4X3Jlc3VsdCksICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3Rh dGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgOSwgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworKyAgICBfX1B5eF9ERUNSRUYo X19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKysKKysgICAgLyogIih0cmVlIGZyYWdtZW50KSI6 OAorKyAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVj a3N1bXMgKCVzIHZzIDB4ZDQxZDhjZCA9ICgpKSIgJSBfX3B5eF9jaGVja3N1bSkKKysgKiAgICAg X19weXhfcmVzdWx0ID0gUmVuZGVyRnJhbWVJbmZvLl9fbmV3X18oX19weXhfdHlwZSkKKysgKiAg ICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRl KDxSZW5kZXJGcmFtZUluZm8+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICogICAgIHJl dHVybiBfX3B5eF9yZXN1bHQKKyAgKi8KKy0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xKTsK Ky0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfWEdJVkVSRUYoX19w eXhfdF8zKTsKKy0gICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xLCBfX3B5eF90XzIs IF9fcHl4X3RfMyk7CistICAgIGdvdG8gX19weXhfTDFfZXJyb3I7CistICAgIF9fcHl4X0w0X2V4 Y2VwdGlvbl9oYW5kbGVkOjsKKy0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8xKTsKKy0gICAg X19QeXhfWEdJVkVSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfWEdJVkVSRUYoX19weXhfdF8z KTsKKy0gICAgX19QeXhfRXhjZXB0aW9uUmVzZXQoX19weXhfdF8xLCBfX3B5eF90XzIsIF9fcHl4 X3RfMyk7CistICAgIF9fcHl4X0w4X3RyeV9lbmQ6OworICAgfQorIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNTcKKy0gKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxs YmFjayhzZWxmLmNhbGxiYWNrKSBpZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9uZQorLSAqIAorLSAq ICAgICBkZWYgbXB2X2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICAgICAgdHJ5OgorLSAqICAgICAgICAgICAgIGNhbGxiYWNrKCkK KysgIC8qICIodHJlZSBmcmFnbWVudCkiOjEwCisrICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5v dCBOb25lOgorKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRf c3RhdGUoPFJlbmRlckZyYW1lSW5mbz4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKysgKiAg ICAgcmV0dXJuIF9fcHl4X3Jlc3VsdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog Y2RlZiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZShSZW5kZXJGcmFt ZUluZm8gX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIGlmIGxlbihf X3B5eF9zdGF0ZSkgPiAwIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6Cisr ICovCisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf X19weXhfcmVzdWx0KTsKKysgIF9fcHl4X3IgPSBfX3B5eF92X19fcHl4X3Jlc3VsdDsKKysgIGdv dG8gX19weXhfTDA7CisrCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisrICogZGVmIF9fcHl4 X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyhfX3B5eF90eXBlLCBsb25nIF9fcHl4X2NoZWNrc3Vt LCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgY2Rl ZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVz dWx0CisgICovCisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQ eV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworICAgX19w eXhfTDFfZXJyb3I6OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworKyAgX19QeXhfWERF Q1JFRihfX3B5eF90XzMpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzUpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOworLSAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzgpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzkpOworLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzEwKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xMSk7 CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5DYWxsYmFja1RocmVh ZC5tcHZfY2FsbGJhY2siLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKKysgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3Vu cGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19w eXhfZmlsZW5hbWUpOworICAgX19weXhfciA9IE5VTEw7CisgICBfX3B5eF9MMDo7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3ZfZSk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfUGlj a2xlRXJyb3IpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdCk7CisgICBf X1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgp OworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTYzCistICogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgicHltcHYgZXJy b3IgZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAlIGUpCistICogCistICogY2RlZiB2b2lkIF9jX2Nh bGxiYWNrKHZvaWQqIGQpIHdpdGggZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIGNkZWYgdWludDY0X3QgbmFtZSA9IDx1aW50NjRfdD5kCistICogICAgIGNhbGxiYWNr ID0gX2NhbGxiYWNrcy5nZXQobmFtZSkKKysvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMQorKyAqICAg ICAgICAgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoPFJlbmRlckZy YW1lSW5mbz4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKysgKiAgICAgcmV0dXJuIF9fcHl4 X3Jlc3VsdAorKyAqIGNkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3Rh dGUoUmVuZGVyRnJhbWVJbmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAw IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CisrICogICAgICAgICBfX3B5 eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzBdKQorICAqLworIAorLXN0YXRp YyB2b2lkIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2NhbGxiYWNrKHZvaWQgKl9f cHl4X3ZfZCkgeworLSAgdWludDY0X3QgX19weXhfdl9uYW1lOworLSAgUHlPYmplY3QgKl9fcHl4 X3ZfY2FsbGJhY2sgPSBOVUxMOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICpfX3B5 eF92X19fcHl4X3Jlc3VsdCwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKysgIFB5 T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBO VUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMyA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhf dF80ID0gTlVMTDsKKysgIGludCBfX3B5eF90XzE7CisrICBQeV9zc2l6ZV90IF9fcHl4X3RfMjsK KysgIGludCBfX3B5eF90XzM7CisrICBpbnQgX19weXhfdF80OworKyAgUHlPYmplY3QgKl9fcHl4 X3RfNSA9IE5VTEw7CisrICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKysgIFB5T2JqZWN0 ICpfX3B5eF90XzcgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7CisgICBp bnQgX19weXhfbGluZW5vID0gMDsKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVM TDsKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gICNpZmRlZiBXSVRIX1RIUkVBRAorLSAg UHlHSUxTdGF0ZV9TVEFURSBfX3B5eF9naWxzdGF0ZV9zYXZlID0gX19QeXhfUHlHSUxTdGF0ZV9F bnN1cmUoKTsKKy0gICNlbmRpZgorLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9jX2Nh bGxiYWNrIiwgMCk7CisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19weXhfdW5waWNr bGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTY0CistICogCistICogY2RlZiB2b2lkIF9jX2NhbGxiYWNr KHZvaWQqIGQpIHdpdGggZ2lsOgorLSAqICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8dWludDY0 X3Q+ZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNhbGxiYWNrID0gX2Nh bGxiYWNrcy5nZXQobmFtZSkKKy0gKiAgICAgY2FsbGJhY2suY2FsbCgpCisrICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxMgorKyAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CisrICogY2RlZiBfX3B5 eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZShSZW5kZXJGcmFtZUluZm8gX19w eXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CisrICogICAgIGlmIGxlbihfX3B5eF9zdGF0 ZSkgPiAwIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRh dGUoX19weXhfc3RhdGVbMF0pCisgICovCistICBfX3B5eF92X25hbWUgPSAoKHVpbnQ2NF90KV9f cHl4X3ZfZCk7CisrICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25l KSkgeworKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAib2JqZWN0IG9mIHR5 cGUgJ05vbmVUeXBlJyBoYXMgbm8gbGVuKCkiKTsKKysgICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5 eF9MMV9lcnJvcikKKysgIH0KKysgIF9fcHl4X3RfMiA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhf dl9fX3B5eF9zdGF0ZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPT0gKChQeV9zc2l6ZV90KS0x KSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSAoKF9f cHl4X3RfMiA+IDApICE9IDApOworKyAgaWYgKF9fcHl4X3RfMykgeworKyAgfSBlbHNlIHsKKysg ICAgX19weXhfdF8xID0gX19weXhfdF8zOworKyAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3Bf ZG9uZTsKKysgIH0KKysgIF9fcHl4X3RfMyA9IF9fUHl4X0hhc0F0dHIoKChQeU9iamVjdCAqKV9f cHl4X3ZfX19weXhfcmVzdWx0KSwgX19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoX19weXhf dF8zID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzQgPSAoX19weXhfdF8zICE9IDApOworKyAgX19weXhfdF8xID0gX19weXhfdF80Owor KyAgX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKKysgIGlmIChfX3B5eF90XzEpIHsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTY1CistICogY2RlZiB2b2lkIF9j X2NhbGxiYWNrKHZvaWQqIGQpIHdpdGggZ2lsOgorLSAqICAgICBjZGVmIHVpbnQ2NF90IG5hbWUg PSA8dWludDY0X3Q+ZAorLSAqICAgICBjYWxsYmFjayA9IF9jYWxsYmFja3MuZ2V0KG5hbWUpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgY2FsbGJhY2suY2FsbCgpCisrICAg IC8qICIodHJlZSBmcmFnbWVudCkiOjEzCisrICogY2RlZiBfX3B5eF91bnBpY2tsZV9SZW5kZXJG cmFtZUluZm9fX3NldF9zdGF0ZShSZW5kZXJGcmFtZUluZm8gX19weXhfcmVzdWx0LCB0dXBsZSBf X3B5eF9zdGF0ZSk6CisrICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAwIGFuZCBoYXNhdHRy KF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CisrICogICAgICAgICBfX3B5eF9yZXN1bHQuX19k aWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzBdKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X25fc19nZXQpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTY1LCBfX3B5eF9MMV9lcnJvcikKKy0g IF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJv bV91aW50NjRfdChfX3B5eF92X25hbWUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigwLCAxMTY1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMp OworLSAgX19weXhfdF80ID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4X3RfNCA9IFB5 TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkg eworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5 eF90XzIpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworLSAgICAgIF9fUHl4X0lO Q1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0 aW9uKTsKKysgICAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2Jq ZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoX19weXhfdF82LCBfX3B5eF9uX3NfdXBkYXRlKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF83KTsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CisrICAgIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7 CisrICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2Jq ZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CisrICAgICAgX19QWVhfRVJSKDEsIDEzLCBfX3B5 eF9MMV9lcnJvcikKKyAgICAgfQorLSAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBf X1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykg OiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihf X3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMTE2NSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19w eXhfdl9jYWxsYmFjayA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7CisrICAgIF9fcHl4 X3RfNiA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMCwgbG9u ZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RS RUYoX19weXhfdF82KTsKKysgICAgX19weXhfdF84ID0gTlVMTDsKKysgICAgaWYgKENZVEhPTl9V TlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF83KSkpIHsKKysg ICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzcpOworKyAgICAgIGlm IChsaWtlbHkoX19weXhfdF84KSkgeworKyAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNyk7CisrICAgICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF84KTsKKysgICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3RfNywgZnVuY3Rpb24pOworKyAgICAgIH0KKysgICAgfQorKyAg ICBfX3B5eF90XzUgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF83LCBfX3B5eF90XzYpOworKyAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7IF9f cHl4X3RfOCA9IDA7CisrICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OworKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigxLCAxMywgX19weXhf TDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworKyAgICBfX1B5eF9ERUNS RUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf NSk7IF9fcHl4X3RfNSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTE2NgorLSAqICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8dWludDY0X3Q+ZAorLSAqICAg ICBjYWxsYmFjayA9IF9jYWxsYmFja3MuZ2V0KG5hbWUpCistICogICAgIGNhbGxiYWNrLmNhbGwo KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAgIC8qICIodHJlZSBmcmFnbWVudCki OjEyCisrICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xl X1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKFJlbmRlckZyYW1lSW5mbyBfX3B5eF9yZXN1bHQs IHR1cGxlIF9fcHl4X3N0YXRlKToKKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDAgYW5k IGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9z dGF0ZVswXSkKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIo X19weXhfdl9jYWxsYmFjaywgX19weXhfbl9zX2NhbGwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCAxMTY2LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOworLSAgX19weXhfdF8zID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4 X3RfMyA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgIGlmIChsaWtlbHkoX19w eXhfdF8zKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOworLSAgICAg IF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90 XzIsIGZ1bmN0aW9uKTsKKy0gICAgfQorICAgfQorLSAgX19weXhfdF8xID0gKF9fcHl4X3RfMykg PyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKSA6IF9fUHl4 X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzIpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMTE2NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTE2MworLSAqICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInB5 bXB2IGVycm9yIGR1cmluZyBjYWxsYmFjazogJXNcbiIgJSBlKQorLSAqIAorLSAqIGNkZWYgdm9p ZCBfY19jYWxsYmFjayh2b2lkKiBkKSB3aXRoIGdpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8dWludDY0X3Q+ZAorLSAqICAgICBj YWxsYmFjayA9IF9jYWxsYmFja3MuZ2V0KG5hbWUpCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox MQorKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUo PFJlbmRlckZyYW1lSW5mbz4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKysgKiAgICAgcmV0 dXJuIF9fcHl4X3Jlc3VsdAorKyAqIGNkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZv X19zZXRfc3RhdGUoUmVuZGVyRnJhbWVJbmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3Rh dGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGlmIGxlbihfX3B5eF9z dGF0ZSkgPiAwIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CisrICogICAg ICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzBdKQorICAqLwor IAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCisrICBfX3B5eF9yID0gUHlfTm9uZTsgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworICAgZ290byBfX3B5eF9MMDsKKyAgIF9fcHl4X0wxX2Vycm9y OjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhf dF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X1hERUNSRUYoX19w eXhfdF80KTsKKy0gIF9fUHl4X1dyaXRlVW5yYWlzYWJsZSgidmlkY3V0dGVyLmxpYnMubXB2Ll9j X2NhbGxiYWNrIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSwg MSwgMCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CisrICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfNik7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CisrICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfOCk7CisrICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5f X3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZSIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgX19weXhfciA9IDA7CisgICBfX3B5 eF9MMDo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfY2FsbGJhY2spOworKyAgX19QeXhfWEdJ VkVSRUYoX19weXhfcik7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gICNp ZmRlZiBXSVRIX1RIUkVBRAorLSAgX19QeXhfUHlHSUxTdGF0ZV9SZWxlYXNlKF9fcHl4X2dpbHN0 YXRlX3NhdmUpOworKyAgcmV0dXJuIF9fcHl4X3I7CisrfQorK3N0YXRpYyBzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCBfX3B5eF92 dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQ7CisrCisrc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJl YWNoZWQoUHlUeXBlT2JqZWN0ICp0LCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICphLCBDWVRIT05f VU5VU0VEIFB5T2JqZWN0ICprKSB7CisrICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpwOworKyAgUHlPYmplY3QgKm87CisrICBpZiAobGlr ZWx5KCh0LT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09IDApKSB7CisrICAg IG8gPSAoKnQtPnRwX2FsbG9jKSh0LCAwKTsKKysgIH0gZWxzZSB7CisrICAgIG8gPSAoUHlPYmpl Y3QgKikgUHlCYXNlT2JqZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5X3R1cGxlLCAwKTsK KysgIH0KKysgIGlmICh1bmxpa2VseSghbykpIHJldHVybiAwOworKyAgcCA9ICgoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqKW8pOworKyAg cC0+X19weXhfdnRhYiA9IF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9m RmlsZVJlYWNoZWQ7CisrICBwLT5yZWFzb24gPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7 CisrICBwLT5lcnJvciA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIHJldHVybiBv OworK30KKysKKytzdGF0aWMgdm9pZCBfX3B5eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FbmRPZkZpbGVSZWFjaGVkKFB5T2JqZWN0ICpvKSB7CisrICBzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpwID0gKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKilvOworKyAgI2lm IENZVEhPTl9VU0VfVFBfRklOQUxJWkUKKysgIGlmICh1bmxpa2VseShQeVR5cGVfSGFzRmVhdHVy ZShQeV9UWVBFKG8pLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmIFB5X1RZUEUobyktPnRw X2ZpbmFsaXplKSAmJiAhX1B5R0NfRklOQUxJWkVEKG8pKSB7CisrICAgIGlmIChQeU9iamVjdF9D YWxsRmluYWxpemVyRnJvbURlYWxsb2MobykpIHJldHVybjsKKysgIH0KKyAgICNlbmRpZgorKyAg UHlPYmplY3RfR0NfVW5UcmFjayhvKTsKKysgIFB5X0NMRUFSKHAtPnJlYXNvbik7CisrICBQeV9D TEVBUihwLT5lcnJvcik7CisrICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOworIH0KKyAKKy0v KiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJl YWNoZWQoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2ts ZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqLworK3N0YXRpYyBp bnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNo ZWQoUHlPYmplY3QgKm8sIHZpc2l0cHJvYyB2LCB2b2lkICphKSB7CisrICBpbnQgZTsKKysgIHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKnAg PSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hl ZCAqKW87CisrICBpZiAocC0+cmVhc29uKSB7CisrICAgIGUgPSAoKnYpKHAtPnJlYXNvbiwgYSk7 IGlmIChlKSByZXR1cm4gZTsKKysgIH0KKysgIGlmIChwLT5lcnJvcikgeworKyAgICBlID0gKCp2 KShwLT5lcnJvciwgYSk7IGlmIChlKSByZXR1cm4gZTsKKysgIH0KKysgIHJldHVybiAwOworK30K KyAKKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkKFB5T2Jq ZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3 ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN19fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQgPSB7Il9fcHl4X3Vu cGlja2xlX0VuZE9mRmlsZVJlYWNoZWQiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlv bldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN19fcHl4X3VucGlj a2xlX0VuZE9mRmlsZVJlYWNoZWQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfTsKKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X19weXhfdW5w aWNrbGVfRW5kT2ZGaWxlUmVhY2hlZChQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9f cHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CistICBQeU9iamVjdCAqX19weXhfdl9f X3B5eF90eXBlID0gMDsKKy0gIGxvbmcgX19weXhfdl9fX3B5eF9jaGVja3N1bTsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlID0gMDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOwor LSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2tsZV9F bmRPZkZpbGVSZWFjaGVkICh3cmFwcGVyKSIsIDApOworLSAgeworLSAgICBzdGF0aWMgUHlPYmpl Y3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19weXhfdHlwZSwmX19weXhfbl9z X3B5eF9jaGVja3N1bSwmX19weXhfbl9zX3B5eF9zdGF0ZSwwfTsKKy0gICAgUHlPYmplY3QqIHZh bHVlc1szXSA9IHswLDAsMH07CistICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworLSAg ICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKy0gICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdz ID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdz KSB7CistICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4 X2FyZ3MsIDIpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAg MjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhf TDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQorLSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6 ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNl ICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0 ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF90eXBlKSkgIT0gMCkpIGt3X2FyZ3MtLTsK Ky0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKy0gICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6CistICAgICAgICBpZiAobGlrZWx5 KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9u X3NfcHl4X2NoZWNrc3VtKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVsc2UgeworLSAg ICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfRW5kT2ZG aWxlUmVhY2hlZCIsIDEsIDMsIDMsIDEpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3Ip CistICAgICAgICB9CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNl ICAyOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzJdID0gX19QeXhfUHlEaWN0X0dldEl0 ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF9zdGF0ZSkpICE9IDApKSBrd19hcmdzLS07 CistICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQo Il9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQiLCAxLCAzLCAzLCAyKTsgX19QWVhfRVJS KDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAgICAgfQorLSAgICAgIH0KKy0gICAgICBpZiAo dW5saWtlbHkoa3dfYXJncyA+IDApKSB7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFy c2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVl cywgcG9zX2FyZ3MsICJfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkIikgPCAwKSkgX19Q WVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAgIH0KKy0gICAgfSBlbHNlIGlmIChQ eVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9IDMpIHsKKy0gICAgICBnb3RvIF9fcHl4X0w1 X2FyZ3R1cGxlX2Vycm9yOworLSAgICB9IGVsc2UgeworLSAgICAgIHZhbHVlc1swXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9H RVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDIpOworLSAgICB9CistICAgIF9fcHl4X3ZfX19weXhfdHlwZSA9IHZh bHVlc1swXTsKKy0gICAgX19weXhfdl9fX3B5eF9jaGVja3N1bSA9IF9fUHl4X1B5SW50X0FzX2xv bmcodmFsdWVzWzFdKTsgaWYgKHVubGlrZWx5KChfX3B5eF92X19fcHl4X2NoZWNrc3VtID09IChs b25nKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vy cm9yKQorLSAgICBfX3B5eF92X19fcHl4X3N0YXRlID0gdmFsdWVzWzJdOworLSAgfQorLSAgZ290 byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKy0gIF9fcHl4X0w1X2FyZ3R1cGxl X2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9F bmRPZkZpbGVSZWFjaGVkIiwgMSwgMywgMywgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7 IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKy0gIF9fcHl4X0wzX2Vycm9yOjsKKy0g IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX0Vu ZE9mRmlsZVJlYWNoZWQiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVu YW1lKTsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIE5VTEw7 CistICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7CistICBfX3B5eF9yID0gX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzZfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFj aGVkKF9fcHl4X3NlbGYsIF9fcHl4X3ZfX19weXhfdHlwZSwgX19weXhfdl9fX3B5eF9jaGVja3N1 bSwgX19weXhfdl9fX3B5eF9zdGF0ZSk7CistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8K Ky0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7Cisr c3RhdGljIGludCBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxl UmVhY2hlZChQeU9iamVjdCAqbykgeworKyAgUHlPYmplY3QqIHRtcDsKKysgIHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKnAgPSAoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqKW87Cisr ICB0bXAgPSAoKFB5T2JqZWN0KilwLT5yZWFzb24pOworKyAgcC0+cmVhc29uID0gUHlfTm9uZTsg UHlfSU5DUkVGKFB5X05vbmUpOworKyAgUHlfWERFQ1JFRih0bXApOworKyAgdG1wID0gKChQeU9i amVjdCopcC0+ZXJyb3IpOworKyAgcC0+ZXJyb3IgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9u ZSk7CisrICBQeV9YREVDUkVGKHRtcCk7CisrICByZXR1cm4gMDsKKyB9CisgCistc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNl9fcHl4X3VucGlja2xlX0Vu ZE9mRmlsZVJlYWNoZWQoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9i amVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf UGlja2xlRXJyb3IgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfcmVzdWx0ID0gMDsK Ky0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCistICBpbnQgX19weXhfdF8xOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Cist ICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBO VUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBpbnQgX19weXhfdF82Owor LSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCIsIDApOworLQorLSAgLyog Iih0cmVlIGZyYWdtZW50KSI6NAorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJv cgorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKy0gKiAgICAgaWYgX19weXhfY2hl Y2tzdW0gIT0gMHg1NmJlOWI2OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IK Ky0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tz dW1zICglcyB2cyAweDU2YmU5YjYgPSAoZXJyb3IsIHJlYXNvbikpIiAlIF9fcHl4X2NoZWNrc3Vt KQorLSAqLworLSAgX19weXhfdF8xID0gKChfX3B5eF92X19fcHl4X2NoZWNrc3VtICE9IDB4NTZi ZTliNikgIT0gMCk7CistICBpZiAoX19weXhfdF8xKSB7CistCistICAgIC8qICIodHJlZSBmcmFn bWVudCkiOjUKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9f cHl4X2NoZWNrc3VtICE9IDB4NTZiZTliNjoKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9y dCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvciAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxl IGNoZWNrc3VtcyAoJXMgdnMgMHg1NmJlOWI2ID0gKGVycm9yLCByZWFzb24pKSIgJSBfX3B5eF9j aGVja3N1bSkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gRW5kT2ZGaWxlUmVhY2hlZC5fX25ld19f KF9fcHl4X3R5cGUpCistICovCistICAgIF9fcHl4X3RfMiA9IFB5TGlzdF9OZXcoMSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19Q aWNrbGVFcnJvcik7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsK Ky0gICAgUHlMaXN0X1NFVF9JVEVNKF9fcHl4X3RfMiwgMCwgX19weXhfbl9zX1BpY2tsZUVycm9y KTsKKy0gICAgX19weXhfdF8zID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc19waWNrbGUsIF9fcHl4 X3RfMiwgLTEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9J bXBvcnRGcm9tKF9fcHl4X3RfMywgX19weXhfbl9zX1BpY2tsZUVycm9yKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKy0gICAg X19weXhfdl9fX3B5eF9QaWNrbGVFcnJvciA9IF9fcHl4X3RfMjsKKy0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMp OyBfX3B5eF90XzMgPSAwOworLQorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2CistICogICAg IGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4NTZiZTliNjoKKy0gKiAgICAgICAgIGZyb20gcGlja2xl IGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICAgICAgcmFp c2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4NTZi ZTliNiA9IChlcnJvciwgcmVhc29uKSkiICUgX19weXhfY2hlY2tzdW0pICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gRW5kT2ZGaWxlUmVhY2hlZC5f X25ld19fKF9fcHl4X3R5cGUpCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgor LSAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2xvbmcoX19weXhfdl9fX3B5 eF9jaGVja3N1bSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDYsIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhf dF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNr c3Vtc19zX3ZzXzB4NTYsIF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9f UHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKy0gICAgX19weXhfdF8yID0g X19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcjsgX19weXhfdF81ID0gTlVMTDsKKy0gICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworLSAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Cist ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzUpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAg ICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgICAgfQorLSAg ICB9CistICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfMiwgX19weXhfdF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfNCk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4 X3RfNCA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYs IF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X1JhaXNlKF9f cHl4X3RfMywgMCwgMCwgMCk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworLSAgICBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJl YWNoZWRfcmVhc29uKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKysgIHJl dHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkXzZy ZWFzb25fMV9fZ2V0X18obyk7CisrfQorIAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0Cist ICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0 IF9fcHl4X3Jlc3VsdAorLSAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweDU2YmU5YjY6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9y dCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICAgICAgcmFpc2UgX19w eXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4NTZiZTliNiA9 IChlcnJvciwgcmVhc29uKSkiICUgX19weXhfY2hlY2tzdW0pCistICovCisrc3RhdGljIGludCBf X3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfcmVh c29uKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Cisr ICBpZiAodikgeworKyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2 RW5kT2ZGaWxlUmVhY2hlZF82cmVhc29uXzNfX3NldF9fKG8sIHYpOworICAgfQorLQorLSAgLyog Iih0cmVlIGZyYWdtZW50KSI6NworLSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2ts ZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNr bGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHg1NmJlOWI2ID0gKGVycm9y LCByZWFzb24pKSIgJSBfX3B5eF9jaGVja3N1bSkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gRW5k T2ZGaWxlUmVhY2hlZC5fX25ld19fKF9fcHl4X3R5cGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6CistICogICAgICAgICBf X3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoPEVuZE9mRmlsZVJlYWNo ZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCistICovCistICBfX3B5eF90XzIgPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCksIF9fcHl4X25fc19uZXcpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA3LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF80ID0gTlVMTDsKKy0gIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7Cist ICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgIGlmIChs aWtlbHkoX19weXhfdF80KSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9k X0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQp OworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKy0gICAgfQorKyAgZWxzZSB7CisrICAgIHJldHVybiBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkXzZyZWFzb25f NV9fZGVsX18obyk7CisgICB9CistICBfX3B5eF90XzMgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdl9fX3B5eF90eXBl KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X19fcHl4X3R5 cGUpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNywgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworLSAgX19weXhfdl9fX3B5eF9yZXN1bHQgPSBfX3B5eF90XzM7CistICBf X3B5eF90XzMgPSAwOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6OAorLSAqICAgICAgICAg cmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4 NTZiZTliNiA9IChlcnJvciwgcmVhc29uKSkiICUgX19weXhfY2hlY2tzdW0pCistICogICAgIF9f cHl4X3Jlc3VsdCA9IEVuZE9mRmlsZVJlYWNoZWQuX19uZXdfXyhfX3B5eF90eXBlKQorLSAqICAg ICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRl KDxFbmRPZkZpbGVSZWFjaGVkPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICBy ZXR1cm4gX19weXhfcmVzdWx0CistICovCistICBfX3B5eF90XzEgPSAoX19weXhfdl9fX3B5eF9z dGF0ZSAhPSBQeV9Ob25lKTsKKy0gIF9fcHl4X3RfNiA9IChfX3B5eF90XzEgIT0gMCk7CistICBp ZiAoX19weXhfdF82KSB7CisrfQorIAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo5CistICog ICAgIF9fcHl4X3Jlc3VsdCA9IEVuZE9mRmlsZVJlYWNoZWQuX19uZXdfXyhfX3B5eF90eXBlKQor LSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgIF9fcHl4X3Vu cGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZSg8RW5kT2ZGaWxlUmVhY2hlZD4gX19w eXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICByZXR1cm4gX19weXhfcmVzdWx0CistICogY2RlZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZp bGVSZWFjaGVkX19zZXRfc3RhdGUoRW5kT2ZGaWxlUmVhY2hlZCBfX3B5eF9yZXN1bHQsIHR1cGxl IF9fcHl4X3N0YXRlKToKKy0gKi8KKy0gICAgaWYgKCEobGlrZWx5KFB5VHVwbGVfQ2hlY2tFeGFj dChfX3B5eF92X19fcHl4X3N0YXRlKSl8fCgoX19weXhfdl9fX3B5eF9zdGF0ZSkgPT0gUHlfTm9u ZSl8fChQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiRXhwZWN0ZWQgJS4xNnMsIGdvdCAl LjIwMHMiLCAidHVwbGUiLCBQeV9UWVBFKF9fcHl4X3ZfX19weXhfc3RhdGUpLT50cF9uYW1lKSwg MCkpKSBfX1BZWF9FUlIoMSwgOSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fcHl4X3RfMyA9IF9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNo ZWRfX3NldF9zdGF0ZSgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Vu ZE9mRmlsZVJlYWNoZWQgKilfX3B5eF92X19fcHl4X3Jlc3VsdCksICgoUHlPYmplY3QqKV9fcHl4 X3ZfX19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwg OSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKytzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9l cnJvcihQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CisrICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF81ZXJyb3JfMV9f Z2V0X18obyk7CisrfQorIAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo4CistICogICAgICAg ICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMg MHg1NmJlOWI2ID0gKGVycm9yLCByZWFzb24pKSIgJSBfX3B5eF9jaGVja3N1bSkKKy0gKiAgICAg X19weXhfcmVzdWx0ID0gRW5kT2ZGaWxlUmVhY2hlZC5fX25ld19fKF9fcHl4X3R5cGUpCistICog ICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3Rh dGUoPEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCistICogICAg IHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKi8KKytzdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZp ZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9lcnJvcihQeU9iamVjdCAqbywg UHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworKyAgaWYgKHYpIHsKKysgICAg cmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRf NWVycm9yXzNfX3NldF9fKG8sIHYpOworKyAgfQorKyAgZWxzZSB7CisrICAgIHJldHVybiBfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkXzVlcnJvcl81X19k ZWxfXyhvKTsKKyAgIH0KKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEwCistICogICAgIGlm IF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfRW5k T2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKDxFbmRPZkZpbGVSZWFjaGVkPiBfX3B5eF9yZXN1bHQs IF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRf X3NldF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3Rh dGUpOgorLSAqICAgICBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhf cmVzdWx0LnJlYXNvbiA9IF9fcHl4X3N0YXRlWzFdCistICovCistICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKy0gIF9fcHl4 X3IgPSBfX3B5eF92X19fcHl4X3Jlc3VsdDsKKy0gIGdvdG8gX19weXhfTDA7CistCistICAvKiAi KHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNo ZWQoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVy cm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqLworLQorLSAgLyogZnVu Y3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CistICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVS ZWFjaGVkIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Cist ICBfX3B5eF9yID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhf dl9fX3B5eF9QaWNrbGVFcnJvcik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfcmVz dWx0KTsKKy0gIF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogIih0cmVlIGZyYWdt ZW50KSI6MTEKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3Nl dF9zdGF0ZSg8RW5kT2ZGaWxlUmVhY2hlZD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0g KiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorLSAqIGNkZWYgX19weXhfdW5waWNrbGVfRW5kT2ZG aWxlUmVhY2hlZF9fc2V0X3N0YXRlKEVuZE9mRmlsZVJlYWNoZWQgX19weXhfcmVzdWx0LCB0dXBs ZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX19w eXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5yZWFzb24gPSBf X3B5eF9zdGF0ZVsxXQorLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0 cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgorLSAqLworK3N0YXRpYyBQeU1ldGhvZERlZiBf X3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkW10gPSB7 CisrICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfMV9fcmVkdWNlX2N5dGhvbl9fLCBNRVRI X05PQVJHUywgMH0sCisrICB7Il9fc2V0c3RhdGVfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF8zX19zZXRzdGF0 ZV9jeXRob25fXywgTUVUSF9PLCAwfSwKKysgIHswLCAwLCAwLCAwfQorK307CisgCistc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9F bmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqX19weXhfdl9fX3B5eF9yZXN1bHQsIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Cist ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5V TEw7CistICBpbnQgX19weXhfdF8yOworLSAgUHlfc3NpemVfdCBfX3B5eF90XzM7CistICBpbnQg X19weXhfdF80OworLSAgaW50IF9fcHl4X3RfNTsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBO VUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhf dF84ID0gTlVMTDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19w eXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3Nl dF9zdGF0ZSIsIDApOworK3N0YXRpYyBzdHJ1Y3QgUHlHZXRTZXREZWYgX19weXhfZ2V0c2V0c185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZFtdID0geworKyAgeyhjaGFyICop InJlYXNvbiIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxl UmVhY2hlZF9yZWFzb24sIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5k T2ZGaWxlUmVhY2hlZF9yZWFzb24sIChjaGFyICopMCwgMH0sCisrICB7KGNoYXIgKikiZXJyb3Ii LCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRf ZXJyb3IsIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVh Y2hlZF9lcnJvciwgKGNoYXIgKikwLCAwfSwKKysgIHswLCAwLCAwLCAwLCAwfQorK307CisgCist ICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMgorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0Cist ICogY2RlZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUoRW5kT2ZG aWxlUmVhY2hlZCBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19w eXhfcmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5yZWFzb24gPSBf X3B5eF9zdGF0ZVsxXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGlmIGxl bihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6 CistICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzJd KQorLSAqLworLSAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkp IHsKKy0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2Jq ZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CistICAgIF9fUFlYX0VSUigxLCAxMiwgX19weXhf TDFfZXJyb3IpCistICB9CistICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9f cHl4X3ZfX19weXhfc3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwg MCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR0lWRVJFRihf X3B5eF90XzEpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5lcnJvcik7 CistICBfX1B5eF9ERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPmVycm9yKTsKKy0gIF9fcHl4 X3ZfX19weXhfcmVzdWx0LT5lcnJvciA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7Cist ICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAgICBQ eUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90 IHN1YnNjcmlwdGFibGUiKTsKKy0gICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikK Ky0gIH0KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5 eF9zdGF0ZSwgMSwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7 CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlYXNvbik7CistICBfX1B5 eF9ERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlYXNvbik7CistICBfX3B5eF92X19fcHl4 X3Jlc3VsdC0+cmVhc29uID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKytzdGF0aWMg UHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJl YWNoZWQgPSB7CisrICBQeVZhck9iamVjdF9IRUFEX0lOSVQoMCwgMCkKKysgICJ2aWRjdXR0ZXIu bGlicy5tcHYuRW5kT2ZGaWxlUmVhY2hlZCIsIC8qdHBfbmFtZSovCisrICBzaXplb2Yoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCksIC8qdHBf YmFzaWNzaXplKi8KKysgIDAsIC8qdHBfaXRlbXNpemUqLworKyAgX19weXhfdHBfZGVhbGxvY185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCwgLyp0cF9kZWFsbG9jKi8KKysg ICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKysgIDAsIC8qdHBfcHJpbnQqLworKyAg I2VuZGlmCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorKyAgMCwgLyp0cF92 ZWN0b3JjYWxsX29mZnNldCovCisrICAjZW5kaWYKKysgIDAsIC8qdHBfZ2V0YXR0ciovCisrICAw LCAvKnRwX3NldGF0dHIqLworKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAwLCAvKnRw X2NvbXBhcmUqLworKyAgI2VuZGlmCisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCisrICAw LCAvKnRwX2FzX2FzeW5jKi8KKysgICNlbmRpZgorKyAgMCwgLyp0cF9yZXByKi8KKysgIDAsIC8q dHBfYXNfbnVtYmVyKi8KKysgIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworKyAgMCwgLyp0cF9hc19t YXBwaW5nKi8KKysgIDAsIC8qdHBfaGFzaCovCisrICAwLCAvKnRwX2NhbGwqLworKyAgMCwgLyp0 cF9zdHIqLworKyAgMCwgLyp0cF9nZXRhdHRybyovCisrICAwLCAvKnRwX3NldGF0dHJvKi8KKysg IDAsIC8qdHBfYXNfYnVmZmVyKi8KKysgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0hB VkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1NfSEFWRV9ORVdC VUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3Mq LworKyAgIkRhdGEgZmllbGQgZm9yIE1QVl9FVkVOVF9FTkRfRklMRSBldmVudHNcblxuICAgIFdy YXBzOiBtcHZfZXZlbnRfZW5kX2ZpbGVcbiAgICAiLCAvKnRwX2RvYyovCisrICBfX3B5eF90cF90 cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCwgLyp0cF90cmF2 ZXJzZSovCisrICBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxl UmVhY2hlZCwgLyp0cF9jbGVhciovCisrICAwLCAvKnRwX3JpY2hjb21wYXJlKi8KKysgIDAsIC8q dHBfd2Vha2xpc3RvZmZzZXQqLworKyAgMCwgLyp0cF9pdGVyKi8KKysgIDAsIC8qdHBfaXRlcm5l eHQqLworKyAgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVh Y2hlZCwgLyp0cF9tZXRob2RzKi8KKysgIDAsIC8qdHBfbWVtYmVycyovCisrICBfX3B5eF9nZXRz ZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLCAvKnRwX2dldHNldCov CisrICAwLCAvKnRwX2Jhc2UqLworKyAgMCwgLyp0cF9kaWN0Ki8KKysgIDAsIC8qdHBfZGVzY3Jf Z2V0Ki8KKysgIDAsIC8qdHBfZGVzY3Jfc2V0Ki8KKysgIDAsIC8qdHBfZGljdG9mZnNldCovCisr ICAwLCAvKnRwX2luaXQqLworKyAgMCwgLyp0cF9hbGxvYyovCisrICBfX3B5eF90cF9uZXdfOXZp ZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQsIC8qdHBfbmV3Ki8KKysgIDAsIC8q dHBfZnJlZSovCisrICAwLCAvKnRwX2lzX2djKi8KKysgIDAsIC8qdHBfYmFzZXMqLworKyAgMCwg Lyp0cF9tcm8qLworKyAgMCwgLyp0cF9jYWNoZSovCisrICAwLCAvKnRwX3N1YmNsYXNzZXMqLwor KyAgMCwgLyp0cF93ZWFrbGlzdCovCisrICAwLCAvKnRwX2RlbCovCisrICAwLCAvKnRwX3ZlcnNp b25fdGFnKi8KKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCisrICAwLCAvKnRw X2ZpbmFsaXplKi8KKysgICNlbmRpZgorKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAw YjEgJiYgKCFDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgfHwgUFlQWV9WRVJTSU9OX05VTSA+PSAw eDA3MDMwODAwKQorKyAgMCwgLyp0cF92ZWN0b3JjYWxsKi8KKysgICNlbmRpZgorKyAgI2lmIFBZ X1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAw CisrICAwLCAvKnRwX3ByaW50Ki8KKysgICNlbmRpZgorKyAgI2lmIENZVEhPTl9DT01QSUxJTkdf SU5fUFlQWSAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDkwMDAwCisrICAwLCAvKnRwX3B5cHlf ZmxhZ3MqLworKyAgI2VuZGlmCisrfTsKKytzdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3Rf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Mb2dNZXNzYWdlOworIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKKy0g KiBjZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZShFbmRPZkZp bGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5 eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LnJlYXNvbiA9IF9f cHl4X3N0YXRlWzFdCistICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRy KF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMl0p CistICovCistICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkg eworLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAib2JqZWN0IG9mIHR5cGUg J05vbmVUeXBlJyBoYXMgbm8gbGVuKCkiKTsKKy0gICAgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9M MV9lcnJvcikKKy0gIH0KKy0gIF9fcHl4X3RfMyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdl9f X3B5eF9zdGF0ZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPT0gKChQeV9zc2l6ZV90KS0xKSkp IF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90XzQgPSAoKF9fcHl4 X3RfMyA+IDIpICE9IDApOworLSAgaWYgKF9fcHl4X3RfNCkgeworK3N0YXRpYyBQeU9iamVjdCAq X19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKFB5VHlwZU9iamVj dCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAq aykgeworKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2Fn ZSAqcDsKKysgIFB5T2JqZWN0ICpvOworKyAgaWYgKGxpa2VseSgodC0+dHBfZmxhZ3MgJiBQeV9U UEZMQUdTX0lTX0FCU1RSQUNUKSA9PSAwKSkgeworKyAgICBvID0gKCp0LT50cF9hbGxvYykodCwg MCk7CisgICB9IGVsc2UgeworLSAgICBfX3B5eF90XzIgPSBfX3B5eF90XzQ7CistICAgIGdvdG8g X19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworKyAgICBvID0gKFB5T2JqZWN0ICopIFB5QmFzZU9i amVjdF9UeXBlLnRwX25ldyh0LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7CisgICB9CistICBfX3B5 eF90XzQgPSBfX1B5eF9IYXNBdHRyKCgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3Jlc3VsdCks IF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA9PSAoKGludCktMSkpKSBf X1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdF81ID0gKF9fcHl4X3Rf NCAhPSAwKTsKKy0gIF9fcHl4X3RfMiA9IF9fcHl4X3RfNTsKKy0gIF9fcHl4X0w0X2Jvb2xfYmlu b3BfZG9uZTo7CistICBpZiAoX19weXhfdF8yKSB7CisrICBpZiAodW5saWtlbHkoIW8pKSByZXR1 cm4gMDsKKysgIHAgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xv Z01lc3NhZ2UgKilvKTsKKysgIHAtPl9fcHl4X3Z0YWIgPSBfX3B5eF92dGFicHRyXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlOworKyAgcC0+cHJlZml4ID0gUHlfTm9uZTsgUHlfSU5D UkVGKFB5X05vbmUpOworKyAgcC0+bGV2ZWwgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7 CisrICBwLT50ZXh0ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworKyAgcC0+bG9nX2xl dmVsID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworKyAgcmV0dXJuIG87CisrfQorIAor LSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxNAorLSAqICAgICBfX3B5eF9yZXN1bHQuZXJyb3Ig PSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LnJlYXNvbiA9IF9fcHl4X3N0YXRlWzFdCist ICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwg J19fZGljdF9fJyk6CistICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9f cHl4X3N0YXRlWzJdKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICovCistICAgIF9f cHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zf X19weXhfcmVzdWx0KSwgX19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOworLSAgICBfX3B5eF90XzcgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4 X3RfNiwgX19weXhfbl9zX3VwZGF0ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhf RVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7 CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICBpZiAo dW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAgICAgIFB5RXJy X1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vi c2NyaXB0YWJsZSIpOworLSAgICAgIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCist ICAgIH0KKy0gICAgX19weXhfdF82ID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19f cHl4X3N0YXRlLCAyLCBsb25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3Ip CistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgICBfX3B5eF90XzggPSBOVUxMOwor LSAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhf X3B5eF90XzcpKSkgeworLSAgICAgIF9fcHl4X3RfOCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4 X3RfNyk7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzgpKSB7CistICAgICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF83KTsKKy0gICAgICAg IF9fUHl4X0lOQ1JFRihfX3B5eF90XzgpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF83LCBmdW5jdGlvbik7CistICAg ICAgfQorLSAgICB9CistICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmpl Y3RfQ2FsbDJBcmdzKF9fcHl4X3RfNywgX19weXhfdF84LCBfX3B5eF90XzYpIDogX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzcsIF9fcHl4X3RfNik7CistICAgIF9fUHl4X1hERUNS RUYoX19weXhfdF84KTsgX19weXhfdF84ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Nik7IF9fcHl4X3RfNiA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDEsIDE0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKytzdGF0aWMgdm9pZCBfX3B5eF90 cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKFB5T2JqZWN0ICpvKSB7 CisrICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpw ID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilv OworKyAgI2lmIENZVEhPTl9VU0VfVFBfRklOQUxJWkUKKysgIGlmICh1bmxpa2VseShQeVR5cGVf SGFzRmVhdHVyZShQeV9UWVBFKG8pLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmIFB5X1RZ UEUobyktPnRwX2ZpbmFsaXplKSAmJiAhX1B5R0NfRklOQUxJWkVEKG8pKSB7CisrICAgIGlmIChQ eU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2MobykpIHJldHVybjsKKysgIH0KKysgICNl bmRpZgorKyAgUHlPYmplY3RfR0NfVW5UcmFjayhvKTsKKysgIFB5X0NMRUFSKHAtPnByZWZpeCk7 CisrICBQeV9DTEVBUihwLT5sZXZlbCk7CisrICBQeV9DTEVBUihwLT50ZXh0KTsKKysgIFB5X0NM RUFSKHAtPmxvZ19sZXZlbCk7CisrICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOworK30KKyAK Ky0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0Vu ZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwg dHVwbGUgX19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5eF9z dGF0ZVswXTsgX19weXhfcmVzdWx0LnJlYXNvbiA9IF9fcHl4X3N0YXRlWzFdCistICogICAgIGlm IGxlbihfX3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9f Jyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIF9fcHl4X3Jlc3Vs dC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMl0pCistICovCisrc3RhdGljIGludCBfX3B5 eF90cF90cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZShQeU9iamVjdCAq bywgdmlzaXRwcm9jIHYsIHZvaWQgKmEpIHsKKysgIGludCBlOworKyAgc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqcCA9IChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopbzsKKysgIGlmIChwLT5wcmVmaXgp IHsKKysgICAgZSA9ICgqdikocC0+cHJlZml4LCBhKTsgaWYgKGUpIHJldHVybiBlOworKyAgfQor KyAgaWYgKHAtPmxldmVsKSB7CisrICAgIGUgPSAoKnYpKHAtPmxldmVsLCBhKTsgaWYgKGUpIHJl dHVybiBlOworKyAgfQorKyAgaWYgKHAtPnRleHQpIHsKKysgICAgZSA9ICgqdikocC0+dGV4dCwg YSk7IGlmIChlKSByZXR1cm4gZTsKKysgIH0KKysgIGlmIChwLT5sb2dfbGV2ZWwpIHsKKysgICAg ZSA9ICgqdikocC0+bG9nX2xldmVsLCBhKTsgaWYgKGUpIHJldHVybiBlOworICAgfQorKyAgcmV0 dXJuIDA7CisrfQorIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKKy0gKiAgICAgICAgIF9f cHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWRfX3NldF9zdGF0ZSg8RW5kT2ZGaWxlUmVhY2hl ZD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3Vs dAorLSAqIGNkZWYgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZF9fc2V0X3N0YXRlKEVu ZE9mRmlsZVJlYWNoZWQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX19weXhfcmVzdWx0LmVycm9yID0gX19weXhf c3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5yZWFzb24gPSBfX3B5eF9zdGF0ZVsxXQorLSAqICAgICBp ZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3Rf XycpOgorLSAqLworK3N0YXRpYyBpbnQgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UoUHlPYmplY3QgKm8pIHsKKysgIFB5T2JqZWN0KiB0bXA7CisrICBzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpwID0gKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKilvOworKyAgdG1w ID0gKChQeU9iamVjdCopcC0+cHJlZml4KTsKKysgIHAtPnByZWZpeCA9IFB5X05vbmU7IFB5X0lO Q1JFRihQeV9Ob25lKTsKKysgIFB5X1hERUNSRUYodG1wKTsKKysgIHRtcCA9ICgoUHlPYmplY3Qq KXAtPmxldmVsKTsKKysgIHAtPmxldmVsID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwor KyAgUHlfWERFQ1JFRih0bXApOworKyAgdG1wID0gKChQeU9iamVjdCopcC0+dGV4dCk7CisrICBw LT50ZXh0ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworKyAgUHlfWERFQ1JFRih0bXAp OworKyAgdG1wID0gKChQeU9iamVjdCopcC0+bG9nX2xldmVsKTsKKysgIHAtPmxvZ19sZXZlbCA9 IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIFB5X1hERUNSRUYodG1wKTsKKysgIHJl dHVybiAwOworK30KKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9 IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gIGdvdG8gX19weXhfTDA7CistICBf X3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfOCk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5s aWJzLm1wdi5fX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3RhdGUiLCBfX3B5 eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAw OworLSAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9S ZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworK3N0YXRpYyBQeU9i amVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3By ZWZpeChQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CisrICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzFfX2dldF9f KG8pOworIH0KKyAKKy0vKiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcHl4X3VucGlj a2xlX0lucHV0RGlzcGF0Y2goX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhf c3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0 IF9fcHl4X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAq LworLQorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfOV9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2goUHlPYmpl Y3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdzLCBQeU9iamVjdCAqX19weXhfa3dk cyk7IC8qcHJvdG8qLworLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZGVmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl85X19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCA9IHsiX19weXhfdW5waWNr bGVfSW5wdXREaXNwYXRjaCIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtl eXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl85X19weXhfdW5waWNrbGVfSW5w dXREaXNwYXRjaCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9OworLXN0YXRpYyBQeU9i amVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzlfX3B5eF91bnBpY2tsZV9JbnB1 dERpc3BhdGNoKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlP YmplY3QgKl9fcHl4X2t3ZHMpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3R5cGUgPSAw OworLSAgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtOworLSAgUHlPYmplY3QgKl9fcHl4X3Zf X19weXhfc3RhdGUgPSAwOworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFy ICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBQ eU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2gg KHdyYXBwZXIpIiwgMCk7CistICB7CistICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJn bmFtZXNbXSA9IHsmX19weXhfbl9zX3B5eF90eXBlLCZfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCZf X3B5eF9uX3NfcHl4X3N0YXRlLDB9OworLSAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCww fTsKKy0gICAgaWYgKHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7CistICAgICAgUHlfc3NpemVfdCBr d19hcmdzOworLSAgICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9T SVpFKF9fcHl4X2FyZ3MpOworLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKy0gICAgICAgIGNh c2UgIDM6IHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CistICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQ eVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOworLSAgICAgICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5 eF9hcmdzLCAwKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2Ug IDA6IGJyZWFrOworLSAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJv cjsKKy0gICAgICB9CistICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOwor LSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKy0gICAgICAgIGNhc2UgIDA6CistICAgICAgICBp ZiAobGlrZWx5KCh2YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2Rz LCBfX3B5eF9uX3NfcHl4X3R5cGUpKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSBn b3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OworLSAgICAgICAgY2FzZSAgMToKKy0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9f UHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhfY2hlY2tzdW0p KSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSB7CistICAgICAgICAgIF9fUHl4X1Jh aXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoIiwgMSwgMywg MywgMSk7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKy0gICAgICAgIH0KKy0gICAg ICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDI6CistICAgICAgICBpZiAo bGlrZWx5KCh2YWx1ZXNbMl0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBf X3B5eF9uX3NfcHl4X3N0YXRlKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVsc2Ugewor LSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfSW5w dXREaXNwYXRjaCIsIDEsIDMsIDMsIDIpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3Ip CistICAgICAgICB9CistICAgICAgfQorLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4gMCkp IHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19w eXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9fcHl4X3Vu cGlja2xlX0lucHV0RGlzcGF0Y2giKSA8IDApKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJy b3IpCistICAgICAgfQorLSAgICB9IGVsc2UgaWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJn cykgIT0gMykgeworLSAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgIH0g ZWxzZSB7CistICAgICAgdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAw KTsKKy0gICAgICB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOwor LSAgICAgIHZhbHVlc1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CistICAg IH0KKy0gICAgX19weXhfdl9fX3B5eF90eXBlID0gdmFsdWVzWzBdOworLSAgICBfX3B5eF92X19f cHl4X2NoZWNrc3VtID0gX19QeXhfUHlJbnRfQXNfbG9uZyh2YWx1ZXNbMV0pOyBpZiAodW5saWtl bHkoKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gPT0gKGxvbmcpLTEpICYmIFB5RXJyX09jY3VycmVk KCkpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCistICAgIF9fcHl4X3ZfX19weXhf c3RhdGUgPSB2YWx1ZXNbMl07Cisrc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfcHJlZml4KFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwg Q1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CisrICBpZiAodikgeworKyAgICByZXR1cm4gX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzNfX3NldF9fKG8s IHYpOworKyAgfQorKyAgZWxzZSB7CisrICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTBMb2dNZXNzYWdlXzZwcmVmaXhfNV9fZGVsX18obyk7CisgICB9CistICBnb3Rv IF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworLSAgX19weXhfTDVfYXJndHVwbGVf ZXJyb3I6OworLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3VucGlja2xlX0lu cHV0RGlzcGF0Y2giLCAxLCAzLCAzLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19Q WVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorLSAgX19weXhfTDNfZXJyb3I6OworLSAgX19Q eXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfSW5wdXRE aXNwYXRjaCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOwor LSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gTlVMTDsKKy0gIF9f cHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3IgPSBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfOF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2goX19weXhf c2VsZiwgX19weXhfdl9fX3B5eF90eXBlLCBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBfX3B5eF92 X19fcHl4X3N0YXRlKTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19QeXhf UmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKyB9CisgCistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOF9fcHl4X3VucGlj a2xlX0lucHV0RGlzcGF0Y2goQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlP YmplY3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQ eU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19w eXhfUGlja2xlRXJyb3IgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfcmVzdWx0ID0g MDsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFy YXRpb25zCistICBpbnQgX19weXhfdF8xOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7 CistICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQg PSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBpbnQgX19weXhfdF82 OworLSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFt ZSA9IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCIsIDApOworLQorLSAgLyog Iih0cmVlIGZyYWdtZW50KSI6NAorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJv cgorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKy0gKiAgICAgaWYgX19weXhfY2hl Y2tzdW0gIT0gMHhiZjY0MWE5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IK Ky0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tz dW1zICglcyB2cyAweGJmNjQxYTkgPSAoYXJnMCwgdHlwZSkpIiAlIF9fcHl4X2NoZWNrc3VtKQor LSAqLworLSAgX19weXhfdF8xID0gKChfX3B5eF92X19fcHl4X2NoZWNrc3VtICE9IDB4YmY2NDFh OSkgIT0gMCk7CistICBpZiAoX19weXhfdF8xKSB7CistCistICAgIC8qICIodHJlZSBmcmFnbWVu dCkiOjUKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9fcHl4 X2NoZWNrc3VtICE9IDB4YmY2NDFhOToKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQ aWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNo ZWNrc3VtcyAoJXMgdnMgMHhiZjY0MWE5ID0gKGFyZzAsIHR5cGUpKSIgJSBfX3B5eF9jaGVja3N1 bSkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gSW5wdXREaXNwYXRjaC5fX25ld19fKF9fcHl4X3R5 cGUpCistICovCistICAgIF9fcHl4X3RfMiA9IFB5TGlzdF9OZXcoMSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19QaWNrbGVFcnJv cik7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKy0gICAgUHlM aXN0X1NFVF9JVEVNKF9fcHl4X3RfMiwgMCwgX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKy0gICAg X19weXhfdF8zID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc19waWNrbGUsIF9fcHl4X3RfMiwgLTEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJv cikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9JbXBvcnRGcm9t KF9fcHl4X3RfMywgX19weXhfbl9zX1BpY2tsZUVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzIpOworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdl9f X3B5eF9QaWNrbGVFcnJvciA9IF9fcHl4X3RfMjsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Mik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworLQorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo2CistICogICAgIGlmIF9fcHl4 X2NoZWNrc3VtICE9IDB4YmY2NDFhOToKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQ aWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICAgICAgcmFpc2UgX19weXhf UGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4YmY2NDFhOSA9IChh cmcwLCB0eXBlKSkiICUgX19weXhfY2hlY2tzdW0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gSW5wdXREaXNwYXRjaC5fX25ld19fKF9fcHl4X3R5 cGUpCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorLSAqLworLSAgICBfX3B5 eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2xvbmcoX19weXhfdl9fX3B5eF9jaGVja3N1bSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQor LSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF80ID0gX19QeXhfUHlT dHJpbmdfRm9ybWF0KF9fcHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4YmYs IF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEsIDYsIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKy0gICAgX19weXhfdF8yID0gX19weXhfdl9fX3B5eF9Q aWNrbGVFcnJvcjsgX19weXhfdF81ID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICAgIF9f cHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgICAgaWYgKGxpa2Vs eShfX3B5eF90XzUpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9H RVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUp OworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JF Rl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4 X3RfMyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwg X19weXhfdF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90 XzIsIF9fcHl4X3RfNCk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81 ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAg IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9y KQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMywgMCwgMCwg MCk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICBf X1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9n ZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfbGV2ZWwoUHlPYmplY3Qg Km8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworKyAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzFfX2dldF9fKG8pOworK30KKyAKKy0g ICAgLyogIih0cmVlIGZyYWdtZW50KSI6NAorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNr bGVFcnJvcgorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKy0gKiAgICAgaWYgX19w eXhfY2hlY2tzdW0gIT0gMHhiZjY0MWE5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xl RXJyb3IKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUg Y2hlY2tzdW1zICglcyB2cyAweGJmNjQxYTkgPSAoYXJnMCwgdHlwZSkpIiAlIF9fcHl4X2NoZWNr c3VtKQorLSAqLworK3N0YXRpYyBpbnQgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTBMb2dNZXNzYWdlX2xldmVsKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9OX1VO VVNFRCB2b2lkICp4KSB7CisrICBpZiAodikgeworKyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV81bGV2ZWxfM19fc2V0X18obywgdik7CisgICB9 CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo3CistICogICAgICAgICBmcm9tIHBpY2tsZSBp bXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgICAgIHJhaXNl IF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGJmNjQx YTkgPSAoYXJnMCwgdHlwZSkpIiAlIF9fcHl4X2NoZWNrc3VtKQorLSAqICAgICBfX3B5eF9yZXN1 bHQgPSBJbnB1dERpc3BhdGNoLl9fbmV3X18oX19weXhfdHlwZSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKy0gKiAgICAg ICAgIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZSg8SW5wdXREaXNwYXRj aD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4 X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9JbnB1dERpc3BhdGNoKSwgX19weXhfbl9zX25ldyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfMik7CistICBfX3B5eF90XzQgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAg X19weXhfdF80ID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKy0gICAgaWYgKGxpa2Vs eShfX3B5eF90XzQpKSB7CistICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VU X0ZVTkNUSU9OKF9fcHl4X3RfMik7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7Cist ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9f cHl4X3RfMiwgZnVuY3Rpb24pOworLSAgICB9CisrICBlbHNlIHsKKysgICAgcmV0dXJuIF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNWxldmVsXzVfX2RlbF9fKG8p OworICAgfQorLSAgX19weXhfdF8zID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3ZfX19weXhfdHlwZSkgOiBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9fX3B5eF90eXBlKTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKKy0gIF9fcHl4X3ZfX19weXhfcmVzdWx0ID0gX19weXhfdF8zOworLSAgX19weXhfdF8zID0g MDsKKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4 X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGJmNjQxYTkgPSAo YXJnMCwgdHlwZSkpIiAlIF9fcHl4X2NoZWNrc3VtKQorLSAqICAgICBfX3B5eF9yZXN1bHQgPSBJ bnB1dERpc3BhdGNoLl9fbmV3X18oX19weXhfdHlwZSkKKy0gKiAgICAgaWYgX19weXhfc3RhdGUg aXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIF9f cHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZSg8SW5wdXREaXNwYXRjaD4gX19w eXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorLSAq LworLSAgX19weXhfdF8xID0gKF9fcHl4X3ZfX19weXhfc3RhdGUgIT0gUHlfTm9uZSk7CistICBf X3B5eF90XzYgPSAoX19weXhfdF8xICE9IDApOworLSAgaWYgKF9fcHl4X3RfNikgeworK30KKyAK Ky0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6OQorLSAqICAgICBfX3B5eF9yZXN1bHQgPSBJbnB1 dERpc3BhdGNoLl9fbmV3X18oX19weXhfdHlwZSkKKy0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMg bm90IE5vbmU6CistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoX19zZXRf c3RhdGUoPElucHV0RGlzcGF0Y2g+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorLSAqIGNk ZWYgX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKElucHV0RGlzcGF0Y2gg X19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CistICovCistICAgIGlmICghKGxpa2Vs eShQeVR1cGxlX0NoZWNrRXhhY3QoX19weXhfdl9fX3B5eF9zdGF0ZSkpfHwoKF9fcHl4X3ZfX19w eXhfc3RhdGUpID09IFB5X05vbmUpfHwoUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkV4 cGVjdGVkICUuMTZzLCBnb3QgJS4yMDBzIiwgInR1cGxlIiwgUHlfVFlQRShfX3B5eF92X19fcHl4 X3N0YXRlKS0+dHBfbmFtZSksIDApKSkgX19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQor LSAgICBfX3B5eF90XzMgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBp Y2tsZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCAoKFB5 T2JqZWN0KilfX3B5eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkg X19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8zKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7Cisrc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01l c3NhZ2VfdGV4dChQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CisrICByZXR1 cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV80dGV4dF8xX19n ZXRfXyhvKTsKKyt9CisgCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKy0gKiAgICAgICAg IHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAw eGJmNjQxYTkgPSAoYXJnMCwgdHlwZSkpIiAlIF9fcHl4X2NoZWNrc3VtKQorLSAqICAgICBfX3B5 eF9yZXN1bHQgPSBJbnB1dERpc3BhdGNoLl9fbmV3X18oX19weXhfdHlwZSkKKy0gKiAgICAgaWYg X19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZSg8SW5wdXRE aXNwYXRjaD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4 X3Jlc3VsdAorLSAqLworK3N0YXRpYyBpbnQgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlX3RleHQoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2LCBDWVRIT05f VU5VU0VEIHZvaWQgKngpIHsKKysgIGlmICh2KSB7CisrICAgIHJldHVybiBfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0XzNfX3NldF9fKG8sIHYpOworICAg fQorKyAgZWxzZSB7CisrICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTBMb2dNZXNzYWdlXzR0ZXh0XzVfX2RlbF9fKG8pOworKyAgfQorK30KKyAKKy0gIC8qICIodHJl ZSBmcmFnbWVudCkiOjEwCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorLSAq ICAgICAgICAgX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKDxJbnB1dERp c3BhdGNoPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19weXhf cmVzdWx0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiBjZGVmIF9fcHl4X3VucGlj a2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZShJbnB1dERpc3BhdGNoIF9fcHl4X3Jlc3VsdCwg dHVwbGUgX19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5eF9yZXN1bHQuYXJnMCA9IF9fcHl4X3N0 YXRlWzBdOyBfX3B5eF9yZXN1bHQudHlwZSA9IF9fcHl4X3N0YXRlWzFdCistICovCistICBfX1B5 eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0 KTsKKy0gIF9fcHl4X3IgPSBfX3B5eF92X19fcHl4X3Jlc3VsdDsKKy0gIGdvdG8gX19weXhfTDA7 CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcHl4X3VucGlja2xlX0lu cHV0RGlzcGF0Y2goX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4 X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqLworK3N0 YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dN ZXNzYWdlX2xvZ19sZXZlbChQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Cisr ICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9n X2xldmVsXzFfX2dldF9fKG8pOworK30KKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor LSAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworLSAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0 ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9IE5VTEw7CistICBf X3B5eF9MMDo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IpOwor LSAgX19QeXhfWERFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdCk7CistICBfX1B5eF9YR0lWRVJF RihfX3B5eF9yKTsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJu IF9fcHl4X3I7Cisrc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfbG9nX2xldmVsKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9O X1VOVVNFRCB2b2lkICp4KSB7CisrICBpZiAodikgeworKyAgICByZXR1cm4gX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzNfX3NldF9fKG8sIHYp OworKyAgfQorKyAgZWxzZSB7CisrICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlXzlsb2dfbGV2ZWxfNV9fZGVsX18obyk7CisrICB9CisgfQorIAor LS8qICIodHJlZSBmcmFnbWVudCkiOjExCistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9JbnB1 dERpc3BhdGNoX19zZXRfc3RhdGUoPElucHV0RGlzcGF0Y2g+IF9fcHl4X3Jlc3VsdCwgX19weXhf c3RhdGUpCistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlj a2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZShJbnB1dERpc3BhdGNoIF9fcHl4X3Jlc3VsdCwg dHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg IF9fcHl4X3Jlc3VsdC5hcmcwID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC50eXBlID0g X19weXhfc3RhdGVbMV0KKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0 dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKy0gKi8KKytzdGF0aWMgUHlNZXRob2REZWYg X19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZVtdID0geworKyAg eyJfX3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTBMb2dNZXNzYWdlXzFfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9 LAorKyAgeyJfX3NldHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfM19fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhf TywgMH0sCisrICB7MCwgMCwgMCwgMH0KKyt9OworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0 X3N0YXRlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0 Y2ggKl9fcHl4X3ZfX19weXhfcmVzdWx0LCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkg eworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJh dGlvbnMKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzEgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfMjsK Ky0gIFB5X3NzaXplX3QgX19weXhfdF8zOworLSAgaW50IF9fcHl4X3RfNDsKKy0gIGludCBfX3B5 eF90XzU7CistICBQeU9iamVjdCAqX19weXhfdF82ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5 eF90XzcgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfOCA9IE5VTEw7CistICBpbnQgX19w eXhfbGluZW5vID0gMDsKKy0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0g IGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUiLCAwKTsKKytzdGF0aWMgc3Ry dWN0IFB5R2V0U2V0RGVmIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01l c3NhZ2VbXSA9IHsKKysgIHsoY2hhciAqKSJwcmVmaXgiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfcHJlZml4LCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfcHJlZml4LCAoY2hhciAqKTAsIDB9LAorKyAgeyhj aGFyICopImxldmVsIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dN ZXNzYWdlX2xldmVsLCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01l c3NhZ2VfbGV2ZWwsIChjaGFyICopMCwgMH0sCisrICB7KGNoYXIgKikidGV4dCIsIF9fcHl4X2dl dHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV90ZXh0LCBfX3B5eF9zZXRw cm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfdGV4dCwgKGNoYXIgKikwLCAw fSwKKysgIHsoY2hhciAqKSJsb2dfbGV2ZWwiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xMExvZ01lc3NhZ2VfbG9nX2xldmVsLCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfbG9nX2xldmVsLCAoY2hhciAqKTAsIDB9LAorKyAgezAs IDAsIDAsIDAsIDB9CisrfTsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEyCistICogICAg IHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0 Y2hfX3NldF9zdGF0ZShJbnB1dERpc3BhdGNoIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3Rh dGUpOgorLSAqICAgICBfX3B5eF9yZXN1bHQuYXJnMCA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9y ZXN1bHQudHlwZSA9IF9fcHl4X3N0YXRlWzFdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0 LCAnX19kaWN0X18nKToKKy0gKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUo X19weXhfc3RhdGVbMl0pCistICovCistICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0 ZSA9PSBQeV9Ob25lKSkgeworLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAi J05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsKKy0gICAgX19QWVhfRVJS KDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKytzdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgPSB7CisrICBQeVZhck9iamVjdF9IRUFE X0lOSVQoMCwgMCkKKysgICJ2aWRjdXR0ZXIubGlicy5tcHYuTG9nTWVzc2FnZSIsIC8qdHBfbmFt ZSovCisrICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9n TWVzc2FnZSksIC8qdHBfYmFzaWNzaXplKi8KKysgIDAsIC8qdHBfaXRlbXNpemUqLworKyAgX19w eXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSwgLyp0cF9kZWFs bG9jKi8KKysgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKysgIDAsIC8qdHBfcHJp bnQqLworKyAgI2VuZGlmCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorKyAg MCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCisrICAjZW5kaWYKKysgIDAsIC8qdHBfZ2V0YXR0 ciovCisrICAwLCAvKnRwX3NldGF0dHIqLworKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisr ICAwLCAvKnRwX2NvbXBhcmUqLworKyAgI2VuZGlmCisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+ PSAzCisrICAwLCAvKnRwX2FzX2FzeW5jKi8KKysgICNlbmRpZgorKyAgMCwgLyp0cF9yZXByKi8K KysgIDAsIC8qdHBfYXNfbnVtYmVyKi8KKysgIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworKyAgMCwg Lyp0cF9hc19tYXBwaW5nKi8KKysgIDAsIC8qdHBfaGFzaCovCisrICAwLCAvKnRwX2NhbGwqLwor KyAgMCwgLyp0cF9zdHIqLworKyAgMCwgLyp0cF9nZXRhdHRybyovCisrICAwLCAvKnRwX3NldGF0 dHJvKi8KKysgIDAsIC8qdHBfYXNfYnVmZmVyKi8KKysgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9U UEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1Nf SEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8q dHBfZmxhZ3MqLworKyAgIkRhdGEgZmllbGQgZm9yIE1QVl9FVkVOVF9MT0dfTUVTU0FHRSBldmVu dHMuXG5cbiAgICBXcmFwczogbXB2X2V2ZW50X2xvZ19tZXNzYWdlXG4gICAgIiwgLyp0cF9kb2Mq LworKyAgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2Us IC8qdHBfdHJhdmVyc2UqLworKyAgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2 X0xvZ01lc3NhZ2UsIC8qdHBfY2xlYXIqLworKyAgMCwgLyp0cF9yaWNoY29tcGFyZSovCisrICAw LCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKysgIDAsIC8qdHBfaXRlciovCisrICAwLCAvKnRwX2l0 ZXJuZXh0Ki8KKysgIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3Nh Z2UsIC8qdHBfbWV0aG9kcyovCisrICAwLCAvKnRwX21lbWJlcnMqLworKyAgX19weXhfZ2V0c2V0 c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSwgLyp0cF9nZXRzZXQqLworKyAgMCwg Lyp0cF9iYXNlKi8KKysgIDAsIC8qdHBfZGljdCovCisrICAwLCAvKnRwX2Rlc2NyX2dldCovCisr ICAwLCAvKnRwX2Rlc2NyX3NldCovCisrICAwLCAvKnRwX2RpY3RvZmZzZXQqLworKyAgMCwgLyp0 cF9pbml0Ki8KKysgIDAsIC8qdHBfYWxsb2MqLworKyAgX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Mb2dNZXNzYWdlLCAvKnRwX25ldyovCisrICAwLCAvKnRwX2ZyZWUqLworKyAg MCwgLyp0cF9pc19nYyovCisrICAwLCAvKnRwX2Jhc2VzKi8KKysgIDAsIC8qdHBfbXJvKi8KKysg IDAsIC8qdHBfY2FjaGUqLworKyAgMCwgLyp0cF9zdWJjbGFzc2VzKi8KKysgIDAsIC8qdHBfd2Vh a2xpc3QqLworKyAgMCwgLyp0cF9kZWwqLworKyAgMCwgLyp0cF92ZXJzaW9uX3RhZyovCisrICAj aWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBhMQorKyAgMCwgLyp0cF9maW5hbGl6ZSovCisr ICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGIxICYmICghQ1lUSE9O X0NPTVBJTElOR19JTl9QWVBZIHx8IFBZUFlfVkVSU0lPTl9OVU0gPj0gMHgwNzAzMDgwMCkKKysg IDAsIC8qdHBfdmVjdG9yY2FsbCovCisrICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+ PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAorKyAgMCwgLyp0cF9w cmludCovCisrICAjZW5kaWYKKysgICNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYgUFlf VkVSU0lPTl9IRVggPj0gMHgwMzA5MDAwMAorKyAgMCwgLyp0cF9weXB5X2ZsYWdzKi8KKysgICNl bmRpZgorK307Cisrc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Qcm9wZXJ0eSBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5OworKworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eShQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmEs IENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKKysgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpwOworKyAgUHlPYmplY3QgKm87CisrICBpZiAobGlr ZWx5KCh0LT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09IDApKSB7CisrICAg IG8gPSAoKnQtPnRwX2FsbG9jKSh0LCAwKTsKKysgIH0gZWxzZSB7CisrICAgIG8gPSAoUHlPYmpl Y3QgKikgUHlCYXNlT2JqZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5X3R1cGxlLCAwKTsK KyAgIH0KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5 eF9zdGF0ZSwgMCwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7 CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPmFyZzApOworLSAgX19QeXhf REVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5hcmcwKTsKKy0gIF9fcHl4X3ZfX19weXhfcmVz dWx0LT5hcmcwID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKy0gIGlmICh1bmxpa2Vs eShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7CistICAgIFB5RXJyX1NldFN0cmlu ZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJs ZSIpOworLSAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlr ZWx5KCFvKSkgcmV0dXJuIDA7CisrICBwID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Qcm9wZXJ0eSAqKW8pOworKyAgcC0+X19weXhfdnRhYiA9IF9fcHl4X3Z0YWJw dHJfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5OworKyAgcC0+bmFtZSA9IFB5X05vbmU7 IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIHAtPmRhdGEgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlf Tm9uZSk7CisrICByZXR1cm4gbzsKKyt9CisrCisrc3RhdGljIHZvaWQgX19weXhfdHBfZGVhbGxv Y185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkoUHlPYmplY3QgKm8pIHsKKysgIHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpwID0gKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopbzsKKysgICNpZiBDWVRI T05fVVNFX1RQX0ZJTkFMSVpFCisrICBpZiAodW5saWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlf VFlQRShvKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBFKG8pLT50cF9maW5h bGl6ZSkgJiYgIV9QeUdDX0ZJTkFMSVpFRChvKSkgeworKyAgICBpZiAoUHlPYmplY3RfQ2FsbEZp bmFsaXplckZyb21EZWFsbG9jKG8pKSByZXR1cm47CisgICB9CistICBfX3B5eF90XzEgPSBfX1B5 eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3RhdGUsIDEsIGxvbmcsIDEsIF9fUHl4 X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR09UUkVGKF9fcHl4X3Zf X19weXhfcmVzdWx0LT50eXBlKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3Vs dC0+dHlwZSk7CistICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+dHlwZSA9IF9fcHl4X3RfMTsKKy0g IF9fcHl4X3RfMSA9IDA7CisrICAjZW5kaWYKKysgIFB5T2JqZWN0X0dDX1VuVHJhY2sobyk7Cisr ICBQeV9DTEVBUihwLT5uYW1lKTsKKysgIFB5X0NMRUFSKHAtPmRhdGEpOworKyAgKCpQeV9UWVBF KG8pLT50cF9mcmVlKShvKTsKKyt9CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMworLSAq IGNkZWYgX19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaF9fc2V0X3N0YXRlKElucHV0RGlzcGF0 Y2ggX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CistICogICAgIF9fcHl4X3Jlc3Vs dC5hcmcwID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC50eXBlID0gX19weXhfc3RhdGVb MV0KKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVz dWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVsyXSkKKy0gKi8KKy0g IGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7CistICAgIFB5 RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJvYmplY3Qgb2YgdHlwZSAnTm9uZVR5cGUn IGhhcyBubyBsZW4oKSIpOworLSAgICBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQor K3N0YXRpYyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5KFB5T2JqZWN0ICpvLCB2aXNpdHByb2Mgdiwgdm9pZCAqYSkgeworKyAgaW50IGU7CisrICBz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqcCA9IChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKW87CisrICBpZiAo cC0+bmFtZSkgeworKyAgICBlID0gKCp2KShwLT5uYW1lLCBhKTsgaWYgKGUpIHJldHVybiBlOwor ICAgfQorLSAgX19weXhfdF8zID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF92X19fcHl4X3N0YXRl KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJS KDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfNCA9ICgoX19weXhfdF8zID4gMikg IT0gMCk7CistICBpZiAoX19weXhfdF80KSB7CistICB9IGVsc2UgeworLSAgICBfX3B5eF90XzIg PSBfX3B5eF90XzQ7CistICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworKyAgaWYg KHAtPmRhdGEpIHsKKysgICAgZSA9ICgqdikocC0+ZGF0YSwgYSk7IGlmIChlKSByZXR1cm4gZTsK KyAgIH0KKy0gIF9fcHl4X3RfNCA9IF9fUHl4X0hhc0F0dHIoKChQeU9iamVjdCAqKV9fcHl4X3Zf X19weXhfcmVzdWx0KSwgX19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoX19weXhfdF80ID09 ICgoaW50KS0xKSkpIF9fUFlYX0VSUigxLCAxMywgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90 XzUgPSAoX19weXhfdF80ICE9IDApOworLSAgX19weXhfdF8yID0gX19weXhfdF81OworLSAgX19w eXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKKy0gIGlmIChfX3B5eF90XzIpIHsKKysgIHJldHVybiAw OworK30KKyAKKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTQKKy0gKiAgICAgX19weXhfcmVz dWx0LmFyZzAgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LnR5cGUgPSBfX3B5eF9zdGF0 ZVsxXQorLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9y ZXN1bHQsICdfX2RpY3RfXycpOgorLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVw ZGF0ZShfX3B5eF9zdGF0ZVsyXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqLwor LSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilf X3B5eF92X19fcHl4X3Jlc3VsdCksIF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RS RUYoX19weXhfdF82KTsKKy0gICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF90XzYsIF9fcHl4X25fc191cGRhdGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykp IF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzcpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0g ICAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKy0gICAg ICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMg bm90IHN1YnNjcmlwdGFibGUiKTsKKy0gICAgICBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vy cm9yKQorLSAgICB9CistICAgIF9fcHl4X3RfNiA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19w eXhfdl9fX3B5eF9zdGF0ZSwgMiwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAw LCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgX19weXhfdF84ID0g TlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2Rf Q2hlY2soX19weXhfdF83KSkpIHsKKy0gICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VM RihfX3B5eF90XzcpOworLSAgICAgIGlmIChsaWtlbHkoX19weXhfdF84KSkgeworLSAgICAgICAg UHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNyk7Cist ICAgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF84KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihm dW5jdGlvbik7CistICAgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNywgZnVuY3Rpb24p OworLSAgICAgIH0KKy0gICAgfQorLSAgICBfX3B5eF90XzEgPSAoX19weXhfdF84KSA/IF9fUHl4 X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdF82KSA6IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF83LCBfX3B5eF90XzYpOworLSAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7CistICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0g ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Cisrc3RhdGljIGludCBf X3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkoUHlPYmplY3QgKm8p IHsKKysgIFB5T2JqZWN0KiB0bXA7CisrICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Qcm9wZXJ0eSAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eSAqKW87CisrICB0bXAgPSAoKFB5T2JqZWN0KilwLT5uYW1lKTsKKysgIHAt Pm5hbWUgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CisrICBQeV9YREVDUkVGKHRtcCk7 CisrICB0bXAgPSAoKFB5T2JqZWN0KilwLT5kYXRhKTsKKysgIHAtPmRhdGEgPSBQeV9Ob25lOyBQ eV9JTkNSRUYoUHlfTm9uZSk7CisrICBQeV9YREVDUkVGKHRtcCk7CisrICByZXR1cm4gMDsKKyt9 CisgCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjEzCistICogY2RlZiBfX3B5eF91bnBpY2ts ZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUoSW5wdXREaXNwYXRjaCBfX3B5eF9yZXN1bHQsIHR1 cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19weXhfcmVzdWx0LmFyZzAgPSBfX3B5eF9zdGF0 ZVswXTsgX19weXhfcmVzdWx0LnR5cGUgPSBfX3B5eF9zdGF0ZVsxXQorLSAqICAgICBpZiBsZW4o X19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBfX3B5eF9yZXN1bHQuX19k aWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzJdKQorLSAqLworK3N0YXRpYyBQeU9iamVjdCAqX19w eXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X25hbWUoUHlPYmplY3Qg Km8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworKyAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNG5hbWVfMV9fZ2V0X18obyk7CisrfQorKworK3N0YXRp YyBpbnQgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X25hbWUo UHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKysgIGlm ICh2KSB7CisrICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3Bl cnR5XzRuYW1lXzNfX3NldF9fKG8sIHYpOworKyAgfQorKyAgZWxzZSB7CisrICAgIHJldHVybiBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRuYW1lXzVfX2RlbF9fKG8p OworICAgfQorK30KKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjExCistICogICAgICAgICBf X3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUoPElucHV0RGlzcGF0Y2g+IF9f cHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0g KiBjZGVmIF9fcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2hfX3NldF9zdGF0ZShJbnB1dERpc3Bh dGNoIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIF9fcHl4X3Jlc3VsdC5hcmcwID0gX19weXhfc3RhdGVbMF07IF9f cHl4X3Jlc3VsdC50eXBlID0gX19weXhfc3RhdGVbMV0KKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0 YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKy0gKi8KKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9w ZXJ0eV9kYXRhKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKysgIHJldHVy biBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzFfX2dldF9f KG8pOworK30KKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfciA9IFB5 X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gIGdvdG8gX19weXhfTDA7CistICBfX3B5 eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfOCk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJz Lm1wdi5fX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoX19zZXRfc3RhdGUiLCBfX3B5eF9jbGlu ZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAwOworLSAg X19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworK3N0YXRpYyBpbnQgX19weXhf c2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X2RhdGEoUHlPYmplY3QgKm8s IFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKysgIGlmICh2KSB7CisrICAg IHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzNf X3NldF9fKG8sIHYpOworKyAgfQorKyAgZWxzZSB7CisrICAgIHJldHVybiBfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzRkYXRhXzVfX2RlbF9fKG8pOworKyAgfQorIH0K KyAKKy0vKiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcHl4X3VucGlja2xlX0xvZ01l c3NhZ2UoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2ts ZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqLworK3N0YXRpYyBQ eU1ldGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eVtd ID0geworKyAgeyJfX3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5XzFfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FS R1MsIDB9LAorKyAgeyJfX3NldHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfM19fc2V0c3RhdGVfY3l0aG9uX18sIE1F VEhfTywgMH0sCisrICB7MCwgMCwgMCwgMH0KKyt9OworIAorLS8qIFB5dGhvbiB3cmFwcGVyICov Cistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTFfX3B5 eF91bnBpY2tsZV9Mb2dNZXNzYWdlKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19w eXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlNZXRo b2REZWYgX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTFfX3B5eF91bnBpY2tsZV9M b2dNZXNzYWdlID0geyJfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlIiwgKFB5Q0Z1bmN0aW9uKSh2 b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzExX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09S RFMsIDB9OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzExX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZShQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKSB7CistICBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF90eXBlID0gMDsKKy0gIGxvbmcgX19weXhfdl9fX3B5eF9jaGVja3N1bTsKKy0g IFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlID0gMDsKKy0gIGludCBfX3B5eF9saW5lbm8g PSAwOworLSAgY29uc3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSAwOworLSAgX19QeXhfUmVmTmFu bnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBp Y2tsZV9Mb2dNZXNzYWdlICh3cmFwcGVyKSIsIDApOworLSAgeworLSAgICBzdGF0aWMgUHlPYmpl Y3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19weXhfdHlwZSwmX19weXhfbl9z X3B5eF9jaGVja3N1bSwmX19weXhfbl9zX3B5eF9zdGF0ZSwwfTsKKy0gICAgUHlPYmplY3QqIHZh bHVlc1szXSA9IHswLDAsMH07CistICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgeworLSAg ICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKy0gICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19hcmdz ID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdz KSB7CistICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4 X2FyZ3MsIDIpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAg MjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5VHVw bGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7 CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19weXhf TDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQorLSAgICAgIGt3X2FyZ3MgPSBQeURpY3RfU2l6 ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBjYXNl ICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dldEl0 ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF90eXBlKSkgIT0gMCkpIGt3X2FyZ3MtLTsK Ky0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKy0gICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6CistICAgICAgICBpZiAobGlrZWx5 KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9u X3NfcHl4X2NoZWNrc3VtKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVsc2UgeworLSAg ICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfTG9nTWVz c2FnZSIsIDEsIDMsIDMsIDEpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCistICAg ICAgICB9CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAyOgor LSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzJdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIo X19weXhfa3dkcywgX19weXhfbl9zX3B5eF9zdGF0ZSkpICE9IDApKSBrd19hcmdzLS07CistICAg ICAgICBlbHNlIHsKKy0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4 X3VucGlja2xlX0xvZ01lc3NhZ2UiLCAxLCAzLCAzLCAyKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4 X0wzX2Vycm9yKQorLSAgICAgICAgfQorLSAgICAgIH0KKy0gICAgICBpZiAodW5saWtlbHkoa3df YXJncyA+IDApKSB7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtl eXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3Ms ICJfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlIikgPCAwKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4 X0wzX2Vycm9yKQorLSAgICAgIH0KKy0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9f cHl4X2FyZ3MpICE9IDMpIHsKKy0gICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwor LSAgICB9IGVsc2UgeworLSAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhf YXJncywgMCk7CistICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdz LCAxKTsKKy0gICAgICB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIp OworLSAgICB9CistICAgIF9fcHl4X3ZfX19weXhfdHlwZSA9IHZhbHVlc1swXTsKKy0gICAgX19w eXhfdl9fX3B5eF9jaGVja3N1bSA9IF9fUHl4X1B5SW50X0FzX2xvbmcodmFsdWVzWzFdKTsgaWYg KHVubGlrZWx5KChfX3B5eF92X19fcHl4X2NoZWNrc3VtID09IChsb25nKS0xKSAmJiBQeUVycl9P Y2N1cnJlZCgpKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorLSAgICBfX3B5eF92 X19fcHl4X3N0YXRlID0gdmFsdWVzWzJdOworK3N0YXRpYyBzdHJ1Y3QgUHlHZXRTZXREZWYgX19w eXhfZ2V0c2V0c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHlbXSA9IHsKKysgIHsoY2hh ciAqKSJuYW1lIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5 X25hbWUsIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9uYW1l LCAoY2hhciAqKTAsIDB9LAorKyAgeyhjaGFyICopImRhdGEiLCBfX3B5eF9nZXRwcm9wXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfZGF0YSwgX19weXhfc2V0cHJvcF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfOFByb3BlcnR5X2RhdGEsIChjaGFyICopMCwgMH0sCisrICB7MCwgMCwgMCwg MCwgMH0KKyt9OworKworK3N0YXRpYyBQeVR5cGVPYmplY3QgX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUHJvcGVydHkgPSB7CisrICBQeVZhck9iamVjdF9IRUFEX0lOSVQoMCwgMCkK KysgICJ2aWRjdXR0ZXIubGlicy5tcHYuUHJvcGVydHkiLCAvKnRwX25hbWUqLworKyAgc2l6ZW9m KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSwgLyp0cF9i YXNpY3NpemUqLworKyAgMCwgLyp0cF9pdGVtc2l6ZSovCisrICBfX3B5eF90cF9kZWFsbG9jXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSwgLyp0cF9kZWFsbG9jKi8KKysgICNpZiBQWV9W RVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKysgIDAsIC8qdHBfcHJpbnQqLworKyAgI2VuZGlmCisr ICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorKyAgMCwgLyp0cF92ZWN0b3JjYWxs X29mZnNldCovCisrICAjZW5kaWYKKysgIDAsIC8qdHBfZ2V0YXR0ciovCisrICAwLCAvKnRwX3Nl dGF0dHIqLworKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAwLCAvKnRwX2NvbXBhcmUq LworKyAgI2VuZGlmCisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCisrICAwLCAvKnRwX2Fz X2FzeW5jKi8KKysgICNlbmRpZgorKyAgMCwgLyp0cF9yZXByKi8KKysgIDAsIC8qdHBfYXNfbnVt YmVyKi8KKysgIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworKyAgMCwgLyp0cF9hc19tYXBwaW5nKi8K KysgIDAsIC8qdHBfaGFzaCovCisrICAwLCAvKnRwX2NhbGwqLworKyAgMCwgLyp0cF9zdHIqLwor KyAgMCwgLyp0cF9nZXRhdHRybyovCisrICAwLCAvKnRwX3NldGF0dHJvKi8KKysgIDAsIC8qdHBf YXNfYnVmZmVyKi8KKysgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0hBVkVfVkVSU0lP Tl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVJ8UHlf VFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworKyAgIkRh dGEgZmllbGQgZm9yIE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UgYW5kIE1QVl9FVkVOVF9HRVRf UFJPUEVSVFlfUkVQTFkuXG5cbiAgICBXcmFwczogbXB2X2V2ZW50X3Byb3BlcnR5XG4gICAgIiwg Lyp0cF9kb2MqLworKyAgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X1By b3BlcnR5LCAvKnRwX3RyYXZlcnNlKi8KKysgIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Qcm9wZXJ0eSwgLyp0cF9jbGVhciovCisrICAwLCAvKnRwX3JpY2hjb21wYXJlKi8K KysgIDAsIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworKyAgMCwgLyp0cF9pdGVyKi8KKysgIDAsIC8q dHBfaXRlcm5leHQqLworKyAgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJv cGVydHksIC8qdHBfbWV0aG9kcyovCisrICAwLCAvKnRwX21lbWJlcnMqLworKyAgX19weXhfZ2V0 c2V0c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHksIC8qdHBfZ2V0c2V0Ki8KKysgIDAs IC8qdHBfYmFzZSovCisrICAwLCAvKnRwX2RpY3QqLworKyAgMCwgLyp0cF9kZXNjcl9nZXQqLwor KyAgMCwgLyp0cF9kZXNjcl9zZXQqLworKyAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8KKysgIDAsIC8q dHBfaW5pdCovCisrICAwLCAvKnRwX2FsbG9jKi8KKysgIF9fcHl4X3RwX25ld185dmlkY3V0dGVy XzRsaWJzXzNtcHZfUHJvcGVydHksIC8qdHBfbmV3Ki8KKysgIDAsIC8qdHBfZnJlZSovCisrICAw LCAvKnRwX2lzX2djKi8KKysgIDAsIC8qdHBfYmFzZXMqLworKyAgMCwgLyp0cF9tcm8qLworKyAg MCwgLyp0cF9jYWNoZSovCisrICAwLCAvKnRwX3N1YmNsYXNzZXMqLworKyAgMCwgLyp0cF93ZWFr bGlzdCovCisrICAwLCAvKnRwX2RlbCovCisrICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KKysgICNp ZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCisrICAwLCAvKnRwX2ZpbmFsaXplKi8KKysg ICNlbmRpZgorKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEgJiYgKCFDWVRIT05f Q09NUElMSU5HX0lOX1BZUFkgfHwgUFlQWV9WRVJTSU9OX05VTSA+PSAweDA3MDMwODAwKQorKyAg MCwgLyp0cF92ZWN0b3JjYWxsKi8KKysgICNlbmRpZgorKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49 IDB4MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCisrICAwLCAvKnRwX3By aW50Ki8KKysgICNlbmRpZgorKyAgI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fUFlQWSAmJiBQWV9W RVJTSU9OX0hFWCA+PSAweDAzMDkwMDAwCisrICAwLCAvKnRwX3B5cHlfZmxhZ3MqLworKyAgI2Vu ZGlmCisrfTsKKytzdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGli c18zbXB2X0V2ZW50IF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQ7Cisr Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2 ZW50KFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqaykgeworKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRXZlbnQgKnA7CisrICBQeU9iamVjdCAqbzsKKysgIGlmIChsaWtlbHkoKHQtPnRwX2Zs YWdzICYgUHlfVFBGTEFHU19JU19BQlNUUkFDVCkgPT0gMCkpIHsKKysgICAgbyA9ICgqdC0+dHBf YWxsb2MpKHQsIDApOworKyAgfSBlbHNlIHsKKysgICAgbyA9IChQeU9iamVjdCAqKSBQeUJhc2VP YmplY3RfVHlwZS50cF9uZXcodCwgX19weXhfZW1wdHlfdHVwbGUsIDApOworICAgfQorLSAgZ290 byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKy0gIF9fcHl4X0w1X2FyZ3R1cGxl X2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91bnBpY2tsZV9M b2dNZXNzYWdlIiwgMSwgMywgMywgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlY X0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKy0gIF9fcHl4X0wzX2Vycm9yOjsKKy0gIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX0xvZ01lc3Nh Z2UiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIE5VTEw7CistICBfX3B5eF9M NF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEwX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZShfX3B5eF9zZWxmLCBf X3B5eF92X19fcHl4X3R5cGUsIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIF9fcHl4X3ZfX19weXhf c3RhdGUpOworKyAgaWYgKHVubGlrZWx5KCFvKSkgcmV0dXJuIDA7CisrICBwID0gKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKW8pOworKyAgcC0+X19weXhf dnRhYiA9IF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50OworKyAgcC0+ ZGF0YSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIHAtPnJlcGx5X3VzZXJkYXRh ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworKyAgcmV0dXJuIG87CisrfQorIAorLSAg LyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKy0gIHJldHVybiBfX3B5eF9yOworK3N0YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZp ZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KFB5T2JqZWN0ICpvKSB7CisrICBzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKW87CisrICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5B TElaRQorKyAgaWYgKHVubGlrZWx5KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQ RkxBR1NfSEFWRV9GSU5BTElaRSkgJiYgUHlfVFlQRShvKS0+dHBfZmluYWxpemUpICYmICFfUHlH Q19GSU5BTElaRUQobykpIHsKKysgICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVh bGxvYyhvKSkgcmV0dXJuOworKyAgfQorKyAgI2VuZGlmCisrICBQeU9iamVjdF9HQ19VblRyYWNr KG8pOworKyAgUHlfQ0xFQVIocC0+ZGF0YSk7CisrICBQeV9DTEVBUihwLT5yZXBseV91c2VyZGF0 YSk7CisrICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOworIH0KKyAKKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMF9fcHl4X3VucGlja2xlX0xvZ01l c3NhZ2UoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4 X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF9zdGF0ZSkgeworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfUGlja2xlRXJy b3IgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfcmVzdWx0ID0gMDsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBp bnQgX19weXhfdF8xOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7CistICBQeU9iamVj dCAqX19weXhfdF8zID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAg UHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBpbnQgX19weXhfdF82OworLSAgaW50IF9f cHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7Cist ICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSIsIDApOworK3N0YXRpYyBpbnQgX19weXhfdHBfdHJh dmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KFB5T2JqZWN0ICpvLCB2aXNpdHByb2Mg diwgdm9pZCAqYSkgeworKyAgaW50IGU7CisrICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FdmVudCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCAqKW87CisrICBpZiAocC0+ZGF0YSkgeworKyAgICBlID0gKCp2KShwLT5kYXRh LCBhKTsgaWYgKGUpIHJldHVybiBlOworKyAgfQorKyAgaWYgKHAtPnJlcGx5X3VzZXJkYXRhKSB7 CisrICAgIGUgPSAoKnYpKHAtPnJlcGx5X3VzZXJkYXRhLCBhKTsgaWYgKGUpIHJldHVybiBlOwor KyAgfQorKyAgcmV0dXJuIDA7CisrfQorIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NAorLSAq ICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICBjZGVmIG9iamVjdCBf X3B5eF9yZXN1bHQKKy0gKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHg4Nzc0ZmFlOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQg UGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4 X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUgPSAo bGV2ZWwsIGxvZ19sZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pCistICov CistICBfX3B5eF90XzEgPSAoKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gIT0gMHg4Nzc0ZmFlKSAh PSAwKTsKKy0gIGlmIChfX3B5eF90XzEpIHsKKytzdGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudChQeU9iamVjdCAqbykgeworKyAgUHlPYmplY3QqIHRt cDsKKysgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpwID0g KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopbzsKKysgIHRt cCA9ICgoUHlPYmplY3QqKXAtPmRhdGEpOworKyAgcC0+ZGF0YSA9IFB5X05vbmU7IFB5X0lOQ1JF RihQeV9Ob25lKTsKKysgIFB5X1hERUNSRUYodG1wKTsKKysgIHRtcCA9ICgoUHlPYmplY3QqKXAt PnJlcGx5X3VzZXJkYXRhKTsKKysgIHAtPnJlcGx5X3VzZXJkYXRhID0gUHlfTm9uZTsgUHlfSU5D UkVGKFB5X05vbmUpOworKyAgUHlfWERFQ1JFRih0bXApOworKyAgcmV0dXJuIDA7CisrfQorIAor LSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo1CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jl c3VsdAorLSAqICAgICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweDg3NzRmYWU6CistICogICAgICAg ICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xl RXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ODc3NGZhZSA9IChsZXZlbCwg bG9nX2xldmVsLCBwcmVmaXgsIHRleHQpKSIgJSBfX3B5eF9jaGVja3N1bSkKKy0gKiAgICAgX19w eXhfcmVzdWx0ID0gTG9nTWVzc2FnZS5fX25ld19fKF9fcHl4X3R5cGUpCistICovCistICAgIF9f cHl4X3RfMiA9IFB5TGlzdF9OZXcoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK Ky0gICAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19QaWNrbGVFcnJvcik7CistICAgIF9fUHl4X0dJ VkVSRUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKy0gICAgUHlMaXN0X1NFVF9JVEVNKF9fcHl4 X3RfMiwgMCwgX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKy0gICAgX19weXhfdF8zID0gX19QeXhf SW1wb3J0KF9fcHl4X25fc19waWNrbGUsIF9fcHl4X3RfMiwgLTEpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIg PSAwOworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9JbXBvcnRGcm9tKF9fcHl4X3RfMywgX19weXhf bl9zX1BpY2tsZUVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwg NSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBf X1B5eF9JTkNSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvciA9 IF9fcHl4X3RfMjsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworK3N0YXRpYyBQ eU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2Vycm9y X3N0cihQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CisrICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF85ZXJyb3Jfc3RyXzFfX2dldF9fKG8p OworK30KKyAKKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6NgorLSAqICAgICBpZiBfX3B5eF9j aGVja3N1bSAhPSAweDg3NzRmYWU6CistICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlj a2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1Bp Y2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUgPSAobGV2 ZWwsIGxvZ19sZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gTG9nTWVzc2FnZS5f X25ld19fKF9fcHl4X3R5cGUpCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgor LSAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2xvbmcoX19weXhfdl9fX3B5 eF9jaGVja3N1bSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDYsIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhf dF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNr c3Vtc19zX3ZzXzB4ODcsIF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9f UHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKy0gICAgX19weXhfdF8yID0g X19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcjsgX19weXhfdF81ID0gTlVMTDsKKy0gICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworLSAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Cist ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzUpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAg ICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgICAgfQorLSAg ICB9CistICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfMiwgX19weXhfdF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfNCk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4 X3RfNCA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYs IF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X1JhaXNlKF9f cHl4X3RfMywgMCwgMCwgMCk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworLSAgICBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfbmFtZShQ eU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CisrICByZXR1cm4gX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80bmFtZV8xX19nZXRfXyhvKTsKKyt9CisgCist ICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlj a2xlRXJyb3IKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9f cHl4X2NoZWNrc3VtICE9IDB4ODc3NGZhZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2ts ZUVycm9yCistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxl IGNoZWNrc3VtcyAoJXMgdnMgMHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwg dGV4dCkpIiAlIF9fcHl4X2NoZWNrc3VtKQorLSAqLworLSAgfQorK3N0YXRpYyBQeU9iamVjdCAq X19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2lkKFB5T2JqZWN0ICpv LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKysgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8xX19nZXRfXyhvKTsKKyt9CisgCistICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjo3CistICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3Ig YXMgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9y KCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUgPSAobGV2ZWwsIGxvZ19s ZXZlbCwgcHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pCistICogICAgIF9fcHl4X3Jl c3VsdCA9IExvZ01lc3NhZ2UuX19uZXdfXyhfX3B5eF90eXBlKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorLSAqICAgICAg ICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKDxMb2dNZXNzYWdlPiBfX3B5 eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2UpLCBfX3B5eF9uX3NfbmV3KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMSwgNywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhf dF8yKTsKKy0gIF9fcHl4X3RfNCA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RT ICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICBfX3B5eF90XzQg PSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3Rf NCkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04o X19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF80KTsKKy0gICAgICBfX1B5 eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBm dW5jdGlvbik7CistICAgIH0KKytzdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80 bGlic18zbXB2XzVFdmVudF9pZChQeU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVT RUQgdm9pZCAqeCkgeworKyAgaWYgKHYpIHsKKysgICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl81RXZlbnRfMmlkXzNfX3NldF9fKG8sIHYpOworICAgfQorLSAgX19weXhf dF8zID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBf X3B5eF90XzQsIF9fcHl4X3ZfX19weXhfdHlwZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfMiwgX19weXhfdl9fX3B5eF90eXBlKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhf dF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Cist ICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gIF9fcHl4X3ZfX19w eXhfcmVzdWx0ID0gX19weXhfdF8zOworLSAgX19weXhfdF8zID0gMDsKKy0KKy0gIC8qICIodHJl ZSBmcmFnbWVudCkiOjgKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNv bXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDg3NzRmYWUgPSAobGV2ZWwsIGxvZ19sZXZlbCwg cHJlZml4LCB0ZXh0KSkiICUgX19weXhfY2hlY2tzdW0pCistICogICAgIF9fcHl4X3Jlc3VsdCA9 IExvZ01lc3NhZ2UuX19uZXdfXyhfX3B5eF90eXBlKQorLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBp cyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgX19w eXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKDxMb2dNZXNzYWdlPiBfX3B5eF9yZXN1 bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CistICovCistICBf X3B5eF90XzEgPSAoX19weXhfdl9fX3B5eF9zdGF0ZSAhPSBQeV9Ob25lKTsKKy0gIF9fcHl4X3Rf NiA9IChfX3B5eF90XzEgIT0gMCk7CistICBpZiAoX19weXhfdF82KSB7CistCistICAgIC8qICIo dHJlZSBmcmFnbWVudCkiOjkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gTG9nTWVzc2FnZS5fX25l d19fKF9fcHl4X3R5cGUpCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorLSAq ICAgICAgICAgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKDxMb2dNZXNzYWdl PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0xv Z01lc3NhZ2VfX3NldF9zdGF0ZShMb2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhf c3RhdGUpOgorLSAqLworLSAgICBpZiAoIShsaWtlbHkoUHlUdXBsZV9DaGVja0V4YWN0KF9fcHl4 X3ZfX19weXhfc3RhdGUpKXx8KChfX3B5eF92X19fcHl4X3N0YXRlKSA9PSBQeV9Ob25lKXx8KFB5 RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJFeHBlY3RlZCAlLjE2cywgZ290ICUuMjAwcyIs ICJ0dXBsZSIsIFB5X1RZUEUoX19weXhfdl9fX3B5eF9zdGF0ZSktPnRwX25hbWUpLCAwKSkpIF9f UFlYX0VSUigxLCA5LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19weXhfdF8zID0gX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRl KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9f cHl4X3ZfX19weXhfcmVzdWx0KSwgKChQeU9iamVjdCopX19weXhfdl9fX3B5eF9zdGF0ZSkpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigxLCA5LCBfX3B5eF9MMV9lcnJvcikK Ky0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOworLQorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo4CistICog ICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAo JXMgdnMgMHg4Nzc0ZmFlID0gKGxldmVsLCBsb2dfbGV2ZWwsIHByZWZpeCwgdGV4dCkpIiAlIF9f cHl4X2NoZWNrc3VtKQorLSAqICAgICBfX3B5eF9yZXN1bHQgPSBMb2dNZXNzYWdlLl9fbmV3X18o X19weXhfdHlwZSkKKy0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0xvZ01lc3Nh Z2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0g KiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorLSAqLworKyAgZWxzZSB7CisrICAgIFB5RXJyX1Nl dFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLCAiX19kZWxfXyIpOworKyAgICByZXR1 cm4gLTE7CisgICB9CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMAorLSAqICAgICBpZiBf X3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0xvZ01l c3NhZ2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkK Ky0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogY2RlZiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoTG9nTWVzc2Fn ZSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19weXhfcmVzdWx0 LmxldmVsID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5sb2dfbGV2ZWwgPSBfX3B5eF9z dGF0ZVsxXTsgX19weXhfcmVzdWx0LnByZWZpeCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1 bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNdCistICovCistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Ip OworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKy0gIF9fcHl4X3IgPSBf X3B5eF92X19fcHl4X3Jlc3VsdDsKKy0gIGdvdG8gX19weXhfTDA7CistCistICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjoxCistICogZGVmIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UoX19weXhfdHlw ZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCistICogICAg IGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqLworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBj b2RlICovCistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7 CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf NCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9yID0gTlVMTDsK Ky0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9QaWNrbGVFcnJv cik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKy0gIF9fUHl4X1hH SVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICBy ZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogIih0cmVlIGZyYWdtZW50KSI6MTEKKy0gKiAgICAg ICAgIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19w eXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorLSAq IGNkZWYgX19weXhfdW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKExvZ01lc3NhZ2UgX19w eXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgX19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jl c3VsdC5sb2dfbGV2ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnByZWZpeCA9IF9f cHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNdCistICogICAg IGlmIGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGlj dF9fJyk6CistICovCistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqX19weXhfdl9fX3B5eF9yZXN1 bHQsIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CistICBQeU9iamVjdCAqX19weXhf ciA9IE5VTEw7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9f cHl4X3RfMSA9IE5VTEw7CistICBpbnQgX19weXhfdF8yOworLSAgUHlfc3NpemVfdCBfX3B5eF90 XzM7CistICBpbnQgX19weXhfdF80OworLSAgaW50IF9fcHl4X3RfNTsKKy0gIFB5T2JqZWN0ICpf X3B5eF90XzYgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CistICBQeU9i amVjdCAqX19weXhfdF84ID0gTlVMTDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29u c3QgY2hhciAqX19weXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAw OworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX0xvZ01lc3Nh Z2VfX3NldF9zdGF0ZSIsIDApOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2Vycm9yKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VE IHZvaWQgKngpIHsKKysgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2 ZW50XzVlcnJvcl8xX19nZXRfXyhvKTsKKyt9CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox MgorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CistICogY2RlZiBfX3B5eF91bnBpY2tsZV9M b2dNZXNzYWdlX19zZXRfc3RhdGUoTG9nTWVzc2FnZSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4 X3N0YXRlKToKKy0gKiAgICAgX19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07IF9f cHl4X3Jlc3VsdC5sb2dfbGV2ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnByZWZp eCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNdICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+ IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKy0gKiAgICAgICAgIF9f cHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbNF0pCistICovCistICBpZiAo dW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAgICBQeUVycl9T ZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNj cmlwdGFibGUiKTsKKy0gICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKytzdGF0 aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9lcnJvcihQ eU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworKyAgaWYg KHYpIHsKKysgICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf NWVycm9yXzNfX3NldF9fKG8sIHYpOworICAgfQorLSAgX19weXhfdF8xID0gX19QeXhfR2V0SXRl bUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAwLCBsb25nLCAxLCBfX1B5eF9QeUludF9G cm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigx LCAxMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9f UHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X19fcHl4X3Jl c3VsdC0+bGV2ZWwpOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5sZXZl bCk7CistICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+bGV2ZWwgPSBfX3B5eF90XzE7CistICBfX3B5 eF90XzEgPSAwOworLSAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9u ZSkpIHsKKy0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScg b2JqZWN0IGlzIG5vdCBzdWJzY3JpcHRhYmxlIik7CistICAgIF9fUFlYX0VSUigxLCAxMiwgX19w eXhfTDFfZXJyb3IpCisrICBlbHNlIHsKKysgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdElt cGxlbWVudGVkRXJyb3IsICJfX2RlbF9fIik7CisrICAgIHJldHVybiAtMTsKKyAgIH0KKy0gIF9f cHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMSwg bG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9H T1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPmxvZ19sZXZlbCk7CistICBfX1B5eF9ERUNSRUYo X19weXhfdl9fX3B5eF9yZXN1bHQtPmxvZ19sZXZlbCk7CistICBfX3B5eF92X19fcHl4X3Jlc3Vs dC0+bG9nX2xldmVsID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKy0gIGlmICh1bmxp a2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7CistICAgIFB5RXJyX1NldFN0 cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0 YWJsZSIpOworLSAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorK30KKysKKytz dGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF9kYXRhKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKysgIHJldHVybiBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzFfX2dldF9fKG8pOwor K30KKysKKytzdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF9kYXRhKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2b2lkICp4 KSB7CisrICBpZiAodikgeworKyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF80ZGF0YV8zX19zZXRfXyhvLCB2KTsKKyAgIH0KKy0gIF9fcHl4X3RfMSA9IF9f UHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMiwgbG9uZywgMSwgX19Q eXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9HT1RSRUYoX19weXhf dl9fX3B5eF9yZXN1bHQtPnByZWZpeCk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdl9fX3B5eF9y ZXN1bHQtPnByZWZpeCk7CistICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+cHJlZml4ID0gX19weXhf dF8xOworLSAgX19weXhfdF8xID0gMDsKKy0gIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0 YXRlID09IFB5X05vbmUpKSB7CistICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3Is ICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOworLSAgICBfX1BZWF9F UlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgZWxzZSB7CisrICAgIHJldHVybiBfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRkYXRhXzVfX2RlbF9fKG8pOworICAgfQor LSAgX19weXhfdF8xID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRl LCAzLCBsb25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+dGV4dCk7CistICBfX1B5eF9ERUNSRUYo X19weXhfdl9fX3B5eF9yZXN1bHQtPnRleHQpOworLSAgX19weXhfdl9fX3B5eF9yZXN1bHQtPnRl eHQgPSBfX3B5eF90XzE7CistICBfX3B5eF90XzEgPSAwOworK30KKyAKKy0gIC8qICIodHJlZSBm cmFnbWVudCkiOjEzCistICogY2RlZiBfX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlX19zZXRfc3Rh dGUoTG9nTWVzc2FnZSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAg X19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5sb2dfbGV2 ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnByZWZpeCA9IF9fcHl4X3N0YXRlWzJd OyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNdCistICogICAgIGlmIGxlbihfX3B5 eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIF9fcHl4X3Jlc3VsdC5fX2RpY3Rf Xy51cGRhdGUoX19weXhfc3RhdGVbNF0pCistICovCistICBpZiAodW5saWtlbHkoX19weXhfdl9f X3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlw ZUVycm9yLCAib2JqZWN0IG9mIHR5cGUgJ05vbmVUeXBlJyBoYXMgbm8gbGVuKCkiKTsKKy0gICAg X19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9yZXBseV91c2VyZGF0YShQeU9i amVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CisrICByZXR1cm4gX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJlcGx5X3VzZXJkYXRhXzFfX2dldF9fKG8pOwor K30KKysKKytzdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF9yZXBseV91c2VyZGF0YShQeU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVT RUQgdm9pZCAqeCkgeworKyAgaWYgKHYpIHsKKysgICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl81RXZlbnRfMTRyZXBseV91c2VyZGF0YV8zX19zZXRfXyhvLCB2KTsKKyAg IH0KKy0gIF9fcHl4X3RfMyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdl9fX3B5eF9zdGF0ZSk7 IGlmICh1bmxpa2VseShfX3B5eF90XzMgPT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VSUigx LCAxMywgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90XzQgPSAoKF9fcHl4X3RfMyA+IDQpICE9 IDApOworLSAgaWYgKF9fcHl4X3RfNCkgeworLSAgfSBlbHNlIHsKKy0gICAgX19weXhfdF8yID0g X19weXhfdF80OworLSAgICBnb3RvIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKKysgIGVsc2Ug eworKyAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xNHJl cGx5X3VzZXJkYXRhXzVfX2RlbF9fKG8pOworICAgfQorLSAgX19weXhfdF80ID0gX19QeXhfSGFz QXR0cigoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5eF9uX3NfZGljdCk7 IGlmICh1bmxpa2VseShfX3B5eF90XzQgPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfNSA9IChfX3B5eF90XzQgIT0gMCk7CistICBfX3B5 eF90XzIgPSBfX3B5eF90XzU7CistICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OworLSAgaWYg KF9fcHl4X3RfMikgeworK30KKyAKKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTQKKy0gKiAg ICAgX19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5sb2df bGV2ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnByZWZpeCA9IF9fcHl4X3N0YXRl WzJdOyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNdCistICogICAgIGlmIGxlbihf X3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6Cist ICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzRdKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICovCistICAgIF9fcHl4X3RfNiA9IF9fUHl4 X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfcmVzdWx0KSwg X19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAx NCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgICBf X3B5eF90XzcgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNiwgX19weXhfbl9z X3VwZGF0ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICBpZiAodW5saWtlbHkoX19weXhf dl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4 Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOwor LSAgICAgIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCistICAgIH0KKy0gICAgX19w eXhfdF82ID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCA0LCBs b25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOworLSAgICBfX3B5eF90XzggPSBOVUxMOworLSAgICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzcpKSkgewor LSAgICAgIF9fcHl4X3RfOCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNyk7CistICAgICAg aWYgKGxpa2VseShfX3B5eF90XzgpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF83KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihf X3B5eF90XzgpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9f UHl4X0RFQ1JFRl9TRVQoX19weXhfdF83LCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9Cist ICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfNywgX19weXhfdF84LCBfX3B5eF90XzYpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhfX3B5eF90XzcsIF9fcHl4X3RfNik7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsg X19weXhfdF84ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKytzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWV0aG9kc185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnRbXSA9IHsKKysgIHsiX19yZWR1Y2VfY3l0aG9uX18i LCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF8xX19y ZWR1Y2VfY3l0aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwKKysgIHsiX19zZXRzdGF0ZV9jeXRob25f XyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzNf X3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAorKyAgezAsIDAsIDAsIDB9CisrfTsKKyAK Ky0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0xv Z01lc3NhZ2VfX3NldF9zdGF0ZShMb2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhf c3RhdGUpOgorLSAqICAgICBfX3B5eF9yZXN1bHQubGV2ZWwgPSBfX3B5eF9zdGF0ZVswXTsgX19w eXhfcmVzdWx0LmxvZ19sZXZlbCA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQucHJlZml4 ID0gX19weXhfc3RhdGVbMl07IF9fcHl4X3Jlc3VsdC50ZXh0ID0gX19weXhfc3RhdGVbM10KKy0g KiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAn X19kaWN0X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgX19w eXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkKKy0gKi8KKy0gIH0KKytz dGF0aWMgc3RydWN0IFB5R2V0U2V0RGVmIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50W10gPSB7CisrICB7KGNoYXIgKikiZXJyb3Jfc3RyIiwgX19weXhfZ2V0cHJvcF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2Vycm9yX3N0ciwgMCwgKGNoYXIgKikibXB2X2Vy cm9yX3N0cmluZyBvZiB0aGUgZXJyb3IgcHJvZXBydHkiLCAwfSwKKysgIHsoY2hhciAqKSJuYW1l IiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X25hbWUsIDAsIChj aGFyICopIm1wdl9ldmVudF9uYW1lIG9mIHRoZSBldmVudCBpZCIsIDB9LAorKyAgeyhjaGFyICop ImlkIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2lkLCBfX3B5 eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfaWQsIChjaGFyICopMCwgMH0s CisrICB7KGNoYXIgKikiZXJyb3IiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfZXJyb3IsIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF9lcnJvciwgKGNoYXIgKikwLCAwfSwKKysgIHsoY2hhciAqKSJkYXRhIiwgX19weXhfZ2V0cHJv cF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2RhdGEsIF9fcHl4X3NldHByb3BfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF9kYXRhLCAoY2hhciAqKTAsIDB9LAorKyAgeyhjaGFyICop InJlcGx5X3VzZXJkYXRhIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2 ZW50X3JlcGx5X3VzZXJkYXRhLCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 RXZlbnRfcmVwbHlfdXNlcmRhdGEsIChjaGFyICopMCwgMH0sCisrICB7MCwgMCwgMCwgMCwgMH0K Kyt9OworIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKKy0gKiAgICAgICAgIF9fcHl4X3Vu cGlja2xlX0xvZ01lc3NhZ2VfX3NldF9zdGF0ZSg8TG9nTWVzc2FnZT4gX19weXhfcmVzdWx0LCBf X3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorLSAqIGNkZWYgX19weXhf dW5waWNrbGVfTG9nTWVzc2FnZV9fc2V0X3N0YXRlKExvZ01lc3NhZ2UgX19weXhfcmVzdWx0LCB0 dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAg X19weXhfcmVzdWx0LmxldmVsID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5sb2dfbGV2 ZWwgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LnByZWZpeCA9IF9fcHl4X3N0YXRlWzJd OyBfX3B5eF9yZXN1bHQudGV4dCA9IF9fcHl4X3N0YXRlWzNdCistICogICAgIGlmIGxlbihfX3B5 eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CistICov Cisrc3RhdGljIFB5VHlwZU9iamVjdCBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudCA9IHsKKysgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgwLCAwKQorKyAgInZpZGN1dHRlci5s aWJzLm1wdi5FdmVudCIsIC8qdHBfbmFtZSovCisrICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpLCAvKnRwX2Jhc2ljc2l6ZSovCisrICAwLCAvKnRw X2l0ZW1zaXplKi8KKysgIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2 ZW50LCAvKnRwX2RlYWxsb2MqLworKyAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBiNAor KyAgMCwgLyp0cF9wcmludCovCisrICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAw eDAzMDgwMGI0CisrICAwLCAvKnRwX3ZlY3RvcmNhbGxfb2Zmc2V0Ki8KKysgICNlbmRpZgorKyAg MCwgLyp0cF9nZXRhdHRyKi8KKysgIDAsIC8qdHBfc2V0YXR0ciovCisrICAjaWYgUFlfTUFKT1Jf VkVSU0lPTiA8IDMKKysgIDAsIC8qdHBfY29tcGFyZSovCisrICAjZW5kaWYKKysgICNpZiBQWV9N QUpPUl9WRVJTSU9OID49IDMKKysgIDAsIC8qdHBfYXNfYXN5bmMqLworKyAgI2VuZGlmCisrICAw LCAvKnRwX3JlcHIqLworKyAgMCwgLyp0cF9hc19udW1iZXIqLworKyAgMCwgLyp0cF9hc19zZXF1 ZW5jZSovCisrICAwLCAvKnRwX2FzX21hcHBpbmcqLworKyAgMCwgLyp0cF9oYXNoKi8KKysgIDAs IC8qdHBfY2FsbCovCisrICAwLCAvKnRwX3N0ciovCisrICAwLCAvKnRwX2dldGF0dHJvKi8KKysg IDAsIC8qdHBfc2V0YXR0cm8qLworKyAgMCwgLyp0cF9hc19idWZmZXIqLworKyAgUHlfVFBGTEFH U19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBR3xQeV9UUEZMQUdTX0NIRUNLVFlQ RVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUnxQeV9UUEZMQUdTX0JBU0VUWVBFfFB5X1RQRkxB R1NfSEFWRV9HQywgLyp0cF9mbGFncyovCisrICAiV3JhcHM6IG1wdl9ldmVudCIsIC8qdHBfZG9j Ki8KKysgIF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCwgLyp0 cF90cmF2ZXJzZSovCisrICBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQsIC8qdHBfY2xlYXIqLworKyAgMCwgLyp0cF9yaWNoY29tcGFyZSovCisrICAwLCAvKnRwX3dl YWtsaXN0b2Zmc2V0Ki8KKysgIDAsIC8qdHBfaXRlciovCisrICAwLCAvKnRwX2l0ZXJuZXh0Ki8K KysgIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LCAvKnRwX21ldGhv ZHMqLworKyAgMCwgLyp0cF9tZW1iZXJzKi8KKysgIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80 bGlic18zbXB2X0V2ZW50LCAvKnRwX2dldHNldCovCisrICAwLCAvKnRwX2Jhc2UqLworKyAgMCwg Lyp0cF9kaWN0Ki8KKysgIDAsIC8qdHBfZGVzY3JfZ2V0Ki8KKysgIDAsIC8qdHBfZGVzY3Jfc2V0 Ki8KKysgIDAsIC8qdHBfZGljdG9mZnNldCovCisrICAwLCAvKnRwX2luaXQqLworKyAgMCwgLyp0 cF9hbGxvYyovCisrICBfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LCAv KnRwX25ldyovCisrICAwLCAvKnRwX2ZyZWUqLworKyAgMCwgLyp0cF9pc19nYyovCisrICAwLCAv KnRwX2Jhc2VzKi8KKysgIDAsIC8qdHBfbXJvKi8KKysgIDAsIC8qdHBfY2FjaGUqLworKyAgMCwg Lyp0cF9zdWJjbGFzc2VzKi8KKysgIDAsIC8qdHBfd2Vha2xpc3QqLworKyAgMCwgLyp0cF9kZWwq LworKyAgMCwgLyp0cF92ZXJzaW9uX3RhZyovCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgw MzA0MDBhMQorKyAgMCwgLyp0cF9maW5hbGl6ZSovCisrICAjZW5kaWYKKysgICNpZiBQWV9WRVJT SU9OX0hFWCA+PSAweDAzMDgwMGIxICYmICghQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZIHx8IFBZ UFlfVkVSU0lPTl9OVU0gPj0gMHgwNzAzMDgwMCkKKysgIDAsIC8qdHBfdmVjdG9yY2FsbCovCisr ICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJ T05fSEVYIDwgMHgwMzA5MDAwMAorKyAgMCwgLyp0cF9wcmludCovCisrICAjZW5kaWYKKysgICNp ZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA5MDAw MAorKyAgMCwgLyp0cF9weXB5X2ZsYWdzKi8KKysgICNlbmRpZgorK307Cisrc3RhdGljIHN0cnVj dCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0IF9fcHl4X3Z0 YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dDsKKyAKKy0gIC8qIGZ1bmN0aW9uIGV4 aXQgY29kZSAqLworLSAgX19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsK Ky0gIGdvdG8gX19weXhfTDA7CistICBfX3B5eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOCk7CistICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdl X19zZXRfc3RhdGUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1l KTsKKy0gIF9fcHl4X3IgPSAwOworLSAgX19weXhfTDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19w eXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5 eF9yOworK3N0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0KFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYSwgQ1lU SE9OX1VOVVNFRCBQeU9iamVjdCAqaykgeworKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqcDsKKysgIFB5T2JqZWN0ICpvOworKyAgaWYgKGxpa2VseSgo dC0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUKSA9PSAwKSkgeworKyAgICBvID0g KCp0LT50cF9hbGxvYykodCwgMCk7CisrICB9IGVsc2UgeworKyAgICBvID0gKFB5T2JqZWN0ICop IFB5QmFzZU9iamVjdF9UeXBlLnRwX25ldyh0LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7CisrICB9 CisrICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKKysgIHAgPSAoKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilvKTsKKysgIHAtPl9fcHl4X3Z0YWIg PSBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0OworKyAgcC0+Y2Fs bGJhY2sgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CisrICBwLT5jYWxsYmFja3RocmVh ZCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIHAtPnJlcGx5X3VzZXJkYXRhID0g UHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworKyAgaWYgKHVubGlrZWx5KF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zM19fY2luaXRfXyhvLCBfX3B5eF9lbXB0eV90 dXBsZSwgTlVMTCkgPCAwKSkgZ290byBiYWQ7CisrICByZXR1cm4gbzsKKysgIGJhZDoKKysgIFB5 X0RFQ1JFRihvKTsgbyA9IDA7CisrICByZXR1cm4gTlVMTDsKKyB9CisgCistLyogIih0cmVlIGZy YWdtZW50KSI6MQorLSAqIGRlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eShfX3B5eF90eXBlLCBs b25nIF9fcHl4X2NoZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgY2Rl ZiBvYmplY3QgX19weXhfcmVzdWx0CistICovCistCistLyogUHl0aG9uIHdyYXBwZXIgKi8KKy1z dGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19fcHl4X3Vu cGlja2xlX1Byb3BlcnR5KFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJn cywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlNZXRob2REZWYg X19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0 eSA9IHsiX19weXhfdW5waWNrbGVfUHJvcGVydHkiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNG dW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfX3B5 eF91bnBpY2tsZV9Qcm9wZXJ0eSwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9OworLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX19weXhfdW5w aWNrbGVfUHJvcGVydHkoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFB5T2JqZWN0ICpfX3B5eF9hcmdz LCBQeU9iamVjdCAqX19weXhfa3dkcykgeworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfdHlw ZSA9IDA7CistICBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW07CistICBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF9zdGF0ZSA9IDA7CistICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0 IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5vID0gMDsK Ky0gIFB5T2JqZWN0ICpfX3B5eF9yID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z CistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19weXhfdW5waWNrbGVfUHJvcGVydHkg KHdyYXBwZXIpIiwgMCk7Cisrc3RhdGljIHZvaWQgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dChQeU9iamVjdCAqbykgeworKyAgc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopbzsKKysgICNpZiBDWVRIT05fVVNFX1RQX0ZJTkFM SVpFCisrICBpZiAodW5saWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlfVFlQRShvKSwgUHlfVFBG TEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBFKG8pLT50cF9maW5hbGl6ZSkgJiYgIV9QeUdD X0ZJTkFMSVpFRChvKSkgeworKyAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFs bG9jKG8pKSByZXR1cm47CisrICB9CisrICAjZW5kaWYKKysgIFB5T2JqZWN0X0dDX1VuVHJhY2so byk7CisgICB7CistICAgIHN0YXRpYyBQeU9iamVjdCAqKl9fcHl4X3B5YXJnbmFtZXNbXSA9IHsm X19weXhfbl9zX3B5eF90eXBlLCZfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCZfX3B5eF9uX3NfcHl4 X3N0YXRlLDB9OworLSAgICBQeU9iamVjdCogdmFsdWVzWzNdID0gezAsMCwwfTsKKy0gICAgaWYg KHVubGlrZWx5KF9fcHl4X2t3ZHMpKSB7CistICAgICAgUHlfc3NpemVfdCBrd19hcmdzOworLSAg ICAgIGNvbnN0IFB5X3NzaXplX3QgcG9zX2FyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2Fy Z3MpOworLSAgICAgIHN3aXRjaCAocG9zX2FyZ3MpIHsKKy0gICAgICAgIGNhc2UgIDM6IHZhbHVl c1syXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMik7CistICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAyOiB2YWx1ZXNbMV0gPSBQeVR1cGxlX0dFVF9J VEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAg ICAgY2FzZSAgMTogdmFsdWVzWzBdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsK Ky0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDA6IGJyZWFrOwor LSAgICAgICAgZGVmYXVsdDogZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKy0gICAgICB9 CistICAgICAga3dfYXJncyA9IFB5RGljdF9TaXplKF9fcHl4X2t3ZHMpOworLSAgICAgIHN3aXRj aCAocG9zX2FyZ3MpIHsKKy0gICAgICAgIGNhc2UgIDA6CistICAgICAgICBpZiAobGlrZWx5KCh2 YWx1ZXNbMF0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nf cHl4X3R5cGUpKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAgICAgZWxzZSBnb3RvIF9fcHl4X0w1 X2FyZ3R1cGxlX2Vycm9yOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAg Y2FzZSAgMToKKy0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGljdF9H ZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhfY2hlY2tzdW0pKSAhPSAwKSkga3df YXJncy0tOworLSAgICAgICAgZWxzZSB7CistICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJ bnZhbGlkKCJfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSIsIDEsIDMsIDMsIDEpOyBfX1BZWF9FUlIo MSwgMSwgX19weXhfTDNfZXJyb3IpCistICAgICAgICB9CistICAgICAgICBDWVRIT05fRkFMTFRI Uk9VR0g7CistICAgICAgICBjYXNlICAyOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzJd ID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF9zdGF0 ZSkpICE9IDApKSBrd19hcmdzLS07CistICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgX19QeXhf UmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3VucGlja2xlX1Byb3BlcnR5IiwgMSwgMywgMywg Mik7IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKy0gICAgICAgIH0KKy0gICAgICB9 CistICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAgaWYgKHVubGlr ZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25h bWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAiX19weXhfdW5waWNrbGVfUHJvcGVydHkiKSA8IDAp KSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCistICAgICAgfQorLSAgICB9IGVsc2Ug aWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0gMykgeworLSAgICAgIGdvdG8gX19w eXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgIH0gZWxzZSB7CistICAgICAgdmFsdWVzWzBdID0g UHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAwKTsKKy0gICAgICB2YWx1ZXNbMV0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDEpOworLSAgICAgIHZhbHVlc1syXSA9IFB5VHVwbGVf R0VUX0lURU0oX19weXhfYXJncywgMik7CistICAgIH0KKy0gICAgX19weXhfdl9fX3B5eF90eXBl ID0gdmFsdWVzWzBdOworLSAgICBfX3B5eF92X19fcHl4X2NoZWNrc3VtID0gX19QeXhfUHlJbnRf QXNfbG9uZyh2YWx1ZXNbMV0pOyBpZiAodW5saWtlbHkoKF9fcHl4X3ZfX19weXhfY2hlY2tzdW0g PT0gKGxvbmcpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhf TDNfZXJyb3IpCistICAgIF9fcHl4X3ZfX19weXhfc3RhdGUgPSB2YWx1ZXNbMl07CisrICAgIFB5 T2JqZWN0ICpldHlwZSwgKmV2YWwsICpldGI7CisrICAgIFB5RXJyX0ZldGNoKCZldHlwZSwgJmV2 YWwsICZldGIpOworKyAgICBfX1B5eF9TRVRfUkVGQ05UKG8sIFB5X1JFRkNOVChvKSArIDEpOwor KyAgICBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDFfX2RlYWxsb2Nf XyhvKTsKKysgICAgX19QeXhfU0VUX1JFRkNOVChvLCBQeV9SRUZDTlQobykgLSAxKTsKKysgICAg UHlFcnJfUmVzdG9yZShldHlwZSwgZXZhbCwgZXRiKTsKKyAgIH0KKy0gIGdvdG8gX19weXhfTDRf YXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CistICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7Cist ICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfUHJvcGVydHkiLCAx LCAzLCAzLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDEsIDEsIF9f cHl4X0wzX2Vycm9yKQorLSAgX19weXhfTDNfZXJyb3I6OworLSAgX19QeXhfQWRkVHJhY2ViYWNr KCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfUHJvcGVydHkiLCBfX3B5eF9jbGlu ZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fUHl4X1JlZk5hbm55Rmlu aXNoQ29udGV4dCgpOworLSAgcmV0dXJuIE5VTEw7CistICBfX3B5eF9MNF9hcmd1bWVudF91bnBh Y2tpbmdfZG9uZTo7CistICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEyX19weXhfdW5waWNrbGVfUHJvcGVydHkoX19weXhfc2VsZiwgX19weXhfdl9fX3B5eF90eXBl LCBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBfX3B5eF92X19fcHl4X3N0YXRlKTsKKysgIFB5X0NM RUFSKHAtPmNhbGxiYWNrKTsKKysgIFB5X0NMRUFSKHAtPmNhbGxiYWNrdGhyZWFkKTsKKysgIFB5 X0NMRUFSKHAtPnJlcGx5X3VzZXJkYXRhKTsKKysgICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7 CisrfQorIAorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworK3N0YXRpYyBpbnQgX19weXhfdHBf dHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQoUHlPYmplY3QgKm8sIHZpc2l0 cHJvYyB2LCB2b2lkICphKSB7CisrICBpbnQgZTsKKysgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqKW87CisrICBpZiAocC0+Y2FsbGJhY2spIHsKKysgICAgZSA9 ICgqdikocC0+Y2FsbGJhY2ssIGEpOyBpZiAoZSkgcmV0dXJuIGU7CisrICB9CisrICBpZiAocC0+ Y2FsbGJhY2t0aHJlYWQpIHsKKysgICAgZSA9ICgqdikocC0+Y2FsbGJhY2t0aHJlYWQsIGEpOyBp ZiAoZSkgcmV0dXJuIGU7CisrICB9CisrICBpZiAocC0+cmVwbHlfdXNlcmRhdGEpIHsKKysgICAg ZSA9ICgqdikocC0+cmVwbHlfdXNlcmRhdGEsIGEpOyBpZiAoZSkgcmV0dXJuIGU7CisrICB9Cisr ICByZXR1cm4gMDsKKyB9CisgCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTJfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eShDWVRIT05fVU5VU0VEIFB5T2Jq ZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfdl9fX3B5eF90eXBlLCBsb25nIF9fcHl4 X3ZfX19weXhfY2hlY2tzdW0sIFB5T2JqZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CistICBQ eU9iamVjdCAqX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvciA9IDA7CistICBQeU9iamVjdCAqX19w eXhfdl9fX3B5eF9yZXN1bHQgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAg X19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKy0gIGludCBfX3B5eF90XzE7CistICBQeU9iamVj dCAqX19weXhfdF8yID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAg UHlPYmplY3QgKl9fcHl4X3RfNCA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVM TDsKKy0gIGludCBfX3B5eF90XzY7CistICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0 IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5vID0gMDsK Ky0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSIs IDApOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NAorLSAqICAgICBjZGVmIG9iamVjdCBf X3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKy0gKiAg ICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHgwNTcyZDExOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19w eXhfUGlja2xlRXJyb3IKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNv bXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweDA1NzJkMTEgPSAoZGF0YSwgbmFtZSkpIiAlIF9f cHl4X2NoZWNrc3VtKQorLSAqLworLSAgX19weXhfdF8xID0gKChfX3B5eF92X19fcHl4X2NoZWNr c3VtICE9IDB4MDU3MmQxMSkgIT0gMCk7CistICBpZiAoX19weXhfdF8xKSB7Cisrc3RhdGljIGlu dCBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dChQeU9iamVjdCAq bykgeworKyAgUHlPYmplY3QqIHRtcDsKKysgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqKW87CisrICB0bXAgPSAoKFB5T2JqZWN0KilwLT5jYWxsYmFjayk7Cisr ICBwLT5jYWxsYmFjayA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIFB5X1hERUNS RUYodG1wKTsKKysgIHRtcCA9ICgoUHlPYmplY3QqKXAtPmNhbGxiYWNrdGhyZWFkKTsKKysgIHAt PmNhbGxiYWNrdGhyZWFkID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworKyAgUHlfWERF Q1JFRih0bXApOworKyAgdG1wID0gKChQeU9iamVjdCopcC0+cmVwbHlfdXNlcmRhdGEpOworKyAg cC0+cmVwbHlfdXNlcmRhdGEgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CisrICBQeV9Y REVDUkVGKHRtcCk7CisrICByZXR1cm4gMDsKKyt9CisgCistICAgIC8qICIodHJlZSBmcmFnbWVu dCkiOjUKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9fcHl4 X2NoZWNrc3VtICE9IDB4MDU3MmQxMToKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQ aWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNo ZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEsIG5hbWUpKSIgJSBfX3B5eF9jaGVja3N1 bSkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gUHJvcGVydHkuX19uZXdfXyhfX3B5eF90eXBlKQor LSAqLworLSAgICBfX3B5eF90XzIgPSBQeUxpc3RfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9uX3NfUGlja2xlRXJyb3IpOwor LSAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X25fc19QaWNrbGVFcnJvcik7CistICAgIFB5TGlzdF9T RVRfSVRFTShfX3B5eF90XzIsIDAsIF9fcHl4X25fc19QaWNrbGVFcnJvcik7CistICAgIF9fcHl4 X3RfMyA9IF9fUHl4X0ltcG9ydChfX3B5eF9uX3NfcGlja2xlLCBfX3B5eF90XzIsIC0xKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCist ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKKy0gICAgX19weXhfdF8yID0gX19QeXhfSW1wb3J0RnJvbShfX3B5 eF90XzMsIF9fcHl4X25fc19QaWNrbGVFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8yKTsKKy0gICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4X3ZfX19weXhf UGlja2xlRXJyb3IgPSBfX3B5eF90XzI7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0X2FwaV92ZXJzaW9uKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngp IHsKKysgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTFh cGlfdmVyc2lvbl8xX19nZXRfXyhvKTsKKyt9CisgCistICAgIC8qICIodHJlZSBmcmFnbWVudCki OjYKKy0gKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHgwNTcyZDExOgorLSAqICAgICAgICAg ZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCistICog ICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAo JXMgdnMgMHgwNTcyZDExID0gKGRhdGEsIG5hbWUpKSIgJSBfX3B5eF9jaGVja3N1bSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBfX3B5eF9yZXN1bHQgPSBQcm9wZXJ0eS5f X25ld19fKF9fcHl4X3R5cGUpCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgor LSAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2xvbmcoX19weXhfdl9fX3B5 eF9jaGVja3N1bSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDYsIF9f cHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhf dF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNr c3Vtc19zX3ZzXzB4MDUsIF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9f UHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKy0gICAgX19weXhfdF8yID0g X19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcjsgX19weXhfdF81ID0gTlVMTDsKKy0gICAgaWYgKENZ VEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworLSAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7Cist ICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rp b24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICAgIF9fUHl4X0lO Q1JFRihfX3B5eF90XzUpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAg ICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgICAgfQorLSAg ICB9CistICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfMiwgX19weXhfdF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfNCk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4 X3RfNCA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYs IF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X1JhaXNlKF9f cHl4X3RfMywgMCwgMCwgMCk7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworLSAgICBfX1BZWF9FUlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9uYW1l KFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKysgIHJldHVybiBfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNG5hbWVfMV9fZ2V0X18obyk7CisrfQor IAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4 X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqICAgICBp ZiBfX3B5eF9jaGVja3N1bSAhPSAweDA1NzJkMTE6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBhcyBfX3B5eF9Q aWNrbGVFcnJvcgorLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0 aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4MDU3MmQxMSA9IChkYXRhLCBuYW1lKSkiICUgX19weXhf Y2hlY2tzdW0pCistICovCistICB9Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF90aW1lKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5V U0VEIHZvaWQgKngpIHsKKysgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfNHRpbWVfMV9fZ2V0X18obyk7CisrfQorIAorLSAgLyogIih0cmVlIGZyYWdtZW50 KSI6NworLSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4 X1BpY2tsZUVycm9yCistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21w YXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEsIG5hbWUpKSIgJSBfX3B5 eF9jaGVja3N1bSkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gUHJvcGVydHkuX19uZXdfXyhfX3B5 eF90eXBlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGlmIF9fcHl4X3N0 YXRlIGlzIG5vdCBOb25lOgorLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3Nl dF9zdGF0ZSg8UHJvcGVydHk+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCistICovCistICBf X3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF9w dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpLCBfX3B5eF9uX3NfbmV3KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNywgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfNCA9IE5VTEw7CistICBpZiAo Q1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIp KSkgeworLSAgICBfX3B5eF90XzQgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzIpOworLSAg ICBpZiAobGlrZWx5KF9fcHl4X3RfNCkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8yKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19w eXhfdF80KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdF8yLCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9fcHl4X3Rf MyA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19w eXhfdF80LCBfX3B5eF92X19fcHl4X3R5cGUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF90XzIsIF9fcHl4X3ZfX19weXhfdHlwZSk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf NCk7IF9fcHl4X3RfNCA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigxLCA3LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAg X19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBfX3B5eF92X19fcHl4 X3Jlc3VsdCA9IF9fcHl4X3RfMzsKKy0gIF9fcHl4X3RfMyA9IDA7Cisrc3RhdGljIFB5TWV0aG9k RGVmIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHRbXSA9IHsKKysg IHsicmVxdWVzdF9ldmVudCIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtl eXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xcmVxdWVzdF9l dmVudCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9fcHl4X2RvY185dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfcmVxdWVzdF9ldmVudH0sCisrICB7InNldF9sb2dfbGV2ZWwiLCAo UHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzNzZXRf bG9nX2xldmVsLCBNRVRIX08sIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMnNldF9sb2dfbGV2ZWx9LAorKyAgeyJsb2FkX2NvbmZpZyIsIChQeUNGdW5jdGlvbilfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNWxvYWRfY29uZmlnLCBNRVRIX08s IF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNGxvYWRfY29uZmlnfSwK KysgIHsiX2Zvcm1hdF9mb3IiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzdfZm9ybWF0X2ZvciwgTUVUSF9PLCAwfSwKKysgIHsiY29tbWFuZCIs IChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF85Y29tbWFuZCwgTUVUSF9WQVJBUkdTfE1FVEhf S0VZV09SRFMsIF9fcHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1h bmR9LAorKyAgeyJnZXRfcHJvcGVydHlfYXN5bmMiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNG dW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMTFnZXRfcHJvcGVydHlfYXN5bmMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfX3B5 eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5j fSwKKysgIHsidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5 Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8xM3RyeV9nZXRfcHJvcGVydHlfYXN5bmMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRT LCAwfSwKKysgIHsidHJ5X2dldF9wcm9wZXJ0eSIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1 bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xNXRyeV9nZXRfcHJvcGVydHksIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfSwKKysg IHsiZ2V0X3Byb3BlcnR5IiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8xN2dldF9wcm9wZXJ0eSwgTUVUSF9PLCBfX3B5eF9kb2NfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5fSwKKysgIHsic2V0X3Byb3BlcnR5 IiwgKFB5Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE5c2V0X3Byb3BlcnR5LCBNRVRIX1ZBUkFS R1N8TUVUSF9LRVlXT1JEUywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xOHNldF9wcm9wZXJ0eX0sCisrICB7InNldF9vcHRpb24iLCAoUHlDRnVuY3Rpb24pKHZvaWQq KShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMjFzZXRfb3B0aW9uLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX19weXhf ZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMHNldF9vcHRpb259LAorKyAgeyJp bml0aWFsaXplIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8yM2luaXRpYWxpemUsIE1FVEhfTk9BUkdTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzIyaW5pdGlhbGl6ZX0sCisrICB7IndhaXRfZXZlbnQiLCAoUHlD RnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjV3YWl0X2V2ZW50LCBNRVRIX1ZBUkFSR1N8TUVUSF9L RVlXT1JEUywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHdhaXRf ZXZlbnR9LAorKyAgeyJ3YWtldXAiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzI3d2FrZXVwLCBNRVRIX05PQVJHUywgX19weXhfZG9jXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNndha2V1cH0sCisrICB7InNldF93YWtldXBfY2Fs bGJhY2siLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzI5c2V0X3dha2V1cF9jYWxsYmFjaywgTUVUSF9PLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzI4c2V0X3dha2V1cF9jYWxsYmFja30sCisrICB7ImdldF93YWtl dXBfcGlwZSIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMzFnZXRfd2FrZXVwX3BpcGUsIE1FVEhfTk9BUkdTLCBfX3B5eF9kb2NfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzMwZ2V0X3dha2V1cF9waXBlfSwKKysgIHsib2JzZXJ2ZV9w cm9wZXJ0eSIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNW9ic2VydmVfcHJvcGVydHks IE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eX0sCisrICB7InVub2JzZXJ2ZV9wcm9wZXJ0 eSIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf Mzd1bm9ic2VydmVfcHJvcGVydHksIE1FVEhfTywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0eX0sCisrICB7InNodXRkb3duIiwgKFB5 Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zOXNodXRk b3duLCBNRVRIX05PQVJHUywgMH0sCisrICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0 aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80M19fcmVkdWNlX2N5 dGhvbl9fLCBNRVRIX05PQVJHUywgMH0sCisrICB7Il9fc2V0c3RhdGVfY3l0aG9uX18iLCAoUHlD RnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQ1X19zZXRz dGF0ZV9jeXRob25fXywgTUVUSF9PLCAwfSwKKysgIHswLCAwLCAwLCAwfQorK307CisgCistICAv KiAiKHRyZWUgZnJhZ21lbnQpIjo4CistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJv cigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEsIG5hbWUp KSIgJSBfX3B5eF9jaGVja3N1bSkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gUHJvcGVydHkuX19u ZXdfXyhfX3B5eF90eXBlKQorLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfUHJv cGVydHlfX3NldF9zdGF0ZSg8UHJvcGVydHk+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCist ICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKi8KKy0gIF9fcHl4X3RfMSA9IChfX3B5eF92 X19fcHl4X3N0YXRlICE9IFB5X05vbmUpOworLSAgX19weXhfdF82ID0gKF9fcHl4X3RfMSAhPSAw KTsKKy0gIGlmIChfX3B5eF90XzYpIHsKKytzdGF0aWMgc3RydWN0IFB5R2V0U2V0RGVmIF9fcHl4 X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHRbXSA9IHsKKysgIHsoY2hhciAq KSJhcGlfdmVyc2lvbiIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0X2FwaV92ZXJzaW9uLCAwLCAoY2hhciAqKTAsIDB9LAorKyAgeyhjaGFyICopIm5hbWUiLCBf X3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9uYW1lLCAwLCAoY2hh ciAqKSJVbmlxdWUgbmFtZSBmb3IgZXZlcnkgY29udGV4dCBjcmVhdGVkLlxuXG4gICAgICAgIFdy YXBzOiBtcHZfY2xpZW50X25hbWVcbiAgICAgICAgIiwgMH0sCisrICB7KGNoYXIgKikidGltZSIs IF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X3RpbWUsIDAsIChj aGFyICopIkludGVybmFsIG1wdiBjbGllbnQgdGltZS5cblxuICAgICAgICBIYXMgYW4gYXJiaXRy YXJ5IHN0YXJ0IG9mZnNldCwgYnV0IHdpbGwgbmV2ZXIgd3JhcCBvciBnbyBiYWNrd2FyZHMuXG5c biAgICAgICAgV3JhcHM6IG1wdl9nZXRfdGltZV91c1xuICAgICAgICAiLCAwfSwKKysgIHswLCAw LCAwLCAwLCAwfQorK307CisgCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjkKKy0gKiAgICAg X19weXhfcmVzdWx0ID0gUHJvcGVydHkuX19uZXdfXyhfX3B5eF90eXBlKQorLSAqICAgICBpZiBf X3B5eF9zdGF0ZSBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1Byb3Bl cnR5X19zZXRfc3RhdGUoPFByb3BlcnR5PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0g KiBjZGVmIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoUHJvcGVydHkgX19weXhf cmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CistICovCistICAgIGlmICghKGxpa2VseShQeVR1 cGxlX0NoZWNrRXhhY3QoX19weXhfdl9fX3B5eF9zdGF0ZSkpfHwoKF9fcHl4X3ZfX19weXhfc3Rh dGUpID09IFB5X05vbmUpfHwoUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIkV4cGVjdGVk ICUuMTZzLCBnb3QgJS4yMDBzIiwgInR1cGxlIiwgUHlfVFlQRShfX3B5eF92X19fcHl4X3N0YXRl KS0+dHBfbmFtZSksIDApKSkgX19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQorLSAgICBf X3B5eF90XzMgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9Q cm9wZXJ0eV9fc2V0X3N0YXRlKCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUHJvcGVydHkgKilfX3B5eF92X19fcHl4X3Jlc3VsdCksICgoUHlPYmplY3QqKV9fcHl4X3Zf X19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgOSwg X19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKytzdGF0aWMgUHlUeXBlT2JqZWN0 IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgPSB7CisrICBQeVZhck9i amVjdF9IRUFEX0lOSVQoMCwgMCkKKysgICJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dCIsIC8q dHBfbmFtZSovCisrICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dCksIC8qdHBfYmFzaWNzaXplKi8KKysgIDAsIC8qdHBfaXRlbXNpemUqLworKyAg X19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgLyp0cF9kZWFs bG9jKi8KKysgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKysgIDAsIC8qdHBfcHJp bnQqLworKyAgI2VuZGlmCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorKyAg MCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCisrICAjZW5kaWYKKysgIDAsIC8qdHBfZ2V0YXR0 ciovCisrICAwLCAvKnRwX3NldGF0dHIqLworKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisr ICAwLCAvKnRwX2NvbXBhcmUqLworKyAgI2VuZGlmCisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+ PSAzCisrICAwLCAvKnRwX2FzX2FzeW5jKi8KKysgICNlbmRpZgorKyAgMCwgLyp0cF9yZXByKi8K KysgIDAsIC8qdHBfYXNfbnVtYmVyKi8KKysgIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworKyAgMCwg Lyp0cF9hc19tYXBwaW5nKi8KKysgIDAsIC8qdHBfaGFzaCovCisrICAwLCAvKnRwX2NhbGwqLwor KyAgMCwgLyp0cF9zdHIqLworKyAgMCwgLyp0cF9nZXRhdHRybyovCisrICAwLCAvKnRwX3NldGF0 dHJvKi8KKysgIDAsIC8qdHBfYXNfYnVmZmVyKi8KKysgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9U UEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1Nf SEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8q dHBfZmxhZ3MqLworKyAgIkJhc2UgY2xhc3Mgd3JhcHBpbmcgYSBjb250ZXh0IHRvIGludGVyYWN0 IHdpdGggbXB2LlxuXG4gICAgQXNzdW1lIGFsbCBjYWxscyBjYW4gcmFpc2UgTVBWRXJyb3IuXG5c biAgICBXcmFwczogbXB2X2NyZWF0ZSwgbXB2X2Rlc3Ryb3kgYW5kIGFsbCBtcHZfaGFuZGxlIHJl bGF0ZWQgY2FsbHNcbiAgICAiLCAvKnRwX2RvYyovCisrICBfX3B5eF90cF90cmF2ZXJzZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgLyp0cF90cmF2ZXJzZSovCisrICBfX3B5eF90cF9j bGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgLyp0cF9jbGVhciovCisrICAwLCAv KnRwX3JpY2hjb21wYXJlKi8KKysgIDAsIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworKyAgMCwgLyp0 cF9pdGVyKi8KKysgIDAsIC8qdHBfaXRlcm5leHQqLworKyAgX19weXhfbWV0aG9kc185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgLyp0cF9tZXRob2RzKi8KKysgIDAsIC8qdHBfbWVtYmVy cyovCisrICBfX3B5eF9nZXRzZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCAvKnRw X2dldHNldCovCisrICAwLCAvKnRwX2Jhc2UqLworKyAgMCwgLyp0cF9kaWN0Ki8KKysgIDAsIC8q dHBfZGVzY3JfZ2V0Ki8KKysgIDAsIC8qdHBfZGVzY3Jfc2V0Ki8KKysgIDAsIC8qdHBfZGljdG9m ZnNldCovCisrICAwLCAvKnRwX2luaXQqLworKyAgMCwgLyp0cF9hbGxvYyovCisrICBfX3B5eF90 cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIC8qdHBfbmV3Ki8KKysgIDAsIC8q dHBfZnJlZSovCisrICAwLCAvKnRwX2lzX2djKi8KKysgIDAsIC8qdHBfYmFzZXMqLworKyAgMCwg Lyp0cF9tcm8qLworKyAgMCwgLyp0cF9jYWNoZSovCisrICAwLCAvKnRwX3N1YmNsYXNzZXMqLwor KyAgMCwgLyp0cF93ZWFrbGlzdCovCisrICAwLCAvKnRwX2RlbCovCisrICAwLCAvKnRwX3ZlcnNp b25fdGFnKi8KKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCisrICAwLCAvKnRw X2ZpbmFsaXplKi8KKysgICNlbmRpZgorKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAw YjEgJiYgKCFDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgfHwgUFlQWV9WRVJTSU9OX05VTSA+PSAw eDA3MDMwODAwKQorKyAgMCwgLyp0cF92ZWN0b3JjYWxsKi8KKysgICNlbmRpZgorKyAgI2lmIFBZ X1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAw CisrICAwLCAvKnRwX3ByaW50Ki8KKysgICNlbmRpZgorKyAgI2lmIENZVEhPTl9DT01QSUxJTkdf SU5fUFlQWSAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDkwMDAwCisrICAwLCAvKnRwX3B5cHlf ZmxhZ3MqLworKyAgI2VuZGlmCisrfTsKKytzdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3Rf OXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgX19weXhfdnRhYmxlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zOworIAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQp Ijo4CistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNo ZWNrc3VtcyAoJXMgdnMgMHgwNTcyZDExID0gKGRhdGEsIG5hbWUpKSIgJSBfX3B5eF9jaGVja3N1 bSkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gUHJvcGVydHkuX19uZXdfXyhfX3B5eF90eXBlKQor LSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZSg8 UHJvcGVydHk+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCistICogICAgIHJldHVybiBfX3B5 eF9yZXN1bHQKKy0gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyhQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVTRUQg UHlPYmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKKysgIHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKnA7CisrICBQeU9iamVj dCAqbzsKKysgIGlmIChsaWtlbHkoKHQtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19JU19BQlNUUkFD VCkgPT0gMCkpIHsKKysgICAgbyA9ICgqdC0+dHBfYWxsb2MpKHQsIDApOworKyAgfSBlbHNlIHsK KysgICAgbyA9IChQeU9iamVjdCAqKSBQeUJhc2VPYmplY3RfVHlwZS50cF9uZXcodCwgX19weXhf ZW1wdHlfdHVwbGUsIDApOworICAgfQorKyAgaWYgKHVubGlrZWx5KCFvKSkgcmV0dXJuIDA7Cisr ICBwID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zICopbyk7CisrICBwLT5fX3B5eF92dGFiID0gX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX1JlbmRlclBhcmFtczsKKysgIHAtPm93bmVkID0gUHlfTm9uZTsgUHlfSU5DUkVG KFB5X05vbmUpOworKyAgcmV0dXJuIG87CisrfQorIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6 MTAKKy0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6CistICogICAgICAgICBfX3B5 eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKDxQcm9wZXJ0eT4gX19weXhfcmVzdWx0LCBf X3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdCAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogY2RlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRl KFByb3BlcnR5IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5 eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubmFtZSA9IF9fcHl4 X3N0YXRlWzFdCistICovCistICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19QeXhfSU5D UkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKy0gIF9fcHl4X3IgPSBfX3B5eF92X19fcHl4X3Jl c3VsdDsKKy0gIGdvdG8gX19weXhfTDA7Cisrc3RhdGljIHZvaWQgX19weXhfdHBfZGVhbGxvY185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyhQeU9iamVjdCAqbykgeworKyAgc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqcCA9IChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopbzsK KysgICNpZiBDWVRIT05fVVNFX1RQX0ZJTkFMSVpFCisrICBpZiAodW5saWtlbHkoUHlUeXBlX0hh c0ZlYXR1cmUoUHlfVFlQRShvKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBF KG8pLT50cF9maW5hbGl6ZSkgJiYgIV9QeUdDX0ZJTkFMSVpFRChvKSkgeworKyAgICBpZiAoUHlP YmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKG8pKSByZXR1cm47CisrICB9CisrICAjZW5k aWYKKysgIFB5T2JqZWN0X0dDX1VuVHJhY2sobyk7CisrICB7CisrICAgIFB5T2JqZWN0ICpldHlw ZSwgKmV2YWwsICpldGI7CisrICAgIFB5RXJyX0ZldGNoKCZldHlwZSwgJmV2YWwsICZldGIpOwor KyAgICBfX1B5eF9TRVRfUkVGQ05UKG8sIFB5X1JFRkNOVChvKSArIDEpOworKyAgICBfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzNfX2RlYWxsb2NfXyhvKTsK KysgICAgX19QeXhfU0VUX1JFRkNOVChvLCBQeV9SRUZDTlQobykgLSAxKTsKKysgICAgUHlFcnJf UmVzdG9yZShldHlwZSwgZXZhbCwgZXRiKTsKKysgIH0KKysgIFB5X0NMRUFSKHAtPm93bmVkKTsK KysgICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7CisrfQorIAorLSAgLyogIih0cmVlIGZyYWdt ZW50KSI6MQorLSAqIGRlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eShfX3B5eF90eXBlLCBsb25n IF9fcHl4X2NoZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgY2RlZiBv YmplY3QgX19weXhfcmVzdWx0CistICovCisrc3RhdGljIGludCBfX3B5eF90cF90cmF2ZXJzZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyhQeU9iamVjdCAqbywgdmlzaXRwcm9j IHYsIHZvaWQgKmEpIHsKKysgIGludCBlOworKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopbzsKKysgIGlmIChwLT5vd25lZCkgeworKyAg ICBlID0gKCp2KShwLT5vd25lZCwgYSk7IGlmIChlKSByZXR1cm4gZTsKKysgIH0KKysgIHJldHVy biAwOworK30KKyAKKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLworLSAgX19weXhfTDFfZXJy b3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzIpOworLSAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzMpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOworLSAgX19QeXhfWERFQ1JFRihf X3B5eF90XzUpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19w eXhfdW5waWNrbGVfUHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworLSAgX19weXhfTDA6OworLSAgX19QeXhf WERFQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19w eXhfdl9fX3B5eF9yZXN1bHQpOworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworK3N0YXRpYyBp bnQgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMoUHlP YmplY3QgKm8pIHsKKysgIFB5T2JqZWN0KiB0bXA7CisrICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilvOworKyAgdG1wID0gKChQeU9iamVj dCopcC0+b3duZWQpOworKyAgcC0+b3duZWQgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7 CisrICBQeV9YREVDUkVGKHRtcCk7CisrICByZXR1cm4gMDsKKyB9CisgCistLyogIih0cmVlIGZy YWdtZW50KSI6MTEKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3Rh dGUoPFByb3BlcnR5PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4g X19weXhfcmVzdWx0CistICogY2RlZiBfX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eV9fc2V0X3N0YXRl KFByb3BlcnR5IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVb MF07IF9fcHl4X3Jlc3VsdC5uYW1lID0gX19weXhfc3RhdGVbMV0KKy0gKiAgICAgaWYgbGVuKF9f cHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKy0g Ki8KKytzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNt cHZfX1JlbmRlclBhcmFtc1tdID0geworKyAgeyJfX3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5j dGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzVfX3Jl ZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9LAorKyAgeyJfX3NldHN0YXRlX2N5dGhvbl9f IiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQ YXJhbXNfN19fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhfTywgMH0sCisrICB7MCwgMCwgMCwgMH0K Kyt9OworIAorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqX19weXhfdl9fX3B5eF9yZXN1bHQsIFB5T2JqZWN0 ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CistICBQeU9iamVjdCAqX19weXhfciA9IE5VTEw7Cist ICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgUHlPYmplY3QgKl9fcHl4X3RfMSA9IE5V TEw7CistICBpbnQgX19weXhfdF8yOworLSAgUHlfc3NpemVfdCBfX3B5eF90XzM7CistICBpbnQg X19weXhfdF80OworLSAgaW50IF9fcHl4X3RfNTsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBO VUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CistICBQeU9iamVjdCAqX19weXhf dF84ID0gTlVMTDsKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19w eXhfZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUi LCAwKTsKKytzdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X19SZW5kZXJQYXJhbXMgPSB7CisrICBQeVZhck9iamVjdF9IRUFEX0lOSVQoMCwgMCkKKysg ICJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRlclBhcmFtcyIsIC8qdHBfbmFtZSovCisrICBzaXpl b2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyks IC8qdHBfYmFzaWNzaXplKi8KKysgIDAsIC8qdHBfaXRlbXNpemUqLworKyAgX19weXhfdHBfZGVh bGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcywgLyp0cF9kZWFsbG9jKi8K KysgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKysgIDAsIC8qdHBfcHJpbnQqLwor KyAgI2VuZGlmCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorKyAgMCwgLyp0 cF92ZWN0b3JjYWxsX29mZnNldCovCisrICAjZW5kaWYKKysgIDAsIC8qdHBfZ2V0YXR0ciovCisr ICAwLCAvKnRwX3NldGF0dHIqLworKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAwLCAv KnRwX2NvbXBhcmUqLworKyAgI2VuZGlmCisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCisr ICAwLCAvKnRwX2FzX2FzeW5jKi8KKysgICNlbmRpZgorKyAgMCwgLyp0cF9yZXByKi8KKysgIDAs IC8qdHBfYXNfbnVtYmVyKi8KKysgIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworKyAgMCwgLyp0cF9h c19tYXBwaW5nKi8KKysgIDAsIC8qdHBfaGFzaCovCisrICAwLCAvKnRwX2NhbGwqLworKyAgMCwg Lyp0cF9zdHIqLworKyAgMCwgLyp0cF9nZXRhdHRybyovCisrICAwLCAvKnRwX3NldGF0dHJvKi8K KysgIDAsIC8qdHBfYXNfYnVmZmVyKi8KKysgIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdT X0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1NfSEFWRV9O RVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxh Z3MqLworKyAgMCwgLyp0cF9kb2MqLworKyAgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80 bGlic18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBfdHJhdmVyc2UqLworKyAgX19weXhfdHBfY2xl YXJfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBfY2xlYXIqLworKyAg MCwgLyp0cF9yaWNoY29tcGFyZSovCisrICAwLCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKysgIDAs IC8qdHBfaXRlciovCisrICAwLCAvKnRwX2l0ZXJuZXh0Ki8KKysgIF9fcHl4X21ldGhvZHNfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBfbWV0aG9kcyovCisrICAwLCAv KnRwX21lbWJlcnMqLworKyAgMCwgLyp0cF9nZXRzZXQqLworKyAgMCwgLyp0cF9iYXNlKi8KKysg IDAsIC8qdHBfZGljdCovCisrICAwLCAvKnRwX2Rlc2NyX2dldCovCisrICAwLCAvKnRwX2Rlc2Ny X3NldCovCisrICAwLCAvKnRwX2RpY3RvZmZzZXQqLworKyAgX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc18xX19pbml0X18sIC8qdHBfaW5pdCovCisrICAwLCAv KnRwX2FsbG9jKi8KKysgIF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRl clBhcmFtcywgLyp0cF9uZXcqLworKyAgMCwgLyp0cF9mcmVlKi8KKysgIDAsIC8qdHBfaXNfZ2Mq LworKyAgMCwgLyp0cF9iYXNlcyovCisrICAwLCAvKnRwX21ybyovCisrICAwLCAvKnRwX2NhY2hl Ki8KKysgIDAsIC8qdHBfc3ViY2xhc3NlcyovCisrICAwLCAvKnRwX3dlYWtsaXN0Ki8KKysgIDAs IC8qdHBfZGVsKi8KKysgIDAsIC8qdHBfdmVyc2lvbl90YWcqLworKyAgI2lmIFBZX1ZFUlNJT05f SEVYID49IDB4MDMwNDAwYTEKKysgIDAsIC8qdHBfZmluYWxpemUqLworKyAgI2VuZGlmCisrICAj aWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMSAmJiAoIUNZVEhPTl9DT01QSUxJTkdfSU5f UFlQWSB8fCBQWVBZX1ZFUlNJT05fTlVNID49IDB4MDcwMzA4MDApCisrICAwLCAvKnRwX3ZlY3Rv cmNhbGwqLworKyAgI2VuZGlmCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNCAm JiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwOTAwMDAKKysgIDAsIC8qdHBfcHJpbnQqLworKyAgI2Vu ZGlmCisrICAjaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZICYmIFBZX1ZFUlNJT05fSEVYID49 IDB4MDMwOTAwMDAKKysgIDAsIC8qdHBfcHlweV9mbGFncyovCisrICAjZW5kaWYKKyt9OworK3N0 YXRpYyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy RnJhbWVJbmZvIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJ bmZvOworIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTIKKy0gKiAgICAgcmV0dXJuIF9fcHl4 X3Jlc3VsdAorLSAqIGNkZWYgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShQcm9w ZXJ0eSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19weXhfcmVz dWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0Lm5hbWUgPSBfX3B5eF9zdGF0 ZVsxXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGlmIGxlbihfX3B5eF9z dGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CistICogICAg ICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzJdKQorLSAqLwor LSAgaWYgKHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKy0gICAg UHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5v dCBzdWJzY3JpcHRhYmxlIik7CistICAgIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3Ip CistICB9CistICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19w eXhfc3RhdGUsIDAsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEp OworLSAgX19QeXhfR09UUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0LT5kYXRhKTsKKy0gIF9fUHl4 X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+ZGF0YSk7CistICBfX3B5eF92X19fcHl4X3Jl c3VsdC0+ZGF0YSA9IF9fcHl4X3RfMTsKKy0gIF9fcHl4X3RfMSA9IDA7CistICBpZiAodW5saWtl bHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAgICBQeUVycl9TZXRTdHJp bmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFi bGUiKTsKKy0gICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKytzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZv KFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9OX1VOVVNF RCBQeU9iamVjdCAqaykgeworKyAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyRnJhbWVJbmZvICpwOworKyAgUHlPYmplY3QgKm87CisrICBpZiAobGlrZWx5KCh0 LT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09IDApKSB7CisrICAgIG8gPSAo KnQtPnRwX2FsbG9jKSh0LCAwKTsKKysgIH0gZWxzZSB7CisrICAgIG8gPSAoUHlPYmplY3QgKikg UHlCYXNlT2JqZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5X3R1cGxlLCAwKTsKKyAgIH0K Ky0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0 ZSwgMSwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMSk7CistICBf X1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPm5hbWUpOworLSAgX19QeXhfREVDUkVG KF9fcHl4X3ZfX19weXhfcmVzdWx0LT5uYW1lKTsKKy0gIF9fcHl4X3ZfX19weXhfcmVzdWx0LT5u YW1lID0gX19weXhfdF8xOworLSAgX19weXhfdF8xID0gMDsKKysgIGlmICh1bmxpa2VseSghbykp IHJldHVybiAwOworKyAgcCA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyRnJhbWVJbmZvICopbyk7CisrICBwLT5fX3B5eF92dGFiID0gX19weXhfdnRhYnB0 cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvOworKyAgcmV0dXJuIG87Cisr fQorIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xl X1Byb3BlcnR5X19zZXRfc3RhdGUoUHJvcGVydHkgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9z dGF0ZSk6CistICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4 X3Jlc3VsdC5uYW1lID0gX19weXhfc3RhdGVbMV0KKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRl KSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0 ZShfX3B5eF9zdGF0ZVsyXSkKKy0gKi8KKy0gIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0 YXRlID09IFB5X05vbmUpKSB7CistICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3Is ICJvYmplY3Qgb2YgdHlwZSAnTm9uZVR5cGUnIGhhcyBubyBsZW4oKSIpOworLSAgICBfX1BZWF9F UlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgfQorLSAgX19weXhfdF8zID0gUHlUdXBsZV9H RVRfU0laRShfX3B5eF92X19fcHl4X3N0YXRlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA9PSAo KFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f cHl4X3RfNCA9ICgoX19weXhfdF8zID4gMikgIT0gMCk7CistICBpZiAoX19weXhfdF80KSB7Cist ICB9IGVsc2UgeworLSAgICBfX3B5eF90XzIgPSBfX3B5eF90XzQ7CistICAgIGdvdG8gX19weXhf TDRfYm9vbF9iaW5vcF9kb25lOworK3N0YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1 dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyhQeU9iamVjdCAqbykgeworKyAgI2lmIENZ VEhPTl9VU0VfVFBfRklOQUxJWkUKKysgIGlmICh1bmxpa2VseShQeVR5cGVfSGFzRmVhdHVyZShQ eV9UWVBFKG8pLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmIFB5X1RZUEUobyktPnRwX2Zp bmFsaXplKSAmJiAoIVB5VHlwZV9JU19HQyhQeV9UWVBFKG8pKSB8fCAhX1B5R0NfRklOQUxJWkVE KG8pKSkgeworKyAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKG8pKSBy ZXR1cm47CisgICB9CistICBfX3B5eF90XzQgPSBfX1B5eF9IYXNBdHRyKCgoUHlPYmplY3QgKilf X3B5eF92X19fcHl4X3Jlc3VsdCksIF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KF9fcHl4 X3RfNCA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAg X19weXhfdF81ID0gKF9fcHl4X3RfNCAhPSAwKTsKKy0gIF9fcHl4X3RfMiA9IF9fcHl4X3RfNTsK Ky0gIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7CistICBpZiAoX19weXhfdF8yKSB7CisrICAj ZW5kaWYKKysgICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7CisrfQorIAorLSAgICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoxNAorLSAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRl WzBdOyBfX3B5eF9yZXN1bHQubmFtZSA9IF9fcHl4X3N0YXRlWzFdCistICogICAgIGlmIGxlbihf X3B5eF9zdGF0ZSkgPiAyIGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6Cist ICogICAgICAgICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzJdKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICovCistICAgIF9fcHl4X3RfNiA9IF9fUHl4 X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfcmVzdWx0KSwg X19weXhfbl9zX2RpY3QpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAx NCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgICBf X3B5eF90XzcgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNiwgX19weXhfbl9z X3VwZGF0ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgICBpZiAodW5saWtlbHkoX19weXhf dl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4 Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVjdCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOwor LSAgICAgIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCistICAgIH0KKy0gICAgX19w eXhfdF82ID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5eF92X19fcHl4X3N0YXRlLCAyLCBs b25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigxLCAxNCwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOworLSAgICBfX3B5eF90XzggPSBOVUxMOworLSAgICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzcpKSkgewor LSAgICAgIF9fcHl4X3RfOCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNyk7CistICAgICAg aWYgKGxpa2VseShfX3B5eF90XzgpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQ eU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF83KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihf X3B5eF90XzgpOworLSAgICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9f UHl4X0RFQ1JFRl9TRVQoX19weXhfdF83LCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9Cist ICAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfNywgX19weXhfdF84LCBfX3B5eF90XzYpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFy ZyhfX3B5eF90XzcsIF9fcHl4X3RfNik7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF84KTsg X19weXhfdF84ID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDE0LCBfX3B5 eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKytzdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWV0aG9kc185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvW10gPSB7CisrICB7Il9fcmVkdWNl X2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NVJlbmRlckZyYW1lSW5mb18xX19yZWR1Y2VfY3l0aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwKKysg IHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fM19fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhf TywgMH0sCisrICB7MCwgMCwgMCwgMH0KKyt9OworIAorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQp IjoxMworLSAqIGNkZWYgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZShQcm9wZXJ0 eSBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgX19weXhfcmVzdWx0 LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0Lm5hbWUgPSBfX3B5eF9zdGF0ZVsx XQorLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1 bHQsICdfX2RpY3RfXycpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAg ICBfX3B5eF9yZXN1bHQuX19kaWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzJdKQorLSAqLworLSAg fQorLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTEKKy0gKiAgICAgICAgIF9fcHl4X3VucGlj a2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoPFByb3BlcnR5PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0 YXRlKQorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CistICogY2RlZiBfX3B5eF91bnBpY2ts ZV9Qcm9wZXJ0eV9fc2V0X3N0YXRlKFByb3BlcnR5IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhf c3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIF9fcHl4X3Jlc3Vs dC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5uYW1lID0gX19weXhfc3RhdGVb MV0KKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19weXhfcmVz dWx0LCAnX19kaWN0X18nKToKKy0gKi8KKytzdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyA9IHsKKysgIFB5VmFyT2JqZWN0 X0hFQURfSU5JVCgwLCAwKQorKyAgInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJGcmFtZUluZm8i LCAvKnRwX25hbWUqLworKyAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X1JlbmRlckZyYW1lSW5mbyksIC8qdHBfYmFzaWNzaXplKi8KKysgIDAsIC8qdHBfaXRl bXNpemUqLworKyAgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy RnJhbWVJbmZvLCAvKnRwX2RlYWxsb2MqLworKyAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4 MDBiNAorKyAgMCwgLyp0cF9wcmludCovCisrICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hF WCA+PSAweDAzMDgwMGI0CisrICAwLCAvKnRwX3ZlY3RvcmNhbGxfb2Zmc2V0Ki8KKysgICNlbmRp ZgorKyAgMCwgLyp0cF9nZXRhdHRyKi8KKysgIDAsIC8qdHBfc2V0YXR0ciovCisrICAjaWYgUFlf TUFKT1JfVkVSU0lPTiA8IDMKKysgIDAsIC8qdHBfY29tcGFyZSovCisrICAjZW5kaWYKKysgICNp ZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgIDAsIC8qdHBfYXNfYXN5bmMqLworKyAgI2VuZGlm CisrICAwLCAvKnRwX3JlcHIqLworKyAgMCwgLyp0cF9hc19udW1iZXIqLworKyAgMCwgLyp0cF9h c19zZXF1ZW5jZSovCisrICAwLCAvKnRwX2FzX21hcHBpbmcqLworKyAgMCwgLyp0cF9oYXNoKi8K KysgIDAsIC8qdHBfY2FsbCovCisrICAwLCAvKnRwX3N0ciovCisrICAwLCAvKnRwX2dldGF0dHJv Ki8KKysgIDAsIC8qdHBfc2V0YXR0cm8qLworKyAgMCwgLyp0cF9hc19idWZmZXIqLworKyAgUHlf VFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBR3xQeV9UUEZMQUdTX0NI RUNLVFlQRVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUnxQeV9UUEZMQUdTX0JBU0VUWVBFLCAv KnRwX2ZsYWdzKi8KKysgIDAsIC8qdHBfZG9jKi8KKysgIDAsIC8qdHBfdHJhdmVyc2UqLworKyAg MCwgLyp0cF9jbGVhciovCisrICAwLCAvKnRwX3JpY2hjb21wYXJlKi8KKysgIDAsIC8qdHBfd2Vh a2xpc3RvZmZzZXQqLworKyAgMCwgLyp0cF9pdGVyKi8KKysgIDAsIC8qdHBfaXRlcm5leHQqLwor KyAgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLCAv KnRwX21ldGhvZHMqLworKyAgMCwgLyp0cF9tZW1iZXJzKi8KKysgIDAsIC8qdHBfZ2V0c2V0Ki8K KysgIDAsIC8qdHBfYmFzZSovCisrICAwLCAvKnRwX2RpY3QqLworKyAgMCwgLyp0cF9kZXNjcl9n ZXQqLworKyAgMCwgLyp0cF9kZXNjcl9zZXQqLworKyAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8KKysg IDAsIC8qdHBfaW5pdCovCisrICAwLCAvKnRwX2FsbG9jKi8KKysgIF9fcHl4X3RwX25ld185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLCAvKnRwX25ldyovCisrICAwLCAvKnRw X2ZyZWUqLworKyAgMCwgLyp0cF9pc19nYyovCisrICAwLCAvKnRwX2Jhc2VzKi8KKysgIDAsIC8q dHBfbXJvKi8KKysgIDAsIC8qdHBfY2FjaGUqLworKyAgMCwgLyp0cF9zdWJjbGFzc2VzKi8KKysg IDAsIC8qdHBfd2Vha2xpc3QqLworKyAgMCwgLyp0cF9kZWwqLworKyAgMCwgLyp0cF92ZXJzaW9u X3RhZyovCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBhMQorKyAgMCwgLyp0cF9m aW5hbGl6ZSovCisrICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGIx ICYmICghQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZIHx8IFBZUFlfVkVSU0lPTl9OVU0gPj0gMHgw NzAzMDgwMCkKKysgIDAsIC8qdHBfdmVjdG9yY2FsbCovCisrICAjZW5kaWYKKysgICNpZiBQWV9W RVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAor KyAgMCwgLyp0cF9wcmludCovCisrICAjZW5kaWYKKysgICNpZiBDWVRIT05fQ09NUElMSU5HX0lO X1BZUFkgJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA5MDAwMAorKyAgMCwgLyp0cF9weXB5X2Zs YWdzKi8KKysgICNlbmRpZgorK307CisgCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0g IF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4 X0wwOworLSAgX19weXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOwor LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90Xzcp OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzgpOworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2 aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZSIsIF9f cHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworLSAgX19weXhfciA9 IDA7CistICBfX3B5eF9MMDo7CistICBfX1B5eF9YR0lWRVJFRihfX3B5eF9yKTsKKy0gIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIF9fcHl4X3I7Cisrc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQo UHlUeXBlT2JqZWN0ICp0LCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICphLCBDWVRIT05fVU5VU0VE IFB5T2JqZWN0ICprKSB7CisrICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJDb250ZXh0ICpwOworKyAgUHlPYmplY3QgKm87CisrICBpZiAobGlrZWx5KCh0LT50 cF9mbGFncyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09IDApKSB7CisrICAgIG8gPSAoKnQt PnRwX2FsbG9jKSh0LCAwKTsKKysgIH0gZWxzZSB7CisrICAgIG8gPSAoUHlPYmplY3QgKikgUHlC YXNlT2JqZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5X3R1cGxlLCAwKTsKKysgIH0KKysg IGlmICh1bmxpa2VseSghbykpIHJldHVybiAwOworKyAgcCA9ICgoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKW8pOworKyAgcC0+X21wdiA9ICgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKVB5X05vbmUp OyBQeV9JTkNSRUYoUHlfTm9uZSk7CisrICBwLT51cGRhdGVfY2IgPSBQeV9Ob25lOyBQeV9JTkNS RUYoUHlfTm9uZSk7CisrICBwLT5feDExX2Rpc3BsYXkgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlf Tm9uZSk7CisrICBwLT5fd2xfZGlzcGxheSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsK KysgIHAtPl9nZXRfcHJvY19hZGRyZXNzID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwor KyAgcmV0dXJuIG87CisgfQorIAorLS8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0gKiBkZWYgX19w eXhfdW5waWNrbGVfRXZlbnQoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhf c3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0 IF9fcHl4X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAq LworLQorLS8qIFB5dGhvbiB3cmFwcGVyICovCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVfX3B5eF91bnBpY2tsZV9FdmVudChQeU9iamVjdCAqX19w eXhfc2VsZiwgUHlPYmplY3QgKl9fcHl4X2FyZ3MsIFB5T2JqZWN0ICpfX3B5eF9rd2RzKTsgLypw cm90byovCistc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18z bXB2XzE1X19weXhfdW5waWNrbGVfRXZlbnQgPSB7Il9fcHl4X3VucGlja2xlX0V2ZW50IiwgKFB5 Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzE1X19weXhfdW5waWNrbGVfRXZlbnQsIE1FVEhfVkFSQVJHU3xNRVRI X0tFWVdPUkRTLCAwfTsKKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNV9fcHl4X3VucGlja2xlX0V2ZW50KFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9i amVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKy0gIFB5T2JqZWN0ICpf X3B5eF92X19fcHl4X3R5cGUgPSAwOworLSAgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtOwor LSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUgPSAwOworLSAgaW50IF9fcHl4X2xpbmVu byA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZO YW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3Vu cGlja2xlX0V2ZW50ICh3cmFwcGVyKSIsIDApOworK3N0YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxs b2NfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQoUHlPYmplY3QgKm8pIHsKKysg IHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKnAg PSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAq KW87CisrICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5BTElaRQorKyAgaWYgKHVubGlrZWx5KFB5VHlw ZV9IYXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkgJiYgUHlf VFlQRShvKS0+dHBfZmluYWxpemUpICYmICFfUHlHQ19GSU5BTElaRUQobykpIHsKKysgICAgaWYg KFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJuOworKyAgfQorKyAg I2VuZGlmCisrICBQeU9iamVjdF9HQ19VblRyYWNrKG8pOworICAgeworLSAgICBzdGF0aWMgUHlP YmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19weXhfdHlwZSwmX19weXhf bl9zX3B5eF9jaGVja3N1bSwmX19weXhfbl9zX3B5eF9zdGF0ZSwwfTsKKy0gICAgUHlPYmplY3Qq IHZhbHVlc1szXSA9IHswLDAsMH07CistICAgIGlmICh1bmxpa2VseShfX3B5eF9rd2RzKSkgewor LSAgICAgIFB5X3NzaXplX3Qga3dfYXJnczsKKy0gICAgICBjb25zdCBQeV9zc2l6ZV90IHBvc19h cmdzID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19h cmdzKSB7CistICAgICAgICBjYXNlICAzOiB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9f cHl4X2FyZ3MsIDIpOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2Fz ZSAgMjogdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAg ICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6IHZhbHVlc1swXSA9IFB5 VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7CistICAgICAgICBDWVRIT05fRkFMTFRIUk9V R0g7CistICAgICAgICBjYXNlICAwOiBicmVhazsKKy0gICAgICAgIGRlZmF1bHQ6IGdvdG8gX19w eXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAgfQorLSAgICAgIGt3X2FyZ3MgPSBQeURpY3Rf U2l6ZShfX3B5eF9rd2RzKTsKKy0gICAgICBzd2l0Y2ggKHBvc19hcmdzKSB7CistICAgICAgICBj YXNlICAwOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzBdID0gX19QeXhfUHlEaWN0X0dl dEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF90eXBlKSkgIT0gMCkpIGt3X2FyZ3Mt LTsKKy0gICAgICAgIGVsc2UgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKKy0gICAgICAg IENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNhc2UgIDE6CistICAgICAgICBpZiAobGlr ZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5 eF9uX3NfcHl4X2NoZWNrc3VtKSkgIT0gMCkpIGt3X2FyZ3MtLTsKKy0gICAgICAgIGVsc2Ugewor LSAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVfRXZl bnQiLCAxLCAzLCAzLCAxKTsgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAg ICAgfQorLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgY2FzZSAgMjoKKy0g ICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1syXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9f cHl4X2t3ZHMsIF9fcHl4X25fc19weXhfc3RhdGUpKSAhPSAwKSkga3dfYXJncy0tOworLSAgICAg ICAgZWxzZSB7CistICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX3B5eF91 bnBpY2tsZV9FdmVudCIsIDEsIDMsIDMsIDIpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJy b3IpCistICAgICAgICB9CistICAgICAgfQorLSAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4g MCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMo X19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9fcHl4 X3VucGlja2xlX0V2ZW50IikgPCAwKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQor LSAgICAgIH0KKy0gICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9 IDMpIHsKKy0gICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICB9IGVsc2Ug eworLSAgICAgIHZhbHVlc1swXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMCk7Cist ICAgICAgdmFsdWVzWzFdID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF9hcmdzLCAxKTsKKy0gICAg ICB2YWx1ZXNbMl0gPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDIpOworLSAgICB9Cist ICAgIF9fcHl4X3ZfX19weXhfdHlwZSA9IHZhbHVlc1swXTsKKy0gICAgX19weXhfdl9fX3B5eF9j aGVja3N1bSA9IF9fUHl4X1B5SW50X0FzX2xvbmcodmFsdWVzWzFdKTsgaWYgKHVubGlrZWx5KChf X3B5eF92X19fcHl4X2NoZWNrc3VtID09IChsb25nKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDEsIDEsIF9fcHl4X0wzX2Vycm9yKQorLSAgICBfX3B5eF92X19fcHl4X3N0YXRl ID0gdmFsdWVzWzJdOworKyAgICBQeU9iamVjdCAqZXR5cGUsICpldmFsLCAqZXRiOworKyAgICBQ eUVycl9GZXRjaCgmZXR5cGUsICZldmFsLCAmZXRiKTsKKysgICAgX19QeXhfU0VUX1JFRkNOVChv LCBQeV9SRUZDTlQobykgKyAxKTsKKysgICAgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF8yMV9fZGVhbGxvY19fKG8pOworKyAgICBfX1B5eF9TRVRfUkVGQ05U KG8sIFB5X1JFRkNOVChvKSAtIDEpOworKyAgICBQeUVycl9SZXN0b3JlKGV0eXBlLCBldmFsLCBl dGIpOworICAgfQorLSAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKy0g IF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlk KCJfX3B5eF91bnBpY2tsZV9FdmVudCIsIDEsIDMsIDMsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhf YXJncykpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCistICBfX3B5eF9MM19lcnJv cjo7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fX3B5eF91bnBp Y2tsZV9FdmVudCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUp OworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gTlVMTDsKKy0g IF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3IgPSBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfX3B5eF91bnBpY2tsZV9FdmVudChfX3B5eF9zZWxm LCBfX3B5eF92X19fcHl4X3R5cGUsIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIF9fcHl4X3ZfX19w eXhfc3RhdGUpOworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworKyAgUHlfQ0xFQVIocC0+ X21wdik7CisrICBQeV9DTEVBUihwLT51cGRhdGVfY2IpOworKyAgUHlfQ0xFQVIocC0+X3gxMV9k aXNwbGF5KTsKKysgIFB5X0NMRUFSKHAtPl93bF9kaXNwbGF5KTsKKysgIFB5X0NMRUFSKHAtPl9n ZXRfcHJvY19hZGRyZXNzKTsKKysgICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7CisgfQorIAor LXN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X19weXhf dW5waWNrbGVfRXZlbnQoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqX19weXhfc2VsZiwgUHlPYmpl Y3QgKl9fcHl4X3ZfX19weXhfdHlwZSwgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtLCBQeU9i amVjdCAqX19weXhfdl9fX3B5eF9zdGF0ZSkgeworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhf UGlja2xlRXJyb3IgPSAwOworLSAgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfcmVzdWx0ID0gMDsK Ky0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRp b25zCistICBpbnQgX19weXhfdF8xOworLSAgUHlPYmplY3QgKl9fcHl4X3RfMiA9IE5VTEw7Cist ICBQeU9iamVjdCAqX19weXhfdF8zID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBO VUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNSA9IE5VTEw7CistICBpbnQgX19weXhfdF82Owor LSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19weXhfdW5waWNrbGVfRXZlbnQiLCAwKTsKKy0KKy0gIC8qICIodHJlZSBmcmFn bWVudCkiOjQKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAg Y2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4 ZGEzOGMyNTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZnJvbSBw aWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCistICogICAgICAg ICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMg MHhkYTM4YzI1ID0gKGRhdGEsIGVycm9yLCBpZCwgcmVwbHlfdXNlcmRhdGEpKSIgJSBfX3B5eF9j aGVja3N1bSkKKy0gKi8KKy0gIF9fcHl4X3RfMSA9ICgoX19weXhfdl9fX3B5eF9jaGVja3N1bSAh PSAweGRhMzhjMjUpICE9IDApOworLSAgaWYgKF9fcHl4X3RfMSkgeworK3N0YXRpYyBpbnQgX19w eXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQoUHlPYmpl Y3QgKm8sIHZpc2l0cHJvYyB2LCB2b2lkICphKSB7CisrICBpbnQgZTsKKysgIHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKnAgPSAoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKW87CisrICBpZiAo cC0+X21wdikgeworKyAgICBlID0gKCp2KSgoKFB5T2JqZWN0ICopcC0+X21wdiksIGEpOyBpZiAo ZSkgcmV0dXJuIGU7CisrICB9CisrICBpZiAocC0+dXBkYXRlX2NiKSB7CisrICAgIGUgPSAoKnYp KHAtPnVwZGF0ZV9jYiwgYSk7IGlmIChlKSByZXR1cm4gZTsKKysgIH0KKysgIGlmIChwLT5feDEx X2Rpc3BsYXkpIHsKKysgICAgZSA9ICgqdikocC0+X3gxMV9kaXNwbGF5LCBhKTsgaWYgKGUpIHJl dHVybiBlOworKyAgfQorKyAgaWYgKHAtPl93bF9kaXNwbGF5KSB7CisrICAgIGUgPSAoKnYpKHAt Pl93bF9kaXNwbGF5LCBhKTsgaWYgKGUpIHJldHVybiBlOworKyAgfQorKyAgaWYgKHAtPl9nZXRf cHJvY19hZGRyZXNzKSB7CisrICAgIGUgPSAoKnYpKHAtPl9nZXRfcHJvY19hZGRyZXNzLCBhKTsg aWYgKGUpIHJldHVybiBlOworKyAgfQorKyAgcmV0dXJuIDA7CisrfQorIAorLSAgICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjo1CistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqICAg ICBpZiBfX3B5eF9jaGVja3N1bSAhPSAweGRhMzhjMjU6CistICogICAgICAgICBmcm9tIHBpY2ts ZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19weXhfUGlja2xlRXJyb3IgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgcmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29t cGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQsIHJl cGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hlY2tzdW0pCistICogICAgIF9fcHl4X3Jlc3VsdCA9 IEV2ZW50Ll9fbmV3X18oX19weXhfdHlwZSkKKy0gKi8KKy0gICAgX19weXhfdF8yID0gUHlMaXN0 X05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhf TDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX1B5eF9JTkNS RUYoX19weXhfbl9zX1BpY2tsZUVycm9yKTsKKy0gICAgX19QeXhfR0lWRVJFRihfX3B5eF9uX3Nf UGlja2xlRXJyb3IpOworLSAgICBQeUxpc3RfU0VUX0lURU0oX19weXhfdF8yLCAwLCBfX3B5eF9u X3NfUGlja2xlRXJyb3IpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9JbXBvcnQoX19weXhfbl9z X3BpY2tsZSwgX19weXhfdF8yLCAtMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhf RVJSKDEsIDUsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsK Ky0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fcHl4 X3RfMiA9IF9fUHl4X0ltcG9ydEZyb20oX19weXhfdF8zLCBfX3B5eF9uX3NfUGlja2xlRXJyb3Ip OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA1LCBfX3B5eF9MMV9lcnJv cikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzIpOworLSAgICBfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yID0gX19weXhfdF8yOworLSAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKy0gICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistCistICAgIC8qICIodHJlZSBmcmFnbWVu dCkiOjYKKy0gKiAgICAgaWYgX19weXhfY2hlY2tzdW0gIT0gMHhkYTM4YzI1OgorLSAqICAgICAg ICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCist ICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3Vt cyAoJXMgdnMgMHhkYTM4YzI1ID0gKGRhdGEsIGVycm9yLCBpZCwgcmVwbHlfdXNlcmRhdGEpKSIg JSBfX3B5eF9jaGVja3N1bSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBf X3B5eF9yZXN1bHQgPSBFdmVudC5fX25ld19fKF9fcHl4X3R5cGUpCistICogICAgIGlmIF9fcHl4 X3N0YXRlIGlzIG5vdCBOb25lOgorLSAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9G cm9tX2xvbmcoX19weXhfdl9fX3B5eF9jaGVja3N1bSk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKy0gICAgX19weXhfdF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2tw X3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4ZGEsIF9fcHl4X3RfMik7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9f cHl4X3RfMiA9IDA7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9y KTsKKy0gICAgX19weXhfdF8yID0gX19weXhfdl9fX3B5eF9QaWNrbGVFcnJvcjsgX19weXhfdF81 ID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICAgIF9fcHl4X3RfNSA9IFB5TWV0aG9kX0dF VF9TRUxGKF9fcHl4X3RfMik7CistICAgICAgaWYgKGxpa2VseShfX3B5eF90XzUpKSB7CistICAg ICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF8y KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworLSAgICAgICAgX19QeXhfSU5D UkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF8yLCBmdW5j dGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUpID8g X19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF81LCBfX3B5eF90XzQp IDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfNCk7CistICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0gICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8zKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 CistICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMywgMCwgMCwgMCk7CistICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICBfX1BZWF9FUlIoMSwgNiwgX19weXhf TDFfZXJyb3IpCistCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKy0gKiAgICAgY2RlZiBv YmplY3QgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0 CistICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4ZGEzOGMyNTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9y IGFzIF9fcHl4X1BpY2tsZUVycm9yCistICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJv cigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhkYTM4YzI1ID0gKGRhdGEsIGVycm9y LCBpZCwgcmVwbHlfdXNlcmRhdGEpKSIgJSBfX3B5eF9jaGVja3N1bSkKKy0gKi8KKy0gIH0KKy0K Ky0gIC8qICIodHJlZSBmcmFnbWVudCkiOjcKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9y dCBQaWNrbGVFcnJvciBhcyBfX3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICAgICAgcmFpc2UgX19w eXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9 IChkYXRhLCBlcnJvciwgaWQsIHJlcGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hlY2tzdW0pCist ICogICAgIF9fcHl4X3Jlc3VsdCA9IEV2ZW50Ll9fbmV3X18oX19weXhfdHlwZSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3QgTm9uZToK Ky0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5 eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50KSwgX19weXhfbl9zX25ldyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 CistICBfX3B5eF90XzQgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBs aWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKKy0gICAgX19weXhfdF80ID0gUHlN ZXRob2RfR0VUX1NFTEYoX19weXhfdF8yKTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90XzQpKSB7 CistICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4 X3RfMik7CistICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNCk7CistICAgICAgX19QeXhfSU5D UkVGKGZ1bmN0aW9uKTsKKy0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfMiwgZnVuY3Rp b24pOworLSAgICB9CistICB9CistICBfX3B5eF90XzMgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5 T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdl9fX3B5eF90eXBl KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X19fcHl4X3R5 cGUpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMSwgNywgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworLSAgX19weXhfdl9fX3B5eF9yZXN1bHQgPSBfX3B5eF90XzM7CistICBf X3B5eF90XzMgPSAwOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6OAorLSAqICAgICAgICAg cmFpc2UgX19weXhfUGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4 ZGEzOGMyNSA9IChkYXRhLCBlcnJvciwgaWQsIHJlcGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hl Y2tzdW0pCistICogICAgIF9fcHl4X3Jlc3VsdCA9IEV2ZW50Ll9fbmV3X18oX19weXhfdHlwZSkK Ky0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2 ZW50PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19weXhfcmVz dWx0CistICovCistICBfX3B5eF90XzEgPSAoX19weXhfdl9fX3B5eF9zdGF0ZSAhPSBQeV9Ob25l KTsKKy0gIF9fcHl4X3RfNiA9IChfX3B5eF90XzEgIT0gMCk7CistICBpZiAoX19weXhfdF82KSB7 CistCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0g RXZlbnQuX19uZXdfXyhfX3B5eF90eXBlKQorLSAqICAgICBpZiBfX3B5eF9zdGF0ZSBpcyBub3Qg Tm9uZToKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2ZW50 PiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2 ZW50X19zZXRfc3RhdGUoRXZlbnQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6Cist ICovCistICAgIGlmICghKGxpa2VseShQeVR1cGxlX0NoZWNrRXhhY3QoX19weXhfdl9fX3B5eF9z dGF0ZSkpfHwoKF9fcHl4X3ZfX19weXhfc3RhdGUpID09IFB5X05vbmUpfHwoUHlFcnJfRm9ybWF0 KFB5RXhjX1R5cGVFcnJvciwgIkV4cGVjdGVkICUuMTZzLCBnb3QgJS4yMDBzIiwgInR1cGxlIiwg UHlfVFlQRShfX3B5eF92X19fcHl4X3N0YXRlKS0+dHBfbmFtZSksIDApKSkgX19QWVhfRVJSKDEs IDksIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX3B5eF90XzMgPSBfX3B5eF9mXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKCgoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilfX3B5eF92X19fcHl4X3Jlc3VsdCks ICgoUHlPYmplY3QqKV9fcHl4X3ZfX19weXhfc3RhdGUpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMSwgOSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsK Ky0KKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6OAorLSAqICAgICAgICAgcmFpc2UgX19weXhf UGlja2xlRXJyb3IoIkluY29tcGF0aWJsZSBjaGVja3N1bXMgKCVzIHZzIDB4ZGEzOGMyNSA9IChk YXRhLCBlcnJvciwgaWQsIHJlcGx5X3VzZXJkYXRhKSkiICUgX19weXhfY2hlY2tzdW0pCistICog ICAgIF9fcHl4X3Jlc3VsdCA9IEV2ZW50Ll9fbmV3X18oX19weXhfdHlwZSkKKy0gKiAgICAgaWYg X19weXhfc3RhdGUgaXMgbm90IE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoPEV2ZW50PiBfX3B5eF9y ZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CistICovCist ICB9Cisrc3RhdGljIGludCBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVu ZGVyQ29udGV4dChQeU9iamVjdCAqbykgeworKyAgUHlPYmplY3QqIHRtcDsKKysgIHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKnAgPSAoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqKW87CisrICB0 bXAgPSAoKFB5T2JqZWN0KilwLT5fbXB2KTsKKysgIHAtPl9tcHYgPSAoKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilQeV9Ob25lKTsgUHlfSU5DUkVGKFB5 X05vbmUpOworKyAgUHlfWERFQ1JFRih0bXApOworKyAgdG1wID0gKChQeU9iamVjdCopcC0+dXBk YXRlX2NiKTsKKysgIHAtPnVwZGF0ZV9jYiA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsK KysgIFB5X1hERUNSRUYodG1wKTsKKysgIHRtcCA9ICgoUHlPYmplY3QqKXAtPl94MTFfZGlzcGxh eSk7CisrICBwLT5feDExX2Rpc3BsYXkgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7Cisr ICBQeV9YREVDUkVGKHRtcCk7CisrICB0bXAgPSAoKFB5T2JqZWN0KilwLT5fd2xfZGlzcGxheSk7 CisrICBwLT5fd2xfZGlzcGxheSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIFB5 X1hERUNSRUYodG1wKTsKKysgIHRtcCA9ICgoUHlPYmplY3QqKXAtPl9nZXRfcHJvY19hZGRyZXNz KTsKKysgIHAtPl9nZXRfcHJvY19hZGRyZXNzID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUp OworKyAgUHlfWERFQ1JFRih0bXApOworKyAgcmV0dXJuIDA7CisrfQorIAorLSAgLyogIih0cmVl IGZyYWdtZW50KSI6MTAKKy0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5vbmU6CistICog ICAgICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKDxFdmVudD4gX19weXhfcmVz dWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogY2RlZiBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0 YXRlKEV2ZW50IF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgorLSAqICAgICBfX3B5 eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQuZXJyb3IgPSBfX3B5 eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LmlkID0gX19weXhfc3RhdGVbMl07IF9fcHl4X3Jlc3Vs dC5yZXBseV91c2VyZGF0YSA9IF9fcHl4X3N0YXRlWzNdCistICovCistICBfX1B5eF9YREVDUkVG KF9fcHl4X3IpOworLSAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKy0gIF9f cHl4X3IgPSBfX3B5eF92X19fcHl4X3Jlc3VsdDsKKy0gIGdvdG8gX19weXhfTDA7Cisrc3RhdGlj IFB5TWV0aG9kRGVmIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHRbXSA9IHsKKysgIHsic2V0X2ljY19wcm9maWxlIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfM3NldF9pY2NfcHJvZmlsZSwg TUVUSF9PLCAwfSwKKysgIHsic2V0X2FtYmllbnRfbGlnaHQiLCAoUHlDRnVuY3Rpb24pX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF81c2V0X2FtYmllbnRfbGln aHQsIE1FVEhfTywgMH0sCisrICB7ImdldF9uZXh0X2ZyYW1lX2luZm8iLCAoUHlDRnVuY3Rpb24p X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF83Z2V0X25leHRf ZnJhbWVfaW5mbywgTUVUSF9OT0FSR1MsIDB9LAorKyAgeyJzZXRfdXBkYXRlX2NhbGxiYWNrIiwg KFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfOXNldF91cGRhdGVfY2FsbGJhY2ssIE1FVEhfTywgMH0sCisrICB7InVwZGF0ZSIsIChQeUNG dW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEx dXBkYXRlLCBNRVRIX05PQVJHUywgMH0sCisrICB7InJlbmRlciIsIChQeUNGdW5jdGlvbikodm9p ZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAw fSwKKysgIHsicmVwb3J0X3N3YXAiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNXJlcG9ydF9zd2FwLCBNRVRIX05PQVJHUywgMH0s CisrICB7ImZyZWUiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF8xN2ZyZWUsIE1FVEhfTk9BUkdTLCAwfSwKKysgIHsiY2xvc2UiLCAo UHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF8xOWNsb3NlLCBNRVRIX05PQVJHUywgMH0sCisrICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5 Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRf MjNfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9LAorKyAgeyJfX3NldHN0YXRlX2N5 dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMjVfX3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAorKyAgezAsIDAs IDAsIDB9CisrfTsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0gKiBkZWYgX19weXhf dW5waWNrbGVfRXZlbnQoX19weXhfdHlwZSwgbG9uZyBfX3B5eF9jaGVja3N1bSwgX19weXhfc3Rh dGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNkZWYgb2JqZWN0IF9f cHl4X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X3Jlc3VsdAorLSAqLwor K3N0YXRpYyBQeVR5cGVPYmplY3QgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVu ZGVyQ29udGV4dCA9IHsKKysgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgwLCAwKQorKyAgInZpZGN1 dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0IiwgLyp0cF9uYW1lKi8KKysgIHNpemVvZihzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSwgLyp0cF9i YXNpY3NpemUqLworKyAgMCwgLyp0cF9pdGVtc2l6ZSovCisrICBfX3B5eF90cF9kZWFsbG9jXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LCAvKnRwX2RlYWxsb2MqLworKyAgI2lm IFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBiNAorKyAgMCwgLyp0cF9wcmludCovCisrICAjZW5k aWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0CisrICAwLCAvKnRwX3ZlY3Rv cmNhbGxfb2Zmc2V0Ki8KKysgICNlbmRpZgorKyAgMCwgLyp0cF9nZXRhdHRyKi8KKysgIDAsIC8q dHBfc2V0YXR0ciovCisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKysgIDAsIC8qdHBfY29t cGFyZSovCisrICAjZW5kaWYKKysgICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgIDAsIC8q dHBfYXNfYXN5bmMqLworKyAgI2VuZGlmCisrICAwLCAvKnRwX3JlcHIqLworKyAgMCwgLyp0cF9h c19udW1iZXIqLworKyAgMCwgLyp0cF9hc19zZXF1ZW5jZSovCisrICAwLCAvKnRwX2FzX21hcHBp bmcqLworKyAgMCwgLyp0cF9oYXNoKi8KKysgIDAsIC8qdHBfY2FsbCovCisrICAwLCAvKnRwX3N0 ciovCisrICAwLCAvKnRwX2dldGF0dHJvKi8KKysgIDAsIC8qdHBfc2V0YXR0cm8qLworKyAgMCwg Lyp0cF9hc19idWZmZXIqLworKyAgUHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9W RVJTSU9OX1RBR3xQeV9UUEZMQUdTX0NIRUNLVFlQRVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZF UnxQeV9UUEZMQUdTX0JBU0VUWVBFfFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCisr ICAwLCAvKnRwX2RvYyovCisrICBfX3B5eF90cF90cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyQ29udGV4dCwgLyp0cF90cmF2ZXJzZSovCisrICBfX3B5eF90cF9jbGVhcl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgLyp0cF9jbGVhciovCisrICAwLCAvKnRw X3JpY2hjb21wYXJlKi8KKysgIDAsIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworKyAgMCwgLyp0cF9p dGVyKi8KKysgIDAsIC8qdHBfaXRlcm5leHQqLworKyAgX19weXhfbWV0aG9kc185dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgLyp0cF9tZXRob2RzKi8KKysgIDAsIC8qdHBfbWVt YmVycyovCisrICAwLCAvKnRwX2dldHNldCovCisrICAwLCAvKnRwX2Jhc2UqLworKyAgMCwgLyp0 cF9kaWN0Ki8KKysgIDAsIC8qdHBfZGVzY3JfZ2V0Ki8KKysgIDAsIC8qdHBfZGVzY3Jfc2V0Ki8K KysgIDAsIC8qdHBfZGljdG9mZnNldCovCisrICBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNSZW5kZXJDb250ZXh0XzFfX2luaXRfXywgLyp0cF9pbml0Ki8KKysgIDAsIC8qdHBfYWxs b2MqLworKyAgX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0 LCAvKnRwX25ldyovCisrICAwLCAvKnRwX2ZyZWUqLworKyAgMCwgLyp0cF9pc19nYyovCisrICAw LCAvKnRwX2Jhc2VzKi8KKysgIDAsIC8qdHBfbXJvKi8KKysgIDAsIC8qdHBfY2FjaGUqLworKyAg MCwgLyp0cF9zdWJjbGFzc2VzKi8KKysgIDAsIC8qdHBfd2Vha2xpc3QqLworKyAgMCwgLyp0cF9k ZWwqLworKyAgMCwgLyp0cF92ZXJzaW9uX3RhZyovCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPj0g MHgwMzA0MDBhMQorKyAgMCwgLyp0cF9maW5hbGl6ZSovCisrICAjZW5kaWYKKysgICNpZiBQWV9W RVJTSU9OX0hFWCA+PSAweDAzMDgwMGIxICYmICghQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZIHx8 IFBZUFlfVkVSU0lPTl9OVU0gPj0gMHgwNzAzMDgwMCkKKysgIDAsIC8qdHBfdmVjdG9yY2FsbCov CisrICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZF UlNJT05fSEVYIDwgMHgwMzA5MDAwMAorKyAgMCwgLyp0cF9wcmludCovCisrICAjZW5kaWYKKysg ICNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA5 MDAwMAorKyAgMCwgLyp0cF9weXB5X2ZsYWdzKi8KKysgICNlbmRpZgorK307CisgCistICAvKiBm dW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1hERUNS RUYoX19weXhfdF8yKTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsKKy0gIF9fUHl4X1hE RUNSRUYoX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsKKy0gIF9fUHl4 X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX0V2ZW50Iiwg X19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICBfX3B5eF9y ID0gTlVMTDsKKy0gIF9fcHl4X0wwOjsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9Q aWNrbGVFcnJvcik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3ZfX19weXhfcmVzdWx0KTsKKy0g IF9fUHl4X1hHSVZFUkVGKF9fcHl4X3IpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7CistICByZXR1cm4gX19weXhfcjsKKytzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dChQeVR5cGVPYmplY3QgKnQs IFB5T2JqZWN0ICphLCBQeU9iamVjdCAqaykgeworKyAgUHlPYmplY3QgKm8gPSBfX3B5eF90cF9u ZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQodCwgYSwgayk7CisrICBpZiAo dW5saWtlbHkoIW8pKSByZXR1cm4gMDsKKysgIHJldHVybiBvOworIH0KKyAKKy0vKiAiKHRyZWUg ZnJhZ21lbnQpIjoxMQorLSAqICAgICAgICAgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0 ZSg8RXZlbnQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCistICogICAgIHJldHVybiBfX3B5 eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoRXZlbnQg X19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhf cmVzdWx0LmVycm9yID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jlc3VsdC5pZCA9IF9fcHl4X3N0 YXRlWzJdOyBfX3B5eF9yZXN1bHQucmVwbHlfdXNlcmRhdGEgPSBfX3B5eF9zdGF0ZVszXQorLSAq ICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdf X2RpY3RfXycpOgorLSAqLworK3N0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0W10gPSB7CisrICB7Il9fcmVkdWNl X2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x OU9wZW5HTFJlbmRlckNvbnRleHRfM19fcmVkdWNlX2N5dGhvbl9fLCBNRVRIX05PQVJHUywgMH0s CisrICB7Il9fc2V0c3RhdGVfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF81X19zZXRzdGF0ZV9jeXRob25f XywgTUVUSF9PLCAwfSwKKysgIHswLCAwLCAwLCAwfQorK307CisgCistc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0 X3N0YXRlKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpfX3B5 eF92X19fcHl4X3Jlc3VsdCwgUHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUpIHsKKy0gIFB5 T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCist ICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0gIGludCBfX3B5eF90XzI7CistICBlbnVt IG1wdl9ldmVudF9pZCBfX3B5eF90XzM7CistICBpbnQgX19weXhfdF80OworLSAgUHlfc3NpemVf dCBfX3B5eF90XzU7CistICBpbnQgX19weXhfdF82OworLSAgaW50IF9fcHl4X3RfNzsKKy0gIFB5 T2JqZWN0ICpfX3B5eF90XzggPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfOSA9IE5VTEw7 CistICBQeU9iamVjdCAqX19weXhfdF8xMCA9IE5VTEw7CistICBpbnQgX19weXhfbGluZW5vID0g MDsKKy0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKy0gIGludCBfX3B5eF9j bGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX3B5eF91bnBpY2ts ZV9FdmVudF9fc2V0X3N0YXRlIiwgMCk7Cisrc3RhdGljIFB5VHlwZU9iamVjdCBfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ID0geworKyAgUHlWYXJP YmplY3RfSEVBRF9JTklUKDAsIDApCisrICAidmlkY3V0dGVyLmxpYnMubXB2Lk9wZW5HTFJlbmRl ckNvbnRleHQiLCAvKnRwX25hbWUqLworKyAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQpLCAvKnRwX2Jhc2ljc2l6ZSovCisr ICAwLCAvKnRwX2l0ZW1zaXplKi8KKysgIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGli c18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBfZGVhbGxvYyovCisrICAjaWYgUFlfVkVSU0lPTl9I RVggPCAweDAzMDgwMGI0CisrICAwLCAvKnRwX3ByaW50Ki8KKysgICNlbmRpZgorKyAgI2lmIFBZ X1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQKKysgIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQq LworKyAgI2VuZGlmCisrICAwLCAvKnRwX2dldGF0dHIqLworKyAgMCwgLyp0cF9zZXRhdHRyKi8K KysgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworKyAgMCwgLyp0cF9jb21wYXJlKi8KKysgICNl bmRpZgorKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMworKyAgMCwgLyp0cF9hc19hc3luYyov CisrICAjZW5kaWYKKysgIDAsIC8qdHBfcmVwciovCisrICAwLCAvKnRwX2FzX251bWJlciovCisr ICAwLCAvKnRwX2FzX3NlcXVlbmNlKi8KKysgIDAsIC8qdHBfYXNfbWFwcGluZyovCisrICAwLCAv KnRwX2hhc2gqLworKyAgMCwgLyp0cF9jYWxsKi8KKysgIDAsIC8qdHBfc3RyKi8KKysgIDAsIC8q dHBfZ2V0YXR0cm8qLworKyAgMCwgLyp0cF9zZXRhdHRybyovCisrICAwLCAvKnRwX2FzX2J1ZmZl ciovCisrICBQeV9UUEZMQUdTX0RFRkFVTFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5 X1RQRkxBR1NfQ0hFQ0tUWVBFU3xQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1Nf QkFTRVRZUEV8UHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KKysgIDAsIC8qdHBfZG9j Ki8KKysgIF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250 ZXh0LCAvKnRwX3RyYXZlcnNlKi8KKysgIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9SZW5kZXJDb250ZXh0LCAvKnRwX2NsZWFyKi8KKysgIDAsIC8qdHBfcmljaGNvbXBhcmUq LworKyAgMCwgLyp0cF93ZWFrbGlzdG9mZnNldCovCisrICAwLCAvKnRwX2l0ZXIqLworKyAgMCwg Lyp0cF9pdGVybmV4dCovCisrICBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9P cGVuR0xSZW5kZXJDb250ZXh0LCAvKnRwX21ldGhvZHMqLworKyAgMCwgLyp0cF9tZW1iZXJzKi8K KysgIDAsIC8qdHBfZ2V0c2V0Ki8KKysgIDAsIC8qdHBfYmFzZSovCisrICAwLCAvKnRwX2RpY3Qq LworKyAgMCwgLyp0cF9kZXNjcl9nZXQqLworKyAgMCwgLyp0cF9kZXNjcl9zZXQqLworKyAgMCwg Lyp0cF9kaWN0b2Zmc2V0Ki8KKysgIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9w ZW5HTFJlbmRlckNvbnRleHRfMV9faW5pdF9fLCAvKnRwX2luaXQqLworKyAgMCwgLyp0cF9hbGxv YyovCisrICBfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNv bnRleHQsIC8qdHBfbmV3Ki8KKysgIDAsIC8qdHBfZnJlZSovCisrICAwLCAvKnRwX2lzX2djKi8K KysgIDAsIC8qdHBfYmFzZXMqLworKyAgMCwgLyp0cF9tcm8qLworKyAgMCwgLyp0cF9jYWNoZSov CisrICAwLCAvKnRwX3N1YmNsYXNzZXMqLworKyAgMCwgLyp0cF93ZWFrbGlzdCovCisrICAwLCAv KnRwX2RlbCovCisrICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KKysgICNpZiBQWV9WRVJTSU9OX0hF WCA+PSAweDAzMDQwMGExCisrICAwLCAvKnRwX2ZpbmFsaXplKi8KKysgICNlbmRpZgorKyAgI2lm IFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEgJiYgKCFDWVRIT05fQ09NUElMSU5HX0lOX1BZ UFkgfHwgUFlQWV9WRVJTSU9OX05VTSA+PSAweDA3MDMwODAwKQorKyAgMCwgLyp0cF92ZWN0b3Jj YWxsKi8KKysgICNlbmRpZgorKyAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQgJiYg UFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCisrICAwLCAvKnRwX3ByaW50Ki8KKysgICNlbmRp ZgorKyAgI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fUFlQWSAmJiBQWV9WRVJTSU9OX0hFWCA+PSAw eDAzMDkwMDAwCisrICAwLCAvKnRwX3B5cHlfZmxhZ3MqLworKyAgI2VuZGlmCisrfTsKKyAKKy0g IC8qICIodHJlZSBmcmFnbWVudCkiOjEyCistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0g KiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoRXZlbnQgX19weXhfcmVzdWx0 LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CistICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhf c3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1 bHQuaWQgPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJlcGx5X3VzZXJkYXRhID0gX19w eXhfc3RhdGVbM10gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBpZiBsZW4o X19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgor LSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkK Ky0gKi8KKy0gIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7 CistICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICInTm9uZVR5cGUnIG9iamVj dCBpcyBub3Qgc3Vic2NyaXB0YWJsZSIpOworLSAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wx X2Vycm9yKQorLSAgfQorLSAgX19weXhfdF8xID0gX19QeXhfR2V0SXRlbUludF9UdXBsZShfX3B5 eF92X19fcHl4X3N0YXRlLCAwLCBsb25nLCAxLCBfX1B5eF9QeUludF9Gcm9tX2xvbmcsIDAsIDAs IDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19w eXhfdF8xKTsKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+ZGF0YSk7Cist ICBfX1B5eF9ERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPmRhdGEpOworLSAgX19weXhfdl9f X3B5eF9yZXN1bHQtPmRhdGEgPSBfX3B5eF90XzE7CistICBfX3B5eF90XzEgPSAwOworLSAgaWYg KHVubGlrZWx5KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKy0gICAgUHlFcnJf U2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBzdWJz Y3JpcHRhYmxlIik7CistICAgIF9fUFlYX0VSUigxLCAxMiwgX19weXhfTDFfZXJyb3IpCistICB9 CistICBfX3B5eF90XzEgPSBfX1B5eF9HZXRJdGVtSW50X1R1cGxlKF9fcHl4X3ZfX19weXhfc3Rh dGUsIDEsIGxvbmcsIDEsIF9fUHl4X1B5SW50X0Zyb21fbG9uZywgMCwgMCwgMSk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfQXNfaW50 KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09IChpbnQpLTEpICYmIFB5RXJy X09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX3B5eF92X19fcHl4X3Jlc3Vs dC0+ZXJyb3IgPSBfX3B5eF90XzI7CistICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0 ZSA9PSBQeV9Ob25lKSkgeworLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAi J05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsKKy0gICAgX19QWVhfRVJS KDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKy0gIH0KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0 ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgMiwgbG9uZywgMSwgX19QeXhfUHlJbnRf RnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBf X3B5eF90XzMgPSAoKGVudW0gbXB2X2V2ZW50X2lkKV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9l dmVudF9pZChfX3B5eF90XzEpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZ WF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistICBfX3B5eF92X19fcHl4X3Jlc3VsdC0+aWQgPSBfX3B5eF90XzM7 CistICBpZiAodW5saWtlbHkoX19weXhfdl9fX3B5eF9zdGF0ZSA9PSBQeV9Ob25lKSkgeworLSAg ICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMg bm90IHN1YnNjcmlwdGFibGUiKTsKKy0gICAgX19QWVhfRVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJv cikKKy0gIH0KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9f X3B5eF9zdGF0ZSwgMywgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Rf MSk7CistICBfX1B5eF9HT1RSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlcGx5X3VzZXJkYXRh KTsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF92X19fcHl4X3Jlc3VsdC0+cmVwbHlfdXNlcmRhdGEp OworLSAgX19weXhfdl9fX3B5eF9yZXN1bHQtPnJlcGx5X3VzZXJkYXRhID0gX19weXhfdF8xOwor LSAgX19weXhfdF8xID0gMDsKKytzdGF0aWMgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICpfX3B5eF9mcmVlbGlzdF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzWzhdOworK3N0YXRp YyBpbnQgX19weXhfZnJlZWNvdW50Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9z dHJ1Y3RfX19lcnJvcnMgPSAwOworIAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MTMKKy0gKiBj ZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUoRXZlbnQgX19weXhfcmVzdWx0LCB0 dXBsZSBfX3B5eF9zdGF0ZSk6CistICogICAgIF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3Rh dGVbMF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQu aWQgPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0LnJlcGx5X3VzZXJkYXRhID0gX19weXhf c3RhdGVbM10KKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19w eXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkKKy0g Ki8KKy0gIGlmICh1bmxpa2VseShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7Cist ICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJvYmplY3Qgb2YgdHlwZSAnTm9u ZVR5cGUnIGhhcyBubyBsZW4oKSIpOworLSAgICBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vy cm9yKQorLSAgfQorLSAgX19weXhfdF81ID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF92X19fcHl4 X3N0YXRlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNSA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19Q WVhfRVJSKDEsIDEzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfNiA9ICgoX19weXhfdF81 ID4gNCkgIT0gMCk7CistICBpZiAoX19weXhfdF82KSB7Cisrc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9y cyhQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmEsIENZVEhPTl9VTlVT RUQgUHlPYmplY3QgKmspIHsKKysgIFB5T2JqZWN0ICpvOworKyAgaWYgKENZVEhPTl9DT01QSUxJ TkdfSU5fQ1BZVEhPTiAmJiBsaWtlbHkoKF9fcHl4X2ZyZWVjb3VudF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzID4gMCkgJiAodC0+dHBfYmFzaWNzaXpl ID09IHNpemVvZihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9z Y29wZV9zdHJ1Y3RfX19lcnJvcnMpKSkpIHsKKysgICAgbyA9IChQeU9iamVjdCopX19weXhfZnJl ZWxpc3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9yc1st LV9fcHl4X2ZyZWVjb3VudF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0 X19fZXJyb3JzXTsKKysgICAgbWVtc2V0KG8sIDAsIHNpemVvZihzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMpKTsKKysgICAg KHZvaWQpIFB5T2JqZWN0X0lOSVQobywgdCk7CisrICAgIFB5T2JqZWN0X0dDX1RyYWNrKG8pOwor ICAgfSBlbHNlIHsKKy0gICAgX19weXhfdF80ID0gX19weXhfdF82OworLSAgICBnb3RvIF9fcHl4 X0w0X2Jvb2xfYmlub3BfZG9uZTsKKysgICAgbyA9ICgqdC0+dHBfYWxsb2MpKHQsIDApOworKyAg ICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKKyAgIH0KKy0gIF9fcHl4X3RfNiA9IF9fUHl4 X0hhc0F0dHIoKChQeU9iamVjdCAqKV9fcHl4X3ZfX19weXhfcmVzdWx0KSwgX19weXhfbl9zX2Rp Y3QpOyBpZiAodW5saWtlbHkoX19weXhfdF82ID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigxLCAx MywgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90XzcgPSAoX19weXhfdF82ICE9IDApOworLSAg X19weXhfdF80ID0gX19weXhfdF83OworLSAgX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKKy0g IGlmIChfX3B5eF90XzQpIHsKKy0KKy0gICAgLyogIih0cmVlIGZyYWdtZW50KSI6MTQKKy0gKiAg ICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsgX19weXhfcmVzdWx0LmVycm9y ID0gX19weXhfc3RhdGVbMV07IF9fcHl4X3Jlc3VsdC5pZCA9IF9fcHl4X3N0YXRlWzJdOyBfX3B5 eF9yZXN1bHQucmVwbHlfdXNlcmRhdGEgPSBfX3B5eF9zdGF0ZVszXQorLSAqICAgICBpZiBsZW4o X19weXhfc3RhdGUpID4gNCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgor LSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqLworLSAgICBfX3B5eF90XzggPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3Jlc3VsdCks IF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMSwg MTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF84KTsKKy0gICAg X19weXhfdF85ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzgsIF9fcHl4X25f c191cGRhdGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlYX0VSUigxLCAxNCwgX19w eXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzkpOworLSAgICBfX1B5eF9E RUNSRUYoX19weXhfdF84KTsgX19weXhfdF84ID0gMDsKKy0gICAgaWYgKHVubGlrZWx5KF9fcHl4 X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKy0gICAgICBQeUVycl9TZXRTdHJpbmcoUHlF eGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFibGUiKTsK Ky0gICAgICBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgICB9CistICAgIF9f cHl4X3RfOCA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0ZSwgNCwg bG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzgpKSBfX1BZWF9FUlIoMSwgMTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9H T1RSRUYoX19weXhfdF84KTsKKy0gICAgX19weXhfdF8xMCA9IE5VTEw7CistICAgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfOSkpKSB7 CistICAgICAgX19weXhfdF8xMCA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfOSk7CistICAg ICAgaWYgKGxpa2VseShfX3B5eF90XzEwKSkgeworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0aW9u ID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfOSk7CistICAgICAgICBfX1B5eF9JTkNS RUYoX19weXhfdF8xMCk7CistICAgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAg ICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzksIGZ1bmN0aW9uKTsKKy0gICAgICB9CistICAg IH0KKy0gICAgX19weXhfdF8xID0gKF9fcHl4X3RfMTApID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfOSwgX19weXhfdF8xMCwgX19weXhfdF84KSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF85LCBfX3B5eF90XzgpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMTApOyBfX3B5eF90XzEwID0gMDsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9f cHl4X3RfOCA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDEs IDE0LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAwOworLSAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIHJldHVybiBvOworK30KKyAKKy0gICAg LyogIih0cmVlIGZyYWdtZW50KSI6MTMKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0V2ZW50X19z ZXRfc3RhdGUoRXZlbnQgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6CistICogICAg IF9fcHl4X3Jlc3VsdC5kYXRhID0gX19weXhfc3RhdGVbMF07IF9fcHl4X3Jlc3VsdC5lcnJvciA9 IF9fcHl4X3N0YXRlWzFdOyBfX3B5eF9yZXN1bHQuaWQgPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhf cmVzdWx0LnJlcGx5X3VzZXJkYXRhID0gX19weXhfc3RhdGVbM10KKy0gKiAgICAgaWYgbGVuKF9f cHl4X3N0YXRlKSA+IDQgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGlj dF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVs0XSkKKy0gKi8KKytzdGF0aWMgdm9pZCBfX3B5eF90cF9k ZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMo UHlPYmplY3QgKm8pIHsKKysgIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKilvOworKyAgUHlP YmplY3RfR0NfVW5UcmFjayhvKTsKKysgIFB5X0NMRUFSKHAtPl9fcHl4X3ZfZm4pOworKyAgaWYg KENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTiAmJiAoKF9fcHl4X2ZyZWVjb3VudF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzIDwgOCkgJiAoUHlfVFlQ RShvKS0+dHBfYmFzaWNzaXplID09IHNpemVvZihzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMpKSkpIHsKKysgICAgX19weXhf ZnJlZWxpc3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9y c1tfX3B5eF9mcmVlY291bnRfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVj dF9fX2Vycm9ycysrXSA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICopbyk7CisrICB9IGVsc2UgeworKyAgICAoKlB5 X1RZUEUobyktPnRwX2ZyZWUpKG8pOworICAgfQorK30KKyAKKy0gIC8qICIodHJlZSBmcmFnbWVu dCkiOjExCistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRlKDxFdmVu dD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3Vs dAorLSAqIGNkZWYgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShFdmVudCBfX3B5eF9y ZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQu ZXJyb3IgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LmlkID0gX19weXhfc3RhdGVbMl07 IF9fcHl4X3Jlc3VsdC5yZXBseV91c2VyZGF0YSA9IF9fcHl4X3N0YXRlWzNdCistICogICAgIGlm IGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9f Jyk6CistICovCistCistICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQ eV9Ob25lOyBfX1B5eF9JTkNSRUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworLSAgX19w eXhfTDFfZXJyb3I6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOworLSAgX19QeXhfWERF Q1JFRihfX3B5eF90XzgpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzkpOworLSAgX19QeXhf WERFQ1JFRihfX3B5eF90XzEwKTsKKy0gIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxp YnMubXB2Ll9fcHl4X3VucGlja2xlX0V2ZW50X19zZXRfc3RhdGUiLCBfX3B5eF9jbGluZW5vLCBf X3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAwOworLSAgX19weXhf TDA6OworLSAgX19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlz aENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5eF9yOworK3N0YXRpYyBpbnQgX19weXhfdHBfdHJh dmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyhQ eU9iamVjdCAqbywgdmlzaXRwcm9jIHYsIHZvaWQgKmEpIHsKKysgIGludCBlOworKyAgc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJy b3JzICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Nj b3BlX3N0cnVjdF9fX2Vycm9ycyAqKW87CisrICBpZiAocC0+X19weXhfdl9mbikgeworKyAgICBl ID0gKCp2KShwLT5fX3B5eF92X2ZuLCBhKTsgaWYgKGUpIHJldHVybiBlOworKyAgfQorKyAgcmV0 dXJuIDA7CisgfQorIAorLS8qICIodHJlZSBmcmFnbWVudCkiOjEKKy0gKiBkZWYgX19weXhfdW5w aWNrbGVfUmVuZGVyRnJhbWVJbmZvKF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9f cHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBjZGVmIG9i amVjdCBfX3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQK Ky0gKi8KKy0KKy0vKiBQeXRob24gd3JhcHBlciAqLworLXN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE3X19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZv KFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVjdCAqX19weXhfYXJncywgUHlPYmplY3QgKl9f cHl4X2t3ZHMpOyAvKnByb3RvKi8KKy1zdGF0aWMgUHlNZXRob2REZWYgX19weXhfbWRlZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTdfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8gPSB7Il9f cHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1 bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xN19fcHl4 X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIDB9 OworLXN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE3X19w eXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvKFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVj dCAqX19weXhfYXJncywgUHlPYmplY3QgKl9fcHl4X2t3ZHMpIHsKKy0gIFB5T2JqZWN0ICpfX3B5 eF92X19fcHl4X3R5cGUgPSAwOworLSAgbG9uZyBfX3B5eF92X19fcHl4X2NoZWNrc3VtOworLSAg UHlPYmplY3QgKl9fcHl4X3ZfX19weXhfc3RhdGUgPSAwOworLSAgaW50IF9fcHl4X2xpbmVubyA9 IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9IE5VTEw7CistICBpbnQgX19weXhf Y2xpbmVubyA9IDA7CistICBQeU9iamVjdCAqX19weXhfciA9IDA7CistICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fcHl4X3VucGlj a2xlX1JlbmRlckZyYW1lSW5mbyAod3JhcHBlcikiLCAwKTsKKy0gIHsKKy0gICAgc3RhdGljIFB5 T2JqZWN0ICoqX19weXhfcHlhcmduYW1lc1tdID0geyZfX3B5eF9uX3NfcHl4X3R5cGUsJl9fcHl4 X25fc19weXhfY2hlY2tzdW0sJl9fcHl4X25fc19weXhfc3RhdGUsMH07CistICAgIFB5T2JqZWN0 KiB2YWx1ZXNbM10gPSB7MCwwLDB9OworLSAgICBpZiAodW5saWtlbHkoX19weXhfa3dkcykpIHsK Ky0gICAgICBQeV9zc2l6ZV90IGt3X2FyZ3M7CistICAgICAgY29uc3QgUHlfc3NpemVfdCBwb3Nf YXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncyk7CistICAgICAgc3dpdGNoIChwb3Nf YXJncykgeworLSAgICAgICAgY2FzZSAgMzogdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRfSVRFTShf X3B5eF9hcmdzLCAyKTsKKy0gICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgIGNh c2UgIDI6IHZhbHVlc1sxXSA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfYXJncywgMSk7CistICAg ICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAxOiB2YWx1ZXNbMF0gPSBQ eVR1cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworLSAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOworLSAgICAgICAgY2FzZSAgMDogYnJlYWs7CistICAgICAgICBkZWZhdWx0OiBnb3RvIF9f cHl4X0w1X2FyZ3R1cGxlX2Vycm9yOworLSAgICAgIH0KKy0gICAgICBrd19hcmdzID0gUHlEaWN0 X1NpemUoX19weXhfa3dkcyk7CistICAgICAgc3dpdGNoIChwb3NfYXJncykgeworLSAgICAgICAg Y2FzZSAgMDoKKy0gICAgICAgIGlmIChsaWtlbHkoKHZhbHVlc1swXSA9IF9fUHl4X1B5RGljdF9H ZXRJdGVtU3RyKF9fcHl4X2t3ZHMsIF9fcHl4X25fc19weXhfdHlwZSkpICE9IDApKSBrd19hcmdz LS07CistICAgICAgICBlbHNlIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CistICAgICAg ICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBjYXNlICAxOgorLSAgICAgICAgaWYgKGxp a2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19w eXhfbl9zX3B5eF9jaGVja3N1bSkpICE9IDApKSBrd19hcmdzLS07CistICAgICAgICBlbHNlIHsK Ky0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9fcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mbyIsIDEsIDMsIDMsIDEpOyBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDNfZXJy b3IpCistICAgICAgICB9CistICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICBj YXNlICAyOgorLSAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzJdID0gX19QeXhfUHlEaWN0X0dl dEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX3B5eF9zdGF0ZSkpICE9IDApKSBrd19hcmdz LS07CistICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFs aWQoIl9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIsIDEsIDMsIDMsIDIpOyBfX1BZWF9F UlIoMSwgMSwgX19weXhfTDNfZXJyb3IpCistICAgICAgICB9CistICAgICAgfQorLSAgICAgIGlm ICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9Q YXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFs dWVzLCBwb3NfYXJncywgIl9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbyIpIDwgMCkpIF9f UFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKy0gICAgICB9CistICAgIH0gZWxzZSBpZiAo UHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAzKSB7CistICAgICAgZ290byBfX3B5eF9M NV9hcmd0dXBsZV9lcnJvcjsKKy0gICAgfSBlbHNlIHsKKy0gICAgICB2YWx1ZXNbMF0gPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X2FyZ3MsIDApOworLSAgICAgIHZhbHVlc1sxXSA9IFB5VHVwbGVf R0VUX0lURU0oX19weXhfYXJncywgMSk7CistICAgICAgdmFsdWVzWzJdID0gUHlUdXBsZV9HRVRf SVRFTShfX3B5eF9hcmdzLCAyKTsKKy0gICAgfQorLSAgICBfX3B5eF92X19fcHl4X3R5cGUgPSB2 YWx1ZXNbMF07CistICAgIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0gPSBfX1B5eF9QeUludF9Bc19s b25nKHZhbHVlc1sxXSk7IGlmICh1bmxpa2VseSgoX19weXhfdl9fX3B5eF9jaGVja3N1bSA9PSAo bG9uZyktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19l cnJvcikKKy0gICAgX19weXhfdl9fX3B5eF9zdGF0ZSA9IHZhbHVlc1syXTsKKy0gIH0KKy0gIGdv dG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CistICBfX3B5eF9MNV9hcmd0dXBs ZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19weXhfdW5waWNrbGVf UmVuZGVyRnJhbWVJbmZvIiwgMSwgMywgMywgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7 IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MM19lcnJvcikKKy0gIF9fcHl4X0wzX2Vycm9yOjsKKy0g IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9fcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mbyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gTlVMTDsK Ky0gIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOjsKKy0gIF9fcHl4X3IgPSBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUlu Zm8oX19weXhfc2VsZiwgX19weXhfdl9fX3B5eF90eXBlLCBfX3B5eF92X19fcHl4X2NoZWNrc3Vt LCBfX3B5eF92X19fcHl4X3N0YXRlKTsKKy0KKy0gIC8qIGZ1bmN0aW9uIGV4aXQgY29kZSAqLwor LSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gX19weXhfcjsKKytz dGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29w ZV9zdHJ1Y3RfX19lcnJvcnMoUHlPYmplY3QgKm8pIHsKKysgIFB5T2JqZWN0KiB0bXA7CisrICBz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3Rf X19lcnJvcnMgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19w eXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICopbzsKKysgIHRtcCA9ICgoUHlPYmplY3QqKXAtPl9f cHl4X3ZfZm4pOworKyAgcC0+X19weXhfdl9mbiA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25l KTsKKysgIFB5X1hERUNSRUYodG1wKTsKKysgIHJldHVybiAwOworIH0KKyAKKy1zdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNl9fcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mbyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICpfX3B5eF9zZWxmLCBQeU9iamVj dCAqX19weXhfdl9fX3B5eF90eXBlLCBsb25nIF9fcHl4X3ZfX19weXhfY2hlY2tzdW0sIFB5T2Jq ZWN0ICpfX3B5eF92X19fcHl4X3N0YXRlKSB7CistICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9Q aWNrbGVFcnJvciA9IDA7CistICBQeU9iamVjdCAqX19weXhfdl9fX3B5eF9yZXN1bHQgPSAwOwor LSAgUHlPYmplY3QgKl9fcHl4X3IgPSBOVUxMOworLSAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlv bnMKKy0gIGludCBfX3B5eF90XzE7CistICBQeU9iamVjdCAqX19weXhfdF8yID0gTlVMTDsKKy0g IFB5T2JqZWN0ICpfX3B5eF90XzMgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNCA9IE5V TEw7CistICBQeU9iamVjdCAqX19weXhfdF81ID0gTlVMTDsKKy0gIGludCBfX3B5eF90XzY7Cist ICBpbnQgX19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0g TlVMTDsKKy0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8iLCAwKTsKKy0KKy0gIC8qICIo dHJlZSBmcmFnbWVudCkiOjQKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IK Ky0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9fcHl4X2NoZWNr c3VtICE9IDB4ZDQxZDhjZDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgZnJvbSBwaWNrbGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCist ICogICAgICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3Vt cyAoJXMgdnMgMHhkNDFkOGNkID0gKCkpIiAlIF9fcHl4X2NoZWNrc3VtKQorLSAqLworLSAgX19w eXhfdF8xID0gKChfX3B5eF92X19fcHl4X2NoZWNrc3VtICE9IDB4ZDQxZDhjZCkgIT0gMCk7Cist ICBpZiAoX19weXhfdF8xKSB7CistCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjUKKy0gKiAg ICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9 IDB4ZDQxZDhjZDoKKy0gKiAgICAgICAgIGZyb20gcGlja2xlIGltcG9ydCBQaWNrbGVFcnJvciBh cyBfX3B5eF9QaWNrbGVFcnJvciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICByYWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMg dnMgMHhkNDFkOGNkID0gKCkpIiAlIF9fcHl4X2NoZWNrc3VtKQorLSAqICAgICBfX3B5eF9yZXN1 bHQgPSBSZW5kZXJGcmFtZUluZm8uX19uZXdfXyhfX3B5eF90eXBlKQorLSAqLworLSAgICBfX3B5 eF90XzIgPSBQeUxpc3RfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VS UigxLCA1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7Cist ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF9uX3NfUGlja2xlRXJyb3IpOworLSAgICBfX1B5eF9HSVZF UkVGKF9fcHl4X25fc19QaWNrbGVFcnJvcik7CistICAgIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90 XzIsIDAsIF9fcHl4X25fc19QaWNrbGVFcnJvcik7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X0lt cG9ydChfX3B5eF9uX3NfcGlja2xlLCBfX3B5eF90XzIsIC0xKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzMpKSBfX1BZWF9FUlIoMSwgNSwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzMpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKKy0gICAgX19weXhfdF8yID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzMsIF9fcHl4X25f c19QaWNrbGVFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDUs IF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19Q eXhfSU5DUkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4X3ZfX19weXhfUGlja2xlRXJyb3IgPSBf X3B5eF90XzI7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor LSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKytzdGF0aWMgUHlU eXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0 cnVjdF9fX2Vycm9ycyA9IHsKKysgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgwLCAwKQorKyAgInZp ZGN1dHRlci5saWJzLm1wdi5fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMiLCAvKnRwX25hbWUq LworKyAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4 X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyksIC8qdHBfYmFzaWNzaXplKi8KKysgIDAsIC8qdHBfaXRl bXNpemUqLworKyAgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf c2NvcGVfc3RydWN0X19fZXJyb3JzLCAvKnRwX2RlYWxsb2MqLworKyAgI2lmIFBZX1ZFUlNJT05f SEVYIDwgMHgwMzA4MDBiNAorKyAgMCwgLyp0cF9wcmludCovCisrICAjZW5kaWYKKysgICNpZiBQ WV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0CisrICAwLCAvKnRwX3ZlY3RvcmNhbGxfb2Zmc2V0 Ki8KKysgICNlbmRpZgorKyAgMCwgLyp0cF9nZXRhdHRyKi8KKysgIDAsIC8qdHBfc2V0YXR0ciov CisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKysgIDAsIC8qdHBfY29tcGFyZSovCisrICAj ZW5kaWYKKysgICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgIDAsIC8qdHBfYXNfYXN5bmMq LworKyAgI2VuZGlmCisrICAwLCAvKnRwX3JlcHIqLworKyAgMCwgLyp0cF9hc19udW1iZXIqLwor KyAgMCwgLyp0cF9hc19zZXF1ZW5jZSovCisrICAwLCAvKnRwX2FzX21hcHBpbmcqLworKyAgMCwg Lyp0cF9oYXNoKi8KKysgIDAsIC8qdHBfY2FsbCovCisrICAwLCAvKnRwX3N0ciovCisrICAwLCAv KnRwX2dldGF0dHJvKi8KKysgIDAsIC8qdHBfc2V0YXR0cm8qLworKyAgMCwgLyp0cF9hc19idWZm ZXIqLworKyAgUHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBR3xQ eV9UUEZMQUdTX0NIRUNLVFlQRVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUnxQeV9UUEZMQUdT X0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworKyAgMCwgLyp0cF9kb2MqLworKyAgX19weXhfdHBfdHJh dmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycywg Lyp0cF90cmF2ZXJzZSovCisrICBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzLCAvKnRwX2NsZWFyKi8KKysgIDAsIC8qdHBfcmlj aGNvbXBhcmUqLworKyAgMCwgLyp0cF93ZWFrbGlzdG9mZnNldCovCisrICAwLCAvKnRwX2l0ZXIq LworKyAgMCwgLyp0cF9pdGVybmV4dCovCisrICAwLCAvKnRwX21ldGhvZHMqLworKyAgMCwgLyp0 cF9tZW1iZXJzKi8KKysgIDAsIC8qdHBfZ2V0c2V0Ki8KKysgIDAsIC8qdHBfYmFzZSovCisrICAw LCAvKnRwX2RpY3QqLworKyAgMCwgLyp0cF9kZXNjcl9nZXQqLworKyAgMCwgLyp0cF9kZXNjcl9z ZXQqLworKyAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8KKysgIDAsIC8qdHBfaW5pdCovCisrICAwLCAv KnRwX2FsbG9jKi8KKysgIF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf c2NvcGVfc3RydWN0X19fZXJyb3JzLCAvKnRwX25ldyovCisrICAwLCAvKnRwX2ZyZWUqLworKyAg MCwgLyp0cF9pc19nYyovCisrICAwLCAvKnRwX2Jhc2VzKi8KKysgIDAsIC8qdHBfbXJvKi8KKysg IDAsIC8qdHBfY2FjaGUqLworKyAgMCwgLyp0cF9zdWJjbGFzc2VzKi8KKysgIDAsIC8qdHBfd2Vh a2xpc3QqLworKyAgMCwgLyp0cF9kZWwqLworKyAgMCwgLyp0cF92ZXJzaW9uX3RhZyovCisrICAj aWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBhMQorKyAgMCwgLyp0cF9maW5hbGl6ZSovCisr ICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGIxICYmICghQ1lUSE9O X0NPTVBJTElOR19JTl9QWVBZIHx8IFBZUFlfVkVSU0lPTl9OVU0gPj0gMHgwNzAzMDgwMCkKKysg IDAsIC8qdHBfdmVjdG9yY2FsbCovCisrICAjZW5kaWYKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA+ PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAorKyAgMCwgLyp0cF9w cmludCovCisrICAjZW5kaWYKKysgICNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYgUFlf VkVSU0lPTl9IRVggPj0gMHgwMzA5MDAwMAorKyAgMCwgLyp0cF9weXB5X2ZsYWdzKi8KKysgICNl bmRpZgorK307CisgCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjYKKy0gKiAgICAgaWYgX19w eXhfY2hlY2tzdW0gIT0gMHhkNDFkOGNkOgorLSAqICAgICAgICAgZnJvbSBwaWNrbGUgaW1wb3J0 IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCistICogICAgICAgICByYWlzZSBfX3B5 eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhkNDFkOGNkID0g KCkpIiAlIF9fcHl4X2NoZWNrc3VtKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgIF9fcHl4X3Jlc3VsdCA9IFJlbmRlckZyYW1lSW5mby5fX25ld19fKF9fcHl4X3R5cGUpCist ICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBOb25lOgorLSAqLworLSAgICBfX3B5eF90XzIg PSBfX1B5eF9QeUludF9Gcm9tX2xvbmcoX19weXhfdl9fX3B5eF9jaGVja3N1bSk7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF80ID0gX19QeXhfUHlTdHJpbmdf Rm9ybWF0KF9fcHl4X2twX3NfSW5jb21wYXRpYmxlX2NoZWNrc3Vtc19zX3ZzXzB4ZDQsIF9fcHl4 X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X19f cHl4X1BpY2tsZUVycm9yKTsKKy0gICAgX19weXhfdF8yID0gX19weXhfdl9fX3B5eF9QaWNrbGVF cnJvcjsgX19weXhfdF81ID0gTlVMTDsKKy0gICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAm JiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworLSAgICAgIF9fcHl4X3Rf NSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfMik7CistICAgICAgaWYgKGxpa2VseShfX3B5 eF90XzUpKSB7CistICAgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVO Q1RJT04oX19weXhfdF8yKTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzUpOworLSAg ICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQo X19weXhfdF8yLCBmdW5jdGlvbik7CistICAgICAgfQorLSAgICB9CistICAgIF9fcHl4X3RfMyA9 IChfX3B5eF90XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhf dF81LCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9f cHl4X3RfNCk7CistICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsK Ky0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICAgIGlmICh1 bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDYsIF9fcHl4X0wxX2Vycm9yKQorLSAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CistICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMywgMCwgMCwgMCk7Cist ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICBfX1BZWF9F UlIoMSwgNiwgX19weXhfTDFfZXJyb3IpCisrc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21ldGhv ZHNbXSA9IHsKKysgIHswLCAwLCAwLCAwfQorK307CisgCistICAgIC8qICIodHJlZSBmcmFnbWVu dCkiOjQKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKy0gKiAgICAgY2Rl ZiBvYmplY3QgX19weXhfcmVzdWx0CistICogICAgIGlmIF9fcHl4X2NoZWNrc3VtICE9IDB4ZDQx ZDhjZDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgZnJvbSBwaWNr bGUgaW1wb3J0IFBpY2tsZUVycm9yIGFzIF9fcHl4X1BpY2tsZUVycm9yCistICogICAgICAgICBy YWlzZSBfX3B5eF9QaWNrbGVFcnJvcigiSW5jb21wYXRpYmxlIGNoZWNrc3VtcyAoJXMgdnMgMHhk NDFkOGNkID0gKCkpIiAlIF9fcHl4X2NoZWNrc3VtKQorLSAqLworLSAgfQorKyNpZiBQWV9NQUpP Ul9WRVJTSU9OID49IDMKKysjaWYgQ1lUSE9OX1BFUDQ4OV9NVUxUSV9QSEFTRV9JTklUCisrc3Rh dGljIFB5T2JqZWN0KiBfX3B5eF9weW1vZF9jcmVhdGUoUHlPYmplY3QgKnNwZWMsIFB5TW9kdWxl RGVmICpkZWYpOyAvKnByb3RvKi8KKytzdGF0aWMgaW50IF9fcHl4X3B5bW9kX2V4ZWNfbXB2KFB5 T2JqZWN0KiBtb2R1bGUpOyAvKnByb3RvKi8KKytzdGF0aWMgUHlNb2R1bGVEZWZfU2xvdCBfX3B5 eF9tb2R1bGVkZWZfc2xvdHNbXSA9IHsKKysgIHtQeV9tb2RfY3JlYXRlLCAodm9pZCopX19weXhf cHltb2RfY3JlYXRlfSwKKysgIHtQeV9tb2RfZXhlYywgKHZvaWQqKV9fcHl4X3B5bW9kX2V4ZWNf bXB2fSwKKysgIHswLCBOVUxMfQorK307CisrI2VuZGlmCisgCistICAvKiAiKHRyZWUgZnJhZ21l bnQpIjo3CistICogICAgICAgICBmcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlRXJyb3IgYXMgX19w eXhfUGlja2xlRXJyb3IKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4X1BpY2tsZUVycm9yKCJJbmNv bXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGQ0MWQ4Y2QgPSAoKSkiICUgX19weXhfY2hlY2tz dW0pCistICogICAgIF9fcHl4X3Jlc3VsdCA9IFJlbmRlckZyYW1lSW5mby5fX25ld19fKF9fcHl4 X3R5cGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgaWYgX19weXhfc3Rh dGUgaXMgbm90IE5vbmU6CistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUlu Zm9fX3NldF9zdGF0ZSg8UmVuZGVyRnJhbWVJbmZvPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRl KQorLSAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2Jq ZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyks IF9fcHl4X25fc19uZXcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigxLCA3 LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhf dF80ID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CistICAgIF9fcHl4X3RfNCA9IFB5TWV0aG9kX0dFVF9T RUxGKF9fcHl4X3RfMik7CistICAgIGlmIChsaWtlbHkoX19weXhfdF80KSkgeworLSAgICAgIFB5 T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzIpOworLSAg ICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzQpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlv bik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzIsIGZ1bmN0aW9uKTsKKy0gICAg fQorLSAgfQorLSAgX19weXhfdF8zID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3ZfX19weXhfdHlwZSkgOiBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9fX3B5eF90eXBlKTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDEsIDcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKKy0gIF9fcHl4X3ZfX19weXhfcmVzdWx0ID0gX19weXhfdF8zOworLSAgX19weXhfdF8zID0g MDsKKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4 X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGQ0MWQ4Y2QgPSAo KSkiICUgX19weXhfY2hlY2tzdW0pCistICogICAgIF9fcHl4X3Jlc3VsdCA9IFJlbmRlckZyYW1l SW5mby5fX25ld19fKF9fcHl4X3R5cGUpCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBO b25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBfX3B5eF91bnBp Y2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZSg8UmVuZGVyRnJhbWVJbmZvPiBfX3B5eF9y ZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CistICovCist ICBfX3B5eF90XzEgPSAoX19weXhfdl9fX3B5eF9zdGF0ZSAhPSBQeV9Ob25lKTsKKy0gIF9fcHl4 X3RfNiA9IChfX3B5eF90XzEgIT0gMCk7CistICBpZiAoX19weXhfdF82KSB7CistCistICAgIC8q ICIodHJlZSBmcmFnbWVudCkiOjkKKy0gKiAgICAgX19weXhfcmVzdWx0ID0gUmVuZGVyRnJhbWVJ bmZvLl9fbmV3X18oX19weXhfdHlwZSkKKy0gKiAgICAgaWYgX19weXhfc3RhdGUgaXMgbm90IE5v bmU6CistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0 ZSg8UmVuZGVyRnJhbWVJbmZvPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVm IF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKFJlbmRlckZyYW1lSW5m byBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKi8KKy0gICAgaWYgKCEobGlr ZWx5KFB5VHVwbGVfQ2hlY2tFeGFjdChfX3B5eF92X19fcHl4X3N0YXRlKSl8fCgoX19weXhfdl9f X3B5eF9zdGF0ZSkgPT0gUHlfTm9uZSl8fChQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAi RXhwZWN0ZWQgJS4xNnMsIGdvdCAlLjIwMHMiLCAidHVwbGUiLCBQeV9UWVBFKF9fcHl4X3ZfX19w eXhfc3RhdGUpLT50cF9uYW1lKSwgMCkpKSBfX1BZWF9FUlIoMSwgOSwgX19weXhfTDFfZXJyb3Ip CistICAgIF9fcHl4X3RfMyA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Vu cGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKCgoc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICopX19weXhfdl9fX3B5eF9yZXN1bHQp LCAoKFB5T2JqZWN0KilfX3B5eF92X19fcHl4X3N0YXRlKSk7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDEsIDksIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8zKTsKKy0gICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7 CistCistICAgIC8qICIodHJlZSBmcmFnbWVudCkiOjgKKy0gKiAgICAgICAgIHJhaXNlIF9fcHl4 X1BpY2tsZUVycm9yKCJJbmNvbXBhdGlibGUgY2hlY2tzdW1zICglcyB2cyAweGQ0MWQ4Y2QgPSAo KSkiICUgX19weXhfY2hlY2tzdW0pCistICogICAgIF9fcHl4X3Jlc3VsdCA9IFJlbmRlckZyYW1l SW5mby5fX25ld19fKF9fcHl4X3R5cGUpCistICogICAgIGlmIF9fcHl4X3N0YXRlIGlzIG5vdCBO b25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBfX3B5eF91bnBp Y2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZSg8UmVuZGVyRnJhbWVJbmZvPiBfX3B5eF9y ZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19weXhfcmVzdWx0CistICovCist ICB9CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxMAorLSAqICAgICBpZiBfX3B5eF9zdGF0 ZSBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5m b19fc2V0X3N0YXRlKDxSZW5kZXJGcmFtZUluZm8+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUp CistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqIGNkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoUmVu ZGVyRnJhbWVJbmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgorLSAqICAgICBp ZiBsZW4oX19weXhfc3RhdGUpID4gMCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3Rf XycpOgorLSAqLworLSAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fUHl4X0lOQ1JFRihf X3B5eF92X19fcHl4X3Jlc3VsdCk7CistICBfX3B5eF9yID0gX19weXhfdl9fX3B5eF9yZXN1bHQ7 CistICBnb3RvIF9fcHl4X0wwOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MQorLSAqIGRl ZiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8oX19weXhfdHlwZSwgbG9uZyBfX3B5eF9j aGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0IF9f cHl4X3Jlc3VsdAorLSAqLworLQorLSAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCistICBfX3B5 eF9MMV9lcnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7CistICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMyk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNSk7CistICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJz Lm1wdi5fX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8iLCBfX3B5eF9jbGluZW5vLCBfX3B5 eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSBOVUxMOworLSAgX19weXhf TDA6OworLSAgX19QeXhfWERFQ1JFRihfX3B5eF92X19fcHl4X1BpY2tsZUVycm9yKTsKKy0gIF9f UHl4X1hERUNSRUYoX19weXhfdl9fX3B5eF9yZXN1bHQpOworLSAgX19QeXhfWEdJVkVSRUYoX19w eXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiBfX3B5 eF9yOworLX0KKy0KKy0vKiAiKHRyZWUgZnJhZ21lbnQpIjoxMQorLSAqICAgICAgICAgX19weXhf dW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoPFJlbmRlckZyYW1lSW5mbz4gX19w eXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4X3Jlc3VsdAorLSAq IGNkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoUmVuZGVyRnJh bWVJbmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiAwIGFuZCBoYXNhdHRy KF9fcHl4X3Jlc3VsdCwgJ19fZGljdF9fJyk6CistICogICAgICAgICBfX3B5eF9yZXN1bHQuX19k aWN0X18udXBkYXRlKF9fcHl4X3N0YXRlWzBdKQorLSAqLworLQorLXN0YXRpYyBQeU9iamVjdCAq X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJ bmZvX19zZXRfc3RhdGUoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVu ZGVyRnJhbWVJbmZvICpfX3B5eF92X19fcHl4X3Jlc3VsdCwgUHlPYmplY3QgKl9fcHl4X3ZfX19w eXhfc3RhdGUpIHsKKy0gIFB5T2JqZWN0ICpfX3B5eF9yID0gTlVMTDsKKy0gIF9fUHl4X1JlZk5h bm55RGVjbGFyYXRpb25zCistICBpbnQgX19weXhfdF8xOworLSAgUHlfc3NpemVfdCBfX3B5eF90 XzI7CistICBpbnQgX19weXhfdF8zOworLSAgaW50IF9fcHl4X3RfNDsKKy0gIFB5T2JqZWN0ICpf X3B5eF90XzUgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNiA9IE5VTEw7CistICBQeU9i amVjdCAqX19weXhfdF83ID0gTlVMTDsKKy0gIFB5T2JqZWN0ICpfX3B5eF90XzggPSBOVUxMOwor LSAgaW50IF9fcHl4X2xpbmVubyA9IDA7CistICBjb25zdCBjaGFyICpfX3B5eF9maWxlbmFtZSA9 IE5VTEw7CistICBpbnQgX19weXhfY2xpbmVubyA9IDA7CistICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUiLCAwKTsK Ky0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjEyCistICogICAgIHJldHVybiBfX3B5eF9yZXN1 bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKFJl bmRlckZyYW1lSW5mbyBfX3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAg aWYgbGVuKF9fcHl4X3N0YXRlKSA+IDAgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0 X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgX19weXhfcmVz dWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0ZVswXSkKKy0gKi8KKy0gIGlmICh1bmxpa2Vs eShfX3B5eF92X19fcHl4X3N0YXRlID09IFB5X05vbmUpKSB7CistICAgIFB5RXJyX1NldFN0cmlu ZyhQeUV4Y19UeXBlRXJyb3IsICJvYmplY3Qgb2YgdHlwZSAnTm9uZVR5cGUnIGhhcyBubyBsZW4o KSIpOworLSAgICBfX1BZWF9FUlIoMSwgMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgfQorLSAgX19w eXhfdF8yID0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF92X19fcHl4X3N0YXRlKTsgaWYgKHVubGlr ZWx5KF9fcHl4X3RfMiA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDEsIDEyLCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfMyA9ICgoX19weXhfdF8yID4gMCkgIT0gMCk7CistICBp ZiAoX19weXhfdF8zKSB7CistICB9IGVsc2UgeworLSAgICBfX3B5eF90XzEgPSBfX3B5eF90XzM7 CistICAgIGdvdG8gX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOworLSAgfQorLSAgX19weXhfdF8z ID0gX19QeXhfSGFzQXR0cigoKFB5T2JqZWN0ICopX19weXhfdl9fX3B5eF9yZXN1bHQpLCBfX3B5 eF9uX3NfZGljdCk7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPT0gKChpbnQpLTEpKSkgX19QWVhf RVJSKDEsIDEyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfNCA9IChfX3B5eF90XzMgIT0g MCk7CistICBfX3B5eF90XzEgPSBfX3B5eF90XzQ7CistICBfX3B5eF9MNF9ib29sX2Jpbm9wX2Rv bmU6OworLSAgaWYgKF9fcHl4X3RfMSkgeworLQorLSAgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox MworLSAqIGNkZWYgX19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUoUmVu ZGVyRnJhbWVJbmZvIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3RhdGUpOgorLSAqICAgICBp ZiBsZW4oX19weXhfc3RhdGUpID4gMCBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3Rf XycpOgorLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9zdGF0 ZVswXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqLworLSAgICBfX3B5eF90XzYg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X19fcHl4X3Jl c3VsdCksIF9fcHl4X25fc19kaWN0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK Ky0gICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzYsIF9f cHl4X25fc191cGRhdGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigxLCAx MywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgICBf X1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gICAgaWYgKHVubGlrZWx5 KF9fcHl4X3ZfX19weXhfc3RhdGUgPT0gUHlfTm9uZSkpIHsKKy0gICAgICBQeUVycl9TZXRTdHJp bmcoUHlFeGNfVHlwZUVycm9yLCAiJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IHN1YnNjcmlwdGFi bGUiKTsKKy0gICAgICBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICB9Cist ICAgIF9fcHl4X3RfNiA9IF9fUHl4X0dldEl0ZW1JbnRfVHVwbGUoX19weXhfdl9fX3B5eF9zdGF0 ZSwgMCwgbG9uZywgMSwgX19QeXhfUHlJbnRfRnJvbV9sb25nLCAwLCAwLCAxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgX19weXhfdF84ID0gTlVMTDsKKy0gICAgaWYg KENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF83 KSkpIHsKKy0gICAgICBfX3B5eF90XzggPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzcpOwor LSAgICAgIGlmIChsaWtlbHkoX19weXhfdF84KSkgeworLSAgICAgICAgUHlPYmplY3QqIGZ1bmN0 aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNyk7CistICAgICAgICBfX1B5eF9J TkNSRUYoX19weXhfdF84KTsKKy0gICAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAg ICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNywgZnVuY3Rpb24pOworLSAgICAgIH0KKy0g ICAgfQorLSAgICBfX3B5eF90XzUgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwy QXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF83LCBfX3B5eF90XzYpOworLSAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfOCk7IF9fcHl4X3RfOCA9IDA7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5 eF90XzYgPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigxLCAx MywgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworLSAgICBf X1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CistCistICAgIC8qICIodHJlZSBmcmFnbWVudCki OjEyCistICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xl X1JlbmRlckZyYW1lSW5mb19fc2V0X3N0YXRlKFJlbmRlckZyYW1lSW5mbyBfX3B5eF9yZXN1bHQs IHR1cGxlIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDAgYW5k IGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqICAgICAgICAgX19weXhfcmVzdWx0Ll9fZGljdF9fLnVwZGF0ZShfX3B5eF9z dGF0ZVswXSkKKy0gKi8KKy0gIH0KKy0KKy0gIC8qICIodHJlZSBmcmFnbWVudCkiOjExCistICog ICAgICAgICBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9zdGF0ZSg8UmVuZGVy RnJhbWVJbmZvPiBfX3B5eF9yZXN1bHQsIF9fcHl4X3N0YXRlKQorLSAqICAgICByZXR1cm4gX19w eXhfcmVzdWx0CistICogY2RlZiBfX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm9fX3NldF9z dGF0ZShSZW5kZXJGcmFtZUluZm8gX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+ IDAgYW5kIGhhc2F0dHIoX19weXhfcmVzdWx0LCAnX19kaWN0X18nKToKKy0gKiAgICAgICAgIF9f cHl4X3Jlc3VsdC5fX2RpY3RfXy51cGRhdGUoX19weXhfc3RhdGVbMF0pCistICovCistCistICAv KiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KKy0gIF9fcHl4X3IgPSBQeV9Ob25lOyBfX1B5eF9JTkNS RUYoUHlfTm9uZSk7CistICBnb3RvIF9fcHl4X0wwOworLSAgX19weXhfTDFfZXJyb3I6OworLSAg X19QeXhfWERFQ1JFRihfX3B5eF90XzUpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOwor LSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90Xzgp OworLSAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuX19weXhfdW5waWNr bGVfUmVuZGVyRnJhbWVJbmZvX19zZXRfc3RhdGUiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5l bm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gIF9fcHl4X3IgPSAwOworLSAgX19weXhfTDA6OworLSAg X19QeXhfWEdJVkVSRUYoX19weXhfcik7CistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQo KTsKKy0gIHJldHVybiBfX3B5eF9yOworLX0KKy1zdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1 Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgX19weXhfdnRhYmxlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkOworLQorLXN0YXRpYyBQeU9iamVj dCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKFB5 VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9OX1VOVVNFRCBQ eU9iamVjdCAqaykgeworLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RW5kT2ZGaWxlUmVhY2hlZCAqcDsKKy0gIFB5T2JqZWN0ICpvOworLSAgaWYgKGxpa2VseSgodC0+ dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUKSA9PSAwKSkgeworLSAgICBvID0gKCp0 LT50cF9hbGxvYykodCwgMCk7CistICB9IGVsc2UgeworLSAgICBvID0gKFB5T2JqZWN0ICopIFB5 QmFzZU9iamVjdF9UeXBlLnRwX25ldyh0LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7CistICB9Cist ICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKKy0gIHAgPSAoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKilvKTsKKy0gIHAtPl9fcHl4 X3Z0YWIgPSBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFj aGVkOworLSAgcC0+cmVhc29uID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgcC0+ ZXJyb3IgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICByZXR1cm4gbzsKKy19Cist Cistc3RhdGljIHZvaWQgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5k T2ZGaWxlUmVhY2hlZChQeU9iamVjdCAqbykgeworLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICopbzsKKy0gICNpZiBDWVRIT05f VVNFX1RQX0ZJTkFMSVpFCistICBpZiAodW5saWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlfVFlQ RShvKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBFKG8pLT50cF9maW5hbGl6 ZSkgJiYgIV9QeUdDX0ZJTkFMSVpFRChvKSkgeworLSAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFs aXplckZyb21EZWFsbG9jKG8pKSByZXR1cm47CistICB9Cisrc3RhdGljIHN0cnVjdCBQeU1vZHVs ZURlZiBfX3B5eF9tb2R1bGVkZWYgPSB7CisrICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKysg ICAgIm1wdiIsCisrICAgIF9fcHl4X2tfcHltcHZfUHl0aG9uX3dyYXBwZXJfZm9yX2xpYm1wdiwg LyogbV9kb2MgKi8KKysgICNpZiBDWVRIT05fUEVQNDg5X01VTFRJX1BIQVNFX0lOSVQKKysgICAg MCwgLyogbV9zaXplICovCisrICAjZWxzZQorKyAgICAtMSwgLyogbV9zaXplICovCisgICAjZW5k aWYKKy0gIFB5T2JqZWN0X0dDX1VuVHJhY2sobyk7CistICBQeV9DTEVBUihwLT5yZWFzb24pOwor LSAgUHlfQ0xFQVIocC0+ZXJyb3IpOworLSAgKCpQeV9UWVBFKG8pLT50cF9mcmVlKShvKTsKKy19 CisrICAgIF9fcHl4X21ldGhvZHMgLyogbV9tZXRob2RzICovLAorKyAgI2lmIENZVEhPTl9QRVA0 ODlfTVVMVElfUEhBU0VfSU5JVAorKyAgICBfX3B5eF9tb2R1bGVkZWZfc2xvdHMsIC8qIG1fc2xv dHMgKi8KKysgICNlbHNlCisrICAgIE5VTEwsIC8qIG1fcmVsb2FkICovCisrICAjZW5kaWYKKysg ICAgTlVMTCwgLyogbV90cmF2ZXJzZSAqLworKyAgICBOVUxMLCAvKiBtX2NsZWFyICovCisrICAg IE5VTEwgLyogbV9mcmVlICovCisrfTsKKysjZW5kaWYKKysjaWZuZGVmIENZVEhPTl9TTUFMTF9D T0RFCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyAgICAjZGVmaW5lIENZVEhPTl9TTUFMTF9D T0RFCisrI2VsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVD X18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSkKKysgICAgI2RlZmluZSBDWVRIT05fU01B TExfQ09ERSBfX2F0dHJpYnV0ZV9fKChjb2xkKSkKKysjZWxzZQorKyAgICAjZGVmaW5lIENZVEhP Tl9TTUFMTF9DT0RFCisrI2VuZGlmCisrI2VuZGlmCisgCistc3RhdGljIGludCBfX3B5eF90cF90 cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZChQeU9iamVjdCAq bywgdmlzaXRwcm9jIHYsIHZvaWQgKmEpIHsKKy0gIGludCBlOworLSAgc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqcCA9IChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICopbzsKKy0gIGlm IChwLT5yZWFzb24pIHsKKy0gICAgZSA9ICgqdikocC0+cmVhc29uLCBhKTsgaWYgKGUpIHJldHVy biBlOworLSAgfQorLSAgaWYgKHAtPmVycm9yKSB7CistICAgIGUgPSAoKnYpKHAtPmVycm9yLCBh KTsgaWYgKGUpIHJldHVybiBlOworLSAgfQorLSAgcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBp bnQgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQo UHlPYmplY3QgKm8pIHsKKy0gIFB5T2JqZWN0KiB0bXA7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpwID0gKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKilvOworLSAgdG1wID0g KChQeU9iamVjdCopcC0+cmVhc29uKTsKKy0gIHAtPnJlYXNvbiA9IFB5X05vbmU7IFB5X0lOQ1JF RihQeV9Ob25lKTsKKy0gIFB5X1hERUNSRUYodG1wKTsKKy0gIHRtcCA9ICgoUHlPYmplY3QqKXAt PmVycm9yKTsKKy0gIHAtPmVycm9yID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAg UHlfWERFQ1JFRih0bXApOworLSAgcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBQeU9iamVjdCAq X19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkX3Jl YXNvbihQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CistICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF82cmVhc29uXzFf X2dldF9fKG8pOworLX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80 bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9yZWFzb24oUHlPYmplY3QgKm8sIFB5T2JqZWN0 ICp2LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKy0gIGlmICh2KSB7CistICAgIHJldHVybiBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkXzZyZWFzb25f M19fc2V0X18obywgdik7CistICB9CistICBlbHNlIHsKKy0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfNnJlYXNvbl81X19kZWxfXyhv KTsKKy0gIH0KKy19CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfZXJyb3IoUHlPYmplY3QgKm8sIENZVEhP Tl9VTlVTRUQgdm9pZCAqeCkgeworLSAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfNWVycm9yXzFfX2dldF9fKG8pOworLX0KKy0KKy1zdGF0 aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVh Y2hlZF9lcnJvcihQeU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAq eCkgeworLSAgaWYgKHYpIHsKKy0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfNWVycm9yXzNfX3NldF9fKG8sIHYpOworLSAgfQorLSAg ZWxzZSB7CistICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRP ZkZpbGVSZWFjaGVkXzVlcnJvcl81X19kZWxfXyhvKTsKKy0gIH0KKy19CistCistc3RhdGljIFB5 TWV0aG9kRGVmIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJl YWNoZWRbXSA9IHsKKy0gIHsiX19yZWR1Y2VfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF8xX19yZWR1Y2VfY3l0 aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwKKy0gIHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQeUNG dW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVk XzNfX3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAorLSAgezAsIDAsIDAsIDB9CistfTsK Ky0KKy1zdGF0aWMgc3RydWN0IFB5R2V0U2V0RGVmIF9fcHl4X2dldHNldHNfOXZpZGN1dHRlcl80 bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWRbXSA9IHsKKy0gIHsoY2hhciAqKSJyZWFzb24iLCBf X3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfcmVh c29uLCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNo ZWRfcmVhc29uLCAoY2hhciAqKTAsIDB9LAorLSAgeyhjaGFyICopImVycm9yIiwgX19weXhfZ2V0 cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVSZWFjaGVkX2Vycm9yLCBfX3B5 eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfZXJyb3Is IChjaGFyICopMCwgMH0sCistICB7MCwgMCwgMCwgMCwgMH0KKy19OworLQorLXN0YXRpYyBQeVR5 cGVPYmplY3QgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hl ZCA9IHsKKy0gIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgwLCAwKQorLSAgInZpZGN1dHRlci5saWJz Lm1wdi5FbmRPZkZpbGVSZWFjaGVkIiwgLyp0cF9uYW1lKi8KKy0gIHNpemVvZihzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSwgLyp0cF9iYXNp Y3NpemUqLworLSAgMCwgLyp0cF9pdGVtc2l6ZSovCistICBfX3B5eF90cF9kZWFsbG9jXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLCAvKnRwX2RlYWxsb2MqLworLSAgI2lm IFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBiNAorLSAgMCwgLyp0cF9wcmludCovCistICAjZW5k aWYKKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0CistICAwLCAvKnRwX3ZlY3Rv cmNhbGxfb2Zmc2V0Ki8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9nZXRhdHRyKi8KKy0gIDAsIC8q dHBfc2V0YXR0ciovCistICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKy0gIDAsIC8qdHBfY29t cGFyZSovCistICAjZW5kaWYKKy0gICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gIDAsIC8q dHBfYXNfYXN5bmMqLworLSAgI2VuZGlmCistICAwLCAvKnRwX3JlcHIqLworLSAgMCwgLyp0cF9h c19udW1iZXIqLworLSAgMCwgLyp0cF9hc19zZXF1ZW5jZSovCistICAwLCAvKnRwX2FzX21hcHBp bmcqLworLSAgMCwgLyp0cF9oYXNoKi8KKy0gIDAsIC8qdHBfY2FsbCovCistICAwLCAvKnRwX3N0 ciovCistICAwLCAvKnRwX2dldGF0dHJvKi8KKy0gIDAsIC8qdHBfc2V0YXR0cm8qLworLSAgMCwg Lyp0cF9hc19idWZmZXIqLworLSAgUHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9W RVJTSU9OX1RBR3xQeV9UUEZMQUdTX0NIRUNLVFlQRVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZF UnxQeV9UUEZMQUdTX0JBU0VUWVBFfFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCist ICAiRGF0YSBmaWVsZCBmb3IgTVBWX0VWRU5UX0VORF9GSUxFIGV2ZW50c1xuXG4gICAgV3JhcHM6 IG1wdl9ldmVudF9lbmRfZmlsZVxuICAgICIsIC8qdHBfZG9jKi8KKy0gIF9fcHl4X3RwX3RyYXZl cnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLCAvKnRwX3RyYXZlcnNl Ki8KKy0gIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFj aGVkLCAvKnRwX2NsZWFyKi8KKy0gIDAsIC8qdHBfcmljaGNvbXBhcmUqLworLSAgMCwgLyp0cF93 ZWFrbGlzdG9mZnNldCovCistICAwLCAvKnRwX2l0ZXIqLworLSAgMCwgLyp0cF9pdGVybmV4dCov CistICBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVk LCAvKnRwX21ldGhvZHMqLworLSAgMCwgLyp0cF9tZW1iZXJzKi8KKy0gIF9fcHl4X2dldHNldHNf OXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQsIC8qdHBfZ2V0c2V0Ki8KKy0g IDAsIC8qdHBfYmFzZSovCistICAwLCAvKnRwX2RpY3QqLworLSAgMCwgLyp0cF9kZXNjcl9nZXQq LworLSAgMCwgLyp0cF9kZXNjcl9zZXQqLworLSAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8KKy0gIDAs IC8qdHBfaW5pdCovCistICAwLCAvKnRwX2FsbG9jKi8KKy0gIF9fcHl4X3RwX25ld185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCwgLyp0cF9uZXcqLworLSAgMCwgLyp0cF9m cmVlKi8KKy0gIDAsIC8qdHBfaXNfZ2MqLworLSAgMCwgLyp0cF9iYXNlcyovCistICAwLCAvKnRw X21ybyovCistICAwLCAvKnRwX2NhY2hlKi8KKy0gIDAsIC8qdHBfc3ViY2xhc3NlcyovCistICAw LCAvKnRwX3dlYWtsaXN0Ki8KKy0gIDAsIC8qdHBfZGVsKi8KKy0gIDAsIC8qdHBfdmVyc2lvbl90 YWcqLworLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEKKy0gIDAsIC8qdHBfZmlu YWxpemUqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMQor LSAgMCwgLyp0cF92ZWN0b3JjYWxsKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVY ID49IDB4MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCistICAwLCAvKnRw X3ByaW50Ki8KKy0gICNlbmRpZgorLX07Cistc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoIF9fcHl4X3Z0YWJsZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaDsKKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaChQeVR5cGVPYmplY3Qg KnQsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmsp IHsKKy0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0 Y2ggKnA7CistICBQeU9iamVjdCAqbzsKKy0gIGlmIChsaWtlbHkoKHQtPnRwX2ZsYWdzICYgUHlf VFBGTEFHU19JU19BQlNUUkFDVCkgPT0gMCkpIHsKKy0gICAgbyA9ICgqdC0+dHBfYWxsb2MpKHQs IDApOworLSAgfSBlbHNlIHsKKy0gICAgbyA9IChQeU9iamVjdCAqKSBQeUJhc2VPYmplY3RfVHlw ZS50cF9uZXcodCwgX19weXhfZW1wdHlfdHVwbGUsIDApOworLSAgfQorLSAgaWYgKHVubGlrZWx5 KCFvKSkgcmV0dXJuIDA7CistICBwID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9JbnB1dERpc3BhdGNoICopbyk7CistICBwLT5fX3B5eF92dGFiID0gX19weXhfdnRh YnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaDsKKy0gIHAtPmFyZzAgPSBQ eV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBwLT50eXBlID0gUHlfTm9uZTsgUHlfSU5D UkVGKFB5X05vbmUpOworLSAgcmV0dXJuIG87CistfQorLQorLXN0YXRpYyB2b2lkIF9fcHl4X3Rw X2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2goUHlPYmplY3QgKm8p IHsKKy0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0 Y2ggKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNw YXRjaCAqKW87CistICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5BTElaRQorLSAgaWYgKHVubGlrZWx5 KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkg JiYgUHlfVFlQRShvKS0+dHBfZmluYWxpemUpICYmICFfUHlHQ19GSU5BTElaRUQobykpIHsKKy0g ICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJuOworLSAg fQorLSAgI2VuZGlmCistICBQeU9iamVjdF9HQ19VblRyYWNrKG8pOworLSAgUHlfQ0xFQVIocC0+ YXJnMCk7CistICBQeV9DTEVBUihwLT50eXBlKTsKKy0gICgqUHlfVFlQRShvKS0+dHBfZnJlZSko byk7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGli c18zbXB2X0lucHV0RGlzcGF0Y2goUHlPYmplY3QgKm8sIHZpc2l0cHJvYyB2LCB2b2lkICphKSB7 CistICBpbnQgZTsKKy0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0lu cHV0RGlzcGF0Y2ggKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf SW5wdXREaXNwYXRjaCAqKW87CistICBpZiAocC0+YXJnMCkgeworLSAgICBlID0gKCp2KShwLT5h cmcwLCBhKTsgaWYgKGUpIHJldHVybiBlOworLSAgfQorLSAgaWYgKHAtPnR5cGUpIHsKKy0gICAg ZSA9ICgqdikocC0+dHlwZSwgYSk7IGlmIChlKSByZXR1cm4gZTsKKy0gIH0KKy0gIHJldHVybiAw OworLX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9JbnB1dERpc3BhdGNoKFB5T2JqZWN0ICpvKSB7CistICBQeU9iamVjdCogdG1wOworLSAgc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCAqcCA9IChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICopbzsK Ky0gIHRtcCA9ICgoUHlPYmplY3QqKXAtPmFyZzApOworLSAgcC0+YXJnMCA9IFB5X05vbmU7IFB5 X0lOQ1JFRihQeV9Ob25lKTsKKy0gIFB5X1hERUNSRUYodG1wKTsKKy0gIHRtcCA9ICgoUHlPYmpl Y3QqKXAtPnR5cGUpOworLSAgcC0+dHlwZSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsK Ky0gIFB5X1hERUNSRUYodG1wKTsKKy0gIHJldHVybiAwOworLX0KKy0KKy1zdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9h cmcwKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKy0gIHJldHVybiBfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoXzRhcmcwXzFfX2dldF9f KG8pOworLX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzSW5wdXREaXNwYXRjaF9hcmcwKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9O X1VOVVNFRCB2b2lkICp4KSB7CistICBpZiAodikgeworLSAgICByZXR1cm4gX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF8zX19zZXRfXyhvLCB2KTsK Ky0gIH0KKy0gIGVsc2UgeworLSAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzSW5wdXREaXNwYXRjaF80YXJnMF81X19kZWxfXyhvKTsKKy0gIH0KKy19CistCistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0 RGlzcGF0Y2hfdHlwZShQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CistICBy ZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF80dHlw ZV8xX19nZXRfXyhvKTsKKy19CistCistc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfdHlwZShQeU9iamVjdCAqbywgUHlPYmplY3Qg KnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworLSAgaWYgKHYpIHsKKy0gICAgcmV0dXJuIF9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfM19fc2V0 X18obywgdik7CistICB9CistICBlbHNlIHsKKy0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfNHR5cGVfNV9fZGVsX18obyk7CistICB9Cist fQorLQorLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9JbnB1dERpc3BhdGNoW10gPSB7CistICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5Q0Z1 bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfMV9f cmVkdWNlX2N5dGhvbl9fLCBNRVRIX05PQVJHUywgMH0sCistICB7Il9fc2V0c3RhdGVfY3l0aG9u X18iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXRE aXNwYXRjaF8zX19zZXRzdGF0ZV9jeXRob25fXywgTUVUSF9PLCAwfSwKKy0gIHswLCAwLCAwLCAw fQorLX07CistCistc3RhdGljIHN0cnVjdCBQeUdldFNldERlZiBfX3B5eF9nZXRzZXRzXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoW10gPSB7CistICB7KGNoYXIgKikiYXJnMCIs IF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF9hcmcw LCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM0lucHV0RGlzcGF0Y2hfYXJn MCwgKGNoYXIgKikwLCAwfSwKKy0gIHsoY2hhciAqKSJ0eXBlIiwgX19weXhfZ2V0cHJvcF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNJbnB1dERpc3BhdGNoX3R5cGUsIF9fcHl4X3NldHByb3BfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzSW5wdXREaXNwYXRjaF90eXBlLCAoY2hhciAqKTAsIDB9LAor LSAgezAsIDAsIDAsIDAsIDB9CistfTsKKy0KKy1zdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2ggPSB7CistICBQeVZhck9iamVj dF9IRUFEX0lOSVQoMCwgMCkKKy0gICJ2aWRjdXR0ZXIubGlicy5tcHYuSW5wdXREaXNwYXRjaCIs IC8qdHBfbmFtZSovCistICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfSW5wdXREaXNwYXRjaCksIC8qdHBfYmFzaWNzaXplKi8KKy0gIDAsIC8qdHBfaXRlbXNp emUqLworLSAgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNw YXRjaCwgLyp0cF9kZWFsbG9jKi8KKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQK Ky0gIDAsIC8qdHBfcHJpbnQqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0g MHgwMzA4MDBiNAorLSAgMCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCistICAjZW5kaWYKKy0g IDAsIC8qdHBfZ2V0YXR0ciovCistICAwLCAvKnRwX3NldGF0dHIqLworLSAgI2lmIFBZX01BSk9S X1ZFUlNJT04gPCAzCistICAwLCAvKnRwX2NvbXBhcmUqLworLSAgI2VuZGlmCistICAjaWYgUFlf TUFKT1JfVkVSU0lPTiA+PSAzCistICAwLCAvKnRwX2FzX2FzeW5jKi8KKy0gICNlbmRpZgorLSAg MCwgLyp0cF9yZXByKi8KKy0gIDAsIC8qdHBfYXNfbnVtYmVyKi8KKy0gIDAsIC8qdHBfYXNfc2Vx dWVuY2UqLworLSAgMCwgLyp0cF9hc19tYXBwaW5nKi8KKy0gIDAsIC8qdHBfaGFzaCovCistICAw LCAvKnRwX2NhbGwqLworLSAgMCwgLyp0cF9zdHIqLworLSAgMCwgLyp0cF9nZXRhdHRybyovCist ICAwLCAvKnRwX3NldGF0dHJvKi8KKy0gIDAsIC8qdHBfYXNfYnVmZmVyKi8KKy0gIFB5X1RQRkxB R1NfREVGQVVMVHxQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZ UEVTfFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZM QUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworLSAgIkRhdGEgZmllbGQgZm9yIE1QVl9FVkVOVF9T Q1JJUFRfSU5QVVRfRElTUEFUQ0ggZXZlbnRzLlxuXG4gICAgV3JhcHM6IG1wdl9ldmVudF9zY3Jp cHRfaW5wdXRfZGlzcGF0Y2hcbiAgICAiLCAvKnRwX2RvYyovCistICBfX3B5eF90cF90cmF2ZXJz ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCwgLyp0cF90cmF2ZXJzZSovCist ICBfX3B5eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCwgLyp0 cF9jbGVhciovCistICAwLCAvKnRwX3JpY2hjb21wYXJlKi8KKy0gIDAsIC8qdHBfd2Vha2xpc3Rv ZmZzZXQqLworLSAgMCwgLyp0cF9pdGVyKi8KKy0gIDAsIC8qdHBfaXRlcm5leHQqLworLSAgX19w eXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRjaCwgLyp0cF9tZXRo b2RzKi8KKy0gIDAsIC8qdHBfbWVtYmVycyovCistICBfX3B5eF9nZXRzZXRzXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9JbnB1dERpc3BhdGNoLCAvKnRwX2dldHNldCovCistICAwLCAvKnRwX2Jhc2Uq LworLSAgMCwgLyp0cF9kaWN0Ki8KKy0gIDAsIC8qdHBfZGVzY3JfZ2V0Ki8KKy0gIDAsIC8qdHBf ZGVzY3Jfc2V0Ki8KKy0gIDAsIC8qdHBfZGljdG9mZnNldCovCistICAwLCAvKnRwX2luaXQqLwor LSAgMCwgLyp0cF9hbGxvYyovCistICBfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2 X0lucHV0RGlzcGF0Y2gsIC8qdHBfbmV3Ki8KKy0gIDAsIC8qdHBfZnJlZSovCistICAwLCAvKnRw X2lzX2djKi8KKy0gIDAsIC8qdHBfYmFzZXMqLworLSAgMCwgLyp0cF9tcm8qLworLSAgMCwgLyp0 cF9jYWNoZSovCistICAwLCAvKnRwX3N1YmNsYXNzZXMqLworLSAgMCwgLyp0cF93ZWFrbGlzdCov CistICAwLCAvKnRwX2RlbCovCistICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KKy0gICNpZiBQWV9W RVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCistICAwLCAvKnRwX2ZpbmFsaXplKi8KKy0gICNlbmRp ZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEKKy0gIDAsIC8qdHBfdmVjdG9y Y2FsbCovCistICAjZW5kaWYKKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYm IFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAorLSAgMCwgLyp0cF9wcmludCovCistICAjZW5k aWYKKy19OworLXN0YXRpYyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfTG9nTWVzc2FnZSBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01l c3NhZ2U7CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGli c18zbXB2X0xvZ01lc3NhZ2UoUHlUeXBlT2JqZWN0ICp0LCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0 ICphLCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICprKSB7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICpwOworLSAgUHlPYmplY3QgKm87CistICBp ZiAobGlrZWx5KCh0LT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09IDApKSB7 CistICAgIG8gPSAoKnQtPnRwX2FsbG9jKSh0LCAwKTsKKy0gIH0gZWxzZSB7CistICAgIG8gPSAo UHlPYmplY3QgKikgUHlCYXNlT2JqZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5X3R1cGxl LCAwKTsKKy0gIH0KKy0gIGlmICh1bmxpa2VseSghbykpIHJldHVybiAwOworLSAgcCA9ICgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKW8pOworLSAg cC0+X19weXhfdnRhYiA9IF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01l c3NhZ2U7CistICBwLT5wcmVmaXggPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBw LT5sZXZlbCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKy0gIHAtPnRleHQgPSBQeV9O b25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBwLT5sb2dfbGV2ZWwgPSBQeV9Ob25lOyBQeV9J TkNSRUYoUHlfTm9uZSk7CistICByZXR1cm4gbzsKKy19CistCistc3RhdGljIHZvaWQgX19weXhf dHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZShQeU9iamVjdCAqbykg eworLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAq cCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICop bzsKKy0gICNpZiBDWVRIT05fVVNFX1RQX0ZJTkFMSVpFCistICBpZiAodW5saWtlbHkoUHlUeXBl X0hhc0ZlYXR1cmUoUHlfVFlQRShvKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9U WVBFKG8pLT50cF9maW5hbGl6ZSkgJiYgIV9QeUdDX0ZJTkFMSVpFRChvKSkgeworLSAgICBpZiAo UHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKG8pKSByZXR1cm47CistICB9CistICAj ZW5kaWYKKy0gIFB5T2JqZWN0X0dDX1VuVHJhY2sobyk7CistICBQeV9DTEVBUihwLT5wcmVmaXgp OworLSAgUHlfQ0xFQVIocC0+bGV2ZWwpOworLSAgUHlfQ0xFQVIocC0+dGV4dCk7CistICBQeV9D TEVBUihwLT5sb2dfbGV2ZWwpOworLSAgKCpQeV9UWVBFKG8pLT50cF9mcmVlKShvKTsKKy19Cist Cistc3RhdGljIGludCBfX3B5eF90cF90cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9n TWVzc2FnZShQeU9iamVjdCAqbywgdmlzaXRwcm9jIHYsIHZvaWQgKmEpIHsKKy0gIGludCBlOwor LSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqcCA9 IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICopbzsK Ky0gIGlmIChwLT5wcmVmaXgpIHsKKy0gICAgZSA9ICgqdikocC0+cHJlZml4LCBhKTsgaWYgKGUp IHJldHVybiBlOworLSAgfQorLSAgaWYgKHAtPmxldmVsKSB7CistICAgIGUgPSAoKnYpKHAtPmxl dmVsLCBhKTsgaWYgKGUpIHJldHVybiBlOworLSAgfQorLSAgaWYgKHAtPnRleHQpIHsKKy0gICAg ZSA9ICgqdikocC0+dGV4dCwgYSk7IGlmIChlKSByZXR1cm4gZTsKKy0gIH0KKy0gIGlmIChwLT5s b2dfbGV2ZWwpIHsKKy0gICAgZSA9ICgqdikocC0+bG9nX2xldmVsLCBhKTsgaWYgKGUpIHJldHVy biBlOworLSAgfQorLSAgcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhfdHBfY2xl YXJfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UoUHlPYmplY3QgKm8pIHsKKy0gIFB5 T2JqZWN0KiB0bXA7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xv Z01lc3NhZ2UgKilvOworLSAgdG1wID0gKChQeU9iamVjdCopcC0+cHJlZml4KTsKKy0gIHAtPnBy ZWZpeCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKy0gIFB5X1hERUNSRUYodG1wKTsK Ky0gIHRtcCA9ICgoUHlPYmplY3QqKXAtPmxldmVsKTsKKy0gIHAtPmxldmVsID0gUHlfTm9uZTsg UHlfSU5DUkVGKFB5X05vbmUpOworLSAgUHlfWERFQ1JFRih0bXApOworLSAgdG1wID0gKChQeU9i amVjdCopcC0+dGV4dCk7CistICBwLT50ZXh0ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUp OworLSAgUHlfWERFQ1JFRih0bXApOworLSAgdG1wID0gKChQeU9iamVjdCopcC0+bG9nX2xldmVs KTsKKy0gIHAtPmxvZ19sZXZlbCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKy0gIFB5 X1hERUNSRUYodG1wKTsKKy0gIHJldHVybiAwOworLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9wcmVmaXgoUHlP YmplY3QgKm8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworLSAgcmV0dXJuIF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNnByZWZpeF8xX19nZXRfXyhvKTsKKy19 CistCistc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExv Z01lc3NhZ2VfcHJlZml4KFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2 b2lkICp4KSB7CistICBpZiAodikgeworLSAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEwTG9nTWVzc2FnZV82cHJlZml4XzNfX3NldF9fKG8sIHYpOworLSAgfQorLSAg ZWxzZSB7CistICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dN ZXNzYWdlXzZwcmVmaXhfNV9fZGVsX18obyk7CistICB9CistfQorLQorLXN0YXRpYyBQeU9iamVj dCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX2xldmVs KFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKy0gIHJldHVybiBfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8xX19nZXRfXyhvKTsK Ky19CistCistc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x MExvZ01lc3NhZ2VfbGV2ZWwoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VE IHZvaWQgKngpIHsKKy0gIGlmICh2KSB7CistICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlXzVsZXZlbF8zX19zZXRfXyhvLCB2KTsKKy0gIH0KKy0g IGVsc2UgeworLSAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9n TWVzc2FnZV81bGV2ZWxfNV9fZGVsX18obyk7CistICB9CistfQorLQorLXN0YXRpYyBQeU9iamVj dCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3RleHQo UHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworLSAgcmV0dXJuIF9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfNHRleHRfMV9fZ2V0X18obyk7Cist fQorLQorLXN0YXRpYyBpbnQgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlX3RleHQoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VEIHZv aWQgKngpIHsKKy0gIGlmICh2KSB7CistICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTBMb2dNZXNzYWdlXzR0ZXh0XzNfX3NldF9fKG8sIHYpOworLSAgfQorLSAgZWxz ZSB7CistICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNz YWdlXzR0ZXh0XzVfX2RlbF9fKG8pOworLSAgfQorLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9f cHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9sb2dfbGV2ZWwo UHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworLSAgcmV0dXJuIF9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfOWxvZ19sZXZlbF8xX19nZXRfXyhv KTsKKy19CistCistc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfbG9nX2xldmVsKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9O X1VOVVNFRCB2b2lkICp4KSB7CistICBpZiAodikgeworLSAgICByZXR1cm4gX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV85bG9nX2xldmVsXzNfX3NldF9fKG8sIHYp OworLSAgfQorLSAgZWxzZSB7CistICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlXzlsb2dfbGV2ZWxfNV9fZGVsX18obyk7CistICB9CistfQorLQor LXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlW10gPSB7CistICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfMV9fcmVkdWNlX2N5dGhv bl9fLCBNRVRIX05PQVJHUywgMH0sCistICB7Il9fc2V0c3RhdGVfY3l0aG9uX18iLCAoUHlDRnVu Y3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV8zX19zZXRz dGF0ZV9jeXRob25fXywgTUVUSF9PLCAwfSwKKy0gIHswLCAwLCAwLCAwfQorLX07CistCistc3Rh dGljIHN0cnVjdCBQeUdldFNldERlZiBfX3B5eF9nZXRzZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Mb2dNZXNzYWdlW10gPSB7CistICB7KGNoYXIgKikicHJlZml4IiwgX19weXhfZ2V0cHJvcF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3ByZWZpeCwgX19weXhfc2V0cHJvcF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3ByZWZpeCwgKGNoYXIgKikwLCAwfSwK Ky0gIHsoY2hhciAqKSJsZXZlbCIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEwTG9nTWVzc2FnZV9sZXZlbCwgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTBMb2dNZXNzYWdlX2xldmVsLCAoY2hhciAqKTAsIDB9LAorLSAgeyhjaGFyICopInRleHQiLCBf X3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfdGV4dCwgX19w eXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX3RleHQsIChjaGFy ICopMCwgMH0sCistICB7KGNoYXIgKikibG9nX2xldmVsIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX2xvZ19sZXZlbCwgX19weXhfc2V0cHJvcF85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX2xvZ19sZXZlbCwgKGNoYXIgKikwLCAwfSwK Ky0gIHswLCAwLCAwLCAwLCAwfQorLX07CistCistc3RhdGljIFB5VHlwZU9iamVjdCBfX3B5eF90 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlID0geworLSAgUHlWYXJPYmplY3Rf SEVBRF9JTklUKDAsIDApCistICAidmlkY3V0dGVyLmxpYnMubXB2LkxvZ01lc3NhZ2UiLCAvKnRw X25hbWUqLworLSAgc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0xvZ01lc3NhZ2UpLCAvKnRwX2Jhc2ljc2l6ZSovCistICAwLCAvKnRwX2l0ZW1zaXplKi8KKy0g IF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UsIC8qdHBf ZGVhbGxvYyovCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMGI0CistICAwLCAvKnRw X3ByaW50Ki8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQK Ky0gIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLworLSAgI2VuZGlmCistICAwLCAvKnRwX2dl dGF0dHIqLworLSAgMCwgLyp0cF9zZXRhdHRyKi8KKy0gICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwg MworLSAgMCwgLyp0cF9jb21wYXJlKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZX01BSk9SX1ZFUlNJ T04gPj0gMworLSAgMCwgLyp0cF9hc19hc3luYyovCistICAjZW5kaWYKKy0gIDAsIC8qdHBfcmVw ciovCistICAwLCAvKnRwX2FzX251bWJlciovCistICAwLCAvKnRwX2FzX3NlcXVlbmNlKi8KKy0g IDAsIC8qdHBfYXNfbWFwcGluZyovCistICAwLCAvKnRwX2hhc2gqLworLSAgMCwgLyp0cF9jYWxs Ki8KKy0gIDAsIC8qdHBfc3RyKi8KKy0gIDAsIC8qdHBfZ2V0YXR0cm8qLworLSAgMCwgLyp0cF9z ZXRhdHRybyovCistICAwLCAvKnRwX2FzX2J1ZmZlciovCistICBQeV9UUEZMQUdTX0RFRkFVTFR8 UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQRkxBR1NfQ0hFQ0tUWVBFU3xQeV9UUEZM QUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfQkFTRVRZUEV8UHlfVFBGTEFHU19IQVZFX0dD LCAvKnRwX2ZsYWdzKi8KKy0gICJEYXRhIGZpZWxkIGZvciBNUFZfRVZFTlRfTE9HX01FU1NBR0Ug ZXZlbnRzLlxuXG4gICAgV3JhcHM6IG1wdl9ldmVudF9sb2dfbWVzc2FnZVxuICAgICIsIC8qdHBf ZG9jKi8KKy0gIF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlLCAvKnRwX3RyYXZlcnNlKi8KKy0gIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Mb2dNZXNzYWdlLCAvKnRwX2NsZWFyKi8KKy0gIDAsIC8qdHBfcmljaGNvbXBhcmUqLwor LSAgMCwgLyp0cF93ZWFrbGlzdG9mZnNldCovCistICAwLCAvKnRwX2l0ZXIqLworLSAgMCwgLyp0 cF9pdGVybmV4dCovCistICBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlLCAvKnRwX21ldGhvZHMqLworLSAgMCwgLyp0cF9tZW1iZXJzKi8KKy0gIF9fcHl4X2dl dHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UsIC8qdHBfZ2V0c2V0Ki8KKy0g IDAsIC8qdHBfYmFzZSovCistICAwLCAvKnRwX2RpY3QqLworLSAgMCwgLyp0cF9kZXNjcl9nZXQq LworLSAgMCwgLyp0cF9kZXNjcl9zZXQqLworLSAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8KKy0gIDAs IC8qdHBfaW5pdCovCistICAwLCAvKnRwX2FsbG9jKi8KKy0gIF9fcHl4X3RwX25ld185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSwgLyp0cF9uZXcqLworLSAgMCwgLyp0cF9mcmVlKi8K Ky0gIDAsIC8qdHBfaXNfZ2MqLworLSAgMCwgLyp0cF9iYXNlcyovCistICAwLCAvKnRwX21ybyov CistICAwLCAvKnRwX2NhY2hlKi8KKy0gIDAsIC8qdHBfc3ViY2xhc3NlcyovCistICAwLCAvKnRw X3dlYWtsaXN0Ki8KKy0gIDAsIC8qdHBfZGVsKi8KKy0gIDAsIC8qdHBfdmVyc2lvbl90YWcqLwor LSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEKKy0gIDAsIC8qdHBfZmluYWxpemUq LworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMQorLSAgMCwg Lyp0cF92ZWN0b3JjYWxsKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4 MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCistICAwLCAvKnRwX3ByaW50 Ki8KKy0gICNlbmRpZgorLX07Cistc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1Byb3BlcnR5OworLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eShQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVTRUQgUHlP YmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKKy0gIHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpwOworLSAgUHlPYmplY3QgKm87Cist ICBpZiAobGlrZWx5KCh0LT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QpID09IDAp KSB7CistICAgIG8gPSAoKnQtPnRwX2FsbG9jKSh0LCAwKTsKKy0gIH0gZWxzZSB7CistICAgIG8g PSAoUHlPYmplY3QgKikgUHlCYXNlT2JqZWN0X1R5cGUudHBfbmV3KHQsIF9fcHl4X2VtcHR5X3R1 cGxlLCAwKTsKKy0gIH0KKy0gIGlmICh1bmxpa2VseSghbykpIHJldHVybiAwOworLSAgcCA9ICgo c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilvKTsKKy0g IHAtPl9fcHl4X3Z0YWIgPSBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eTsKKy0gIHAtPm5hbWUgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBwLT5k YXRhID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgcmV0dXJuIG87CistfQorLQor LXN0YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5KFB5T2JqZWN0ICpvKSB7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eSAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Qcm9wZXJ0eSAqKW87CistICAjaWYgQ1lUSE9OX1VTRV9UUF9GSU5BTElaRQorLSAgaWYgKHVu bGlrZWx5KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUobyksIFB5X1RQRkxBR1NfSEFWRV9GSU5B TElaRSkgJiYgUHlfVFlQRShvKS0+dHBfZmluYWxpemUpICYmICFfUHlHQ19GSU5BTElaRUQobykp IHsKKy0gICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJu OworLSAgfQorLSAgI2VuZGlmCistICBQeU9iamVjdF9HQ19VblRyYWNrKG8pOworLSAgUHlfQ0xF QVIocC0+bmFtZSk7CistICBQeV9DTEVBUihwLT5kYXRhKTsKKy0gICgqUHlfVFlQRShvKS0+dHBf ZnJlZSkobyk7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRl cl80bGlic18zbXB2X1Byb3BlcnR5KFB5T2JqZWN0ICpvLCB2aXNpdHByb2Mgdiwgdm9pZCAqYSkg eworLSAgaW50IGU7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Q cm9wZXJ0eSAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eSAqKW87CistICBpZiAocC0+bmFtZSkgeworLSAgICBlID0gKCp2KShwLT5uYW1lLCBhKTsg aWYgKGUpIHJldHVybiBlOworLSAgfQorLSAgaWYgKHAtPmRhdGEpIHsKKy0gICAgZSA9ICgqdiko cC0+ZGF0YSwgYSk7IGlmIChlKSByZXR1cm4gZTsKKy0gIH0KKy0gIHJldHVybiAwOworLX0KKy0K Ky1zdGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eShQeU9iamVjdCAqbykgeworLSAgUHlPYmplY3QqIHRtcDsKKy0gIHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopbzsKKy0gIHRtcCA9ICgoUHlPYmplY3QqKXAt Pm5hbWUpOworLSAgcC0+bmFtZSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKy0gIFB5 X1hERUNSRUYodG1wKTsKKy0gIHRtcCA9ICgoUHlPYmplY3QqKXAtPmRhdGEpOworLSAgcC0+ZGF0 YSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKy0gIFB5X1hERUNSRUYodG1wKTsKKy0g IHJldHVybiAwOworLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1 dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9uYW1lKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VE IHZvaWQgKngpIHsKKy0gIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFBy b3BlcnR5XzRuYW1lXzFfX2dldF9fKG8pOworLX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3NldHBy b3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9uYW1lKFB5T2JqZWN0ICpvLCBQeU9i amVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CistICBpZiAodikgeworLSAgICByZXR1 cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV8zX19zZXRf XyhvLCB2KTsKKy0gIH0KKy0gIGVsc2UgeworLSAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzhQcm9wZXJ0eV80bmFtZV81X19kZWxfXyhvKTsKKy0gIH0KKy19CistCist c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJv cGVydHlfZGF0YShQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CistICByZXR1 cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV80ZGF0YV8xX19nZXRf XyhvKTsKKy19CistCistc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl84UHJvcGVydHlfZGF0YShQeU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVT RUQgdm9pZCAqeCkgeworLSAgaWYgKHYpIHsKKy0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfNGRhdGFfM19fc2V0X18obywgdik7CistICB9CistICBl bHNlIHsKKy0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVy dHlfNGRhdGFfNV9fZGVsX18obyk7CistICB9CistfQorLQorLXN0YXRpYyBQeU1ldGhvZERlZiBf X3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eVtdID0geworLSAgeyJf X3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfOFByb3BlcnR5XzFfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9LAorLSAg eyJfX3NldHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl84UHJvcGVydHlfM19fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhfTywgMH0sCist ICB7MCwgMCwgMCwgMH0KKy19OworLQorLXN0YXRpYyBzdHJ1Y3QgUHlHZXRTZXREZWYgX19weXhf Z2V0c2V0c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHlbXSA9IHsKKy0gIHsoY2hhciAq KSJuYW1lIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X25h bWUsIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9uYW1lLCAo Y2hhciAqKTAsIDB9LAorLSAgeyhjaGFyICopImRhdGEiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfZGF0YSwgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfOFByb3BlcnR5X2RhdGEsIChjaGFyICopMCwgMH0sCistICB7MCwgMCwgMCwgMCwg MH0KKy19OworLQorLXN0YXRpYyBQeVR5cGVPYmplY3QgX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUHJvcGVydHkgPSB7CistICBQeVZhck9iamVjdF9IRUFEX0lOSVQoMCwgMCkKKy0g ICJ2aWRjdXR0ZXIubGlicy5tcHYuUHJvcGVydHkiLCAvKnRwX25hbWUqLworLSAgc2l6ZW9mKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSwgLyp0cF9iYXNp Y3NpemUqLworLSAgMCwgLyp0cF9pdGVtc2l6ZSovCistICBfX3B5eF90cF9kZWFsbG9jXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSwgLyp0cF9kZWFsbG9jKi8KKy0gICNpZiBQWV9WRVJT SU9OX0hFWCA8IDB4MDMwODAwYjQKKy0gIDAsIC8qdHBfcHJpbnQqLworLSAgI2VuZGlmCistICAj aWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorLSAgMCwgLyp0cF92ZWN0b3JjYWxsX29m ZnNldCovCistICAjZW5kaWYKKy0gIDAsIC8qdHBfZ2V0YXR0ciovCistICAwLCAvKnRwX3NldGF0 dHIqLworLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCistICAwLCAvKnRwX2NvbXBhcmUqLwor LSAgI2VuZGlmCistICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICAwLCAvKnRwX2FzX2Fz eW5jKi8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9yZXByKi8KKy0gIDAsIC8qdHBfYXNfbnVtYmVy Ki8KKy0gIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworLSAgMCwgLyp0cF9hc19tYXBwaW5nKi8KKy0g IDAsIC8qdHBfaGFzaCovCistICAwLCAvKnRwX2NhbGwqLworLSAgMCwgLyp0cF9zdHIqLworLSAg MCwgLyp0cF9nZXRhdHRybyovCistICAwLCAvKnRwX3NldGF0dHJvKi8KKy0gIDAsIC8qdHBfYXNf YnVmZmVyKi8KKy0gIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9U QUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVJ8UHlfVFBG TEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworLSAgIkRhdGEg ZmllbGQgZm9yIE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UgYW5kIE1QVl9FVkVOVF9HRVRfUFJP UEVSVFlfUkVQTFkuXG5cbiAgICBXcmFwczogbXB2X2V2ZW50X3Byb3BlcnR5XG4gICAgIiwgLyp0 cF9kb2MqLworLSAgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3Bl cnR5LCAvKnRwX3RyYXZlcnNlKi8KKy0gIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eSwgLyp0cF9jbGVhciovCistICAwLCAvKnRwX3JpY2hjb21wYXJlKi8KKy0g IDAsIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworLSAgMCwgLyp0cF9pdGVyKi8KKy0gIDAsIC8qdHBf aXRlcm5leHQqLworLSAgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVy dHksIC8qdHBfbWV0aG9kcyovCistICAwLCAvKnRwX21lbWJlcnMqLworLSAgX19weXhfZ2V0c2V0 c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHksIC8qdHBfZ2V0c2V0Ki8KKy0gIDAsIC8q dHBfYmFzZSovCistICAwLCAvKnRwX2RpY3QqLworLSAgMCwgLyp0cF9kZXNjcl9nZXQqLworLSAg MCwgLyp0cF9kZXNjcl9zZXQqLworLSAgMCwgLyp0cF9kaWN0b2Zmc2V0Ki8KKy0gIDAsIC8qdHBf aW5pdCovCistICAwLCAvKnRwX2FsbG9jKi8KKy0gIF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRs aWJzXzNtcHZfUHJvcGVydHksIC8qdHBfbmV3Ki8KKy0gIDAsIC8qdHBfZnJlZSovCistICAwLCAv KnRwX2lzX2djKi8KKy0gIDAsIC8qdHBfYmFzZXMqLworLSAgMCwgLyp0cF9tcm8qLworLSAgMCwg Lyp0cF9jYWNoZSovCistICAwLCAvKnRwX3N1YmNsYXNzZXMqLworLSAgMCwgLyp0cF93ZWFrbGlz dCovCistICAwLCAvKnRwX2RlbCovCistICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KKy0gICNpZiBQ WV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCistICAwLCAvKnRwX2ZpbmFsaXplKi8KKy0gICNl bmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEKKy0gIDAsIC8qdHBfdmVj dG9yY2FsbCovCistICAjZW5kaWYKKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0 ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAorLSAgMCwgLyp0cF9wcmludCovCistICAj ZW5kaWYKKy19OworLXN0YXRpYyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRXZlbnQgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudDsK Ky0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZf RXZlbnQoUHlUeXBlT2JqZWN0ICp0LCBDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICphLCBDWVRIT05f VU5VU0VEIFB5T2JqZWN0ICprKSB7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FdmVudCAqcDsKKy0gIFB5T2JqZWN0ICpvOworLSAgaWYgKGxpa2VseSgodC0+dHBf ZmxhZ3MgJiBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUKSA9PSAwKSkgeworLSAgICBvID0gKCp0LT50 cF9hbGxvYykodCwgMCk7CistICB9IGVsc2UgeworLSAgICBvID0gKFB5T2JqZWN0ICopIFB5QmFz ZU9iamVjdF9UeXBlLnRwX25ldyh0LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7CistICB9CistICBp ZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKKy0gIHAgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopbyk7CistICBwLT5fX3B5eF92dGFiID0gX19weXhf dnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQ7CistICBwLT5kYXRhID0gUHlfTm9u ZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgcC0+cmVwbHlfdXNlcmRhdGEgPSBQeV9Ob25lOyBQ eV9JTkNSRUYoUHlfTm9uZSk7CistICByZXR1cm4gbzsKKy19CistCistc3RhdGljIHZvaWQgX19w eXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQoUHlPYmplY3QgKm8pIHsK Ky0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICpwID0gKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopbzsKKy0gICNpZiBD WVRIT05fVVNFX1RQX0ZJTkFMSVpFCistICBpZiAodW5saWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUo UHlfVFlQRShvKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBFKG8pLT50cF9m aW5hbGl6ZSkgJiYgIV9QeUdDX0ZJTkFMSVpFRChvKSkgeworLSAgICBpZiAoUHlPYmplY3RfQ2Fs bEZpbmFsaXplckZyb21EZWFsbG9jKG8pKSByZXR1cm47CistICB9CistICAjZW5kaWYKKy0gIFB5 T2JqZWN0X0dDX1VuVHJhY2sobyk7CistICBQeV9DTEVBUihwLT5kYXRhKTsKKy0gIFB5X0NMRUFS KHAtPnJlcGx5X3VzZXJkYXRhKTsKKy0gICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7CistfQor LQorLXN0YXRpYyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2 ZW50KFB5T2JqZWN0ICpvLCB2aXNpdHByb2Mgdiwgdm9pZCAqYSkgeworLSAgaW50IGU7CistICBz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqcCA9IChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKW87CistICBpZiAocC0+ZGF0 YSkgeworLSAgICBlID0gKCp2KShwLT5kYXRhLCBhKTsgaWYgKGUpIHJldHVybiBlOworLSAgfQor LSAgaWYgKHAtPnJlcGx5X3VzZXJkYXRhKSB7CistICAgIGUgPSAoKnYpKHAtPnJlcGx5X3VzZXJk YXRhLCBhKTsgaWYgKGUpIHJldHVybiBlOworLSAgfQorLSAgcmV0dXJuIDA7CistfQorLQorLXN0 YXRpYyBpbnQgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KFB5T2Jq ZWN0ICpvKSB7CistICBQeU9iamVjdCogdG1wOworLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRXZlbnQgKilvOworLSAgdG1wID0gKChQeU9iamVjdCopcC0+ZGF0YSk7CistICBw LT5kYXRhID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgUHlfWERFQ1JFRih0bXAp OworLSAgdG1wID0gKChQeU9iamVjdCopcC0+cmVwbHlfdXNlcmRhdGEpOworLSAgcC0+cmVwbHlf dXNlcmRhdGEgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBQeV9YREVDUkVGKHRt cCk7CistICByZXR1cm4gMDsKKy19CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9w Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfZXJyb3Jfc3RyKFB5T2JqZWN0ICpvLCBDWVRI T05fVU5VU0VEIHZvaWQgKngpIHsKKy0gIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfNUV2ZW50XzllcnJvcl9zdHJfMV9fZ2V0X18obyk7CistfQorLQorLXN0YXRpYyBQeU9i amVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X25hbWUoUHlP YmplY3QgKm8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgeworLSAgcmV0dXJuIF9fcHl4X3B3Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfMV9fZ2V0X18obyk7CistfQorLQorLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 X2lkKFB5T2JqZWN0ICpvLCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKy0gIHJldHVybiBfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8xX19nZXRfXyhvKTsKKy19Cist Cistc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf aWQoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2LCBDWVRIT05fVU5VU0VEIHZvaWQgKngpIHsKKy0g IGlmICh2KSB7CistICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2 ZW50XzJpZF8zX19zZXRfXyhvLCB2KTsKKy0gIH0KKy0gIGVsc2UgeworLSAgICBQeUVycl9TZXRT dHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwgIl9fZGVsX18iKTsKKy0gICAgcmV0dXJu IC0xOworLSAgfQorLX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF9lcnJvcihQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2 b2lkICp4KSB7CistICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF81ZXJyb3JfMV9fZ2V0X18obyk7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhfc2V0cHJvcF85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2Vycm9yKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAq diwgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CistICBpZiAodikgeworLSAgICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF81ZXJyb3JfM19fc2V0X18obywgdik7 CistICB9CistICBlbHNlIHsKKy0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVu dGVkRXJyb3IsICJfX2RlbF9fIik7CistICAgIHJldHVybiAtMTsKKy0gIH0KKy19CistCistc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf ZGF0YShQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CistICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80ZGF0YV8xX19nZXRfXyhvKTsKKy19 CistCistc3RhdGljIGludCBfX3B5eF9zZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfZGF0YShQeU9iamVjdCAqbywgUHlPYmplY3QgKnYsIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkg eworLSAgaWYgKHYpIHsKKy0gICAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfNGRhdGFfM19fc2V0X18obywgdik7CistICB9CistICBlbHNlIHsKKy0gICAgcmV0 dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNGRhdGFfNV9fZGVsX18o byk7CistICB9CistfQorLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfNUV2ZW50X3JlcGx5X3VzZXJkYXRhKFB5T2JqZWN0ICpvLCBDWVRIT05f VU5VU0VEIHZvaWQgKngpIHsKKy0gIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50XzE0cmVwbHlfdXNlcmRhdGFfMV9fZ2V0X18obyk7CistfQorLQorLXN0YXRpYyBp bnQgX19weXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X3JlcGx5X3VzZXJk YXRhKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdiwgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7Cist ICBpZiAodikgeworLSAgICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF8xNHJlcGx5X3VzZXJkYXRhXzNfX3NldF9fKG8sIHYpOworLSAgfQorLSAgZWxzZSB7Cist ICAgIHJldHVybiBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzE0cmVwbHlf dXNlcmRhdGFfNV9fZGVsX18obyk7CistICB9CistfQorLQorLXN0YXRpYyBQeU1ldGhvZERlZiBf X3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudFtdID0geworLSAgeyJfX3Jl ZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50XzFfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9LAorLSAgeyJfX3Nl dHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl81RXZlbnRfM19fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhfTywgMH0sCistICB7MCwgMCwg MCwgMH0KKy19OworLQorLXN0YXRpYyBzdHJ1Y3QgUHlHZXRTZXREZWYgX19weXhfZ2V0c2V0c185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnRbXSA9IHsKKy0gIHsoY2hhciAqKSJlcnJvcl9zdHIi LCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfZXJyb3Jfc3RyLCAw LCAoY2hhciAqKSJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBlcnJvciBwcm9lcHJ0eSIsIDB9LAor LSAgeyhjaGFyICopIm5hbWUiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 RXZlbnRfbmFtZSwgMCwgKGNoYXIgKikibXB2X2V2ZW50X25hbWUgb2YgdGhlIGV2ZW50IGlkIiwg MH0sCistICB7KGNoYXIgKikiaWQiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl81RXZlbnRfaWQsIF9fcHl4X3NldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9p ZCwgKGNoYXIgKikwLCAwfSwKKy0gIHsoY2hhciAqKSJlcnJvciIsIF9fcHl4X2dldHByb3BfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9lcnJvciwgX19weXhfc2V0cHJvcF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50X2Vycm9yLCAoY2hhciAqKTAsIDB9LAorLSAgeyhjaGFyICopImRh dGEiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfZGF0YSwgX19w eXhfc2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X2RhdGEsIChjaGFyICopMCwg MH0sCistICB7KGNoYXIgKikicmVwbHlfdXNlcmRhdGEiLCBfX3B5eF9nZXRwcm9wXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl81RXZlbnRfcmVwbHlfdXNlcmRhdGEsIF9fcHl4X3NldHByb3BfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF9yZXBseV91c2VyZGF0YSwgKGNoYXIgKikwLCAwfSwKKy0g IHswLCAwLCAwLCAwLCAwfQorLX07CistCistc3RhdGljIFB5VHlwZU9iamVjdCBfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCA9IHsKKy0gIFB5VmFyT2JqZWN0X0hFQURfSU5J VCgwLCAwKQorLSAgInZpZGN1dHRlci5saWJzLm1wdi5FdmVudCIsIC8qdHBfbmFtZSovCistICBz aXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpLCAvKnRw X2Jhc2ljc2l6ZSovCistICAwLCAvKnRwX2l0ZW1zaXplKi8KKy0gIF9fcHl4X3RwX2RlYWxsb2Nf OXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LCAvKnRwX2RlYWxsb2MqLworLSAgI2lmIFBZX1ZF UlNJT05fSEVYIDwgMHgwMzA4MDBiNAorLSAgMCwgLyp0cF9wcmludCovCistICAjZW5kaWYKKy0g ICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0CistICAwLCAvKnRwX3ZlY3RvcmNhbGxf b2Zmc2V0Ki8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9nZXRhdHRyKi8KKy0gIDAsIC8qdHBfc2V0 YXR0ciovCistICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKy0gIDAsIC8qdHBfY29tcGFyZSov CistICAjZW5kaWYKKy0gICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gIDAsIC8qdHBfYXNf YXN5bmMqLworLSAgI2VuZGlmCistICAwLCAvKnRwX3JlcHIqLworLSAgMCwgLyp0cF9hc19udW1i ZXIqLworLSAgMCwgLyp0cF9hc19zZXF1ZW5jZSovCistICAwLCAvKnRwX2FzX21hcHBpbmcqLwor LSAgMCwgLyp0cF9oYXNoKi8KKy0gIDAsIC8qdHBfY2FsbCovCistICAwLCAvKnRwX3N0ciovCist ICAwLCAvKnRwX2dldGF0dHJvKi8KKy0gIDAsIC8qdHBfc2V0YXR0cm8qLworLSAgMCwgLyp0cF9h c19idWZmZXIqLworLSAgUHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9O X1RBR3xQeV9UUEZMQUdTX0NIRUNLVFlQRVN8UHlfVFBGTEFHU19IQVZFX05FV0JVRkZFUnxQeV9U UEZMQUdTX0JBU0VUWVBFfFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCistICAiV3Jh cHM6IG1wdl9ldmVudCIsIC8qdHBfZG9jKi8KKy0gIF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FdmVudCwgLyp0cF90cmF2ZXJzZSovCistICBfX3B5eF90cF9jbGVhcl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQsIC8qdHBfY2xlYXIqLworLSAgMCwgLyp0cF9yaWNo Y29tcGFyZSovCistICAwLCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKy0gIDAsIC8qdHBfaXRlciov CistICAwLCAvKnRwX2l0ZXJuZXh0Ki8KKy0gIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGli c18zbXB2X0V2ZW50LCAvKnRwX21ldGhvZHMqLworLSAgMCwgLyp0cF9tZW1iZXJzKi8KKy0gIF9f cHl4X2dldHNldHNfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LCAvKnRwX2dldHNldCovCist ICAwLCAvKnRwX2Jhc2UqLworLSAgMCwgLyp0cF9kaWN0Ki8KKy0gIDAsIC8qdHBfZGVzY3JfZ2V0 Ki8KKy0gIDAsIC8qdHBfZGVzY3Jfc2V0Ki8KKy0gIDAsIC8qdHBfZGljdG9mZnNldCovCistICAw LCAvKnRwX2luaXQqLworLSAgMCwgLyp0cF9hbGxvYyovCistICBfX3B5eF90cF9uZXdfOXZpZGN1 dHRlcl80bGlic18zbXB2X0V2ZW50LCAvKnRwX25ldyovCistICAwLCAvKnRwX2ZyZWUqLworLSAg MCwgLyp0cF9pc19nYyovCistICAwLCAvKnRwX2Jhc2VzKi8KKy0gIDAsIC8qdHBfbXJvKi8KKy0g IDAsIC8qdHBfY2FjaGUqLworLSAgMCwgLyp0cF9zdWJjbGFzc2VzKi8KKy0gIDAsIC8qdHBfd2Vh a2xpc3QqLworLSAgMCwgLyp0cF9kZWwqLworLSAgMCwgLyp0cF92ZXJzaW9uX3RhZyovCistICAj aWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA0MDBhMQorLSAgMCwgLyp0cF9maW5hbGl6ZSovCist ICAjZW5kaWYKKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGIxCistICAwLCAvKnRw X3ZlY3RvcmNhbGwqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4 MDBiNCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwOTAwMDAKKy0gIDAsIC8qdHBfcHJpbnQqLwor LSAgI2VuZGlmCistfTsKKy1zdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0OworLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0KFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAq YSwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqaykgeworLSAgc3RydWN0IF9fcHl4X29ial85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqcDsKKy0gIFB5T2JqZWN0ICpvOworLSAgaWYgKGxp a2VseSgodC0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUKSA9PSAwKSkgeworLSAg ICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7CistICB9IGVsc2UgeworLSAgICBvID0gKFB5T2Jq ZWN0ICopIFB5QmFzZU9iamVjdF9UeXBlLnRwX25ldyh0LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7 CistICB9CistICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKKy0gIHAgPSAoKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilvKTsKKy0gIHAtPl9fcHl4 X3Z0YWIgPSBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0OworLSAg cC0+Y2FsbGJhY2sgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBwLT5jYWxsYmFj a3RocmVhZCA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKy0gIHAtPnJlcGx5X3VzZXJk YXRhID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgaWYgKHVubGlrZWx5KF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zN19fY2luaXRfXyhvLCBfX3B5eF9l bXB0eV90dXBsZSwgTlVMTCkgPCAwKSkgZ290byBiYWQ7CistICByZXR1cm4gbzsKKy0gIGJhZDoK Ky0gIFB5X0RFQ1JFRihvKTsgbyA9IDA7CistICByZXR1cm4gTlVMTDsKKy19CistCistc3RhdGlj IHZvaWQgX19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dChQeU9i amVjdCAqbykgeworLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCAqcCA9IChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICopbzsKKy0gICNpZiBDWVRIT05fVVNFX1RQX0ZJTkFMSVpFCistICBpZiAodW5saWtlbHkoUHlU eXBlX0hhc0ZlYXR1cmUoUHlfVFlQRShvKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQ eV9UWVBFKG8pLT50cF9maW5hbGl6ZSkgJiYgIV9QeUdDX0ZJTkFMSVpFRChvKSkgeworLSAgICBp ZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKG8pKSByZXR1cm47CistICB9Cist ICAjZW5kaWYKKy0gIFB5T2JqZWN0X0dDX1VuVHJhY2sobyk7CistICB7CistICAgIFB5T2JqZWN0 ICpldHlwZSwgKmV2YWwsICpldGI7CistICAgIFB5RXJyX0ZldGNoKCZldHlwZSwgJmV2YWwsICZl dGIpOworLSAgICBfX1B5eF9TRVRfUkVGQ05UKG8sIFB5X1JFRkNOVChvKSArIDEpOworLSAgICBf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDdfX2RlYWxsb2NfXyhvKTsK Ky0gICAgX19QeXhfU0VUX1JFRkNOVChvLCBQeV9SRUZDTlQobykgLSAxKTsKKy0gICAgUHlFcnJf UmVzdG9yZShldHlwZSwgZXZhbCwgZXRiKTsKKy0gIH0KKy0gIFB5X0NMRUFSKHAtPmNhbGxiYWNr KTsKKy0gIFB5X0NMRUFSKHAtPmNhbGxiYWNrdGhyZWFkKTsKKy0gIFB5X0NMRUFSKHAtPnJlcGx5 X3VzZXJkYXRhKTsKKy0gICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7CistfQorLQorLXN0YXRp YyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQoUHlP YmplY3QgKm8sIHZpc2l0cHJvYyB2LCB2b2lkICphKSB7CistICBpbnQgZTsKKy0gIHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKnAgPSAoc3RydWN0IF9fcHl4 X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKW87CistICBpZiAocC0+Y2FsbGJh Y2spIHsKKy0gICAgZSA9ICgqdikocC0+Y2FsbGJhY2ssIGEpOyBpZiAoZSkgcmV0dXJuIGU7Cist ICB9CistICBpZiAocC0+Y2FsbGJhY2t0aHJlYWQpIHsKKy0gICAgZSA9ICgqdikocC0+Y2FsbGJh Y2t0aHJlYWQsIGEpOyBpZiAoZSkgcmV0dXJuIGU7CistICB9CistICBpZiAocC0+cmVwbHlfdXNl cmRhdGEpIHsKKy0gICAgZSA9ICgqdikocC0+cmVwbHlfdXNlcmRhdGEsIGEpOyBpZiAoZSkgcmV0 dXJuIGU7CistICB9CistICByZXR1cm4gMDsKKy19CistCistc3RhdGljIGludCBfX3B5eF90cF9j bGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dChQeU9iamVjdCAqbykgeworLSAgUHlP YmplY3QqIHRtcDsKKy0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0Nv bnRleHQgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCAqKW87CistICB0bXAgPSAoKFB5T2JqZWN0KilwLT5jYWxsYmFjayk7CistICBwLT5jYWxsYmFj ayA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKy0gIFB5X1hERUNSRUYodG1wKTsKKy0g IHRtcCA9ICgoUHlPYmplY3QqKXAtPmNhbGxiYWNrdGhyZWFkKTsKKy0gIHAtPmNhbGxiYWNrdGhy ZWFkID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgUHlfWERFQ1JFRih0bXApOwor LSAgdG1wID0gKChQeU9iamVjdCopcC0+cmVwbHlfdXNlcmRhdGEpOworLSAgcC0+cmVwbHlfdXNl cmRhdGEgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBQeV9YREVDUkVGKHRtcCk7 CistICByZXR1cm4gMDsKKy19CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9nZXRwcm9wXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9hcGlfdmVyc2lvbihQeU9iamVjdCAqbywgQ1lU SE9OX1VOVVNFRCB2b2lkICp4KSB7CistICByZXR1cm4gX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzExYXBpX3ZlcnNpb25fMV9fZ2V0X18obyk7CistfQorLQorLXN0YXRp YyBQeU9iamVjdCAqX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf bmFtZShQeU9iamVjdCAqbywgQ1lUSE9OX1VOVVNFRCB2b2lkICp4KSB7CistICByZXR1cm4gX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lXzFfX2dldF9fKG8pOwor LX0KKy0KKy1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0X3RpbWUoUHlPYmplY3QgKm8sIENZVEhPTl9VTlVTRUQgdm9pZCAqeCkgewor LSAgcmV0dXJuIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80dGltZV8x X19nZXRfXyhvKTsKKy19CistCistc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21ldGhvZHNfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHRbXSA9IHsKKy0gIHsic3VzcGVuZCIsIChQeUNGdW5j dGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMXN1c3BlbmQsIE1F VEhfTk9BUkdTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X3N1c3Bl bmR9LAorLSAgeyJyZXN1bWUiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzNyZXN1bWUsIE1FVEhfTk9BUkdTLCBfX3B5eF9kb2NfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzJyZXN1bWV9LAorLSAgeyJyZXF1ZXN0X2V2ZW50IiwgKFB5 Q0Z1bmN0aW9uKSh2b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzVyZXF1ZXN0X2V2ZW50LCBNRVRIX1ZBUkFSR1N8TUVU SF9LRVlXT1JEUywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80cmVx dWVzdF9ldmVudH0sCistICB7InNldF9sb2dfbGV2ZWwiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzdzZXRfbG9nX2xldmVsLCBNRVRIX08sIF9f cHl4X2RvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNnNldF9sb2dfbGV2ZWx9LAor LSAgeyJsb2FkX2NvbmZpZyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfOWxvYWRfY29uZmlnLCBNRVRIX08sIF9fcHl4X2RvY185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfOGxvYWRfY29uZmlnfSwKKy0gIHsiX2Zvcm1hdF9mb3IiLCAo UHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExX2Zv cm1hdF9mb3IsIE1FVEhfTywgMH0sCistICB7ImNvbW1hbmQiLCAoUHlDRnVuY3Rpb24pKHZvaWQq KShQeUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMTNjb21tYW5kLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX19weXhfZG9j Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMmNvbW1hbmR9LAorLSAgeyJnZXRfcHJv cGVydHlfYXN5bmMiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhLZXl3b3Jk cylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTVnZXRfcHJvcGVydHlf YXN5bmMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzE0Z2V0X3Byb3BlcnR5X2FzeW5jfSwKKy0gIHsidHJ5X2dldF9w cm9wZXJ0eV9hc3luYyIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdv cmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xN3RyeV9nZXRfcHJv cGVydHlfYXN5bmMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfSwKKy0gIHsidHJ5X2dl dF9wcm9wZXJ0eSIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRz KV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOXRyeV9nZXRfcHJvcGVy dHksIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAwfSwKKy0gIHsiZ2V0X3Byb3BlcnR5Iiwg KFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMWdl dF9wcm9wZXJ0eSwgTUVUSF9PLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzIwZ2V0X3Byb3BlcnR5fSwKKy0gIHsic2V0X3Byb3BlcnR5IiwgKFB5Q0Z1bmN0aW9uKSh2 b2lkKikoUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzIzc2V0X3Byb3BlcnR5LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywg X19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMnNldF9wcm9wZXJ0eX0s CistICB7InNldF9vcHRpb24iLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldpdGhL ZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjVzZXRfb3B0 aW9uLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8yNHNldF9vcHRpb259LAorLSAgeyJpbml0aWFsaXplIiwgKFB5Q0Z1 bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yN2luaXRpYWxp emUsIE1FVEhfTk9BUkdTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzI2aW5pdGlhbGl6ZX0sCistICB7IndhaXRfZXZlbnQiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQ eUNGdW5jdGlvbldpdGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMjl3YWl0X2V2ZW50LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX19weXhfZG9j Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yOHdhaXRfZXZlbnR9LAorLSAgeyJ3YWtl dXAiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzMxd2FrZXVwLCBNRVRIX05PQVJHUywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8zMHdha2V1cH0sCistICB7InNldF93YWtldXBfY2FsbGJhY2siLCAoUHlDRnVuY3Rp b24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMzc2V0X3dha2V1cF9j YWxsYmFjaywgTUVUSF9PLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzMyc2V0X3dha2V1cF9jYWxsYmFja30sCistICB7ImdldF93YWtldXBfcGlwZSIsIChQeUNGdW5j dGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzVnZXRfd2FrZXVw X3BpcGUsIE1FVEhfTk9BUkdTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzM0Z2V0X3dha2V1cF9waXBlfSwKKy0gIHsib2JzZXJ2ZV9wcm9wZXJ0eSIsIChQeUNGdW5j dGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8zOW9ic2VydmVfcHJvcGVydHksIE1FVEhfVkFSQVJHU3xNRVRI X0tFWVdPUkRTLCBfX3B5eF9kb2NfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4b2Jz ZXJ2ZV9wcm9wZXJ0eX0sCistICB7InVub2JzZXJ2ZV9wcm9wZXJ0eSIsIChQeUNGdW5jdGlvbilf X3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNDF1bm9ic2VydmVfcHJvcGVy dHksIE1FVEhfTywgX19weXhfZG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80MHVu b2JzZXJ2ZV9wcm9wZXJ0eX0sCistICB7InNodXRkb3duIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80M3NodXRkb3duLCBNRVRIX05PQVJHUywg MH0sCistICB7Im9wZW5nbF9jYl9hcGkiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzQ1b3BlbmdsX2NiX2FwaSwgTUVUSF9OT0FSR1MsIDB9LAor LSAgeyJfX3JlZHVjZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfNDlfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9 LAorLSAgeyJfX3NldHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF81MV9fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhfTywg MH0sCistICB7MCwgMCwgMCwgMH0KKy19OworLQorLXN0YXRpYyBzdHJ1Y3QgUHlHZXRTZXREZWYg X19weXhfZ2V0c2V0c185dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dFtdID0geworLSAgeyhj aGFyICopImFwaV92ZXJzaW9uIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfYXBpX3ZlcnNpb24sIDAsIChjaGFyICopMCwgMH0sCistICB7KGNoYXIgKikibmFt ZSIsIF9fcHl4X2dldHByb3BfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X25hbWUsIDAs IChjaGFyICopIlVuaXF1ZSBuYW1lIGZvciBldmVyeSBjb250ZXh0IGNyZWF0ZWQuXG5cbiAgICAg ICAgV3JhcHM6IG1wdl9jbGllbnRfbmFtZVxuICAgICAgICAiLCAwfSwKKy0gIHsoY2hhciAqKSJ0 aW1lIiwgX19weXhfZ2V0cHJvcF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfdGltZSwg MCwgKGNoYXIgKikiSW50ZXJuYWwgbXB2IGNsaWVudCB0aW1lLlxuXG4gICAgICAgIEhhcyBhbiBh cmJpdHJhcnkgc3RhcnQgb2Zmc2V0LCBidXQgd2lsbCBuZXZlciB3cmFwIG9yIGdvIGJhY2t3YXJk cy5cblxuICAgICAgICBXcmFwczogbXB2X2dldF90aW1lX3VzXG4gICAgICAgICIsIDB9LAorLSAg ezAsIDAsIDAsIDAsIDB9CistfTsKKy0KKy1zdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgPSB7CistICBQeVZhck9iamVjdF9IRUFEX0lO SVQoMCwgMCkKKy0gICJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dCIsIC8qdHBfbmFtZSovCist ICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCks IC8qdHBfYmFzaWNzaXplKi8KKy0gIDAsIC8qdHBfaXRlbXNpemUqLworLSAgX19weXhfdHBfZGVh bGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgLyp0cF9kZWFsbG9jKi8KKy0gICNp ZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKy0gIDAsIC8qdHBfcHJpbnQqLworLSAgI2Vu ZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorLSAgMCwgLyp0cF92ZWN0 b3JjYWxsX29mZnNldCovCistICAjZW5kaWYKKy0gIDAsIC8qdHBfZ2V0YXR0ciovCistICAwLCAv KnRwX3NldGF0dHIqLworLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCistICAwLCAvKnRwX2Nv bXBhcmUqLworLSAgI2VuZGlmCistICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICAwLCAv KnRwX2FzX2FzeW5jKi8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9yZXByKi8KKy0gIDAsIC8qdHBf YXNfbnVtYmVyKi8KKy0gIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworLSAgMCwgLyp0cF9hc19tYXBw aW5nKi8KKy0gIDAsIC8qdHBfaGFzaCovCistICAwLCAvKnRwX2NhbGwqLworLSAgMCwgLyp0cF9z dHIqLworLSAgMCwgLyp0cF9nZXRhdHRybyovCistICAwLCAvKnRwX3NldGF0dHJvKi8KKy0gIDAs IC8qdHBfYXNfYnVmZmVyKi8KKy0gIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0hBVkVf VkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZG RVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLwor LSAgIkJhc2UgY2xhc3Mgd3JhcHBpbmcgYSBjb250ZXh0IHRvIGludGVyYWN0IHdpdGggbXB2Llxu XG4gICAgQXNzdW1lIGFsbCBjYWxscyBjYW4gcmFpc2UgTVBWRXJyb3IuXG5cbiAgICBXcmFwczog bXB2X2NyZWF0ZSwgbXB2X2Rlc3Ryb3kgYW5kIGFsbCBtcHZfaGFuZGxlIHJlbGF0ZWQgY2FsbHNc biAgICAiLCAvKnRwX2RvYyovCistICBfX3B5eF90cF90cmF2ZXJzZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCwgLyp0cF90cmF2ZXJzZSovCistICBfX3B5eF90cF9jbGVhcl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgLyp0cF9jbGVhciovCistICAwLCAvKnRwX3JpY2hjb21w YXJlKi8KKy0gIDAsIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworLSAgMCwgLyp0cF9pdGVyKi8KKy0g IDAsIC8qdHBfaXRlcm5leHQqLworLSAgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dCwgLyp0cF9tZXRob2RzKi8KKy0gIDAsIC8qdHBfbWVtYmVycyovCistICBfX3B5 eF9nZXRzZXRzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCAvKnRwX2dldHNldCovCist ICAwLCAvKnRwX2Jhc2UqLworLSAgMCwgLyp0cF9kaWN0Ki8KKy0gIDAsIC8qdHBfZGVzY3JfZ2V0 Ki8KKy0gIDAsIC8qdHBfZGVzY3Jfc2V0Ki8KKy0gIDAsIC8qdHBfZGljdG9mZnNldCovCistICAw LCAvKnRwX2luaXQqLworLSAgMCwgLyp0cF9hbGxvYyovCistICBfX3B5eF90cF9uZXdfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQsIC8qdHBfbmV3Ki8KKy0gIDAsIC8qdHBfZnJlZSovCist ICAwLCAvKnRwX2lzX2djKi8KKy0gIDAsIC8qdHBfYmFzZXMqLworLSAgMCwgLyp0cF9tcm8qLwor LSAgMCwgLyp0cF9jYWNoZSovCistICAwLCAvKnRwX3N1YmNsYXNzZXMqLworLSAgMCwgLyp0cF93 ZWFrbGlzdCovCistICAwLCAvKnRwX2RlbCovCistICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KKy0g ICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCistICAwLCAvKnRwX2ZpbmFsaXplKi8K Ky0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEKKy0gIDAsIC8q dHBfdmVjdG9yY2FsbCovCistICAjZW5kaWYKKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAz MDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAorLSAgMCwgLyp0cF9wcmludCov CistICAjZW5kaWYKKy19OworLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0KFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VO VVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqaykgeworLSAgc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqcDsKKy0gIFB5 T2JqZWN0ICpvOworLSAgaWYgKGxpa2VseSgodC0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lTX0FC U1RSQUNUKSA9PSAwKSkgeworLSAgICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7CistICB9IGVs c2UgeworLSAgICBvID0gKFB5T2JqZWN0ICopIFB5QmFzZU9iamVjdF9UeXBlLnRwX25ldyh0LCBf X3B5eF9lbXB0eV90dXBsZSwgMCk7CistICB9CistICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4g MDsKKy0gIHAgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5H TENvbnRleHQgKilvKTsKKy0gIHAtPnVwZGF0ZV9jYiA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9O b25lKTsKKy0gIHJldHVybiBvOworLX0KKy0KKy1zdGF0aWMgdm9pZCBfX3B5eF90cF9kZWFsbG9j Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0KFB5T2JqZWN0ICpvKSB7CistICBz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpwID0g KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQgKilv OworLSAgI2lmIENZVEhPTl9VU0VfVFBfRklOQUxJWkUKKy0gIGlmICh1bmxpa2VseShQeVR5cGVf SGFzRmVhdHVyZShQeV9UWVBFKG8pLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmIFB5X1RZ UEUobyktPnRwX2ZpbmFsaXplKSAmJiAhX1B5R0NfRklOQUxJWkVEKG8pKSB7CistICAgIGlmIChQ eU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2MobykpIHJldHVybjsKKy0gIH0KKy0gICNl bmRpZgorLSAgUHlPYmplY3RfR0NfVW5UcmFjayhvKTsKKy0gIHsKKy0gICAgUHlPYmplY3QgKmV0 eXBlLCAqZXZhbCwgKmV0YjsKKy0gICAgUHlFcnJfRmV0Y2goJmV0eXBlLCAmZXZhbCwgJmV0Yik7 CistICAgIF9fUHl4X1NFVF9SRUZDTlQobywgUHlfUkVGQ05UKG8pICsgMSk7CistICAgIF9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTNfX2RlYWxsb2NfXyhv KTsKKy0gICAgX19QeXhfU0VUX1JFRkNOVChvLCBQeV9SRUZDTlQobykgLSAxKTsKKy0gICAgUHlF cnJfUmVzdG9yZShldHlwZSwgZXZhbCwgZXRiKTsKKy0gIH0KKy0gIFB5X0NMRUFSKHAtPnVwZGF0 ZV9jYik7CistICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOworLX0KKy0KKy1zdGF0aWMgaW50 IF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0KFB5 T2JqZWN0ICpvLCB2aXNpdHByb2Mgdiwgdm9pZCAqYSkgeworLSAgaW50IGU7CistICBzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0ICpwID0gKHN0cnVj dCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQgKilvOworLSAg aWYgKHAtPnVwZGF0ZV9jYikgeworLSAgICBlID0gKCp2KShwLT51cGRhdGVfY2IsIGEpOyBpZiAo ZSkgcmV0dXJuIGU7CistICB9CistICByZXR1cm4gMDsKKy19CistCistc3RhdGljIGludCBfX3B5 eF90cF9jbGVhcl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dChQeU9iamVjdCAq bykgeworLSAgUHlPYmplY3QqIHRtcDsKKy0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X09wZW5HTENvbnRleHQgKnAgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCAqKW87CistICB0bXAgPSAoKFB5T2JqZWN0KilwLT51 cGRhdGVfY2IpOworLSAgcC0+dXBkYXRlX2NiID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUp OworLSAgUHlfWERFQ1JFRih0bXApOworLSAgcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBQeU1l dGhvZERlZiBfX3B5eF9tZXRob2RzXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0 W10gPSB7CistICB7ImluaXRfZ2wiLCAoUHlDRnVuY3Rpb24pKHZvaWQqKShQeUNGdW5jdGlvbldp dGhLZXl3b3JkcylfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0 XzNpbml0X2dsLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgMH0sCistICB7InNldF91cGRh dGVfY2FsbGJhY2siLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzT3BlbkdMQ29udGV4dF81c2V0X3VwZGF0ZV9jYWxsYmFjaywgTUVUSF9PLCAwfSwKKy0gIHsi ZHJhdyIsIChQeUNGdW5jdGlvbikodm9pZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfN2RyYXcsIE1FVEhfVkFS QVJHU3xNRVRIX0tFWVdPUkRTLCAwfSwKKy0gIHsicmVwb3J0X2ZsaXAiLCAoUHlDRnVuY3Rpb24p X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzT3BlbkdMQ29udGV4dF85cmVwb3J0X2Zs aXAsIE1FVEhfTywgMH0sCistICB7InVuaW5pdF9nbCIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNPcGVuR0xDb250ZXh0XzExdW5pbml0X2dsLCBNRVRIX05P QVJHUywgMH0sCistICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTVfX3JlZHVjZV9jeXRob25f XywgTUVUSF9OT0FSR1MsIDB9LAorLSAgeyJfX3NldHN0YXRlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0 aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM09wZW5HTENvbnRleHRfMTdfX3Nl dHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAorLSAgezAsIDAsIDAsIDB9CistfTsKKy0KKy1z dGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5H TENvbnRleHQgPSB7CistICBQeVZhck9iamVjdF9IRUFEX0lOSVQoMCwgMCkKKy0gICJ2aWRjdXR0 ZXIubGlicy5tcHYuT3BlbkdMQ29udGV4dCIsIC8qdHBfbmFtZSovCistICBzaXplb2Yoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCksIC8qdHBfYmFz aWNzaXplKi8KKy0gIDAsIC8qdHBfaXRlbXNpemUqLworLSAgX19weXhfdHBfZGVhbGxvY185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCwgLyp0cF9kZWFsbG9jKi8KKy0gICNpZiBQ WV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKy0gIDAsIC8qdHBfcHJpbnQqLworLSAgI2VuZGlm CistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAorLSAgMCwgLyp0cF92ZWN0b3Jj YWxsX29mZnNldCovCistICAjZW5kaWYKKy0gIDAsIC8qdHBfZ2V0YXR0ciovCistICAwLCAvKnRw X3NldGF0dHIqLworLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCistICAwLCAvKnRwX2NvbXBh cmUqLworLSAgI2VuZGlmCistICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICAwLCAvKnRw X2FzX2FzeW5jKi8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9yZXByKi8KKy0gIDAsIC8qdHBfYXNf bnVtYmVyKi8KKy0gIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworLSAgMCwgLyp0cF9hc19tYXBwaW5n Ki8KKy0gIDAsIC8qdHBfaGFzaCovCistICAwLCAvKnRwX2NhbGwqLworLSAgMCwgLyp0cF9zdHIq LworLSAgMCwgLyp0cF9nZXRhdHRybyovCistICAwLCAvKnRwX3NldGF0dHJvKi8KKy0gIDAsIC8q dHBfYXNfYnVmZmVyKi8KKy0gIFB5X1RQRkxBR1NfREVGQVVMVHxQeV9UUEZMQUdTX0hBVkVfVkVS U0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxBR1NfSEFWRV9ORVdCVUZGRVJ8 UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworLSAg MCwgLyp0cF9kb2MqLworLSAgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2 X09wZW5HTENvbnRleHQsIC8qdHBfdHJhdmVyc2UqLworLSAgX19weXhfdHBfY2xlYXJfOXZpZGN1 dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQsIC8qdHBfY2xlYXIqLworLSAgMCwgLyp0cF9y aWNoY29tcGFyZSovCistICAwLCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKy0gIDAsIC8qdHBfaXRl ciovCistICAwLCAvKnRwX2l0ZXJuZXh0Ki8KKy0gIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80 bGlic18zbXB2X09wZW5HTENvbnRleHQsIC8qdHBfbWV0aG9kcyovCistICAwLCAvKnRwX21lbWJl cnMqLworLSAgMCwgLyp0cF9nZXRzZXQqLworLSAgMCwgLyp0cF9iYXNlKi8KKy0gIDAsIC8qdHBf ZGljdCovCistICAwLCAvKnRwX2Rlc2NyX2dldCovCistICAwLCAvKnRwX2Rlc2NyX3NldCovCist ICAwLCAvKnRwX2RpY3RvZmZzZXQqLworLSAgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzT3BlbkdMQ29udGV4dF8xX19pbml0X18sIC8qdHBfaW5pdCovCistICAwLCAvKnRwX2FsbG9j Ki8KKy0gIF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCwg Lyp0cF9uZXcqLworLSAgMCwgLyp0cF9mcmVlKi8KKy0gIDAsIC8qdHBfaXNfZ2MqLworLSAgMCwg Lyp0cF9iYXNlcyovCistICAwLCAvKnRwX21ybyovCistICAwLCAvKnRwX2NhY2hlKi8KKy0gIDAs IC8qdHBfc3ViY2xhc3NlcyovCistICAwLCAvKnRwX3dlYWtsaXN0Ki8KKy0gIDAsIC8qdHBfZGVs Ki8KKy0gIDAsIC8qdHBfdmVyc2lvbl90YWcqLworLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4 MDMwNDAwYTEKKy0gIDAsIC8qdHBfZmluYWxpemUqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVS U0lPTl9IRVggPj0gMHgwMzA4MDBiMQorLSAgMCwgLyp0cF92ZWN0b3JjYWxsKi8KKy0gICNlbmRp ZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVgg PCAweDAzMDkwMDAwCistICAwLCAvKnRwX3ByaW50Ki8KKy0gICNlbmRpZgorLX07Cistc3RhdGlj IHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtczsKKy0K Ky1zdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1Jl bmRlclBhcmFtcyhQeVR5cGVPYmplY3QgKnQsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmEsIENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKKy0gIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKnA7CistICBQeU9iamVjdCAqbzsKKy0gIGlmIChs aWtlbHkoKHQtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19JU19BQlNUUkFDVCkgPT0gMCkpIHsKKy0g ICAgbyA9ICgqdC0+dHBfYWxsb2MpKHQsIDApOworLSAgfSBlbHNlIHsKKy0gICAgbyA9IChQeU9i amVjdCAqKSBQeUJhc2VPYmplY3RfVHlwZS50cF9uZXcodCwgX19weXhfZW1wdHlfdHVwbGUsIDAp OworLSAgfQorLSAgaWYgKHVubGlrZWx5KCFvKSkgcmV0dXJuIDA7CistICBwID0gKChzdHJ1Y3Qg X19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopbyk7CistICBw LT5fX3B5eF92dGFiID0gX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRl clBhcmFtczsKKy0gIHAtPm93bmVkID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAg cmV0dXJuIG87CistfQorLQorLXN0YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMoUHlPYmplY3QgKm8pIHsKKy0gIHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKnAgPSAoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKW87CistICAjaWYg Q1lUSE9OX1VTRV9UUF9GSU5BTElaRQorLSAgaWYgKHVubGlrZWx5KFB5VHlwZV9IYXNGZWF0dXJl KFB5X1RZUEUobyksIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkgJiYgUHlfVFlQRShvKS0+dHBf ZmluYWxpemUpICYmICFfUHlHQ19GSU5BTElaRUQobykpIHsKKy0gICAgaWYgKFB5T2JqZWN0X0Nh bGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJuOworLSAgfQorLSAgI2VuZGlmCistICBQ eU9iamVjdF9HQ19VblRyYWNrKG8pOworLSAgeworLSAgICBQeU9iamVjdCAqZXR5cGUsICpldmFs LCAqZXRiOworLSAgICBQeUVycl9GZXRjaCgmZXR5cGUsICZldmFsLCAmZXRiKTsKKy0gICAgX19Q eXhfU0VUX1JFRkNOVChvLCBQeV9SRUZDTlQobykgKyAxKTsKKy0gICAgX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc18zX19kZWFsbG9jX18obyk7CistICAgIF9f UHl4X1NFVF9SRUZDTlQobywgUHlfUkVGQ05UKG8pIC0gMSk7CistICAgIFB5RXJyX1Jlc3RvcmUo ZXR5cGUsIGV2YWwsIGV0Yik7CistICB9CistICBQeV9DTEVBUihwLT5vd25lZCk7CistICAoKlB5 X1RZUEUobyktPnRwX2ZyZWUpKG8pOworLX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3RwX3RyYXZl cnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKFB5T2JqZWN0ICpvLCB2aXNp dHByb2Mgdiwgdm9pZCAqYSkgeworLSAgaW50IGU7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilvOworLSAgaWYgKHAtPm93bmVkKSB7 CistICAgIGUgPSAoKnYpKHAtPm93bmVkLCBhKTsgaWYgKGUpIHJldHVybiBlOworLSAgfQorLSAg cmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80 bGlic18zbXB2X19SZW5kZXJQYXJhbXMoUHlPYmplY3QgKm8pIHsKKy0gIFB5T2JqZWN0KiB0bXA7 CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z ICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJh bXMgKilvOworLSAgdG1wID0gKChQeU9iamVjdCopcC0+b3duZWQpOworLSAgcC0+b3duZWQgPSBQ eV9Ob25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBQeV9YREVDUkVGKHRtcCk7CistICByZXR1 cm4gMDsKKy19CistCistc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXNbXSA9IHsKKy0gIHsiX19yZWR1Y2VfY3l0aG9uX18i LCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBh cmFtc181X19yZWR1Y2VfY3l0aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwKKy0gIHsiX19zZXRzdGF0 ZV9jeXRob25fXyIsIChQeUNGdW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNfUmVuZGVyUGFyYW1zXzdfX3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAorLSAgezAs IDAsIDAsIDB9CistfTsKKy0KKy1zdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgPSB7CistICBQeVZhck9iamVjdF9IRUFEX0lO SVQoMCwgMCkKKy0gICJ2aWRjdXR0ZXIubGlicy5tcHYuX1JlbmRlclBhcmFtcyIsIC8qdHBfbmFt ZSovCistICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1Jl bmRlclBhcmFtcyksIC8qdHBfYmFzaWNzaXplKi8KKy0gIDAsIC8qdHBfaXRlbXNpemUqLworLSAg X19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcywgLyp0 cF9kZWFsbG9jKi8KKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKy0gIDAsIC8q dHBfcHJpbnQqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBi NAorLSAgMCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCistICAjZW5kaWYKKy0gIDAsIC8qdHBf Z2V0YXR0ciovCistICAwLCAvKnRwX3NldGF0dHIqLworLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04g PCAzCistICAwLCAvKnRwX2NvbXBhcmUqLworLSAgI2VuZGlmCistICAjaWYgUFlfTUFKT1JfVkVS U0lPTiA+PSAzCistICAwLCAvKnRwX2FzX2FzeW5jKi8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9y ZXByKi8KKy0gIDAsIC8qdHBfYXNfbnVtYmVyKi8KKy0gIDAsIC8qdHBfYXNfc2VxdWVuY2UqLwor LSAgMCwgLyp0cF9hc19tYXBwaW5nKi8KKy0gIDAsIC8qdHBfaGFzaCovCistICAwLCAvKnRwX2Nh bGwqLworLSAgMCwgLyp0cF9zdHIqLworLSAgMCwgLyp0cF9nZXRhdHRybyovCistICAwLCAvKnRw X3NldGF0dHJvKi8KKy0gIDAsIC8qdHBfYXNfYnVmZmVyKi8KKy0gIFB5X1RQRkxBR1NfREVGQVVM VHxQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQ RkxBR1NfSEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVf R0MsIC8qdHBfZmxhZ3MqLworLSAgMCwgLyp0cF9kb2MqLworLSAgX19weXhfdHBfdHJhdmVyc2Vf OXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBfdHJhdmVyc2UqLworLSAg X19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBf Y2xlYXIqLworLSAgMCwgLyp0cF9yaWNoY29tcGFyZSovCistICAwLCAvKnRwX3dlYWtsaXN0b2Zm c2V0Ki8KKy0gIDAsIC8qdHBfaXRlciovCistICAwLCAvKnRwX2l0ZXJuZXh0Ki8KKy0gIF9fcHl4 X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMsIC8qdHBfbWV0aG9k cyovCistICAwLCAvKnRwX21lbWJlcnMqLworLSAgMCwgLyp0cF9nZXRzZXQqLworLSAgMCwgLyp0 cF9iYXNlKi8KKy0gIDAsIC8qdHBfZGljdCovCistICAwLCAvKnRwX2Rlc2NyX2dldCovCistICAw LCAvKnRwX2Rlc2NyX3NldCovCistICAwLCAvKnRwX2RpY3RvZmZzZXQqLworLSAgX19weXhfcHdf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc18xX19pbml0X18sIC8qdHBfaW5p dCovCistICAwLCAvKnRwX2FsbG9jKi8KKy0gIF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJz XzNtcHZfX1JlbmRlclBhcmFtcywgLyp0cF9uZXcqLworLSAgMCwgLyp0cF9mcmVlKi8KKy0gIDAs IC8qdHBfaXNfZ2MqLworLSAgMCwgLyp0cF9iYXNlcyovCistICAwLCAvKnRwX21ybyovCistICAw LCAvKnRwX2NhY2hlKi8KKy0gIDAsIC8qdHBfc3ViY2xhc3NlcyovCistICAwLCAvKnRwX3dlYWts aXN0Ki8KKy0gIDAsIC8qdHBfZGVsKi8KKy0gIDAsIC8qdHBfdmVyc2lvbl90YWcqLworLSAgI2lm IFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEKKy0gIDAsIC8qdHBfZmluYWxpemUqLworLSAg I2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMQorLSAgMCwgLyp0cF92 ZWN0b3JjYWxsKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAw YjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCistICAwLCAvKnRwX3ByaW50Ki8KKy0g ICNlbmRpZgorLX07Cistc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9SZW5kZXJGcmFtZUluZm87CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyhQeVR5cGVPYmplY3QgKnQsIENZ VEhPTl9VTlVTRUQgUHlPYmplY3QgKmEsIENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmspIHsKKy0g IHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAq cDsKKy0gIFB5T2JqZWN0ICpvOworLSAgaWYgKGxpa2VseSgodC0+dHBfZmxhZ3MgJiBQeV9UUEZM QUdTX0lTX0FCU1RSQUNUKSA9PSAwKSkgeworLSAgICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7 CistICB9IGVsc2UgeworLSAgICBvID0gKFB5T2JqZWN0ICopIFB5QmFzZU9iamVjdF9UeXBlLnRw X25ldyh0LCBfX3B5eF9lbXB0eV90dXBsZSwgMCk7CistICB9CistICBpZiAodW5saWtlbHkoIW8p KSByZXR1cm4gMDsKKy0gIHAgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckZyYW1lSW5mbyAqKW8pOworLSAgcC0+X19weXhfdnRhYiA9IF9fcHl4X3Z0YWJw dHJfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbzsKKy0gIHJldHVybiBvOwor LX0KKy0KKy1zdGF0aWMgdm9pZCBfX3B5eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJGcmFtZUluZm8oUHlPYmplY3QgKm8pIHsKKy0gICNpZiBDWVRIT05fVVNFX1RQX0ZJ TkFMSVpFCistICBpZiAodW5saWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlfVFlQRShvKSwgUHlf VFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJiBQeV9UWVBFKG8pLT50cF9maW5hbGl6ZSkgJiYgKCFQ eVR5cGVfSVNfR0MoUHlfVFlQRShvKSkgfHwgIV9QeUdDX0ZJTkFMSVpFRChvKSkpIHsKKy0gICAg aWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhvKSkgcmV0dXJuOworLSAgfQor LSAgI2VuZGlmCistICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOworLX0KKy0KKy1zdGF0aWMg UHlNZXRob2REZWYgX19weXhfbWV0aG9kc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJh bWVJbmZvW10gPSB7CistICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNVJlbmRlckZyYW1lSW5mb18xX19yZWR1Y2VfY3l0 aG9uX18sIE1FVEhfTk9BUkdTLCAwfSwKKy0gIHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQeUNG dW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9f M19fc2V0c3RhdGVfY3l0aG9uX18sIE1FVEhfTywgMH0sCistICB7MCwgMCwgMCwgMH0KKy19Owor LQorLXN0YXRpYyBQeVR5cGVPYmplY3QgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyRnJhbWVJbmZvID0geworLSAgUHlWYXJPYmplY3RfSEVBRF9JTklUKDAsIDApCistICAi dmlkY3V0dGVyLmxpYnMubXB2LlJlbmRlckZyYW1lSW5mbyIsIC8qdHBfbmFtZSovCistICBzaXpl b2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZv KSwgLyp0cF9iYXNpY3NpemUqLworLSAgMCwgLyp0cF9pdGVtc2l6ZSovCistICBfX3B5eF90cF9k ZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8sIC8qdHBfZGVhbGxv YyovCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMGI0CistICAwLCAvKnRwX3ByaW50 Ki8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQKKy0gIDAs IC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLworLSAgI2VuZGlmCistICAwLCAvKnRwX2dldGF0dHIq LworLSAgMCwgLyp0cF9zZXRhdHRyKi8KKy0gICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLSAg MCwgLyp0cF9jb21wYXJlKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0g MworLSAgMCwgLyp0cF9hc19hc3luYyovCistICAjZW5kaWYKKy0gIDAsIC8qdHBfcmVwciovCist ICAwLCAvKnRwX2FzX251bWJlciovCistICAwLCAvKnRwX2FzX3NlcXVlbmNlKi8KKy0gIDAsIC8q dHBfYXNfbWFwcGluZyovCistICAwLCAvKnRwX2hhc2gqLworLSAgMCwgLyp0cF9jYWxsKi8KKy0g IDAsIC8qdHBfc3RyKi8KKy0gIDAsIC8qdHBfZ2V0YXR0cm8qLworLSAgMCwgLyp0cF9zZXRhdHRy byovCistICAwLCAvKnRwX2FzX2J1ZmZlciovCistICBQeV9UUEZMQUdTX0RFRkFVTFR8UHlfVFBG TEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQRkxBR1NfQ0hFQ0tUWVBFU3xQeV9UUEZMQUdTX0hB VkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qdHBfZmxhZ3MqLworLSAgMCwgLyp0 cF9kb2MqLworLSAgMCwgLyp0cF90cmF2ZXJzZSovCistICAwLCAvKnRwX2NsZWFyKi8KKy0gIDAs IC8qdHBfcmljaGNvbXBhcmUqLworLSAgMCwgLyp0cF93ZWFrbGlzdG9mZnNldCovCistICAwLCAv KnRwX2l0ZXIqLworLSAgMCwgLyp0cF9pdGVybmV4dCovCistICBfX3B5eF9tZXRob2RzXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8sIC8qdHBfbWV0aG9kcyovCistICAwLCAv KnRwX21lbWJlcnMqLworLSAgMCwgLyp0cF9nZXRzZXQqLworLSAgMCwgLyp0cF9iYXNlKi8KKy0g IDAsIC8qdHBfZGljdCovCistICAwLCAvKnRwX2Rlc2NyX2dldCovCistICAwLCAvKnRwX2Rlc2Ny X3NldCovCistICAwLCAvKnRwX2RpY3RvZmZzZXQqLworLSAgMCwgLyp0cF9pbml0Ki8KKy0gIDAs IC8qdHBfYWxsb2MqLworLSAgX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJGcmFtZUluZm8sIC8qdHBfbmV3Ki8KKy0gIDAsIC8qdHBfZnJlZSovCistICAwLCAvKnRwX2lz X2djKi8KKy0gIDAsIC8qdHBfYmFzZXMqLworLSAgMCwgLyp0cF9tcm8qLworLSAgMCwgLyp0cF9j YWNoZSovCistICAwLCAvKnRwX3N1YmNsYXNzZXMqLworLSAgMCwgLyp0cF93ZWFrbGlzdCovCist ICAwLCAvKnRwX2RlbCovCistICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KKy0gICNpZiBQWV9WRVJT SU9OX0hFWCA+PSAweDAzMDQwMGExCistICAwLCAvKnRwX2ZpbmFsaXplKi8KKy0gICNlbmRpZgor LSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEKKy0gIDAsIC8qdHBfdmVjdG9yY2Fs bCovCistICAjZW5kaWYKKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZ X1ZFUlNJT05fSEVYIDwgMHgwMzA5MDAwMAorLSAgMCwgLyp0cF9wcmludCovCistICAjZW5kaWYK Ky19OworLQorLXN0YXRpYyBQeU9iamVjdCAqX19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9SZW5kZXJDb250ZXh0KFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVj dCAqYSwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqaykgeworLSAgc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqcDsKKy0gIFB5T2JqZWN0ICpvOwor LSAgaWYgKGxpa2VseSgodC0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUKSA9PSAw KSkgeworLSAgICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7CistICB9IGVsc2UgeworLSAgICBv ID0gKFB5T2JqZWN0ICopIFB5QmFzZU9iamVjdF9UeXBlLnRwX25ldyh0LCBfX3B5eF9lbXB0eV90 dXBsZSwgMCk7CistICB9CistICBpZiAodW5saWtlbHkoIW8pKSByZXR1cm4gMDsKKy0gIHAgPSAo KHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgKilv KTsKKy0gIHAtPl9tcHYgPSAoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKilQeV9Ob25lKTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgcC0+dXBkYXRlX2Ni ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgcC0+X3gxMV9kaXNwbGF5ID0gUHlf Tm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgcC0+X3dsX2Rpc3BsYXkgPSBQeV9Ob25lOyBQ eV9JTkNSRUYoUHlfTm9uZSk7CistICBwLT5fZ2V0X3Byb2NfYWRkcmVzcyA9IFB5X05vbmU7IFB5 X0lOQ1JFRihQeV9Ob25lKTsKKy0gIHJldHVybiBvOworLX0KKy0KKy1zdGF0aWMgdm9pZCBfX3B5 eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KFB5T2JqZWN0 ICpvKSB7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJD b250ZXh0ICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckNvbnRleHQgKilvOworLSAgI2lmIENZVEhPTl9VU0VfVFBfRklOQUxJWkUKKy0gIGlmICh1bmxp a2VseShQeVR5cGVfSGFzRmVhdHVyZShQeV9UWVBFKG8pLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJ WkUpICYmIFB5X1RZUEUobyktPnRwX2ZpbmFsaXplKSAmJiAhX1B5R0NfRklOQUxJWkVEKG8pKSB7 CistICAgIGlmIChQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2MobykpIHJldHVybjsK Ky0gIH0KKy0gICNlbmRpZgorLSAgUHlPYmplY3RfR0NfVW5UcmFjayhvKTsKKy0gIHsKKy0gICAg UHlPYmplY3QgKmV0eXBlLCAqZXZhbCwgKmV0YjsKKy0gICAgUHlFcnJfRmV0Y2goJmV0eXBlLCAm ZXZhbCwgJmV0Yik7CistICAgIF9fUHl4X1NFVF9SRUZDTlQobywgUHlfUkVGQ05UKG8pICsgMSk7 CistICAgIF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjFf X2RlYWxsb2NfXyhvKTsKKy0gICAgX19QeXhfU0VUX1JFRkNOVChvLCBQeV9SRUZDTlQobykgLSAx KTsKKy0gICAgUHlFcnJfUmVzdG9yZShldHlwZSwgZXZhbCwgZXRiKTsKKy0gIH0KKy0gIFB5X0NM RUFSKHAtPl9tcHYpOworLSAgUHlfQ0xFQVIocC0+dXBkYXRlX2NiKTsKKy0gIFB5X0NMRUFSKHAt Pl94MTFfZGlzcGxheSk7CistICBQeV9DTEVBUihwLT5fd2xfZGlzcGxheSk7CistICBQeV9DTEVB UihwLT5fZ2V0X3Byb2NfYWRkcmVzcyk7CistICAoKlB5X1RZUEUobyktPnRwX2ZyZWUpKG8pOwor LX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3RwX3RyYXZlcnNlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJDb250ZXh0KFB5T2JqZWN0ICpvLCB2aXNpdHByb2Mgdiwgdm9pZCAqYSkgeworLSAg aW50IGU7CistICBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJD b250ZXh0ICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckNvbnRleHQgKilvOworLSAgaWYgKHAtPl9tcHYpIHsKKy0gICAgZSA9ICgqdikoKChQeU9iamVj dCAqKXAtPl9tcHYpLCBhKTsgaWYgKGUpIHJldHVybiBlOworLSAgfQorLSAgaWYgKHAtPnVwZGF0 ZV9jYikgeworLSAgICBlID0gKCp2KShwLT51cGRhdGVfY2IsIGEpOyBpZiAoZSkgcmV0dXJuIGU7 CistICB9CistICBpZiAocC0+X3gxMV9kaXNwbGF5KSB7CistICAgIGUgPSAoKnYpKHAtPl94MTFf ZGlzcGxheSwgYSk7IGlmIChlKSByZXR1cm4gZTsKKy0gIH0KKy0gIGlmIChwLT5fd2xfZGlzcGxh eSkgeworLSAgICBlID0gKCp2KShwLT5fd2xfZGlzcGxheSwgYSk7IGlmIChlKSByZXR1cm4gZTsK Ky0gIH0KKy0gIGlmIChwLT5fZ2V0X3Byb2NfYWRkcmVzcykgeworLSAgICBlID0gKCp2KShwLT5f Z2V0X3Byb2NfYWRkcmVzcywgYSk7IGlmIChlKSByZXR1cm4gZTsKKy0gIH0KKy0gIHJldHVybiAw OworLX0KKy0KKy1zdGF0aWMgaW50IF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9SZW5kZXJDb250ZXh0KFB5T2JqZWN0ICpvKSB7CistICBQeU9iamVjdCogdG1wOworLSAgc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCAqcCA9IChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopbzsK Ky0gIHRtcCA9ICgoUHlPYmplY3QqKXAtPl9tcHYpOworLSAgcC0+X21wdiA9ICgoc3RydWN0IF9f cHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKVB5X05vbmUpOyBQeV9JTkNS RUYoUHlfTm9uZSk7CistICBQeV9YREVDUkVGKHRtcCk7CistICB0bXAgPSAoKFB5T2JqZWN0Kilw LT51cGRhdGVfY2IpOworLSAgcC0+dXBkYXRlX2NiID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05v bmUpOworLSAgUHlfWERFQ1JFRih0bXApOworLSAgdG1wID0gKChQeU9iamVjdCopcC0+X3gxMV9k aXNwbGF5KTsKKy0gIHAtPl94MTFfZGlzcGxheSA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25l KTsKKy0gIFB5X1hERUNSRUYodG1wKTsKKy0gIHRtcCA9ICgoUHlPYmplY3QqKXAtPl93bF9kaXNw bGF5KTsKKy0gIHAtPl93bF9kaXNwbGF5ID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOwor LSAgUHlfWERFQ1JFRih0bXApOworLSAgdG1wID0gKChQeU9iamVjdCopcC0+X2dldF9wcm9jX2Fk ZHJlc3MpOworLSAgcC0+X2dldF9wcm9jX2FkZHJlc3MgPSBQeV9Ob25lOyBQeV9JTkNSRUYoUHlf Tm9uZSk7CistICBQeV9YREVDUkVGKHRtcCk7CistICByZXR1cm4gMDsKKy19CistCistc3RhdGlj IFB5TWV0aG9kRGVmIF9fcHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHRbXSA9IHsKKy0gIHsic2V0X2ljY19wcm9maWxlIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfM3NldF9pY2NfcHJvZmlsZSwg TUVUSF9PLCAwfSwKKy0gIHsic2V0X2FtYmllbnRfbGlnaHQiLCAoUHlDRnVuY3Rpb24pX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF81c2V0X2FtYmllbnRfbGln aHQsIE1FVEhfTywgMH0sCistICB7ImdldF9uZXh0X2ZyYW1lX2luZm8iLCAoUHlDRnVuY3Rpb24p X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF83Z2V0X25leHRf ZnJhbWVfaW5mbywgTUVUSF9OT0FSR1MsIDB9LAorLSAgeyJzZXRfdXBkYXRlX2NhbGxiYWNrIiwg KFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfOXNldF91cGRhdGVfY2FsbGJhY2ssIE1FVEhfTywgMH0sCistICB7InVwZGF0ZSIsIChQeUNG dW5jdGlvbilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEx dXBkYXRlLCBNRVRIX05PQVJHUywgMH0sCistICB7InJlbmRlciIsIChQeUNGdW5jdGlvbikodm9p ZCopKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCAw fSwKKy0gIHsicmVwb3J0X3N3YXAiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNXJlcG9ydF9zd2FwLCBNRVRIX05PQVJHUywgMH0s CistICB7ImZyZWUiLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF8xN2ZyZWUsIE1FVEhfTk9BUkdTLCAwfSwKKy0gIHsiY2xvc2UiLCAo UHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF8xOWNsb3NlLCBNRVRIX05PQVJHUywgMH0sCistICB7Il9fcmVkdWNlX2N5dGhvbl9fIiwgKFB5 Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRf MjNfX3JlZHVjZV9jeXRob25fXywgTUVUSF9OT0FSR1MsIDB9LAorLSAgeyJfX3NldHN0YXRlX2N5 dGhvbl9fIiwgKFB5Q0Z1bmN0aW9uKV9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1Jl bmRlckNvbnRleHRfMjVfX3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAorLSAgezAsIDAs IDAsIDB9CistfTsKKy0KKy1zdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckNvbnRleHQgPSB7CistICBQeVZhck9iamVjdF9IRUFEX0lOSVQo MCwgMCkKKy0gICJ2aWRjdXR0ZXIubGlicy5tcHYuUmVuZGVyQ29udGV4dCIsIC8qdHBfbmFtZSov CistICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dCksIC8qdHBfYmFzaWNzaXplKi8KKy0gIDAsIC8qdHBfaXRlbXNpemUqLworLSAgX19w eXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgLyp0cF9k ZWFsbG9jKi8KKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKy0gIDAsIC8qdHBf cHJpbnQqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiNAor LSAgMCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCistICAjZW5kaWYKKy0gIDAsIC8qdHBfZ2V0 YXR0ciovCistICAwLCAvKnRwX3NldGF0dHIqLworLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAz CistICAwLCAvKnRwX2NvbXBhcmUqLworLSAgI2VuZGlmCistICAjaWYgUFlfTUFKT1JfVkVSU0lP TiA+PSAzCistICAwLCAvKnRwX2FzX2FzeW5jKi8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9yZXBy Ki8KKy0gIDAsIC8qdHBfYXNfbnVtYmVyKi8KKy0gIDAsIC8qdHBfYXNfc2VxdWVuY2UqLworLSAg MCwgLyp0cF9hc19tYXBwaW5nKi8KKy0gIDAsIC8qdHBfaGFzaCovCistICAwLCAvKnRwX2NhbGwq LworLSAgMCwgLyp0cF9zdHIqLworLSAgMCwgLyp0cF9nZXRhdHRybyovCistICAwLCAvKnRwX3Nl dGF0dHJvKi8KKy0gIDAsIC8qdHBfYXNfYnVmZmVyKi8KKy0gIFB5X1RQRkxBR1NfREVGQVVMVHxQ eV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQRkxB R1NfSEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVfR0Ms IC8qdHBfZmxhZ3MqLworLSAgMCwgLyp0cF9kb2MqLworLSAgX19weXhfdHBfdHJhdmVyc2VfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBfdHJhdmVyc2UqLworLSAgX19w eXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBfY2xl YXIqLworLSAgMCwgLyp0cF9yaWNoY29tcGFyZSovCistICAwLCAvKnRwX3dlYWtsaXN0b2Zmc2V0 Ki8KKy0gIDAsIC8qdHBfaXRlciovCistICAwLCAvKnRwX2l0ZXJuZXh0Ki8KKy0gIF9fcHl4X21l dGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBfbWV0aG9kcyov CistICAwLCAvKnRwX21lbWJlcnMqLworLSAgMCwgLyp0cF9nZXRzZXQqLworLSAgMCwgLyp0cF9i YXNlKi8KKy0gIDAsIC8qdHBfZGljdCovCistICAwLCAvKnRwX2Rlc2NyX2dldCovCistICAwLCAv KnRwX2Rlc2NyX3NldCovCistICAwLCAvKnRwX2RpY3RvZmZzZXQqLworLSAgX19weXhfcHdfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0X18sIC8qdHBfaW5pdCov CistICAwLCAvKnRwX2FsbG9jKi8KKy0gIF9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyQ29udGV4dCwgLyp0cF9uZXcqLworLSAgMCwgLyp0cF9mcmVlKi8KKy0gIDAsIC8q dHBfaXNfZ2MqLworLSAgMCwgLyp0cF9iYXNlcyovCistICAwLCAvKnRwX21ybyovCistICAwLCAv KnRwX2NhY2hlKi8KKy0gIDAsIC8qdHBfc3ViY2xhc3NlcyovCistICAwLCAvKnRwX3dlYWtsaXN0 Ki8KKy0gIDAsIC8qdHBfZGVsKi8KKy0gIDAsIC8qdHBfdmVyc2lvbl90YWcqLworLSAgI2lmIFBZ X1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEKKy0gIDAsIC8qdHBfZmluYWxpemUqLworLSAgI2Vu ZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMQorLSAgMCwgLyp0cF92ZWN0 b3JjYWxsKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQg JiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCistICAwLCAvKnRwX3ByaW50Ki8KKy0gICNl bmRpZgorLX07CistCistc3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80 bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQoUHlUeXBlT2JqZWN0ICp0LCBQeU9iamVjdCAq YSwgUHlPYmplY3QgKmspIHsKKy0gIFB5T2JqZWN0ICpvID0gX19weXhfdHBfbmV3Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KHQsIGEsIGspOworLSAgaWYgKHVubGlrZWx5KCFv KSkgcmV0dXJuIDA7CistICByZXR1cm4gbzsKKy19CistCistc3RhdGljIFB5TWV0aG9kRGVmIF9f cHl4X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHRbXSA9 IHsKKy0gIHsiX19yZWR1Y2VfY3l0aG9uX18iLCAoUHlDRnVuY3Rpb24pX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF8zX19yZWR1Y2VfY3l0aG9uX18s IE1FVEhfTk9BUkdTLCAwfSwKKy0gIHsiX19zZXRzdGF0ZV9jeXRob25fXyIsIChQeUNGdW5jdGlv bilfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0XzVf X3NldHN0YXRlX2N5dGhvbl9fLCBNRVRIX08sIDB9LAorLSAgezAsIDAsIDAsIDB9CistfTsKKy0K Ky1zdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09w ZW5HTFJlbmRlckNvbnRleHQgPSB7CistICBQeVZhck9iamVjdF9IRUFEX0lOSVQoMCwgMCkKKy0g ICJ2aWRjdXR0ZXIubGlicy5tcHYuT3BlbkdMUmVuZGVyQ29udGV4dCIsIC8qdHBfbmFtZSovCist ICBzaXplb2Yoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVu ZGVyQ29udGV4dCksIC8qdHBfYmFzaWNzaXplKi8KKy0gIDAsIC8qdHBfaXRlbXNpemUqLworLSAg X19weXhfdHBfZGVhbGxvY185dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgLyp0 cF9kZWFsbG9jKi8KKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwYjQKKy0gIDAsIC8q dHBfcHJpbnQqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBi NAorLSAgMCwgLyp0cF92ZWN0b3JjYWxsX29mZnNldCovCistICAjZW5kaWYKKy0gIDAsIC8qdHBf Z2V0YXR0ciovCistICAwLCAvKnRwX3NldGF0dHIqLworLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04g PCAzCistICAwLCAvKnRwX2NvbXBhcmUqLworLSAgI2VuZGlmCistICAjaWYgUFlfTUFKT1JfVkVS U0lPTiA+PSAzCistICAwLCAvKnRwX2FzX2FzeW5jKi8KKy0gICNlbmRpZgorLSAgMCwgLyp0cF9y ZXByKi8KKy0gIDAsIC8qdHBfYXNfbnVtYmVyKi8KKy0gIDAsIC8qdHBfYXNfc2VxdWVuY2UqLwor LSAgMCwgLyp0cF9hc19tYXBwaW5nKi8KKy0gIDAsIC8qdHBfaGFzaCovCistICAwLCAvKnRwX2Nh bGwqLworLSAgMCwgLyp0cF9zdHIqLworLSAgMCwgLyp0cF9nZXRhdHRybyovCistICAwLCAvKnRw X3NldGF0dHJvKi8KKy0gIDAsIC8qdHBfYXNfYnVmZmVyKi8KKy0gIFB5X1RQRkxBR1NfREVGQVVM VHxQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUd8UHlfVFBGTEFHU19DSEVDS1RZUEVTfFB5X1RQ RkxBR1NfSEFWRV9ORVdCVUZGRVJ8UHlfVFBGTEFHU19CQVNFVFlQRXxQeV9UUEZMQUdTX0hBVkVf R0MsIC8qdHBfZmxhZ3MqLworLSAgMCwgLyp0cF9kb2MqLworLSAgX19weXhfdHBfdHJhdmVyc2Vf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBfdHJhdmVyc2UqLworLSAg X19weXhfdHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQsIC8qdHBf Y2xlYXIqLworLSAgMCwgLyp0cF9yaWNoY29tcGFyZSovCistICAwLCAvKnRwX3dlYWtsaXN0b2Zm c2V0Ki8KKy0gIDAsIC8qdHBfaXRlciovCistICAwLCAvKnRwX2l0ZXJuZXh0Ki8KKy0gIF9fcHl4 X21ldGhvZHNfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQsIC8qdHBf bWV0aG9kcyovCistICAwLCAvKnRwX21lbWJlcnMqLworLSAgMCwgLyp0cF9nZXRzZXQqLworLSAg MCwgLyp0cF9iYXNlKi8KKy0gIDAsIC8qdHBfZGljdCovCistICAwLCAvKnRwX2Rlc2NyX2dldCov CistICAwLCAvKnRwX2Rlc2NyX3NldCovCistICAwLCAvKnRwX2RpY3RvZmZzZXQqLworLSAgX19w eXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF8xX19pbml0 X18sIC8qdHBfaW5pdCovCistICAwLCAvKnRwX2FsbG9jKi8KKy0gIF9fcHl4X3RwX25ld185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCwgLyp0cF9uZXcqLworLSAgMCwg Lyp0cF9mcmVlKi8KKy0gIDAsIC8qdHBfaXNfZ2MqLworLSAgMCwgLyp0cF9iYXNlcyovCistICAw LCAvKnRwX21ybyovCistICAwLCAvKnRwX2NhY2hlKi8KKy0gIDAsIC8qdHBfc3ViY2xhc3Nlcyov CistICAwLCAvKnRwX3dlYWtsaXN0Ki8KKy0gIDAsIC8qdHBfZGVsKi8KKy0gIDAsIC8qdHBfdmVy c2lvbl90YWcqLworLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEKKy0gIDAsIC8q dHBfZmluYWxpemUqLworLSAgI2VuZGlmCistICAjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4 MDBiMQorLSAgMCwgLyp0cF92ZWN0b3JjYWxsKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJ T05fSEVYID49IDB4MDMwODAwYjQgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDkwMDAwCistICAw LCAvKnRwX3ByaW50Ki8KKy0gICNlbmRpZgorLX07CistCistc3RhdGljIHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqX19w eXhfZnJlZWxpc3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vy cm9yc1s4XTsKKy1zdGF0aWMgaW50IF9fcHl4X2ZyZWVjb3VudF85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzID0gMDsKKy0KKy1zdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3RwX25ld185dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19f ZXJyb3JzKFB5VHlwZU9iamVjdCAqdCwgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYSwgQ1lUSE9O X1VOVVNFRCBQeU9iamVjdCAqaykgeworLSAgUHlPYmplY3QgKm87CistICBpZiAoQ1lUSE9OX0NP TVBJTElOR19JTl9DUFlUSE9OICYmIGxpa2VseSgoX19weXhfZnJlZWNvdW50Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgPiAwKSAmICh0LT50cF9iYXNp Y3NpemUgPT0gc2l6ZW9mKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19f cHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycykpKSkgeworLSAgICBvID0gKFB5T2JqZWN0KilfX3B5 eF9mcmVlbGlzdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJy b3JzWy0tX19weXhfZnJlZWNvdW50Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9z dHJ1Y3RfX19lcnJvcnNdOworLSAgICBtZW1zZXQobywgMCwgc2l6ZW9mKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycykpOwor LSAgICAodm9pZCkgUHlPYmplY3RfSU5JVChvLCB0KTsKKy0gICAgUHlPYmplY3RfR0NfVHJhY2so byk7CistICB9IGVsc2UgeworLSAgICBvID0gKCp0LT50cF9hbGxvYykodCwgMCk7CistICAgIGlm ICh1bmxpa2VseSghbykpIHJldHVybiAwOworLSAgfQorLSAgcmV0dXJuIG87CistfQorLQorLXN0 YXRpYyB2b2lkIF9fcHl4X3RwX2RlYWxsb2NfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Nj b3BlX3N0cnVjdF9fX2Vycm9ycyhQeU9iamVjdCAqbykgeworLSAgc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICpwID0gKHN0 cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9f X2Vycm9ycyAqKW87CistICBQeU9iamVjdF9HQ19VblRyYWNrKG8pOworLSAgUHlfQ0xFQVIocC0+ X19weXhfdl9mbik7CistICBpZiAoQ1lUSE9OX0NPTVBJTElOR19JTl9DUFlUSE9OICYmICgoX19w eXhfZnJlZWNvdW50Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19l cnJvcnMgPCA4KSAmIChQeV9UWVBFKG8pLT50cF9iYXNpY3NpemUgPT0gc2l6ZW9mKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9y cykpKSkgeworLSAgICBfX3B5eF9mcmVlbGlzdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhf c2NvcGVfc3RydWN0X19fZXJyb3JzW19fcHl4X2ZyZWVjb3VudF85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzKytdID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgKilvKTsKKy0g IH0gZWxzZSB7CistICAgICgqUHlfVFlQRShvKS0+dHBfZnJlZSkobyk7CistICB9CistfQorLQor LXN0YXRpYyBpbnQgX19weXhfdHBfdHJhdmVyc2VfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4 X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyhQeU9iamVjdCAqbywgdmlzaXRwcm9jIHYsIHZvaWQgKmEp IHsKKy0gIGludCBlOworLSAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICpwID0gKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqKW87CistICBpZiAo cC0+X19weXhfdl9mbikgeworLSAgICBlID0gKCp2KShwLT5fX3B5eF92X2ZuLCBhKTsgaWYgKGUp IHJldHVybiBlOworLSAgfQorLSAgcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBpbnQgX19weXhf dHBfY2xlYXJfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9y cyhQeU9iamVjdCAqbykgeworLSAgUHlPYmplY3QqIHRtcDsKKy0gIHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyAqcCA9IChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3Rf X19lcnJvcnMgKilvOworLSAgdG1wID0gKChQeU9iamVjdCopcC0+X19weXhfdl9mbik7CistICBw LT5fX3B5eF92X2ZuID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgUHlfWERFQ1JF Rih0bXApOworLSAgcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBQeVR5cGVPYmplY3QgX19weXhf dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzID0g eworLSAgUHlWYXJPYmplY3RfSEVBRF9JTklUKDAsIDApCistICAidmlkY3V0dGVyLmxpYnMubXB2 Ll9fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycyIsIC8qdHBfbmFtZSovCistICBzaXplb2Yoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19f ZXJyb3JzKSwgLyp0cF9iYXNpY3NpemUqLworLSAgMCwgLyp0cF9pdGVtc2l6ZSovCistICBfX3B5 eF90cF9kZWFsbG9jXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19l cnJvcnMsIC8qdHBfZGVhbGxvYyovCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMGI0 CistICAwLCAvKnRwX3ByaW50Ki8KKy0gICNlbmRpZgorLSAgI2lmIFBZX1ZFUlNJT05fSEVYID49 IDB4MDMwODAwYjQKKy0gIDAsIC8qdHBfdmVjdG9yY2FsbF9vZmZzZXQqLworLSAgI2VuZGlmCist ICAwLCAvKnRwX2dldGF0dHIqLworLSAgMCwgLyp0cF9zZXRhdHRyKi8KKy0gICNpZiBQWV9NQUpP Ul9WRVJTSU9OIDwgMworLSAgMCwgLyp0cF9jb21wYXJlKi8KKy0gICNlbmRpZgorLSAgI2lmIFBZ X01BSk9SX1ZFUlNJT04gPj0gMworLSAgMCwgLyp0cF9hc19hc3luYyovCistICAjZW5kaWYKKy0g IDAsIC8qdHBfcmVwciovCistICAwLCAvKnRwX2FzX251bWJlciovCistICAwLCAvKnRwX2FzX3Nl cXVlbmNlKi8KKy0gIDAsIC8qdHBfYXNfbWFwcGluZyovCistICAwLCAvKnRwX2hhc2gqLworLSAg MCwgLyp0cF9jYWxsKi8KKy0gIDAsIC8qdHBfc3RyKi8KKy0gIDAsIC8qdHBfZ2V0YXR0cm8qLwor LSAgMCwgLyp0cF9zZXRhdHRybyovCistICAwLCAvKnRwX2FzX2J1ZmZlciovCistICBQeV9UUEZM QUdTX0RFRkFVTFR8UHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHfFB5X1RQRkxBR1NfQ0hFQ0tU WVBFU3xQeV9UUEZMQUdTX0hBVkVfTkVXQlVGRkVSfFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9m bGFncyovCistICAwLCAvKnRwX2RvYyovCistICBfX3B5eF90cF90cmF2ZXJzZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzLCAvKnRwX3RyYXZlcnNlKi8K Ky0gIF9fcHl4X3RwX2NsZWFyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1 Y3RfX19lcnJvcnMsIC8qdHBfY2xlYXIqLworLSAgMCwgLyp0cF9yaWNoY29tcGFyZSovCistICAw LCAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKy0gIDAsIC8qdHBfaXRlciovCistICAwLCAvKnRwX2l0 ZXJuZXh0Ki8KKy0gIDAsIC8qdHBfbWV0aG9kcyovCistICAwLCAvKnRwX21lbWJlcnMqLworLSAg MCwgLyp0cF9nZXRzZXQqLworLSAgMCwgLyp0cF9iYXNlKi8KKy0gIDAsIC8qdHBfZGljdCovCist ICAwLCAvKnRwX2Rlc2NyX2dldCovCistICAwLCAvKnRwX2Rlc2NyX3NldCovCistICAwLCAvKnRw X2RpY3RvZmZzZXQqLworLSAgMCwgLyp0cF9pbml0Ki8KKy0gIDAsIC8qdHBfYWxsb2MqLworLSAg X19weXhfdHBfbmV3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19l cnJvcnMsIC8qdHBfbmV3Ki8KKy0gIDAsIC8qdHBfZnJlZSovCistICAwLCAvKnRwX2lzX2djKi8K Ky0gIDAsIC8qdHBfYmFzZXMqLworLSAgMCwgLyp0cF9tcm8qLworLSAgMCwgLyp0cF9jYWNoZSov CistICAwLCAvKnRwX3N1YmNsYXNzZXMqLworLSAgMCwgLyp0cF93ZWFrbGlzdCovCistICAwLCAv KnRwX2RlbCovCistICAwLCAvKnRwX3ZlcnNpb25fdGFnKi8KKy0gICNpZiBQWV9WRVJTSU9OX0hF WCA+PSAweDAzMDQwMGExCistICAwLCAvKnRwX2ZpbmFsaXplKi8KKy0gICNlbmRpZgorLSAgI2lm IFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjEKKy0gIDAsIC8qdHBfdmVjdG9yY2FsbCovCist ICAjZW5kaWYKKy0gICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJ T05fSEVYIDwgMHgwMzA5MDAwMAorLSAgMCwgLyp0cF9wcmludCovCistICAjZW5kaWYKKy19Owor LQorLXN0YXRpYyBQeU1ldGhvZERlZiBfX3B5eF9tZXRob2RzW10gPSB7CistICB7MCwgMCwgMCwg MH0KKy19OworLQorLSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0jaWYgQ1lUSE9OX1BFUDQ4 OV9NVUxUSV9QSEFTRV9JTklUCistc3RhdGljIFB5T2JqZWN0KiBfX3B5eF9weW1vZF9jcmVhdGUo UHlPYmplY3QgKnNwZWMsIFB5TW9kdWxlRGVmICpkZWYpOyAvKnByb3RvKi8KKy1zdGF0aWMgaW50 IF9fcHl4X3B5bW9kX2V4ZWNfbXB2KFB5T2JqZWN0KiBtb2R1bGUpOyAvKnByb3RvKi8KKy1zdGF0 aWMgUHlNb2R1bGVEZWZfU2xvdCBfX3B5eF9tb2R1bGVkZWZfc2xvdHNbXSA9IHsKKy0gIHtQeV9t b2RfY3JlYXRlLCAodm9pZCopX19weXhfcHltb2RfY3JlYXRlfSwKKy0gIHtQeV9tb2RfZXhlYywg KHZvaWQqKV9fcHl4X3B5bW9kX2V4ZWNfbXB2fSwKKy0gIHswLCBOVUxMfQorLX07CistI2VuZGlm CistCistc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfX3B5eF9tb2R1bGVkZWYgPSB7CistICAg IFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKy0gICAgIm1wdiIsCistICAgIF9fcHl4X2tfcHltcHZf UHl0aG9uX3dyYXBwZXJfZm9yX2xpYm1wdiwgLyogbV9kb2MgKi8KKy0gICNpZiBDWVRIT05fUEVQ NDg5X01VTFRJX1BIQVNFX0lOSVQKKy0gICAgMCwgLyogbV9zaXplICovCistICAjZWxzZQorLSAg ICAtMSwgLyogbV9zaXplICovCistICAjZW5kaWYKKy0gICAgX19weXhfbWV0aG9kcyAvKiBtX21l dGhvZHMgKi8sCistICAjaWYgQ1lUSE9OX1BFUDQ4OV9NVUxUSV9QSEFTRV9JTklUCistICAgIF9f cHl4X21vZHVsZWRlZl9zbG90cywgLyogbV9zbG90cyAqLworLSAgI2Vsc2UKKy0gICAgTlVMTCwg LyogbV9yZWxvYWQgKi8KKy0gICNlbmRpZgorLSAgICBOVUxMLCAvKiBtX3RyYXZlcnNlICovCist ICAgIE5VTEwsIC8qIG1fY2xlYXIgKi8KKy0gICAgTlVMTCAvKiBtX2ZyZWUgKi8KKy19OworLSNl bmRpZgorLSNpZm5kZWYgQ1lUSE9OX1NNQUxMX0NPREUKKy0jaWYgZGVmaW5lZChfX2NsYW5nX18p CistICAgICNkZWZpbmUgQ1lUSE9OX1NNQUxMX0NPREUKKy0jZWxpZiBkZWZpbmVkKF9fR05VQ19f KSAmJiAoX19HTlVDX18gPiA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID49 IDMpKQorLSAgICAjZGVmaW5lIENZVEhPTl9TTUFMTF9DT0RFIF9fYXR0cmlidXRlX18oKGNvbGQp KQorLSNlbHNlCistICAgICNkZWZpbmUgQ1lUSE9OX1NNQUxMX0NPREUKKy0jZW5kaWYKKy0jZW5k aWYKKy0KKy1zdGF0aWMgX19QeXhfU3RyaW5nVGFiRW50cnkgX19weXhfc3RyaW5nX3RhYltdID0g eworLSAgeyZfX3B5eF9rcF9zXzBfM18wLCBfX3B5eF9rXzBfM18wLCBzaXplb2YoX19weXhfa18w XzNfMCksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9uX3NfQVBJX09QRU5HTCwgX19weXhfa19B UElfT1BFTkdMLCBzaXplb2YoX19weXhfa19BUElfT1BFTkdMKSwgMCwgMCwgMSwgMX0sCistICB7 Jl9fcHl4X2twX3NfQW5kcmVfRCwgX19weXhfa19BbmRyZV9ELCBzaXplb2YoX19weXhfa19BbmRy ZV9EKSwgMCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X25fc19DQVBJX01BSk9SLCBfX3B5eF9rX0NB UElfTUFKT1IsIHNpemVvZihfX3B5eF9rX0NBUElfTUFKT1IpLCAwLCAwLCAxLCAxfSwKKy0gIHsm X19weXhfbl9zX0NBUElfTUlOT1IsIF9fcHl4X2tfQ0FQSV9NSU5PUiwgc2l6ZW9mKF9fcHl4X2tf Q0FQSV9NSU5PUiksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQs IF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWQsIHNpemVvZihfX3B5eF9rX0NhbGxiYWNrVGhyZWFkKSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19DYWxsYmFja1RocmVhZF9fX2luaXQsIF9fcHl4 X2tfQ2FsbGJhY2tUaHJlYWRfX19pbml0LCBzaXplb2YoX19weXhfa19DYWxsYmFja1RocmVhZF9f X2luaXQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX2NhbGws IF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfY2FsbCwgc2l6ZW9mKF9fcHl4X2tfQ2FsbGJhY2tUaHJl YWRfY2FsbCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWRfbXB2 X2NhbGxiYWNrLCBfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX21wdl9jYWxsYmFjaywgc2l6ZW9mKF9f cHl4X2tfQ2FsbGJhY2tUaHJlYWRfbXB2X2NhbGxiYWNrKSwgMCwgMCwgMSwgMX0sCistICB7Jl9f cHl4X25fc19DYWxsYmFja1RocmVhZF9ydW4sIF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfcnVuLCBz aXplb2YoX19weXhfa19DYWxsYmFja1RocmVhZF9ydW4pLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19w eXhfbl9zX0NhbGxiYWNrVGhyZWFkX3NldCwgX19weXhfa19DYWxsYmFja1RocmVhZF9zZXQsIHNp emVvZihfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX3NldCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5 eF9uX3NfQ2FsbGJhY2tUaHJlYWRfc2h1dGRvd24sIF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfc2h1 dGRvd24sIHNpemVvZihfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX3NodXRkb3duKSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X25fc19Db250ZXh0LCBfX3B5eF9rX0NvbnRleHQsIHNpemVvZihfX3B5 eF9rX0NvbnRleHQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfa3Bfc19Db250ZXh0X2NyZWF0 aW9uX2Vycm9yLCBfX3B5eF9rX0NvbnRleHRfY3JlYXRpb25fZXJyb3IsIHNpemVvZihfX3B5eF9r X0NvbnRleHRfY3JlYXRpb25fZXJyb3IpLCAwLCAwLCAxLCAwfSwKKy0gIHsmX19weXhfbl9zX0Rl cHJlY2F0aW9uV2FybmluZywgX19weXhfa19EZXByZWNhdGlvbldhcm5pbmcsIHNpemVvZihfX3B5 eF9rX0RlcHJlY2F0aW9uV2FybmluZyksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfRU9G UmVhc29ucywgX19weXhfa19FT0ZSZWFzb25zLCBzaXplb2YoX19weXhfa19FT0ZSZWFzb25zKSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19FbmRPZkZpbGVSZWFjaGVkLCBfX3B5eF9rX0Vu ZE9mRmlsZVJlYWNoZWQsIHNpemVvZihfX3B5eF9rX0VuZE9mRmlsZVJlYWNoZWQpLCAwLCAwLCAx LCAxfSwKKy0gIHsmX19weXhfbl9zX0Vycm9ycywgX19weXhfa19FcnJvcnMsIHNpemVvZihfX3B5 eF9rX0Vycm9ycyksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfRXZlbnQsIF9fcHl4X2tf RXZlbnQsIHNpemVvZihfX3B5eF9rX0V2ZW50KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25f c19FdmVudHMsIF9fcHl4X2tfRXZlbnRzLCBzaXplb2YoX19weXhfa19FdmVudHMpLCAwLCAwLCAx LCAxfSwKKy0gIHsmX19weXhfbl9zX0ltcG9ydEVycm9yLCBfX3B5eF9rX0ltcG9ydEVycm9yLCBz aXplb2YoX19weXhfa19JbXBvcnRFcnJvciksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9rcF9z X0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDA1LCBfX3B5eF9rX0luY29tcGF0aWJsZV9j aGVja3N1bXNfc192c18weDA1LCBzaXplb2YoX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1z X3NfdnNfMHgwNSksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9j aGVja3N1bXNfc192c18weDU2LCBfX3B5eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18w eDU2LCBzaXplb2YoX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg1NiksIDAs IDAsIDEsIDB9LAorLSAgeyZfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18w eDg3LCBfX3B5eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDg3LCBzaXplb2YoX19w eXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg4NyksIDAsIDAsIDEsIDB9LAorLSAg eyZfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGJmLCBfX3B5eF9rX0lu Y29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGJmLCBzaXplb2YoX19weXhfa19JbmNvbXBhdGli bGVfY2hlY2tzdW1zX3NfdnNfMHhiZiksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9rcF9zX0lu Y29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGQ0LCBfX3B5eF9rX0luY29tcGF0aWJsZV9jaGVj a3N1bXNfc192c18weGQ0LCBzaXplb2YoX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3Nf dnNfMHhkNCksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVj a3N1bXNfc192c18weGRhLCBfX3B5eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGRh LCBzaXplb2YoX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHhkYSksIDAsIDAs IDEsIDB9LAorLSAgeyZfX3B5eF9uX3NfSW5wdXREaXNwYXRjaCwgX19weXhfa19JbnB1dERpc3Bh dGNoLCBzaXplb2YoX19weXhfa19JbnB1dERpc3BhdGNoKSwgMCwgMCwgMSwgMX0sCistICB7Jl9f cHl4X2twX3NfS25vd25fcG9zc2libGVfdmFsdWVzX2Zvcl9FbmRPZkYsIF9fcHl4X2tfS25vd25f cG9zc2libGVfdmFsdWVzX2Zvcl9FbmRPZkYsIHNpemVvZihfX3B5eF9rX0tub3duX3Bvc3NpYmxl X3ZhbHVlc19mb3JfRW5kT2ZGKSwgMCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X25fc19Mb2dMZXZl bHMsIF9fcHl4X2tfTG9nTGV2ZWxzLCBzaXplb2YoX19weXhfa19Mb2dMZXZlbHMpLCAwLCAwLCAx LCAxfSwKKy0gIHsmX19weXhfbl9zX0xvZ01lc3NhZ2UsIF9fcHl4X2tfTG9nTWVzc2FnZSwgc2l6 ZW9mKF9fcHl4X2tfTG9nTWVzc2FnZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfTUlO X0NBUElfTUlOT1IsIF9fcHl4X2tfTUlOX0NBUElfTUlOT1IsIHNpemVvZihfX3B5eF9rX01JTl9D QVBJX01JTk9SKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19NUFZFcnJvciwgX19weXhf a19NUFZFcnJvciwgc2l6ZW9mKF9fcHl4X2tfTVBWRXJyb3IpLCAwLCAwLCAxLCAxfSwKKy0gIHsm X19weXhfbl9zX01QVkVycm9yX19faW5pdCwgX19weXhfa19NUFZFcnJvcl9fX2luaXQsIHNpemVv ZihfX3B5eF9rX01QVkVycm9yX19faW5pdCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nf T3BlbkdMQ29udGV4dCwgX19weXhfa19PcGVuR0xDb250ZXh0LCBzaXplb2YoX19weXhfa19PcGVu R0xDb250ZXh0KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X2twX3NfT3BlbkdMQ29udGV4dF9p c19kZXByZWNhdGVkX3BsZWEsIF9fcHl4X2tfT3BlbkdMQ29udGV4dF9pc19kZXByZWNhdGVkX3Bs ZWEsIHNpemVvZihfX3B5eF9rX09wZW5HTENvbnRleHRfaXNfZGVwcmVjYXRlZF9wbGVhKSwgMCwg MCwgMSwgMH0sCistICB7Jl9fcHl4X25fc19PcGVuR0xSZW5kZXJDb250ZXh0LCBfX3B5eF9rX09w ZW5HTFJlbmRlckNvbnRleHQsIHNpemVvZihfX3B5eF9rX09wZW5HTFJlbmRlckNvbnRleHQpLCAw LCAwLCAxLCAxfSwKKy0gIHsmX19weXhfa3Bfc19PcGVuR0xfQVBJX25vdF9hdmFpbGFibGUsIF9f cHl4X2tfT3BlbkdMX0FQSV9ub3RfYXZhaWxhYmxlLCBzaXplb2YoX19weXhfa19PcGVuR0xfQVBJ X25vdF9hdmFpbGFibGUpLCAwLCAwLCAxLCAwfSwKKy0gIHsmX19weXhfbl9zX1BpY2tsZUVycm9y LCBfX3B5eF9rX1BpY2tsZUVycm9yLCBzaXplb2YoX19weXhfa19QaWNrbGVFcnJvciksIDAsIDAs IDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfUHJvcGVydHksIF9fcHl4X2tfUHJvcGVydHksIHNpemVv ZihfX3B5eF9rX1Byb3BlcnR5KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19QeU1QVkVy cm9yLCBfX3B5eF9rX1B5TVBWRXJyb3IsIHNpemVvZihfX3B5eF9rX1B5TVBWRXJyb3IpLCAwLCAw LCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFKT1IsIF9fcHl4X2tfUkVR VUlSRURfQ0FQSV9NQUpPUiwgc2l6ZW9mKF9fcHl4X2tfUkVRVUlSRURfQ0FQSV9NQUpPUiksIDAs IDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfUmVuZGVyQ29udGV4dCwgX19weXhfa19SZW5kZXJD b250ZXh0LCBzaXplb2YoX19weXhfa19SZW5kZXJDb250ZXh0KSwgMCwgMCwgMSwgMX0sCistICB7 Jl9fcHl4X25fc19SZW5kZXJQYXJhbXMsIF9fcHl4X2tfUmVuZGVyUGFyYW1zLCBzaXplb2YoX19w eXhfa19SZW5kZXJQYXJhbXMpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfa3Bfc19SZW5kZXJQ YXJhbXNfb3ZlcmZsb3csIF9fcHl4X2tfUmVuZGVyUGFyYW1zX292ZXJmbG93LCBzaXplb2YoX19w eXhfa19SZW5kZXJQYXJhbXNfb3ZlcmZsb3cpLCAwLCAwLCAxLCAwfSwKKy0gIHsmX19weXhfbl9z X1JlcGx5VXNlckRhdGEsIF9fcHl4X2tfUmVwbHlVc2VyRGF0YSwgc2l6ZW9mKF9fcHl4X2tfUmVw bHlVc2VyRGF0YSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YV9f X2luaXQsIF9fcHl4X2tfUmVwbHlVc2VyRGF0YV9fX2luaXQsIHNpemVvZihfX3B5eF9rX1JlcGx5 VXNlckRhdGFfX19pbml0KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19SZXBseVVzZXJE YXRhX2FkZCwgX19weXhfa19SZXBseVVzZXJEYXRhX2FkZCwgc2l6ZW9mKF9fcHl4X2tfUmVwbHlV c2VyRGF0YV9hZGQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX1JlcGx5VXNlckRhdGFf cmVtb3ZlLCBfX3B5eF9rX1JlcGx5VXNlckRhdGFfcmVtb3ZlLCBzaXplb2YoX19weXhfa19SZXBs eVVzZXJEYXRhX3JlbW92ZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfU2VtYXBob3Jl LCBfX3B5eF9rX1NlbWFwaG9yZSwgc2l6ZW9mKF9fcHl4X2tfU2VtYXBob3JlKSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X2twX3NfU2V0X29mX2tub3duX2Vycm9yX2NvZGVzX2Zyb21fTXAsIF9f cHl4X2tfU2V0X29mX2tub3duX2Vycm9yX2NvZGVzX2Zyb21fTXAsIHNpemVvZihfX3B5eF9rX1Nl dF9vZl9rbm93bl9lcnJvcl9jb2Rlc19mcm9tX01wKSwgMCwgMCwgMSwgMH0sCistICB7Jl9fcHl4 X2twX3NfU2V0X29mX2tub3duX3ZhbHVlc19mb3JfRXZlbnRfaWQsIF9fcHl4X2tfU2V0X29mX2tu b3duX3ZhbHVlc19mb3JfRXZlbnRfaWQsIHNpemVvZihfX3B5eF9rX1NldF9vZl9rbm93bl92YWx1 ZXNfZm9yX0V2ZW50X2lkKSwgMCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X25fc19UaHJlYWQsIF9f cHl4X2tfVGhyZWFkLCBzaXplb2YoX19weXhfa19UaHJlYWQpLCAwLCAwLCAxLCAxfSwKKy0gIHsm X19weXhfbl9zX1R5cGVFcnJvciwgX19weXhfa19UeXBlRXJyb3IsIHNpemVvZihfX3B5eF9rX1R5 cGVFcnJvciksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfVVBEQVRFX0ZSQU1FLCBfX3B5 eF9rX1VQREFURV9GUkFNRSwgc2l6ZW9mKF9fcHl4X2tfVVBEQVRFX0ZSQU1FKSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X25fc19Vbmljb2RlRGVjb2RlRXJyb3IsIF9fcHl4X2tfVW5pY29kZURl Y29kZUVycm9yLCBzaXplb2YoX19weXhfa19Vbmljb2RlRGVjb2RlRXJyb3IpLCAwLCAwLCAxLCAx fSwKKy0gIHsmX19weXhfbl9zX1VuaWNvZGVFbmNvZGVFcnJvciwgX19weXhfa19Vbmljb2RlRW5j b2RlRXJyb3IsIHNpemVvZihfX3B5eF9rX1VuaWNvZGVFbmNvZGVFcnJvciksIDAsIDAsIDEsIDF9 LAorLSAgeyZfX3B5eF9rcF9zX1Vua25vd25fYXBpX3R5cGVfciwgX19weXhfa19Vbmtub3duX2Fw aV90eXBlX3IsIHNpemVvZihfX3B5eF9rX1Vua25vd25fYXBpX3R5cGVfciksIDAsIDAsIDEsIDB9 LAorLSAgeyZfX3B5eF9rcF9zX1Vua25vd25fb3JfaW52YWxpZF9wb2ludGVyX29iamVjLCBfX3B5 eF9rX1Vua25vd25fb3JfaW52YWxpZF9wb2ludGVyX29iamVjLCBzaXplb2YoX19weXhfa19Vbmtu b3duX29yX2ludmFsaWRfcG9pbnRlcl9vYmplYyksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9u X3NfYWJvcnRlZCwgX19weXhfa19hYm9ydGVkLCBzaXplb2YoX19weXhfa19hYm9ydGVkKSwgMCwg MCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19hY3F1aXJlLCBfX3B5eF9rX2FjcXVpcmUsIHNpemVv ZihfX3B5eF9rX2FjcXVpcmUpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2FkZCwgX19w eXhfa19hZGQsIHNpemVvZihfX3B5eF9rX2FkZCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9u X3NfYWR2YW5jZWRfY29udHJvbCwgX19weXhfa19hZHZhbmNlZF9jb250cm9sLCBzaXplb2YoX19w eXhfa19hZHZhbmNlZF9jb250cm9sKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19hb19p bml0X2ZhaWxlZCwgX19weXhfa19hb19pbml0X2ZhaWxlZCwgc2l6ZW9mKF9fcHl4X2tfYW9faW5p dF9mYWlsZWQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2FwaV90eXBlLCBfX3B5eF9r X2FwaV90eXBlLCBzaXplb2YoX19weXhfa19hcGlfdHlwZSksIDAsIDAsIDEsIDF9LAorLSAgeyZf X3B5eF9uX3NfYXBwZW5kLCBfX3B5eF9rX2FwcGVuZCwgc2l6ZW9mKF9fcHl4X2tfYXBwZW5kKSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19hc3luY2hyb25vdXMsIF9fcHl4X2tfYXN5bmNo cm9ub3VzLCBzaXplb2YoX19weXhfa19hc3luY2hyb25vdXMpLCAwLCAwLCAxLCAxfSwKKy0gIHsm X19weXhfbl9zX2F0b21pY19yZXF1ZXN0X3B0ciwgX19weXhfa19hdG9taWNfcmVxdWVzdF9wdHIs IHNpemVvZihfX3B5eF9rX2F0b21pY19yZXF1ZXN0X3B0ciksIDAsIDAsIDEsIDF9LAorLSAgeyZf X3B5eF9uX3NfYXVkaW9fcmVjb25maWcsIF9fcHl4X2tfYXVkaW9fcmVjb25maWcsIHNpemVvZihf X3B5eF9rX2F1ZGlvX3JlY29uZmlnKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19hdXRo b3IsIF9fcHl4X2tfYXV0aG9yLCBzaXplb2YoX19weXhfa19hdXRob3IpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX2Jsb2NrX2Zvcl90YXJnZXRfdGltZSwgX19weXhfa19ibG9ja19mb3Jf dGFyZ2V0X3RpbWUsIHNpemVvZihfX3B5eF9rX2Jsb2NrX2Zvcl90YXJnZXRfdGltZSksIDAsIDAs IDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfYmxvY2tfdnN5bmMsIF9fcHl4X2tfYmxvY2tfdnN5bmMs IHNpemVvZihfX3B5eF9rX2Jsb2NrX3ZzeW5jKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25f c19jYWxsLCBfX3B5eF9rX2NhbGwsIHNpemVvZihfX3B5eF9rX2NhbGwpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX2NhbGxiYWNrLCBfX3B5eF9rX2NhbGxiYWNrLCBzaXplb2YoX19weXhf a19jYWxsYmFjayksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfY2hhcHRlcl9jaGFuZ2Us IF9fcHl4X2tfY2hhcHRlcl9jaGFuZ2UsIHNpemVvZihfX3B5eF9rX2NoYXB0ZXJfY2hhbmdlKSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19jbGllbnRfbWVzc2FnZSwgX19weXhfa19jbGll bnRfbWVzc2FnZSwgc2l6ZW9mKF9fcHl4X2tfY2xpZW50X21lc3NhZ2UpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX2NsaW5lX2luX3RyYWNlYmFjaywgX19weXhfa19jbGluZV9pbl90cmFj ZWJhY2ssIHNpemVvZihfX3B5eF9rX2NsaW5lX2luX3RyYWNlYmFjayksIDAsIDAsIDEsIDF9LAor LSAgeyZfX3B5eF9uX3NfY2xvc2UsIF9fcHl4X2tfY2xvc2UsIHNpemVvZihfX3B5eF9rX2Nsb3Nl KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19jb2RlLCBfX3B5eF9rX2NvZGUsIHNpemVv ZihfX3B5eF9rX2NvZGUpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2NvbW1hbmRfZXJy b3IsIF9fcHl4X2tfY29tbWFuZF9lcnJvciwgc2l6ZW9mKF9fcHl4X2tfY29tbWFuZF9lcnJvciks IDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfY29tbWFuZF9yZXBseSwgX19weXhfa19jb21t YW5kX3JlcGx5LCBzaXplb2YoX19weXhfa19jb21tYW5kX3JlcGx5KSwgMCwgMCwgMSwgMX0sCist ICB7Jl9fcHl4X25fc19jb25uZWN0b3JfaWQsIF9fcHl4X2tfY29ubmVjdG9yX2lkLCBzaXplb2Yo X19weXhfa19jb25uZWN0b3JfaWQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2NvdW50 ZXIsIF9fcHl4X2tfY291bnRlciwgc2l6ZW9mKF9fcHl4X2tfY291bnRlciksIDAsIDAsIDEsIDF9 LAorLSAgeyZfX3B5eF9uX3NfY3J0Y19pZCwgX19weXhfa19jcnRjX2lkLCBzaXplb2YoX19weXhf a19jcnRjX2lkKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19kYWVtb24sIF9fcHl4X2tf ZGFlbW9uLCBzaXplb2YoX19weXhfa19kYWVtb24pLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhf bl9zX2RhdGEsIF9fcHl4X2tfZGF0YSwgc2l6ZW9mKF9fcHl4X2tfZGF0YSksIDAsIDAsIDEsIDF9 LAorLSAgeyZfX3B5eF9uX3NfZGVidWcsIF9fcHl4X2tfZGVidWcsIHNpemVvZihfX3B5eF9rX2Rl YnVnKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19kZWNvZGUsIF9fcHl4X2tfZGVjb2Rl LCBzaXplb2YoX19weXhfa19kZWNvZGUpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2Rl ZmF1bHQsIF9fcHl4X2tfZGVmYXVsdCwgc2l6ZW9mKF9fcHl4X2tfZGVmYXVsdCksIDAsIDAsIDEs IDF9LAorLSAgeyZfX3B5eF9uX3NfZGVwdGgsIF9fcHl4X2tfZGVwdGgsIHNpemVvZihfX3B5eF9r X2RlcHRoKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19kaWN0LCBfX3B5eF9rX2RpY3Qs IHNpemVvZihfX3B5eF9rX2RpY3QpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2RvYywg X19weXhfa19kb2MsIHNpemVvZihfX3B5eF9rX2RvYyksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5 eF9rcF9zX2RybU1vZGVBdG9taWNSZXEsIF9fcHl4X2tfZHJtTW9kZUF0b21pY1JlcSwgc2l6ZW9m KF9fcHl4X2tfZHJtTW9kZUF0b21pY1JlcSksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9uX3Nf ZHJtX2Rpc3BsYXksIF9fcHl4X2tfZHJtX2Rpc3BsYXksIHNpemVvZihfX3B5eF9rX2RybV9kaXNw bGF5KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19kcm1fb3NkX3NpemUsIF9fcHl4X2tf ZHJtX29zZF9zaXplLCBzaXplb2YoX19weXhfa19kcm1fb3NkX3NpemUpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX2UsIF9fcHl4X2tfZSwgc2l6ZW9mKF9fcHl4X2tfZSksIDAsIDAsIDEs IDF9LAorLSAgeyZfX3B5eF9uX3NfZV9pLCBfX3B5eF9rX2VfaSwgc2l6ZW9mKF9fcHl4X2tfZV9p KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19lbmFibGUsIF9fcHl4X2tfZW5hYmxlLCBz aXplb2YoX19weXhfa19lbmFibGUpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2VuY29k ZSwgX19weXhfa19lbmNvZGUsIHNpemVvZihfX3B5eF9rX2VuY29kZSksIDAsIDAsIDEsIDF9LAor LSAgeyZfX3B5eF9uX3NfZW5kX2ZpbGUsIF9fcHl4X2tfZW5kX2ZpbGUsIHNpemVvZihfX3B5eF9r X2VuZF9maWxlKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19lbnVtZXJhdGUsIF9fcHl4 X2tfZW51bWVyYXRlLCBzaXplb2YoX19weXhfa19lbnVtZXJhdGUpLCAwLCAwLCAxLCAxfSwKKy0g IHsmX19weXhfbl9zX2VvZiwgX19weXhfa19lb2YsIHNpemVvZihfX3B5eF9rX2VvZiksIDAsIDAs IDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfZXJyX2MsIF9fcHl4X2tfZXJyX2MsIHNpemVvZihfX3B5 eF9rX2Vycl9jKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19lcnJvciwgX19weXhfa19l cnJvciwgc2l6ZW9mKF9fcHl4X2tfZXJyb3IpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9z X2Vycm9ycywgX19weXhfa19lcnJvcnMsIHNpemVvZihfX3B5eF9rX2Vycm9ycyksIDAsIDAsIDEs IDF9LAorLSAgeyZfX3B5eF9uX3NfZXJyb3JzX2xvY2Fsc193cmFwcGVkLCBfX3B5eF9rX2Vycm9y c19sb2NhbHNfd3JhcHBlZCwgc2l6ZW9mKF9fcHl4X2tfZXJyb3JzX2xvY2Fsc193cmFwcGVkKSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19ldmVudCwgX19weXhfa19ldmVudCwgc2l6ZW9m KF9fcHl4X2tfZXZlbnQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2V4dHMsIF9fcHl4 X2tfZXh0cywgc2l6ZW9mKF9fcHl4X2tfZXh0cyksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9u X3NfZmF0YWwsIF9fcHl4X2tfZmF0YWwsIHNpemVvZihfX3B5eF9rX2ZhdGFsKSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X25fc19mYm8sIF9fcHl4X2tfZmJvLCBzaXplb2YoX19weXhfa19mYm8p LCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2ZkLCBfX3B5eF9rX2ZkLCBzaXplb2YoX19w eXhfa19mZCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfZmlsZV9sb2FkZWQsIF9fcHl4 X2tfZmlsZV9sb2FkZWQsIHNpemVvZihfX3B5eF9rX2ZpbGVfbG9hZGVkKSwgMCwgMCwgMSwgMX0s CistICB7Jl9fcHl4X25fc19mbGlwX3ksIF9fcHl4X2tfZmxpcF95LCBzaXplb2YoX19weXhfa19m bGlwX3kpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2ZuLCBfX3B5eF9rX2ZuLCBzaXpl b2YoX19weXhfa19mbiksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfZm9ybWF0X2Zvciwg X19weXhfa19mb3JtYXRfZm9yLCBzaXplb2YoX19weXhfa19mb3JtYXRfZm9yKSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X25fc19nZXQsIF9fcHl4X2tfZ2V0LCBzaXplb2YoX19weXhfa19nZXQp LCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX2dldF9wcm9jX2FkZHJlc3MsIF9fcHl4X2tf Z2V0X3Byb2NfYWRkcmVzcywgc2l6ZW9mKF9fcHl4X2tfZ2V0X3Byb2NfYWRkcmVzcyksIDAsIDAs IDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5LCBfX3B5eF9rX2dldF9wcm9wZXJ0 eSwgc2l6ZW9mKF9fcHl4X2tfZ2V0X3Byb3BlcnR5KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4 X25fc19nZXRfcHJvcGVydHlfYXN5bmMsIF9fcHl4X2tfZ2V0X3Byb3BlcnR5X2FzeW5jLCBzaXpl b2YoX19weXhfa19nZXRfcHJvcGVydHlfYXN5bmMpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhf bl9zX2dldF9wcm9wZXJ0eV9yZXBseSwgX19weXhfa19nZXRfcHJvcGVydHlfcmVwbHksIHNpemVv ZihfX3B5eF9rX2dldF9wcm9wZXJ0eV9yZXBseSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9u X3NfZ2V0c3RhdGUsIF9fcHl4X2tfZ2V0c3RhdGUsIHNpemVvZihfX3B5eF9rX2dldHN0YXRlKSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19oLCBfX3B5eF9rX2gsIHNpemVvZihfX3B5eF9r X2gpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfa3Bfc19pY2NfYmxvYl9zaG91bGRfYmVfYV9i eXRlc19pbnN0YSwgX19weXhfa19pY2NfYmxvYl9zaG91bGRfYmVfYV9ieXRlc19pbnN0YSwgc2l6 ZW9mKF9fcHl4X2tfaWNjX2Jsb2Jfc2hvdWxkX2JlX2FfYnl0ZXNfaW5zdGEpLCAwLCAwLCAxLCAw fSwKKy0gIHsmX19weXhfbl9zX2lkLCBfX3B5eF9rX2lkLCBzaXplb2YoX19weXhfa19pZCksIDAs IDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfaWRsZSwgX19weXhfa19pZGxlLCBzaXplb2YoX19w eXhfa19pZGxlKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19pbXBvcnQsIF9fcHl4X2tf aW1wb3J0LCBzaXplb2YoX19weXhfa19pbXBvcnQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhf bl9zX2luZm8sIF9fcHl4X2tfaW5mbywgc2l6ZW9mKF9fcHl4X2tfaW5mbyksIDAsIDAsIDEsIDF9 LAorLSAgeyZfX3B5eF9uX3NfaW5pdCwgX19weXhfa19pbml0LCBzaXplb2YoX19weXhfa19pbml0 KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19pbml0aWFsaXplLCBfX3B5eF9rX2luaXRp YWxpemUsIHNpemVvZihfX3B5eF9rX2luaXRpYWxpemUpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19w eXhfbl9zX2ludGVybmFsX2Zvcm1hdCwgX19weXhfa19pbnRlcm5hbF9mb3JtYXQsIHNpemVvZihf X3B5eF9rX2ludGVybmFsX2Zvcm1hdCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfaW52 YWxpZF9wYXJhbWV0ZXIsIF9fcHl4X2tfaW52YWxpZF9wYXJhbWV0ZXIsIHNpemVvZihfX3B5eF9r X2ludmFsaWRfcGFyYW1ldGVyKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19pc19weTMs IF9fcHl4X2tfaXNfcHkzLCBzaXplb2YoX19weXhfa19pc19weTMpLCAwLCAwLCAxLCAxfSwKKy0g IHsmX19weXhfbl9zX2lzc2h1dGRvd24sIF9fcHl4X2tfaXNzaHV0ZG93biwgc2l6ZW9mKF9fcHl4 X2tfaXNzaHV0ZG93biksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfaywgX19weXhfa19r LCBzaXplb2YoX19weXhfa19rKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19rZXlzLCBf X3B5eF9rX2tleXMsIHNpemVvZihfX3B5eF9rX2tleXMpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19w eXhfbl9zX2t3LCBfX3B5eF9rX2t3LCBzaXplb2YoX19weXhfa19rdyksIDAsIDAsIDEsIDF9LAor LSAgeyZfX3B5eF9rcF9zX2xpYm1wdl92ZXJzaW9uX2lzX2luY29ycmVjdF9SZXF1LCBfX3B5eF9r X2xpYm1wdl92ZXJzaW9uX2lzX2luY29ycmVjdF9SZXF1LCBzaXplb2YoX19weXhfa19saWJtcHZf dmVyc2lvbl9pc19pbmNvcnJlY3RfUmVxdSksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9uX3Nf bG9hZF9jb25maWcsIF9fcHl4X2tfbG9hZF9jb25maWcsIHNpemVvZihfX3B5eF9rX2xvYWRfY29u ZmlnKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19sb2FkaW5nX2ZhaWxlZCwgX19weXhf a19sb2FkaW5nX2ZhaWxlZCwgc2l6ZW9mKF9fcHl4X2tfbG9hZGluZ19mYWlsZWQpLCAwLCAwLCAx LCAxfSwKKy0gIHsmX19weXhfbl9zX2xvY2ssIF9fcHl4X2tfbG9jaywgc2l6ZW9mKF9fcHl4X2tf bG9jayksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfbG9nX21lc3NhZ2UsIF9fcHl4X2tf bG9nX21lc3NhZ2UsIHNpemVvZihfX3B5eF9rX2xvZ19tZXNzYWdlKSwgMCwgMCwgMSwgMX0sCist ICB7Jl9fcHl4X25fc19tYWluLCBfX3B5eF9rX21haW4sIHNpemVvZihfX3B5eF9rX21haW4pLCAw LCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX21ldGFjbGFzcywgX19weXhfa19tZXRhY2xhc3Ms IHNpemVvZihfX3B5eF9rX21ldGFjbGFzcyksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nf bWV0YWRhdGFfdXBkYXRlLCBfX3B5eF9rX21ldGFkYXRhX3VwZGF0ZSwgc2l6ZW9mKF9fcHl4X2tf bWV0YWRhdGFfdXBkYXRlKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19tb2R1bGUsIF9f cHl4X2tfbW9kdWxlLCBzaXplb2YoX19weXhfa19tb2R1bGUpLCAwLCAwLCAxLCAxfSwKKy0gIHsm X19weXhfbl9zX21wdiwgX19weXhfa19tcHYsIHNpemVvZihfX3B5eF9rX21wdiksIDAsIDAsIDEs IDF9LAorLSAgeyZfX3B5eF9uX3NfbXB2X2NhbGxiYWNrLCBfX3B5eF9rX21wdl9jYWxsYmFjaywg c2l6ZW9mKF9fcHl4X2tfbXB2X2NhbGxiYWNrKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25f c19uYW1lLCBfX3B5eF9rX25hbWUsIHNpemVvZihfX3B5eF9rX25hbWUpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX25ldywgX19weXhfa19uZXcsIHNpemVvZihfX3B5eF9rX25ldyksIDAs IDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfbm8sIF9fcHl4X2tfbm8sIHNpemVvZihfX3B5eF9r X25vKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X2twX3Nfbm9fZGVmYXVsdF9fX3JlZHVjZV9f X2R1ZV90b19ub24sIF9fcHl4X2tfbm9fZGVmYXVsdF9fX3JlZHVjZV9fX2R1ZV90b19ub24sIHNp emVvZihfX3B5eF9rX25vX2RlZmF1bHRfX19yZWR1Y2VfX19kdWVfdG9fbm9uKSwgMCwgMCwgMSwg MH0sCistICB7Jl9fcHl4X25fc19ub21lbSwgX19weXhfa19ub21lbSwgc2l6ZW9mKF9fcHl4X2tf bm9tZW0pLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX25vbmUsIF9fcHl4X2tfbm9uZSwg c2l6ZW9mKF9fcHl4X2tfbm9uZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfbm90X2Zv dW5kLCBfX3B5eF9rX25vdF9mb3VuZCwgc2l6ZW9mKF9fcHl4X2tfbm90X2ZvdW5kKSwgMCwgMCwg MSwgMX0sCistICB7Jl9fcHl4X25fc19ub3RfaW1wbGVtZW50ZWQsIF9fcHl4X2tfbm90X2ltcGxl bWVudGVkLCBzaXplb2YoX19weXhfa19ub3RfaW1wbGVtZW50ZWQpLCAwLCAwLCAxLCAxfSwKKy0g IHsmX19weXhfbl9zX25vdGhpbmdfdG9fcGxheSwgX19weXhfa19ub3RoaW5nX3RvX3BsYXksIHNp emVvZihfX3B5eF9rX25vdGhpbmdfdG9fcGxheSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9u X3Nfb2JqZWN0LCBfX3B5eF9rX29iamVjdCwgc2l6ZW9mKF9fcHl4X2tfb2JqZWN0KSwgMCwgMCwg MSwgMX0sCistICB7Jl9fcHl4X25fc19vYnNlcnZlX3Byb3BlcnR5LCBfX3B5eF9rX29ic2VydmVf cHJvcGVydHksIHNpemVvZihfX3B5eF9rX29ic2VydmVfcHJvcGVydHkpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX29ic2VydmVkLCBfX3B5eF9rX29ic2VydmVkLCBzaXplb2YoX19weXhf a19vYnNlcnZlZCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfb3BlbmdsLCBfX3B5eF9r X29wZW5nbCwgc2l6ZW9mKF9fcHl4X2tfb3BlbmdsKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4 X25fc19vcGVuZ2xfZmJvLCBfX3B5eF9rX29wZW5nbF9mYm8sIHNpemVvZihfX3B5eF9rX29wZW5n bF9mYm8pLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX29wZW5nbF9pbml0X3BhcmFtcywg X19weXhfa19vcGVuZ2xfaW5pdF9wYXJhbXMsIHNpemVvZihfX3B5eF9rX29wZW5nbF9pbml0X3Bh cmFtcyksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfb3B0aW9uX2Vycm9yLCBfX3B5eF9r X29wdGlvbl9lcnJvciwgc2l6ZW9mKF9fcHl4X2tfb3B0aW9uX2Vycm9yKSwgMCwgMCwgMSwgMX0s CistICB7Jl9fcHl4X25fc19vcHRpb25fZm9ybWF0LCBfX3B5eF9rX29wdGlvbl9mb3JtYXQsIHNp emVvZihfX3B5eF9rX29wdGlvbl9mb3JtYXQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9z X3BhdXNlLCBfX3B5eF9rX3BhdXNlLCBzaXplb2YoX19weXhfa19wYXVzZSksIDAsIDAsIDEsIDF9 LAorLSAgeyZfX3B5eF9uX3NfcGlja2xlLCBfX3B5eF9rX3BpY2tsZSwgc2l6ZW9mKF9fcHl4X2tf cGlja2xlKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19wbGF5YmFja19yZXN0YXJ0LCBf X3B5eF9rX3BsYXliYWNrX3Jlc3RhcnQsIHNpemVvZihfX3B5eF9rX3BsYXliYWNrX3Jlc3RhcnQp LCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3ByZXBhcmUsIF9fcHl4X2tfcHJlcGFyZSwg c2l6ZW9mKF9fcHl4X2tfcHJlcGFyZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfcHJl c2VudCwgX19weXhfa19wcmVzZW50LCBzaXplb2YoX19weXhfa19wcmVzZW50KSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X25fc19wcm9wLCBfX3B5eF9rX3Byb3AsIHNpemVvZihfX3B5eF9rX3By b3ApLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3Byb3BlcnR5X2NoYW5nZSwgX19weXhf a19wcm9wZXJ0eV9jaGFuZ2UsIHNpemVvZihfX3B5eF9rX3Byb3BlcnR5X2NoYW5nZSksIDAsIDAs IDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfcHJvcGVydHlfZXJyb3IsIF9fcHl4X2tfcHJvcGVydHlf ZXJyb3IsIHNpemVvZihfX3B5eF9rX3Byb3BlcnR5X2Vycm9yKSwgMCwgMCwgMSwgMX0sCistICB7 Jl9fcHl4X25fc19wcm9wZXJ0eV9mb3JtYXQsIF9fcHl4X2tfcHJvcGVydHlfZm9ybWF0LCBzaXpl b2YoX19weXhfa19wcm9wZXJ0eV9mb3JtYXQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9z X3Byb3BlcnR5X3VuYXZhaWxhYmxlLCBfX3B5eF9rX3Byb3BlcnR5X3VuYXZhaWxhYmxlLCBzaXpl b2YoX19weXhfa19wcm9wZXJ0eV91bmF2YWlsYWJsZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5 eF9rcF9zX3B5bXB2X2Vycm9yX2R1cmluZ19jYWxsYmFja19zLCBfX3B5eF9rX3B5bXB2X2Vycm9y X2R1cmluZ19jYWxsYmFja19zLCBzaXplb2YoX19weXhfa19weW1wdl9lcnJvcl9kdXJpbmdfY2Fs bGJhY2tfcyksIDAsIDAsIDEsIDB9LAorLSAgeyZfX3B5eF9uX3NfcHl4X1BpY2tsZUVycm9yLCBf X3B5eF9rX3B5eF9QaWNrbGVFcnJvciwgc2l6ZW9mKF9fcHl4X2tfcHl4X1BpY2tsZUVycm9yKSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19weXhfY2hlY2tzdW0sIF9fcHl4X2tfcHl4X2No ZWNrc3VtLCBzaXplb2YoX19weXhfa19weXhfY2hlY2tzdW0pLCAwLCAwLCAxLCAxfSwKKy0gIHsm X19weXhfbl9zX3B5eF9yZXN1bHQsIF9fcHl4X2tfcHl4X3Jlc3VsdCwgc2l6ZW9mKF9fcHl4X2tf cHl4X3Jlc3VsdCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfcHl4X3N0YXRlLCBfX3B5 eF9rX3B5eF9zdGF0ZSwgc2l6ZW9mKF9fcHl4X2tfcHl4X3N0YXRlKSwgMCwgMCwgMSwgMX0sCist ICB7Jl9fcHl4X25fc19weXhfdHlwZSwgX19weXhfa19weXhfdHlwZSwgc2l6ZW9mKF9fcHl4X2tf cHl4X3R5cGUpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3B5eF91bnBpY2tsZV9FbmRP ZkZpbGVSZWFjaGVkLCBfX3B5eF9rX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkLCBzaXpl b2YoX19weXhfa19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCksIDAsIDAsIDEsIDF9LAor LSAgeyZfX3B5eF9uX3NfcHl4X3VucGlja2xlX0V2ZW50LCBfX3B5eF9rX3B5eF91bnBpY2tsZV9F dmVudCwgc2l6ZW9mKF9fcHl4X2tfcHl4X3VucGlja2xlX0V2ZW50KSwgMCwgMCwgMSwgMX0sCist ICB7Jl9fcHl4X25fc19weXhfdW5waWNrbGVfSW5wdXREaXNwYXRjaCwgX19weXhfa19weXhfdW5w aWNrbGVfSW5wdXREaXNwYXRjaCwgc2l6ZW9mKF9fcHl4X2tfcHl4X3VucGlja2xlX0lucHV0RGlz cGF0Y2gpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3B5eF91bnBpY2tsZV9Mb2dNZXNz YWdlLCBfX3B5eF9rX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCBzaXplb2YoX19weXhfa19weXhf dW5waWNrbGVfTG9nTWVzc2FnZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfcHl4X3Vu cGlja2xlX1Byb3BlcnR5LCBfX3B5eF9rX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgc2l6ZW9mKF9f cHl4X2tfcHl4X3VucGlja2xlX1Byb3BlcnR5KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25f c19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCBfX3B5eF9rX3B5eF91bnBpY2tsZV9SZW5k ZXJGcmFtZUluZm8sIHNpemVvZihfX3B5eF9rX3B5eF91bnBpY2tsZV9SZW5kZXJGcmFtZUluZm8p LCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3B5eF92dGFibGUsIF9fcHl4X2tfcHl4X3Z0 YWJsZSwgc2l6ZW9mKF9fcHl4X2tfcHl4X3Z0YWJsZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5 eF9uX3NfcXVhbG5hbWUsIF9fcHl4X2tfcXVhbG5hbWUsIHNpemVvZihfX3B5eF9rX3F1YWxuYW1l KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19xdWV1ZV9mdWxsLCBfX3B5eF9rX3F1ZXVl X2Z1bGwsIHNpemVvZihfX3B5eF9rX3F1ZXVlX2Z1bGwpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19w eXhfbl9zX3F1aXQsIF9fcHl4X2tfcXVpdCwgc2l6ZW9mKF9fcHl4X2tfcXVpdCksIDAsIDAsIDEs IDF9LAorLSAgeyZfX3B5eF9uX3NfcmFuZ2UsIF9fcHl4X2tfcmFuZ2UsIHNpemVvZihfX3B5eF9r X3JhbmdlKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19yZWRyYXcsIF9fcHl4X2tfcmVk cmF3LCBzaXplb2YoX19weXhfa19yZWRyYXcpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9z X3JlZHVjZSwgX19weXhfa19yZWR1Y2UsIHNpemVvZihfX3B5eF9rX3JlZHVjZSksIDAsIDAsIDEs IDF9LAorLSAgeyZfX3B5eF9uX3NfcmVkdWNlX2N5dGhvbiwgX19weXhfa19yZWR1Y2VfY3l0aG9u LCBzaXplb2YoX19weXhfa19yZWR1Y2VfY3l0aG9uKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4 X25fc19yZWR1Y2VfZXgsIF9fcHl4X2tfcmVkdWNlX2V4LCBzaXplb2YoX19weXhfa19yZWR1Y2Vf ZXgpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3JlbGVhc2UsIF9fcHl4X2tfcmVsZWFz ZSwgc2l6ZW9mKF9fcHl4X2tfcmVsZWFzZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nf cmVtb3ZlLCBfX3B5eF9rX3JlbW92ZSwgc2l6ZW9mKF9fcHl4X2tfcmVtb3ZlKSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X25fc19yZW5kZXIsIF9fcHl4X2tfcmVuZGVyLCBzaXplb2YoX19weXhf a19yZW5kZXIpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3JlbmRlcl9mZCwgX19weXhf a19yZW5kZXJfZmQsIHNpemVvZihfX3B5eF9rX3JlbmRlcl9mZCksIDAsIDAsIDEsIDF9LAorLSAg eyZfX3B5eF9uX3NfcmVwZWF0LCBfX3B5eF9rX3JlcGVhdCwgc2l6ZW9mKF9fcHl4X2tfcmVwZWF0 KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19yZXF1ZXN0X2V2ZW50LCBfX3B5eF9rX3Jl cXVlc3RfZXZlbnQsIHNpemVvZihfX3B5eF9rX3JlcXVlc3RfZXZlbnQpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX3J1biwgX19weXhfa19ydW4sIHNpemVvZihfX3B5eF9rX3J1biksIDAs IDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfcywgX19weXhfa19zLCBzaXplb2YoX19weXhfa19z KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19zY3JpcHRfaW5wdXRfZGlzcGF0Y2gsIF9f cHl4X2tfc2NyaXB0X2lucHV0X2Rpc3BhdGNoLCBzaXplb2YoX19weXhfa19zY3JpcHRfaW5wdXRf ZGlzcGF0Y2gpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3NlZWssIF9fcHl4X2tfc2Vl aywgc2l6ZW9mKF9fcHl4X2tfc2VlayksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfc2Vs ZiwgX19weXhfa19zZWxmLCBzaXplb2YoX19weXhfa19zZWxmKSwgMCwgMCwgMSwgMX0sCistICB7 Jl9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8sIF9fcHl4X2tfc2Vs Zl9fY3R4X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8sIHNpemVvZihfX3B5eF9rX3NlbGZfX2N0eF9j YW5ub3RfYmVfY29udmVydGVkX3RvKSwgMCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X2twX3Nfc2Vs Zl9wYXJhbXNfY2Fubm90X2JlX2NvbnZlcnRlZCwgX19weXhfa19zZWxmX3BhcmFtc19jYW5ub3Rf YmVfY29udmVydGVkLCBzaXplb2YoX19weXhfa19zZWxmX3BhcmFtc19jYW5ub3RfYmVfY29udmVy dGVkKSwgMCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X25fc19zZXQsIF9fcHl4X2tfc2V0LCBzaXpl b2YoX19weXhfa19zZXQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3NldF9hbWJpZW50 X2xpZ2h0LCBfX3B5eF9rX3NldF9hbWJpZW50X2xpZ2h0LCBzaXplb2YoX19weXhfa19zZXRfYW1i aWVudF9saWdodCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfc2V0X2ljY19wcm9maWxl LCBfX3B5eF9rX3NldF9pY2NfcHJvZmlsZSwgc2l6ZW9mKF9fcHl4X2tfc2V0X2ljY19wcm9maWxl KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19zZXRfbG9nX2xldmVsLCBfX3B5eF9rX3Nl dF9sb2dfbGV2ZWwsIHNpemVvZihfX3B5eF9rX3NldF9sb2dfbGV2ZWwpLCAwLCAwLCAxLCAxfSwK Ky0gIHsmX19weXhfbl9zX3NldF9vcHRpb24sIF9fcHl4X2tfc2V0X29wdGlvbiwgc2l6ZW9mKF9f cHl4X2tfc2V0X29wdGlvbiksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfc2V0X3Byb3Bl cnR5LCBfX3B5eF9rX3NldF9wcm9wZXJ0eSwgc2l6ZW9mKF9fcHl4X2tfc2V0X3Byb3BlcnR5KSwg MCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19zZXRfcHJvcGVydHlfcmVwbHksIF9fcHl4X2tf c2V0X3Byb3BlcnR5X3JlcGx5LCBzaXplb2YoX19weXhfa19zZXRfcHJvcGVydHlfcmVwbHkpLCAw LCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3NldHN0YXRlLCBfX3B5eF9rX3NldHN0YXRlLCBz aXplb2YoX19weXhfa19zZXRzdGF0ZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfc2V0 c3RhdGVfY3l0aG9uLCBfX3B5eF9rX3NldHN0YXRlX2N5dGhvbiwgc2l6ZW9mKF9fcHl4X2tfc2V0 c3RhdGVfY3l0aG9uKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19zaHV0ZG93biwgX19w eXhfa19zaHV0ZG93biwgc2l6ZW9mKF9fcHl4X2tfc2h1dGRvd24pLCAwLCAwLCAxLCAxfSwKKy0g IHsmX19weXhfbl9zX3NraXBfcmVuZGVyaW5nLCBfX3B5eF9rX3NraXBfcmVuZGVyaW5nLCBzaXpl b2YoX19weXhfa19za2lwX3JlbmRlcmluZyksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nf c3RhcnQsIF9fcHl4X2tfc3RhcnQsIHNpemVvZihfX3B5eF9rX3N0YXJ0KSwgMCwgMCwgMSwgMX0s CistICB7Jl9fcHl4X25fc19zdGFydF9maWxlLCBfX3B5eF9rX3N0YXJ0X2ZpbGUsIHNpemVvZihf X3B5eF9rX3N0YXJ0X2ZpbGUpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3N0ZGVyciwg X19weXhfa19zdGRlcnIsIHNpemVvZihfX3B5eF9rX3N0ZGVyciksIDAsIDAsIDEsIDF9LAorLSAg eyZfX3B5eF9uX3Nfc3RyZGVjLCBfX3B5eF9rX3N0cmRlYywgc2l6ZW9mKF9fcHl4X2tfc3RyZGVj KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc19zdHJkZWNfZXJyLCBfX3B5eF9rX3N0cmRl Y19lcnIsIHNpemVvZihfX3B5eF9rX3N0cmRlY19lcnIpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19w eXhfbl9zX3N0cmVuYywgX19weXhfa19zdHJlbmMsIHNpemVvZihfX3B5eF9rX3N0cmVuYyksIDAs IDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfc3RyaWN0LCBfX3B5eF9rX3N0cmljdCwgc2l6ZW9m KF9fcHl4X2tfc3RyaWN0KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X2twX3Nfc3RyaW5nc291 cmNlLCBfX3B5eF9rX3N0cmluZ3NvdXJjZSwgc2l6ZW9mKF9fcHl4X2tfc3RyaW5nc291cmNlKSwg MCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X25fc19zdWNjZXNzLCBfX3B5eF9rX3N1Y2Nlc3MsIHNp emVvZihfX3B5eF9rX3N1Y2Nlc3MpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3N1cnJv Z2F0ZWVzY2FwZSwgX19weXhfa19zdXJyb2dhdGVlc2NhcGUsIHNpemVvZihfX3B5eF9rX3N1cnJv Z2F0ZWVzY2FwZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3Nfc3lzLCBfX3B5eF9rX3N5 cywgc2l6ZW9mKF9fcHl4X2tfc3lzKSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc190YXJn ZXRfdGltZSwgX19weXhfa190YXJnZXRfdGltZSwgc2l6ZW9mKF9fcHl4X2tfdGFyZ2V0X3RpbWUp LCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3Rlc3QsIF9fcHl4X2tfdGVzdCwgc2l6ZW9m KF9fcHl4X2tfdGVzdCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfdGhyZWFkaW5nLCBf X3B5eF9rX3RocmVhZGluZywgc2l6ZW9mKF9fcHl4X2tfdGhyZWFkaW5nKSwgMCwgMCwgMSwgMX0s CistICB7Jl9fcHl4X25fc190aWNrLCBfX3B5eF9rX3RpY2ssIHNpemVvZihfX3B5eF9rX3RpY2sp LCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3RpbWVvdXQsIF9fcHl4X2tfdGltZW91dCwg c2l6ZW9mKF9fcHl4X2tfdGltZW91dCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfdHJh Y2UsIF9fcHl4X2tfdHJhY2UsIHNpemVvZihfX3B5eF9rX3RyYWNlKSwgMCwgMCwgMSwgMX0sCist ICB7Jl9fcHl4X25fc190cmFja3NfY2hhbmdlZCwgX19weXhfa190cmFja3NfY2hhbmdlZCwgc2l6 ZW9mKF9fcHl4X2tfdHJhY2tzX2NoYW5nZWQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9z X3RyYWNrc19zd2l0Y2hlZCwgX19weXhfa190cmFja3Nfc3dpdGNoZWQsIHNpemVvZihfX3B5eF9r X3RyYWNrc19zd2l0Y2hlZCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfdW5pbml0X2ds LCBfX3B5eF9rX3VuaW5pdF9nbCwgc2l6ZW9mKF9fcHl4X2tfdW5pbml0X2dsKSwgMCwgMCwgMSwg MX0sCistICB7Jl9fcHl4X25fc191bmluaXRpYWxpemVkLCBfX3B5eF9rX3VuaW5pdGlhbGl6ZWQs IHNpemVvZihfX3B5eF9rX3VuaW5pdGlhbGl6ZWQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhf bl9zX3Vua25vd25fZm9ybWF0LCBfX3B5eF9rX3Vua25vd25fZm9ybWF0LCBzaXplb2YoX19weXhf a191bmtub3duX2Zvcm1hdCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfdW5vYnNlcnZl X3Byb3BlcnR5LCBfX3B5eF9rX3Vub2JzZXJ2ZV9wcm9wZXJ0eSwgc2l6ZW9mKF9fcHl4X2tfdW5v YnNlcnZlX3Byb3BlcnR5KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc191bnBhdXNlLCBf X3B5eF9rX3VucGF1c2UsIHNpemVvZihfX3B5eF9rX3VucGF1c2UpLCAwLCAwLCAxLCAxfSwKKy0g IHsmX19weXhfbl9zX3Vuc3VwcG9ydGVkLCBfX3B5eF9rX3Vuc3VwcG9ydGVkLCBzaXplb2YoX19w eXhfa191bnN1cHBvcnRlZCksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfdXBkYXRlLCBf X3B5eF9rX3VwZGF0ZSwgc2l6ZW9mKF9fcHl4X2tfdXBkYXRlKSwgMCwgMCwgMSwgMX0sCistICB7 Jl9fcHl4X2twX3NfdXRmXzgsIF9fcHl4X2tfdXRmXzgsIHNpemVvZihfX3B5eF9rX3V0Zl84KSwg MCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X25fc192LCBfX3B5eF9rX3YsIHNpemVvZihfX3B5eF9r X3YpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3ZhbHVlLCBfX3B5eF9rX3ZhbHVlLCBz aXplb2YoX19weXhfa192YWx1ZSksIDAsIDAsIDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfdmFsdWVz LCBfX3B5eF9rX3ZhbHVlcywgc2l6ZW9mKF9fcHl4X2tfdmFsdWVzKSwgMCwgMCwgMSwgMX0sCist ICB7Jl9fcHl4X25fc192ZXJzaW9uLCBfX3B5eF9rX3ZlcnNpb24sIHNpemVvZihfX3B5eF9rX3Zl cnNpb24pLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3ZlcnNpb25faW5mbywgX19weXhf a192ZXJzaW9uX2luZm8sIHNpemVvZihfX3B5eF9rX3ZlcnNpb25faW5mbyksIDAsIDAsIDEsIDF9 LAorLSAgeyZfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9rX3ZpZGN1dHRlcl9s aWJzX21wdiwgc2l6ZW9mKF9fcHl4X2tfdmlkY3V0dGVyX2xpYnNfbXB2KSwgMCwgMCwgMSwgMX0s CistICB7Jl9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfa192 aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBzaXplb2YoX19weXhfa192aWRjdXR0ZXJfbGli c19weW1wdl9tcHZfcHl4KSwgMCwgMCwgMSwgMH0sCistICB7Jl9fcHl4X25fc192aWRlb19yZWNv bmZpZywgX19weXhfa192aWRlb19yZWNvbmZpZywgc2l6ZW9mKF9fcHl4X2tfdmlkZW9fcmVjb25m aWcpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3ZvX2luaXRfZmFpbGVkLCBfX3B5eF9r X3ZvX2luaXRfZmFpbGVkLCBzaXplb2YoX19weXhfa192b19pbml0X2ZhaWxlZCksIDAsIDAsIDEs IDF9LAorLSAgeyZfX3B5eF9uX3NfdywgX19weXhfa193LCBzaXplb2YoX19weXhfa193KSwgMCwg MCwgMSwgMX0sCistICB7Jl9fcHl4X25fc193YXJuLCBfX3B5eF9rX3dhcm4sIHNpemVvZihfX3B5 eF9rX3dhcm4pLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19weXhfbl9zX3dhcm5pbmdzLCBfX3B5eF9r X3dhcm5pbmdzLCBzaXplb2YoX19weXhfa193YXJuaW5ncyksIDAsIDAsIDEsIDF9LAorLSAgeyZf X3B5eF9uX3Nfd2xfZGlzcGxheSwgX19weXhfa193bF9kaXNwbGF5LCBzaXplb2YoX19weXhfa193 bF9kaXNwbGF5KSwgMCwgMCwgMSwgMX0sCistICB7Jl9fcHl4X25fc193cmFwcGVkLCBfX3B5eF9r X3dyYXBwZWQsIHNpemVvZihfX3B5eF9rX3dyYXBwZWQpLCAwLCAwLCAxLCAxfSwKKy0gIHsmX19w eXhfbl9zX3dyaXRlLCBfX3B5eF9rX3dyaXRlLCBzaXplb2YoX19weXhfa193cml0ZSksIDAsIDAs IDEsIDF9LAorLSAgeyZfX3B5eF9uX3NfeDExX2Rpc3BsYXksIF9fcHl4X2tfeDExX2Rpc3BsYXks IHNpemVvZihfX3B5eF9rX3gxMV9kaXNwbGF5KSwgMCwgMCwgMSwgMX0sCistICB7MCwgMCwgMCwg MCwgMCwgMCwgMH0KKy19OworLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfSW5p dENhY2hlZEJ1aWx0aW5zKHZvaWQpIHsKKy0gIF9fcHl4X2J1aWx0aW5fSW1wb3J0RXJyb3IgPSBf X1B5eF9HZXRCdWlsdGluTmFtZShfX3B5eF9uX3NfSW1wb3J0RXJyb3IpOyBpZiAoIV9fcHl4X2J1 aWx0aW5fSW1wb3J0RXJyb3IpIF9fUFlYX0VSUigwLCA0NCwgX19weXhfTDFfZXJyb3IpCistICBf X3B5eF9idWlsdGluX29iamVjdCA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19vYmpl Y3QpOyBpZiAoIV9fcHl4X2J1aWx0aW5fb2JqZWN0KSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fcHl4X2J1aWx0aW5fVW5pY29kZURlY29kZUVycm9yID0gX19QeXhfR2V0 QnVpbHRpbk5hbWUoX19weXhfbl9zX1VuaWNvZGVEZWNvZGVFcnJvcik7IGlmICghX19weXhfYnVp bHRpbl9Vbmljb2RlRGVjb2RlRXJyb3IpIF9fUFlYX0VSUigwLCA1OCwgX19weXhfTDFfZXJyb3Ip CistICBfX3B5eF9idWlsdGluX1VuaWNvZGVFbmNvZGVFcnJvciA9IF9fUHl4X0dldEJ1aWx0aW5O YW1lKF9fcHl4X25fc19Vbmljb2RlRW5jb2RlRXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0aW5fVW5p Y29kZUVuY29kZUVycm9yKSBfX1BZWF9FUlIoMCwgNjYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19w eXhfYnVpbHRpbl9yYW5nZSA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19yYW5nZSk7 IGlmICghX19weXhfYnVpbHRpbl9yYW5nZSkgX19QWVhfRVJSKDAsIDIyMiwgX19weXhfTDFfZXJy b3IpCistICBfX3B5eF9idWlsdGluX2lkID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9z X2lkKTsgaWYgKCFfX3B5eF9idWlsdGluX2lkKSBfX1BZWF9FUlIoMCwgMzAzLCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fcHl4X2J1aWx0aW5fZW51bWVyYXRlID0gX19QeXhfR2V0QnVpbHRpbk5hbWUo X19weXhfbl9zX2VudW1lcmF0ZSk7IGlmICghX19weXhfYnVpbHRpbl9lbnVtZXJhdGUpIF9fUFlY X0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfYnVpbHRpbl9UeXBlRXJyb3Ig PSBfX1B5eF9HZXRCdWlsdGluTmFtZShfX3B5eF9uX3NfVHlwZUVycm9yKTsgaWYgKCFfX3B5eF9i dWlsdGluX1R5cGVFcnJvcikgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19w eXhfYnVpbHRpbl9EZXByZWNhdGlvbldhcm5pbmcgPSBfX1B5eF9HZXRCdWlsdGluTmFtZShfX3B5 eF9uX3NfRGVwcmVjYXRpb25XYXJuaW5nKTsgaWYgKCFfX3B5eF9idWlsdGluX0RlcHJlY2F0aW9u V2FybmluZykgX19QWVhfRVJSKDAsIDgzMCwgX19weXhfTDFfZXJyb3IpCistICByZXR1cm4gMDsK Ky0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIHJldHVybiAtMTsKKy19CistCistc3RhdGljIENZVEhP Tl9TTUFMTF9DT0RFIGludCBfX1B5eF9Jbml0Q2FjaGVkQ29uc3RhbnRzKHZvaWQpIHsKKy0gIF9f UHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi X19QeXhfSW5pdENhY2hlZENvbnN0YW50cyIsIDApOworLQorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjMxOQorLSAqIAorLSAqIGRlZiBfZXJyb3JzKGZuKToKKy0gKiAgICAg ZGVmIHdyYXBwZWQoKmssICoqa3cpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICB2ID0gZm4oKmssICoqa3cpCistICogICAgICAgICBpZiB2IDwgMDoKKy0gKi8KKy0g IF9fcHl4X3R1cGxlXyA9IFB5VHVwbGVfUGFjaygzLCBfX3B5eF9uX3NfaywgX19weXhfbl9zX2t3 LCBfX3B5eF9uX3Nfdik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfKSkgX19QWVhfRVJSKDAs IDMxOSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfKTsKKy0g IF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfKTsKKy0gIF9fcHl4X2NvZGVvYmpfXzIgPSAoUHlP YmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMCwgMCwgMywgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xP Q0FMU3xDT19WQVJBUkdTfENPX1ZBUktFWVdPUkRTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhf ZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV8sIF9fcHl4X2VtcHR5 X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1w dl9tcHZfcHl4LCBfX3B5eF9uX3Nfd3JhcHBlZCwgMzE5LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlm ICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMikpIF9fUFlYX0VSUigwLCAzMTksIF9fcHl4X0wx X2Vycm9yKQorLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MgorLSAqIGRlZiBfX3JlZHVjZV9j eXRob25fXyhzZWxmKToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVk dWNlX18gZHVlIHRvIG5vbi10cml2aWFsIF9fY2luaXRfXyIpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6 CistICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBu b24tdHJpdmlhbCBfX2Npbml0X18iKQorLSAqLworLSAgX19weXhfdHVwbGVfXzMgPSBQeVR1cGxl X1BhY2soMSwgX19weXhfa3Bfc19ub19kZWZhdWx0X19fcmVkdWNlX19fZHVlX3RvX25vbik7IGlm ICh1bmxpa2VseSghX19weXhfdHVwbGVfXzMpKSBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzMpOworLSAgX19QeXhfR0lWRVJFRihf X3B5eF90dXBsZV9fMyk7CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0CistICogICAgIHJh aXNlIFR5cGVFcnJvcigibm8gZGVmYXVsdCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBf X2Npbml0X18iKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRl KToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJubyBkZWZhdWx0IF9fcmVkdWNlX18gZHVlIHRv IG5vbi10cml2aWFsIF9fY2luaXRfXyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g Ki8KKy0gIF9fcHl4X3R1cGxlX180ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2twX3Nfbm9fZGVm YXVsdF9fX3JlZHVjZV9fX2R1ZV90b19ub24pOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX180 KSkgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4 X3R1cGxlX180KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzQpOworLQorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgzMAorLSAqICAgICBkZWYgX19pbml0X18o c2VsZik6CistICogICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlCistICogICAgICAgICB3YXJu aW5ncy53YXJuKCJPcGVuR0xDb250ZXh0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBzd2l0Y2ggdG8g UmVuZGVyQ29udGV4dCIsIERlcHJlY2F0aW9uV2FybmluZykgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorLSAqIAorLSAqICAgICBkZWYgaW5pdF9nbChzZWxmLCBleHRzLCBnZXRfcHJvY19h ZGRyZXNzKToKKy0gKi8KKy0gIF9fcHl4X3R1cGxlX181ID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4 X2twX3NfT3BlbkdMQ29udGV4dF9pc19kZXByZWNhdGVkX3BsZWEsIF9fcHl4X2J1aWx0aW5fRGVw cmVjYXRpb25XYXJuaW5nKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNSkpIF9fUFlYX0VS UigwLCA4MzAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX181 KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzUpOworLQorLSAgLyogIih0cmVlIGZy YWdtZW50KSI6MgorLSAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKy0gKiAgICAgcmFp c2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBv YmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIGRl ZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgcmFpc2Ug VHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmpl Y3QgZm9yIHBpY2tsaW5nIikKKy0gKi8KKy0gIF9fcHl4X3R1cGxlX182ID0gUHlUdXBsZV9QYWNr KDEsIF9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8pOyBpZiAodW5s aWtlbHkoIV9fcHl4X3R1cGxlX182KSkgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX182KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhf dHVwbGVfXzYpOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NAorLSAqICAgICByYWlzZSBU eXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVj dCBmb3IgcGlja2xpbmciKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4 X3N0YXRlKToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNv bnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqLworLSAgX19weXhfdHVwbGVfXzcgPSBQeVR1cGxlX1BhY2soMSwg X19weXhfa3Bfc19zZWxmX19jdHhfY2Fubm90X2JlX2NvbnZlcnRlZF90byk7IGlmICh1bmxpa2Vs eSghX19weXhfdHVwbGVfXzcpKSBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzcpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBs ZV9fNyk7CistCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoyCistICogZGVmIF9fcmVkdWNlX2N5 dGhvbl9fKHNlbGYpOgorLSAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5v dCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBf X3B5eF9zdGF0ZSk6CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90 IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKi8KKy0g IF9fcHl4X3R1cGxlX184ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9wYXJhbXNf Y2Fubm90X2JlX2NvbnZlcnRlZCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzgpKSBfX1BZ WF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVf XzgpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fOCk7CistCistICAvKiAiKHRyZWUg ZnJhZ21lbnQpIjo0CistICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90 IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKy0gKiBkZWYg X19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CistICogICAgIHJhaXNlIFR5 cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmpl Y3QgZm9yIHBpY2tsaW5nIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqLworLSAg X19weXhfdHVwbGVfXzkgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfa3Bfc19zZWxmX3BhcmFtc19j YW5ub3RfYmVfY29udmVydGVkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fOSkpIF9fUFlY X0VSUigxLCA0LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9f OSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX185KTsKKy0KKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTIKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3Zv aWRwKE1QVl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwgZ2V0X3BvaW50ZXIoIndsX2Rpc3BsYXki LCB3bF9kaXNwbGF5KSkKKy0gKiAgICAgICAgIGlmIGRybV9kaXNwbGF5OgorLSAqICAgICAgICAg ICAgIGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBk cm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKKy0gKiAgICAgICAgICAgICBkcm1fcGFyYW1z LmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpCistICov CistICBfX3B5eF90dXBsZV9fMTAgPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9zX2ZkLCBfX3B5 eF9pbnRfbmVnXzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMCkpIF9fUFlYX0VSUigw LCA5OTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xMCk7 CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18xMCk7CistCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTkzCistICogICAgICAgICBpZiBkcm1fZGlzcGxheToKKy0g KiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKQor LSAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0 Y19pZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAg ZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNvbm5lY3Rvcl9pZCIs IC0xKQorLSAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVl c3RfcHRyIiwgTm9uZSkKKy0gKi8KKy0gIF9fcHl4X3R1cGxlX18xMSA9IFB5VHVwbGVfUGFjaygy LCBfX3B5eF9uX3NfY3J0Y19pZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90dXBsZV9fMTEpKSBfX1BZWF9FUlIoMCwgOTkzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4 X0dPVFJFRihfX3B5eF90dXBsZV9fMTEpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9f MTEpOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5NAorLSAqICAg ICAgICAgICAgIGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCistICog ICAgICAgICAgICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lk IiwgLTEpCistICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlz cGxheS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9w dHIiLCBOb25lKQorLSAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKKy0gKi8KKy0g IF9fcHl4X3R1cGxlX18xMiA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfY29ubmVjdG9yX2lk LCBfX3B5eF9pbnRfbmVnXzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMikpIF9fUFlY X0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxl X18xMik7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18xMik7CistCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk1CistICogICAgICAgICAgICAgZHJtX3BhcmFt cy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpCistICogICAgICAgICAg ICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNvbm5lY3Rvcl9p ZCIsIC0xKQorLSAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3Jl cXVlc3RfcHRyIiwgTm9uZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAg ICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKKy0gKiAgICAgICAgICAgICAgICAgZHJtX3BhcmFt cy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIo YXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQorLSAqLworLSAgX19weXhfdHVwbGVfXzEzID0gUHlU dXBsZV9QYWNrKDIsIF9fcHl4X25fc19hdG9taWNfcmVxdWVzdF9wdHIsIFB5X05vbmUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMykpIF9fUFlYX0VSUigwLCA5OTUsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xMyk7CistICBfX1B5eF9HSVZFUkVG KF9fcHl4X3R1cGxlX18xMyk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTk4CistICogICAgICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOgorLSAqICAgICAgICAg ICAgICAgICBkcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0X3B0ciA9IDxfZHJtTW9kZUF0b21pY1Jl cSAqKj5nZXRfcG9pbnRlcihhcnAsICJkcm1Nb2RlQXRvbWljUmVxKiIpCistICogICAgICAgICAg ICAgZHJtX3BhcmFtcy5yZW5kZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJlbmRlcl9mZCIsIC0x KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAgICAgcGFyYW1zLmFk ZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZLCAmZHJtX3BhcmFtcykKKy0gKiAg ICAgICAgIGlmIGRybV9vc2Rfc2l6ZToKKy0gKi8KKy0gIF9fcHl4X3R1cGxlX18xNCA9IFB5VHVw bGVfUGFjaygyLCBfX3B5eF9uX3NfcmVuZGVyX2ZkLCBfX3B5eF9pbnRfbmVnXzEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3R1cGxlX18xNCkpIF9fUFlYX0VSUigwLCA5OTgsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xNCk7CistICBfX1B5eF9HSVZFUkVGKF9f cHl4X3R1cGxlX18xNCk7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA4MworLSAqICAgICAgICAgaWYgb3BlbmdsX2ZibzoKKy0gKiAgICAgICAgICAgICBtZW1zZXQo JmZibywgMCwgc2l6ZW9mKGZibykpCistICogICAgICAgICAgICAgZmJvLmZibyA9IG9wZW5nbF9m Ym8uZ2V0KCJmYm8iLCAwKSBvciAwICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgICAgICAgICBmYm8udyA9IG9wZW5nbF9mYm9bInciXQorLSAqICAgICAgICAgICAgIGZiby5o ID0gb3BlbmdsX2Zib1siaCJdCistICovCistICBfX3B5eF90dXBsZV9fMTUgPSBQeVR1cGxlX1Bh Y2soMiwgX19weXhfbl9zX2ZibywgX19weXhfaW50XzApOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1 cGxlX18xNSkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90dXBsZV9fMTUpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTUp OworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODYKKy0gKiAgICAg ICAgICAgICBmYm8udyA9IG9wZW5nbF9mYm9bInciXQorLSAqICAgICAgICAgICAgIGZiby5oID0g b3BlbmdsX2Zib1siaCJdCistICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9w ZW5nbF9mYm8uZ2V0KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBvciAwICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJf UEFSQU1fT1BFTkdMX0ZCTywgJmZibykKKy0gKiAgICAgICAgIGlmIGZsaXBfeToKKy0gKi8KKy0g IF9fcHl4X3R1cGxlX18xNiA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfaW50ZXJuYWxfZm9y bWF0LCBfX3B5eF9pbnRfMCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE2KSkgX19QWVhf RVJSKDAsIDEwODYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxl X18xNik7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18xNik7CistCistICAvKiAiKHRy ZWUgZnJhZ21lbnQpIjoyCistICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorLSAqICAg ICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0 aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorLSAqICAgICBy YWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9u IG9iamVjdCBmb3IgcGlja2xpbmciKQorLSAqLworLSAgX19weXhfdHVwbGVfXzE3ID0gUHlUdXBs ZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8pOyBp ZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xNykpIF9fUFlYX0VSUigxLCAyLCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTcpOworLSAgX19QeXhfR0lWRVJF RihfX3B5eF90dXBsZV9fMTcpOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6NAorLSAqICAg ICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0 aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNl bGYsIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fu bm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqLworLSAgX19weXhfdHVwbGVfXzE4ID0gUHlUdXBs ZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8pOyBp ZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xOCkpIF9fUFlYX0VSUigxLCA0LCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTgpOworLSAgX19QeXhfR0lWRVJF RihfX3B5eF90dXBsZV9fMTgpOworLQorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MgorLSAqIGRl ZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxm Ll9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5n IikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIGRlZiBfX3NldHN0YXRlX2N5dGhv bl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9j dHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikK Ky0gKi8KKy0gIF9fcHl4X3R1cGxlX18xOSA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9rcF9zX3Nl bGZfX2N0eF9jYW5ub3RfYmVfY29udmVydGVkX3RvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBs ZV9fMTkpKSBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYo X19weXhfdHVwbGVfXzE5KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzE5KTsKKy0K Ky0gIC8qICIodHJlZSBmcmFnbWVudCkiOjQKKy0gKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxm Ll9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5n IikKKy0gKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CistICog ICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQ eXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKi8KKy0gIF9fcHl4X3R1cGxlX18yMCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9rcF9zX3Nl bGZfX2N0eF9jYW5ub3RfYmVfY29udmVydGVkX3RvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBs ZV9fMjApKSBfX1BZWF9FUlIoMSwgNCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYo X19weXhfdHVwbGVfXzIwKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzIwKTsKKy0K Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MgorLSAqICAgICB2b2lkIFB5 RXZhbF9Jbml0VGhyZWFkcygpCistICogCistICogX2lzX3B5MyA9IHN5cy52ZXJzaW9uX2luZm8g Pj0gKDMsKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogX3N0cmRlY19lcnIgPSAi c3Vycm9nYXRlZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIKKy0gKiAjIG1wdiAtPiBQ eXRob24KKy0gKi8KKy0gIF9fcHl4X3R1cGxlX18yMSA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9p bnRfMyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzIxKSkgX19QWVhfRVJSKDAsIDUyLCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjEpOworLSAgX19Q eXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMjEpOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjU1CistICogX3N0cmRlY19lcnIgPSAic3Vycm9nYXRlZXNjYXBlIiBpZiBf aXNfcHkzIGVsc2UgInN0cmljdCIKKy0gKiAjIG1wdiAtPiBQeXRob24KKy0gKiBkZWYgX3N0cmRl YyhzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICB0cnk6CistICogICAg ICAgICByZXR1cm4gcy5kZWNvZGUoInV0Zi04IiwgX3N0cmRlY19lcnIpCistICovCistICBfX3B5 eF90dXBsZV9fMjIgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3MpOyBpZiAodW5saWtlbHko IV9fcHl4X3R1cGxlX18yMikpIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzIyKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVw bGVfXzIyKTsKKy0gIF9fcHl4X2NvZGVvYmpfXzIzID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVf TmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5 dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18y MiwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1 dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19zdHJkZWMsIDU1LCBfX3B5eF9lbXB0 eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMjMpKSBfX1BZWF9FUlIoMCwg NTUsIF9fcHl4X0wxX2Vycm9yKQorLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjYzCistICogCistICogIyBQeXRob24gLT4gbXB2CistICogZGVmIF9zdHJlbmMocyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgdHJ5OgorLSAqICAgICAgICAgcmV0 dXJuIHMuZW5jb2RlKCJ1dGYtOCIsIF9zdHJkZWNfZXJyKQorLSAqLworLSAgX19weXhfdHVwbGVf XzI0ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 dXBsZV9fMjQpKSBfX1BZWF9FUlIoMCwgNjMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09U UkVGKF9fcHl4X3R1cGxlX18yNCk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18yNCk7 CistICBfX3B5eF9jb2Rlb2JqX18yNSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAw LCAxLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMjQsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGli c19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3Nfc3RyZW5jLCA2MywgX19weXhfZW1wdHlfYnl0ZXMp OyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzI1KSkgX19QWVhfRVJSKDAsIDYzLCBfX3B5 eF9MMV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTgK Ky0gKiAKKy0gKiAKKy0gKiBkZWYgX2Vycm9ycyhmbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgorLSAqICAgICAgICAgdiA9IGZu KCprLCAqKmt3KQorLSAqLworLSAgX19weXhfdHVwbGVfXzI2ID0gUHlUdXBsZV9QYWNrKDMsIF9f cHl4X25fc19mbiwgX19weXhfbl9zX3dyYXBwZWQsIF9fcHl4X25fc193cmFwcGVkKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90dXBsZV9fMjYpKSBfX1BZWF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjYpOworLSAgX19QeXhfR0lWRVJFRihf X3B5eF90dXBsZV9fMjYpOworLSAgX19weXhfY29kZW9ial9fMjcgPSAoUHlPYmplY3QqKV9fUHl4 X1B5Q29kZV9OZXcoMSwgMCwgMywgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhf ZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf dHVwbGVfXzI2LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2tw X3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX2Vycm9ycywgMzE4LCBf X3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMjcpKSBfX1BZ WF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozMjkKKy0gKiAgICAgY29kZSA9IE5vbmUKKy0gKiAKKy0gKiAgICAgZGVm IF9faW5pdF9fKHNlbGYsIGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBzZWxmLmNvZGUgPSBlCistICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVycl9jCist ICovCistICBfX3B5eF90dXBsZV9fMjggPSBQeVR1cGxlX1BhY2soNCwgX19weXhfbl9zX3NlbGYs IF9fcHl4X25fc19lLCBfX3B5eF9uX3NfZXJyX2MsIF9fcHl4X25fc19lX2kpOyBpZiAodW5saWtl bHkoIV9fcHl4X3R1cGxlX18yOCkpIF9fUFlYX0VSUigwLCAzMjksIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18yOCk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3R1cGxlX18yOCk7CistICBfX3B5eF9jb2Rlb2JqX18yOSA9IChQeU9iamVjdCopX19QeXhfUHlD b2RlX05ldygyLCAwLCA0LCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0 eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBs ZV9fMjgsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192 aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfaW5pdCwgMzI5LCBfX3B5eF9l bXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMjkpKSBfX1BZWF9FUlIo MCwgMzI5LCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNDYKKy0gKiBjZGVmIF9yZXBseV91c2VyZGF0YXMgPSBkaWN0KCkKKy0gKiAKKy0g KiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKKy0gKiAgICAgICAgIHNlbGYu Y291bnRlciA9IDAKKy0gKi8KKy0gIF9fcHl4X3R1cGxlX18zMCA9IFB5VHVwbGVfUGFjaygxLCBf X3B5eF9idWlsdGluX29iamVjdCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzMwKSkgX19Q WVhfRVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdHVw bGVfXzMwKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzMwKTsKKy0KKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDcKKy0gKiAKKy0gKiBjbGFzcyBfUmVwbHlV c2VyRGF0YShvYmplY3QpOgorLSAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKy0g KiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKy0gKi8KKy0gIF9fcHl4X3R1cGxlX18zMSA9IFB5 VHVwbGVfUGFjaygyLCBfX3B5eF9uX3Nfc2VsZiwgX19weXhfbl9zX2RhdGEpOyBpZiAodW5saWtl bHkoIV9fcHl4X3R1cGxlX18zMSkpIF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18zMSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3R1cGxlX18zMSk7CistICBfX3B5eF9jb2Rlb2JqX18zMiA9IChQeU9iamVjdCopX19QeXhfUHlD b2RlX05ldygyLCAwLCAyLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0 eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBs ZV9fMzEsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192 aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfaW5pdCwgMzQ3LCBfX3B5eF9l bXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMzIpKSBfX1BZWF9FUlIo MCwgMzQ3LCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNTIKKy0gKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZQorLSAqIAorLSAq ICAgICBkZWYgYWRkKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg ICAgICBzZWxmLmNvdW50ZXIgKz0gMQorLSAqIAorLSAqLworLSAgX19weXhfdHVwbGVfXzMzID0g UHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBs ZV9fMzMpKSBfX1BZWF9FUlIoMCwgMzUyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJF RihfX3B5eF90dXBsZV9fMzMpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMzMpOwor LSAgX19weXhfY29kZW9ial9fMzQgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwg MSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzMzLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNf cHltcHZfbXB2X3B5eCwgX19weXhfbl9zX2FkZCwgMzUyLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlm ICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMzQpKSBfX1BZWF9FUlIoMCwgMzUyLCBfX3B5eF9M MV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTUKKy0g KiAgICAgICAgIHNlbGYuY291bnRlciArPSAxCistICogCistICogICAgIGRlZiByZW1vdmUoc2Vs Zik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuY291bnRl ciAtPSAxCistICogCistICovCistICBfX3B5eF90dXBsZV9fMzUgPSBQeVR1cGxlX1BhY2soMSwg X19weXhfbl9zX3NlbGYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18zNSkpIF9fUFlYX0VS UigwLCAzNTUsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18z NSk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18zNSk7CistICBfX3B5eF9jb2Rlb2Jq X18zNiA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUla RUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMzUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBf X3B5eF9uX3NfcmVtb3ZlLCAzNTUsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFf X3B5eF9jb2Rlb2JqX18zNikpIF9fUFlYX0VSUigwLCAzNTUsIF9fcHl4X0wxX2Vycm9yKQorLQor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzMKKy0gKiAKKy0gKiBjbGFz cyBDYWxsYmFja1RocmVhZChUaHJlYWQpOgorLSAqICAgICBkZWYgX19pbml0X18oc2VsZik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhz ZWxmKQorLSAqICAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCistICovCistICBfX3B5eF90dXBs ZV9fMzcgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAodW5saWtlbHkoIV9f cHl4X3R1cGxlX18zNykpIF9fUFlYX0VSUigwLCAxMTMzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMzcpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBs ZV9fMzcpOworLSAgX19weXhfY29kZW9ial9fMzggPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9O ZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0 ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzM3 LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0 dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX2luaXQsIDExMzMsIF9fcHl4X2VtcHR5 X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18zOCkpIF9fUFlYX0VSUigwLCAx MTMzLCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTQxCistICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZQorLSAqIAorLSAq ICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRydWUKKy0gKiAgICAgICAgIHNlbGYuY2FsbGJh Y2sgPSBOb25lCistICovCistICBfX3B5eF90dXBsZV9fMzkgPSBQeVR1cGxlX1BhY2soMSwgX19w eXhfbl9zX3NlbGYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18zOSkpIF9fUFlYX0VSUigw LCAxMTQxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMzkp OworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMzkpOworLSAgX19weXhfY29kZW9ial9f NDAgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVE fENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzM5LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf ZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19w eXhfbl9zX3NodXRkb3duLCAxMTQxLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSgh X19weXhfY29kZW9ial9fNDApKSBfX1BZWF9FUlIoMCwgMTE0MSwgX19weXhfTDFfZXJyb3IpCist CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0NgorLSAqICAgICAgICAg c2VsZi5sb2NrLnJlbGVhc2UoKQorLSAqIAorLSAqICAgICBkZWYgY2FsbChzZWxmKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQor LSAqIAorLSAqLworLSAgX19weXhfdHVwbGVfXzQxID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25f c19zZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNDEpKSBfX1BZWF9FUlIoMCwgMTE0 NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzQxKTsKKy0g IF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzQxKTsKKy0gIF9fcHl4X2NvZGVvYmpfXzQyID0g KFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19O RVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X3R1cGxlX180MSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5 X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25f c19jYWxsLCAxMTQ2LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29k ZW9ial9fNDIpKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19weXhfTDFfZXJyb3IpCistCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0OQorLSAqICAgICAgICAgc2VsZi5sb2Nr LnJlbGVhc2UoKQorLSAqIAorLSAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxiYWNrKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxi YWNrCistICogCistICovCistICBfX3B5eF90dXBsZV9fNDMgPSBQeVR1cGxlX1BhY2soMiwgX19w eXhfbl9zX3NlbGYsIF9fcHl4X25fc19jYWxsYmFjayk7IGlmICh1bmxpa2VseSghX19weXhfdHVw bGVfXzQzKSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09U UkVGKF9fcHl4X3R1cGxlX180Myk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180Myk7 CistICBfX3B5eF9jb2Rlb2JqX180NCA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygyLCAw LCAyLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDMsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGli c19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3Nfc2V0LCAxMTQ5LCBfX3B5eF9lbXB0eV9ieXRlcyk7 IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fNDQpKSBfX1BZWF9FUlIoMCwgMTE0OSwgX19w eXhfTDFfZXJyb3IpCistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1 MgorLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCistICogCistICogICAgIGRl ZiBydW4oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHdo aWxlIG5vdCBzZWxmLmlzc2h1dGRvd246CistICogICAgICAgICAgICAgc2VsZi5sb2NrLmFjcXVp cmUoVHJ1ZSkKKy0gKi8KKy0gIF9fcHl4X3R1cGxlX180NSA9IFB5VHVwbGVfUGFjaygxLCBfX3B5 eF9uX3Nfc2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzQ1KSkgX19QWVhfRVJSKDAs IDExNTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX180NSk7 CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180NSk7CistICBfX3B5eF9jb2Rlb2JqX180 NiA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8 Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5 eF9uX3NfcnVuLCAxMTUyLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhf Y29kZW9ial9fNDYpKSBfX1BZWF9FUlIoMCwgMTE1MiwgX19weXhfTDFfZXJyb3IpCistCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1NworLSAqICAgICAgICAgICAgIHNl bGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2FsbGJhY2sgZWxzZSBOb25l CistICogCistICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB0cnk6CistICogICAgICAgICAgICAg Y2FsbGJhY2soKQorLSAqLworLSAgX19weXhfdHVwbGVfXzQ3ID0gUHlUdXBsZV9QYWNrKDMsIF9f cHl4X25fc19zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2ssIF9fcHl4X25fc19lKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90dXBsZV9fNDcpKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzQ3KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19w eXhfdHVwbGVfXzQ3KTsKKy0gIF9fcHl4X2NvZGVvYmpfXzQ4ID0gKFB5T2JqZWN0KilfX1B5eF9Q eUNvZGVfTmV3KDIsIDAsIDMsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2Vt cHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1 cGxlX180NywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9z X3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19tcHZfY2FsbGJhY2ssIDEx NTcsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX180OCkp IF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MMV9lcnJvcikKKy0KKy0gIC8qICIodHJlZSBmcmFn bWVudCkiOjEKKy0gKiBkZWYgX19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZChfX3B5eF90 eXBlLCBsb25nIF9fcHl4X2NoZWNrc3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgY2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKy0gKiAg ICAgY2RlZiBvYmplY3QgX19weXhfcmVzdWx0CistICovCistICBfX3B5eF90dXBsZV9fNDkgPSBQ eVR1cGxlX1BhY2soNSwgX19weXhfbl9zX3B5eF90eXBlLCBfX3B5eF9uX3NfcHl4X2NoZWNrc3Vt LCBfX3B5eF9uX3NfcHl4X3N0YXRlLCBfX3B5eF9uX3NfcHl4X1BpY2tsZUVycm9yLCBfX3B5eF9u X3NfcHl4X3Jlc3VsdCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzQ5KSkgX19QWVhfRVJS KDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX180OSk7 CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180OSk7CistICBfX3B5eF9jb2Rlb2JqX181 MCA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygzLCAwLCA1LCAwLCBDT19PUFRJTUlaRUR8 Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDksIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfa3Bfc19zdHJpbmdzb3VyY2UsIF9fcHl4X25fc19weXhfdW5waWNr bGVfRW5kT2ZGaWxlUmVhY2hlZCwgMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHko IV9fcHl4X2NvZGVvYmpfXzUwKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAg X19weXhfdHVwbGVfXzUxID0gUHlUdXBsZV9QYWNrKDUsIF9fcHl4X25fc19weXhfdHlwZSwgX19w eXhfbl9zX3B5eF9jaGVja3N1bSwgX19weXhfbl9zX3B5eF9zdGF0ZSwgX19weXhfbl9zX3B5eF9Q aWNrbGVFcnJvciwgX19weXhfbl9zX3B5eF9yZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1 cGxlX181MSkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJF RihfX3B5eF90dXBsZV9fNTEpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNTEpOwor LSAgX19weXhfY29kZW9ial9fNTIgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMywgMCwg NSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzUxLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3Nfc3RyaW5nc291cmNlLCBf X3B5eF9uX3NfcHl4X3VucGlja2xlX0lucHV0RGlzcGF0Y2gsIDEsIF9fcHl4X2VtcHR5X2J5dGVz KTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX181MikpIF9fUFlYX0VSUigxLCAxLCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fcHl4X3R1cGxlX181MyA9IFB5VHVwbGVfUGFjayg1LCBfX3B5eF9u X3NfcHl4X3R5cGUsIF9fcHl4X25fc19weXhfY2hlY2tzdW0sIF9fcHl4X25fc19weXhfc3RhdGUs IF9fcHl4X25fc19weXhfUGlja2xlRXJyb3IsIF9fcHl4X25fc19weXhfcmVzdWx0KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90dXBsZV9fNTMpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzUzKTsKKy0gIF9fUHl4X0dJVkVSRUYoX19w eXhfdHVwbGVfXzUzKTsKKy0gIF9fcHl4X2NvZGVvYmpfXzU0ID0gKFB5T2JqZWN0KilfX1B5eF9Q eUNvZGVfTmV3KDMsIDAsIDUsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2Vt cHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1 cGxlX181MywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9z X3N0cmluZ3NvdXJjZSwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAxLCBfX3B5 eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fNTQpKSBfX1BZWF9F UlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90dXBsZV9fNTUgPSBQeVR1cGxlX1Bh Y2soNSwgX19weXhfbl9zX3B5eF90eXBlLCBfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCBfX3B5eF9u X3NfcHl4X3N0YXRlLCBfX3B5eF9uX3NfcHl4X1BpY2tsZUVycm9yLCBfX3B5eF9uX3NfcHl4X3Jl c3VsdCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzU1KSkgX19QWVhfRVJSKDEsIDEsIF9f cHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX181NSk7CistICBfX1B5 eF9HSVZFUkVGKF9fcHl4X3R1cGxlX181NSk7CistICBfX3B5eF9jb2Rlb2JqX181NiA9IChQeU9i amVjdCopX19QeXhfUHlDb2RlX05ldygzLCAwLCA1LCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9D QUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF90dXBsZV9fNTUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfa3Bfc19zdHJpbmdzb3VyY2UsIF9fcHl4X25fc19weXhfdW5waWNrbGVfUHJvcGVy dHksIDEsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX181 NikpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3R1cGxlX181NyA9 IFB5VHVwbGVfUGFjayg1LCBfX3B5eF9uX3NfcHl4X3R5cGUsIF9fcHl4X25fc19weXhfY2hlY2tz dW0sIF9fcHl4X25fc19weXhfc3RhdGUsIF9fcHl4X25fc19weXhfUGlja2xlRXJyb3IsIF9fcHl4 X25fc19weXhfcmVzdWx0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNTcpKSBfX1BZWF9F UlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzU3 KTsKKy0gIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzU3KTsKKy0gIF9fcHl4X2NvZGVvYmpf XzU4ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDMsIDAsIDUsIDAsIENPX09QVElNSVpF RHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX181NywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3N0cmluZ3NvdXJjZSwgX19weXhfbl9zX3B5eF91bnBp Y2tsZV9FdmVudCwgMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2Nv ZGVvYmpfXzU4KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfdHVw bGVfXzU5ID0gUHlUdXBsZV9QYWNrKDUsIF9fcHl4X25fc19weXhfdHlwZSwgX19weXhfbl9zX3B5 eF9jaGVja3N1bSwgX19weXhfbl9zX3B5eF9zdGF0ZSwgX19weXhfbl9zX3B5eF9QaWNrbGVFcnJv ciwgX19weXhfbl9zX3B5eF9yZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX181OSkp IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90 dXBsZV9fNTkpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNTkpOworLSAgX19weXhf Y29kZW9ial9fNjAgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMywgMCwgNSwgMCwgQ09f T1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzU5LCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3Nfc3RyaW5nc291cmNlLCBfX3B5eF9uX3Nf cHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzYwKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gMDsKKy0g IF9fcHl4X0wxX2Vycm9yOjsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAg cmV0dXJuIC0xOworLX0KKy0KKy1zdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X0lu aXRHbG9iYWxzKHZvaWQpIHsKKy0gIGlmIChfX1B5eF9Jbml0U3RyaW5ncyhfX3B5eF9zdHJpbmdf dGFiKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcik7CistICBfX3B5eF9pbnRf MCA9IFB5SW50X0Zyb21Mb25nKDApOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8wKSkgX19QWVhf RVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfaW50XzEgPSBQeUludF9Gcm9tTG9u ZygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfMSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fcHl4X2ludF8zID0gUHlJbnRfRnJvbUxvbmcoMyk7IGlmICh1bmxpa2Vs eSghX19weXhfaW50XzMpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICBfX3B5 eF9pbnRfOSA9IFB5SW50X0Zyb21Mb25nKDkpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF85KSkg X19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfaW50XzMyID0gUHlJbnRf RnJvbUxvbmcoMzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8zMikpIF9fUFlYX0VSUigwLCAx LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X2ludF81NzEzMTY5ID0gUHlJbnRfRnJvbUxvbmco NTcxMzE2OUwpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF81NzEzMTY5KSkgX19QWVhfRVJSKDAs IDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfaW50XzkwOTU4MjYyID0gUHlJbnRfRnJvbUxv bmcoOTA5NTgyNjJMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfOTA5NTgyNjIpKSBfX1BZWF9F UlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF9pbnRfMTQyMDM2OTEwID0gUHlJbnRf RnJvbUxvbmcoMTQyMDM2OTEwTCk7IGlmICh1bmxpa2VseSghX19weXhfaW50XzE0MjAzNjkxMCkp IF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X2ludF8yMDA2ODgwNDEg PSBQeUludF9Gcm9tTG9uZygyMDA2ODgwNDFMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfMjAw Njg4MDQxKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfaW50XzIy MjQxOTE0OSA9IFB5SW50X0Zyb21Mb25nKDIyMjQxOTE0OUwpOyBpZiAodW5saWtlbHkoIV9fcHl4 X2ludF8yMjI0MTkxNDkpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICBfX3B5 eF9pbnRfMjI4ODIyMDUzID0gUHlJbnRfRnJvbUxvbmcoMjI4ODIyMDUzTCk7IGlmICh1bmxpa2Vs eSghX19weXhfaW50XzIyODgyMjA1MykpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fcHl4X2ludF9uZWdfMSA9IFB5SW50X0Zyb21Mb25nKC0xKTsgaWYgKHVubGlrZWx5KCFf X3B5eF9pbnRfbmVnXzEpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICByZXR1 cm4gMDsKKy0gIF9fcHl4X0wxX2Vycm9yOjsKKy0gIHJldHVybiAtMTsKKy19CistCistc3RhdGlj IENZVEhPTl9TTUFMTF9DT0RFIGludCBfX1B5eF9tb2Rpbml0X2dsb2JhbF9pbml0X2NvZGUodm9p ZCk7IC8qcHJvdG8qLworLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfbW9kaW5p dF92YXJpYWJsZV9leHBvcnRfY29kZSh2b2lkKTsgLypwcm90byovCistc3RhdGljIENZVEhPTl9T TUFMTF9DT0RFIGludCBfX1B5eF9tb2Rpbml0X2Z1bmN0aW9uX2V4cG9ydF9jb2RlKHZvaWQpOyAv KnByb3RvKi8KKy1zdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X21vZGluaXRfdHlw ZV9pbml0X2NvZGUodm9pZCk7IC8qcHJvdG8qLworLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBp bnQgX19QeXhfbW9kaW5pdF90eXBlX2ltcG9ydF9jb2RlKHZvaWQpOyAvKnByb3RvKi8KKy1zdGF0 aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X21vZGluaXRfdmFyaWFibGVfaW1wb3J0X2Nv ZGUodm9pZCk7IC8qcHJvdG8qLworLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhf bW9kaW5pdF9mdW5jdGlvbl9pbXBvcnRfY29kZSh2b2lkKTsgLypwcm90byovCistCistc3RhdGlj IGludCBfX1B5eF9tb2Rpbml0X2dsb2JhbF9pbml0X2NvZGUodm9pZCkgeworLSAgX19QeXhfUmVm TmFubnlEZWNsYXJhdGlvbnMKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX1B5eF9t b2Rpbml0X2dsb2JhbF9pbml0X2NvZGUiLCAwKTsKKy0gIC8qLS0tIEdsb2JhbCBpbml0IGNvZGUg LS0tKi8KKy0gIF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MgPSBQeV9O b25lOyBQeV9JTkNSRUYoUHlfTm9uZSk7CistICBfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fcmVwbHlfdXNlcmRhdGFzID0gUHlfTm9uZTsgUHlfSU5DUkVGKFB5X05vbmUpOworLSAgX19Q eXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gMDsKKy19CistCistc3RhdGlj IGludCBfX1B5eF9tb2Rpbml0X3ZhcmlhYmxlX2V4cG9ydF9jb2RlKHZvaWQpIHsKKy0gIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19Q eXhfbW9kaW5pdF92YXJpYWJsZV9leHBvcnRfY29kZSIsIDApOworLSAgLyotLS0gVmFyaWFibGUg ZXhwb3J0IGNvZGUgLS0tKi8KKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAg cmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBpbnQgX19QeXhfbW9kaW5pdF9mdW5jdGlvbl9leHBv cnRfY29kZSh2b2lkKSB7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9fUHl4X21vZGluaXRfZnVuY3Rpb25fZXhwb3J0X2NvZGUi LCAwKTsKKy0gIC8qLS0tIEZ1bmN0aW9uIGV4cG9ydCBjb2RlIC0tLSovCistICBfX1B5eF9SZWZO YW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJldHVybiAwOworLX0KKy0KKy1zdGF0aWMgaW50IF9f UHl4X21vZGluaXRfdHlwZV9pbml0X2NvZGUodm9pZCkgeworLSAgX19QeXhfUmVmTmFubnlEZWNs YXJhdGlvbnMKKy0gIGludCBfX3B5eF9saW5lbm8gPSAwOworLSAgY29uc3QgY2hhciAqX19weXhf ZmlsZW5hbWUgPSBOVUxMOworLSAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworLSAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoIl9fUHl4X21vZGluaXRfdHlwZV9pbml0X2NvZGUiLCAwKTsKKy0g IC8qLS0tIFR5cGUgaW5pdCBjb2RlIC0tLSovCistICBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZDsKKy0gIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZC5faW5pdCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBf X3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKiwgc3RydWN0 IG1wdl9ldmVudF9lbmRfZmlsZSAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVu ZE9mRmlsZVJlYWNoZWRfX2luaXQ7CistICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAx NTYsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQor LSAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZC50cF9w cmludCA9IDA7CistICAjZW5kaWYKKy0gIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZ VEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZC50cF9nZXRhdHRybyA9PSBQeU9i amVjdF9HZW5lcmljR2V0QXR0cikpIHsKKy0gICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRW5kT2ZGaWxlUmVhY2hlZC50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVy aWNHZXRBdHRyOworLSAgfQorLSAgaWYgKF9fUHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJf OXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkgX19QWVhfRVJSKDAs IDE1NiwgX19weXhfTDFfZXJyb3IpCistICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBf X3B5eF9uX3NfRW5kT2ZGaWxlUmVhY2hlZCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkgX19QWVhfRVJSKDAsIDE1Niwg X19weXhfTDFfZXJyb3IpCistICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9f cHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkgX19Q WVhfRVJSKDAsIDE1NiwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkOworLSAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfSW5wdXREaXNwYXRjaCA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0lucHV0RGlzcGF0Y2g7CistICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0lucHV0RGlzcGF0Y2guX2luaXQgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoICosIHN0cnVjdCBtcHZfZXZlbnRfc2Ny aXB0X2lucHV0X2Rpc3BhdGNoICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzSW5w dXREaXNwYXRjaF9faW5pdDsKKy0gIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2gpIDwgMCkgX19QWVhfRVJSKDAsIDE2OSwgX19w eXhfTDFfZXJyb3IpCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCistICBfX3B5 eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoLnRwX3ByaW50ID0gMDsK Ky0gICNlbmRpZgorLSAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9Q WVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0lucHV0RGlzcGF0Y2gudHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9JbnB1dERpc3BhdGNoLnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNHZXRB dHRyKSkgeworLSAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3Bh dGNoLnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7CistICB9Cist ICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0lu cHV0RGlzcGF0Y2gudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf SW5wdXREaXNwYXRjaCkgPCAwKSBfX1BZWF9FUlIoMCwgMTY5LCBfX3B5eF9MMV9lcnJvcikKKy0g IGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19JbnB1dERpc3BhdGNoLCAo UHlPYmplY3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfSW5wdXREaXNwYXRj aCkgPCAwKSBfX1BZWF9FUlIoMCwgMTY5LCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChfX1B5eF9z ZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf SW5wdXREaXNwYXRjaCkgPCAwKSBfX1BZWF9FUlIoMCwgMTY5LCBfX3B5eF9MMV9lcnJvcikKKy0g IF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9JbnB1dERpc3BhdGNoID0gJl9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0lucHV0RGlzcGF0Y2g7CistICBfX3B5eF92dGFi cHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlID0gJl9fcHl4X3Z0YWJsZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZTsKKy0gIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZS5faW5pdCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5 eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgKiwgc3RydWN0IG1wdl9ldmVu dF9sb2dfbWVzc2FnZSAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3Nh Z2VfX2luaXQ7CistICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Mb2dNZXNzYWdlKSA8IDApIF9fUFlYX0VSUigwLCAxODIsIF9fcHl4X0wxX2Vycm9y KQorLSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQorLSAgX19weXhfdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZS50cF9wcmludCA9IDA7CistICAjZW5kaWYKKy0g IGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkg JiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLnRw X2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2Fn ZS50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKy0gICAgX19weXhf dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZS50cF9nZXRhdHRybyA9IF9fUHl4 X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOworLSAgfQorLSAgaWYgKF9fUHl4X1NldFZ0YWJsZShf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLnRwX2RpY3QsIF9fcHl4 X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpIDwgMCkgX19QWVhfRVJS KDAsIDE4MiwgX19weXhfTDFfZXJyb3IpCistICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9t LCBfX3B5eF9uX3NfTG9nTWVzc2FnZSwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0xvZ01lc3NhZ2UpIDwgMCkgX19QWVhfRVJSKDAsIDE4MiwgX19weXhfTDFf ZXJyb3IpCistICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpIDwgMCkgX19QWVhfRVJSKDAsIDE4Miwg X19weXhfTDFfZXJyb3IpCistICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9n TWVzc2FnZSA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlOwor LSAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgPSAmX19weXhf dnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eTsKKy0gIF9fcHl4X3Z0YWJsZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkuX2luaXQgPSAoUHlPYmplY3QgKigqKShzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqLCBzdHJ1Y3QgbXB2 X2V2ZW50X3Byb3BlcnR5ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0 eV9faW5pdDsKKy0gIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5KSA8IDApIF9fUFlYX0VSUigwLCAyNDMsIF9fcHl4X0wxX2Vycm9yKQor LSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQorLSAgX19weXhfdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfcHJpbnQgPSAwOworLSAgI2VuZGlmCistICBpZiAo KENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxp a2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZGljdG9m ZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eS50cF9nZXRh dHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKy0gICAgX19weXhfdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9H ZW5lcmljR2V0QXR0cjsKKy0gIH0KKy0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpIDwgMCkgX19QWVhfRVJSKDAsIDI0MywgX19weXhf TDFfZXJyb3IpCistICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfUHJv cGVydHksIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eSkgPCAwKSBfX1BZWF9FUlIoMCwgMjQzLCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChfX1B5 eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUHJvcGVydHkpIDwgMCkgX19QWVhfRVJSKDAsIDI0MywgX19weXhfTDFfZXJyb3IpCistICBf X3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgPSAmX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHk7CistICBfX3B5eF92dGFicHRyXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FdmVudCA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50OworLSAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC5fZGF0 YSA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50ICosIHN0cnVjdCBtcHZfZXZlbnQgKikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfNUV2ZW50X19kYXRhOworLSAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudC5faW5pdCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X0V2ZW50ICosIHN0cnVjdCBtcHZfZXZlbnQgKiwgUHlPYmplY3QgKikpX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19pbml0OworLSAgaWYgKFB5VHlwZV9SZWFk eSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpIDwgMCkgX19QWVhfRVJS KDAsIDI1NiwgX19weXhfTDFfZXJyb3IpCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgw MEIxCistICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC50cF9wcmludCA9 IDA7CistICAjZW5kaWYKKy0gIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9V U0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50LnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworLSAg ICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC50cF9nZXRhdHRybyA9IF9f UHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOworLSAgfQorLSAgaWYgKF9fUHl4X1NldFZ0YWJs ZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC50cF9kaWN0LCBfX3B5eF92 dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCkgPCAwKSBfX1BZWF9FUlIoMCwgMjU2 LCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4 X25fc19FdmVudCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50KSA8IDApIF9fUFlYX0VSUigwLCAyNTYsIF9fcHl4X0wxX2Vycm9yKQorLSAgaWYgKF9f UHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCkgPCAwKSBfX1BZWF9FUlIoMCwgMjU2LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f cHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCA9ICZfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FdmVudDsKKy0gIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQgPSAmX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0OworLSAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0Ll9wcmVw X25vZGVfbGlzdCA9IChzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKiwgUHlPYmplY3QgKikpX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9saXN0OworLSAgX19weXhfdnRh YmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0Ll9wcmVwX25vZGVfbWFwID0gKHN0cnVj dCBtcHZfbm9kZV9saXN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dCAqLCBQeU9iamVjdCAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF9fcHJlcF9ub2RlX21hcDsKKy0gIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dC5fcHJlcF9uYXRpdmVfdmFsdWUgPSAoc3RydWN0IG1wdl9ub2RlICgqKShz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICosIFB5T2JqZWN0 ICosIFB5T2JqZWN0ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19w cmVwX25hdGl2ZV92YWx1ZTsKKy0gIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dC5fZnJlZV9uYXRpdmVfdmFsdWUgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICosIHN0cnVjdCBtcHZfbm9kZSkpX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX2ZyZWVfbmF0aXZlX3ZhbHVlOwor LSAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMzU5LCBfX3B5eF9MMV9lcnJvcikKKy0gICNpZiBQWV9W RVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKKy0gIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQudHBfcHJpbnQgPSAwOworLSAgI2VuZGlmCistICBpZiAoKENZVEhPTl9VU0Vf VFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxpa2VseSghX19weXhf dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQudHBfZ2V0YXR0cm8gPT0gUHlPYmpl Y3RfR2VuZXJpY0dldEF0dHIpKSB7CistICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cjsK Ky0gIH0KKy0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dC50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCAzNTksIF9fcHl4X0wxX2Vycm9yKQorLSAgaWYg KFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX0NvbnRleHQsIChQeU9iamVjdCAq KSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KSA8IDApIF9fUFlYX0VS UigwLCAzNTksIF9fcHl4X0wxX2Vycm9yKQorLSAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlP YmplY3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KSA8IDApIF9f UFlYX0VSUigwLCAzNTksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dDsKKy0gIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X09wZW5HTENvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDgyMiwgX19weXhfTDFfZXJy b3IpCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCistICBfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0LnRwX3ByaW50ID0gMDsKKy0gICNlbmRp ZgorLSAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9P S1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENv bnRleHQudHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9P cGVuR0xDb250ZXh0LnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgewor LSAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0LnRwX2dl dGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7CistICB9CistICBpZiAoUHlP YmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfT3BlbkdMQ29udGV4dCwgKFB5T2JqZWN0 ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENvbnRleHQpIDwgMCkg X19QWVhfRVJSKDAsIDgyMiwgX19weXhfTDFfZXJyb3IpCistICBpZiAoX19QeXhfc2V0dXBfcmVk dWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTENv bnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDgyMiwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF9w dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMQ29udGV4dCA9ICZfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xDb250ZXh0OworLSAgX19weXhfdnRhYnB0cl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXM7CistICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X19SZW5kZXJQYXJhbXMuYWRkX3ZvaWRwID0gKFB5T2JqZWN0ICooKikoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqLCBlbnVtIG1w dl9yZW5kZXJfcGFyYW1fdHlwZSwgdm9pZCAqLCBzdHJ1Y3QgX19weXhfb3B0X2FyZ3NfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfdm9pZHAgKl9fcHl4X29wdGlvbmFs X2FyZ3MpKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRf dm9pZHA7CistICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJh bXMuYWRkX2ludCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUsIGlu dCkpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF9pbnQ7 CistICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMuYWRk X3N0cmluZyA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGli c18zbXB2X19SZW5kZXJQYXJhbXMgKiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUsIGNoYXIg KikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF9zdHJp bmc7CistICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fUmVuZGVyUGFyYW1zKSA8IDApIF9fUFlYX0VSUigwLCA4ODEsIF9fcHl4X0wxX2Vycm9yKQor LSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQorLSAgX19weXhfdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9wcmludCA9IDA7CistICAjZW5kaWYKKy0g IGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkg JiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z LnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRl clBhcmFtcy50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKy0gICAg X19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9nZXRhdHRy byA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOworLSAgfQorLSAgaWYgKF9fUHl4X1Nl dFZ0YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zLnRw X2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMp IDwgMCkgX19QWVhfRVJSKDAsIDg4MSwgX19weXhfTDFfZXJyb3IpCistICBpZiAoUHlPYmplY3Rf U2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfUmVuZGVyUGFyYW1zLCAoUHlPYmplY3QgKikmX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcykgPCAwKSBfX1BZWF9F UlIoMCwgODgxLCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5 T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcykg PCAwKSBfX1BZWF9FUlIoMCwgODgxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zID0gJl9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXM7CistICBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gPSAmX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9SZW5kZXJGcmFtZUluZm87CistICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1JlbmRlckZyYW1lSW5mby5fZnJvbV9zdHJ1Y3QgPSAoUHlPYmplY3QgKigqKShzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKiwgc3Ry dWN0IG1wdl9yZW5kZXJfZnJhbWVfaW5mbyAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNVJlbmRlckZyYW1lSW5mb19fZnJvbV9zdHJ1Y3Q7CistICBpZiAoUHlUeXBlX1JlYWR5KCZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8pIDwgMCkgX19Q WVhfRVJSKDAsIDkyOCwgX19weXhfTDFfZXJyb3IpCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAw eDAzMDgwMEIxCistICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFt ZUluZm8udHBfcHJpbnQgPSAwOworLSAgI2VuZGlmCistICBpZiAoKENZVEhPTl9VU0VfVFlQRV9T TE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxpa2VseSghX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2RpY3RvZmZzZXQgJiYgX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2dldGF0dHJv ID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworLSAgICBfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8udHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVj dF9HZW5lcmljR2V0QXR0cjsKKy0gIH0KKy0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2RpY3QsIF9fcHl4X3Z0 YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbykgPCAwKSBfX1BZWF9F UlIoMCwgOTI4LCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5 T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZv KSA8IDApIF9fUFlYX0VSUigwLCA5MjgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfcHR5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyA9ICZfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm87CistICBpZiAoUHlUeXBlX1JlYWR5KCZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSA8IDApIF9fUFlY X0VSUigwLCA5MzcsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgw MzA4MDBCMQorLSAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dC50cF9wcmludCA9IDA7CistICAjZW5kaWYKKy0gIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RT ICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dC50cF9nZXRhdHRybyA9PSBQeU9i amVjdF9HZW5lcmljR2V0QXR0cikpIHsKKy0gICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUmVuZGVyQ29udGV4dC50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNH ZXRBdHRyOworLSAgfQorLSAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9z X1JlbmRlckNvbnRleHQsIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9SZW5kZXJDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCA5MzcsIF9fcHl4X0wxX2Vycm9y KQorLSAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCA5MzcsIF9f cHl4X0wxX2Vycm9yKQorLSAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckNvbnRleHQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dDsKKy0gIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRl eHQudHBfYmFzZSA9IF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250 ZXh0OworLSAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfT3BlbkdMUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMTEyMiwgX19weXhfTDFf ZXJyb3IpCistICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCistICBfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX3ByaW50ID0gMDsK Ky0gICNlbmRpZgorLSAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9Q WVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X09wZW5HTFJlbmRlckNvbnRleHQudHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2dldGF0dHJvID09IFB5T2JqZWN0 X0dlbmVyaWNHZXRBdHRyKSkgeworLSAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJp Y0dldEF0dHI7CistICB9CistICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9u X3NfT3BlbkdMUmVuZGVyQ29udGV4dCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDExMjIs IF9fcHl4X0wxX2Vycm9yKQorLSAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0KSA8IDAp IF9fUFlYX0VSUigwLCAxMTIyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3B0eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ID0gJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQ7CistICBpZiAoUHlUeXBlX1JlYWR5 KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19l cnJvcnMpIDwgMCkgX19QWVhfRVJSKDAsIDMxOCwgX19weXhfTDFfZXJyb3IpCistICAjaWYgUFlf VkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCistICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMudHBfcHJpbnQgPSAwOworLSAgI2VuZGlm CistICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09L VVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2Nv cGVfc3RydWN0X19fZXJyb3JzLnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzLnRwX2dldGF0dHJvID09IFB5 T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworLSAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMudHBfZ2V0YXR0cm8gPSBfX1B5eF9Q eU9iamVjdF9HZW5lcmljR2V0QXR0ck5vRGljdDsKKy0gIH0KKy0gIF9fcHl4X3B0eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgPSAmX19weXhfdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzOworLSAg X19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CistICByZXR1cm4gMDsKKy0gIF9fcHl4X0wx X2Vycm9yOjsKKy0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIC0x OworLX0KKy0KKy1zdGF0aWMgaW50IF9fUHl4X21vZGluaXRfdHlwZV9pbXBvcnRfY29kZSh2b2lk KSB7CistICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fUHl4X21vZGluaXRfdHlwZV9pbXBvcnRfY29kZSIsIDApOworLSAgLyotLS0g VHlwZSBpbXBvcnQgY29kZSAtLS0qLworLSAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 CistICByZXR1cm4gMDsKKy19CistCistc3RhdGljIGludCBfX1B5eF9tb2Rpbml0X3ZhcmlhYmxl X2ltcG9ydF9jb2RlKHZvaWQpIHsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCistICBf X1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19QeXhfbW9kaW5pdF92YXJpYWJsZV9pbXBvcnRf Y29kZSIsIDApOworLSAgLyotLS0gVmFyaWFibGUgaW1wb3J0IGNvZGUgLS0tKi8KKy0gIF9fUHl4 X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBp bnQgX19QeXhfbW9kaW5pdF9mdW5jdGlvbl9pbXBvcnRfY29kZSh2b2lkKSB7CistICBfX1B5eF9S ZWZOYW5ueURlY2xhcmF0aW9ucworLSAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fUHl4 X21vZGluaXRfZnVuY3Rpb25faW1wb3J0X2NvZGUiLCAwKTsKKy0gIC8qLS0tIEZ1bmN0aW9uIGlt cG9ydCBjb2RlIC0tLSovCistICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKy0gIHJl dHVybiAwOworLX0KKy0KKy0KKy0jaWZuZGVmIENZVEhPTl9OT19QWUlOSVRfRVhQT1JUCistI2Rl ZmluZSBfX1B5eF9QeU1PRElOSVRfRlVOQyBQeU1PRElOSVRfRlVOQworLSNlbGlmIFBZX01BSk9S X1ZFUlNJT04gPCAzCistI2lmZGVmIF9fY3BsdXNwbHVzCistI2RlZmluZSBfX1B5eF9QeU1PRElO SVRfRlVOQyBleHRlcm4gIkMiIHZvaWQKKy0jZWxzZQorLSNkZWZpbmUgX19QeXhfUHlNT0RJTklU X0ZVTkMgdm9pZAorLSNlbmRpZgorLSNlbHNlCistI2lmZGVmIF9fY3BsdXNwbHVzCistI2RlZmlu ZSBfX1B5eF9QeU1PRElOSVRfRlVOQyBleHRlcm4gIkMiIFB5T2JqZWN0ICoKKy0jZWxzZQorLSNk ZWZpbmUgX19QeXhfUHlNT0RJTklUX0ZVTkMgUHlPYmplY3QgKgorLSNlbmRpZgorLSNlbmRpZgor LQorLQorLSNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLV9fUHl4X1B5TU9ESU5JVF9GVU5DIGlu aXRtcHYodm9pZCkgQ1lUSE9OX1NNQUxMX0NPREU7IC8qcHJvdG8qLworLV9fUHl4X1B5TU9ESU5J VF9GVU5DIGluaXRtcHYodm9pZCkKKy0jZWxzZQorLV9fUHl4X1B5TU9ESU5JVF9GVU5DIFB5SW5p dF9tcHYodm9pZCkgQ1lUSE9OX1NNQUxMX0NPREU7IC8qcHJvdG8qLworLV9fUHl4X1B5TU9ESU5J VF9GVU5DIFB5SW5pdF9tcHYodm9pZCkKKy0jaWYgQ1lUSE9OX1BFUDQ4OV9NVUxUSV9QSEFTRV9J TklUCisteworLSAgcmV0dXJuIFB5TW9kdWxlRGVmX0luaXQoJl9fcHl4X21vZHVsZWRlZik7Cist fQorLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfY2hlY2tfc2luZ2xlX2ludGVy cHJldGVyKHZvaWQpIHsKKy0gICAgI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNzAwQTEKKy0g ICAgc3RhdGljIFBZX0lOVDY0X1QgbWFpbl9pbnRlcnByZXRlcl9pZCA9IC0xOworLSAgICBQWV9J TlQ2NF9UIGN1cnJlbnRfaWQgPSBQeUludGVycHJldGVyU3RhdGVfR2V0SUQoUHlUaHJlYWRTdGF0 ZV9HZXQoKS0+aW50ZXJwKTsKKy0gICAgaWYgKG1haW5faW50ZXJwcmV0ZXJfaWQgPT0gLTEpIHsK Ky0gICAgICAgIG1haW5faW50ZXJwcmV0ZXJfaWQgPSBjdXJyZW50X2lkOworLSAgICAgICAgcmV0 dXJuICh1bmxpa2VseShjdXJyZW50X2lkID09IC0xKSkgPyAtMSA6IDA7CistICAgIH0gZWxzZSBp ZiAodW5saWtlbHkobWFpbl9pbnRlcnByZXRlcl9pZCAhPSBjdXJyZW50X2lkKSkKKy0gICAgI2Vs c2UKKy0gICAgc3RhdGljIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqbWFpbl9pbnRlcnByZXRlciA9IE5V TEw7CistICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqY3VycmVudF9pbnRlcnByZXRlciA9IFB5VGhy ZWFkU3RhdGVfR2V0KCktPmludGVycDsKKy0gICAgaWYgKCFtYWluX2ludGVycHJldGVyKSB7Cist ICAgICAgICBtYWluX2ludGVycHJldGVyID0gY3VycmVudF9pbnRlcnByZXRlcjsKKy0gICAgfSBl bHNlIGlmICh1bmxpa2VseShtYWluX2ludGVycHJldGVyICE9IGN1cnJlbnRfaW50ZXJwcmV0ZXIp KQorLSAgICAjZW5kaWYKKy0gICAgeworLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorLSAgICAg ICAgICAgIFB5RXhjX0ltcG9ydEVycm9yLAorLSAgICAgICAgICAgICJJbnRlcnByZXRlciBjaGFu Z2UgZGV0ZWN0ZWQgLSB0aGlzIG1vZHVsZSBjYW4gb25seSBiZSBsb2FkZWQgaW50byBvbmUgaW50 ZXJwcmV0ZXIgcGVyIHByb2Nlc3MuIik7CistICAgICAgICByZXR1cm4gLTE7CistICAgIH0KKy0g ICAgcmV0dXJuIDA7CistfQorLXN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfY29w eV9zcGVjX3RvX21vZHVsZShQeU9iamVjdCAqc3BlYywgUHlPYmplY3QgKm1vZGRpY3QsIGNvbnN0 IGNoYXIqIGZyb21fbmFtZSwgY29uc3QgY2hhciogdG9fbmFtZSwgaW50IGFsbG93X25vbmUpIHsK Ky0gICAgUHlPYmplY3QgKnZhbHVlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzcGVjLCBmcm9t X25hbWUpOworLSAgICBpbnQgcmVzdWx0ID0gMDsKKy0gICAgaWYgKGxpa2VseSh2YWx1ZSkpIHsK Ky0gICAgICAgIGlmIChhbGxvd19ub25lIHx8IHZhbHVlICE9IFB5X05vbmUpIHsKKy0gICAgICAg ICAgICByZXN1bHQgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhtb2RkaWN0LCB0b19uYW1lLCB2YWx1 ZSk7CistICAgICAgICB9CistICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworLSAgICB9IGVsc2Ug aWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CistICAg ICAgICBQeUVycl9DbGVhcigpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgcmVzdWx0ID0gLTE7 CistICAgIH0KKy0gICAgcmV0dXJuIHJlc3VsdDsKKy19Cistc3RhdGljIENZVEhPTl9TTUFMTF9D T0RFIFB5T2JqZWN0KiBfX3B5eF9weW1vZF9jcmVhdGUoUHlPYmplY3QgKnNwZWMsIENZVEhPTl9V TlVTRUQgUHlNb2R1bGVEZWYgKmRlZikgeworLSAgICBQeU9iamVjdCAqbW9kdWxlID0gTlVMTCwg Km1vZGRpY3QsICptb2RuYW1lOworLSAgICBpZiAoX19QeXhfY2hlY2tfc2luZ2xlX2ludGVycHJl dGVyKCkpCistICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgaWYgKF9fcHl4X20pCistICAgICAg ICByZXR1cm4gX19QeXhfTmV3UmVmKF9fcHl4X20pOworLSAgICBtb2RuYW1lID0gUHlPYmplY3Rf R2V0QXR0clN0cmluZyhzcGVjLCAibmFtZSIpOworLSAgICBpZiAodW5saWtlbHkoIW1vZG5hbWUp KSBnb3RvIGJhZDsKKy0gICAgbW9kdWxlID0gUHlNb2R1bGVfTmV3T2JqZWN0KG1vZG5hbWUpOwor LSAgICBQeV9ERUNSRUYobW9kbmFtZSk7CistICAgIGlmICh1bmxpa2VseSghbW9kdWxlKSkgZ290 byBiYWQ7CistICAgIG1vZGRpY3QgPSBQeU1vZHVsZV9HZXREaWN0KG1vZHVsZSk7CistICAgIGlm ICh1bmxpa2VseSghbW9kZGljdCkpIGdvdG8gYmFkOworLSAgICBpZiAodW5saWtlbHkoX19QeXhf Y29weV9zcGVjX3RvX21vZHVsZShzcGVjLCBtb2RkaWN0LCAibG9hZGVyIiwgIl9fbG9hZGVyX18i LCAxKSA8IDApKSBnb3RvIGJhZDsKKy0gICAgaWYgKHVubGlrZWx5KF9fUHl4X2NvcHlfc3BlY190 b19tb2R1bGUoc3BlYywgbW9kZGljdCwgIm9yaWdpbiIsICJfX2ZpbGVfXyIsIDEpIDwgMCkpIGdv dG8gYmFkOworLSAgICBpZiAodW5saWtlbHkoX19QeXhfY29weV9zcGVjX3RvX21vZHVsZShzcGVj LCBtb2RkaWN0LCAicGFyZW50IiwgIl9fcGFja2FnZV9fIiwgMSkgPCAwKSkgZ290byBiYWQ7Cist ICAgIGlmICh1bmxpa2VseShfX1B5eF9jb3B5X3NwZWNfdG9fbW9kdWxlKHNwZWMsIG1vZGRpY3Qs ICJzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyIsICJfX3BhdGhfXyIsIDApIDwgMCkpIGdvdG8g YmFkOworLSAgICByZXR1cm4gbW9kdWxlOworLWJhZDoKKy0gICAgUHlfWERFQ1JFRihtb2R1bGUp OworLSAgICByZXR1cm4gTlVMTDsKKy19CistCistCistc3RhdGljIENZVEhPTl9TTUFMTF9DT0RF IGludCBfX3B5eF9weW1vZF9leGVjX21wdihQeU9iamVjdCAqX19weXhfcHlpbml0X21vZHVsZSkK Ky0jZW5kaWYKKy0jZW5kaWYKKy17CistICBQeU9iamVjdCAqX19weXhfdF8xID0gTlVMTDsKKy0g IFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfMzsKKy0gIFB5T2Jq ZWN0ICpfX3B5eF90XzQgPSBOVUxMOworLSAgaW50IF9fcHl4X3RfNTsKKy0gIFB5T2JqZWN0ICpf X3B5eF90XzYgPSBOVUxMOworLSAgUHlPYmplY3QgKl9fcHl4X3RfNyA9IE5VTEw7CistICBpbnQg X19weXhfbGluZW5vID0gMDsKKy0gIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsK Ky0gIGludCBfX3B5eF9jbGluZW5vID0gMDsKKy0gIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z CistICAjaWYgQ1lUSE9OX1BFUDQ4OV9NVUxUSV9QSEFTRV9JTklUCistICBpZiAoX19weXhfbSkg eworLSAgICBpZiAoX19weXhfbSA9PSBfX3B5eF9weWluaXRfbW9kdWxlKSByZXR1cm4gMDsKKy0g ICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgIk1vZHVsZSAnbXB2JyBoYXMg YWxyZWFkeSBiZWVuIGltcG9ydGVkLiBSZS1pbml0aWFsaXNhdGlvbiBpcyBub3Qgc3VwcG9ydGVk LiIpOworLSAgICByZXR1cm4gLTE7CistICB9CistICAjZWxpZiBQWV9NQUpPUl9WRVJTSU9OID49 IDMKKy0gIGlmIChfX3B5eF9tKSByZXR1cm4gX19QeXhfTmV3UmVmKF9fcHl4X20pOworLSAgI2Vu ZGlmCistICAjaWYgQ1lUSE9OX1JFRk5BTk5ZCistX19QeXhfUmVmTmFubnkgPSBfX1B5eF9SZWZO YW5ueUltcG9ydEFQSSgicmVmbmFubnkiKTsKKy1pZiAoIV9fUHl4X1JlZk5hbm55KSB7CistICBQ eUVycl9DbGVhcigpOworLSAgX19QeXhfUmVmTmFubnkgPSBfX1B5eF9SZWZOYW5ueUltcG9ydEFQ SSgiQ3l0aG9uLlJ1bnRpbWUucmVmbmFubnkiKTsKKy0gIGlmICghX19QeXhfUmVmTmFubnkpCist ICAgICAgUHlfRmF0YWxFcnJvcigiZmFpbGVkIHRvIGltcG9ydCAncmVmbmFubnknIG1vZHVsZSIp OworLX0KKy0jZW5kaWYKKy0gIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX1B5eF9QeU1P RElOSVRfRlVOQyBQeUluaXRfbXB2KHZvaWQpIiwgMCk7CistICBpZiAoX19QeXhfY2hlY2tfYmlu YXJ5X3ZlcnNpb24oKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKy0gICNp ZmRlZiBfX1B4eV9QeUZyYW1lX0luaXRpYWxpemVfT2Zmc2V0cworLSAgX19QeHlfUHlGcmFtZV9J bml0aWFsaXplX09mZnNldHMoKTsKKy0gICNlbmRpZgorLSAgX19weXhfZW1wdHlfdHVwbGUgPSBQ eVR1cGxlX05ldygwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9lbXB0eV90dXBsZSkpIF9fUFlYX0VS UigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X2VtcHR5X2J5dGVzID0gUHlCeXRlc19G cm9tU3RyaW5nQW5kU2l6ZSgiIiwgMCk7IGlmICh1bmxpa2VseSghX19weXhfZW1wdHlfYnl0ZXMp KSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF9lbXB0eV91bmljb2Rl ID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCIiLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF9lbXB0eV91bmljb2RlKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2lm ZGVmIF9fUHl4X0N5RnVuY3Rpb25fVVNFRAorLSAgaWYgKF9fcHl4X0N5RnVuY3Rpb25faW5pdCgp IDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2VuZGlmCistICAjaWZk ZWYgX19QeXhfRnVzZWRGdW5jdGlvbl9VU0VECistICBpZiAoX19weXhfRnVzZWRGdW5jdGlvbl9p bml0KCkgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICAjZW5kaWYKKy0g ICNpZmRlZiBfX1B5eF9Db3JvdXRpbmVfVVNFRAorLSAgaWYgKF9fcHl4X0Nvcm91dGluZV9pbml0 KCkgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICAjZW5kaWYKKy0gICNp ZmRlZiBfX1B5eF9HZW5lcmF0b3JfVVNFRAorLSAgaWYgKF9fcHl4X0dlbmVyYXRvcl9pbml0KCkg PCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICAjZW5kaWYKKy0gICNpZmRl ZiBfX1B5eF9Bc3luY0dlbl9VU0VECistICBpZiAoX19weXhfQXN5bmNHZW5faW5pdCgpIDwgMCkg X19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2VuZGlmCistICAjaWZkZWYgX19Q eXhfU3RvcEFzeW5jSXRlcmF0aW9uX1VTRUQKKy0gIGlmIChfX3B5eF9TdG9wQXN5bmNJdGVyYXRp b25faW5pdCgpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2VuZGlm CistICAvKi0tLSBMaWJyYXJ5IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAtLS0qLworLSAgLyotLS0g VGhyZWFkcyBpbml0aWFsaXphdGlvbiBjb2RlIC0tLSovCistICAjaWYgZGVmaW5lZChfX1BZWF9G T1JDRV9JTklUX1RIUkVBRFMpICYmIF9fUFlYX0ZPUkNFX0lOSVRfVEhSRUFEUworLSAgI2lmZGVm IFdJVEhfVEhSRUFEIC8qIFB5dGhvbiBidWlsZCB3aXRoIHRocmVhZGluZyBzdXBwb3J0PyAqLwor LSAgUHlFdmFsX0luaXRUaHJlYWRzKCk7CistICAjZW5kaWYKKy0gICNlbmRpZgorLSAgLyotLS0g TW9kdWxlIGNyZWF0aW9uIGNvZGUgLS0tKi8KKy0gICNpZiBDWVRIT05fUEVQNDg5X01VTFRJX1BI QVNFX0lOSVQKKy0gIF9fcHl4X20gPSBfX3B5eF9weWluaXRfbW9kdWxlOworLSAgUHlfSU5DUkVG KF9fcHl4X20pOworLSAgI2Vsc2UKKy0gICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLSAgX19w eXhfbSA9IFB5X0luaXRNb2R1bGU0KCJtcHYiLCBfX3B5eF9tZXRob2RzLCBfX3B5eF9rX3B5bXB2 X1B5dGhvbl93cmFwcGVyX2Zvcl9saWJtcHYsIDAsIFBZVEhPTl9BUElfVkVSU0lPTik7IFB5X1hJ TkNSRUYoX19weXhfbSk7CistICAjZWxzZQorLSAgX19weXhfbSA9IFB5TW9kdWxlX0NyZWF0ZSgm X19weXhfbW9kdWxlZGVmKTsKKy0gICNlbmRpZgorLSAgaWYgKHVubGlrZWx5KCFfX3B5eF9tKSkg X19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2VuZGlmCistICBfX3B5eF9kID0g UHlNb2R1bGVfR2V0RGljdChfX3B5eF9tKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9kKSkgX19QWVhf RVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgUHlfSU5DUkVGKF9fcHl4X2QpOworLSAgX19w eXhfYiA9IFB5SW1wb3J0X0FkZE1vZHVsZShfX1B5eF9CVUlMVElOX01PRFVMRV9OQU1FKTsgaWYg KHVubGlrZWx5KCFfX3B5eF9iKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAg UHlfSU5DUkVGKF9fcHl4X2IpOworLSAgX19weXhfY3l0aG9uX3J1bnRpbWUgPSBQeUltcG9ydF9B ZGRNb2R1bGUoKGNoYXIgKikgImN5dGhvbl9ydW50aW1lIik7IGlmICh1bmxpa2VseSghX19weXhf Y3l0aG9uX3J1bnRpbWUpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICBQeV9J TkNSRUYoX19weXhfY3l0aG9uX3J1bnRpbWUpOworLSAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJp bmcoX19weXhfbSwgIl9fYnVpbHRpbnNfXyIsIF9fcHl4X2IpIDwgMCkgX19QWVhfRVJSKDAsIDEs IF9fcHl4X0wxX2Vycm9yKTsKKy0gIC8qLS0tIEluaXRpYWxpemUgdmFyaW91cyBnbG9iYWwgY29u c3RhbnRzIGV0Yy4gLS0tKi8KKy0gIGlmIChfX1B5eF9Jbml0R2xvYmFscygpIDwgMCkgX19QWVhf RVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzICYm IChfX1BZWF9ERUZBVUxUX1NUUklOR19FTkNPRElOR19JU19BU0NJSSB8fCBfX1BZWF9ERUZBVUxU X1NUUklOR19FTkNPRElOR19JU19ERUZBVUxUKQorLSAgaWYgKF9fUHl4X2luaXRfc3lzX2dldGRl ZmF1bHRlbmNvZGluZ19wYXJhbXMoKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJv cikKKy0gICNlbmRpZgorLSAgaWYgKF9fcHl4X21vZHVsZV9pc19tYWluX3ZpZGN1dHRlcl9fbGli c19fbXB2KSB7CistICAgIGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19u YW1lLCBfX3B5eF9uX3NfbWFpbikgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3Ip CistICB9CistICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICB7CistICAgIFB5T2JqZWN0 ICptb2R1bGVzID0gUHlJbXBvcnRfR2V0TW9kdWxlRGljdCgpOyBpZiAodW5saWtlbHkoIW1vZHVs ZXMpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICAgIGlmICghUHlEaWN0X0dl dEl0ZW1TdHJpbmcobW9kdWxlcywgInZpZGN1dHRlci5saWJzLm1wdiIpKSB7CistICAgICAgaWYg KHVubGlrZWx5KFB5RGljdF9TZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJ2aWRjdXR0ZXIubGlicy5t cHYiLCBfX3B5eF9tKSA8IDApKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICAg IH0KKy0gIH0KKy0gICNlbmRpZgorLSAgLyotLS0gQnVpbHRpbiBpbml0IGNvZGUgLS0tKi8KKy0g IGlmIChfX1B5eF9Jbml0Q2FjaGVkQnVpbHRpbnMoKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5 eF9MMV9lcnJvcikKKy0gIC8qLS0tIENvbnN0YW50cyBpbml0IGNvZGUgLS0tKi8KKy0gIGlmIChf X1B5eF9Jbml0Q2FjaGVkQ29uc3RhbnRzKCkgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFf ZXJyb3IpCistICAvKi0tLSBHbG9iYWwgdHlwZS9mdW5jdGlvbiBpbml0IGNvZGUgLS0tKi8KKy0g ICh2b2lkKV9fUHl4X21vZGluaXRfZ2xvYmFsX2luaXRfY29kZSgpOworLSAgKHZvaWQpX19QeXhf bW9kaW5pdF92YXJpYWJsZV9leHBvcnRfY29kZSgpOworLSAgKHZvaWQpX19QeXhfbW9kaW5pdF9m dW5jdGlvbl9leHBvcnRfY29kZSgpOworLSAgaWYgKHVubGlrZWx5KF9fUHl4X21vZGluaXRfdHlw ZV9pbml0X2NvZGUoKSA8IDApKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICAo dm9pZClfX1B5eF9tb2Rpbml0X3R5cGVfaW1wb3J0X2NvZGUoKTsKKy0gICh2b2lkKV9fUHl4X21v ZGluaXRfdmFyaWFibGVfaW1wb3J0X2NvZGUoKTsKKy0gICh2b2lkKV9fUHl4X21vZGluaXRfZnVu Y3Rpb25faW1wb3J0X2NvZGUoKTsKKy0gIC8qLS0tIEV4ZWN1dGlvbiBjb2RlIC0tLSovCistICAj aWYgZGVmaW5lZChfX1B5eF9HZW5lcmF0b3JfVVNFRCkgfHwgZGVmaW5lZChfX1B5eF9Db3JvdXRp bmVfVVNFRCkKKy0gIGlmIChfX1B5eF9wYXRjaF9hYmMoKSA8IDApIF9fUFlYX0VSUigwLCAxLCBf X3B5eF9MMV9lcnJvcikKKy0gICNlbmRpZgorK3N0YXRpYyBfX1B5eF9TdHJpbmdUYWJFbnRyeSBf X3B5eF9zdHJpbmdfdGFiW10gPSB7CisrICB7Jl9fcHl4X2twX3NfMF8zXzAsIF9fcHl4X2tfMF8z XzAsIHNpemVvZihfX3B5eF9rXzBfM18wKSwgMCwgMCwgMSwgMH0sCisrICB7Jl9fcHl4X25fc19B UElfT1BFTkdMLCBfX3B5eF9rX0FQSV9PUEVOR0wsIHNpemVvZihfX3B5eF9rX0FQSV9PUEVOR0wp LCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfa3Bfc19BbmRyZV9ELCBfX3B5eF9rX0FuZHJlX0Qs IHNpemVvZihfX3B5eF9rX0FuZHJlX0QpLCAwLCAwLCAxLCAwfSwKKysgIHsmX19weXhfbl9zX0NB UElfTUFKT1IsIF9fcHl4X2tfQ0FQSV9NQUpPUiwgc2l6ZW9mKF9fcHl4X2tfQ0FQSV9NQUpPUiks IDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfQ0FQSV9NSU5PUiwgX19weXhfa19DQVBJX01J Tk9SLCBzaXplb2YoX19weXhfa19DQVBJX01JTk9SKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4 X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfa19DYWxsYmFja1RocmVhZCwgc2l6ZW9mKF9fcHl4 X2tfQ2FsbGJhY2tUaHJlYWQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX0NhbGxiYWNr VGhyZWFkX19faW5pdCwgX19weXhfa19DYWxsYmFja1RocmVhZF9fX2luaXQsIHNpemVvZihfX3B5 eF9rX0NhbGxiYWNrVGhyZWFkX19faW5pdCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nf Q2FsbGJhY2tUaHJlYWRfY2FsbCwgX19weXhfa19DYWxsYmFja1RocmVhZF9jYWxsLCBzaXplb2Yo X19weXhfa19DYWxsYmFja1RocmVhZF9jYWxsKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25f c19DYWxsYmFja1RocmVhZF9tcHZfY2FsbGJhY2ssIF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfbXB2 X2NhbGxiYWNrLCBzaXplb2YoX19weXhfa19DYWxsYmFja1RocmVhZF9tcHZfY2FsbGJhY2spLCAw LCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX3J1biwgX19weXhfa19D YWxsYmFja1RocmVhZF9ydW4sIHNpemVvZihfX3B5eF9rX0NhbGxiYWNrVGhyZWFkX3J1biksIDAs IDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWRfc2V0LCBfX3B5eF9rX0Nh bGxiYWNrVGhyZWFkX3NldCwgc2l6ZW9mKF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRfc2V0KSwgMCwg MCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19DYWxsYmFja1RocmVhZF9zaHV0ZG93biwgX19weXhf a19DYWxsYmFja1RocmVhZF9zaHV0ZG93biwgc2l6ZW9mKF9fcHl4X2tfQ2FsbGJhY2tUaHJlYWRf c2h1dGRvd24pLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX0NvbnRleHQsIF9fcHl4X2tf Q29udGV4dCwgc2l6ZW9mKF9fcHl4X2tfQ29udGV4dCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5 eF9rcF9zX0NvbnRleHRfY3JlYXRpb25fZXJyb3IsIF9fcHl4X2tfQ29udGV4dF9jcmVhdGlvbl9l cnJvciwgc2l6ZW9mKF9fcHl4X2tfQ29udGV4dF9jcmVhdGlvbl9lcnJvciksIDAsIDAsIDEsIDB9 LAorKyAgeyZfX3B5eF9uX3NfRU9GUmVhc29ucywgX19weXhfa19FT0ZSZWFzb25zLCBzaXplb2Yo X19weXhfa19FT0ZSZWFzb25zKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19FbmRPZkZp bGVSZWFjaGVkLCBfX3B5eF9rX0VuZE9mRmlsZVJlYWNoZWQsIHNpemVvZihfX3B5eF9rX0VuZE9m RmlsZVJlYWNoZWQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX0Vycm9ycywgX19weXhf a19FcnJvcnMsIHNpemVvZihfX3B5eF9rX0Vycm9ycyksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5 eF9uX3NfRXZlbnQsIF9fcHl4X2tfRXZlbnQsIHNpemVvZihfX3B5eF9rX0V2ZW50KSwgMCwgMCwg MSwgMX0sCisrICB7Jl9fcHl4X25fc19FdmVudHMsIF9fcHl4X2tfRXZlbnRzLCBzaXplb2YoX19w eXhfa19FdmVudHMpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX0ltcG9ydEVycm9yLCBf X3B5eF9rX0ltcG9ydEVycm9yLCBzaXplb2YoX19weXhfa19JbXBvcnRFcnJvciksIDAsIDAsIDEs IDF9LAorKyAgeyZfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDA1LCBf X3B5eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDA1LCBzaXplb2YoX19weXhfa19J bmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHgwNSksIDAsIDAsIDEsIDB9LAorKyAgeyZfX3B5 eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weDU2LCBfX3B5eF9rX0luY29tcGF0 aWJsZV9jaGVja3N1bXNfc192c18weDU2LCBzaXplb2YoX19weXhfa19JbmNvbXBhdGlibGVfY2hl Y2tzdW1zX3NfdnNfMHg1NiksIDAsIDAsIDEsIDB9LAorKyAgeyZfX3B5eF9rcF9zX0luY29tcGF0 aWJsZV9jaGVja3N1bXNfc192c18weDg3LCBfX3B5eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNf c192c18weDg3LCBzaXplb2YoX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHg4 NyksIDAsIDAsIDEsIDB9LAorKyAgeyZfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNf c192c18weGQ0LCBfX3B5eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGQ0LCBzaXpl b2YoX19weXhfa19JbmNvbXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHhkNCksIDAsIDAsIDEsIDB9 LAorKyAgeyZfX3B5eF9rcF9zX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGRhLCBfX3B5 eF9rX0luY29tcGF0aWJsZV9jaGVja3N1bXNfc192c18weGRhLCBzaXplb2YoX19weXhfa19JbmNv bXBhdGlibGVfY2hlY2tzdW1zX3NfdnNfMHhkYSksIDAsIDAsIDEsIDB9LAorKyAgeyZfX3B5eF9r cF9zX0tub3duX3Bvc3NpYmxlX3ZhbHVlc19mb3JfRW5kT2ZGLCBfX3B5eF9rX0tub3duX3Bvc3Np YmxlX3ZhbHVlc19mb3JfRW5kT2ZGLCBzaXplb2YoX19weXhfa19Lbm93bl9wb3NzaWJsZV92YWx1 ZXNfZm9yX0VuZE9mRiksIDAsIDAsIDEsIDB9LAorKyAgeyZfX3B5eF9uX3NfTG9nTGV2ZWxzLCBf X3B5eF9rX0xvZ0xldmVscywgc2l6ZW9mKF9fcHl4X2tfTG9nTGV2ZWxzKSwgMCwgMCwgMSwgMX0s CisrICB7Jl9fcHl4X25fc19Mb2dNZXNzYWdlLCBfX3B5eF9rX0xvZ01lc3NhZ2UsIHNpemVvZihf X3B5eF9rX0xvZ01lc3NhZ2UpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX01JTl9DQVBJ X01JTk9SLCBfX3B5eF9rX01JTl9DQVBJX01JTk9SLCBzaXplb2YoX19weXhfa19NSU5fQ0FQSV9N SU5PUiksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfTVBWRXJyb3IsIF9fcHl4X2tfTVBW RXJyb3IsIHNpemVvZihfX3B5eF9rX01QVkVycm9yKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4 X25fc19NUFZFcnJvcl9fX2luaXQsIF9fcHl4X2tfTVBWRXJyb3JfX19pbml0LCBzaXplb2YoX19w eXhfa19NUFZFcnJvcl9fX2luaXQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX09wZW5H TFJlbmRlckNvbnRleHQsIF9fcHl4X2tfT3BlbkdMUmVuZGVyQ29udGV4dCwgc2l6ZW9mKF9fcHl4 X2tfT3BlbkdMUmVuZGVyQ29udGV4dCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfUGlj a2xlRXJyb3IsIF9fcHl4X2tfUGlja2xlRXJyb3IsIHNpemVvZihfX3B5eF9rX1BpY2tsZUVycm9y KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19Qcm9wZXJ0eSwgX19weXhfa19Qcm9wZXJ0 eSwgc2l6ZW9mKF9fcHl4X2tfUHJvcGVydHkpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9z X1B5TVBWRXJyb3IsIF9fcHl4X2tfUHlNUFZFcnJvciwgc2l6ZW9mKF9fcHl4X2tfUHlNUFZFcnJv ciksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfUkVRVUlSRURfQ0FQSV9NQUpPUiwgX19w eXhfa19SRVFVSVJFRF9DQVBJX01BSk9SLCBzaXplb2YoX19weXhfa19SRVFVSVJFRF9DQVBJX01B Sk9SKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19SZW5kZXJDb250ZXh0LCBfX3B5eF9r X1JlbmRlckNvbnRleHQsIHNpemVvZihfX3B5eF9rX1JlbmRlckNvbnRleHQpLCAwLCAwLCAxLCAx fSwKKysgIHsmX19weXhfbl9zX1JlbmRlclBhcmFtcywgX19weXhfa19SZW5kZXJQYXJhbXMsIHNp emVvZihfX3B5eF9rX1JlbmRlclBhcmFtcyksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9rcF9z X1JlbmRlclBhcmFtc19vdmVyZmxvdywgX19weXhfa19SZW5kZXJQYXJhbXNfb3ZlcmZsb3csIHNp emVvZihfX3B5eF9rX1JlbmRlclBhcmFtc19vdmVyZmxvdyksIDAsIDAsIDEsIDB9LAorKyAgeyZf X3B5eF9uX3NfUmVwbHlVc2VyRGF0YSwgX19weXhfa19SZXBseVVzZXJEYXRhLCBzaXplb2YoX19w eXhfa19SZXBseVVzZXJEYXRhKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19SZXBseVVz ZXJEYXRhX19faW5pdCwgX19weXhfa19SZXBseVVzZXJEYXRhX19faW5pdCwgc2l6ZW9mKF9fcHl4 X2tfUmVwbHlVc2VyRGF0YV9fX2luaXQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX1Jl cGx5VXNlckRhdGFfYWRkLCBfX3B5eF9rX1JlcGx5VXNlckRhdGFfYWRkLCBzaXplb2YoX19weXhf a19SZXBseVVzZXJEYXRhX2FkZCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfUmVwbHlV c2VyRGF0YV9yZW1vdmUsIF9fcHl4X2tfUmVwbHlVc2VyRGF0YV9yZW1vdmUsIHNpemVvZihfX3B5 eF9rX1JlcGx5VXNlckRhdGFfcmVtb3ZlKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19T ZW1hcGhvcmUsIF9fcHl4X2tfU2VtYXBob3JlLCBzaXplb2YoX19weXhfa19TZW1hcGhvcmUpLCAw LCAwLCAxLCAxfSwKKysgIHsmX19weXhfa3Bfc19TZXRfb2Zfa25vd25fZXJyb3JfY29kZXNfZnJv bV9NcCwgX19weXhfa19TZXRfb2Zfa25vd25fZXJyb3JfY29kZXNfZnJvbV9NcCwgc2l6ZW9mKF9f cHl4X2tfU2V0X29mX2tub3duX2Vycm9yX2NvZGVzX2Zyb21fTXApLCAwLCAwLCAxLCAwfSwKKysg IHsmX19weXhfa3Bfc19TZXRfb2Zfa25vd25fdmFsdWVzX2Zvcl9FdmVudF9pZCwgX19weXhfa19T ZXRfb2Zfa25vd25fdmFsdWVzX2Zvcl9FdmVudF9pZCwgc2l6ZW9mKF9fcHl4X2tfU2V0X29mX2tu b3duX3ZhbHVlc19mb3JfRXZlbnRfaWQpLCAwLCAwLCAxLCAwfSwKKysgIHsmX19weXhfbl9zX1Ro cmVhZCwgX19weXhfa19UaHJlYWQsIHNpemVvZihfX3B5eF9rX1RocmVhZCksIDAsIDAsIDEsIDF9 LAorKyAgeyZfX3B5eF9uX3NfVHlwZUVycm9yLCBfX3B5eF9rX1R5cGVFcnJvciwgc2l6ZW9mKF9f cHl4X2tfVHlwZUVycm9yKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19VUERBVEVfRlJB TUUsIF9fcHl4X2tfVVBEQVRFX0ZSQU1FLCBzaXplb2YoX19weXhfa19VUERBVEVfRlJBTUUpLCAw LCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX1VuaWNvZGVEZWNvZGVFcnJvciwgX19weXhfa19V bmljb2RlRGVjb2RlRXJyb3IsIHNpemVvZihfX3B5eF9rX1VuaWNvZGVEZWNvZGVFcnJvciksIDAs IDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfVW5pY29kZUVuY29kZUVycm9yLCBfX3B5eF9rX1Vu aWNvZGVFbmNvZGVFcnJvciwgc2l6ZW9mKF9fcHl4X2tfVW5pY29kZUVuY29kZUVycm9yKSwgMCwg MCwgMSwgMX0sCisrICB7Jl9fcHl4X2twX3NfVW5rbm93bl9hcGlfdHlwZV9yLCBfX3B5eF9rX1Vu a25vd25fYXBpX3R5cGVfciwgc2l6ZW9mKF9fcHl4X2tfVW5rbm93bl9hcGlfdHlwZV9yKSwgMCwg MCwgMSwgMH0sCisrICB7Jl9fcHl4X2twX3NfVW5rbm93bl9vcl9pbnZhbGlkX3BvaW50ZXJfb2Jq ZWMsIF9fcHl4X2tfVW5rbm93bl9vcl9pbnZhbGlkX3BvaW50ZXJfb2JqZWMsIHNpemVvZihfX3B5 eF9rX1Vua25vd25fb3JfaW52YWxpZF9wb2ludGVyX29iamVjKSwgMCwgMCwgMSwgMH0sCisrICB7 Jl9fcHl4X25fc19hYm9ydGVkLCBfX3B5eF9rX2Fib3J0ZWQsIHNpemVvZihfX3B5eF9rX2Fib3J0 ZWQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2FjcXVpcmUsIF9fcHl4X2tfYWNxdWly ZSwgc2l6ZW9mKF9fcHl4X2tfYWNxdWlyZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nf YWRkLCBfX3B5eF9rX2FkZCwgc2l6ZW9mKF9fcHl4X2tfYWRkKSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19hZHZhbmNlZF9jb250cm9sLCBfX3B5eF9rX2FkdmFuY2VkX2NvbnRyb2wsIHNp emVvZihfX3B5eF9rX2FkdmFuY2VkX2NvbnRyb2wpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhf bl9zX2FvX2luaXRfZmFpbGVkLCBfX3B5eF9rX2FvX2luaXRfZmFpbGVkLCBzaXplb2YoX19weXhf a19hb19pbml0X2ZhaWxlZCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfYXBpX3R5cGUs IF9fcHl4X2tfYXBpX3R5cGUsIHNpemVvZihfX3B5eF9rX2FwaV90eXBlKSwgMCwgMCwgMSwgMX0s CisrICB7Jl9fcHl4X25fc19hcHBlbmQsIF9fcHl4X2tfYXBwZW5kLCBzaXplb2YoX19weXhfa19h cHBlbmQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2FzeW5jaHJvbm91cywgX19weXhf a19hc3luY2hyb25vdXMsIHNpemVvZihfX3B5eF9rX2FzeW5jaHJvbm91cyksIDAsIDAsIDEsIDF9 LAorKyAgeyZfX3B5eF9uX3NfYXRvbWljX3JlcXVlc3RfcHRyLCBfX3B5eF9rX2F0b21pY19yZXF1 ZXN0X3B0ciwgc2l6ZW9mKF9fcHl4X2tfYXRvbWljX3JlcXVlc3RfcHRyKSwgMCwgMCwgMSwgMX0s CisrICB7Jl9fcHl4X25fc19hdWRpb19yZWNvbmZpZywgX19weXhfa19hdWRpb19yZWNvbmZpZywg c2l6ZW9mKF9fcHl4X2tfYXVkaW9fcmVjb25maWcpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhf bl9zX2F1dGhvciwgX19weXhfa19hdXRob3IsIHNpemVvZihfX3B5eF9rX2F1dGhvciksIDAsIDAs IDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfYmxvY2tfZm9yX3RhcmdldF90aW1lLCBfX3B5eF9rX2Js b2NrX2Zvcl90YXJnZXRfdGltZSwgc2l6ZW9mKF9fcHl4X2tfYmxvY2tfZm9yX3RhcmdldF90aW1l KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19ibG9ja192c3luYywgX19weXhfa19ibG9j a192c3luYywgc2l6ZW9mKF9fcHl4X2tfYmxvY2tfdnN5bmMpLCAwLCAwLCAxLCAxfSwKKysgIHsm X19weXhfbl9zX2NhbGwsIF9fcHl4X2tfY2FsbCwgc2l6ZW9mKF9fcHl4X2tfY2FsbCksIDAsIDAs IDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfY2FsbGJhY2ssIF9fcHl4X2tfY2FsbGJhY2ssIHNpemVv ZihfX3B5eF9rX2NhbGxiYWNrKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19jbGllbnRf bWVzc2FnZSwgX19weXhfa19jbGllbnRfbWVzc2FnZSwgc2l6ZW9mKF9fcHl4X2tfY2xpZW50X21l c3NhZ2UpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2NsaW5lX2luX3RyYWNlYmFjaywg X19weXhfa19jbGluZV9pbl90cmFjZWJhY2ssIHNpemVvZihfX3B5eF9rX2NsaW5lX2luX3RyYWNl YmFjayksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfY2xvc2UsIF9fcHl4X2tfY2xvc2Us IHNpemVvZihfX3B5eF9rX2Nsb3NlKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19jb2Rl LCBfX3B5eF9rX2NvZGUsIHNpemVvZihfX3B5eF9rX2NvZGUpLCAwLCAwLCAxLCAxfSwKKysgIHsm X19weXhfbl9zX2NvbW1hbmRfZXJyb3IsIF9fcHl4X2tfY29tbWFuZF9lcnJvciwgc2l6ZW9mKF9f cHl4X2tfY29tbWFuZF9lcnJvciksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfY29tbWFu ZF9yZXBseSwgX19weXhfa19jb21tYW5kX3JlcGx5LCBzaXplb2YoX19weXhfa19jb21tYW5kX3Jl cGx5KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19jb25uZWN0b3JfaWQsIF9fcHl4X2tf Y29ubmVjdG9yX2lkLCBzaXplb2YoX19weXhfa19jb25uZWN0b3JfaWQpLCAwLCAwLCAxLCAxfSwK KysgIHsmX19weXhfbl9zX2NvdW50ZXIsIF9fcHl4X2tfY291bnRlciwgc2l6ZW9mKF9fcHl4X2tf Y291bnRlciksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfY3J0Y19pZCwgX19weXhfa19j cnRjX2lkLCBzaXplb2YoX19weXhfa19jcnRjX2lkKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4 X25fc19kYWVtb24sIF9fcHl4X2tfZGFlbW9uLCBzaXplb2YoX19weXhfa19kYWVtb24pLCAwLCAw LCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2RhdGEsIF9fcHl4X2tfZGF0YSwgc2l6ZW9mKF9fcHl4 X2tfZGF0YSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZGVidWcsIF9fcHl4X2tfZGVi dWcsIHNpemVvZihfX3B5eF9rX2RlYnVnKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19k ZWNvZGUsIF9fcHl4X2tfZGVjb2RlLCBzaXplb2YoX19weXhfa19kZWNvZGUpLCAwLCAwLCAxLCAx fSwKKysgIHsmX19weXhfbl9zX2RlZmF1bHQsIF9fcHl4X2tfZGVmYXVsdCwgc2l6ZW9mKF9fcHl4 X2tfZGVmYXVsdCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZGVwdGgsIF9fcHl4X2tf ZGVwdGgsIHNpemVvZihfX3B5eF9rX2RlcHRoKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25f c19kaWN0LCBfX3B5eF9rX2RpY3QsIHNpemVvZihfX3B5eF9rX2RpY3QpLCAwLCAwLCAxLCAxfSwK KysgIHsmX19weXhfbl9zX2RvYywgX19weXhfa19kb2MsIHNpemVvZihfX3B5eF9rX2RvYyksIDAs IDAsIDEsIDF9LAorKyAgeyZfX3B5eF9rcF9zX2RybU1vZGVBdG9taWNSZXEsIF9fcHl4X2tfZHJt TW9kZUF0b21pY1JlcSwgc2l6ZW9mKF9fcHl4X2tfZHJtTW9kZUF0b21pY1JlcSksIDAsIDAsIDEs IDB9LAorKyAgeyZfX3B5eF9uX3NfZHJtX2Rpc3BsYXksIF9fcHl4X2tfZHJtX2Rpc3BsYXksIHNp emVvZihfX3B5eF9rX2RybV9kaXNwbGF5KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19k cm1fb3NkX3NpemUsIF9fcHl4X2tfZHJtX29zZF9zaXplLCBzaXplb2YoX19weXhfa19kcm1fb3Nk X3NpemUpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2UsIF9fcHl4X2tfZSwgc2l6ZW9m KF9fcHl4X2tfZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZV9pLCBfX3B5eF9rX2Vf aSwgc2l6ZW9mKF9fcHl4X2tfZV9pKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19lbmFi bGUsIF9fcHl4X2tfZW5hYmxlLCBzaXplb2YoX19weXhfa19lbmFibGUpLCAwLCAwLCAxLCAxfSwK KysgIHsmX19weXhfbl9zX2VuY29kZSwgX19weXhfa19lbmNvZGUsIHNpemVvZihfX3B5eF9rX2Vu Y29kZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZW5kX2ZpbGUsIF9fcHl4X2tfZW5k X2ZpbGUsIHNpemVvZihfX3B5eF9rX2VuZF9maWxlKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4 X25fc19lbnVtZXJhdGUsIF9fcHl4X2tfZW51bWVyYXRlLCBzaXplb2YoX19weXhfa19lbnVtZXJh dGUpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2VvZiwgX19weXhfa19lb2YsIHNpemVv ZihfX3B5eF9rX2VvZiksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZXJyX2MsIF9fcHl4 X2tfZXJyX2MsIHNpemVvZihfX3B5eF9rX2Vycl9jKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4 X25fc19lcnJvciwgX19weXhfa19lcnJvciwgc2l6ZW9mKF9fcHl4X2tfZXJyb3IpLCAwLCAwLCAx LCAxfSwKKysgIHsmX19weXhfbl9zX2Vycm9ycywgX19weXhfa19lcnJvcnMsIHNpemVvZihfX3B5 eF9rX2Vycm9ycyksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZXJyb3JzX2xvY2Fsc193 cmFwcGVkLCBfX3B5eF9rX2Vycm9yc19sb2NhbHNfd3JhcHBlZCwgc2l6ZW9mKF9fcHl4X2tfZXJy b3JzX2xvY2Fsc193cmFwcGVkKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19ldmVudCwg X19weXhfa19ldmVudCwgc2l6ZW9mKF9fcHl4X2tfZXZlbnQpLCAwLCAwLCAxLCAxfSwKKysgIHsm X19weXhfbl9zX2ZhdGFsLCBfX3B5eF9rX2ZhdGFsLCBzaXplb2YoX19weXhfa19mYXRhbCksIDAs IDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZmJvLCBfX3B5eF9rX2Zibywgc2l6ZW9mKF9fcHl4 X2tfZmJvKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19mZCwgX19weXhfa19mZCwgc2l6 ZW9mKF9fcHl4X2tfZmQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2ZpbGVfbG9hZGVk LCBfX3B5eF9rX2ZpbGVfbG9hZGVkLCBzaXplb2YoX19weXhfa19maWxlX2xvYWRlZCksIDAsIDAs IDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZmxpcF95LCBfX3B5eF9rX2ZsaXBfeSwgc2l6ZW9mKF9f cHl4X2tfZmxpcF95KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19mbiwgX19weXhfa19m biwgc2l6ZW9mKF9fcHl4X2tfZm4pLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2Zvcm1h dF9mb3IsIF9fcHl4X2tfZm9ybWF0X2Zvciwgc2l6ZW9mKF9fcHl4X2tfZm9ybWF0X2ZvciksIDAs IDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfZ2V0LCBfX3B5eF9rX2dldCwgc2l6ZW9mKF9fcHl4 X2tfZ2V0KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19nZXRfcHJvY19hZGRyZXNzLCBf X3B5eF9rX2dldF9wcm9jX2FkZHJlc3MsIHNpemVvZihfX3B5eF9rX2dldF9wcm9jX2FkZHJlc3Mp LCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2dldF9wcm9wZXJ0eSwgX19weXhfa19nZXRf cHJvcGVydHksIHNpemVvZihfX3B5eF9rX2dldF9wcm9wZXJ0eSksIDAsIDAsIDEsIDF9LAorKyAg eyZfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5X2FzeW5jLCBfX3B5eF9rX2dldF9wcm9wZXJ0eV9hc3lu Yywgc2l6ZW9mKF9fcHl4X2tfZ2V0X3Byb3BlcnR5X2FzeW5jKSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19nZXRfcHJvcGVydHlfcmVwbHksIF9fcHl4X2tfZ2V0X3Byb3BlcnR5X3JlcGx5 LCBzaXplb2YoX19weXhfa19nZXRfcHJvcGVydHlfcmVwbHkpLCAwLCAwLCAxLCAxfSwKKysgIHsm X19weXhfbl9zX2dldHN0YXRlLCBfX3B5eF9rX2dldHN0YXRlLCBzaXplb2YoX19weXhfa19nZXRz dGF0ZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfaCwgX19weXhfa19oLCBzaXplb2Yo X19weXhfa19oKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X2twX3NfaWNjX2Jsb2Jfc2hvdWxk X2JlX2FfYnl0ZXNfaW5zdGEsIF9fcHl4X2tfaWNjX2Jsb2Jfc2hvdWxkX2JlX2FfYnl0ZXNfaW5z dGEsIHNpemVvZihfX3B5eF9rX2ljY19ibG9iX3Nob3VsZF9iZV9hX2J5dGVzX2luc3RhKSwgMCwg MCwgMSwgMH0sCisrICB7Jl9fcHl4X25fc19pZCwgX19weXhfa19pZCwgc2l6ZW9mKF9fcHl4X2tf aWQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2lkbGUsIF9fcHl4X2tfaWRsZSwgc2l6 ZW9mKF9fcHl4X2tfaWRsZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfaW1wb3J0LCBf X3B5eF9rX2ltcG9ydCwgc2l6ZW9mKF9fcHl4X2tfaW1wb3J0KSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19pbmZvLCBfX3B5eF9rX2luZm8sIHNpemVvZihfX3B5eF9rX2luZm8pLCAwLCAw LCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2luaXQsIF9fcHl4X2tfaW5pdCwgc2l6ZW9mKF9fcHl4 X2tfaW5pdCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfaW5pdGlhbGl6ZSwgX19weXhf a19pbml0aWFsaXplLCBzaXplb2YoX19weXhfa19pbml0aWFsaXplKSwgMCwgMCwgMSwgMX0sCisr ICB7Jl9fcHl4X25fc19pbnRlcm5hbF9mb3JtYXQsIF9fcHl4X2tfaW50ZXJuYWxfZm9ybWF0LCBz aXplb2YoX19weXhfa19pbnRlcm5hbF9mb3JtYXQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhf bl9zX2ludmFsaWRfcGFyYW1ldGVyLCBfX3B5eF9rX2ludmFsaWRfcGFyYW1ldGVyLCBzaXplb2Yo X19weXhfa19pbnZhbGlkX3BhcmFtZXRlciksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nf aXNfcHkzLCBfX3B5eF9rX2lzX3B5Mywgc2l6ZW9mKF9fcHl4X2tfaXNfcHkzKSwgMCwgMCwgMSwg MX0sCisrICB7Jl9fcHl4X25fc19pc3NodXRkb3duLCBfX3B5eF9rX2lzc2h1dGRvd24sIHNpemVv ZihfX3B5eF9rX2lzc2h1dGRvd24pLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2ssIF9f cHl4X2tfaywgc2l6ZW9mKF9fcHl4X2tfayksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nf a2V5cywgX19weXhfa19rZXlzLCBzaXplb2YoX19weXhfa19rZXlzKSwgMCwgMCwgMSwgMX0sCisr ICB7Jl9fcHl4X25fc19rdywgX19weXhfa19rdywgc2l6ZW9mKF9fcHl4X2tfa3cpLCAwLCAwLCAx LCAxfSwKKysgIHsmX19weXhfa3Bfc19saWJtcHZfdmVyc2lvbl9pc19pbmNvcnJlY3RfUmVxdSwg X19weXhfa19saWJtcHZfdmVyc2lvbl9pc19pbmNvcnJlY3RfUmVxdSwgc2l6ZW9mKF9fcHl4X2tf bGlibXB2X3ZlcnNpb25faXNfaW5jb3JyZWN0X1JlcXUpLCAwLCAwLCAxLCAwfSwKKysgIHsmX19w eXhfbl9zX2xvYWRfY29uZmlnLCBfX3B5eF9rX2xvYWRfY29uZmlnLCBzaXplb2YoX19weXhfa19s b2FkX2NvbmZpZyksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfbG9hZGluZ19mYWlsZWQs IF9fcHl4X2tfbG9hZGluZ19mYWlsZWQsIHNpemVvZihfX3B5eF9rX2xvYWRpbmdfZmFpbGVkKSwg MCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19sb2NrLCBfX3B5eF9rX2xvY2ssIHNpemVvZihf X3B5eF9rX2xvY2spLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX2xvZ19tZXNzYWdlLCBf X3B5eF9rX2xvZ19tZXNzYWdlLCBzaXplb2YoX19weXhfa19sb2dfbWVzc2FnZSksIDAsIDAsIDEs IDF9LAorKyAgeyZfX3B5eF9uX3NfbWFpbiwgX19weXhfa19tYWluLCBzaXplb2YoX19weXhfa19t YWluKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19tZXRhY2xhc3MsIF9fcHl4X2tfbWV0 YWNsYXNzLCBzaXplb2YoX19weXhfa19tZXRhY2xhc3MpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19w eXhfbl9zX21vZHVsZSwgX19weXhfa19tb2R1bGUsIHNpemVvZihfX3B5eF9rX21vZHVsZSksIDAs IDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfbXB2LCBfX3B5eF9rX21wdiwgc2l6ZW9mKF9fcHl4 X2tfbXB2KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19tcHZfY2FsbGJhY2ssIF9fcHl4 X2tfbXB2X2NhbGxiYWNrLCBzaXplb2YoX19weXhfa19tcHZfY2FsbGJhY2spLCAwLCAwLCAxLCAx fSwKKysgIHsmX19weXhfbl9zX25hbWUsIF9fcHl4X2tfbmFtZSwgc2l6ZW9mKF9fcHl4X2tfbmFt ZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfbmV3LCBfX3B5eF9rX25ldywgc2l6ZW9m KF9fcHl4X2tfbmV3KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19ubywgX19weXhfa19u bywgc2l6ZW9mKF9fcHl4X2tfbm8pLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfa3Bfc19ub19k ZWZhdWx0X19fcmVkdWNlX19fZHVlX3RvX25vbiwgX19weXhfa19ub19kZWZhdWx0X19fcmVkdWNl X19fZHVlX3RvX25vbiwgc2l6ZW9mKF9fcHl4X2tfbm9fZGVmYXVsdF9fX3JlZHVjZV9fX2R1ZV90 b19ub24pLCAwLCAwLCAxLCAwfSwKKysgIHsmX19weXhfbl9zX25vbWVtLCBfX3B5eF9rX25vbWVt LCBzaXplb2YoX19weXhfa19ub21lbSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfbm9u ZSwgX19weXhfa19ub25lLCBzaXplb2YoX19weXhfa19ub25lKSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19ub3RfZm91bmQsIF9fcHl4X2tfbm90X2ZvdW5kLCBzaXplb2YoX19weXhfa19u b3RfZm91bmQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX25vdF9pbXBsZW1lbnRlZCwg X19weXhfa19ub3RfaW1wbGVtZW50ZWQsIHNpemVvZihfX3B5eF9rX25vdF9pbXBsZW1lbnRlZCks IDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfbm90aGluZ190b19wbGF5LCBfX3B5eF9rX25v dGhpbmdfdG9fcGxheSwgc2l6ZW9mKF9fcHl4X2tfbm90aGluZ190b19wbGF5KSwgMCwgMCwgMSwg MX0sCisrICB7Jl9fcHl4X25fc19vYmplY3QsIF9fcHl4X2tfb2JqZWN0LCBzaXplb2YoX19weXhf a19vYmplY3QpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX29ic2VydmVfcHJvcGVydHks IF9fcHl4X2tfb2JzZXJ2ZV9wcm9wZXJ0eSwgc2l6ZW9mKF9fcHl4X2tfb2JzZXJ2ZV9wcm9wZXJ0 eSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfb2JzZXJ2ZWQsIF9fcHl4X2tfb2JzZXJ2 ZWQsIHNpemVvZihfX3B5eF9rX29ic2VydmVkKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25f c19vcGVuZ2wsIF9fcHl4X2tfb3BlbmdsLCBzaXplb2YoX19weXhfa19vcGVuZ2wpLCAwLCAwLCAx LCAxfSwKKysgIHsmX19weXhfbl9zX29wZW5nbF9mYm8sIF9fcHl4X2tfb3BlbmdsX2Zibywgc2l6 ZW9mKF9fcHl4X2tfb3BlbmdsX2ZibyksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfb3Bl bmdsX2luaXRfcGFyYW1zLCBfX3B5eF9rX29wZW5nbF9pbml0X3BhcmFtcywgc2l6ZW9mKF9fcHl4 X2tfb3BlbmdsX2luaXRfcGFyYW1zKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19vcHRp b25fZXJyb3IsIF9fcHl4X2tfb3B0aW9uX2Vycm9yLCBzaXplb2YoX19weXhfa19vcHRpb25fZXJy b3IpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX29wdGlvbl9mb3JtYXQsIF9fcHl4X2tf b3B0aW9uX2Zvcm1hdCwgc2l6ZW9mKF9fcHl4X2tfb3B0aW9uX2Zvcm1hdCksIDAsIDAsIDEsIDF9 LAorKyAgeyZfX3B5eF9uX3NfcGlja2xlLCBfX3B5eF9rX3BpY2tsZSwgc2l6ZW9mKF9fcHl4X2tf cGlja2xlKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19wbGF5YmFja19yZXN0YXJ0LCBf X3B5eF9rX3BsYXliYWNrX3Jlc3RhcnQsIHNpemVvZihfX3B5eF9rX3BsYXliYWNrX3Jlc3RhcnQp LCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3ByZXBhcmUsIF9fcHl4X2tfcHJlcGFyZSwg c2l6ZW9mKF9fcHl4X2tfcHJlcGFyZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfcHJl c2VudCwgX19weXhfa19wcmVzZW50LCBzaXplb2YoX19weXhfa19wcmVzZW50KSwgMCwgMCwgMSwg MX0sCisrICB7Jl9fcHl4X25fc19wcm9wLCBfX3B5eF9rX3Byb3AsIHNpemVvZihfX3B5eF9rX3By b3ApLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3Byb3BlcnR5X2NoYW5nZSwgX19weXhf a19wcm9wZXJ0eV9jaGFuZ2UsIHNpemVvZihfX3B5eF9rX3Byb3BlcnR5X2NoYW5nZSksIDAsIDAs IDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfcHJvcGVydHlfZXJyb3IsIF9fcHl4X2tfcHJvcGVydHlf ZXJyb3IsIHNpemVvZihfX3B5eF9rX3Byb3BlcnR5X2Vycm9yKSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19wcm9wZXJ0eV9mb3JtYXQsIF9fcHl4X2tfcHJvcGVydHlfZm9ybWF0LCBzaXpl b2YoX19weXhfa19wcm9wZXJ0eV9mb3JtYXQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9z X3Byb3BlcnR5X3VuYXZhaWxhYmxlLCBfX3B5eF9rX3Byb3BlcnR5X3VuYXZhaWxhYmxlLCBzaXpl b2YoX19weXhfa19wcm9wZXJ0eV91bmF2YWlsYWJsZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5 eF9rcF9zX3B5bXB2X2Vycm9yX2R1cmluZ19jYWxsYmFja19zLCBfX3B5eF9rX3B5bXB2X2Vycm9y X2R1cmluZ19jYWxsYmFja19zLCBzaXplb2YoX19weXhfa19weW1wdl9lcnJvcl9kdXJpbmdfY2Fs bGJhY2tfcyksIDAsIDAsIDEsIDB9LAorKyAgeyZfX3B5eF9uX3NfcHl4X1BpY2tsZUVycm9yLCBf X3B5eF9rX3B5eF9QaWNrbGVFcnJvciwgc2l6ZW9mKF9fcHl4X2tfcHl4X1BpY2tsZUVycm9yKSwg MCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19weXhfY2hlY2tzdW0sIF9fcHl4X2tfcHl4X2No ZWNrc3VtLCBzaXplb2YoX19weXhfa19weXhfY2hlY2tzdW0pLCAwLCAwLCAxLCAxfSwKKysgIHsm X19weXhfbl9zX3B5eF9yZXN1bHQsIF9fcHl4X2tfcHl4X3Jlc3VsdCwgc2l6ZW9mKF9fcHl4X2tf cHl4X3Jlc3VsdCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfcHl4X3N0YXRlLCBfX3B5 eF9rX3B5eF9zdGF0ZSwgc2l6ZW9mKF9fcHl4X2tfcHl4X3N0YXRlKSwgMCwgMCwgMSwgMX0sCisr ICB7Jl9fcHl4X25fc19weXhfdHlwZSwgX19weXhfa19weXhfdHlwZSwgc2l6ZW9mKF9fcHl4X2tf cHl4X3R5cGUpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3B5eF91bnBpY2tsZV9FbmRP ZkZpbGVSZWFjaGVkLCBfX3B5eF9rX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkLCBzaXpl b2YoX19weXhfa19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCksIDAsIDAsIDEsIDF9LAor KyAgeyZfX3B5eF9uX3NfcHl4X3VucGlja2xlX0V2ZW50LCBfX3B5eF9rX3B5eF91bnBpY2tsZV9F dmVudCwgc2l6ZW9mKF9fcHl4X2tfcHl4X3VucGlja2xlX0V2ZW50KSwgMCwgMCwgMSwgMX0sCisr ICB7Jl9fcHl4X25fc19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgX19weXhfa19weXhfdW5waWNr bGVfTG9nTWVzc2FnZSwgc2l6ZW9mKF9fcHl4X2tfcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UpLCAw LCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3B5eF91bnBpY2tsZV9Qcm9wZXJ0eSwgX19weXhf a19weXhfdW5waWNrbGVfUHJvcGVydHksIHNpemVvZihfX3B5eF9rX3B5eF91bnBpY2tsZV9Qcm9w ZXJ0eSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfcHl4X3VucGlja2xlX1JlbmRlckZy YW1lSW5mbywgX19weXhfa19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCBzaXplb2YoX19w eXhfa19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9f cHl4X25fc19weXhfdnRhYmxlLCBfX3B5eF9rX3B5eF92dGFibGUsIHNpemVvZihfX3B5eF9rX3B5 eF92dGFibGUpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3F1YWxuYW1lLCBfX3B5eF9r X3F1YWxuYW1lLCBzaXplb2YoX19weXhfa19xdWFsbmFtZSksIDAsIDAsIDEsIDF9LAorKyAgeyZf X3B5eF9uX3NfcXVldWVfZnVsbCwgX19weXhfa19xdWV1ZV9mdWxsLCBzaXplb2YoX19weXhfa19x dWV1ZV9mdWxsKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19xdWl0LCBfX3B5eF9rX3F1 aXQsIHNpemVvZihfX3B5eF9rX3F1aXQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3Jh bmdlLCBfX3B5eF9rX3JhbmdlLCBzaXplb2YoX19weXhfa19yYW5nZSksIDAsIDAsIDEsIDF9LAor KyAgeyZfX3B5eF9uX3NfcmVkcmF3LCBfX3B5eF9rX3JlZHJhdywgc2l6ZW9mKF9fcHl4X2tfcmVk cmF3KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19yZWR1Y2UsIF9fcHl4X2tfcmVkdWNl LCBzaXplb2YoX19weXhfa19yZWR1Y2UpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3Jl ZHVjZV9jeXRob24sIF9fcHl4X2tfcmVkdWNlX2N5dGhvbiwgc2l6ZW9mKF9fcHl4X2tfcmVkdWNl X2N5dGhvbiksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfcmVkdWNlX2V4LCBfX3B5eF9r X3JlZHVjZV9leCwgc2l6ZW9mKF9fcHl4X2tfcmVkdWNlX2V4KSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19yZWxlYXNlLCBfX3B5eF9rX3JlbGVhc2UsIHNpemVvZihfX3B5eF9rX3JlbGVh c2UpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3JlbW92ZSwgX19weXhfa19yZW1vdmUs IHNpemVvZihfX3B5eF9rX3JlbW92ZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfcmVu ZGVyLCBfX3B5eF9rX3JlbmRlciwgc2l6ZW9mKF9fcHl4X2tfcmVuZGVyKSwgMCwgMCwgMSwgMX0s CisrICB7Jl9fcHl4X25fc19yZW5kZXJfZmQsIF9fcHl4X2tfcmVuZGVyX2ZkLCBzaXplb2YoX19w eXhfa19yZW5kZXJfZmQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3JlcGVhdCwgX19w eXhfa19yZXBlYXQsIHNpemVvZihfX3B5eF9rX3JlcGVhdCksIDAsIDAsIDEsIDF9LAorKyAgeyZf X3B5eF9uX3NfcmVxdWVzdF9ldmVudCwgX19weXhfa19yZXF1ZXN0X2V2ZW50LCBzaXplb2YoX19w eXhfa19yZXF1ZXN0X2V2ZW50KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19ydW4sIF9f cHl4X2tfcnVuLCBzaXplb2YoX19weXhfa19ydW4pLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhf bl9zX3MsIF9fcHl4X2tfcywgc2l6ZW9mKF9fcHl4X2tfcyksIDAsIDAsIDEsIDF9LAorKyAgeyZf X3B5eF9uX3Nfc2VlaywgX19weXhfa19zZWVrLCBzaXplb2YoX19weXhfa19zZWVrKSwgMCwgMCwg MSwgMX0sCisrICB7Jl9fcHl4X25fc19zZWxmLCBfX3B5eF9rX3NlbGYsIHNpemVvZihfX3B5eF9r X3NlbGYpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfa3Bfc19zZWxmX19jdHhfY2Fubm90X2Jl X2NvbnZlcnRlZF90bywgX19weXhfa19zZWxmX19jdHhfY2Fubm90X2JlX2NvbnZlcnRlZF90bywg c2l6ZW9mKF9fcHl4X2tfc2VsZl9fY3R4X2Nhbm5vdF9iZV9jb252ZXJ0ZWRfdG8pLCAwLCAwLCAx LCAwfSwKKysgIHsmX19weXhfa3Bfc19zZWxmX3BhcmFtc19jYW5ub3RfYmVfY29udmVydGVkLCBf X3B5eF9rX3NlbGZfcGFyYW1zX2Nhbm5vdF9iZV9jb252ZXJ0ZWQsIHNpemVvZihfX3B5eF9rX3Nl bGZfcGFyYW1zX2Nhbm5vdF9iZV9jb252ZXJ0ZWQpLCAwLCAwLCAxLCAwfSwKKysgIHsmX19weXhf bl9zX3NldCwgX19weXhfa19zZXQsIHNpemVvZihfX3B5eF9rX3NldCksIDAsIDAsIDEsIDF9LAor KyAgeyZfX3B5eF9uX3Nfc2V0X2FtYmllbnRfbGlnaHQsIF9fcHl4X2tfc2V0X2FtYmllbnRfbGln aHQsIHNpemVvZihfX3B5eF9rX3NldF9hbWJpZW50X2xpZ2h0KSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19zZXRfaWNjX3Byb2ZpbGUsIF9fcHl4X2tfc2V0X2ljY19wcm9maWxlLCBzaXpl b2YoX19weXhfa19zZXRfaWNjX3Byb2ZpbGUpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9z X3NldF9sb2dfbGV2ZWwsIF9fcHl4X2tfc2V0X2xvZ19sZXZlbCwgc2l6ZW9mKF9fcHl4X2tfc2V0 X2xvZ19sZXZlbCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfc2V0X29wdGlvbiwgX19w eXhfa19zZXRfb3B0aW9uLCBzaXplb2YoX19weXhfa19zZXRfb3B0aW9uKSwgMCwgMCwgMSwgMX0s CisrICB7Jl9fcHl4X25fc19zZXRfcHJvcGVydHksIF9fcHl4X2tfc2V0X3Byb3BlcnR5LCBzaXpl b2YoX19weXhfa19zZXRfcHJvcGVydHkpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3Nl dF9wcm9wZXJ0eV9yZXBseSwgX19weXhfa19zZXRfcHJvcGVydHlfcmVwbHksIHNpemVvZihfX3B5 eF9rX3NldF9wcm9wZXJ0eV9yZXBseSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfc2V0 c3RhdGUsIF9fcHl4X2tfc2V0c3RhdGUsIHNpemVvZihfX3B5eF9rX3NldHN0YXRlKSwgMCwgMCwg MSwgMX0sCisrICB7Jl9fcHl4X25fc19zZXRzdGF0ZV9jeXRob24sIF9fcHl4X2tfc2V0c3RhdGVf Y3l0aG9uLCBzaXplb2YoX19weXhfa19zZXRzdGF0ZV9jeXRob24pLCAwLCAwLCAxLCAxfSwKKysg IHsmX19weXhfbl9zX3NodXRkb3duLCBfX3B5eF9rX3NodXRkb3duLCBzaXplb2YoX19weXhfa19z aHV0ZG93biksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfc2tpcF9yZW5kZXJpbmcsIF9f cHl4X2tfc2tpcF9yZW5kZXJpbmcsIHNpemVvZihfX3B5eF9rX3NraXBfcmVuZGVyaW5nKSwgMCwg MCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19zdGFydCwgX19weXhfa19zdGFydCwgc2l6ZW9mKF9f cHl4X2tfc3RhcnQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3N0YXJ0X2ZpbGUsIF9f cHl4X2tfc3RhcnRfZmlsZSwgc2l6ZW9mKF9fcHl4X2tfc3RhcnRfZmlsZSksIDAsIDAsIDEsIDF9 LAorKyAgeyZfX3B5eF9uX3Nfc3RkZXJyLCBfX3B5eF9rX3N0ZGVyciwgc2l6ZW9mKF9fcHl4X2tf c3RkZXJyKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19zdHJkZWMsIF9fcHl4X2tfc3Ry ZGVjLCBzaXplb2YoX19weXhfa19zdHJkZWMpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9z X3N0cmRlY19lcnIsIF9fcHl4X2tfc3RyZGVjX2Vyciwgc2l6ZW9mKF9fcHl4X2tfc3RyZGVjX2Vy ciksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nfc3RyZW5jLCBfX3B5eF9rX3N0cmVuYywg c2l6ZW9mKF9fcHl4X2tfc3RyZW5jKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc19zdHJp Y3QsIF9fcHl4X2tfc3RyaWN0LCBzaXplb2YoX19weXhfa19zdHJpY3QpLCAwLCAwLCAxLCAxfSwK KysgIHsmX19weXhfa3Bfc19zdHJpbmdzb3VyY2UsIF9fcHl4X2tfc3RyaW5nc291cmNlLCBzaXpl b2YoX19weXhfa19zdHJpbmdzb3VyY2UpLCAwLCAwLCAxLCAwfSwKKysgIHsmX19weXhfbl9zX3N1 Y2Nlc3MsIF9fcHl4X2tfc3VjY2Vzcywgc2l6ZW9mKF9fcHl4X2tfc3VjY2VzcyksIDAsIDAsIDEs IDF9LAorKyAgeyZfX3B5eF9uX3Nfc3Vycm9nYXRlZXNjYXBlLCBfX3B5eF9rX3N1cnJvZ2F0ZWVz Y2FwZSwgc2l6ZW9mKF9fcHl4X2tfc3Vycm9nYXRlZXNjYXBlKSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc19zeXMsIF9fcHl4X2tfc3lzLCBzaXplb2YoX19weXhfa19zeXMpLCAwLCAwLCAx LCAxfSwKKysgIHsmX19weXhfbl9zX3RhcmdldF90aW1lLCBfX3B5eF9rX3RhcmdldF90aW1lLCBz aXplb2YoX19weXhfa190YXJnZXRfdGltZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nf dGVzdCwgX19weXhfa190ZXN0LCBzaXplb2YoX19weXhfa190ZXN0KSwgMCwgMCwgMSwgMX0sCisr ICB7Jl9fcHl4X25fc190aHJlYWRpbmcsIF9fcHl4X2tfdGhyZWFkaW5nLCBzaXplb2YoX19weXhf a190aHJlYWRpbmcpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3RpY2ssIF9fcHl4X2tf dGljaywgc2l6ZW9mKF9fcHl4X2tfdGljayksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3Nf dGltZW91dCwgX19weXhfa190aW1lb3V0LCBzaXplb2YoX19weXhfa190aW1lb3V0KSwgMCwgMCwg MSwgMX0sCisrICB7Jl9fcHl4X25fc190cmFjZSwgX19weXhfa190cmFjZSwgc2l6ZW9mKF9fcHl4 X2tfdHJhY2UpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3VuaW5pdGlhbGl6ZWQsIF9f cHl4X2tfdW5pbml0aWFsaXplZCwgc2l6ZW9mKF9fcHl4X2tfdW5pbml0aWFsaXplZCksIDAsIDAs IDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfdW5rbm93bl9mb3JtYXQsIF9fcHl4X2tfdW5rbm93bl9m b3JtYXQsIHNpemVvZihfX3B5eF9rX3Vua25vd25fZm9ybWF0KSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc191bm9ic2VydmVfcHJvcGVydHksIF9fcHl4X2tfdW5vYnNlcnZlX3Byb3BlcnR5 LCBzaXplb2YoX19weXhfa191bm9ic2VydmVfcHJvcGVydHkpLCAwLCAwLCAxLCAxfSwKKysgIHsm X19weXhfbl9zX3Vuc3VwcG9ydGVkLCBfX3B5eF9rX3Vuc3VwcG9ydGVkLCBzaXplb2YoX19weXhf a191bnN1cHBvcnRlZCksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfdXBkYXRlLCBfX3B5 eF9rX3VwZGF0ZSwgc2l6ZW9mKF9fcHl4X2tfdXBkYXRlKSwgMCwgMCwgMSwgMX0sCisrICB7Jl9f cHl4X2twX3NfdXRmXzgsIF9fcHl4X2tfdXRmXzgsIHNpemVvZihfX3B5eF9rX3V0Zl84KSwgMCwg MCwgMSwgMH0sCisrICB7Jl9fcHl4X25fc192LCBfX3B5eF9rX3YsIHNpemVvZihfX3B5eF9rX3Yp LCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3ZhbHVlLCBfX3B5eF9rX3ZhbHVlLCBzaXpl b2YoX19weXhfa192YWx1ZSksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5eF9uX3NfdmFsdWVzLCBf X3B5eF9rX3ZhbHVlcywgc2l6ZW9mKF9fcHl4X2tfdmFsdWVzKSwgMCwgMCwgMSwgMX0sCisrICB7 Jl9fcHl4X25fc192ZXJzaW9uLCBfX3B5eF9rX3ZlcnNpb24sIHNpemVvZihfX3B5eF9rX3ZlcnNp b24pLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3ZlcnNpb25faW5mbywgX19weXhfa192 ZXJzaW9uX2luZm8sIHNpemVvZihfX3B5eF9rX3ZlcnNpb25faW5mbyksIDAsIDAsIDEsIDF9LAor KyAgeyZfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9rX3ZpZGN1dHRlcl9saWJz X21wdiwgc2l6ZW9mKF9fcHl4X2tfdmlkY3V0dGVyX2xpYnNfbXB2KSwgMCwgMCwgMSwgMX0sCisr ICB7Jl9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfa192aWRj dXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBzaXplb2YoX19weXhfa192aWRjdXR0ZXJfbGlic19w eW1wdl9tcHZfcHl4KSwgMCwgMCwgMSwgMH0sCisrICB7Jl9fcHl4X25fc192aWRlb19yZWNvbmZp ZywgX19weXhfa192aWRlb19yZWNvbmZpZywgc2l6ZW9mKF9fcHl4X2tfdmlkZW9fcmVjb25maWcp LCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3ZvX2luaXRfZmFpbGVkLCBfX3B5eF9rX3Zv X2luaXRfZmFpbGVkLCBzaXplb2YoX19weXhfa192b19pbml0X2ZhaWxlZCksIDAsIDAsIDEsIDF9 LAorKyAgeyZfX3B5eF9uX3NfdywgX19weXhfa193LCBzaXplb2YoX19weXhfa193KSwgMCwgMCwg MSwgMX0sCisrICB7Jl9fcHl4X25fc193YXJuLCBfX3B5eF9rX3dhcm4sIHNpemVvZihfX3B5eF9r X3dhcm4pLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhfbl9zX3dhcm5pbmdzLCBfX3B5eF9rX3dh cm5pbmdzLCBzaXplb2YoX19weXhfa193YXJuaW5ncyksIDAsIDAsIDEsIDF9LAorKyAgeyZfX3B5 eF9uX3Nfd2xfZGlzcGxheSwgX19weXhfa193bF9kaXNwbGF5LCBzaXplb2YoX19weXhfa193bF9k aXNwbGF5KSwgMCwgMCwgMSwgMX0sCisrICB7Jl9fcHl4X25fc193cmFwcGVkLCBfX3B5eF9rX3dy YXBwZWQsIHNpemVvZihfX3B5eF9rX3dyYXBwZWQpLCAwLCAwLCAxLCAxfSwKKysgIHsmX19weXhf bl9zX3dyaXRlLCBfX3B5eF9rX3dyaXRlLCBzaXplb2YoX19weXhfa193cml0ZSksIDAsIDAsIDEs IDF9LAorKyAgeyZfX3B5eF9uX3NfeDExX2Rpc3BsYXksIF9fcHl4X2tfeDExX2Rpc3BsYXksIHNp emVvZihfX3B5eF9rX3gxMV9kaXNwbGF5KSwgMCwgMCwgMSwgMX0sCisrICB7MCwgMCwgMCwgMCwg MCwgMCwgMH0KKyt9OworK3N0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfSW5pdENh Y2hlZEJ1aWx0aW5zKHZvaWQpIHsKKysgIF9fcHl4X2J1aWx0aW5fSW1wb3J0RXJyb3IgPSBfX1B5 eF9HZXRCdWlsdGluTmFtZShfX3B5eF9uX3NfSW1wb3J0RXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0 aW5fSW1wb3J0RXJyb3IpIF9fUFlYX0VSUigwLCA0NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF9idWlsdGluX29iamVjdCA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19vYmplY3Qp OyBpZiAoIV9fcHl4X2J1aWx0aW5fb2JqZWN0KSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X2J1aWx0aW5fVW5pY29kZURlY29kZUVycm9yID0gX19QeXhfR2V0QnVp bHRpbk5hbWUoX19weXhfbl9zX1VuaWNvZGVEZWNvZGVFcnJvcik7IGlmICghX19weXhfYnVpbHRp bl9Vbmljb2RlRGVjb2RlRXJyb3IpIF9fUFlYX0VSUigwLCA1OCwgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF9idWlsdGluX1VuaWNvZGVFbmNvZGVFcnJvciA9IF9fUHl4X0dldEJ1aWx0aW5OYW1l KF9fcHl4X25fc19Vbmljb2RlRW5jb2RlRXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0aW5fVW5pY29k ZUVuY29kZUVycm9yKSBfX1BZWF9FUlIoMCwgNjYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf YnVpbHRpbl9yYW5nZSA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19yYW5nZSk7IGlm ICghX19weXhfYnVpbHRpbl9yYW5nZSkgX19QWVhfRVJSKDAsIDIyMiwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF9idWlsdGluX2lkID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX2lk KTsgaWYgKCFfX3B5eF9idWlsdGluX2lkKSBfX1BZWF9FUlIoMCwgMzAzLCBfX3B5eF9MMV9lcnJv cikKKysgIF9fcHl4X2J1aWx0aW5fZW51bWVyYXRlID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19w eXhfbl9zX2VudW1lcmF0ZSk7IGlmICghX19weXhfYnVpbHRpbl9lbnVtZXJhdGUpIF9fUFlYX0VS UigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfYnVpbHRpbl9UeXBlRXJyb3IgPSBf X1B5eF9HZXRCdWlsdGluTmFtZShfX3B5eF9uX3NfVHlwZUVycm9yKTsgaWYgKCFfX3B5eF9idWls dGluX1R5cGVFcnJvcikgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgcmV0dXJu IDA7CisrICBfX3B5eF9MMV9lcnJvcjo7CisrICByZXR1cm4gLTE7CisrfQorIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyCisrc3RhdGljIENZVEhPTl9TTUFMTF9DT0RF IGludCBfX1B5eF9Jbml0Q2FjaGVkQ29uc3RhbnRzKHZvaWQpIHsKKysgIF9fUHl4X1JlZk5hbm55 RGVjbGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19QeXhfSW5pdENh Y2hlZENvbnN0YW50cyIsIDApOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMxOQorICAqIAorLSAqIGltcG9ydCBjeXRob24KKy0gKiBpbXBvcnQgc3lzLCB3YXJuaW5n cyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogZnJvbSB0aHJlYWRpbmcgaW1wb3J0 IFRocmVhZCwgU2VtYXBob3JlCistICogZnJvbSBsaWJjLnN0ZGxpYiBjaW1wb3J0IG1hbGxvYywg ZnJlZQorKyAqIGRlZiBfZXJyb3JzKGZuKToKKysgKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB2ID0gZm4oKmssICoq a3cpCisrICogICAgICAgICBpZiB2IDwgMDoKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0lt cG9ydChfX3B5eF9uX3Nfc3lzLCAwLCAtMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDIyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19zeXMsIF9fcHl4X3Rf MSkgPCAwKSBfX1BZWF9FUlIoMCwgMjIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX3B5eF90XzEgPSBfX1B5eF9JbXBvcnQo X19weXhfbl9zX3dhcm5pbmdzLCAwLCAtMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDIyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc193YXJuaW5ncywgX19w eXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAyMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9fcHl4X3R1cGxlXyA9IFB5VHVw bGVfUGFjaygzLCBfX3B5eF9uX3NfaywgX19weXhfbl9zX2t3LCBfX3B5eF9uX3Nfdik7IGlmICh1 bmxpa2VseSghX19weXhfdHVwbGVfKSkgX19QWVhfRVJSKDAsIDMxOSwgX19weXhfTDFfZXJyb3Ip CisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfKTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhf dHVwbGVfKTsKKysgIF9fcHl4X2NvZGVvYmpfXzIgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9O ZXcoMCwgMCwgMywgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMU3xDT19WQVJBUkdTfENPX1ZB UktFWVdPUkRTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF90dXBsZV8sIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3Nf d3JhcHBlZCwgMzE5LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29k ZW9ial9fMikpIF9fUFlYX0VSUigwLCAzMTksIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzCistICogaW1wb3J0IGN5dGhvbgorLSAqIGlt cG9ydCBzeXMsIHdhcm5pbmdzCistICogZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZCwgU2Vt YXBob3JlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiBmcm9tIGxpYmMuc3RkbGli IGNpbXBvcnQgbWFsbG9jLCBmcmVlCistICogZnJvbSBsaWJjLnN0cmluZyBjaW1wb3J0IHN0cmNw eSwgc3RybGVuLCBtZW1zZXQKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjIKKysgKiBkZWYgX19y ZWR1Y2VfY3l0aG9uX18oc2VsZik6CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVs dCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogZGVmIF9fc2V0c3RhdGVfY3l0aG9uX18oc2VsZiwgX19weXhf c3RhdGUpOgorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBk dWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IFB5TGlz dF9OZXcoMik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIzLCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19QeXhfSU5DUkVG KF9fcHl4X25fc19UaHJlYWQpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF9uX3NfVGhyZWFkKTsK Ky0gIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90XzEsIDAsIF9fcHl4X25fc19UaHJlYWQpOworLSAg X19QeXhfSU5DUkVGKF9fcHl4X25fc19TZW1hcGhvcmUpOworLSAgX19QeXhfR0lWRVJFRihfX3B5 eF9uX3NfU2VtYXBob3JlKTsKKy0gIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90XzEsIDEsIF9fcHl4 X25fc19TZW1hcGhvcmUpOworLSAgX19weXhfdF8yID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc190 aHJlYWRpbmcsIF9fcHl4X3RfMSwgLTEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCAyMywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgX19weXhfdF8x ID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzIsIF9fcHl4X25fc19UaHJlYWQpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMywgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBf X3B5eF9uX3NfVGhyZWFkLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDIzLCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAg X19weXhfdF8xID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzIsIF9fcHl4X25fc19TZW1hcGhv cmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMywgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIGlmIChQeURpY3RfU2V0SXRl bShfX3B5eF9kLCBfX3B5eF9uX3NfU2VtYXBob3JlLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJS KDAsIDIzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisr ICBfX3B5eF90dXBsZV9fMyA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9rcF9zX25vX2RlZmF1bHRf X19yZWR1Y2VfX19kdWVfdG9fbm9uKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMykpIF9f UFlYX0VSUigxLCAyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBs ZV9fMyk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18zKTsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMAorLSAqIGZyb20gY2xpZW50IGNpbXBvcnQgKgor LSAqIAorLSAqIF9fdmVyc2lvbl9fID0gIjAuMy4wIiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogX19hdXRob3JfXyA9ICJBbmRyZSBEIgorLSAqIAorKyAgLyogIih0cmVlIGZyYWdt ZW50KSI6NAorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoIm5vIGRlZmF1bHQgX19yZWR1Y2VfXyBk dWUgdG8gbm9uLXRyaXZpYWwgX19jaW5pdF9fIikKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25f XyhzZWxmLCBfX3B5eF9zdGF0ZSk6CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigibm8gZGVmYXVs dCBfX3JlZHVjZV9fIGR1ZSB0byBub24tdHJpdmlhbCBfX2Npbml0X18iKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisgICovCistICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19w eXhfbl9zX3ZlcnNpb24sIF9fcHl4X2twX3NfMF8zXzApIDwgMCkgX19QWVhfRVJSKDAsIDMwLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX180ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4 X2twX3Nfbm9fZGVmYXVsdF9fX3JlZHVjZV9fX2R1ZV90b19ub24pOyBpZiAodW5saWtlbHkoIV9f cHl4X3R1cGxlX180KSkgX19QWVhfRVJSKDEsIDQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf R09UUkVGKF9fcHl4X3R1cGxlX180KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzQp OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxCistICogCistICog X192ZXJzaW9uX18gPSAiMC4zLjAiCistICogX19hdXRob3JfXyA9ICJBbmRyZSBEIiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogX1JFUVVJUkVEX0NBUElfTUFKT1IgPSAx CisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoyCisrICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNl bGYpOgorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYucGFyYW1zIGNhbm5vdCBiZSBjb252 ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBwaWNrbGluZyIpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0 ZSk6CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZl cnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKyAgKi8KKy0gIGlmIChQeURp Y3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfYXV0aG9yLCBfX3B5eF9rcF9zX0FuZHJlX0Qp IDwgMCkgX19QWVhfRVJSKDAsIDMxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX181 ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9wYXJhbXNfY2Fubm90X2JlX2NvbnZl cnRlZCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzUpKSBfX1BZWF9FUlIoMSwgMiwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzUpOworKyAgX19QeXhf R0lWRVJFRihfX3B5eF90dXBsZV9fNSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzMKKy0gKiBfX2F1dGhvcl9fID0gIkFuZHJlIEQiCistICogCistICogX1JFUVVJ UkVEX0NBUElfTUFKT1IgPSAxICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiBfTUlO X0NBUElfTUlOT1IgPSA5CistICogCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjo0CisrICogICAg IHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5 dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKysgKiBkZWYgX19zZXRzdGF0ZV9jeXRob25fXyhz ZWxmLCBfX3B5eF9zdGF0ZSk6CisrICogICAgIHJhaXNlIFR5cGVFcnJvcigic2VsZi5wYXJhbXMg Y2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqLworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9f cHl4X2QsIF9fcHl4X25fc19SRVFVSVJFRF9DQVBJX01BSk9SLCBfX3B5eF9pbnRfMSkgPCAwKSBf X1BZWF9FUlIoMCwgMzMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVwbGVfXzYgPSBQeVR1 cGxlX1BhY2soMSwgX19weXhfa3Bfc19zZWxmX3BhcmFtc19jYW5ub3RfYmVfY29udmVydGVkKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNikpIF9fUFlYX0VSUigxLCA0LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNik7CisrICBfX1B5eF9HSVZFUkVG KF9fcHl4X3R1cGxlX182KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozNAorLSAqIAorLSAqIF9SRVFVSVJFRF9DQVBJX01BSk9SID0gMQorLSAqIF9NSU5fQ0FQSV9N SU5PUiA9IDkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqIGNkZWYgdW5z aWduZWQgbG9uZyBfQ0FQSV9WRVJTSU9OCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTkyCisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BB UkFNX1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCisr ICogICAgICAgICBpZiBkcm1fZGlzcGxheToKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZk ID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJj cnRjX2lkIiwgLTEpCisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBk cm1fZGlzcGxheS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0xKQorICAqLworLSAgaWYgKFB5RGljdF9T ZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUiwgX19weXhfaW50XzkpIDwg MCkgX19QWVhfRVJSKDAsIDM0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX183ID0g UHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19mZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90dXBsZV9fNykpIF9fUFlYX0VSUigwLCA5OTIsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX183KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhf dHVwbGVfXzcpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3Cist ICogCistICogY2RlZiB1bnNpZ25lZCBsb25nIF9DQVBJX1ZFUlNJT04KKy0gKiB3aXRoIG5vZ2ls OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIF9DQVBJX1ZFUlNJT04gPSBt cHZfY2xpZW50X2FwaV92ZXJzaW9uKCkKKy0gKiAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5OTMKKysgKiAgICAgICAgIGlmIGRybV9kaXNwbGF5OgorKyAqICAgICAgICAg ICAgIGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCisrICogICAgICAg ICAgICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1z LmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpCisrICog ICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0KCJhdG9taWNfcmVxdWVzdF9wdHIiLCBO b25lKQorICAqLworLSAgeworLSAgICAgICNpZmRlZiBXSVRIX1RIUkVBRAorLSAgICAgIFB5VGhy ZWFkU3RhdGUgKl9zYXZlOworLSAgICAgIFB5X1VOQkxPQ0tfVEhSRUFEUworLSAgICAgIF9fUHl4 X0Zhc3RHSUxfUmVtZW1iZXIoKTsKKy0gICAgICAjZW5kaWYKKy0gICAgICAvKnRyeToqLyB7Cisr ICBfX3B5eF90dXBsZV9fOCA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfY3J0Y19pZCwgX19w eXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fOCkpIF9fUFlYX0VSUigw LCA5OTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX184KTsK KysgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzgpOworIAorLSAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM4CistICogY2RlZiB1bnNpZ25lZCBsb25nIF9DQVBJ X1ZFUlNJT04KKy0gKiB3aXRoIG5vZ2lsOgorLSAqICAgICBfQ0FQSV9WRVJTSU9OID0gbXB2X2Ns aWVudF9hcGlfdmVyc2lvbigpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAKKy0g KiBfQ0FQSV9NQUpPUiA9IF9DQVBJX1ZFUlNJT04gPj4gMTYKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5OTQKKysgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJt X2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKQorKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19p ZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0Y19pZCIsIC0xKQorKyAqICAgICAgICAgICAgIGRybV9w YXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIGFycCA9IGRybV9k aXNwbGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRyIiwgTm9uZSkKKysgKiAgICAgICAgICAgICBp ZiBhcnAgaXMgbm90IE5vbmU6CisgICovCistICAgICAgICBfX3B5eF92Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fQ0FQSV9WRVJTSU9OID0gbXB2X2NsaWVudF9hcGlfdmVyc2lvbigpOworLSAgICAg IH0KKysgIF9fcHl4X3R1cGxlX185ID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19jb25uZWN0 b3JfaWQsIF9fcHl4X2ludF9uZWdfMSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzkpKSBf X1BZWF9FUlIoMCwgOTk0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 dXBsZV9fOSk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX185KTsKKyAKKy0gICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzcKKy0gKiAKKy0gKiBjZGVmIHVuc2ln bmVkIGxvbmcgX0NBUElfVkVSU0lPTgorLSAqIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKy0gKiAgICAgX0NBUElfVkVSU0lPTiA9IG1wdl9jbGllbnRfYXBpX3ZlcnNp b24oKQorLSAqIAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5NQorKyAq ICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0Y19p ZCIsIC0xKQorKyAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rp c3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKKysgKiAgICAgICAgICAgICBhcnAgPSBkcm1f ZGlzcGxheS5nZXQoImF0b21pY19yZXF1ZXN0X3B0ciIsIE5vbmUpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6CisrICogICAg ICAgICAgICAgICAgIGRybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gPF9kcm1Nb2RlQXRv bWljUmVxICoqPmdldF9wb2ludGVyKGFycCwgImRybU1vZGVBdG9taWNSZXEqIikKKyAgKi8KKy0g ICAgICAvKmZpbmFsbHk6Ki8geworLSAgICAgICAgLypub3JtYWwgZXhpdDoqL3sKKy0gICAgICAg ICAgI2lmZGVmIFdJVEhfVEhSRUFECistICAgICAgICAgIF9fUHl4X0Zhc3RHSUxfRm9yZ2V0KCk7 CistICAgICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKKy0gICAgICAgICAgI2VuZGlmCistICAgICAg ICAgIGdvdG8gX19weXhfTDQ7CistICAgICAgICB9CistICAgICAgICBfX3B5eF9MNDo7CistICAg ICAgfQorLSAgfQorKyAgX19weXhfdHVwbGVfXzEwID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25f c19hdG9taWNfcmVxdWVzdF9wdHIsIFB5X05vbmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxl X18xMCkpIF9fUFlYX0VSUigwLCA5OTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVG KF9fcHl4X3R1cGxlX18xMCk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18xMCk7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDAKKy0gKiAgICAgX0NBUElf VkVSU0lPTiA9IG1wdl9jbGllbnRfYXBpX3ZlcnNpb24oKQorLSAqIAorLSAqIF9DQVBJX01BSk9S ID0gX0NBUElfVkVSU0lPTiA+PiAxNiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog X0NBUElfTUlOT1IgPSBfQ0FQSV9WRVJTSU9OICYgMHhGRkZGCistICogCisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk4CisrICogICAgICAgICAgICAgaWYgYXJwIGlzIG5v dCBOb25lOgorKyAqICAgICAgICAgICAgICAgICBkcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0X3B0 ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5nZXRfcG9pbnRlcihhcnAsICJkcm1Nb2RlQXRvbWlj UmVxKiIpCisrICogICAgICAgICAgICAgZHJtX3BhcmFtcy5yZW5kZXJfZmQgPSBkcm1fZGlzcGxh eS5nZXQoInJlbmRlcl9mZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX0RSTV9ESVNQTEFZ LCAmZHJtX3BhcmFtcykKKysgKiAgICAgICAgIGlmIGRybV9vc2Rfc2l6ZToKKyAgKi8KKy0gIF9f cHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZygoX19weXhfdl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX0NBUElfVkVSU0lPTiA+PiAxNikpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA0MCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYo X19weXhfdF8yKTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfQ0FQ SV9NQUpPUiwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigwLCA0MCwgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKysgIF9fcHl4X3R1 cGxlX18xMSA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfcmVuZGVyX2ZkLCBfX3B5eF9pbnRf bmVnXzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMSkpIF9fUFlYX0VSUigwLCA5OTgs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xMSk7CisrICBf X1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18xMSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDEKKy0gKiAKKy0gKiBfQ0FQSV9NQUpPUiA9IF9DQVBJX1ZFUlNJT04g Pj4gMTYKKy0gKiBfQ0FQSV9NSU5PUiA9IF9DQVBJX1ZFUlNJT04gJiAweEZGRkYgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqIAorLSAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJF RF9DQVBJX01BSk9SIG9yIF9DQVBJX01JTk9SIDwgX01JTl9DQVBJX01JTk9SOgorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODMKKysgKiAgICAgICAgIGlmIG9wZW5nbF9m Ym86CisrICogICAgICAgICAgICAgbWVtc2V0KCZmYm8sIDAsIHNpemVvZihmYm8pKQorKyAqICAg ICAgICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJvIiwgMCkgb3IgMCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAgICAgZmJvLncgPSBvcGVuZ2xfZmJv WyJ3Il0KKysgKiAgICAgICAgICAgICBmYm8uaCA9IG9wZW5nbF9mYm9bImgiXQorICAqLworLSAg X19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV91bnNpZ25lZF9sb25nKChfX3B5eF92Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9fQ0FQSV9WRVJTSU9OICYgMHhGRkZGKSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzIpOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25f c19DQVBJX01JTk9SLCBfX3B5eF90XzIpIDwgMCkgX19QWVhfRVJSKDAsIDQxLCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19w eXhfdHVwbGVfXzEyID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19mYm8sIF9fcHl4X2ludF8w KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMTIpKSBfX1BZWF9FUlIoMCwgMTA4MywgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzEyKTsKKysgIF9fUHl4 X0dJVkVSRUYoX19weXhfdHVwbGVfXzEyKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0MworLSAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVSU0lPTiAmIDB4RkZGRgor LSAqIAorLSAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9yIF9DQVBJ X01JTk9SIDwgX01JTl9DQVBJX01JTk9SOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIHJhaXNlIEltcG9ydEVycm9yKAorLSAqICAgICAgICAgImxpYm1wdiB2ZXJzaW9uIGlz IGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJQorLSAqLworLSAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19DQVBJX01BSk9SKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1l KF9fcHl4X3RfMSwgX19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFKT1IpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0MywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfNCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9f cHl4X3RfMiwgX19weXhfdF8xLCBQeV9ORSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF80KTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2Jq ZWN0X0lzVHJ1ZShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoX19weXhfdF81IDwgMCkpIF9fUFlY X0VSUigwLCA0MywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKy0gIGlmICghX19weXhfdF81KSB7CistICB9IGVsc2UgeworLSAgICBf X3B5eF90XzMgPSBfX3B5eF90XzU7CistICAgIGdvdG8gX19weXhfTDZfYm9vbF9iaW5vcF9kb25l OworLSAgfQorLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25f c19DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDMs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9H ZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhfbl9zX01JTl9DQVBJX01JTk9SKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBfX3B5eF90XzIgPSBQeU9iamVjdF9S aWNoQ29tcGFyZShfX3B5eF90XzQsIF9fcHl4X3RfMSwgUHlfTFQpOyBfX1B5eF9YR09UUkVGKF9f cHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwor LSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX3B5eF90XzUg PSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf NSA8IDApKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBfX3B5eF90XzMgPSBfX3B5eF90XzU7Cist ICBfX3B5eF9MNl9ib29sX2Jpbm9wX2RvbmU6OworLSAgaWYgKHVubGlrZWx5KF9fcHl4X3RfMykp IHsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg2CisrICogICAgICAg ICAgICAgZmJvLncgPSBvcGVuZ2xfZmJvWyJ3Il0KKysgKiAgICAgICAgICAgICBmYm8uaCA9IG9w ZW5nbF9mYm9bImgiXQorKyAqICAgICAgICAgICAgIGZiby5pbnRlcm5hbF9mb3JtYXQgPSBvcGVu Z2xfZmJvLmdldCgiaW50ZXJuYWxfZm9ybWF0IiwgMCkgb3IgMCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BB UkFNX09QRU5HTF9GQk8sICZmYm8pCisrICogICAgICAgICBpZiBmbGlwX3k6CisrICovCisrICBf X3B5eF90dXBsZV9fMTMgPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9zX2ludGVybmFsX2Zvcm1h dCwgX19weXhfaW50XzApOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMykpIF9fUFlYX0VS UigwLCAxMDg2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9f MTMpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTMpOworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYKKy0gKiAgICAgcmFpc2UgSW1wb3J0RXJyb3Io CistICogICAgICAgICAibGlibXB2IHZlcnNpb24gaXMgaW5jb3JyZWN0LiBSZXF1aXJlZCAlZC4l ZCBnb3QgJWQuJWQuIiAlCistICogICAgICAgICAgICAgKF9SRVFVSVJFRF9DQVBJX01BSk9SLCBf TUlOX0NBUElfTUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQSV9NSU5PUikgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICApCistICogCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoy CisrICogZGVmIF9fcmVkdWNlX2N5dGhvbl9fKHNlbGYpOgorKyAqICAgICByYWlzZSBUeXBlRXJy b3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3Ig cGlja2xpbmciKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogZGVmIF9fc2V0c3Rh dGVfY3l0aG9uX18oc2VsZiwgX19weXhfc3RhdGUpOgorKyAqICAgICByYWlzZSBUeXBlRXJyb3Io InNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlj a2xpbmciKQorICAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwg X19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFKT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCA0NiwgX19weXhfTDFfZXJyb3IpCistICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzIpOworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhf bl9zX01JTl9DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgNDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0g ICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19DQVBJX01B Sk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDYsIF9fcHl4X0wx X2Vycm9yKQorLSAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19DQVBJX01JTk9SKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDYsIF9fcHl4X0wxX2Vycm9yKQorLSAgICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgX19weXhfdF83ID0gUHlUdXBsZV9OZXcoNCk7 IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJv cikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICAgIF9fUHl4X0dJVkVSRUYoX19w eXhfdF8yKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDAsIF9fcHl4X3RfMik7 CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShf X3B5eF90XzcsIDEsIF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF80KTsK Ky0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDIsIF9fcHl4X3RfNCk7CistICAgIF9f UHl4X0dJVkVSRUYoX19weXhfdF82KTsKKy0gICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90Xzcs IDMsIF9fcHl4X3RfNik7CistICAgIF9fcHl4X3RfMiA9IDA7CistICAgIF9fcHl4X3RfMSA9IDA7 CistICAgIF9fcHl4X3RfNCA9IDA7CistICAgIF9fcHl4X3RfNiA9IDA7CisrICBfX3B5eF90dXBs ZV9fMTQgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfa3Bfc19zZWxmX19jdHhfY2Fubm90X2JlX2Nv bnZlcnRlZF90byk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE0KSkgX19QWVhfRVJSKDEs IDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xNCk7Cisr ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18xNCk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NQorLSAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9D QVBJX01BSk9SIG9yIF9DQVBJX01JTk9SIDwgX01JTl9DQVBJX01JTk9SOgorLSAqICAgICByYWlz ZSBJbXBvcnRFcnJvcigKKy0gKiAgICAgICAgICJsaWJtcHYgdmVyc2lvbiBpcyBpbmNvcnJlY3Qu IFJlcXVpcmVkICVkLiVkIGdvdCAlZC4lZC4iICUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgICAgIChfUkVRVUlSRURfQ0FQSV9NQUpPUiwgX01JTl9DQVBJX01JTk9S LCBfQ0FQSV9NQUpPUiwgX0NBUElfTUlOT1IpCistICogICAgICkKKysgIC8qICIodHJlZSBmcmFn bWVudCkiOjQKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNv bnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5nIikKKysgKiBkZWYgX19zZXRz dGF0ZV9jeXRob25fXyhzZWxmLCBfX3B5eF9zdGF0ZSk6CisrICogICAgIHJhaXNlIFR5cGVFcnJv cigic2VsZi5fY3R4IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gb2JqZWN0IGZvciBw aWNrbGluZyIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKi8KKy0gICAgX19weXhf dF82ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0KF9fcHl4X2twX3NfbGlibXB2X3ZlcnNpb25faXNf aW5jb3JyZWN0X1JlcXUsIF9fcHl4X3RfNyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDQ1LCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nik7CistICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgX19w eXhfdHVwbGVfXzE1ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5v dF9iZV9jb252ZXJ0ZWRfdG8pOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xNSkpIF9fUFlY X0VSUigxLCA0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9f MTUpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTUpOworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQKKy0gKiAKKy0gKiBpZiBfQ0FQSV9NQUpPUiAh PSBfUkVRVUlSRURfQ0FQSV9NQUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9NSU5fQ0FQSV9NSU5PUjoK Ky0gKiAgICAgcmFpc2UgSW1wb3J0RXJyb3IoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgICJsaWJtcHYgdmVyc2lvbiBpcyBpbmNvcnJlY3QuIFJlcXVpcmVkICVkLiVk IGdvdCAlZC4lZC4iICUKKy0gKiAgICAgICAgICAgICAoX1JFUVVJUkVEX0NBUElfTUFKT1IsIF9N SU5fQ0FQSV9NSU5PUiwgX0NBUElfTUFKT1IsIF9DQVBJX01JTk9SKQorKyAgLyogIih0cmVlIGZy YWdtZW50KSI6MgorKyAqIGRlZiBfX3JlZHVjZV9jeXRob25fXyhzZWxmKToKKysgKiAgICAgcmFp c2UgVHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBv YmplY3QgZm9yIHBpY2tsaW5nIikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIGRl ZiBfX3NldHN0YXRlX2N5dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgcmFpc2Ug VHlwZUVycm9yKCJzZWxmLl9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmpl Y3QgZm9yIHBpY2tsaW5nIikKKyAgKi8KKy0gICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF9idWlsdGluX0ltcG9ydEVycm9yLCBfX3B5eF90XzYpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA0NCwgX19weXhfTDFfZXJyb3IpCistICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsg X19weXhfdF82ID0gMDsKKy0gICAgX19QeXhfUmFpc2UoX19weXhfdF83LCAwLCAwLCAwKTsKKy0g ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICAgIF9fUFlYX0VS UigwLCA0NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90dXBsZV9fMTYgPSBQeVR1cGxlX1Bh Y2soMSwgX19weXhfa3Bfc19zZWxmX19jdHhfY2Fubm90X2JlX2NvbnZlcnRlZF90byk7IGlmICh1 bmxpa2VseSghX19weXhfdHVwbGVfXzE2KSkgX19QWVhfRVJSKDEsIDIsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xNik7CisrICBfX1B5eF9HSVZFUkVGKF9f cHl4X3R1cGxlX18xNik7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo0MworLSAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVSU0lPTiAmIDB4RkZGRgorLSAqIAorLSAq IGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9yIF9DQVBJX01JTk9SIDwg X01JTl9DQVBJX01JTk9SOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHJh aXNlIEltcG9ydEVycm9yKAorLSAqICAgICAgICAgImxpYm1wdiB2ZXJzaW9uIGlzIGluY29ycmVj dC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJQorKyAgLyogIih0cmVlIGZyYWdtZW50KSI6 NAorKyAqICAgICByYWlzZSBUeXBlRXJyb3IoInNlbGYuX2N0eCBjYW5ub3QgYmUgY29udmVydGVk IHRvIGEgUHl0aG9uIG9iamVjdCBmb3IgcGlja2xpbmciKQorKyAqIGRlZiBfX3NldHN0YXRlX2N5 dGhvbl9fKHNlbGYsIF9fcHl4X3N0YXRlKToKKysgKiAgICAgcmFpc2UgVHlwZUVycm9yKCJzZWxm Ll9jdHggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBvYmplY3QgZm9yIHBpY2tsaW5n IikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqLworLSAgfQorKyAgX19weXhfdHVw bGVfXzE3ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2twX3Nfc2VsZl9fY3R4X2Nhbm5vdF9iZV9j b252ZXJ0ZWRfdG8pOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xNykpIF9fUFlYX0VSUigx LCA0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTcpOwor KyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTcpOworIAorICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjUyCistICogICAgIHZvaWQgUHlFdmFsX0luaXRUaHJlYWRzKCkK KysgKiAgICAgdm9pZCBQeV9Jbml0aWFsaXplKCkKKyAgKiAKKyAgKiBfaXNfcHkzID0gc3lzLnZl cnNpb25faW5mbyA+PSAoMywpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiBfc3Ry ZGVjX2VyciA9ICJzdXJyb2dhdGVlc2NhcGUiIGlmIF9pc19weTMgZWxzZSAic3RyaWN0IgorICAq ICMgbXB2IC0+IFB5dGhvbgorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5 eF90XzcsIF9fcHl4X25fc19zeXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VS UigwLCA1MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKy0g IF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF83LCBfX3B5eF9u X3NfdmVyc2lvbl9pbmZvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg NTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBfX1B5 eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gIF9fcHl4X3RfNyA9IFB5T2Jq ZWN0X1JpY2hDb21wYXJlKF9fcHl4X3RfNiwgX19weXhfdHVwbGVfXzIxLCBQeV9HRSk7IF9fUHl4 X1hHT1RSRUYoX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIo MCwgNTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4 X3RfNiA9IDA7CistICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX2lzX3B5 MywgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA1MiwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0KKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MworLSAqIAorLSAqIF9pc19weTMgPSBzeXMudmVyc2lv bl9pbmZvID49ICgzLCkKKy0gKiBfc3RyZGVjX2VyciA9ICJzdXJyb2dhdGVlc2NhcGUiIGlmIF9p c19weTMgZWxzZSAic3RyaWN0IiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogIyBt cHYgLT4gUHl0aG9uCistICogZGVmIF9zdHJkZWMocyk6CistICovCistICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2lzX3B5Myk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDUzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOworLSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9f cHl4X3RfNik7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDUzLCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OworLSAgaWYgKF9fcHl4X3RfMykgeworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfbl9zX3N1cnJv Z2F0ZWVzY2FwZSk7CistICAgIF9fcHl4X3RfNyA9IF9fcHl4X25fc19zdXJyb2dhdGVlc2NhcGU7 CistICB9IGVsc2UgeworLSAgICBfX1B5eF9JTkNSRUYoX19weXhfbl9zX3N0cmljdCk7CistICAg IF9fcHl4X3RfNyA9IF9fcHl4X25fc19zdHJpY3Q7CistICB9CistICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRlY19lcnIsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9F UlIoMCwgNTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9f cHl4X3RfNyA9IDA7CisrICBfX3B5eF90dXBsZV9fMTggPSBQeVR1cGxlX1BhY2soMSwgX19weXhf aW50XzMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xOCkpIF9fUFlYX0VSUigwLCA1Miwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzE4KTsKKysgIF9f UHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzE4KTsKKyAKKyAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1NQorICAqIF9zdHJkZWNfZXJyID0gInN1cnJvZ2F0ZWVzY2FwZSIgaWYg X2lzX3B5MyBlbHNlICJzdHJpY3QiCitAQCAtMjg1NjQsMTAgKzI0NjQ0LDEwIEBAIGlmICghX19Q eXhfUmVmTmFubnkpIHsKKyAgKiAgICAgdHJ5OgorICAqICAgICAgICAgcmV0dXJuIHMuZGVjb2Rl KCJ1dGYtOCIsIF9zdHJkZWNfZXJyKQorICAqLworLSAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25f TmV3RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzFfc3RyZGVjLCBOVUxMLCBf X3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBf X1BZWF9FUlIoMCwgNTUsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nyk7CistICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRlYywgX19w eXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgIF9fcHl4X3R1cGxlX18xOSA9IFB5 VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfcyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE5 KSkgX19QWVhfRVJSKDAsIDU1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5 eF90dXBsZV9fMTkpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTkpOworKyAgX19w eXhfY29kZW9ial9fMjAgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwg Q09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5 X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzE5LCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZf bXB2X3B5eCwgX19weXhfbl9zX3N0cmRlYywgNTUsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18yMCkpIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJy b3IpCisgCisgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMKKyAgKiAKK0BA IC0yODU3Niw1MDQwICsyNDY1Niw1NTU1IEBAIGlmICghX19QeXhfUmVmTmFubnkpIHsKKyAgKiAg ICAgdHJ5OgorICAqICAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJ1dGYtOCIsIF9zdHJkZWNfZXJy KQorICAqLworLSAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3RXgoJl9fcHl4X21kZWZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzNfc3RyZW5jLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xp YnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNjMsIF9fcHl4 X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICBpZiAoUHlEaWN0X1Nl dEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmVuYywgX19weXhfdF83KSA8IDApIF9fUFlYX0VS UigwLCA2MywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19w eXhfdF83ID0gMDsKKysgIF9fcHl4X3R1cGxlX18yMSA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9u X3Nfcyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzIxKSkgX19QWVhfRVJSKDAsIDYzLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjEpOworKyAgX19Q eXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMjEpOworKyAgX19weXhfY29kZW9ial9fMjIgPSAoUHlP YmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xP Q0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfdHVwbGVfXzIxLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3N0 cmVuYywgNjMsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2Jq X18yMikpIF9fUFlYX0VSUigwLCA2MywgX19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAKKy0gKiAgICAgICAgIHJldHVybiBzCisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE4CisgICogCistICogUHlFdmFsX0luaXRU aHJlYWRzKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorLSAqIGNsYXNzIEVy cm9yczoKKysgKiBkZWYgX2Vycm9ycyhmbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgorKyAqICAgICAgICAgdiA9IGZuKCprLCAq Kmt3KQorICAqLworLSAgUHlFdmFsX0luaXRUaHJlYWRzKCk7CisrICBfX3B5eF90dXBsZV9fMjMg PSBQeVR1cGxlX1BhY2soMywgX19weXhfbl9zX2ZuLCBfX3B5eF9uX3Nfd3JhcHBlZCwgX19weXhf bl9zX3dyYXBwZWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18yMykpIF9fUFlYX0VSUigw LCAzMTgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18yMyk7 CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18yMyk7CisrICBfX3B5eF9jb2Rlb2JqX18y NCA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAzLCAwLCBDT19PUFRJTUlaRUR8 Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMjMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5 eF9uX3NfZXJyb3JzLCAzMTgsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF9jb2Rlb2JqX18yNCkpIF9fUFlYX0VSUigwLCAzMTgsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyCistICogUHlFdmFsX0luaXRUaHJl YWRzKCkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjkKKysgKiAgICAg Y29kZSA9IE5vbmUKKyAgKiAKKy0gKiBjbGFzcyBFcnJvcnM6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgIiIiU2V0IG9mIGtub3duIGVycm9yIGNvZGVzIGZyb20gTXB2RXJy b3IgYW5kIEV2ZW50IHJlc3BvbnNlcy4KKysgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmNvZGUgPSBlCisr ICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVycl9jCisrICovCisrICBfX3B5eF90dXBsZV9f MjUgPSBQeVR1cGxlX1BhY2soNCwgX19weXhfbl9zX3NlbGYsIF9fcHl4X25fc19lLCBfX3B5eF9u X3NfZXJyX2MsIF9fcHl4X25fc19lX2kpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18yNSkp IF9fUFlYX0VSUigwLCAzMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4 X3R1cGxlX18yNSk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18yNSk7CisrICBfX3B5 eF9jb2Rlb2JqX18yNiA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygyLCAwLCA0LCAwLCBD T19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlf dHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMjUsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9t cHZfcHl4LCBfX3B5eF9uX3NfaW5pdCwgMzI5LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxp a2VseSghX19weXhfY29kZW9ial9fMjYpKSBfX1BZWF9FUlIoMCwgMzI5LCBfX3B5eF9MMV9lcnJv cikKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDYKKysgKiBjZGVm IF9yZXBseV91c2VyZGF0YXMgPSBkaWN0KCkKKyAgKiAKKysgKiBjbGFzcyBfUmVwbHlVc2VyRGF0 YShvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGRlZiBfX2lu aXRfXyhzZWxmLCBkYXRhKToKKysgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKyAgKi8KKy0g IF9fcHl4X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEws IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfRXJyb3JzLCBfX3B5eF9uX3NfRXJyb3JzLCAo UHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfa3Bf c19TZXRfb2Zfa25vd25fZXJyb3JfY29kZXNfZnJvbV9NcCk7IGlmICh1bmxpa2VseSghX19weXhf dF83KSkgX19QWVhfRVJSKDAsIDcyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOworKyAgX19weXhfdHVwbGVfXzI3ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2J1 aWx0aW5fb2JqZWN0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjcpKSBfX1BZWF9FUlIo MCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjcp OworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMjcpOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc5CistICogICAgIFlvdSBzaG91bGQgaGFuZGxlIHRoZSBw b3NzaWJpbGl0eSB0aGF0IGVycm9yIGNvZGVzIG1heSBub3QgYmUgYW55IG9mIHRoZXNlIHZhbHVl cy4KKy0gKiAgICAgIiIiCistICogICAgIHN1Y2Nlc3MgPSBNUFZfRVJST1JfU1VDQ0VTUyAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHF1ZXVlX2Z1bGwgPSBNUFZfRVJST1Jf RVZFTlRfUVVFVUVfRlVMTAorLSAqICAgICBub21lbSA9IE1QVl9FUlJPUl9OT01FTQorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NworKyAqIAorKyAqIGNsYXNzIF9SZXBs eVVzZXJEYXRhKG9iamVjdCk6CisrICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5jb3VudGVyID0gMAor KyAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAqLworLSAgX19weXhfdF82ID0gX19QeXhf UHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1NVQ0NFU1MpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA3OSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90 XzcsIF9fcHl4X25fc19zdWNjZXNzLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDc5LCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OworKyAgX19weXhfdHVwbGVfXzI4ID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19zZWxmLCBf X3B5eF9uX3NfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzI4KSkgX19QWVhfRVJS KDAsIDM0NywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzI4 KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzI4KTsKKysgIF9fcHl4X2NvZGVvYmpf XzI5ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDIsIDAsIDIsIDAsIENPX09QVElNSVpF RHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18yOCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9f cHl4X25fc19pbml0LCAzNDcsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF9jb2Rlb2JqX18yOSkpIF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgwCistICogICAgICIiIgorLSAqICAg ICBzdWNjZXNzID0gTVBWX0VSUk9SX1NVQ0NFU1MKKy0gKiAgICAgcXVldWVfZnVsbCA9IE1QVl9F UlJPUl9FVkVOVF9RVUVVRV9GVUxMICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgbm9tZW0gPSBNUFZfRVJST1JfTk9NRU0KKy0gKiAgICAgdW5pbml0aWFsaXplZCA9IE1QVl9F UlJPUl9VTklOSVRJQUxJWkVECisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzUyCisrICogICAgICAgICBzZWxmLm9ic2VydmVkID0gRmFsc2UKKysgKiAKKysgKiAgICAgZGVm IGFkZChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2Vs Zi5jb3VudGVyICs9IDEKKysgKiAKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9FVkVOVF9RVUVVRV9GVUxMKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF83LCBfX3B5eF9uX3NfcXVldWVfZnVsbCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4 MCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKysgIF9fcHl4X3R1cGxlX18zMCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfc2Vs Zik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzMwKSkgX19QWVhfRVJSKDAsIDM1MiwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzMwKTsKKysgIF9fUHl4 X0dJVkVSRUYoX19weXhfdHVwbGVfXzMwKTsKKysgIF9fcHl4X2NvZGVvYmpfXzMxID0gKFB5T2Jq ZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NB TFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X3R1cGxlX18zMCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxl LCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19hZGQs IDM1MiwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzMx KSkgX19QWVhfRVJSKDAsIDM1MiwgX19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6ODEKKy0gKiAgICAgc3VjY2VzcyA9IE1QVl9FUlJPUl9TVUND RVNTCistICogICAgIHF1ZXVlX2Z1bGwgPSBNUFZfRVJST1JfRVZFTlRfUVVFVUVfRlVMTAorLSAq ICAgICBub21lbSA9IE1QVl9FUlJPUl9OT01FTSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CistICogICAgIHVuaW5pdGlhbGl6ZWQgPSBNUFZfRVJST1JfVU5JTklUSUFMSVpFRAorLSAqICAg ICBpbnZhbGlkX3BhcmFtZXRlciA9IE1QVl9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUgorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQorKyAqICAgICAgICAgc2VsZi5jb3Vu dGVyICs9IDEKKysgKiAKKysgKiAgICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgc2VsZi5jb3VudGVyIC09IDEKKysgKiAKKyAgKi8K Ky0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJP Ul9OT01FTSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgxLCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1Nl dE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX25vbWVtLCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDgxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19weXhfdHVwbGVfXzMyID0gUHlUdXBsZV9QYWNrKDEs IF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMzIpKSBfX1BZWF9F UlIoMCwgMzU1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9f MzIpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMzIpOworKyAgX19weXhfY29kZW9i al9fMzMgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1J WkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzMyLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwg X19weXhfbl9zX3JlbW92ZSwgMzU1LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSgh X19weXhfY29kZW9ial9fMzMpKSBfX1BZWF9FUlIoMCwgMzU1LCBfX3B5eF9MMV9lcnJvcikKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MgorLSAqICAgICBxdWV1ZV9m dWxsID0gTVBWX0VSUk9SX0VWRU5UX1FVRVVFX0ZVTEwKKy0gKiAgICAgbm9tZW0gPSBNUFZfRVJS T1JfTk9NRU0KKy0gKiAgICAgdW5pbml0aWFsaXplZCA9IE1QVl9FUlJPUl9VTklOSVRJQUxJWkVE ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgaW52YWxpZF9wYXJhbWV0ZXIg PSBNUFZfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIKKy0gKiAgICAgbm90X2ZvdW5kID0gTVBWX0VS Uk9SX09QVElPTl9OT1RfRk9VTkQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTMzCisrICogCisrICogY2xhc3MgQ2FsbGJhY2tUaHJlYWQoVGhyZWFkKToKKysgKiAgICAg ZGVmIF9faW5pdF9fKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKysgKiAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1 ZQorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3Io TVBWX0VSUk9SX1VOSU5JVElBTElaRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCA4MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK Ky0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc191bmluaXRp YWxpemVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDgyLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19weXhfdHVw bGVfXzM0ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90dXBsZV9fMzQpKSBfX1BZWF9FUlIoMCwgMTEzMywgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzM0KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVw bGVfXzM0KTsKKysgIF9fcHl4X2NvZGVvYmpfXzM1ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVf TmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5 dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18z NCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1 dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19pbml0LCAxMTMzLCBfX3B5eF9lbXB0 eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMzUpKSBfX1BZWF9FUlIoMCwg MTEzMywgX19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6ODMKKy0gKiAgICAgbm9tZW0gPSBNUFZfRVJST1JfTk9NRU0KKy0gKiAgICAgdW5pbml0 aWFsaXplZCA9IE1QVl9FUlJPUl9VTklOSVRJQUxJWkVECistICogICAgIGludmFsaWRfcGFyYW1l dGVyID0gTVBWX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX09QVElPTl9OT1RfRk9VTkQKKy0g KiAgICAgb3B0aW9uX2Zvcm1hdCA9IE1QVl9FUlJPUl9PUFRJT05fRk9STUFUCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQorKyAqICAgICAgICAgc2VsZi5pc3NodXRk b3duID0gRmFsc2UKKysgKiAKKysgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlCisr ICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorICAqLworLSAgX19weXhfdF82ID0gX19Q eXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVS KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODMsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfaW52YWxpZF9wYXJhbWV0ZXIsIF9fcHl4X3RfNikg PCAwKSBfX1BZWF9FUlIoMCwgODMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9f cHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICBfX3B5eF90dXBsZV9fMzYgPSBQeVR1cGxlX1Bh Y2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18zNikpIF9f UFlYX0VSUigwLCAxMTQxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 dXBsZV9fMzYpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMzYpOworKyAgX19weXhf Y29kZW9ial9fMzcgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09f T1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzM2LCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2 X3B5eCwgX19weXhfbl9zX3NodXRkb3duLCAxMTQxLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1 bmxpa2VseSghX19weXhfY29kZW9ial9fMzcpKSBfX1BZWF9FUlIoMCwgMTE0MSwgX19weXhfTDFf ZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODQKKy0gKiAg ICAgdW5pbml0aWFsaXplZCA9IE1QVl9FUlJPUl9VTklOSVRJQUxJWkVECistICogICAgIGludmFs aWRfcGFyYW1ldGVyID0gTVBWX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSCistICogICAgIG5vdF9m b3VuZCA9IE1QVl9FUlJPUl9PUFRJT05fTk9UX0ZPVU5EICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgb3B0aW9uX2Zvcm1hdCA9IE1QVl9FUlJPUl9PUFRJT05fRk9STUFUCist ICogICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJT05fRVJST1IKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ2CisrICogICAgICAgICBzZWxmLmxvY2sucmVs ZWFzZSgpCisrICogCisrICogICAgIGRlZiBjYWxsKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisrICogCisrICovCisr ICBfX3B5eF90dXBsZV9fMzggPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3R1cGxlX18zOCkpIF9fUFlYX0VSUigwLCAxMTQ2LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMzgpOworKyAgX19QeXhfR0lWRVJF RihfX3B5eF90dXBsZV9fMzgpOworKyAgX19weXhfY29kZW9ial9fMzkgPSAoUHlPYmplY3QqKV9f UHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19w eXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfdHVwbGVfXzM4LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX2NhbGwsIDExNDYs IF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18zOSkpIF9f UFlYX0VSUigwLCAxMTQ2LCBfX3B5eF9MMV9lcnJvcikKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTQ5CisrICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisr ICogCisrICogICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKysgKiAKKyAg Ki8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9F UlJPUl9PUFRJT05fTk9UX0ZPVU5EKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgODQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cist ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm90X2ZvdW5k LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg0LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19weXhfdHVwbGVfXzQw ID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2spOyBp ZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX180MCkpIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNDApOworKyAgX19QeXhfR0lW RVJFRihfX3B5eF90dXBsZV9fNDApOworKyAgX19weXhfY29kZW9ial9fNDEgPSAoUHlPYmplY3Qq KV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgMiwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywg X19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwg X19weXhfdHVwbGVfXzQwLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9f cHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3NldCwgMTE0 OSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzQxKSkg X19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjg1CistICogICAgIGludmFsaWRfcGFyYW1ldGVyID0gTVBWX0VS Uk9SX0lOVkFMSURfUEFSQU1FVEVSCistICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9PUFRJ T05fTk9UX0ZPVU5ECistICogICAgIG9wdGlvbl9mb3JtYXQgPSBNUFZfRVJST1JfT1BUSU9OX0ZP Uk1BVCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIG9wdGlvbl9lcnJvciA9 IE1QVl9FUlJPUl9PUFRJT05fRVJST1IKKy0gKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX1BS T1BFUlRZX05PVF9GT1VORAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx NTIKKysgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjaworKyAqIAorKyAqICAgICBk ZWYgcnVuKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB3 aGlsZSBub3Qgc2VsZi5pc3NodXRkb3duOgorKyAqICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1 aXJlKFRydWUpCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21w dl9lcnJvcihNUFZfRVJST1JfT1BUSU9OX0ZPUk1BVCk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDg1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9z X29wdGlvbl9mb3JtYXQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODUsIF9fcHl4X0wx X2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICBf X3B5eF90dXBsZV9fNDIgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3R1cGxlX180MikpIF9fUFlYX0VSUigwLCAxMTUyLCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNDIpOworKyAgX19QeXhfR0lWRVJFRihf X3B5eF90dXBsZV9fNDIpOworKyAgX19weXhfY29kZW9ial9fNDMgPSAoUHlPYmplY3QqKV9fUHl4 X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhf ZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf dHVwbGVfXzQyLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2tw X3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3J1biwgMTE1MiwgX19w eXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzQzKSkgX19QWVhf RVJSKDAsIDExNTIsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjg2CistICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9PUFRJT05fTk9U X0ZPVU5ECistICogICAgIG9wdGlvbl9mb3JtYXQgPSBNUFZfRVJST1JfT1BUSU9OX0ZPUk1BVAor LSAqICAgICBvcHRpb25fZXJyb3IgPSBNUFZfRVJST1JfT1BUSU9OX0VSUk9SICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX1BST1BFUlRZ X05PVF9GT1VORAorLSAqICAgICBwcm9wZXJ0eV9mb3JtYXQgPSBNUFZfRVJST1JfUFJPUEVSVFlf Rk9STUFUCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1NworKyAqICAg ICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2FsbGJh Y2sgZWxzZSBOb25lCisrICogCisrICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJh Y2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB0cnk6CisrICog ICAgICAgICAgICAgY2FsbGJhY2soKQorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX09QVElPTl9FUlJPUik7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg2LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX29wdGlvbl9lcnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4 NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKysgIF9fcHl4X3R1cGxlX180NCA9IFB5VHVwbGVfUGFjaygzLCBfX3B5eF9uX3Nfc2Vs ZiwgX19weXhfbl9zX2NhbGxiYWNrLCBfX3B5eF9uX3NfZSk7IGlmICh1bmxpa2VseSghX19weXhf dHVwbGVfXzQ0KSkgX19QWVhfRVJSKDAsIDExNTcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf R09UUkVGKF9fcHl4X3R1cGxlX180NCk7CisrICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180 NCk7CisrICBfX3B5eF9jb2Rlb2JqX180NSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygy LCAwLCAzLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywg X19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDQsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJf bGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfbXB2X2NhbGxiYWNrLCAxMTU3LCBfX3B5eF9l bXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fNDUpKSBfX1BZWF9FUlIo MCwgMTE1NywgX19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODcKKy0gKiAgICAgb3B0aW9uX2Zvcm1hdCA9IE1QVl9FUlJPUl9PUFRJT05fRk9S TUFUCistICogICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJT05fRVJST1IKKy0gKiAg ICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX1BST1BFUlRZX05PVF9GT1VORCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9QUk9Q RVJUWV9GT1JNQVQKKy0gKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1JfUFJP UEVSVFlfVU5BVkFJTEFCTEUKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjEKKysgKiBkZWYgX19w eXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZChfX3B5eF90eXBlLCBsb25nIF9fcHl4X2NoZWNr c3VtLCBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAg Y2RlZiBvYmplY3QgX19weXhfUGlja2xlRXJyb3IKKysgKiAgICAgY2RlZiBvYmplY3QgX19weXhf cmVzdWx0CisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l cnJvcihNUFZfRVJST1JfUFJPUEVSVFlfTk9UX0ZPVU5EKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzYpKSBfX1BZWF9FUlIoMCwgODcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9u X3Nfbm90X2ZvdW5kLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg3LCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19w eXhfdHVwbGVfXzQ2ID0gUHlUdXBsZV9QYWNrKDUsIF9fcHl4X25fc19weXhfdHlwZSwgX19weXhf bl9zX3B5eF9jaGVja3N1bSwgX19weXhfbl9zX3B5eF9zdGF0ZSwgX19weXhfbl9zX3B5eF9QaWNr bGVFcnJvciwgX19weXhfbl9zX3B5eF9yZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxl X180NikpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90dXBsZV9fNDYpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNDYpOworKyAg X19weXhfY29kZW9ial9fNDcgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMywgMCwgNSwg MCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzQ2LCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3Nfc3RyaW5nc291cmNlLCBfX3B5 eF9uX3NfcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQsIDEsIF9fcHl4X2VtcHR5X2J5dGVz KTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX180NykpIF9fUFlYX0VSUigxLCAxLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX180OCA9IFB5VHVwbGVfUGFjayg1LCBfX3B5eF9u X3NfcHl4X3R5cGUsIF9fcHl4X25fc19weXhfY2hlY2tzdW0sIF9fcHl4X25fc19weXhfc3RhdGUs IF9fcHl4X25fc19weXhfUGlja2xlRXJyb3IsIF9fcHl4X25fc19weXhfcmVzdWx0KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90dXBsZV9fNDgpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3Ip CisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzQ4KTsKKysgIF9fUHl4X0dJVkVSRUYoX19w eXhfdHVwbGVfXzQ4KTsKKysgIF9fcHl4X2NvZGVvYmpfXzQ5ID0gKFB5T2JqZWN0KilfX1B5eF9Q eUNvZGVfTmV3KDMsIDAsIDUsIDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2Vt cHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1 cGxlX180OCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9z X3N0cmluZ3NvdXJjZSwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCAxLCBfX3B5 eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fNDkpKSBfX1BZWF9F UlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90dXBsZV9fNTAgPSBQeVR1cGxlX1Bh Y2soNSwgX19weXhfbl9zX3B5eF90eXBlLCBfX3B5eF9uX3NfcHl4X2NoZWNrc3VtLCBfX3B5eF9u X3NfcHl4X3N0YXRlLCBfX3B5eF9uX3NfcHl4X1BpY2tsZUVycm9yLCBfX3B5eF9uX3NfcHl4X3Jl c3VsdCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzUwKSkgX19QWVhfRVJSKDEsIDEsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX181MCk7CisrICBfX1B5 eF9HSVZFUkVGKF9fcHl4X3R1cGxlX181MCk7CisrICBfX3B5eF9jb2Rlb2JqX181MSA9IChQeU9i amVjdCopX19QeXhfUHlDb2RlX05ldygzLCAwLCA1LCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9D QUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF90dXBsZV9fNTAsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfa3Bfc19zdHJpbmdzb3VyY2UsIF9fcHl4X25fc19weXhfdW5waWNrbGVfUHJvcGVy dHksIDEsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX181 MSkpIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX181MiA9 IFB5VHVwbGVfUGFjayg1LCBfX3B5eF9uX3NfcHl4X3R5cGUsIF9fcHl4X25fc19weXhfY2hlY2tz dW0sIF9fcHl4X25fc19weXhfc3RhdGUsIF9fcHl4X25fc19weXhfUGlja2xlRXJyb3IsIF9fcHl4 X25fc19weXhfcmVzdWx0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fNTIpKSBfX1BZWF9F UlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzUy KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzUyKTsKKysgIF9fcHl4X2NvZGVvYmpf XzUzID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDMsIDAsIDUsIDAsIENPX09QVElNSVpF RHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX181MiwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3N0cmluZ3NvdXJjZSwgX19weXhfbl9zX3B5eF91bnBp Y2tsZV9FdmVudCwgMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2Nv ZGVvYmpfXzUzKSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVw bGVfXzU0ID0gUHlUdXBsZV9QYWNrKDUsIF9fcHl4X25fc19weXhfdHlwZSwgX19weXhfbl9zX3B5 eF9jaGVja3N1bSwgX19weXhfbl9zX3B5eF9zdGF0ZSwgX19weXhfbl9zX3B5eF9QaWNrbGVFcnJv ciwgX19weXhfbl9zX3B5eF9yZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX181NCkp IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 dXBsZV9fNTQpOworKyAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNTQpOworKyAgX19weXhf Y29kZW9ial9fNTUgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMywgMCwgNSwgMCwgQ09f T1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzU0LCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3Nfc3RyaW5nc291cmNlLCBfX3B5eF9uX3Nf cHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzU1KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gMDsKKysg IF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAg cmV0dXJuIC0xOworK30KKysKKytzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X0lu aXRHbG9iYWxzKHZvaWQpIHsKKysgIGlmIChfX1B5eF9Jbml0U3RyaW5ncyhfX3B5eF9zdHJpbmdf dGFiKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcik7CisrICBfX3B5eF9pbnRf MCA9IFB5SW50X0Zyb21Mb25nKDApOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8wKSkgX19QWVhf RVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfaW50XzEgPSBQeUludF9Gcm9tTG9u ZygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfMSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X2ludF8yID0gUHlJbnRfRnJvbUxvbmcoMik7IGlmICh1bmxpa2Vs eSghX19weXhfaW50XzIpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF9pbnRfMyA9IFB5SW50X0Zyb21Mb25nKDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8zKSkg X19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfaW50XzMyID0gUHlJbnRf RnJvbUxvbmcoMzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8zMikpIF9fUFlYX0VSUigwLCAx LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X2ludF81NzEzMTY5ID0gUHlJbnRfRnJvbUxvbmco NTcxMzE2OUwpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF81NzEzMTY5KSkgX19QWVhfRVJSKDAs IDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfaW50XzkwOTU4MjYyID0gUHlJbnRfRnJvbUxv bmcoOTA5NTgyNjJMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfOTA5NTgyNjIpKSBfX1BZWF9F UlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF9pbnRfMTQyMDM2OTEwID0gUHlJbnRf RnJvbUxvbmcoMTQyMDM2OTEwTCk7IGlmICh1bmxpa2VseSghX19weXhfaW50XzE0MjAzNjkxMCkp IF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X2ludF8yMjI0MTkxNDkg PSBQeUludF9Gcm9tTG9uZygyMjI0MTkxNDlMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfMjIy NDE5MTQ5KSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfaW50XzIy ODgyMjA1MyA9IFB5SW50X0Zyb21Mb25nKDIyODgyMjA1M0wpOyBpZiAodW5saWtlbHkoIV9fcHl4 X2ludF8yMjg4MjIwNTMpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF9pbnRfbmVnXzEgPSBQeUludF9Gcm9tTG9uZygtMSk7IGlmICh1bmxpa2VseSghX19weXhfaW50 X25lZ18xKSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgcmV0dXJuIDA7Cisr ICBfX3B5eF9MMV9lcnJvcjo7CisrICByZXR1cm4gLTE7CisrfQorKworK3N0YXRpYyBDWVRIT05f U01BTExfQ09ERSBpbnQgX19QeXhfbW9kaW5pdF9nbG9iYWxfaW5pdF9jb2RlKHZvaWQpOyAvKnBy b3RvKi8KKytzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X21vZGluaXRfdmFyaWFi bGVfZXhwb3J0X2NvZGUodm9pZCk7IC8qcHJvdG8qLworK3N0YXRpYyBDWVRIT05fU01BTExfQ09E RSBpbnQgX19QeXhfbW9kaW5pdF9mdW5jdGlvbl9leHBvcnRfY29kZSh2b2lkKTsgLypwcm90byov Cisrc3RhdGljIENZVEhPTl9TTUFMTF9DT0RFIGludCBfX1B5eF9tb2Rpbml0X3R5cGVfaW5pdF9j b2RlKHZvaWQpOyAvKnByb3RvKi8KKytzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4 X21vZGluaXRfdHlwZV9pbXBvcnRfY29kZSh2b2lkKTsgLypwcm90byovCisrc3RhdGljIENZVEhP Tl9TTUFMTF9DT0RFIGludCBfX1B5eF9tb2Rpbml0X3ZhcmlhYmxlX2ltcG9ydF9jb2RlKHZvaWQp OyAvKnByb3RvKi8KKytzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X21vZGluaXRf ZnVuY3Rpb25faW1wb3J0X2NvZGUodm9pZCk7IC8qcHJvdG8qLworKworK3N0YXRpYyBpbnQgX19Q eXhfbW9kaW5pdF9nbG9iYWxfaW5pdF9jb2RlKHZvaWQpIHsKKysgIF9fUHl4X1JlZk5hbm55RGVj bGFyYXRpb25zCisrICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19QeXhfbW9kaW5pdF9n bG9iYWxfaW5pdF9jb2RlIiwgMCk7CisrICAvKi0tLSBHbG9iYWwgaW5pdCBjb2RlIC0tLSovCisr ICBfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY2FsbGJhY2tzID0gUHlfTm9uZTsgUHlf SU5DUkVGKFB5X05vbmUpOworKyAgX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5 X3VzZXJkYXRhcyA9IFB5X05vbmU7IFB5X0lOQ1JFRihQeV9Ob25lKTsKKysgIF9fUHl4X1JlZk5h bm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgX19Q eXhfbW9kaW5pdF92YXJpYWJsZV9leHBvcnRfY29kZSh2b2lkKSB7CisrICBfX1B5eF9SZWZOYW5u eURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fUHl4X21vZGlu aXRfdmFyaWFibGVfZXhwb3J0X2NvZGUiLCAwKTsKKysgIC8qLS0tIFZhcmlhYmxlIGV4cG9ydCBj b2RlIC0tLSovCisrICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKKysgIHJldHVybiAw OworK30KKysKKytzdGF0aWMgaW50IF9fUHl4X21vZGluaXRfZnVuY3Rpb25fZXhwb3J0X2NvZGUo dm9pZCkgeworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX1B5eF9tb2Rpbml0X2Z1bmN0aW9uX2V4cG9ydF9jb2RlIiwgMCk7Cisr ICAvKi0tLSBGdW5jdGlvbiBleHBvcnQgY29kZSAtLS0qLworKyAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBfX1B5eF9tb2Rp bml0X3R5cGVfaW5pdF9jb2RlKHZvaWQpIHsKKysgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25z CisrICBpbnQgX19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1l ID0gTlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKysgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX1B5eF9tb2Rpbml0X3R5cGVfaW5pdF9jb2RlIiwgMCk7CisrICAvKi0tLSBU eXBlIGluaXQgY29kZSAtLS0qLworKyAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRW5kT2ZGaWxlUmVhY2hlZCA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0VuZE9mRmlsZVJlYWNoZWQ7CisrICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0VuZE9mRmlsZVJlYWNoZWQuX2luaXQgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICosIHN0cnVjdCBtcHZfZXZl bnRfZW5kX2ZpbGUgKikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVS ZWFjaGVkX19pbml0OworKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCkgPCAwKSBfX1BZWF9FUlIoMCwgMTU2LCBfX3B5 eF9MMV9lcnJvcikKKysgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKKysgIF9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQudHBfcHJpbnQgPSAw OworKyAgI2VuZGlmCisrICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNF X1BZVFlQRV9MT09LVVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRW5kT2ZGaWxlUmVhY2hlZC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQudHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2Vu ZXJpY0dldEF0dHIpKSB7CisrICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0Vu ZE9mRmlsZVJlYWNoZWQudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0 cjsKKysgIH0KKysgIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZC50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9f cHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9z X0VuZE9mRmlsZVJlYWNoZWQsIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9fcHl4X0wx X2Vycm9yKQorKyAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigw LCAxNTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0VuZE9mRmlsZVJlYWNoZWQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RW5kT2ZGaWxlUmVhY2hlZDsKKysgIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2 X0xvZ01lc3NhZ2UgPSAmX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlOworKyAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLl9p bml0ID0gKFB5T2JqZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfTG9nTWVzc2FnZSAqLCBzdHJ1Y3QgbXB2X2V2ZW50X2xvZ19tZXNzYWdlICopKV9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9faW5pdDsKKysgIGlmIChQeVR5cGVf UmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpIDwgMCkg X19QWVhfRVJSKDAsIDE4MiwgX19weXhfTDFfZXJyb3IpCisrICAjaWYgUFlfVkVSU0lPTl9IRVgg PCAweDAzMDgwMEIxCisrICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlLnRwX3ByaW50ID0gMDsKKysgICNlbmRpZgorKyAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xP VFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UudHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLnRwX2dldGF0dHJvID09IFB5T2JqZWN0 X0dlbmVyaWNHZXRBdHRyKSkgeworKyAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Mb2dNZXNzYWdlLnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7 CisrICB9CisrICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X0xvZ01lc3NhZ2UudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfTG9nTWVzc2FnZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikK KysgIGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19Mb2dNZXNzYWdlLCAo UHlPYmplY3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSkg PCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9zZXR1 cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9n TWVzc2FnZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlID0gJl9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2U7CisrICBfX3B5eF92dGFicHRyXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1Byb3BlcnR5OworKyAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eS5faW5pdCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X1Byb3BlcnR5ICosIHN0cnVjdCBtcHZfZXZlbnRfcHJvcGVydHkgKikpX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3BlcnR5X19pbml0OworKyAgaWYgKFB5VHlwZV9S ZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpIDwgMCkgX19Q WVhfRVJSKDAsIDI0MywgX19weXhfTDFfZXJyb3IpCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPCAw eDAzMDgwMEIxCisrICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eS50 cF9wcmludCA9IDA7CisrICAjZW5kaWYKKysgIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYm IENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eS50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X1Byb3BlcnR5LnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNH ZXRBdHRyKSkgeworKyAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eS50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOworKyAgfQorKyAg aWYgKF9fUHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eS50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eSkgPCAwKSBfX1BZWF9FUlIoMCwgMjQzLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeU9iamVj dF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19Qcm9wZXJ0eSwgKFB5T2JqZWN0ICopJl9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSA8IDApIF9fUFlYX0VSUigwLCAy NDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3Qq KSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSkgPCAwKSBfX1BZWF9F UlIoMCwgMjQzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Qcm9wZXJ0eSA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eTsKKysgIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ID0gJl9f cHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQ7CisrICBfX3B5eF92dGFibGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50Ll9kYXRhID0gKFB5T2JqZWN0ICooKikoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKiwgc3RydWN0IG1wdl9ldmVu dCAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGE7CisrICBfX3B5 eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50Ll9pbml0ID0gKFB5T2JqZWN0ICoo Kikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKiwgc3RydWN0 IG1wdl9ldmVudCAqLCBQeU9iamVjdCAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81 RXZlbnRfX2luaXQ7CisrICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FdmVudCkgPCAwKSBfX1BZWF9FUlIoMCwgMjU2LCBfX3B5eF9MMV9lcnJvcikK KysgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKKysgIF9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0V2ZW50LnRwX3ByaW50ID0gMDsKKysgICNlbmRpZgorKyAgaWYgKChD WVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtl bHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LnRwX2RpY3RvZmZzZXQg JiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQudHBfZ2V0YXR0cm8gPT0g UHlPYmplY3RfR2VuZXJpY0dldEF0dHIpKSB7CisrICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0V2ZW50LnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0 dHI7CisrICB9CisrICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0V2ZW50LnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18z bXB2X0V2ZW50KSA8IDApIF9fUFlYX0VSUigwLCAyNTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX0V2ZW50LCAoUHlPYmplY3QgKikm X19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpIDwgMCkgX19QWVhfRVJSKDAs IDI1NiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVj dCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KSA8IDApIF9fUFlYX0VS UigwLCAyNTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X0V2ZW50ID0gJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50Owor KyAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCA9ICZfX3B5eF92 dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQ7CisrICBfX3B5eF92dGFibGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQuX3ByZXBfbm9kZV9saXN0ID0gKHN0cnVjdCBtcHZf bm9kZV9saXN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCAqLCBQeU9iamVjdCAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF9fcHJlcF9ub2RlX2xpc3Q7CisrICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQuX3ByZXBfbm9kZV9tYXAgPSAoc3RydWN0IG1wdl9ub2RlX2xpc3QgKigqKShzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICosIFB5T2JqZWN0ICop KV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25vZGVfbWFwOwor KyAgX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0Ll9wcmVwX25hdGl2 ZV92YWx1ZSA9IChzdHJ1Y3QgbXB2X25vZGUgKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKikpX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVlOworKyAgX19w eXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0Ll9mcmVlX25hdGl2ZV92YWx1 ZSA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKiwgc3RydWN0IG1wdl9ub2RlKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWU7CisrICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5 eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCAz NTksIF9fcHl4X0wxX2Vycm9yKQorKyAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQor KyAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC50cF9wcmludCA9IDA7 CisrICAjZW5kaWYKKysgIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0Vf UFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0LnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dC50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKysg ICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC50cF9nZXRhdHRybyA9 IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOworKyAgfQorKyAgaWYgKF9fUHl4X1NldFZ0 YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LnRwX2RpY3QsIF9f cHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJS KDAsIDM1OSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9t LCBfX3B5eF9uX3NfQ29udGV4dCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDM1OSwgX19weXhfTDFfZXJyb3Ip CisrICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDM1OSwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCA9ICZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0OworKyAgX19weXhfdnRhYnB0 cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyA9ICZfX3B5eF92dGFibGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXM7CisrICBfX3B5eF92dGFibGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMuYWRkX3ZvaWRwID0gKFB5T2JqZWN0ICooKiko c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqLCBl bnVtIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSwgdm9pZCAqLCBzdHJ1Y3QgX19weXhfb3B0X2FyZ3Nf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfdm9pZHAgKl9fcHl4X29w dGlvbmFsX2FyZ3MpKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFt c19hZGRfdm9pZHA7CisrICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5k ZXJQYXJhbXMuYWRkX2ludCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5 cGUsIGludCkpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2Fk ZF9pbnQ7CisrICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJh bXMuYWRkX3N0cmluZyA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKiwgZW51bSBtcHZfcmVuZGVyX3BhcmFtX3R5cGUs IGNoYXIgKikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2Fk ZF9zdHJpbmc7CisrICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fUmVuZGVyUGFyYW1zKSA8IDApIF9fUFlYX0VSUigwLCA4ODEsIF9fcHl4X0wxX2Vy cm9yKQorKyAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQorKyAgX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9wcmludCA9IDA7CisrICAjZW5k aWYKKysgIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xP T0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zLnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X1JlbmRlclBhcmFtcy50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsK KysgICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9n ZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOworKyAgfQorKyAgaWYgKF9f UHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFy YW1zLnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQ YXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlP YmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfUmVuZGVyUGFyYW1zLCAoUHlPYmplY3Qg KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcykgPCAwKSBf X1BZWF9FUlIoMCwgODgxLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9zZXR1cF9yZWR1 Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBh cmFtcykgPCAwKSBfX1BZWF9FUlIoMCwgODgxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zID0gJl9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXM7CisrICBfX3B5eF92dGFicHRyXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gPSAmX19weXhfdnRhYmxlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm87CisrICBfX3B5eF92dGFibGVfOXZpZGN1dHRl cl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mby5fZnJvbV9zdHJ1Y3QgPSAoUHlPYmplY3QgKigq KShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8g Kiwgc3RydWN0IG1wdl9yZW5kZXJfZnJhbWVfaW5mbyAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNVJlbmRlckZyYW1lSW5mb19fZnJvbV9zdHJ1Y3Q7CisrICBpZiAoUHlUeXBlX1Jl YWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8pIDwg MCkgX19QWVhfRVJSKDAsIDkyOCwgX19weXhfTDFfZXJyb3IpCisrICAjaWYgUFlfVkVSU0lPTl9I RVggPCAweDAzMDgwMEIxCisrICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJGcmFtZUluZm8udHBfcHJpbnQgPSAwOworKyAgI2VuZGlmCisrICBpZiAoKENZVEhPTl9VU0Vf VFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVApICYmIGxpa2VseSghX19weXhf dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2RpY3RvZmZzZXQg JiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2dl dGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworKyAgICBfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8udHBfZ2V0YXR0cm8gPSBfX1B5eF9Q eU9iamVjdF9HZW5lcmljR2V0QXR0cjsKKysgIH0KKysgIGlmIChfX1B5eF9TZXRWdGFibGUoX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2RpY3QsIF9f cHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbykgPCAwKSBf X1BZWF9FUlIoMCwgOTI4LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9zZXR1cF9yZWR1 Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJh bWVJbmZvKSA8IDApIF9fUFlYX0VSUigwLCA5MjgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf cHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyA9ICZfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm87CisrICBpZiAoUHlUeXBlX1Jl YWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSA8IDAp IF9fUFlYX0VSUigwLCA5MzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgI2lmIFBZX1ZFUlNJT05fSEVY IDwgMHgwMzA4MDBCMQorKyAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dC50cF9wcmludCA9IDA7CisrICAjZW5kaWYKKysgIGlmICgoQ1lUSE9OX1VTRV9UWVBF X1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LnRwX2RpY3RvZmZzZXQgJiYgX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dC50cF9nZXRhdHRybyA9 PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKysgICAgX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dC50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dl bmVyaWNHZXRBdHRyOworKyAgfQorKyAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19w eXhfbl9zX1JlbmRlckNvbnRleHQsIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCA5MzcsIF9fcHl4X0wx X2Vycm9yKQorKyAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCA5 MzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X1JlbmRlckNvbnRleHQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dDsKKysgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRl ckNvbnRleHQudHBfYmFzZSA9IF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJDb250ZXh0OworKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMTEyMiwgX19w eXhfTDFfZXJyb3IpCisrICAjaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCisrICBfX3B5 eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX3ByaW50 ID0gMDsKKysgICNlbmRpZgorKyAgaWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9O X1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQudHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2dldGF0dHJvID09IFB5 T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworKyAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3Rf R2VuZXJpY0dldEF0dHI7CisrICB9CisrICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBf X3B5eF9uX3NfT3BlbkdMUmVuZGVyQ29udGV4dCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAs IDExMjIsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmpl Y3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0 KSA8IDApIF9fUFlYX0VSUigwLCAxMTIyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3B0eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0ID0gJl9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQ7CisrICBpZiAoUHlUeXBl X1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1 Y3RfX19lcnJvcnMpIDwgMCkgX19QWVhfRVJSKDAsIDMxOCwgX19weXhfTDFfZXJyb3IpCisrICAj aWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCisrICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMudHBfcHJpbnQgPSAwOworKyAg I2VuZGlmCisrICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQ RV9MT09LVVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19w eXhfc2NvcGVfc3RydWN0X19fZXJyb3JzLnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzLnRwX2dldGF0dHJv ID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworKyAgICBfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMudHBfZ2V0YXR0cm8gPSBf X1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0ck5vRGljdDsKKysgIH0KKysgIF9fcHl4X3B0eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMgPSAmX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3Jz OworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gMDsKKysgIF9f cHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworKyAgcmV0 dXJuIC0xOworK30KKysKKytzdGF0aWMgaW50IF9fUHl4X21vZGluaXRfdHlwZV9pbXBvcnRfY29k ZSh2b2lkKSB7CisrICBfX1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworKyAgX19QeXhfUmVmTmFu bnlTZXR1cENvbnRleHQoIl9fUHl4X21vZGluaXRfdHlwZV9pbXBvcnRfY29kZSIsIDApOworKyAg LyotLS0gVHlwZSBpbXBvcnQgY29kZSAtLS0qLworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250 ZXh0KCk7CisrICByZXR1cm4gMDsKKyt9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODgKKy0gKiAgICAgb3B0aW9uX2Vycm9yID0gTVBWX0VSUk9SX09QVElPTl9FUlJP UgorLSAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfUFJPUEVSVFlfTk9UX0ZPVU5ECistICog ICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9GT1JNQVQgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBwcm9wZXJ0eV91bmF2YWlsYWJsZSA9IE1QVl9F UlJPUl9QUk9QRVJUWV9VTkFWQUlMQUJMRQorLSAqICAgICBwcm9wZXJ0eV9lcnJvciA9IE1QVl9F UlJPUl9QUk9QRVJUWV9FUlJPUgorLSAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1BST1BFUlRZX0ZPUk1BVCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg4LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX3Byb3BlcnR5X2Zvcm1hdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigw LCA4OCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKKytzdGF0aWMgaW50IF9fUHl4X21vZGluaXRfdmFyaWFibGVfaW1wb3J0X2NvZGUo dm9pZCkgeworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX1B5eF9tb2Rpbml0X3ZhcmlhYmxlX2ltcG9ydF9jb2RlIiwgMCk7Cisr ICAvKi0tLSBWYXJpYWJsZSBpbXBvcnQgY29kZSAtLS0qLworKyAgX19QeXhfUmVmTmFubnlGaW5p c2hDb250ZXh0KCk7CisrICByZXR1cm4gMDsKKyt9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODkKKy0gKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX1BST1BFUlRZ X05PVF9GT1VORAorLSAqICAgICBwcm9wZXJ0eV9mb3JtYXQgPSBNUFZfRVJST1JfUFJPUEVSVFlf Rk9STUFUCistICogICAgIHByb3BlcnR5X3VuYXZhaWxhYmxlID0gTVBWX0VSUk9SX1BST1BFUlRZ X1VOQVZBSUxBQkxFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcHJvcGVy dHlfZXJyb3IgPSBNUFZfRVJST1JfUFJPUEVSVFlfRVJST1IKKy0gKiAgICAgY29tbWFuZF9lcnJv ciA9IE1QVl9FUlJPUl9DT01NQU5ECistICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9G cm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfUFJPUEVSVFlfVU5BVkFJTEFCTEUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4OSwgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV91bmF2YWlsYWJsZSwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCA4OSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKKytzdGF0aWMgaW50IF9fUHl4X21vZGluaXRfZnVuY3Rpb25f aW1wb3J0X2NvZGUodm9pZCkgeworKyAgX19QeXhfUmVmTmFubnlEZWNsYXJhdGlvbnMKKysgIF9f UHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX1B5eF9tb2Rpbml0X2Z1bmN0aW9uX2ltcG9ydF9j b2RlIiwgMCk7CisrICAvKi0tLSBGdW5jdGlvbiBpbXBvcnQgY29kZSAtLS0qLworKyAgX19QeXhf UmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CisrICByZXR1cm4gMDsKKyt9CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTAKKy0gKiAgICAgcHJvcGVydHlfZm9ybWF0ID0g TVBWX0VSUk9SX1BST1BFUlRZX0ZPUk1BVAorLSAqICAgICBwcm9wZXJ0eV91bmF2YWlsYWJsZSA9 IE1QVl9FUlJPUl9QUk9QRVJUWV9VTkFWQUlMQUJMRQorLSAqICAgICBwcm9wZXJ0eV9lcnJvciA9 IE1QVl9FUlJPUl9QUk9QRVJUWV9FUlJPUiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIGNvbW1hbmRfZXJyb3IgPSBNUFZfRVJST1JfQ09NTUFORAorLSAqICAgICBsb2FkaW5n X2ZhaWxlZCA9IE1QVl9FUlJPUl9MT0FESU5HX0ZBSUxFRAorLSAqLworLSAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1BST1BFUlRZX0VSUk9S KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTAsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcHJvcGVydHlfZXJyb3IsIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgOTAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTEKKy0gKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1JfUFJPUEVS VFlfVU5BVkFJTEFCTEUKKy0gKiAgICAgcHJvcGVydHlfZXJyb3IgPSBNUFZfRVJST1JfUFJPUEVS VFlfRVJST1IKKy0gKiAgICAgY29tbWFuZF9lcnJvciA9IE1QVl9FUlJPUl9DT01NQU5EICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgbG9hZGluZ19mYWlsZWQgPSBNUFZfRVJS T1JfTE9BRElOR19GQUlMRUQKKy0gKiAgICAgYW9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfQU9f SU5JVF9GQUlMRUQKKy0gKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9f bXB2X2Vycm9yKE1QVl9FUlJPUl9DT01NQU5EKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgOTEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfY29t bWFuZF9lcnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MSwgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysjaWZuZGVm IENZVEhPTl9OT19QWUlOSVRfRVhQT1JUCisrI2RlZmluZSBfX1B5eF9QeU1PRElOSVRfRlVOQyBQ eU1PRElOSVRfRlVOQworKyNlbGlmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrI2lmZGVmIF9fY3Bs dXNwbHVzCisrI2RlZmluZSBfX1B5eF9QeU1PRElOSVRfRlVOQyBleHRlcm4gIkMiIHZvaWQKKysj ZWxzZQorKyNkZWZpbmUgX19QeXhfUHlNT0RJTklUX0ZVTkMgdm9pZAorKyNlbmRpZgorKyNlbHNl CisrI2lmZGVmIF9fY3BsdXNwbHVzCisrI2RlZmluZSBfX1B5eF9QeU1PRElOSVRfRlVOQyBleHRl cm4gIkMiIFB5T2JqZWN0ICoKKysjZWxzZQorKyNkZWZpbmUgX19QeXhfUHlNT0RJTklUX0ZVTkMg UHlPYmplY3QgKgorKyNlbmRpZgorKyNlbmRpZgorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjkyCistICogICAgIHByb3BlcnR5X2Vycm9yID0gTVBWX0VSUk9SX1BST1BF UlRZX0VSUk9SCistICogICAgIGNvbW1hbmRfZXJyb3IgPSBNUFZfRVJST1JfQ09NTUFORAorLSAq ICAgICBsb2FkaW5nX2ZhaWxlZCA9IE1QVl9FUlJPUl9MT0FESU5HX0ZBSUxFRCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX0FP X0lOSVRfRkFJTEVECistICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRf RkFJTEVECistICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l cnJvcihNUFZfRVJST1JfTE9BRElOR19GQUlMRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19s b2FkaW5nX2ZhaWxlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MworLSAqICAgICBjb21tYW5kX2Vy cm9yID0gTVBWX0VSUk9SX0NPTU1BTkQKKy0gKiAgICAgbG9hZGluZ19mYWlsZWQgPSBNUFZfRVJS T1JfTE9BRElOR19GQUlMRUQKKy0gKiAgICAgYW9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfQU9f SU5JVF9GQUlMRUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICB2b19pbml0 X2ZhaWxlZCA9IE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRAorLSAqICAgICBub3RoaW5nX3RvX3Bs YXkgPSBNUFZfRVJST1JfTk9USElOR19UT19QTEFZCistICovCistICBfX3B5eF90XzYgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfQU9fSU5JVF9GQUlMRUQpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5MywgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFz cyhfX3B5eF90XzcsIF9fcHl4X25fc19hb19pbml0X2ZhaWxlZCwgX19weXhfdF82KSA8IDApIF9f UFlYX0VSUigwLCA5MywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKKysjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKytfX1B5eF9QeU1P RElOSVRfRlVOQyBpbml0bXB2KHZvaWQpIENZVEhPTl9TTUFMTF9DT0RFOyAvKnByb3RvKi8KKytf X1B5eF9QeU1PRElOSVRfRlVOQyBpbml0bXB2KHZvaWQpCisrI2Vsc2UKKytfX1B5eF9QeU1PRElO SVRfRlVOQyBQeUluaXRfbXB2KHZvaWQpIENZVEhPTl9TTUFMTF9DT0RFOyAvKnByb3RvKi8KKytf X1B5eF9QeU1PRElOSVRfRlVOQyBQeUluaXRfbXB2KHZvaWQpCisrI2lmIENZVEhPTl9QRVA0ODlf TVVMVElfUEhBU0VfSU5JVAorK3sKKysgIHJldHVybiBQeU1vZHVsZURlZl9Jbml0KCZfX3B5eF9t b2R1bGVkZWYpOworK30KKytzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4X2NoZWNr X3NpbmdsZV9pbnRlcnByZXRlcih2b2lkKSB7CisrICAgICNpZiBQWV9WRVJTSU9OX0hFWCA+PSAw eDAzMDcwMEExCisrICAgIHN0YXRpYyBQWV9JTlQ2NF9UIG1haW5faW50ZXJwcmV0ZXJfaWQgPSAt MTsKKysgICAgUFlfSU5UNjRfVCBjdXJyZW50X2lkID0gUHlJbnRlcnByZXRlclN0YXRlX0dldElE KFB5VGhyZWFkU3RhdGVfR2V0KCktPmludGVycCk7CisrICAgIGlmIChtYWluX2ludGVycHJldGVy X2lkID09IC0xKSB7CisrICAgICAgICBtYWluX2ludGVycHJldGVyX2lkID0gY3VycmVudF9pZDsK KysgICAgICAgIHJldHVybiAodW5saWtlbHkoY3VycmVudF9pZCA9PSAtMSkpID8gLTEgOiAwOwor KyAgICB9IGVsc2UgaWYgKHVubGlrZWx5KG1haW5faW50ZXJwcmV0ZXJfaWQgIT0gY3VycmVudF9p ZCkpCisrICAgICNlbHNlCisrICAgIHN0YXRpYyBQeUludGVycHJldGVyU3RhdGUgKm1haW5faW50 ZXJwcmV0ZXIgPSBOVUxMOworKyAgICBQeUludGVycHJldGVyU3RhdGUgKmN1cnJlbnRfaW50ZXJw cmV0ZXIgPSBQeVRocmVhZFN0YXRlX0dldCgpLT5pbnRlcnA7CisrICAgIGlmICghbWFpbl9pbnRl cnByZXRlcikgeworKyAgICAgICAgbWFpbl9pbnRlcnByZXRlciA9IGN1cnJlbnRfaW50ZXJwcmV0 ZXI7CisrICAgIH0gZWxzZSBpZiAodW5saWtlbHkobWFpbl9pbnRlcnByZXRlciAhPSBjdXJyZW50 X2ludGVycHJldGVyKSkKKysgICAgI2VuZGlmCisrICAgIHsKKysgICAgICAgIFB5RXJyX1NldFN0 cmluZygKKysgICAgICAgICAgICBQeUV4Y19JbXBvcnRFcnJvciwKKysgICAgICAgICAgICAiSW50 ZXJwcmV0ZXIgY2hhbmdlIGRldGVjdGVkIC0gdGhpcyBtb2R1bGUgY2FuIG9ubHkgYmUgbG9hZGVk IGludG8gb25lIGludGVycHJldGVyIHBlciBwcm9jZXNzLiIpOworKyAgICAgICAgcmV0dXJuIC0x OworKyAgICB9CisrICAgIHJldHVybiAwOworK30KKytzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUg aW50IF9fUHl4X2NvcHlfc3BlY190b19tb2R1bGUoUHlPYmplY3QgKnNwZWMsIFB5T2JqZWN0ICpt b2RkaWN0LCBjb25zdCBjaGFyKiBmcm9tX25hbWUsIGNvbnN0IGNoYXIqIHRvX25hbWUsIGludCBh bGxvd19ub25lKSB7CisrICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJp bmcoc3BlYywgZnJvbV9uYW1lKTsKKysgICAgaW50IHJlc3VsdCA9IDA7CisrICAgIGlmIChsaWtl bHkodmFsdWUpKSB7CisrICAgICAgICBpZiAoYWxsb3dfbm9uZSB8fCB2YWx1ZSAhPSBQeV9Ob25l KSB7CisrICAgICAgICAgICAgcmVzdWx0ID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcobW9kZGljdCwg dG9fbmFtZSwgdmFsdWUpOworKyAgICAgICAgfQorKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsK KysgICAgfSBlbHNlIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVy cm9yKSkgeworKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKysgICAgfSBlbHNlIHsKKysgICAgICAg IHJlc3VsdCA9IC0xOworKyAgICB9CisrICAgIHJldHVybiByZXN1bHQ7CisrfQorK3N0YXRpYyBD WVRIT05fU01BTExfQ09ERSBQeU9iamVjdCogX19weXhfcHltb2RfY3JlYXRlKFB5T2JqZWN0ICpz cGVjLCBDWVRIT05fVU5VU0VEIFB5TW9kdWxlRGVmICpkZWYpIHsKKysgICAgUHlPYmplY3QgKm1v ZHVsZSA9IE5VTEwsICptb2RkaWN0LCAqbW9kbmFtZTsKKysgICAgaWYgKF9fUHl4X2NoZWNrX3Np bmdsZV9pbnRlcnByZXRlcigpKQorKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIGlmIChfX3B5 eF9tKQorKyAgICAgICAgcmV0dXJuIF9fUHl4X05ld1JlZihfX3B5eF9tKTsKKysgICAgbW9kbmFt ZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoc3BlYywgIm5hbWUiKTsKKysgICAgaWYgKHVubGlr ZWx5KCFtb2RuYW1lKSkgZ290byBiYWQ7CisrICAgIG1vZHVsZSA9IFB5TW9kdWxlX05ld09iamVj dChtb2RuYW1lKTsKKysgICAgUHlfREVDUkVGKG1vZG5hbWUpOworKyAgICBpZiAodW5saWtlbHko IW1vZHVsZSkpIGdvdG8gYmFkOworKyAgICBtb2RkaWN0ID0gUHlNb2R1bGVfR2V0RGljdChtb2R1 bGUpOworKyAgICBpZiAodW5saWtlbHkoIW1vZGRpY3QpKSBnb3RvIGJhZDsKKysgICAgaWYgKHVu bGlrZWx5KF9fUHl4X2NvcHlfc3BlY190b19tb2R1bGUoc3BlYywgbW9kZGljdCwgImxvYWRlciIs ICJfX2xvYWRlcl9fIiwgMSkgPCAwKSkgZ290byBiYWQ7CisrICAgIGlmICh1bmxpa2VseShfX1B5 eF9jb3B5X3NwZWNfdG9fbW9kdWxlKHNwZWMsIG1vZGRpY3QsICJvcmlnaW4iLCAiX19maWxlX18i LCAxKSA8IDApKSBnb3RvIGJhZDsKKysgICAgaWYgKHVubGlrZWx5KF9fUHl4X2NvcHlfc3BlY190 b19tb2R1bGUoc3BlYywgbW9kZGljdCwgInBhcmVudCIsICJfX3BhY2thZ2VfXyIsIDEpIDwgMCkp IGdvdG8gYmFkOworKyAgICBpZiAodW5saWtlbHkoX19QeXhfY29weV9zcGVjX3RvX21vZHVsZShz cGVjLCBtb2RkaWN0LCAic3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMiLCAiX19wYXRoX18iLCAw KSA8IDApKSBnb3RvIGJhZDsKKysgICAgcmV0dXJuIG1vZHVsZTsKKytiYWQ6CisrICAgIFB5X1hE RUNSRUYobW9kdWxlKTsKKysgICAgcmV0dXJuIE5VTEw7CisrfQorIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk0CistICogICAgIGxvYWRpbmdfZmFpbGVkID0gTVBWX0VS Uk9SX0xPQURJTkdfRkFJTEVECistICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX0FP X0lOSVRfRkFJTEVECistICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRf RkFJTEVEICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgbm90aGluZ190b19w bGF5ID0gTVBWX0VSUk9SX05PVEhJTkdfVE9fUExBWQorLSAqICAgICB1bmtub3duX2Zvcm1hdCA9 IE1QVl9FUlJPUl9VTktOT1dOX0ZPUk1BVAorLSAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJ bnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1ZPX0lOSVRfRkFJTEVEKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTQsIF9fcHl4X0wxX2Vycm9yKQorLSAg X19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19w eXhfdF83LCBfX3B5eF9uX3Nfdm9faW5pdF9mYWlsZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9F UlIoMCwgOTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9f cHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTUK Ky0gKiAgICAgYW9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfQU9fSU5JVF9GQUlMRUQKKy0gKiAg ICAgdm9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfVk9fSU5JVF9GQUlMRUQKKy0gKiAgICAgbm90 aGluZ190b19wbGF5ID0gTVBWX0VSUk9SX05PVEhJTkdfVE9fUExBWSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgIHVua25vd25fZm9ybWF0ID0gTVBWX0VSUk9SX1VOS05PV05f Rk9STUFUCistICogICAgIHVuc3VwcG9ydGVkID0gTVBWX0VSUk9SX1VOU1VQUE9SVEVECisrc3Rh dGljIENZVEhPTl9TTUFMTF9DT0RFIGludCBfX3B5eF9weW1vZF9leGVjX21wdihQeU9iamVjdCAq X19weXhfcHlpbml0X21vZHVsZSkKKysjZW5kaWYKKysjZW5kaWYKKyt7CisrICBQeU9iamVjdCAq X19weXhfdF8xID0gTlVMTDsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzIgPSBOVUxMOworKyAgaW50 IF9fcHl4X3RfMzsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzQgPSBOVUxMOworKyAgaW50IF9fcHl4 X3RfNTsKKysgIFB5T2JqZWN0ICpfX3B5eF90XzYgPSBOVUxMOworKyAgUHlPYmplY3QgKl9fcHl4 X3RfNyA9IE5VTEw7CisrICBpbnQgX19weXhfbGluZW5vID0gMDsKKysgIGNvbnN0IGNoYXIgKl9f cHl4X2ZpbGVuYW1lID0gTlVMTDsKKysgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKysgIF9fUHl4 X1JlZk5hbm55RGVjbGFyYXRpb25zCisrICAjaWYgQ1lUSE9OX1BFUDQ4OV9NVUxUSV9QSEFTRV9J TklUCisrICBpZiAoX19weXhfbSkgeworKyAgICBpZiAoX19weXhfbSA9PSBfX3B5eF9weWluaXRf bW9kdWxlKSByZXR1cm4gMDsKKysgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJv ciwgIk1vZHVsZSAnbXB2JyBoYXMgYWxyZWFkeSBiZWVuIGltcG9ydGVkLiBSZS1pbml0aWFsaXNh dGlvbiBpcyBub3Qgc3VwcG9ydGVkLiIpOworKyAgICByZXR1cm4gLTE7CisrICB9CisrICAjZWxp ZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgIGlmIChfX3B5eF9tKSByZXR1cm4gX19QeXhfTmV3 UmVmKF9fcHl4X20pOworKyAgI2VuZGlmCisrICAjaWYgQ1lUSE9OX1JFRk5BTk5ZCisrX19QeXhf UmVmTmFubnkgPSBfX1B5eF9SZWZOYW5ueUltcG9ydEFQSSgicmVmbmFubnkiKTsKKytpZiAoIV9f UHl4X1JlZk5hbm55KSB7CisrICBQeUVycl9DbGVhcigpOworKyAgX19QeXhfUmVmTmFubnkgPSBf X1B5eF9SZWZOYW5ueUltcG9ydEFQSSgiQ3l0aG9uLlJ1bnRpbWUucmVmbmFubnkiKTsKKysgIGlm ICghX19QeXhfUmVmTmFubnkpCisrICAgICAgUHlfRmF0YWxFcnJvcigiZmFpbGVkIHRvIGltcG9y dCAncmVmbmFubnknIG1vZHVsZSIpOworK30KKysjZW5kaWYKKysgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX1B5eF9QeU1PRElOSVRfRlVOQyBQeUluaXRfbXB2KHZvaWQpIiwgMCk7Cisr ICBpZiAoX19QeXhfY2hlY2tfYmluYXJ5X3ZlcnNpb24oKSA8IDApIF9fUFlYX0VSUigwLCAxLCBf X3B5eF9MMV9lcnJvcikKKysgICNpZmRlZiBfX1B4eV9QeUZyYW1lX0luaXRpYWxpemVfT2Zmc2V0 cworKyAgX19QeHlfUHlGcmFtZV9Jbml0aWFsaXplX09mZnNldHMoKTsKKysgICNlbmRpZgorKyAg X19weXhfZW1wdHlfdHVwbGUgPSBQeVR1cGxlX05ldygwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9l bXB0eV90dXBsZSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X2Vt cHR5X2J5dGVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgiIiwgMCk7IGlmICh1bmxpa2Vs eSghX19weXhfZW1wdHlfYnl0ZXMpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF9lbXB0eV91bmljb2RlID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCIiLCAw KTsgaWYgKHVubGlrZWx5KCFfX3B5eF9lbXB0eV91bmljb2RlKSkgX19QWVhfRVJSKDAsIDEsIF9f cHl4X0wxX2Vycm9yKQorKyAgI2lmZGVmIF9fUHl4X0N5RnVuY3Rpb25fVVNFRAorKyAgaWYgKF9f cHl4X0N5RnVuY3Rpb25faW5pdCgpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9y KQorKyAgI2VuZGlmCisrICAjaWZkZWYgX19QeXhfRnVzZWRGdW5jdGlvbl9VU0VECisrICBpZiAo X19weXhfRnVzZWRGdW5jdGlvbl9pbml0KCkgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFf ZXJyb3IpCisrICAjZW5kaWYKKysgICNpZmRlZiBfX1B5eF9Db3JvdXRpbmVfVVNFRAorKyAgaWYg KF9fcHl4X0Nvcm91dGluZV9pbml0KCkgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJy b3IpCisrICAjZW5kaWYKKysgICNpZmRlZiBfX1B5eF9HZW5lcmF0b3JfVVNFRAorKyAgaWYgKF9f cHl4X0dlbmVyYXRvcl9pbml0KCkgPCAwKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3Ip CisrICAjZW5kaWYKKysgICNpZmRlZiBfX1B5eF9Bc3luY0dlbl9VU0VECisrICBpZiAoX19weXhf QXN5bmNHZW5faW5pdCgpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAg I2VuZGlmCisrICAjaWZkZWYgX19QeXhfU3RvcEFzeW5jSXRlcmF0aW9uX1VTRUQKKysgIGlmIChf X3B5eF9TdG9wQXN5bmNJdGVyYXRpb25faW5pdCgpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgI2VuZGlmCisrICAvKi0tLSBMaWJyYXJ5IGZ1bmN0aW9uIGRlY2xhcmF0 aW9ucyAtLS0qLworKyAgLyotLS0gVGhyZWFkcyBpbml0aWFsaXphdGlvbiBjb2RlIC0tLSovCisr ICAjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDcwMEYw ICYmIGRlZmluZWQoX19QWVhfRk9SQ0VfSU5JVF9USFJFQURTKSAmJiBfX1BZWF9GT1JDRV9JTklU X1RIUkVBRFMKKysgIFB5RXZhbF9Jbml0VGhyZWFkcygpOworKyAgI2VuZGlmCisrICAvKi0tLSBN b2R1bGUgY3JlYXRpb24gY29kZSAtLS0qLworKyAgI2lmIENZVEhPTl9QRVA0ODlfTVVMVElfUEhB U0VfSU5JVAorKyAgX19weXhfbSA9IF9fcHl4X3B5aW5pdF9tb2R1bGU7CisrICBQeV9JTkNSRUYo X19weXhfbSk7CisrICAjZWxzZQorKyAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICBfX3B5 eF9tID0gUHlfSW5pdE1vZHVsZTQoIm1wdiIsIF9fcHl4X21ldGhvZHMsIF9fcHl4X2tfcHltcHZf UHl0aG9uX3dyYXBwZXJfZm9yX2xpYm1wdiwgMCwgUFlUSE9OX0FQSV9WRVJTSU9OKTsgUHlfWElO Q1JFRihfX3B5eF9tKTsKKysgICNlbHNlCisrICBfX3B5eF9tID0gUHlNb2R1bGVfQ3JlYXRlKCZf X3B5eF9tb2R1bGVkZWYpOworKyAgI2VuZGlmCisrICBpZiAodW5saWtlbHkoIV9fcHl4X20pKSBf X1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICAjZW5kaWYKKysgIF9fcHl4X2QgPSBQ eU1vZHVsZV9HZXREaWN0KF9fcHl4X20pOyBpZiAodW5saWtlbHkoIV9fcHl4X2QpKSBfX1BZWF9F UlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICBQeV9JTkNSRUYoX19weXhfZCk7CisrICBfX3B5 eF9iID0gUHlJbXBvcnRfQWRkTW9kdWxlKF9fUHl4X0JVSUxUSU5fTU9EVUxFX05BTUUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X2IpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICBQ eV9JTkNSRUYoX19weXhfYik7CisrICBfX3B5eF9jeXRob25fcnVudGltZSA9IFB5SW1wb3J0X0Fk ZE1vZHVsZSgoY2hhciAqKSAiY3l0aG9uX3J1bnRpbWUiKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9j eXRob25fcnVudGltZSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIFB5X0lO Q1JFRihfX3B5eF9jeXRob25fcnVudGltZSk7CisrICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmlu ZyhfX3B5eF9tLCAiX19idWlsdGluc19fIiwgX19weXhfYikgPCAwKSBfX1BZWF9FUlIoMCwgMSwg X19weXhfTDFfZXJyb3IpOworKyAgLyotLS0gSW5pdGlhbGl6ZSB2YXJpb3VzIGdsb2JhbCBjb25z dGFudHMgZXRjLiAtLS0qLworKyAgaWYgKF9fUHl4X0luaXRHbG9iYWxzKCkgPCAwKSBfX1BZWF9F UlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMgJiYg KF9fUFlYX0RFRkFVTFRfU1RSSU5HX0VOQ09ESU5HX0lTX0FTQ0lJIHx8IF9fUFlYX0RFRkFVTFRf U1RSSU5HX0VOQ09ESU5HX0lTX0RFRkFVTFQpCisrICBpZiAoX19QeXhfaW5pdF9zeXNfZ2V0ZGVm YXVsdGVuY29kaW5nX3BhcmFtcygpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9y KQorKyAgI2VuZGlmCisrICBpZiAoX19weXhfbW9kdWxlX2lzX21haW5fdmlkY3V0dGVyX19saWJz X19tcHYpIHsKKysgICAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX25h bWUsIF9fcHl4X25fc19tYWluKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikK KysgIH0KKysgICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgIHsKKysgICAgUHlPYmplY3Qg Km1vZHVsZXMgPSBQeUltcG9ydF9HZXRNb2R1bGVEaWN0KCk7IGlmICh1bmxpa2VseSghbW9kdWxl cykpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgaWYgKCFQeURpY3RfR2V0 SXRlbVN0cmluZyhtb2R1bGVzLCAidmlkY3V0dGVyLmxpYnMubXB2IikpIHsKKysgICAgICBpZiAo dW5saWtlbHkoUHlEaWN0X1NldEl0ZW1TdHJpbmcobW9kdWxlcywgInZpZGN1dHRlci5saWJzLm1w diIsIF9fcHl4X20pIDwgMCkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAg fQorKyAgfQorKyAgI2VuZGlmCisrICAvKi0tLSBCdWlsdGluIGluaXQgY29kZSAtLS0qLworKyAg aWYgKF9fUHl4X0luaXRDYWNoZWRCdWlsdGlucygpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgLyotLS0gQ29uc3RhbnRzIGluaXQgY29kZSAtLS0qLworKyAgaWYgKF9f UHl4X0luaXRDYWNoZWRDb25zdGFudHMoKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9l cnJvcikKKysgIC8qLS0tIEdsb2JhbCB0eXBlL2Z1bmN0aW9uIGluaXQgY29kZSAtLS0qLworKyAg KHZvaWQpX19QeXhfbW9kaW5pdF9nbG9iYWxfaW5pdF9jb2RlKCk7CisrICAodm9pZClfX1B5eF9t b2Rpbml0X3ZhcmlhYmxlX2V4cG9ydF9jb2RlKCk7CisrICAodm9pZClfX1B5eF9tb2Rpbml0X2Z1 bmN0aW9uX2V4cG9ydF9jb2RlKCk7CisrICBpZiAodW5saWtlbHkoX19QeXhfbW9kaW5pdF90eXBl X2luaXRfY29kZSgpIDwgMCkpIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgICh2 b2lkKV9fUHl4X21vZGluaXRfdHlwZV9pbXBvcnRfY29kZSgpOworKyAgKHZvaWQpX19QeXhfbW9k aW5pdF92YXJpYWJsZV9pbXBvcnRfY29kZSgpOworKyAgKHZvaWQpX19QeXhfbW9kaW5pdF9mdW5j dGlvbl9pbXBvcnRfY29kZSgpOworKyAgLyotLS0gRXhlY3V0aW9uIGNvZGUgLS0tKi8KKysgICNp ZiBkZWZpbmVkKF9fUHl4X0dlbmVyYXRvcl9VU0VEKSB8fCBkZWZpbmVkKF9fUHl4X0Nvcm91dGlu ZV9VU0VEKQorKyAgaWYgKF9fUHl4X3BhdGNoX2FiYygpIDwgMCkgX19QWVhfRVJSKDAsIDEsIF9f cHl4X0wxX2Vycm9yKQorKyAgI2VuZGlmCisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjIKKysgKiAKKysgKiBpbXBvcnQgY3l0aG9uCisrICogaW1wb3J0IHN5cywgd2Fy bmluZ3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIGZyb20gdGhyZWFkaW5nIGlt cG9ydCBUaHJlYWQsIFNlbWFwaG9yZQorKyAqIGZyb20gbGliYy5zdGRsaWIgY2ltcG9ydCBtYWxs b2MsIGZyZWUKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2Vycm9yKE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NikpIF9fUFlYX0VSUigwLCA5NSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c19ub3RoaW5nX3RvX3BsYXksIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTUsIF9fcHl4 X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cisr ICBfX3B5eF90XzEgPSBfX1B5eF9JbXBvcnQoX19weXhfbl9zX3N5cywgMCwgLTEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMiwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBf X3B5eF9uX3Nfc3lzLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDIyLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19w eXhfdF8xID0gX19QeXhfSW1wb3J0KF9fcHl4X25fc193YXJuaW5ncywgMCwgLTEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMiwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBf X3B5eF9uX3Nfd2FybmluZ3MsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMjIsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTYKKy0gKiAgICAgdm9faW5p dF9mYWlsZWQgPSBNUFZfRVJST1JfVk9fSU5JVF9GQUlMRUQKKy0gKiAgICAgbm90aGluZ190b19w bGF5ID0gTVBWX0VSUk9SX05PVEhJTkdfVE9fUExBWQorLSAqICAgICB1bmtub3duX2Zvcm1hdCA9 IE1QVl9FUlJPUl9VTktOT1dOX0ZPUk1BVCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIHVuc3VwcG9ydGVkID0gTVBWX0VSUk9SX1VOU1VQUE9SVEVECistICogICAgIG5vdF9p bXBsZW1lbnRlZCA9IE1QVl9FUlJPUl9OT1RfSU1QTEVNRU5URUQKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyMworKyAqIGltcG9ydCBjeXRob24KKysgKiBpbXBvcnQgc3lz LCB3YXJuaW5ncworKyAqIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQsIFNlbWFwaG9yZSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogZnJvbSBsaWJjLnN0ZGxpYiBjaW1wb3J0 IG1hbGxvYywgZnJlZQorKyAqIGZyb20gbGliYy5zdHJpbmcgY2ltcG9ydCBzdHJjcHksIHN0cmxl biwgbWVtc2V0CisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21w dl9lcnJvcihNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NikpIF9fUFlYX0VSUigwLCA5NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c191bmtub3duX2Zvcm1hdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5NiwgX19weXhf TDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysg IF9fcHl4X3RfMSA9IFB5TGlzdF9OZXcoMik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDIzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworKyAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19UaHJlYWQpOworKyAgX19QeXhfR0lWRVJFRihf X3B5eF9uX3NfVGhyZWFkKTsKKysgIFB5TGlzdF9TRVRfSVRFTShfX3B5eF90XzEsIDAsIF9fcHl4 X25fc19UaHJlYWQpOworKyAgX19QeXhfSU5DUkVGKF9fcHl4X25fc19TZW1hcGhvcmUpOworKyAg X19QeXhfR0lWRVJFRihfX3B5eF9uX3NfU2VtYXBob3JlKTsKKysgIFB5TGlzdF9TRVRfSVRFTShf X3B5eF90XzEsIDEsIF9fcHl4X25fc19TZW1hcGhvcmUpOworKyAgX19weXhfdF8yID0gX19QeXhf SW1wb3J0KF9fcHl4X25fc190aHJlYWRpbmcsIF9fcHl4X3RfMSwgLTEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyMywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworKyAgX19weXhfdF8xID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzIsIF9fcHl4X25f c19UaHJlYWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMywgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysgIGlmIChQeURpY3Rf U2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfVGhyZWFkLCBfX3B5eF90XzEpIDwgMCkgX19QWVhf RVJSKDAsIDIzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworKyAgX19weXhfdF8xID0gX19QeXhfSW1wb3J0RnJvbShfX3B5eF90XzIs IF9fcHl4X25fc19TZW1hcGhvcmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAyMywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKysg IGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfU2VtYXBob3JlLCBfX3B5eF90 XzEpIDwgMCkgX19QWVhfRVJSKDAsIDIzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTcKKy0gKiAgICAgbm90aGluZ190b19wbGF5ID0gTVBWX0VSUk9SX05PVEhJTkdfVE9fUExBWQor LSAqICAgICB1bmtub3duX2Zvcm1hdCA9IE1QVl9FUlJPUl9VTktOT1dOX0ZPUk1BVAorLSAqICAg ICB1bnN1cHBvcnRlZCA9IE1QVl9FUlJPUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIG5vdF9pbXBsZW1lbnRlZCA9IE1QVl9FUlJPUl9OT1RfSU1QTEVN RU5URUQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMAorKyAqIGZyb20g Y2xpZW50IGNpbXBvcnQgKgorKyAqIAorKyAqIF9fdmVyc2lvbl9fID0gIjAuMy4wIiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogX19hdXRob3JfXyA9ICJBbmRyZSBEIgorICAqIAor ICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBW X0VSUk9SX1VOU1VQUE9SVEVEKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgOTcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdW5zdXBwb3J0ZWQs IF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfZCwgX19weXhfbl9zX3ZlcnNpb24sIF9fcHl4X2twX3NfMF8zXzApIDwgMCkgX19Q WVhfRVJSKDAsIDMwLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5OAorLSAqICAgICB1bmtub3duX2Zvcm1hdCA9IE1QVl9FUlJPUl9VTktO T1dOX0ZPUk1BVAorLSAqICAgICB1bnN1cHBvcnRlZCA9IE1QVl9FUlJPUl9VTlNVUFBPUlRFRAor LSAqICAgICBub3RfaW1wbGVtZW50ZWQgPSBNUFZfRVJST1JfTk9UX0lNUExFTUVOVEVEICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMQorICAqIAorKyAqIF9fdmVyc2lvbl9fID0gIjAuMy4wIgorKyAqIF9fYXV0aG9yX18g PSAiQW5kcmUgRCIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorKyAqIF9SRVFV SVJFRF9DQVBJX01BSk9SID0gMgorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX05PVF9JTVBMRU1FTlRFRCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDk4LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX25vdF9pbXBsZW1lbnRlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigw LCA5OCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfYXV0aG9y LCBfX3B5eF9rcF9zX0FuZHJlX0QpIDwgMCkgX19QWVhfRVJSKDAsIDMxLCBfX3B5eF9MMV9lcnJv cikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MgorLSAqIFB5RXZh bF9Jbml0VGhyZWFkcygpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMK KysgKiBfX2F1dGhvcl9fID0gIkFuZHJlIEQiCisgICogCistICogY2xhc3MgRXJyb3JzOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICIiIlNldCBvZiBrbm93biBlcnJvciBj b2RlcyBmcm9tIE1wdkVycm9yIGFuZCBFdmVudCByZXNwb25zZXMuCisrICogX1JFUVVJUkVEX0NB UElfTUFKT1IgPSAyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiBfTUlOX0NBUElf TUlOT1IgPSAwCisgICogCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0 ZSgoKFB5T2JqZWN0KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19FcnJvcnMs IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90XzcsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA3MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9H T1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9u X3NfRXJyb3JzLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDcyLCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisrICBpZiAoUHlEaWN0X1NldEl0ZW0o X19weXhfZCwgX19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFKT1IsIF9fcHl4X2ludF8yKSA8IDAp IF9fUFlYX0VSUigwLCAzMywgX19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTAxCistICogCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzQKKyAgKiAKKy0gKiBjbGFzcyBFdmVudHM6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKy0gKiAgICAgIiIiU2V0IG9mIGtub3duIHZhbHVlcyBmb3IgRXZlbnQgaWRzLgor KyAqIF9SRVFVSVJFRF9DQVBJX01BSk9SID0gMgorKyAqIF9NSU5fQ0FQSV9NSU5PUiA9IDAgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorKyAqIGNkZWYgdW5zaWduZWQgbG9uZyBf Q0FQSV9WRVJTSU9OCisgICovCistICBfX3B5eF90XzcgPSBfX1B5eF9QeTNNZXRhY2xhc3NQcmVw YXJlKChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfbl9zX0V2ZW50 cywgX19weXhfbl9zX0V2ZW50cywgKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X25fc192aWRjdXR0 ZXJfbGlic19tcHYsIF9fcHl4X2twX3NfU2V0X29mX2tub3duX3ZhbHVlc19mb3JfRXZlbnRfaWQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMDEsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA4CistICogICAgIFlvdSBzaG91bGQgaGFuZGxlIHRoZSBwb3Nz aWJpbGl0eSB0aGF0IGV2ZW50IGlkcyBtYXkgbm90IGJlIGFueSBvZiB0aGVzZSB2YWx1ZXMuCist ICogICAgICIiIgorLSAqICAgICBub25lID0gTVBWX0VWRU5UX05PTkUgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICBzaHV0ZG93biA9IE1QVl9FVkVOVF9TSFVURE9XTgorLSAq ICAgICBsb2dfbWVzc2FnZSA9IE1QVl9FVkVOVF9MT0dfTUVTU0FHRQorLSAqLworLSAgX19weXhf dF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX05PTkUp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDgsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm9uZSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VS UigwLCAxMDgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9f cHl4X3RfNiA9IDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5 CistICogICAgICIiIgorLSAqICAgICBub25lID0gTVBWX0VWRU5UX05PTkUKKy0gKiAgICAgc2h1 dGRvd24gPSBNUFZfRVZFTlRfU0hVVERPV04gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqICAgICBsb2dfbWVzc2FnZSA9IE1QVl9FVkVOVF9MT0dfTUVTU0FHRQorLSAqICAgICBnZXRf cHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCistICovCistICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRf U0hVVERPV04pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDksIF9f cHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X3RfNikg PCAwKSBfX1BZWF9FUlIoMCwgMTA5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihf X3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLQorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMAorLSAqICAgICBub25lID0gTVBWX0VWRU5UX05PTkUKKy0gKiAgICAgc2h1 dGRvd24gPSBNUFZfRVZFTlRfU0hVVERPV04KKy0gKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZF TlRfTE9HX01FU1NBR0UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBnZXRf cHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCistICogICAgIHNl dF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkKKy0gKi8KKy0g IF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVO VF9MT0dfTUVTU0FHRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEx MCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChf X1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19sb2dfbWVzc2FnZSwgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CistCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTExCistICogICAgIHNodXRkb3duID0gTVBWX0VWRU5UX1NIVVRE T1dOCistICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5UX0xPR19NRVNTQUdFCistICogICAg IGdldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBzZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZf RVZFTlRfU0VUX1BST1BFUlRZX1JFUExZCistICogICAgIGNvbW1hbmRfcmVwbHkgPSBNUFZfRVZF TlRfQ09NTUFORF9SRVBMWQorLSAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWSk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMSwgX19weXhfTDFfZXJyb3IpCistICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5 eF90XzcsIF9fcHl4X25fc19nZXRfcHJvcGVydHlfcmVwbHksIF9fcHl4X3RfNikgPCAwKSBfX1BZ WF9FUlIoMCwgMTExLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYp OyBfX3B5eF90XzYgPSAwOworKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25f c19NSU5fQ0FQSV9NSU5PUiwgX19weXhfaW50XzApIDwgMCkgX19QWVhfRVJSKDAsIDM0LCBfX3B5 eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIK Ky0gKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZFTlRfTE9HX01FU1NBR0UKKy0gKiAgICAgZ2V0 X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWQorLSAqICAgICBz ZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRfU0VUX1BST1BFUlRZX1JFUExZICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgY29tbWFuZF9yZXBseSA9IE1QVl9FVkVOVF9D T01NQU5EX1JFUExZCistICogICAgIHN0YXJ0X2ZpbGUgPSBNUFZfRVZFTlRfU1RBUlRfRklMRQor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3CisrICogCisrICogY2RlZiB1 bnNpZ25lZCBsb25nIF9DQVBJX1ZFUlNJT04KKysgKiB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgIF9DQVBJX1ZFUlNJT04gPSBtcHZfY2xpZW50X2FwaV92 ZXJzaW9uKCkKKysgKiAKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51 bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF83LCBfX3B5eF9uX3Nfc2V0X3Byb3BlcnR5X3JlcGx5LCBfX3B5eF90XzYpIDwgMCkgX19QWVhf RVJSKDAsIDExMiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsg X19weXhfdF82ID0gMDsKKysgIHsKKysgICAgICAjaWZkZWYgV0lUSF9USFJFQUQKKysgICAgICBQ eVRocmVhZFN0YXRlICpfc2F2ZTsKKysgICAgICBQeV9VTkJMT0NLX1RIUkVBRFMKKysgICAgICBf X1B5eF9GYXN0R0lMX1JlbWVtYmVyKCk7CisrICAgICAgI2VuZGlmCisrICAgICAgLyp0cnk6Ki8g eworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMworLSAqICAgICBn ZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCistICogICAg IHNldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkKKy0gKiAg ICAgY29tbWFuZF9yZXBseSA9IE1QVl9FVkVOVF9DT01NQU5EX1JFUExZICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgc3RhcnRfZmlsZSA9IE1QVl9FVkVOVF9TVEFSVF9GSUxF CistICogICAgIGVuZF9maWxlID0gTVBWX0VWRU5UX0VORF9GSUxFCisrICAgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzgKKysgKiBjZGVmIHVuc2lnbmVkIGxvbmcgX0NB UElfVkVSU0lPTgorKyAqIHdpdGggbm9naWw6CisrICogICAgIF9DQVBJX1ZFUlNJT04gPSBtcHZf Y2xpZW50X2FwaV92ZXJzaW9uKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAor KyAqIF9DQVBJX01BSk9SID0gX0NBUElfVkVSU0lPTiA+PiAxNgorICAqLworLSAgX19weXhfdF82 ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0NPTU1BTkRf UkVQTFkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTMsIF9fcHl4 X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfY29tbWFuZF9yZXBseSwgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCAxMTMsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICAgICAgICBfX3B5eF92Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fQ0FQSV9WRVJTSU9OID0gbXB2X2NsaWVudF9hcGlfdmVyc2lvbigpOworKyAg ICAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQKKy0gKiAg ICAgc2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX1NFVF9QUk9QRVJUWV9SRVBMWQorLSAq ICAgICBjb21tYW5kX3JlcGx5ID0gTVBWX0VWRU5UX0NPTU1BTkRfUkVQTFkKKy0gKiAgICAgc3Rh cnRfZmlsZSA9IE1QVl9FVkVOVF9TVEFSVF9GSUxFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgZW5kX2ZpbGUgPSBNUFZfRVZFTlRfRU5EX0ZJTEUKKy0gKiAgICAgZmlsZV9s b2FkZWQgPSBNUFZfRVZFTlRfRklMRV9MT0FERUQKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzcKKysgKiAKKysgKiBjZGVmIHVuc2lnbmVkIGxvbmcgX0NBUElfVkVS U0lPTgorKyAqIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgX0NBUElfVkVSU0lPTiA9IG1wdl9jbGllbnRfYXBpX3ZlcnNpb24oKQorKyAqIAorICAqLwor LSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VW RU5UX1NUQVJUX0ZJTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAx MTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc3RhcnRfZmlsZSwgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICAgICAgLypmaW5hbGx5OiovIHsK KysgICAgICAgIC8qbm9ybWFsIGV4aXQ6Ki97CisrICAgICAgICAgICNpZmRlZiBXSVRIX1RIUkVB RAorKyAgICAgICAgICBfX1B5eF9GYXN0R0lMX0ZvcmdldCgpOworKyAgICAgICAgICBQeV9CTE9D S19USFJFQURTCisrICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICBnb3RvIF9fcHl4X0w0Owor KyAgICAgICAgfQorKyAgICAgICAgX19weXhfTDQ6OworKyAgICAgIH0KKysgIH0KKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTUKKy0gKiAgICAgY29tbWFuZF9yZXBs eSA9IE1QVl9FVkVOVF9DT01NQU5EX1JFUExZCistICogICAgIHN0YXJ0X2ZpbGUgPSBNUFZfRVZF TlRfU1RBUlRfRklMRQorLSAqICAgICBlbmRfZmlsZSA9IE1QVl9FVkVOVF9FTkRfRklMRSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGZpbGVfbG9hZGVkID0gTVBWX0VWRU5U X0ZJTEVfTE9BREVECistICogICAgIHRyYWNrc19jaGFuZ2VkID0gTVBWX0VWRU5UX1RSQUNLU19D SEFOR0VECisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDAKKysgKiAgICAg X0NBUElfVkVSU0lPTiA9IG1wdl9jbGllbnRfYXBpX3ZlcnNpb24oKQorKyAqIAorKyAqIF9DQVBJ X01BSk9SID0gX0NBUElfVkVSU0lPTiA+PiAxNiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogX0NBUElfTUlOT1IgPSBfQ0FQSV9WRVJTSU9OICYgMHhGRkZGCisrICogCisgICovCist ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZF TlRfRU5EX0ZJTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTUs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19Q eXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZW5kX2ZpbGUsIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgMTE1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRf RnJvbV91bnNpZ25lZF9sb25nKChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fQ0FQSV9W RVJTSU9OID4+IDE2KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQw LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgaWYgKFB5 RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19DQVBJX01BSk9SLCBfX3B5eF90XzIpIDwg MCkgX19QWVhfRVJSKDAsIDQwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExNgorLSAqICAgICBzdGFydF9maWxlID0gTVBWX0VWRU5UX1NUQVJUX0ZJTEUKKy0g KiAgICAgZW5kX2ZpbGUgPSBNUFZfRVZFTlRfRU5EX0ZJTEUKKy0gKiAgICAgZmlsZV9sb2FkZWQg PSBNUFZfRVZFTlRfRklMRV9MT0FERUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAq ICAgICB0cmFja3NfY2hhbmdlZCA9IE1QVl9FVkVOVF9UUkFDS1NfQ0hBTkdFRAorLSAqICAgICB0 cmFja3Nfc3dpdGNoZWQgPSBNUFZfRVZFTlRfVFJBQ0tfU1dJVENIRUQKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MQorKyAqIAorKyAqIF9DQVBJX01BSk9SID0gX0NBUElf VkVSU0lPTiA+PiAxNgorKyAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVSU0lPTiAmIDB4RkZGRiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogaWYgX0NBUElfTUFKT1IgIT0g X1JFUVVJUkVEX0NBUElfTUFKT1Igb3IgX0NBUElfTUlOT1IgPCBfTUlOX0NBUElfTUlOT1I6Cisg ICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChN UFZfRVZFTlRfRklMRV9MT0FERUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCAxMTYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cist ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZmlsZV9sb2Fk ZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE2LCBfX3B5eF9MMV9lcnJvcikKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19weXhfdF8yID0g X19QeXhfUHlJbnRfRnJvbV91bnNpZ25lZF9sb25nKChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fQ0FQSV9WRVJTSU9OICYgMHhGRkZGKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDQxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzIpOworKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19DQVBJX01JTk9S LCBfX3B5eF90XzIpIDwgMCkgX19QWVhfRVJSKDAsIDQxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNworLSAqICAgICBlbmRfZmlsZSA9IE1QVl9FVkVOVF9F TkRfRklMRQorLSAqICAgICBmaWxlX2xvYWRlZCA9IE1QVl9FVkVOVF9GSUxFX0xPQURFRAorLSAq ICAgICB0cmFja3NfY2hhbmdlZCA9IE1QVl9FVkVOVF9UUkFDS1NfQ0hBTkdFRCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHRyYWNrc19zd2l0Y2hlZCA9IE1QVl9FVkVOVF9U UkFDS19TV0lUQ0hFRAorLSAqICAgICBpZGxlID0gTVBWX0VWRU5UX0lETEUKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MworKyAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVS U0lPTiAmIDB4RkZGRgorKyAqIAorKyAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJ X01BSk9SIG9yIF9DQVBJX01JTk9SIDwgX01JTl9DQVBJX01JTk9SOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgIHJhaXNlIEltcG9ydEVycm9yKAorKyAqICAgICAgICAgImxp Ym1wdiB2ZXJzaW9uIGlzIGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJQor ICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQo TVBWX0VWRU5UX1RSQUNLU19DSEFOR0VEKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgMTE3LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3RyYWNr c19jaGFuZ2VkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNywgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfQ0FQSV9NQUpPUik7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzEsIF9fcHl4X25fc19SRVFVSVJFRF9DQVBJX01BSk9SKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CisrICBfX3B5eF90XzQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShf X3B5eF90XzIsIF9fcHl4X3RfMSwgUHlfTkUpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfNCk7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX3B5eF90XzUgPSBfX1B5eF9QeU9i amVjdF9Jc1RydWUoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNSA8IDApKSBfX1BZ WF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7 IF9fcHl4X3RfNCA9IDA7CisrICBpZiAoIV9fcHl4X3RfNSkgeworKyAgfSBlbHNlIHsKKysgICAg X19weXhfdF8zID0gX19weXhfdF81OworKyAgICBnb3RvIF9fcHl4X0w2X2Jvb2xfYmlub3BfZG9u ZTsKKysgIH0KKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9u X3NfQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDQz LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUik7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgX19weXhfdF8yID0gUHlPYmplY3Rf UmljaENvbXBhcmUoX19weXhfdF80LCBfX3B5eF90XzEsIFB5X0xUKTsgX19QeXhfWEdPVFJFRihf X3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0MywgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsK KysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19weXhfdF81 ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseShfX3B5eF90 XzUgPCAwKSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworKyAgX19weXhfdF8zID0gX19weXhfdF81Owor KyAgX19weXhfTDZfYm9vbF9iaW5vcF9kb25lOjsKKysgIGlmICh1bmxpa2VseShfX3B5eF90XzMp KSB7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE4CistICogICAg IGZpbGVfbG9hZGVkID0gTVBWX0VWRU5UX0ZJTEVfTE9BREVECistICogICAgIHRyYWNrc19jaGFu Z2VkID0gTVBWX0VWRU5UX1RSQUNLU19DSEFOR0VECistICogICAgIHRyYWNrc19zd2l0Y2hlZCA9 IE1QVl9FVkVOVF9UUkFDS19TV0lUQ0hFRCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIGlkbGUgPSBNUFZfRVZFTlRfSURMRQorLSAqICAgICBwYXVzZSA9IE1QVl9FVkVOVF9Q QVVTRQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYKKysgKiAgICAg cmFpc2UgSW1wb3J0RXJyb3IoCisrICogICAgICAgICAibGlibXB2IHZlcnNpb24gaXMgaW5jb3Jy ZWN0LiBSZXF1aXJlZCAlZC4lZCBnb3QgJWQuJWQuIiAlCisrICogICAgICAgICAgICAgKF9SRVFV SVJFRF9DQVBJX01BSk9SLCBfTUlOX0NBUElfTUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQSV9NSU5P UikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICApCisrICogCisgICovCist ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZF TlRfVFJBQ0tfU1dJVENIRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCAxMTgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdHJhY2tzX3N3aXRj aGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExOCwgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgICAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19SRVFVSVJFRF9DQVBJX01BSk9S KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDYsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKysgICAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUik7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUo X19weXhfdF80LCBfX3B5eF9uX3NfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF80 KSkgX19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNCk7CisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5 eF9uX3NfQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDQ2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICAg IF9fcHl4X3RfNyA9IFB5VHVwbGVfTmV3KDQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9f UFlYX0VSUigwLCA0NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzcpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMik7CisrICAgIFB5VHVwbGVfU0VUX0lU RU0oX19weXhfdF83LCAwLCBfX3B5eF90XzIpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Rf MSk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxLCBfX3B5eF90XzEpOworKyAg ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNCk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhf dF83LCAyLCBfX3B5eF90XzQpOworKyAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNik7CisrICAg IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAzLCBfX3B5eF90XzYpOworKyAgICBfX3B5eF90 XzIgPSAwOworKyAgICBfX3B5eF90XzEgPSAwOworKyAgICBfX3B5eF90XzQgPSAwOworKyAgICBf X3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx OQorLSAqICAgICB0cmFja3NfY2hhbmdlZCA9IE1QVl9FVkVOVF9UUkFDS1NfQ0hBTkdFRAorLSAq ICAgICB0cmFja3Nfc3dpdGNoZWQgPSBNUFZfRVZFTlRfVFJBQ0tfU1dJVENIRUQKKy0gKiAgICAg aWRsZSA9IE1QVl9FVkVOVF9JRExFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgcGF1c2UgPSBNUFZfRVZFTlRfUEFVU0UKKy0gKiAgICAgdW5wYXVzZSA9IE1QVl9FVkVOVF9V TlBBVVNFCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NQorKyAqIGlm IF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9yIF9DQVBJX01JTk9SIDwgX01J Tl9DQVBJX01JTk9SOgorKyAqICAgICByYWlzZSBJbXBvcnRFcnJvcigKKysgKiAgICAgICAgICJs aWJtcHYgdmVyc2lvbiBpcyBpbmNvcnJlY3QuIFJlcXVpcmVkICVkLiVkIGdvdCAlZC4lZC4iICUg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgIChfUkVRVUlSRURf Q0FQSV9NQUpPUiwgX01JTl9DQVBJX01JTk9SLCBfQ0FQSV9NQUpPUiwgX0NBUElfTUlOT1IpCisr ICogICAgICkKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2V2ZW50X2lkKE1QVl9FVkVOVF9JRExFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgMTE5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2lkbGUs IF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICBfX3B5eF90XzYgPSBf X1B5eF9QeVN0cmluZ19Gb3JtYXQoX19weXhfa3Bfc19saWJtcHZfdmVyc2lvbl9pc19pbmNvcnJl Y3RfUmVxdSwgX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgNDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTIwCistICogICAgIHRyYWNrc19zd2l0Y2hlZCA9 IE1QVl9FVkVOVF9UUkFDS19TV0lUQ0hFRAorLSAqICAgICBpZGxlID0gTVBWX0VWRU5UX0lETEUK Ky0gKiAgICAgcGF1c2UgPSBNUFZfRVZFTlRfUEFVU0UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICB1bnBhdXNlID0gTVBWX0VWRU5UX1VOUEFVU0UKKy0gKiAgICAgdGljayA9 IE1QVl9FVkVOVF9USUNLCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 NAorKyAqIAorKyAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9yIF9D QVBJX01JTk9SIDwgX01JTl9DQVBJX01JTk9SOgorKyAqICAgICByYWlzZSBJbXBvcnRFcnJvcigg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgImxpYm1wdiB2ZXJzaW9u IGlzIGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJQorKyAqICAgICAgICAg ICAgIChfUkVRVUlSRURfQ0FQSV9NQUpPUiwgX01JTl9DQVBJX01JTk9SLCBfQ0FQSV9NQUpPUiwg X0NBUElfTUlOT1IpCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9ldmVudF9pZChNUFZfRVZFTlRfUEFVU0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCAxMjAsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nf cGF1c2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTIwLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICBfX3B5eF90 XzcgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5fSW1wb3J0RXJyb3Is IF9fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ0LCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgICBfX1B5eF9SYWlzZShfX3B5 eF90XzcsIDAsIDAsIDApOworKyAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83 ID0gMDsKKysgICAgX19QWVhfRVJSKDAsIDQ0LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjEKKy0gKiAgICAgaWRsZSA9IE1QVl9FVkVO VF9JRExFCistICogICAgIHBhdXNlID0gTVBWX0VWRU5UX1BBVVNFCistICogICAgIHVucGF1c2Ug PSBNUFZfRVZFTlRfVU5QQVVTRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg IHRpY2sgPSBNUFZfRVZFTlRfVElDSworLSAqICAgICBzY3JpcHRfaW5wdXRfZGlzcGF0Y2ggPSBN UFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENICisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0MworKyAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVSU0lPTiAmIDB4RkZG RgorKyAqIAorKyAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9yIF9D QVBJX01JTk9SIDwgX01JTl9DQVBJX01JTk9SOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgIHJhaXNlIEltcG9ydEVycm9yKAorKyAqICAgICAgICAgImxpYm1wdiB2ZXJzaW9u IGlzIGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJQorICAqLworLSAgX19w eXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1VO UEFVU0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMjEsIF9fcHl4 X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdW5wYXVzZSwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCAxMjEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTIyCistICogICAgIHBhdXNlID0gTVBWX0VWRU5UX1BBVVNFCistICogICAg IHVucGF1c2UgPSBNUFZfRVZFTlRfVU5QQVVTRQorLSAqICAgICB0aWNrID0gTVBWX0VWRU5UX1RJ Q0sgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBzY3JpcHRfaW5wdXRfZGlz cGF0Y2ggPSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENICistICogICAgIGNsaWVudF9t ZXNzYWdlID0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFCisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTIKKysgKiAgICAgdm9pZCBQeV9Jbml0aWFsaXplKCkKKysgKiAKKysg KiBfaXNfcHkzID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiBfc3RyZGVjX2VyciA9ICJzdXJyb2dhdGVlc2NhcGUiIGlmIF9pc19weTMg ZWxzZSAic3RyaWN0IgorKyAqICMgbXB2IC0+IFB5dGhvbgorICAqLworLSAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1RJQ0spOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMjIsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzcsIF9fcHl4X25fc19zeXMpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA1MiwgX19weXhfTDFfZXJyb3Ip CisrICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoX19weXhfdF83LCBfX3B5eF9uX3NfdmVyc2lvbl9pbmZvKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNTIsIF9fcHl4X0wxX2Vycm9yKQorICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19w eXhfdF83LCBfX3B5eF9uX3NfdGljaywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMjIs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9 IDA7CisrICBfX3B5eF90XzcgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF90XzYsIF9fcHl4 X3R1cGxlX18xOCwgUHlfR0UpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfNyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDUyLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgaWYgKFB5RGljdF9TZXRJdGVt KF9fcHl4X2QsIF9fcHl4X25fc19pc19weTMsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwg NTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3Rf NyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTIzCistICog ICAgIHVucGF1c2UgPSBNUFZfRVZFTlRfVU5QQVVTRQorLSAqICAgICB0aWNrID0gTVBWX0VWRU5U X1RJQ0sKKy0gKiAgICAgc2NyaXB0X2lucHV0X2Rpc3BhdGNoID0gTVBWX0VWRU5UX1NDUklQVF9J TlBVVF9ESVNQQVRDSCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGNsaWVu dF9tZXNzYWdlID0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFCistICogICAgIHZpZGVvX3JlY29u ZmlnID0gTVBWX0VWRU5UX1ZJREVPX1JFQ09ORklHCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTMKKysgKiAKKysgKiBfaXNfcHkzID0gc3lzLnZlcnNpb25faW5mbyA+PSAo MywpCisrICogX3N0cmRlY19lcnIgPSAic3Vycm9nYXRlZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2Ug InN0cmljdCIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICMgbXB2IC0+IFB5dGhv bgorKyAqIGRlZiBfc3RyZGVjKHMpOgorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1NDUklQVF9JTlBVVF9ESVNQQVRDSCk7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEyMywgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2lz X3B5Myk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDUzLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5h bWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3NjcmlwdF9pbnB1dF9kaXNwYXRjaCwgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMjMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf dF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNik7IGlmICh1bmxpa2VseShfX3B5 eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDUzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgaWYgKF9fcHl4X3RfMykgeworKyAg ICBfX1B5eF9JTkNSRUYoX19weXhfbl9zX3N1cnJvZ2F0ZWVzY2FwZSk7CisrICAgIF9fcHl4X3Rf NyA9IF9fcHl4X25fc19zdXJyb2dhdGVlc2NhcGU7CisrICB9IGVsc2UgeworKyAgICBfX1B5eF9J TkNSRUYoX19weXhfbl9zX3N0cmljdCk7CisrICAgIF9fcHl4X3RfNyA9IF9fcHl4X25fc19zdHJp Y3Q7CisrICB9CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRl Y19lcnIsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNTMsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTI0CistICogICAgIHRpY2sgPSBNUFZfRVZFTlRf VElDSworLSAqICAgICBzY3JpcHRfaW5wdXRfZGlzcGF0Y2ggPSBNUFZfRVZFTlRfU0NSSVBUX0lO UFVUX0RJU1BBVENICistICogICAgIGNsaWVudF9tZXNzYWdlID0gTVBWX0VWRU5UX0NMSUVOVF9N RVNTQUdFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgdmlkZW9fcmVjb25m aWcgPSBNUFZfRVZFTlRfVklERU9fUkVDT05GSUcKKy0gKiAgICAgYXVkaW9fcmVjb25maWcgPSBN UFZfRVZFTlRfQVVESU9fUkVDT05GSUcKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1NQorKyAqIF9zdHJkZWNfZXJyID0gInN1cnJvZ2F0ZWVzY2FwZSIgaWYgX2lzX3B5MyBl bHNlICJzdHJpY3QiCisrICogIyBtcHYgLT4gUHl0aG9uCisrICogZGVmIF9zdHJkZWMocyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgdHJ5OgorKyAqICAgICAgICAgcmV0 dXJuIHMuZGVjb2RlKCJ1dGYtOCIsIF9zdHJkZWNfZXJyKQorICAqLworLSAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0NMSUVOVF9NRVNT QUdFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI0LCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5h bWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2NsaWVudF9tZXNzYWdlLCBfX3B5eF90XzYp IDwgMCkgX19QWVhfRVJSKDAsIDEyNCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYo X19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgIF9fcHl4X3RfNyA9IFB5Q0Z1bmN0aW9uX05l d0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xX3N0cmRlYywgTlVMTCwgX19w eXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19Q WVhfRVJSKDAsIDU1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90Xzcp OworKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19zdHJkZWMsIF9fcHl4 X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVD UkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTI1CistICogICAgIHNjcmlwdF9pbnB1dF9kaXNwYXRjaCA9IE1QVl9F VkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0gKKy0gKiAgICAgY2xpZW50X21lc3NhZ2UgPSBNUFZf RVZFTlRfQ0xJRU5UX01FU1NBR0UKKy0gKiAgICAgdmlkZW9fcmVjb25maWcgPSBNUFZfRVZFTlRf VklERU9fUkVDT05GSUcgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBhdWRp b19yZWNvbmZpZyA9IE1QVl9FVkVOVF9BVURJT19SRUNPTkZJRworLSAqICAgICBtZXRhZGF0YV91 cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFfVVBEQVRFCisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjMKKysgKiAKKysgKiAjIFB5dGhvbiAtPiBtcHYKKysgKiBkZWYgX3N0 cmVuYyhzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICB0cnk6CisrICog ICAgICAgICByZXR1cm4gcy5lbmNvZGUoInV0Zi04IiwgX3N0cmRlY19lcnIpCisgICovCistICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRf VklERU9fUkVDT05GSUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAx MjUsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdmlkZW9fcmVjb25maWcs IF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTI1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19weXhfdF83ID0gUHlD RnVuY3Rpb25fTmV3RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzNfc3RyZW5j LCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgNjMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfNyk7CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0 cmVuYywgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2MywgX19weXhfTDFfZXJyb3IpCisr ICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjYKKy0gKiAgICAgY2xpZW50X21lc3NhZ2UgPSBN UFZfRVZFTlRfQ0xJRU5UX01FU1NBR0UKKy0gKiAgICAgdmlkZW9fcmVjb25maWcgPSBNUFZfRVZF TlRfVklERU9fUkVDT05GSUcKKy0gKiAgICAgYXVkaW9fcmVjb25maWcgPSBNUFZfRVZFTlRfQVVE SU9fUkVDT05GSUcgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBtZXRhZGF0 YV91cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFfVVBEQVRFCistICogICAgIHNlZWsgPSBNUFZf RVZFTlRfU0VFSworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwCisrICog ICAgICAgICByZXR1cm4gcworKyAqIAorKyAqIFB5X0luaXRpYWxpemUoKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogCisrICogY2xhc3MgRXJyb3JzOgorICAqLworLSAgX19weXhf dF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0FVRElP X1JFQ09ORklHKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI2LCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2F1ZGlvX3JlY29uZmlnLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyNiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgIFB5X0luaXRpYWxpemUoKTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjcKKy0gKiAgICAgdmlkZW9f cmVjb25maWcgPSBNUFZfRVZFTlRfVklERU9fUkVDT05GSUcKKy0gKiAgICAgYXVkaW9fcmVjb25m aWcgPSBNUFZfRVZFTlRfQVVESU9fUkVDT05GSUcKKy0gKiAgICAgbWV0YWRhdGFfdXBkYXRlID0g TVBWX0VWRU5UX01FVEFEQVRBX1VQREFURSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIHNlZWsgPSBNUFZfRVZFTlRfU0VFSworLSAqICAgICBwbGF5YmFja19yZXN0YXJ0ID0g TVBWX0VWRU5UX1BMQVlCQUNLX1JFU1RBUlQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3MgorKyAqIFB5X0luaXRpYWxpemUoKQorKyAqIAorKyAqIGNsYXNzIEVycm9yczog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAiIiJTZXQgb2Yga25vd24gZXJy b3IgY29kZXMgZnJvbSBNcHZFcnJvciBhbmQgRXZlbnQgcmVzcG9uc2VzLgorKyAqIAorICAqLwor LSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VW RU5UX01FVEFEQVRBX1VQREFURSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDEyNywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0g IGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19tZXRhZGF0YV91 cGRhdGUsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTI3LCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgX19weXhfdF83 ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZSgoUHlPYmplY3QgKikgTlVMTCwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X25fc19FcnJvcnMsIF9fcHl4X25fc19FcnJvcnMsIChQeU9iamVjdCAq KSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9rcF9zX1NldF9vZl9r bm93bl9lcnJvcl9jb2Rlc19mcm9tX01wKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZ WF9FUlIoMCwgNzIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTI4CistICogICAgIGF1 ZGlvX3JlY29uZmlnID0gTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHCistICogICAgIG1ldGFkYXRh X3VwZGF0ZSA9IE1QVl9FVkVOVF9NRVRBREFUQV9VUERBVEUKKy0gKiAgICAgc2VlayA9IE1QVl9F VkVOVF9TRUVLICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcGxheWJhY2tf cmVzdGFydCA9IE1QVl9FVkVOVF9QTEFZQkFDS19SRVNUQVJUCistICogICAgIHByb3BlcnR5X2No YW5nZSA9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3OQorKyAqICAgICBZb3Ugc2hvdWxkIGhhbmRsZSB0aGUgcG9zc2liaWxp dHkgdGhhdCBlcnJvciBjb2RlcyBtYXkgbm90IGJlIGFueSBvZiB0aGVzZSB2YWx1ZXMuCisrICog ICAgICIiIgorKyAqICAgICBzdWNjZXNzID0gTVBWX0VSUk9SX1NVQ0NFU1MgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBxdWV1ZV9mdWxsID0gTVBWX0VSUk9SX0VWRU5UX1FV RVVFX0ZVTEwKKysgKiAgICAgbm9tZW0gPSBNUFZfRVJST1JfTk9NRU0KKyAgKi8KKy0gIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9TRUVL KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI4LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1Q Vl9FUlJPUl9TVUNDRVNTKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg NzksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2VlaywgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCAxMjgsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1Nl dE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3N1Y2Nlc3MsIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgNzksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTI5CistICogICAgIG1ldGFkYXRhX3VwZGF0ZSA9IE1QVl9FVkVOVF9NRVRBREFUQV9V UERBVEUKKy0gKiAgICAgc2VlayA9IE1QVl9FVkVOVF9TRUVLCistICogICAgIHBsYXliYWNrX3Jl c3RhcnQgPSBNUFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFSVCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgIHByb3BlcnR5X2NoYW5nZSA9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFO R0UKKy0gKiAgICAgY2hhcHRlcl9jaGFuZ2UgPSBNUFZfRVZFTlRfQ0hBUFRFUl9DSEFOR0UKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MAorKyAqICAgICAiIiIKKysgKiAg ICAgc3VjY2VzcyA9IE1QVl9FUlJPUl9TVUNDRVNTCisrICogICAgIHF1ZXVlX2Z1bGwgPSBNUFZf RVJST1JfRVZFTlRfUVVFVUVfRlVMTCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICog ICAgIG5vbWVtID0gTVBWX0VSUk9SX05PTUVNCisrICogICAgIHVuaW5pdGlhbGl6ZWQgPSBNUFZf RVJST1JfVU5JTklUSUFMSVpFRAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1BMQVlCQUNLX1JFU1RBUlQpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMjksIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX0VW RU5UX1FVRVVFX0ZVTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4 MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChf X1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19wbGF5YmFja19yZXN0YXJ0 LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyOSwgX19weXhfTDFfZXJyb3IpCisrICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcXVldWVfZnVsbCwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMzAKKy0gKiAgICAgc2VlayA9IE1QVl9FVkVOVF9TRUVLCist ICogICAgIHBsYXliYWNrX3Jlc3RhcnQgPSBNUFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFSVAorLSAq ICAgICBwcm9wZXJ0eV9jaGFuZ2UgPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgY2hhcHRlcl9jaGFuZ2UgPSBNUFZfRVZFTlRf Q0hBUFRFUl9DSEFOR0UKKy0gKiAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo4MQorKyAqICAgICBzdWNjZXNzID0gTVBWX0VSUk9SX1NVQ0NFU1MKKysgKiAgICAgcXVldWVf ZnVsbCA9IE1QVl9FUlJPUl9FVkVOVF9RVUVVRV9GVUxMCisrICogICAgIG5vbWVtID0gTVBWX0VS Uk9SX05PTUVNICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgdW5pbml0aWFs aXplZCA9IE1QVl9FUlJPUl9VTklOSVRJQUxJWkVECisrICogICAgIGludmFsaWRfcGFyYW1ldGVy ID0gTVBWX0VSUk9SX0lOVkFMSURfUEFSQU1FVEVSCisgICovCistICBfX3B5eF90XzYgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdF KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTMwLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1Q Vl9FUlJPUl9OT01FTSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgx LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Byb3BlcnR5X2NoYW5nZSwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX25vbWVtLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDgxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEzMQorLSAqICAgICBwbGF5YmFja19yZXN0YXJ0ID0gTVBWX0VWRU5UX1BM QVlCQUNLX1JFU1RBUlQKKy0gKiAgICAgcHJvcGVydHlfY2hhbmdlID0gTVBWX0VWRU5UX1BST1BF UlRZX0NIQU5HRQorLSAqICAgICBjaGFwdGVyX2NoYW5nZSA9IE1QVl9FVkVOVF9DSEFQVEVSX0NI QU5HRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODIKKysgKiAgICAgcXVldWVfZnVsbCA9IE1QVl9F UlJPUl9FVkVOVF9RVUVVRV9GVUxMCisrICogICAgIG5vbWVtID0gTVBWX0VSUk9SX05PTUVNCisr ICogICAgIHVuaW5pdGlhbGl6ZWQgPSBNUFZfRVJST1JfVU5JTklUSUFMSVpFRCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGludmFsaWRfcGFyYW1ldGVyID0gTVBWX0VSUk9S X0lOVkFMSURfUEFSQU1FVEVSCisrICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9PUFRJT05f Tk9UX0ZPVU5ECisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21w dl9ldmVudF9pZChNUFZfRVZFTlRfQ0hBUFRFUl9DSEFOR0UpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCAxMzEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1VOSU5JVElBTElaRUQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4MiwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5D bGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19jaGFwdGVyX2NoYW5nZSwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCAxMzEsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3VuaW5pdGlhbGl6ZWQsIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgODIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTAxCistICogCistICogCistICogY2xhc3MgRXZlbnRzOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICIiIlNldCBvZiBrbm93biB2YWx1ZXMgZm9yIEV2ZW50IGlk cy4KKy0gKiAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MworKyAqICAg ICBub21lbSA9IE1QVl9FUlJPUl9OT01FTQorKyAqICAgICB1bmluaXRpYWxpemVkID0gTVBWX0VS Uk9SX1VOSU5JVElBTElaRUQKKysgKiAgICAgaW52YWxpZF9wYXJhbWV0ZXIgPSBNUFZfRVJST1Jf SU5WQUxJRF9QQVJBTUVURVIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBu b3RfZm91bmQgPSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORAorKyAqICAgICBvcHRpb25fZm9y bWF0ID0gTVBWX0VSUk9SX09QVElPTl9GT1JNQVQKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4 X1B5M0NsYXNzQ3JlYXRlKCgoUHlPYmplY3QqKSZfX1B5eF9EZWZhdWx0Q2xhc3NUeXBlKSwgX19w eXhfbl9zX0V2ZW50cywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3RfNywgTlVMTCwgMCwgMSk7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEwMSwgX19weXhfTDFfZXJy b3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZf RVJST1JfSU5WQUxJRF9QQVJBTUVURVIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCA4MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK Ky0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfRXZlbnRzLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEwMSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfaW52YWxpZF9wYXJhbWV0ZXIsIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhf dF83KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMzQKKy0gKiAKKy0gKiAKKy0gKiBjbGFzcyBMb2dMZXZlbHM6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgbm8gPSBNUFZfTE9HX0xFVkVMX05PTkUKKy0gKiAgICAg ZmF0YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6ODQKKysgKiAgICAgdW5pbml0aWFsaXplZCA9IE1QVl9FUlJPUl9VTklOSVRJQUxJ WkVECisrICogICAgIGludmFsaWRfcGFyYW1ldGVyID0gTVBWX0VSUk9SX0lOVkFMSURfUEFSQU1F VEVSCisrICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9PUFRJT05fTk9UX0ZPVU5EICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgb3B0aW9uX2Zvcm1hdCA9IE1QVl9FUlJP Ul9PUFRJT05fRk9STUFUCisrICogICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJT05f RVJST1IKKyAgKi8KKy0gIF9fcHl4X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5 T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCBf X3B5eF9uX3NfTG9nTGV2ZWxzLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRl cl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykp IF9fUFlYX0VSUigwLCAxMzQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNyk7CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihN UFZfRVJST1JfT1BUSU9OX05PVF9GT1VORCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDg0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX25vdF9m b3VuZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4NCwgX19weXhfTDFfZXJyb3IpCisr ICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzUKKy0gKiAKKy0gKiBjbGFzcyBMb2dMZXZlbHM6 CistICogICAgIG5vID0gTVBWX0xPR19MRVZFTF9OT05FICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgZmF0YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMCistICogICAgIGVycm9y ID0gTVBWX0xPR19MRVZFTF9FUlJPUgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjg1CisrICogICAgIGludmFsaWRfcGFyYW1ldGVyID0gTVBWX0VSUk9SX0lOVkFMSURfUEFS QU1FVEVSCisrICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9PUFRJT05fTk9UX0ZPVU5ECisr ICogICAgIG9wdGlvbl9mb3JtYXQgPSBNUFZfRVJST1JfT1BUSU9OX0ZPUk1BVCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJ T05fRVJST1IKKysgKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX1BST1BFUlRZX05PVF9GT1VO RAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xl dmVsKE1QVl9MT0dfTEVWRUxfTk9ORSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDEzNSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9G cm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfT1BUSU9OX0ZPUk1BVCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX25vLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzNSwgX19weXhf TDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9u X3Nfb3B0aW9uX2Zvcm1hdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4NSwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzYKKy0gKiBjbGFzcyBMb2dM ZXZlbHM6CistICogICAgIG5vID0gTVBWX0xPR19MRVZFTF9OT05FCistICogICAgIGZhdGFsID0g TVBWX0xPR19MRVZFTF9GQVRBTCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAg IGVycm9yID0gTVBWX0xPR19MRVZFTF9FUlJPUgorLSAqICAgICB3YXJuID0gTVBWX0xPR19MRVZF TF9XQVJOCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODYKKysgKiAgICAg bm90X2ZvdW5kID0gTVBWX0VSUk9SX09QVElPTl9OT1RfRk9VTkQKKysgKiAgICAgb3B0aW9uX2Zv cm1hdCA9IE1QVl9FUlJPUl9PUFRJT05fRk9STUFUCisrICogICAgIG9wdGlvbl9lcnJvciA9IE1Q Vl9FUlJPUl9PUFRJT05fRVJST1IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICBub3RfZm91bmQgPSBNUFZfRVJST1JfUFJPUEVSVFlfTk9UX0ZPVU5ECisrICogICAgIHByb3Bl cnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9GT1JNQVQKKyAgKi8KKy0gIF9fcHl4X3Rf NiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX0ZB VEFMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM2LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9y KE1QVl9FUlJPUl9PUFRJT05fRVJST1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCA4NiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK Ky0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19mYXRhbCwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX29wdGlvbl9lcnJvciwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4NiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMzcKKy0gKiAgICAgbm8gPSBNUFZfTE9HX0xFVkVMX05PTkUK Ky0gKiAgICAgZmF0YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMCistICogICAgIGVycm9yID0gTVBW X0xPR19MRVZFTF9FUlJPUiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIHdh cm4gPSBNUFZfTE9HX0xFVkVMX1dBUk4KKy0gKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVWRUxfSU5G TworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg3CisrICogICAgIG9wdGlv bl9mb3JtYXQgPSBNUFZfRVJST1JfT1BUSU9OX0ZPUk1BVAorKyAqICAgICBvcHRpb25fZXJyb3Ig PSBNUFZfRVJST1JfT1BUSU9OX0VSUk9SCisrICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9Q Uk9QRVJUWV9OT1RfRk9VTkQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBw cm9wZXJ0eV9mb3JtYXQgPSBNUFZfRVJST1JfUFJPUEVSVFlfRk9STUFUCisrICogICAgIHByb3Bl cnR5X3VuYXZhaWxhYmxlID0gTVBWX0VSUk9SX1BST1BFUlRZX1VOQVZBSUxBQkxFCisgICovCist ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xP R19MRVZFTF9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEz NywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9lcnJvcihNUFZfRVJST1JfUFJPUEVSVFlfTk9UX0ZPVU5EKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBf X3B5eF9uX3NfZXJyb3IsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTM3LCBfX3B5eF9M MV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c19ub3RfZm91bmQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODcsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTM4CistICogICAgIGZhdGFsID0gTVBW X0xPR19MRVZFTF9GQVRBTAorLSAqICAgICBlcnJvciA9IE1QVl9MT0dfTEVWRUxfRVJST1IKKy0g KiAgICAgd2FybiA9IE1QVl9MT0dfTEVWRUxfV0FSTiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CistICogICAgIGluZm8gPSBNUFZfTE9HX0xFVkVMX0lORk8KKy0gKiAgICAgdiA9IE1QVl9M T0dfTEVWRUxfVgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4CisrICog ICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJT05fRVJST1IKKysgKiAgICAgbm90X2Zv dW5kID0gTVBWX0VSUk9SX1BST1BFUlRZX05PVF9GT1VORAorKyAqICAgICBwcm9wZXJ0eV9mb3Jt YXQgPSBNUFZfRVJST1JfUFJPUEVSVFlfRk9STUFUICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1JfUFJPUEVSVFlfVU5B VkFJTEFCTEUKKysgKiAgICAgcHJvcGVydHlfZXJyb3IgPSBNUFZfRVJST1JfUFJPUEVSVFlfRVJS T1IKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19s ZXZlbChNUFZfTE9HX0xFVkVMX1dBUk4pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCAxMzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1BST1BFUlRZX0ZPUk1BVCk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNywgX19weXhfbl9zX3dhcm4sIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTM4LCBf X3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9f cHl4X25fc19wcm9wZXJ0eV9mb3JtYXQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODgs IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTM5CistICogICAg IGVycm9yID0gTVBWX0xPR19MRVZFTF9FUlJPUgorLSAqICAgICB3YXJuID0gTVBWX0xPR19MRVZF TF9XQVJOCistICogICAgIGluZm8gPSBNUFZfTE9HX0xFVkVMX0lORk8gICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WCistICogICAgIGRlYnVn ID0gTVBWX0xPR19MRVZFTF9ERUJVRworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjg5CisrICogICAgIG5vdF9mb3VuZCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9OT1RfRk9VTkQK KysgKiAgICAgcHJvcGVydHlfZm9ybWF0ID0gTVBWX0VSUk9SX1BST1BFUlRZX0ZPUk1BVAorKyAq ICAgICBwcm9wZXJ0eV91bmF2YWlsYWJsZSA9IE1QVl9FUlJPUl9QUk9QRVJUWV9VTkFWQUlMQUJM RSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHByb3BlcnR5X2Vycm9yID0g TVBWX0VSUk9SX1BST1BFUlRZX0VSUk9SCisrICogICAgIGNvbW1hbmRfZXJyb3IgPSBNUFZfRVJS T1JfQ09NTUFORAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfSU5GTyk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfUFJPUEVSVFlfVU5BVkFJTEFC TEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4OSwgX19weXhfTDFf ZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1l SW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19pbmZvLCBfX3B5eF90XzYpIDwgMCkgX19QWVhf RVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3Mo X19weXhfdF83LCBfX3B5eF9uX3NfcHJvcGVydHlfdW5hdmFpbGFibGUsIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgODksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTQwCistICogICAgIHdhcm4gPSBNUFZfTE9HX0xFVkVMX1dBUk4KKy0gKiAgICAgaW5m byA9IE1QVl9MT0dfTEVWRUxfSU5GTworLSAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgZGVidWcgPSBNUFZfTE9HX0xFVkVMX0RF QlVHCistICogICAgIHRyYWNlID0gTVBWX0xPR19MRVZFTF9UUkFDRQorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjkwCisrICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9F UlJPUl9QUk9QRVJUWV9GT1JNQVQKKysgKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZf RVJST1JfUFJPUEVSVFlfVU5BVkFJTEFCTEUKKysgKiAgICAgcHJvcGVydHlfZXJyb3IgPSBNUFZf RVJST1JfUFJPUEVSVFlfRVJST1IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICBjb21tYW5kX2Vycm9yID0gTVBWX0VSUk9SX0NPTU1BTkQKKysgKiAgICAgbG9hZGluZ19mYWls ZWQgPSBNUFZfRVJST1JfTE9BRElOR19GQUlMRUQKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4 X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX1YpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNDAsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1BS T1BFUlRZX0VSUk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTAs IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19Q eXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdiwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCAxNDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Byb3BlcnR5X2Vycm9yLCBfX3B5eF90XzYpIDwg MCkgX19QWVhfRVJSKDAsIDkwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjE0MQorLSAqICAgICBpbmZvID0gTVBWX0xPR19MRVZFTF9JTkZPCistICogICAgIHYg PSBNUFZfTE9HX0xFVkVMX1YKKy0gKiAgICAgZGVidWcgPSBNUFZfTE9HX0xFVkVMX0RFQlVHICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgdHJhY2UgPSBNUFZfTE9HX0xFVkVM X1RSQUNFCistICogCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTEKKysg KiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1JfUFJPUEVSVFlfVU5BVkFJTEFC TEUKKysgKiAgICAgcHJvcGVydHlfZXJyb3IgPSBNUFZfRVJST1JfUFJPUEVSVFlfRVJST1IKKysg KiAgICAgY29tbWFuZF9lcnJvciA9IE1QVl9FUlJPUl9DT01NQU5EICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgbG9hZGluZ19mYWlsZWQgPSBNUFZfRVJST1JfTE9BRElOR19G QUlMRUQKKysgKiAgICAgYW9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfQU9fSU5JVF9GQUlMRUQK KyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZl bChNUFZfTE9HX0xFVkVMX0RFQlVHKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgMTQxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9DT01NQU5EKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgOTEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfZGVidWcsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTQxLCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19j b21tYW5kX2Vycm9yLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDkxLCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE0MgorLSAqICAgICB2ID0gTVBWX0xP R19MRVZFTF9WCistICogICAgIGRlYnVnID0gTVBWX0xPR19MRVZFTF9ERUJVRworLSAqICAgICB0 cmFjZSA9IE1QVl9MT0dfTEVWRUxfVFJBQ0UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor LSAqIAorLSAqIAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyCisrICog ICAgIHByb3BlcnR5X2Vycm9yID0gTVBWX0VSUk9SX1BST1BFUlRZX0VSUk9SCisrICogICAgIGNv bW1hbmRfZXJyb3IgPSBNUFZfRVJST1JfQ09NTUFORAorKyAqICAgICBsb2FkaW5nX2ZhaWxlZCA9 IE1QVl9FUlJPUl9MT0FESU5HX0ZBSUxFRCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisr ICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX0FPX0lOSVRfRkFJTEVECisrICogICAg IHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRfRkFJTEVECisgICovCistICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZF TF9UUkFDRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE0MiwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l cnJvcihNUFZfRVJST1JfTE9BRElOR19GQUlMRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc190 cmFjZSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxNDIsIF9fcHl4X0wxX2Vycm9yKQor KyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2xvYWRpbmdf ZmFpbGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDkyLCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEzNAorLSAqIAorLSAqIAorLSAqIGNsYXNzIExv Z0xldmVsczogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBubyA9IE1QVl9M T0dfTEVWRUxfTk9ORQorLSAqICAgICBmYXRhbCA9IE1QVl9MT0dfTEVWRUxfRkFUQUwKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MworKyAqICAgICBjb21tYW5kX2Vycm9y ID0gTVBWX0VSUk9SX0NPTU1BTkQKKysgKiAgICAgbG9hZGluZ19mYWlsZWQgPSBNUFZfRVJST1Jf TE9BRElOR19GQUlMRUQKKysgKiAgICAgYW9faW5pdF9mYWlsZWQgPSBNUFZfRVJST1JfQU9fSU5J VF9GQUlMRUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICB2b19pbml0X2Zh aWxlZCA9IE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRAorKyAqICAgICBub3RoaW5nX3RvX3BsYXkg PSBNUFZfRVJST1JfTk9USElOR19UT19QTEFZCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9Q eTNDbGFzc0NyZWF0ZSgoKFB5T2JqZWN0KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4 X25fc19Mb2dMZXZlbHMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90XzcsIE5VTEwsIDAsIDEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzQsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBW X0VSUk9SX0FPX0lOSVRfRkFJTEVEKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgOTMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cist ICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX0xvZ0xldmVscywgX19weXhf dF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2FvX2luaXRfZmFpbGVkLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDkzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Nyk7IF9fcHl4X3RfNyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTQ1CistICogCistICogCistICogY2xhc3MgRU9GUmVhc29uczogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICAiIiJLbm93biBwb3NzaWJsZSB2YWx1ZXMgZm9yIEVuZE9m RmlsZVJlYWNoZWQgcmVhc29uLgorLSAqIAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk0CisrICogICAgIGxvYWRpbmdfZmFpbGVkID0gTVBWX0VSUk9SX0xPQURJTkdfRkFJ TEVECisrICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX0FPX0lOSVRfRkFJTEVECisr ICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRfRkFJTEVEICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgbm90aGluZ190b19wbGF5ID0gTVBWX0VSUk9S X05PVEhJTkdfVE9fUExBWQorKyAqICAgICB1bmtub3duX2Zvcm1hdCA9IE1QVl9FUlJPUl9VTktO T1dOX0ZPUk1BVAorICAqLworLSAgX19weXhfdF83ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFy ZSgoUHlPYmplY3QgKikgTlVMTCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X25fc19FT0ZSZWFz b25zLCBfX3B5eF9uX3NfRU9GUmVhc29ucywgKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X25fc192 aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2twX3NfS25vd25fcG9zc2libGVfdmFsdWVzX2Zvcl9F bmRPZkYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxNDUsIF9fcHl4 X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICBfX3B5eF90XzYgPSBf X1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfVk9fSU5JVF9GQUlMRUQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5NCwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5D bGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc192b19pbml0X2ZhaWxlZCwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCA5NCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxNTAKKy0gKiAgICAgWW91IHNob3VsZCBoYW5kbGUgdGhlIHBvc3NpYmlsaXR5IHRoYXQg dGhlIHJlYXNvbiBtYXkgbm90IGJlIGFueSBvZiB0aGVzZSB2YWx1ZXMuCistICogICAgICIiIgor LSAqICAgICBlb2YgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX0VPRiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CistICogICAgIGFib3J0ZWQgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX1NUT1AKKy0g KiAgICAgcXVpdCA9IE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVAorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjk1CisrICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9S X0FPX0lOSVRfRkFJTEVECisrICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lO SVRfRkFJTEVECisrICogICAgIG5vdGhpbmdfdG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5HX1RP X1BMQVkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICB1bmtub3duX2Zvcm1h dCA9IE1QVl9FUlJPUl9VTktOT1dOX0ZPUk1BVAorKyAqICAgICB1bnN1cHBvcnRlZCA9IE1QVl9F UlJPUl9VTlNVUFBPUlRFRAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZW5kX2ZpbGVfcmVhc29uKE1QVl9FTkRfRklMRV9SRUFTT05fRU9GKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTUwLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9O T1RISU5HX1RPX1BMQVkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5 NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChf X1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19lb2YsIF9fcHl4X3RfNikg PCAwKSBfX1BZWF9FUlIoMCwgMTUwLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXRO YW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19ub3RoaW5nX3RvX3BsYXksIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgOTUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTUxCistICogICAgICIiIgorLSAqICAgICBlb2YgPSBNUFZfRU5EX0ZJTEVf UkVBU09OX0VPRgorLSAqICAgICBhYm9ydGVkID0gTVBWX0VORF9GSUxFX1JFQVNPTl9TVE9QICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgcXVpdCA9IE1QVl9FTkRfRklMRV9S RUFTT05fUVVJVAorLSAqICAgICBlcnJvciA9IE1QVl9FTkRfRklMRV9SRUFTT05fRVJST1IKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NgorKyAqICAgICB2b19pbml0X2Zh aWxlZCA9IE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRAorKyAqICAgICBub3RoaW5nX3RvX3BsYXkg PSBNUFZfRVJST1JfTk9USElOR19UT19QTEFZCisrICogICAgIHVua25vd25fZm9ybWF0ID0gTVBW X0VSUk9SX1VOS05PV05fRk9STUFUICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgdW5zdXBwb3J0ZWQgPSBNUFZfRVJST1JfVU5TVVBQT1JURUQKKysgKiAgICAgbm90X2ltcGxl bWVudGVkID0gTVBWX0VSUk9SX05PVF9JTVBMRU1FTlRFRAorICAqLworLSAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5kX2ZpbGVfcmVhc29uKE1QVl9FTkRfRklMRV9S RUFTT05fU1RPUCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE1MSwg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21w dl9lcnJvcihNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NikpIF9fUFlYX0VSUigwLCA5NiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c19hYm9ydGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE1MSwgX19weXhfTDFfZXJy b3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdW5r bm93bl9mb3JtYXQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTYsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTUyCistICogICAgIGVvZiA9IE1QVl9F TkRfRklMRV9SRUFTT05fRU9GCistICogICAgIGFib3J0ZWQgPSBNUFZfRU5EX0ZJTEVfUkVBU09O X1NUT1AKKy0gKiAgICAgcXVpdCA9IE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGVycm9yID0gTVBWX0VORF9GSUxFX1JFQVNPTl9F UlJPUgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3CisrICogICAgIG5v dGhpbmdfdG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkKKysgKiAgICAgdW5rbm93 bl9mb3JtYXQgPSBNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQKKysgKiAgICAgdW5zdXBwb3J0ZWQg PSBNUFZfRVJST1JfVU5TVVBQT1JURUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICBub3RfaW1wbGVtZW50ZWQgPSBNUFZfRVJST1JfTk9UX0lNUExFTUVOVEVECisgICogCisg ICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lbmRfZmlsZV9y ZWFzb24oTVBWX0VORF9GSUxFX1JFQVNPTl9RVUlUKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgMTUyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4 X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9VTlNVUFBPUlRFRCk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDk3LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9f cHl4X3RfNywgX19weXhfbl9zX3F1aXQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTUy LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90Xzcs IF9fcHl4X25fc191bnN1cHBvcnRlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5Nywg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNTMKKy0gKiAgICAg YWJvcnRlZCA9IE1QVl9FTkRfRklMRV9SRUFTT05fU1RPUAorLSAqICAgICBxdWl0ID0gTVBWX0VO RF9GSUxFX1JFQVNPTl9RVUlUCistICogICAgIGVycm9yID0gTVBWX0VORF9GSUxFX1JFQVNPTl9F UlJPUiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTgKKysgKiAgICAgdW5rbm93bl9mb3JtYXQgPSBNUFZfRVJST1JfVU5L Tk9XTl9GT1JNQVQKKysgKiAgICAgdW5zdXBwb3J0ZWQgPSBNUFZfRVJST1JfVU5TVVBQT1JURUQK KysgKiAgICAgbm90X2ltcGxlbWVudGVkID0gTVBWX0VSUk9SX05PVF9JTVBMRU1FTlRFRCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogCisgICovCistICBfX3B5eF90XzYg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lbmRfZmlsZV9yZWFzb24oTVBWX0VORF9GSUxF X1JFQVNPTl9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE1 MywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9lcnJvcihNUFZfRVJST1JfTk9UX0lNUExFTUVOVEVEKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgOTgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfZXJyb3IsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTUzLCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19u b3RfaW1wbGVtZW50ZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTgsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTQ1CistICogCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzIKKysgKiBQeV9Jbml0aWFsaXplKCkKKyAgKiAK Ky0gKiBjbGFzcyBFT0ZSZWFzb25zOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICIiIktub3duIHBvc3NpYmxlIHZhbHVlcyBmb3IgRW5kT2ZGaWxlUmVhY2hlZCByZWFzb24u CisrICogY2xhc3MgRXJyb3JzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICIiIlNldCBvZiBrbm93biBlcnJvciBjb2RlcyBmcm9tIE1wdkVycm9yIGFuZCBFdmVudCByZXNw b25zZXMuCisgICogCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZSgo KFB5T2JqZWN0KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19FT0ZSZWFzb25z LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdF83LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNiA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKCgoUHlPYmplY3QqKSZfX1B5eF9EZWZhdWx0Q2xh c3NUeXBlKSwgX19weXhfbl9zX0Vycm9ycywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3RfNywg TlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDcyLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKFB5RGlj dF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19FT0ZSZWFzb25zLCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDE0NSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlEaWN0X1NldEl0ZW0o X19weXhfZCwgX19weXhfbl9zX0Vycm9ycywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA3 MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOAorLSAqIAorLSAqIAorLSAqIGRl ZiBfZXJyb3JzKGZuKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBkZWYg d3JhcHBlZCgqaywgKiprdyk6CistICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCistICovCist ICBfX3B5eF90XzcgPSBQeUNGdW5jdGlvbl9OZXdFeCgmX19weXhfbWRlZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfNV9lcnJvcnMsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAzMTgsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICBpZiAoUHlEaWN0X1NldEl0ZW0oX19w eXhfZCwgX19weXhfbl9zX2Vycm9ycywgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCAzMTgs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9 IDA7CistCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI2CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAxCisgICogCisgICogCistICogY2xhc3Mg TVBWRXJyb3IoRXhjZXB0aW9uKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICBjb2RlID0gTm9uZQorKyAqIGNsYXNzIEV2ZW50czogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAiIiJTZXQgb2Yga25vd24gdmFsdWVzIGZvciBFdmVudCBpZHMuCisgICog CisgICovCistICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgMzI2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNyA9 IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5 X3R1cGxlLCBfX3B5eF9uX3NfRXZlbnRzLCBfX3B5eF9uX3NfRXZlbnRzLCAoUHlPYmplY3QgKikg TlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfa3Bfc19TZXRfb2Zfa25v d25fdmFsdWVzX2Zvcl9FdmVudF9pZCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhf RVJSKDAsIDEwMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsK Ky0gIF9fUHl4X0lOQ1JFRigoKFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhj ZXB0aW9uKVswXSkpKTsKKy0gIF9fUHl4X0dJVkVSRUYoKChQeU9iamVjdCAqKSgmKChQeVR5cGVP YmplY3QqKVB5RXhjX0V4Y2VwdGlvbilbMF0pKSk7CistICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4 X3RfNywgMCwgKChQeU9iamVjdCAqKSgmKChQeVR5cGVPYmplY3QqKVB5RXhjX0V4Y2VwdGlvbilb MF0pKSk7CistICBfX3B5eF90XzYgPSBfX1B5eF9DYWxjdWxhdGVNZXRhY2xhc3MoTlVMTCwgX19w eXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMzI2LCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgX19weXhfdF80ID0g X19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzYsIF9fcHl4X3RfNywgX19weXhfbl9z X01QVkVycm9yLCBfX3B5eF9uX3NfTVBWRXJyb3IsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9u X3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSgh X19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMyNiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9H T1RSRUYoX19weXhfdF80KTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozMjcKKy0gKiAKKy0gKiBjbGFzcyBNUFZFcnJvcihFeGNlcHRpb24pOgorLSAqICAgICBjb2Rl ID0gTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogICAgIGRlZiBf X2luaXRfXyhzZWxmLCBlKToKKy0gKi8KKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5 eF90XzQsIF9fcHl4X25fc19jb2RlLCBQeV9Ob25lKSA8IDApIF9fUFlYX0VSUigwLCAzMjcsIF9f cHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMy OQorLSAqICAgICBjb2RlID0gTm9uZQorLSAqIAorLSAqICAgICBkZWYgX19pbml0X18oc2VsZiwg ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgIHNlbGYuY29kZSA9 IGUKKy0gKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogZXJyX2MKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDgKKysgKiAgICAgWW91IHNob3VsZCBoYW5kbGUgdGhlIHBv c3NpYmlsaXR5IHRoYXQgZXZlbnQgaWRzIG1heSBub3QgYmUgYW55IG9mIHRoZXNlIHZhbHVlcy4K KysgKiAgICAgIiIiCisrICogICAgIG5vbmUgPSBNUFZfRVZFTlRfTk9ORSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgIHNodXRkb3duID0gTVBWX0VWRU5UX1NIVVRET1dOCisr ICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5UX0xPR19NRVNTQUdFCisgICovCistICBfX3B5 eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfOE1QVkVycm9yXzFfX2luaXRfXywgMCwgX19weXhfbl9zX01QVkVycm9yX19faW5pdCwg TlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAq KV9fcHl4X2NvZGVvYmpfXzI5KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDMyOSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0g IGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19pbml0LCBfX3B5 eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9OT05FKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTA4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX25vbmUsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTA4LCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyNgorLSAqIAorLSAqIAor LSAqIGNsYXNzIE1QVkVycm9yKEV4Y2VwdGlvbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiAgICAgY29kZSA9IE5vbmUKKy0gKiAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDkKKysgKiAgICAgIiIiCisrICogICAgIG5vbmUgPSBNUFZfRVZFTlRfTk9O RQorKyAqICAgICBzaHV0ZG93biA9IE1QVl9FVkVOVF9TSFVURE9XTiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5UX0xPR19NRVNTQUdF CisrICogICAgIGdldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQ TFkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKF9fcHl4X3RfNiwg X19weXhfbl9zX01QVkVycm9yLCBfX3B5eF90XzcsIF9fcHl4X3RfNCwgTlVMTCwgMCwgMSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMyNiwgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5 eF9kLCBfX3B5eF9uX3NfTVBWRXJyb3IsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMzI2 LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfU0hV VERPV04pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDksIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X3RfNikgPCAw KSBfX1BZWF9FUlIoMCwgMTA5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4 X3RfNyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQwCist ICogICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgZSkKKy0gKiAKKy0gKiBjbGFzcyBQ eU1QVkVycm9yKEV4Y2VwdGlvbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAg ICAgcGFzcworLSAqIAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMAor KyAqICAgICBub25lID0gTVBWX0VWRU5UX05PTkUKKysgKiAgICAgc2h1dGRvd24gPSBNUFZfRVZF TlRfU0hVVERPV04KKysgKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZFTlRfTE9HX01FU1NBR0Ug ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBnZXRfcHJvcGVydHlfcmVwbHkg PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCisrICogICAgIHNldF9wcm9wZXJ0eV9yZXBs eSA9IE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkKKyAgKi8KKy0gIF9fcHl4X3RfNyA9IFB5 VHVwbGVfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAzNDAs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9J TkNSRUYoKChQeU9iamVjdCAqKSgmKChQeVR5cGVPYmplY3QqKVB5RXhjX0V4Y2VwdGlvbilbMF0p KSk7CistICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4 Y19FeGNlcHRpb24pWzBdKSkpOworLSAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDAsICgo UHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOworLSAg X19weXhfdF82ID0gX19QeXhfQ2FsY3VsYXRlTWV0YWNsYXNzKE5VTEwsIF9fcHl4X3RfNyk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZf RVZFTlRfTE9HX01FU1NBR0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCAxMTAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBf X3B5eF90XzQgPSBfX1B5eF9QeTNNZXRhY2xhc3NQcmVwYXJlKF9fcHl4X3RfNiwgX19weXhfdF83 LCBfX3B5eF9uX3NfUHlNUFZFcnJvciwgX19weXhfbl9zX1B5TVBWRXJyb3IsIChQeU9iamVjdCAq KSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7 IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJy b3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5 M0NsYXNzQ3JlYXRlKF9fcHl4X3RfNiwgX19weXhfbl9zX1B5TVBWRXJyb3IsIF9fcHl4X3RfNywg X19weXhfdF80LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgMzQwLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19QeU1QVkVycm9yLCBfX3B5 eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX2xvZ19tZXNzYWdlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEx MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0MworLSAqICAgICBwYXNzCistICog CistICogY2RlZiBfY2FsbGJhY2tzID0gZGljdCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKy0gKiBjZGVmIF9yZXBseV91c2VyZGF0YXMgPSBkaWN0KCkKKy0gKiAKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTEKKysgKiAgICAgc2h1dGRvd24gPSBNUFZfRVZF TlRfU0hVVERPV04KKysgKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZFTlRfTE9HX01FU1NBR0UK KysgKiAgICAgZ2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBM WSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHNldF9wcm9wZXJ0eV9yZXBs eSA9IE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkKKysgKiAgICAgY29tbWFuZF9yZXBseSA9 IE1QVl9FVkVOVF9DT01NQU5EX1JFUExZCisgICovCistICBfX3B5eF90XzcgPSBfX1B5eF9QeURp Y3RfTmV3UHJlc2l6ZWQoMCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAs IDM0MywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKy0gIF9f UHl4X1hHT1RSRUYoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NhbGxiYWNrcyk7Cist ICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFj a3MsIF9fcHl4X3RfNyk7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNyk7CistICBfX3B5eF90 XzcgPSAwOworKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRf aWQoTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWSk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDExMSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c19nZXRfcHJvcGVydHlfcmVwbHksIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTExLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NAorLSAqIAorLSAq IGNkZWYgX2NhbGxiYWNrcyA9IGRpY3QoKQorLSAqIGNkZWYgX3JlcGx5X3VzZXJkYXRhcyA9IGRp Y3QoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogCistICogY2xhc3MgX1JlcGx5 VXNlckRhdGEob2JqZWN0KToKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTIKKysgKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZFTlRfTE9HX01FU1NBR0UKKysgKiAgICAg Z2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWQorKyAqICAg ICBzZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZfRVZFTlRfU0VUX1BST1BFUlRZX1JFUExZICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgY29tbWFuZF9yZXBseSA9IE1QVl9FVkVO VF9DT01NQU5EX1JFUExZCisrICogICAgIHN0YXJ0X2ZpbGUgPSBNUFZfRVZFTlRfU1RBUlRfRklM RQorICAqLworLSAgX19weXhfdF83ID0gX19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDApOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAzNDQsIF9fcHl4X0wxX2Vycm9yKQor LSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9YR09UUkVGKF9fcHl4X3ZfOXZp ZGN1dHRlcl80bGlic18zbXB2X19yZXBseV91c2VyZGF0YXMpOworLSAgX19QeXhfREVDUkVGX1NF VChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF90 XzcpOworLSAgX19QeXhfR0lWRVJFRihfX3B5eF90XzcpOworLSAgX19weXhfdF83ID0gMDsKKysg IF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVO VF9TRVRfUFJPUEVSVFlfUkVQTFkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCAxMTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cisr ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2V0X3Byb3Bl cnR5X3JlcGx5LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExMiwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDYKKy0gKiBjZGVmIF9yZXBseV91c2Vy ZGF0YXMgPSBkaWN0KCkKKy0gKiAKKy0gKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBk YXRhKToKKy0gKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTMKKysgKiAgICAgZ2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VW RU5UX0dFVF9QUk9QRVJUWV9SRVBMWQorKyAqICAgICBzZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZf RVZFTlRfU0VUX1BST1BFUlRZX1JFUExZCisrICogICAgIGNvbW1hbmRfcmVwbHkgPSBNUFZfRVZF TlRfQ09NTUFORF9SRVBMWSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHN0 YXJ0X2ZpbGUgPSBNUFZfRVZFTlRfU1RBUlRfRklMRQorKyAqICAgICBlbmRfZmlsZSA9IE1QVl9F VkVOVF9FTkRfRklMRQorICAqLworLSAgX19weXhfdF83ID0gX19QeXhfQ2FsY3VsYXRlTWV0YWNs YXNzKE5VTEwsIF9fcHl4X3R1cGxlX18zMCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19Q WVhfRVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF83 KTsKKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoX19weXhfdF83LCBf X3B5eF90dXBsZV9fMzAsIF9fcHl4X25fc19SZXBseVVzZXJEYXRhLCBfX3B5eF9uX3NfUmVwbHlV c2VyRGF0YSwgKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYs IChQeU9iamVjdCAqKSBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9DT01NQU5EX1JFUExZKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTEzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NywgX19weXhfbl9zX2NvbW1hbmRfcmVwbHksIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwg MTEzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NworLSAq IAorLSAqIGNsYXNzIF9SZXBseVVzZXJEYXRhKG9iamVjdCk6CistICogICAgIGRlZiBfX2luaXRf XyhzZWxmLCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAg c2VsZi5jb3VudGVyID0gMAorLSAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNAorKyAqICAgICBzZXRfcHJvcGVydHlfcmVw bHkgPSBNUFZfRVZFTlRfU0VUX1BST1BFUlRZX1JFUExZCisrICogICAgIGNvbW1hbmRfcmVwbHkg PSBNUFZfRVZFTlRfQ09NTUFORF9SRVBMWQorKyAqICAgICBzdGFydF9maWxlID0gTVBWX0VWRU5U X1NUQVJUX0ZJTEUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBlbmRfZmls ZSA9IE1QVl9FVkVOVF9FTkRfRklMRQorKyAqICAgICBmaWxlX2xvYWRlZCA9IE1QVl9FVkVOVF9G SUxFX0xPQURFRAorICAqLworLSAgX19weXhfdF80ID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9f cHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfMV9faW5pdF9f LCAwLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YV9fX2luaXQsIE5VTEwsIF9fcHl4X25fc192aWRj dXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18zMikp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wxX2Vy cm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF82LCBfX3B5eF9uX3NfaW5pdCwgX19weXhfdF80KSA8IDApIF9fUFlYX0VS UigwLCAzNDcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9f cHl4X3RfNCA9IDA7CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l dmVudF9pZChNUFZfRVZFTlRfU1RBUlRfRklMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDExNCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19z dGFydF9maWxlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNCwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTIKKy0gKiAgICAgICAgIHNlbGYub2Jz ZXJ2ZWQgPSBGYWxzZQorLSAqIAorLSAqICAgICBkZWYgYWRkKHNlbGYpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMQorLSAqIAorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNQorKyAqICAgICBjb21tYW5kX3Jl cGx5ID0gTVBWX0VWRU5UX0NPTU1BTkRfUkVQTFkKKysgKiAgICAgc3RhcnRfZmlsZSA9IE1QVl9F VkVOVF9TVEFSVF9GSUxFCisrICogICAgIGVuZF9maWxlID0gTVBWX0VWRU5UX0VORF9GSUxFICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZmlsZV9sb2FkZWQgPSBNUFZfRVZF TlRfRklMRV9MT0FERUQKKysgKiAgICAgIyB0cmFja3NfY2hhbmdlZCA9IE1QVl9FVkVOVF9UUkFD S1NfQ0hBTkdFRAorICAqLworLSAgX19weXhfdF80ID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9f cHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfM2FkZCwgMCwg X19weXhfbl9zX1JlcGx5VXNlckRhdGFfYWRkLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xp YnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMzQpKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzUyLCBfX3B5eF9MMV9lcnJvcikKKy0g IF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9f cHl4X3RfNiwgX19weXhfbl9zX2FkZCwgX19weXhfdF80KSA8IDApIF9fUFlYX0VSUigwLCAzNTIs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9 IDA7CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChN UFZfRVZFTlRfRU5EX0ZJTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCAxMTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZW5kX2ZpbGUsIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjM1NQorLSAqICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKKy0g KiAKKy0gKiAgICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgc2VsZi5jb3VudGVyIC09IDEKKy0gKiAKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTYKKysgKiAgICAgc3RhcnRfZmlsZSA9IE1QVl9FVkVOVF9T VEFSVF9GSUxFCisrICogICAgIGVuZF9maWxlID0gTVBWX0VWRU5UX0VORF9GSUxFCisrICogICAg IGZpbGVfbG9hZGVkID0gTVBWX0VWRU5UX0ZJTEVfTE9BREVEICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgIyB0cmFja3NfY2hhbmdlZCA9IE1QVl9FVkVOVF9UUkFDS1NfQ0hB TkdFRAorKyAqICAgICAjIHRyYWNrc19zd2l0Y2hlZCA9IE1QVl9FVkVOVF9UUkFDS19TV0lUQ0hF RAorICAqLworLSAgX19weXhfdF80ID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZf OXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNXJlbW92ZSwgMCwgX19weXhf bl9zX1JlcGx5VXNlckRhdGFfcmVtb3ZlLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNf bXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMzYpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzU1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9f UHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNiwgX19weXhfbl9zX3JlbW92ZSwgX19weXhfdF80KSA8IDApIF9fUFlYX0VSUigwLCAzNTUs IF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9 IDA7CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChN UFZfRVZFTlRfRklMRV9MT0FERUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCAxMTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cisr ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZmlsZV9sb2Fk ZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE2LCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NgorLSAqIGNkZWYgX3JlcGx5X3VzZXJkYXRhcyA9 IGRpY3QoKQorLSAqIAorLSAqIGNsYXNzIF9SZXBseVVzZXJEYXRhKG9iamVjdCk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgor LSAqICAgICAgICAgc2VsZi5jb3VudGVyID0gMAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExOQorKyAqICAgICAjIHRyYWNrc19jaGFuZ2VkID0gTVBWX0VWRU5UX1RSQUNL U19DSEFOR0VECisrICogICAgICMgdHJhY2tzX3N3aXRjaGVkID0gTVBWX0VWRU5UX1RSQUNLX1NX SVRDSEVECisrICogICAgIGlkbGUgPSBNUFZfRVZFTlRfSURMRSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICMgcGF1c2UgPSBNUFZfRVZFTlRfUEFVU0UKKysgKiAgICAgIyB1 bnBhdXNlID0gTVBWX0VWRU5UX1VOUEFVU0UKKyAgKi8KKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5 M0NsYXNzQ3JlYXRlKF9fcHl4X3RfNywgX19weXhfbl9zX1JlcGx5VXNlckRhdGEsIF9fcHl4X3R1 cGxlX18zMCwgX19weXhfdF82LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzQpOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19SZXBseVVz ZXJEYXRhLCBfX3B5eF90XzQpIDwgMCkgX19QWVhfRVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgIF9fcHl4X3Rf NiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9JRExFKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE5LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNs YXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2lkbGUsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIo MCwgMTE5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5 eF90XzYgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDExCistICogICAgICAgICAg ICAgbXB2X3Jlc3VtZShzZWxmLl9jdHgpCistICogCistICogICAgIEBfZXJyb3JzICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgZGVmIHJlcXVlc3RfZXZlbnQoc2VsZiwgZXZl bnQsIGVuYWJsZSk6CistICogICAgICAgICAiIiJFbmFibGUgb3IgZGlzYWJsZSBhIGdpdmVuIGV2 ZW50LgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEyMgorKyAqICAgICAj IHBhdXNlID0gTVBWX0VWRU5UX1BBVVNFCisrICogICAgICMgdW5wYXVzZSA9IE1QVl9FVkVOVF9V TlBBVVNFCisrICogICAgIHRpY2sgPSBNUFZfRVZFTlRfVElDSyAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgICMgc2NyaXB0X2lucHV0X2Rpc3BhdGNoID0gTVBWX0VWRU5UX1ND UklQVF9JTlBVVF9ESVNQQVRDSAorKyAqICAgICBjbGllbnRfbWVzc2FnZSA9IE1QVl9FVkVOVF9D TElFTlRfTUVTU0FHRQorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCA0MTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1RJQ0spOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCAxMjIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfdGljaywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMjIsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDEyCistICogCistICogICAgIEBfZXJy b3JzCistICogICAgIGRlZiByZXF1ZXN0X2V2ZW50KHNlbGYsIGV2ZW50LCBlbmFibGUpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJFbmFibGUgb3IgZGlzYWJs ZSBhIGdpdmVuIGV2ZW50LgorLSAqIAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEyNAorKyAqICAgICB0aWNrID0gTVBWX0VWRU5UX1RJQ0sKKysgKiAgICAgIyBzY3JpcHRf aW5wdXRfZGlzcGF0Y2ggPSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENICisrICogICAg IGNsaWVudF9tZXNzYWdlID0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgdmlkZW9fcmVjb25maWcgPSBNUFZfRVZFTlRfVklERU9f UkVDT05GSUcKKysgKiAgICAgYXVkaW9fcmVjb25maWcgPSBNUFZfRVZFTlRfQVVESU9fUkVDT05G SUcKKyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICop X19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19yZXF1 ZXN0X2V2ZW50KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDEyLCBf X3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgX19weXhfdF8x ID0gTlVMTDsKKy0gIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRo b2RfQ2hlY2soX19weXhfdF82KSkpIHsKKy0gICAgX19weXhfdF8xID0gUHlNZXRob2RfR0VUX1NF TEYoX19weXhfdF82KTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90XzEpKSB7CistICAgICAgUHlP YmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7CistICAg ICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7CistICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9u KTsKKy0gICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOworLSAgICB9 CistICB9CistICBfX3B5eF90XzcgPSAoX19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwy QXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA0MTEsIF9f cHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICBfX3B5eF90XzYg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfQ0xJRU5UX01F U1NBR0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMjQsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfY2xpZW50X21lc3NhZ2UsIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgMTI0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9i amVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0 LCBfX3B5eF9uX3NfcmVxdWVzdF9ldmVudCwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA0 MTIsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3Rf NyA9IDA7CistICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQy OQorLSAqICAgICAgICAgcmV0dXJuIGVycgorLSAqIAorLSAqICAgICBAX2Vycm9ycyAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxv Z2xldmVsKToKKy0gKiAgICAgICAgICIiIldyYXBzOiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMi IiIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjUKKysgKiAgICAgIyBz Y3JpcHRfaW5wdXRfZGlzcGF0Y2ggPSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENICisr ICogICAgIGNsaWVudF9tZXNzYWdlID0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFCisrICogICAg IHZpZGVvX3JlY29uZmlnID0gTVBWX0VWRU5UX1ZJREVPX1JFQ09ORklHICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgYXVkaW9fcmVjb25maWcgPSBNUFZfRVZFTlRfQVVESU9f UkVDT05GSUcKKysgKiAgICAgIyBtZXRhZGF0YV91cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFf VVBEQVRFCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19w eXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQy OSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9ldmVudF9pZChNUFZfRVZFTlRfVklERU9fUkVDT05GSUcpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMjUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBf X3B5eF9uX3NfdmlkZW9fcmVjb25maWcsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTI1 LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYg PSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzMAorLSAqIAor LSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgc2V0X2xvZ19sZXZlbChzZWxmLCBsb2dsZXZl bCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICIiIldyYXBzOiBt cHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjYKKysgKiAgICAgY2xpZW50 X21lc3NhZ2UgPSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0UKKysgKiAgICAgdmlkZW9fcmVjb25m aWcgPSBNUFZfRVZFTlRfVklERU9fUkVDT05GSUcKKysgKiAgICAgYXVkaW9fcmVjb25maWcgPSBN UFZfRVZFTlRfQVVESU9fUkVDT05GSUcgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICAjIG1ldGFkYXRhX3VwZGF0ZSA9IE1QVl9FVkVOVF9NRVRBREFUQV9VUERBVEUKKysgKiAg ICAgc2VlayA9IE1QVl9FVkVOVF9TRUVLCisgICovCistICBfX1B5eF9HZXROYW1lSW5DbGFzcyhf X3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0LCBfX3B5eF9uX3Nfc2V0X2xvZ19sZXZlbCk7IGlmICh1bmxpa2VseSghX19weXhfdF80 KSkgX19QWVhfRVJSKDAsIDQzMCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19w eXhfdF80KTsKKy0gIF9fcHl4X3RfMSA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRI T0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CistICAgIF9fcHl4 X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CistICAgIGlmIChsaWtlbHkoX19w eXhfdF8xKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzYpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworLSAgICAg IF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90 XzYsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkg PyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3Rf NCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80KTsKKy0g IF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzcp KSBfX1BZWF9FUlIoMCwgNDI5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5 eF90XzcpOworKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRf aWQoTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgMTI2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzYpOworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2F1 ZGlvX3JlY29uZmlnLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyNiwgX19weXhfTDFf ZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlm IChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3NldF9sb2dfbGV2ZWwsIF9fcHl4X3Rf NykgPCAwKSBfX1BZWF9FUlIoMCwgNDMwLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NDAKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKy0gKiAKKy0g KiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBkZWYg bG9hZF9jb25maWcoc2VsZiwgZmlsZW5hbWUpOgorLSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9s b2FkX2NvbmZpZ19maWxlIiIiCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTI4CisrICogICAgIGF1ZGlvX3JlY29uZmlnID0gTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHCisr ICogICAgICMgbWV0YWRhdGFfdXBkYXRlID0gTVBWX0VWRU5UX01FVEFEQVRBX1VQREFURQorKyAq ICAgICBzZWVrID0gTVBWX0VWRU5UX1NFRUsgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICBwbGF5YmFja19yZXN0YXJ0ID0gTVBWX0VWRU5UX1BMQVlCQUNLX1JFU1RBUlQKKysg KiAgICAgcHJvcGVydHlfY2hhbmdlID0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRQorICAqLwor LSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NDAsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQo TVBWX0VWRU5UX1NFRUspOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAx MjgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2VlaywgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCAxMjgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDQxCistICogCistICogICAgIEBfZXJyb3JzCistICogICAgIGRlZiBsb2Fk X2NvbmZpZyhzZWxmLCBmaWxlbmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0g KiAgICAgICAgICIiIldyYXBzOiBtcHZfbG9hZF9jb25maWdfZmlsZSIiIgorLSAqICAgICAgICAg YXNzZXJ0IHNlbGYuX2N0eAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEy OQorKyAqICAgICAjIG1ldGFkYXRhX3VwZGF0ZSA9IE1QVl9FVkVOVF9NRVRBREFUQV9VUERBVEUK KysgKiAgICAgc2VlayA9IE1QVl9FVkVOVF9TRUVLCisrICogICAgIHBsYXliYWNrX3Jlc3RhcnQg PSBNUFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFSVCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgIHByb3BlcnR5X2NoYW5nZSA9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UKKysg KiAgICAgIyBjaGFwdGVyX2NoYW5nZSA9IE1QVl9FVkVOVF9DSEFQVEVSX0NIQU5HRQorICAqLwor LSAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX2xvYWRfY29uZmlnKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDQxLCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgX19weXhfdF8xID0gTlVMTDsKKy0g IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19w eXhfdF82KSkpIHsKKy0gICAgX19weXhfdF8xID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82 KTsKKy0gICAgaWYgKGxpa2VseShfX3B5eF90XzEpKSB7CistICAgICAgUHlPYmplY3QqIGZ1bmN0 aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7CistICAgICAgX19QeXhfSU5D UkVGKF9fcHl4X3RfMSk7CistICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKy0gICAgICBf X1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOworLSAgICB9CistICB9CistICBf X3B5eF90XzcgPSAoX19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90 XzYsIF9fcHl4X3RfMSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfdF82LCBfX3B5eF90XzQpOworLSAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA0NDAsIF9fcHl4X0wxX2Vycm9y KQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFSVCk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEyOSwgX19weXhfTDFfZXJyb3Ip CisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFz cyhfX3B5eF90XzcsIF9fcHl4X25fc19wbGF5YmFja19yZXN0YXJ0LCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDEyOSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilf X3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhf bl9zX2xvYWRfY29uZmlnLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDQ0MSwgX19weXhf TDFfZXJyb3IpCistICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0g IFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTczCistICogICAg ICAgICByZXR1cm4gcmVzdWx0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTMwCisrICogICAgIHNlZWsgPSBNUFZfRVZFTlRfU0VFSworKyAqICAgICBwbGF5YmFja19yZXN0 YXJ0ID0gTVBWX0VWRU5UX1BMQVlCQUNLX1JFU1RBUlQKKysgKiAgICAgcHJvcGVydHlfY2hhbmdl ID0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisrICogICAgICMgY2hhcHRlcl9jaGFuZ2UgPSBNUFZfRVZFTlRfQ0hBUFRFUl9DSEFOR0UKKyAg KiAKKy0gKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAg ICBkZWYgZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6CistICogICAg ICAgICAiIiJHZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGFzeW5jaHJvbm91c2x5LgorICAq LworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJv cnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA1NzMsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRf aWQoTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDEzMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19w cm9wZXJ0eV9jaGFuZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTMwLCBfX3B5eF9M MV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU3NAorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwMQorICAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAg ICBkZWYgZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAgICIiIkdldHMgdGhlIHZhbHVlIG9mIGEg cHJvcGVydHkgYXN5bmNocm9ub3VzbHkuCisrICogCisrICogY2xhc3MgRXZlbnRzOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICIiIlNldCBvZiBrbm93biB2YWx1ZXMgZm9y IEV2ZW50IGlkcy4KKyAgKiAKKyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQs IF9fcHl4X25fc19nZXRfcHJvcGVydHlfYXN5bmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNCk7CistICBfX3B5eF90XzEgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9E UyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgeworLSAgICBfX3B5eF90 XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOworLSAgICBpZiAobGlrZWx5KF9fcHl4 X3RfMSkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJ T04oX19weXhfdF82KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKy0gICAgICBf X1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82 LCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8g X19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQp IDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CistICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX1B5eF9ERUNSRUYo X19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkg X19QWVhfRVJSKDAsIDU3MywgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhf dF83KTsKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKCgoUHlPYmplY3QqKSZf X1B5eF9EZWZhdWx0Q2xhc3NUeXBlKSwgX19weXhfbl9zX0V2ZW50cywgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X3RfNywgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDEwMSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82 KTsKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfRXZlbnRzLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEwMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbSgo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBf ZGljdCwgX19weXhfbl9zX2dldF9wcm9wZXJ0eV9hc3luYywgX19weXhfdF83KSA8IDApIF9fUFlY X0VSUigwLCA1NzQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7 IF9fcHl4X3RfNyA9IDA7CistICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYzNQorLSAqICAgICAgICAgcmV0dXJuIHYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMzQKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorLSAqICAgICBkZWYgc2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIHZhbHVl PVRydWUsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKToKKy0gKiAgICAgICAgICIiIldy YXBzOiBtcHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIiCistICov CistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9y cyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDYzNSwgX19weXhfTDFf ZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0KKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MzYKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMKKy0gKiAgICAg ZGVmIHNldF9wcm9wZXJ0eShzZWxmLCBwcm9wLCB2YWx1ZT1UcnVlLCBhc3luY2hyb25vdXM9RmFs c2UsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAgICAgICAg ICIiIldyYXBzOiBtcHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIi CistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICogY2xhc3MgTG9nTGV2ZWxzOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIG5vID0gTVBWX0xPR19MRVZFTF9OT05F CisrICogICAgIGZhdGFsID0gTVBWX0xPR19MRVZFTF9GQVRBTAorICAqLworLSAgX19QeXhfR2V0 TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3NldF9wcm9wZXJ0eSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDYzNiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5 eF9HT1RSRUYoX19weXhfdF80KTsKKy0gIF9fcHl4X3RfMSA9IE5VTEw7CistICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7 CistICAgIF9fcHl4X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CistICAgIGlm IChsaWtlbHkoX19weXhfdF8xKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0 aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzEpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzYsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAgX19weXhfdF83ID0g KF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90 XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19w eXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNjM1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCAo UHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0 ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMzQsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbSgoUHlP YmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGlj dCwgX19weXhfbl9zX3NldF9wcm9wZXJ0eSwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2 MzYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3Rf NyA9IDA7CistICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3 MworLSAqICAgICAgICAgcmV0dXJuIGVycgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEzNQorICAqIAorLSAqICAgICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgIGRlZiBzZXRfb3B0aW9uKHNlbGYsIHByb3AsIHZhbHVlPVRydWUpOgor LSAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCisrICogY2xhc3MgTG9nTGV2 ZWxzOgorKyAqICAgICBubyA9IE1QVl9MT0dfTEVWRUxfTk9ORSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgIGZhdGFsID0gTVBWX0xPR19MRVZFTF9GQVRBTAorKyAqICAgICBl cnJvciA9IE1QVl9MT0dfTEVWRUxfRVJST1IKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2Jh bE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzYpKSBfX1BZWF9FUlIoMCwgNjczLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9f UHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX05PTkUpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzUsIF9fcHl4X0wxX2Vycm9y KQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm8sIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwg MTM1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3NAorLSAq IAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBwcm9wLCB2 YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgIiIi V3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCistICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTM2CisrICogY2xhc3MgTG9nTGV2 ZWxzOgorKyAqICAgICBubyA9IE1QVl9MT0dfTEVWRUxfTk9ORQorKyAqICAgICBmYXRhbCA9IE1Q Vl9MT0dfTEVWRUxfRkFUQUwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBl cnJvciA9IE1QVl9MT0dfTEVWRUxfRVJST1IKKysgKiAgICAgd2FybiA9IE1QVl9MT0dfTEVWRUxf V0FSTgorICAqLworLSAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3Qg KilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3Nl dF9vcHRpb24pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2NzQsIF9f cHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBfX3B5eF90XzEg PSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhv ZF9DaGVjayhfX3B5eF90XzYpKSkgeworLSAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VM RihfX3B5eF90XzYpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKKy0gICAgICBQeU9i amVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKKy0gICAg ICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24p OworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7CistICAgIH0K Ky0gIH0KKy0gIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDY3MywgX19w eXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKysgIF9fcHl4X3RfNiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX0ZBVEFM KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM2LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKyAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2ZhdGFsLCBfX3B5eF90XzYpIDwgMCkgX19QWVhf RVJSKDAsIDEzNiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsg X19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9w dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3Nl dF9vcHRpb24sIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNjc0LCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgUHlUeXBl X01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2OTUKKy0gKiAgICAgICAgIHJl dHVybiBlcnIKKy0gKiAKKy0gKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKToKKy0gKiAgICAgICAgICIiIldyYXBz OiBtcHZfaW5pdGlhbGl6ZSIiIgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEzNworKyAqICAgICBubyA9IE1QVl9MT0dfTEVWRUxfTk9ORQorKyAqICAgICBmYXRhbCA9IE1Q Vl9MT0dfTEVWRUxfRkFUQUwKKysgKiAgICAgZXJyb3IgPSBNUFZfTE9HX0xFVkVMX0VSUk9SICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgd2FybiA9IE1QVl9MT0dfTEVWRUxf V0FSTgorKyAqICAgICBpbmZvID0gTVBWX0xPR19MRVZFTF9JTkZPCisgICovCistICBfX1B5eF9H ZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDY5NSwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19M RVZFTF9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEzNywg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19lcnJvciwgX19weXhfdF82KSA8 IDApIF9fUFlYX0VSUigwLCAxMzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Njk2CistICogCistICogICAgIEBfZXJyb3JzCistICogICAgIGRlZiBpbml0aWFs aXplKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJX cmFwczogbXB2X2luaXRpYWxpemUiIiIKKy0gKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzgKKysgKiAgICAgZmF0YWwgPSBN UFZfTE9HX0xFVkVMX0ZBVEFMCisrICogICAgIGVycm9yID0gTVBWX0xPR19MRVZFTF9FUlJPUgor KyAqICAgICB3YXJuID0gTVBWX0xPR19MRVZFTF9XQVJOICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKysgKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVWRUxfSU5GTworKyAqICAgICB2ID0gTVBW X0xPR19MRVZFTF9WCisgICovCistICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQ eU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5 eF9uX3NfaW5pdGlhbGl6ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAs IDY5NiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gIF9f cHl4X3RfMSA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5 KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CistICAgIF9fcHl4X3RfMSA9IFB5TWV0aG9k X0dFVF9TRUxGKF9fcHl4X3RfNik7CistICAgIGlmIChsaWtlbHkoX19weXhfdF8xKSkgeworLSAg ICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYp OworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworLSAgICAgIF9fUHl4X0lOQ1JFRihm dW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1bmN0aW9uKTsK Ky0gICAgfQorLSAgfQorLSAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVj dF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9i amVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBf X3B5eF90XzQgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwg Njk1LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgX19w eXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVsKE1QVl9MT0dfTEVW RUxfV0FSTik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEzOCwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgIGlmIChfX1B5eF9T ZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc193YXJuLCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDEzOCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilf X3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhf bl9zX2luaXRpYWxpemUsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNjk2LCBfX3B5eF9M MV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAg UHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDgKKy0gKiAgICAg ICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc3RhcnQoKQorLSAqIAorLSAqICAgICBAX2Vycm9ycyAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIGRlZiBvYnNlcnZlX3Byb3BlcnR5 KHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6CistICogICAgICAgICAiIiJXcmFwczogbXB2X29ic2Vy dmVfcHJvcGVydHkiIiIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzkK KysgKiAgICAgZXJyb3IgPSBNUFZfTE9HX0xFVkVMX0VSUk9SCisrICogICAgIHdhcm4gPSBNUFZf TE9HX0xFVkVMX1dBUk4KKysgKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVWRUxfSU5GTyAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHYgPSBNUFZfTE9HX0xFVkVMX1YKKysgKiAg ICAgZGVidWcgPSBNUFZfTE9HX0xFVkVMX0RFQlVHCisgICovCistICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDc0OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9JTkZP KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM5LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKyAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2luZm8sIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9F UlIoMCwgMTM5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0 OQorLSAqIAorLSAqICAgICBAX2Vycm9ycworLSAqICAgICBkZWYgb2JzZXJ2ZV9wcm9wZXJ0eShz ZWxmLCBwcm9wLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVydHkiIiIKKy0gKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDAK KysgKiAgICAgd2FybiA9IE1QVl9MT0dfTEVWRUxfV0FSTgorKyAqICAgICBpbmZvID0gTVBWX0xP R19MRVZFTF9JTkZPCisrICogICAgIHYgPSBNUFZfTE9HX0xFVkVMX1YgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorKyAqICAgICBkZWJ1ZyA9IE1QVl9MT0dfTEVWRUxfREVCVUcKKysgKiAg ICAgdHJhY2UgPSBNUFZfTE9HX0xFVkVMX1RSQUNFCisgICovCistICBfX1B5eF9HZXROYW1lSW5D bGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0LCBfX3B5eF9uX3Nfb2JzZXJ2ZV9wcm9wZXJ0eSk7IGlmICh1bmxpa2VseSgh X19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc0OSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9H T1RSRUYoX19weXhfdF80KTsKKy0gIF9fcHl4X3RfMSA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VO UEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7Cist ICAgIF9fcHl4X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CistICAgIGlmIChs aWtlbHkoX19weXhfdF8xKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9k X0dFVF9GVU5DVElPTihfX3B5eF90XzYpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEp OworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF90XzYsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAgX19weXhfdF83ID0gKF9f cHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEs IF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhf dF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9f UHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNzQ4LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dP VFJFRihfX3B5eF90XzcpOworKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfVik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDE0MCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc192 LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE0MCwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0 SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dC0+dHBfZGljdCwgX19weXhfbl9zX29ic2VydmVfcHJvcGVydHksIF9fcHl4X3RfNykgPCAwKSBf X1BZWF9FUlIoMCwgNzQ5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzcpOyBfX3B5eF90XzcgPSAwOworLSAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3NzAKKy0gKiAgICAgICAgIHJldHVybiBlcnIKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxNDEKKysgKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVWRUxfSU5G TworKyAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WCisrICogICAgIGRlYnVnID0gTVBWX0xPR19M RVZFTF9ERUJVRyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIHRyYWNlID0g TVBWX0xPR19MRVZFTF9UUkFDRQorICAqIAorLSAqICAgICBAX2Vycm9ycyAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CistICogICAgIGRlZiB1bm9ic2VydmVfcHJvcGVydHkoc2VsZiwgZGF0 YSk6CistICogICAgICAgICAiIiJXcmFwczogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSIiIgorICAq LworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJv cnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA3NzAsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xl dmVsKE1QVl9MT0dfTEVWRUxfREVCVUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCAxNDEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7 CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZGVidWcs IF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTQxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc3MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjE0MgorKyAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WCisrICogICAgIGRlYnVnID0g TVBWX0xPR19MRVZFTF9ERUJVRworKyAqICAgICB0cmFjZSA9IE1QVl9MT0dfTEVWRUxfVFJBQ0Ug ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorICAqIAorLSAqICAgICBAX2Vycm9y cworLSAqICAgICBkZWYgdW5vYnNlcnZlX3Byb3BlcnR5KHNlbGYsIGRhdGEpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAiIiJXcmFwczogbXB2X3Vub2JzZXJ2ZV9w cm9wZXJ0eSIiIgorLSAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqLworLSAgX19QeXhf R2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3Vub2JzZXJ2ZV9wcm9wZXJ0eSk7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc3MSwgX19weXhfTDFfZXJyb3Ip CistICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gIF9fcHl4X3RfMSA9IE5VTEw7CistICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfNikpKSB7CistICAgIF9fcHl4X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7 CistICAgIGlmIChsaWtlbHkoX19weXhfdF8xKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlv biA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYpOworLSAgICAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzEpOworLSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19Q eXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAgX19w eXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82 LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfNiwgX19weXhfdF80KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYg KHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNzcwLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfVFJBQ0UpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF83LCBfX3B5eF9uX3NfdHJhY2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTQyLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OworLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfdW5vYnNlcnZlX3Byb3Bl cnR5LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDc3MSwgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gIFB5VHlwZV9Nb2Rp ZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTM4CisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTM0CisgICogCistICogY2RlZiBjbGFzcyBSZW5kZXJDb250ZXh0 KG9iamVjdCk6CistICogICAgIEFQSV9PUEVOR0wgPSAib3BlbmdsIiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgIFVQREFURV9GUkFNRSA9IE1QVl9SRU5ERVJfVVBEQVRFX0ZS QU1FCisgICogCisrICogY2xhc3MgTG9nTGV2ZWxzOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisrICogICAgIG5vID0gTVBWX0xPR19MRVZFTF9OT05FCisrICogICAgIGZhdGFsID0gTVBW X0xPR19MRVZFTF9GQVRBTAorICAqLworLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAq KV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0 LCBfX3B5eF9uX3NfQVBJX09QRU5HTCwgX19weXhfbl9zX29wZW5nbCkgPCAwKSBfX1BZWF9FUlIo MCwgOTM4LCBfX3B5eF9MMV9lcnJvcikKKy0gIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCk7CisrICBfX3B5eF90XzYgPSBfX1B5 eF9QeTNDbGFzc0NyZWF0ZSgoKFB5T2JqZWN0KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9f cHl4X25fc19Mb2dMZXZlbHMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90XzcsIE5VTEwsIDAs IDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzQsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfZCwgX19weXhfbl9zX0xvZ0xldmVscywgX19weXhfdF82KSA8IDApIF9fUFlYX0VS UigwLCAxMzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9f cHl4X3RfNiA9IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzkKKy0gKiBjZGVmIGNs YXNzIFJlbmRlckNvbnRleHQob2JqZWN0KToKKy0gKiAgICAgQVBJX09QRU5HTCA9ICJvcGVuZ2wi CistICogICAgIFVQREFURV9GUkFNRSA9IE1QVl9SRU5ERVJfVVBEQVRFX0ZSQU1FICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxNDUKKysgKiAKKysgKiAKKysgKiBjbGFzcyBFT0ZSZWFzb25zOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisrICogICAgICIiIktub3duIHBvc3NpYmxlIHZhbHVlcyBmb3IgRW5kT2ZG aWxlUmVhY2hlZCByZWFzb24uCisgICogCistICogICAgIGNkZWY6CisgICovCistICBfX3B5eF90 XzcgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9yZW5kZXJfdXBkYXRlX2ZsYWcoTVBWX1JF TkRFUl9VUERBVEVfRlJBTUUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigw LCA5MzksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF83ID0gX19QeXhfUHkzTWV0YWNsYXNz UHJlcGFyZSgoUHlPYmplY3QgKikgTlVMTCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X25fc19F T0ZSZWFzb25zLCBfX3B5eF9uX3NfRU9GUmVhc29ucywgKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4 X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2twX3NfS25vd25fcG9zc2libGVfdmFsdWVz X2Zvcl9FbmRPZkYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxNDUs IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICBpZiAoUHlE aWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X1JlbmRlckNvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19VUERBVEVfRlJBTUUsIF9fcHl4X3Rf NykgPCAwKSBfX1BZWF9FUlIoMCwgOTM5LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KTsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDA5CistICogICAgICAgICBzZWxmLmluaXRlZCA9 IFRydWUKKy0gKiAKKy0gKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICBkZWYgc2V0X2ljY19wcm9maWxlKHNlbGYsIGljY19ibG9iKToKKy0gKiAgICAg ICAgIGNkZWY6CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTUwCisrICog ICAgIFlvdSBzaG91bGQgaGFuZGxlIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSByZWFzb24gbWF5 IG5vdCBiZSBhbnkgb2YgdGhlc2UgdmFsdWVzLgorKyAqICAgICAiIiIKKysgKiAgICAgZW9mID0g TVBWX0VORF9GSUxFX1JFQVNPTl9FT0YgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICBhYm9ydGVkID0gTVBWX0VORF9GSUxFX1JFQVNPTl9TVE9QCisrICogICAgIHF1aXQgPSBN UFZfRU5EX0ZJTEVfUkVBU09OX1FVSVQKKysgKi8KKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50 X0Zyb21fZW51bV9fbXB2X2VuZF9maWxlX3JlYXNvbihNUFZfRU5EX0ZJTEVfUkVBU09OX0VPRik7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE1MCwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5D bGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19lb2YsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIo MCwgMTUwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5 eF90XzYgPSAwOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE1MQor KyAqICAgICAiIiIKKysgKiAgICAgZW9mID0gTVBWX0VORF9GSUxFX1JFQVNPTl9FT0YKKysgKiAg ICAgYWJvcnRlZCA9IE1QVl9FTkRfRklMRV9SRUFTT05fU1RPUCAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgIHF1aXQgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX1FVSVQKKysgKiAg ICAgZXJyb3IgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX0VSUk9SCisgICovCistICBfX1B5eF9HZXRN b2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEwMDksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5kX2ZpbGVfcmVhc29uKE1QVl9F TkRfRklMRV9SRUFTT05fU1RPUCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDE1MSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysg IGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19hYm9ydGVkLCBf X3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE1MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDEwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTUyCisrICogICAgIGVvZiA9IE1QVl9FTkRfRklMRV9SRUFTT05fRU9GCisrICogICAg IGFib3J0ZWQgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX1NUT1AKKysgKiAgICAgcXVpdCA9IE1QVl9F TkRfRklMRV9SRUFTT05fUVVJVCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg IGVycm9yID0gTVBWX0VORF9GSUxFX1JFQVNPTl9FUlJPUgorICAqIAorLSAqICAgICBAX2Vycm9y cworLSAqICAgICBkZWYgc2V0X2ljY19wcm9maWxlKHNlbGYsIGljY19ibG9iKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgY2RlZjoKKy0gKiAgICAgICAgICAgICBt cHZfcmVuZGVyX3BhcmFtIHBhcmFtCisgICovCistICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5 eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5k ZXJDb250ZXh0LCBfX3B5eF9uX3Nfc2V0X2ljY19wcm9maWxlKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAxMCwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RS RUYoX19weXhfdF80KTsKKy0gIF9fcHl4X3RfMSA9IE5VTEw7CistICBpZiAoQ1lUSE9OX1VOUEFD S19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CistICAg IF9fcHl4X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CistICAgIGlmIChsaWtl bHkoX19weXhfdF8xKSkgeworLSAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dF VF9GVU5DVElPTihfX3B5eF90XzYpOworLSAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOwor LSAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgX19QeXhfREVDUkVGX1NFVChf X3B5eF90XzYsIGZ1bmN0aW9uKTsKKy0gICAgfQorLSAgfQorLSAgX19weXhfdF83ID0gKF9fcHl4 X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9f cHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80 KTsKKy0gIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzcpKSBfX1BZWF9FUlIoMCwgMTAwOSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RS RUYoX19weXhfdF83KTsKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2VuZF9maWxlX3JlYXNvbihNUFZfRU5EX0ZJTEVfUkVBU09OX1FVSVQpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf R09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83 LCBfX3B5eF9uX3NfcXVpdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxNTIsIF9fcHl4 X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cist ICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X1JlbmRlckNvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19zZXRfaWNjX3Byb2Zp bGUsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgMTAxMCwgX19weXhfTDFfZXJyb3IpCist ICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gIFB5VHlwZV9Nb2Rp ZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCk7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyOAorLSAqICAgICAgICAg cmV0dXJuIGVycgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE1MworKyAq ICAgICBhYm9ydGVkID0gTVBWX0VORF9GSUxFX1JFQVNPTl9TVE9QCisrICogICAgIHF1aXQgPSBN UFZfRU5EX0ZJTEVfUkVBU09OX1FVSVQKKysgKiAgICAgZXJyb3IgPSBNUFZfRU5EX0ZJTEVfUkVB U09OX0VSUk9SICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAKKyAgKiAKKy0gKiAg ICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBkZWYgc2V0 X2FtYmllbnRfbGlnaHQoc2VsZiwgbHV4KToKKy0gKiAgICAgICAgIGNkZWY6CisgICovCistICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEwMjgsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5kX2ZpbGVfcmVh c29uKE1QVl9FTkRfRklMRV9SRUFTT05fRVJST1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCAxNTMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNik7CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nf ZXJyb3IsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTUzLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxNDUKKysgKiAKKysgKiAKKysgKiBjbGFzcyBFT0ZSZWFzb25zOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICIiIktub3duIHBvc3NpYmxlIHZhbHVl cyBmb3IgRW5kT2ZGaWxlUmVhY2hlZCByZWFzb24uCisgICogCistICogICAgIEBfZXJyb3JzCist ICogICAgIGRlZiBzZXRfYW1iaWVudF9saWdodChzZWxmLCBsdXgpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CistICogICAgICAgICBjZGVmOgorLSAqICAgICAgICAgICAgIG1wdl9yZW5k ZXJfcGFyYW0gcGFyYW0KKyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwg KFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRl eHQsIF9fcHl4X25fc19zZXRfYW1iaWVudF9saWdodCk7IGlmICh1bmxpa2VseSghX19weXhfdF80 KSkgX19QWVhfRVJSKDAsIDEwMjksIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfNCk7CistICBfX3B5eF90XzEgPSBOVUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgeworLSAgICBfX3B5 eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOworLSAgICBpZiAobGlrZWx5KF9f cHl4X3RfMSkpIHsKKy0gICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVO Q1RJT04oX19weXhfdF82KTsKKy0gICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKy0gICAg ICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworLSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhf dF82LCBmdW5jdGlvbik7CistICAgIH0KKy0gIH0KKy0gIF9fcHl4X3RfNyA9IChfX3B5eF90XzEp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90 XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Cist ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX1B5eF9ERUNS RUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83 KSkgX19QWVhfRVJSKDAsIDEwMjgsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9f cHl4X3RfNyk7CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZSgoKFB5T2JqZWN0 KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19FT0ZSZWFzb25zLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfdF83LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzYpKSBfX1BZWF9FUlIoMCwgMTQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzYpOworKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19FT0ZS ZWFzb25zLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE0NSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURp Y3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3NldF9hbWJpZW50X2xpZ2h0LCBfX3B5 eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDEwMjksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICBQeVR5cGVfTW9kaWZpZWQoX19w eXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQpOworIAorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjgKKy0gKiAgICAgICAgIHJldHVybiBy ZXQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTgKKyAgKiAKKy0gKiAg ICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBkZWYgcmVu ZGVyKHNlbGYsCistICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLAorLSAqLworLSAg X19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDY4LCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLQorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwNjkKKyAgKiAKKy0gKiAgICAgQF9lcnJvcnMKKy0gKiAgICAgZGVm IHJlbmRlcihzZWxmLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICAg ICAgICAgb3BlbmdsX2Zibz1Ob25lLAorLSAqICAgICAgICAgICAgICAgIGZsaXBfeT1GYWxzZSwK KysgKiBkZWYgX2Vycm9ycyhmbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgorKyAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3KQor ICAqLworLSAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5 eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgX19weXhfbl9zX3Jl bmRlcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwNjksIF9fcHl4 X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBfX3B5eF90XzEgPSBO VUxMOworLSAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9D aGVjayhfX3B5eF90XzYpKSkgeworLSAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihf X3B5eF90XzYpOworLSAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKKy0gICAgICBQeU9iamVj dCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKKy0gICAgICBf X1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKy0gICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOwor LSAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7CistICAgIH0KKy0g IH0KKy0gIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdz KF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEwNjgsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3RXgoJl9fcHl4X21kZWZf OXZpZGN1dHRlcl80bGlic18zbXB2XzVfZXJyb3JzLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVy X2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzE4LCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgX19QeXhfREVD UkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CistICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5 T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQt PnRwX2RpY3QsIF9fcHl4X25fc19yZW5kZXIsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwg MTA2OSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19w eXhfbl9zX2Vycm9ycywgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCAzMTgsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICBQ eVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzIKKy0g KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXJhbXMsICphcmdzLCAqKmt3 YXJncykKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjYKKysgKiAKKysg KiAKKysgKiBjbGFzcyBNUFZFcnJvcihFeGNlcHRpb24pOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgIGNvZGUgPSBOb25lCisgICogCistICogY2xhc3MgQ2FsbGJhY2tUaHJl YWQoVGhyZWFkKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBkZWYgX19p bml0X18oc2VsZik6CistICogICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKyAgKi8KKy0g IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5eF9uX3NfVGhyZWFkKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJy b3IpCisrICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMCwgMzI2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOworLSAgX19weXhfdF82ID0gUHlUdXBsZV9OZXcoMSk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMzIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf SU5DUkVGKCgoUHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBd KSkpOworKyAgX19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlF eGNfRXhjZXB0aW9uKVswXSkpKTsKKysgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCAo KFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0aW9uKVswXSkpKTsKKysg IF9fcHl4X3RfNiA9IF9fUHl4X0NhbGN1bGF0ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90XzcpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAzMjYsIF9fcHl4X0wxX2Vycm9y KQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBfX1B5eF9HSVZFUkVGKF9fcHl4X3Rf Nyk7CistICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfNiwgMCwgX19weXhfdF83KTsKKy0gIF9f cHl4X3RfNyA9IDA7CistICBfX3B5eF90XzcgPSBfX1B5eF9DYWxjdWxhdGVNZXRhY2xhc3MoTlVM TCwgX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMTEz MiwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKy0gIF9fcHl4 X3RfNCA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoX19weXhfdF83LCBfX3B5eF90XzYsIF9f cHl4X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkLCAoUHlPYmpl Y3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5V TEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMTMyLCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoX19weXhf dF82LCBfX3B5eF90XzcsIF9fcHl4X25fc19NUFZFcnJvciwgX19weXhfbl9zX01QVkVycm9yLCAo UHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0 ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzMjYsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMworKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjMyNworICAqIAorLSAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6 CistICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorLSAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCistICogICAgICAgICBzZWxmLmRh ZW1vbiA9IFRydWUKKysgKiBjbGFzcyBNUFZFcnJvcihFeGNlcHRpb24pOgorKyAqICAgICBjb2Rl ID0gTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogCisrICogICAgIGRlZiBf X2luaXRfXyhzZWxmLCBlKToKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25f TmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzFf X2luaXRfXywgMCwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX19faW5pdCwgTlVMTCwgX19weXhf bl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVv YmpfXzM4KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMzMsIF9f cHl4X0wxX2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3NfaW5pdCwgX19weXhfdF8xKSA8IDAp IF9fUFlYX0VSUigwLCAxMTMzLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNCwgX19weXhfbl9zX2NvZGUsIFB5X05vbmUpIDwgMCkgX19QWVhfRVJSKDAsIDMyNywgX19w eXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0 MQorLSAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gRmFsc2UKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozMjkKKysgKiAgICAgY29kZSA9IE5vbmUKKyAgKiAKKy0gKiAg ICAgZGVmIHNodXRkb3duKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICog ICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlCistICogICAgICAgICBzZWxmLmNhbGxiYWNr ID0gTm9uZQorKyAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuY29kZSA9IGUKKysgKiAgICAgICAgIGNkZWYg Y29uc3QgY2hhciogZXJyX2MKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25f TmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzNz aHV0ZG93biwgMCwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX3NodXRkb3duLCBOVUxMLCBfX3B5 eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29k ZW9ial9fNDApKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0MSwg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19w eXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yXzFfX2luaXRfXywgMCwgX19w eXhfbl9zX01QVkVycm9yX19faW5pdCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21w diwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzI2KSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90 XzQsIF9fcHl4X25fc19zaHV0ZG93biwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTQx LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQs IF9fcHl4X25fc19pbml0LCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDMyOSwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ2CistICogICAgICAgICBz ZWxmLmxvY2sucmVsZWFzZSgpCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzI2CisgICogCistICogICAgIGRlZiBjYWxsKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CistICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisrICogCisrICogY2xhc3Mg TVBWRXJyb3IoRXhjZXB0aW9uKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAg ICBjb2RlID0gTm9uZQorICAqIAorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfQ3lGdW5jdGlv bl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRf NWNhbGwsIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9jYWxsLCBOVUxMLCBfX3B5eF9uX3Nf dmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9f NDIpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19weXhf TDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZShfX3B5eF90XzYs IF9fcHl4X25fc19NUFZFcnJvciwgX19weXhfdF83LCBfX3B5eF90XzQsIE5VTEwsIDAsIDEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMjYsIF9fcHl4X0wxX2Vycm9y KQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF80LCBfX3B5eF9uX3NfY2FsbCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigw LCAxMTQ2LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBf X3B5eF9uX3NfTVBWRXJyb3IsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMzI2LCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwor KyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90Xzcp OyBfX3B5eF90XzcgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExNDkKKy0gKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozNDAKKysgKiAgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhz ZWxmLCBlKQorICAqIAorLSAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxiYWNrKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNr CisrICogY2xhc3MgUHlNUFZFcnJvcihFeGNlcHRpb24pOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgIHBhc3MKKyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5 RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNr VGhyZWFkXzdzZXQsIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9zZXQsIE5VTEwsIF9fcHl4 X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rl b2JqX180NCkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTQ5LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNyA9IFB5VHVwbGVfTmV3KDEpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAzNDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKSgmKChQ eVR5cGVPYmplY3QqKVB5RXhjX0V4Y2VwdGlvbilbMF0pKSk7CisrICBfX1B5eF9HSVZFUkVGKCgo UHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOworKyAg UHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDAsICgoUHlPYmplY3QgKikoJigoUHlUeXBlT2Jq ZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOworKyAgX19weXhfdF82ID0gX19QeXhfQ2FsY3Vs YXRlTWV0YWNsYXNzKE5VTEwsIF9fcHl4X3RfNyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoX19weXhfdF82 LCBfX3B5eF90XzcsIF9fcHl4X25fc19QeU1QVkVycm9yLCBfX3B5eF9uX3NfUHlNUFZFcnJvciwg KFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIChQeU9iamVj dCAqKSBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzQwLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgX19weXhfdF8x ID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoX19weXhfdF82LCBfX3B5eF9uX3NfUHlNUFZFcnJvciwg X19weXhfdF83LCBfX3B5eF90XzQsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAzNDAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9u X3Nfc2V0LCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9y KQorKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19QeU1QVkVycm9yLCBf X3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4 X3RfNiA9IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTUyCistICogICAgICAgICBz ZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozNDMKKysgKiAgICAgcGFzcworICAqIAorLSAqICAgICBkZWYgcnVuKHNlbGYpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3No dXRkb3duOgorLSAqICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCisrICogY2Rl ZiBfY2FsbGJhY2tzID0gZGljdCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiBj ZGVmIF9yZXBseV91c2VyZGF0YXMgPSBkaWN0KCkKKysgKiAKKysgKi8KKysgIF9fcHl4X3RfNyA9 IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBf X1BZWF9FUlIoMCwgMzQzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzcpOworKyAgX19QeXhfWEdPVFJFRihfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY2Fs bGJhY2tzKTsKKysgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX2NhbGxiYWNrcywgX19weXhfdF83KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhfdF83KTsK KysgIF9fcHl4X3RfNyA9IDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzQ0CisrICogCisrICogY2RlZiBfY2FsbGJhY2tzID0gZGljdCgpCisrICogY2RlZiBfcmVw bHlfdXNlcmRhdGFzID0gZGljdCgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAK KysgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOgorKyAqLworKyAgX19weXhfdF83ID0g X19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9f UFlYX0VSUigwLCAzNDQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nyk7CisrICBfX1B5eF9YR09UUkVGKF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19yZXBs eV91c2VyZGF0YXMpOworKyAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF90XzcpOworKyAgX19QeXhfR0lWRVJFRihf X3B5eF90XzcpOworKyAgX19weXhfdF83ID0gMDsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozNDYKKysgKiBjZGVmIF9yZXBseV91c2VyZGF0YXMgPSBkaWN0KCkKKysg KiAKKysgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisrICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKKysgKiAgICAgICAg IHNlbGYuY291bnRlciA9IDAKKysgKi8KKysgIF9fcHl4X3RfNyA9IF9fUHl4X0NhbGN1bGF0ZU1l dGFjbGFzcyhOVUxMLCBfX3B5eF90dXBsZV9fMjcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykp IF9fUFlYX0VSUigwLCAzNDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNyk7CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeTNNZXRhY2xhc3NQcmVwYXJlKF9fcHl4X3Rf NywgX19weXhfdHVwbGVfXzI3LCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSwgX19weXhfbl9zX1Jl cGx5VXNlckRhdGEsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNf bXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK KysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDcKKysgKiAKKysgKiBj bGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOgorKyAqICAgICBkZWYgX19pbml0X18oc2VsZiwg ZGF0YSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHNlbGYuY291 bnRlciA9IDAKKysgKiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKyAgKi8KKy0gIF9fcHl4X3Rf MSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNENhbGxiYWNrVGhyZWFkXzlydW4sIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9ydW4s IE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3Qg KilfX3B5eF9jb2Rlb2JqX180NikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAxMTUyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX3J1biwgX19w eXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTUyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19weXhfdF80ID0gX19QeXhf Q3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5 VXNlckRhdGFfMV9faW5pdF9fLCAwLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YV9fX2luaXQsIE5V TEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilf X3B5eF9jb2Rlb2JqX18yOSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigw LCAzNDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF82LCBfX3B5eF9uX3NfaW5pdCwgX19weXhf dF80KSA8IDApIF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTE1NworLSAqICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNrKHNl bGYuY2FsbGJhY2spIGlmIHNlbGYuY2FsbGJhY2sgZWxzZSBOb25lCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzUyCisrICogICAgICAgICBzZWxmLm9ic2VydmVkID0gRmFs c2UKKysgKiAKKysgKiAgICAgZGVmIGFkZChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorKyAqICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKKyAgKiAKKy0gKiAgICAgZGVmIG1w dl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK Ky0gKiAgICAgICAgIHRyeToKKy0gKiAgICAgICAgICAgICBjYWxsYmFjaygpCisgICovCistICBf X3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xMW1wdl9jYWxsYmFjaywgMCwgX19weXhfbl9zX0Nh bGxiYWNrVGhyZWFkX21wdl9jYWxsYmFjaywgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJz X21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzQ4KSk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNTcsIF9fcHl4X0wxX2Vycm9yKQorLSAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19w eXhfdF80LCBfX3B5eF9uX3NfbXB2X2NhbGxiYWNrLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJS KDAsIDExNTcsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7CisrICBfX3B5eF90XzQgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhf bWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV8zYWRkLCAwLCBfX3B5 eF9uX3NfUmVwbHlVc2VyRGF0YV9hZGQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19t cHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18zMSkpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF82LCBfX3B5eF9uX3NfYWRkLCBfX3B5eF90XzQpIDwgMCkgX19QWVhfRVJSKDAsIDM1MiwgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTMyCistICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfcGFyYW1zLCAqYXJncywgKiprd2FyZ3MpCisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzU1CisrICogICAgICAgICBzZWxm LmNvdW50ZXIgKz0gMQorKyAqIAorKyAqICAgICBkZWYgcmVtb3ZlKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICBzZWxmLmNvdW50ZXIgLT0gMQorICAqIAor LSAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKy0gKiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorLSAqICAgICAgICAgVGhyZWFkLl9f aW5pdF9fKHNlbGYpCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZShf X3B5eF90XzcsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfdF82LCBfX3B5eF90XzQs IE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTMy LCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgaWYgKFB5 RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfdF8x KSA8IDApIF9fUFlYX0VSUigwLCAxMTMyLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19weXhfdF80ID0gX19QeXhfQ3lGdW5j dGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRh dGFfNXJlbW92ZSwgMCwgX19weXhfbl9zX1JlcGx5VXNlckRhdGFfcmVtb3ZlLCBOVUxMLCBfX3B5 eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29k ZW9ial9fMzMpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzU1LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNiwgX19weXhfbl9zX3JlbW92ZSwgX19weXhfdF80KSA8 IDApIF9fUFlYX0VSUigwLCAzNTUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9f cHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19w eXhfdF83ID0gMDsKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOwor IAorLSAgLyogIih0cmVlIGZyYWdtZW50KSI6MQorLSAqIGRlZiBfX3B5eF91bnBpY2tsZV9FbmRP ZkZpbGVSZWFjaGVkKF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0YXRl KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5 eF9QaWNrbGVFcnJvcgorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDYKKysgKiBjZGVmIF9yZXBseV91c2VyZGF0 YXMgPSBkaWN0KCkKKysgKiAKKysgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRh KToKKysgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IFB5 Q0Z1bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X19weXhf dW5waWNrbGVfRW5kT2ZGaWxlUmVhY2hlZCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJz X21wdik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wx X2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfZCwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF80 ID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoX19weXhfdF83LCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0 YSwgX19weXhfdHVwbGVfXzI3LCBfX3B5eF90XzYsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf R09UUkVGKF9fcHl4X3RfNCk7CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhf bl9zX1JlcGx5VXNlckRhdGEsIF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwor ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICBfX1B5eF9ERUNS RUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICIodHJlZSBmcmFnbWVudCki OjExCistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3Rh dGUoPEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCistICogICAg IHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJl YWNoZWRfX3NldF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19w eXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIF9fcHl4X3Jl c3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0gX19weXhf c3RhdGVbMV0KKy0gKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19w eXhfcmVzdWx0LCAnX19kaWN0X18nKToKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0MTEKKysgKiAgICAgIyAgICAgICAgIG1wdl9yZXN1bWUoc2VsZi5fY3R4KQorKyAqIAor KyAqICAgICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGRl ZiByZXF1ZXN0X2V2ZW50KHNlbGYsIGV2ZW50LCBlbmFibGUpOgorKyAqICAgICAgICAgIiIiRW5h YmxlIG9yIGRpc2FibGUgYSBnaXZlbiBldmVudC4KKyAgKi8KKy0gIF9fcHl4X3RfNiA9IFB5Q0Z1 bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl85X19weXhfdW5w aWNrbGVfSW5wdXREaXNwYXRjaCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJv cnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0MTEsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfZCwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9JbnB1dERpc3BhdGNoLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjox CistICogZGVmIF9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UoX19weXhfdHlwZSwgbG9uZyBfX3B5 eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cist ICogICAgIGNkZWYgb2JqZWN0IF9fcHl4X1BpY2tsZUVycm9yCistICogICAgIGNkZWYgb2JqZWN0 IF9fcHl4X3Jlc3VsdAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQxMgor KyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgcmVxdWVzdF9ldmVudChzZWxmLCBl dmVudCwgZW5hYmxlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAg IiIiRW5hYmxlIG9yIGRpc2FibGUgYSBnaXZlbiBldmVudC4KKysgKiAKKyAgKi8KKy0gIF9fcHl4 X3RfNiA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMV9fcHl4X3VucGlja2xlX0xvZ01lc3NhZ2UsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJf bGlic19tcHYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxLCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKFB5RGljdF9T ZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19weXhfdW5waWNrbGVfTG9nTWVzc2FnZSwgX19weXhf dF82KSA8IDApIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE5h bWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19yZXF1ZXN0X2V2ZW50KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzQpOworKyAgX19weXhfdF8xID0gTlVMTDsKKysgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsK KysgICAgX19weXhfdF8xID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82KTsKKysgICAgaWYg KGxpa2VseShfX3B5eF90XzEpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRo b2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3Rf MSk7CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOworKyAgICB9CisrICB9CisrICBfX3B5eF90XzcgPSAo X19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3Rf MSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5 eF90XzQpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAg X19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBpZiAodW5saWtlbHko IV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA0MTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhf R09UUkVGKF9fcHl4X3RfNyk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKysgIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3JlcXVlc3RfZXZl bnQsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgUHlUeXBlX01vZGlm aWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKyAKKy0gIC8q ICIodHJlZSBmcmFnbWVudCkiOjExCistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9Mb2dNZXNz YWdlX19zZXRfc3RhdGUoPExvZ01lc3NhZ2U+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCist ICogICAgIHJldHVybiBfX3B5eF9yZXN1bHQKKy0gKiBjZGVmIF9fcHl4X3VucGlja2xlX0xvZ01l c3NhZ2VfX3NldF9zdGF0ZShMb2dNZXNzYWdlIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19weXhfc3Rh dGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CistICogICAgIF9fcHl4X3Jlc3VsdC5s ZXZlbCA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQubG9nX2xldmVsID0gX19weXhfc3Rh dGVbMV07IF9fcHl4X3Jlc3VsdC5wcmVmaXggPSBfX3B5eF9zdGF0ZVsyXTsgX19weXhfcmVzdWx0 LnRleHQgPSBfX3B5eF9zdGF0ZVszXQorLSAqICAgICBpZiBsZW4oX19weXhfc3RhdGUpID4gNCBh bmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQyOQorKyAqICAgICAgICAgcmV0dXJuIGVycgorKyAqIAorKyAq ICAgICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGRlZiBz ZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVsKToKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZf cmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IFB5Q0Z1bmN0aW9u X05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19fcHl4X3VucGlja2xl X1Byb3BlcnR5LCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5 eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQyOSwgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9k LCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX1Byb3BlcnR5LCBfX3B5eF90XzYpIDwgMCkgX19QWVhf RVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9f cHl4X3RfNiA9IDA7CisgCistICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCistICogZGVmIF9fcHl4 X3VucGlja2xlX0V2ZW50KF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0 YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorLSAqICAgICBjZGVmIG9iamVjdCBf X3B5eF9QaWNrbGVFcnJvcgorLSAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzAKKysgKiAKKysgKiAgICAgQF9lcnJv cnMKKysgKiAgICAgZGVmIHNldF9sb2dfbGV2ZWwoc2VsZiwgbG9nbGV2ZWwpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJXcmFwczogbXB2X3JlcXVlc3RfbG9n X21lc3NhZ2VzIiIiCisrICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICovCistICBfX3B5 eF90XzYgPSBQeUNGdW5jdGlvbl9OZXdFeCgmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTVfX3B5eF91bnBpY2tsZV9FdmVudCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJz X21wdik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wx X2Vycm9yKQorLSAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfZCwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9FdmVudCwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE5hbWVJbkNsYXNz KF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQsIF9fcHl4X25fc19zZXRfbG9nX2xldmVsKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzQpKSBfX1BZWF9FUlIoMCwgNDMwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOworKyAgX19weXhfdF8xID0gTlVMTDsKKysgIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsKKysgICAgX19w eXhfdF8xID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82KTsKKysgICAgaWYgKGxpa2VseShf X3B5eF90XzEpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZV TkNUSU9OKF9fcHl4X3RfNik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7CisrICAg ICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4 X3RfNiwgZnVuY3Rpb24pOworKyAgICB9CisrICB9CisrICBfX3B5eF90XzcgPSAoX19weXhfdF8x KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhf dF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQpOwor KyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NykpIF9fUFlYX0VSUigwLCA0MjksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9f cHl4X3RfNyk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysg IGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3NldF9sb2dfbGV2ZWwsIF9fcHl4 X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNDMwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgUHlUeXBlX01vZGlmaWVkKF9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKyAKKy0gIC8qICIodHJlZSBm cmFnbWVudCkiOjExCistICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FdmVudF9fc2V0X3N0YXRl KDxFdmVudD4gX19weXhfcmVzdWx0LCBfX3B5eF9zdGF0ZSkKKy0gKiAgICAgcmV0dXJuIF9fcHl4 X3Jlc3VsdAorLSAqIGNkZWYgX19weXhfdW5waWNrbGVfRXZlbnRfX3NldF9zdGF0ZShFdmVudCBf X3B5eF9yZXN1bHQsIHR1cGxlIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqICAgICBfX3B5eF9yZXN1bHQuZGF0YSA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9y ZXN1bHQuZXJyb3IgPSBfX3B5eF9zdGF0ZVsxXTsgX19weXhfcmVzdWx0LmlkID0gX19weXhfc3Rh dGVbMl07IF9fcHl4X3Jlc3VsdC5yZXBseV91c2VyZGF0YSA9IF9fcHl4X3N0YXRlWzNdCistICog ICAgIGlmIGxlbihfX3B5eF9zdGF0ZSkgPiA0IGFuZCBoYXNhdHRyKF9fcHl4X3Jlc3VsdCwgJ19f ZGljdF9fJyk6CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQwCisrICog ICAgICAgICByZXR1cm4gZXJyCisrICogCisrICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZGVmIGxvYWRfY29uZmlnKHNlbGYsIGZpbGVuYW1lKToK KysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfbG9hZF9jb25maWdfZmlsZSIiIgorICAqLworLSAg X19weXhfdF82ID0gUHlDRnVuY3Rpb25fTmV3RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGli c18zbXB2XzE3X19weXhfdW5waWNrbGVfUmVuZGVyRnJhbWVJbmZvLCBOVUxMLCBfX3B5eF9uX3Nf dmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MSwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4 X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDQ0MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK Ky0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX1Jl bmRlckZyYW1lSW5mbywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigxLCAxLCBfX3B5eF9MMV9l cnJvcikKKy0gIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEKKy0gKiAjIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKy0gKiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICogIyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0MQorKyAqIAorKyAq ICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgbG9hZF9jb25maWcoc2VsZiwgZmlsZW5hbWUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJXcmFwczogbXB2X2xv YWRfY29uZmlnX2ZpbGUiIiIKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKi8KKy0g IF9fcHl4X3RfNiA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCistICBfX1B5eF9HT1RS RUYoX19weXhfdF82KTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3Nf dGVzdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcikKKy0g IF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLQorLSAgLyotLS0gV3Jh cHBlZCB2YXJzIGNvZGUgLS0tKi8KKy0KKy0gIGdvdG8gX19weXhfTDA7CistICBfX3B5eF9MMV9l cnJvcjo7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7CistICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfNik7CistICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7CistICBpZiAoX19weXhf bSkgeworLSAgICBpZiAoX19weXhfZCkgeworLSAgICAgIF9fUHl4X0FkZFRyYWNlYmFjaygiaW5p dCB2aWRjdXR0ZXIubGlicy5tcHYiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4 X2ZpbGVuYW1lKTsKKy0gICAgfQorLSAgICBQeV9DTEVBUihfX3B5eF9tKTsKKy0gIH0gZWxzZSBp ZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKKy0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9y dEVycm9yLCAiaW5pdCB2aWRjdXR0ZXIubGlicy5tcHYiKTsKKy0gIH0KKy0gIF9fcHl4X0wwOjsK Ky0gIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworLSAgI2lmIENZVEhPTl9QRVA0ODlf TVVMVElfUEhBU0VfSU5JVAorLSAgcmV0dXJuIChfX3B5eF9tICE9IE5VTEwpID8gMCA6IC0xOwor LSAgI2VsaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICByZXR1cm4gX19weXhfbTsKKy0gICNl bHNlCistICByZXR1cm47CistICAjZW5kaWYKKy19CistCistLyogLS0tIFJ1bnRpbWUgc3VwcG9y dCBjb2RlIC0tLSAqLworLS8qIFJlZm5hbm55ICovCistI2lmIENZVEhPTl9SRUZOQU5OWQorLXN0 YXRpYyBfX1B5eF9SZWZOYW5ueUFQSVN0cnVjdCAqX19QeXhfUmVmTmFubnlJbXBvcnRBUEkoY29u c3QgY2hhciAqbW9kbmFtZSkgeworLSAgICBQeU9iamVjdCAqbSA9IE5VTEwsICpwID0gTlVMTDsK Ky0gICAgdm9pZCAqciA9IE5VTEw7CistICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUobW9k bmFtZSk7CistICAgIGlmICghbSkgZ290byBlbmQ7CistICAgIHAgPSBQeU9iamVjdF9HZXRBdHRy U3RyaW5nKG0sICJSZWZOYW5ueUFQSSIpOworLSAgICBpZiAoIXApIGdvdG8gZW5kOworLSAgICBy ID0gUHlMb25nX0FzVm9pZFB0cihwKTsKKy1lbmQ6CistICAgIFB5X1hERUNSRUYocCk7CistICAg IFB5X1hERUNSRUYobSk7CistICAgIHJldHVybiAoX19QeXhfUmVmTmFubnlBUElTdHJ1Y3QgKily OworLX0KKy0jZW5kaWYKKy0KKy0vKiBQeU9iamVjdEdldEF0dHJTdHIgKi8KKy0jaWYgQ1lUSE9O X1VTRV9UWVBFX1NMT1RTCistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5 T2JqZWN0X0dldEF0dHJTdHIoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqIGF0dHJfbmFtZSkgewor LSAgICBQeVR5cGVPYmplY3QqIHRwID0gUHlfVFlQRShvYmopOworLSAgICBpZiAobGlrZWx5KHRw LT50cF9nZXRhdHRybykpCistICAgICAgICByZXR1cm4gdHAtPnRwX2dldGF0dHJvKG9iaiwgYXR0 cl9uYW1lKTsKKy0jaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKy0gICAgaWYgKGxpa2VseSh0cC0+ dHBfZ2V0YXR0cikpCistICAgICAgICByZXR1cm4gdHAtPnRwX2dldGF0dHIob2JqLCBQeVN0cmlu Z19BU19TVFJJTkcoYXR0cl9uYW1lKSk7CistI2VuZGlmCistICAgIHJldHVybiBQeU9iamVjdF9H ZXRBdHRyKG9iaiwgYXR0cl9uYW1lKTsKKy19CistI2VuZGlmCistCistLyogR2V0QnVpbHRpbk5h bWUgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fUHl4X0dldEJ1aWx0aW5OYW1lKFB5T2JqZWN0ICpu YW1lKSB7CistICAgIFB5T2JqZWN0KiByZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KF9fcHl4X2IsIG5hbWUpOworLSAgICBpZiAodW5saWtlbHkoIXJlc3VsdCkpIHsKKy0gICAgICAg IFB5RXJyX0Zvcm1hdChQeUV4Y19OYW1lRXJyb3IsCistI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0g MworLSAgICAgICAgICAgICJuYW1lICclVScgaXMgbm90IGRlZmluZWQiLCBuYW1lKTsKKy0jZWxz ZQorLSAgICAgICAgICAgICJuYW1lICclLjIwMHMnIGlzIG5vdCBkZWZpbmVkIiwgUHlTdHJpbmdf QVNfU1RSSU5HKG5hbWUpKTsKKy0jZW5kaWYKKysgIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRl eHQsIF9fcHl4X25fc19sb2FkX2NvbmZpZyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDAsIDQ0MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKysgIF9fcHl4X3RfMSA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CisrICAgIF9fcHl4X3RfMSA9 IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CisrICAgIGlmIChsaWtlbHkoX19weXhfdF8x KSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihf X3B5eF90XzYpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1 bmN0aW9uKTsKKyAgICAgfQorLSAgICByZXR1cm4gcmVzdWx0OworLX0KKysgIH0KKysgIF9fcHl4 X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwg X19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90 XzYsIF9fcHl4X3RfNCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9 IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgIGlmICh1 bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ0MCwgX19weXhfTDFfZXJyb3IpCisr ICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOworKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfbG9h ZF9jb25maWcsIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNDQxLCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgUHlUeXBl X01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKyAK Ky0vKiBQeURpY3RWZXJzaW9uaW5nICovCistI2lmIENZVEhPTl9VU0VfRElDVF9WRVJTSU9OUyAm JiBDWVRIT05fVVNFX1RZUEVfU0xPVFMKKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQWV9VSU5UNjRf VCBfX1B5eF9nZXRfdHBfZGljdF92ZXJzaW9uKFB5T2JqZWN0ICpvYmopIHsKKy0gICAgUHlPYmpl Y3QgKmRpY3QgPSBQeV9UWVBFKG9iaiktPnRwX2RpY3Q7CistICAgIHJldHVybiBsaWtlbHkoZGlj dCkgPyBfX1BZWF9HRVRfRElDVF9WRVJTSU9OKGRpY3QpIDogMDsKKy19Cistc3RhdGljIENZVEhP Tl9JTkxJTkUgUFlfVUlOVDY0X1QgX19QeXhfZ2V0X29iamVjdF9kaWN0X3ZlcnNpb24oUHlPYmpl Y3QgKm9iaikgeworLSAgICBQeU9iamVjdCAqKmRpY3RwdHIgPSBOVUxMOworLSAgICBQeV9zc2l6 ZV90IG9mZnNldCA9IFB5X1RZUEUob2JqKS0+dHBfZGljdG9mZnNldDsKKy0gICAgaWYgKG9mZnNl dCkgeworLSNpZiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRIT04KKy0gICAgICAgIGRpY3RwdHIg PSAobGlrZWx5KG9mZnNldCA+IDApKSA/IChQeU9iamVjdCAqKikgKChjaGFyICopb2JqICsgb2Zm c2V0KSA6IF9QeU9iamVjdF9HZXREaWN0UHRyKG9iaik7CistI2Vsc2UKKy0gICAgICAgIGRpY3Rw dHIgPSBfUHlPYmplY3RfR2V0RGljdFB0cihvYmopOworLSNlbmRpZgorLSAgICB9CistICAgIHJl dHVybiAoZGljdHB0ciAmJiAqZGljdHB0cikgPyBfX1BZWF9HRVRfRElDVF9WRVJTSU9OKCpkaWN0 cHRyKSA6IDA7CistfQorLXN0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9vYmplY3RfZGlj dF92ZXJzaW9uX21hdGNoZXMoUHlPYmplY3QqIG9iaiwgUFlfVUlOVDY0X1QgdHBfZGljdF92ZXJz aW9uLCBQWV9VSU5UNjRfVCBvYmpfZGljdF92ZXJzaW9uKSB7CistICAgIFB5T2JqZWN0ICpkaWN0 ID0gUHlfVFlQRShvYmopLT50cF9kaWN0OworLSAgICBpZiAodW5saWtlbHkoIWRpY3QpIHx8IHVu bGlrZWx5KHRwX2RpY3RfdmVyc2lvbiAhPSBfX1BZWF9HRVRfRElDVF9WRVJTSU9OKGRpY3QpKSkK Ky0gICAgICAgIHJldHVybiAwOworLSAgICByZXR1cm4gb2JqX2RpY3RfdmVyc2lvbiA9PSBfX1B5 eF9nZXRfb2JqZWN0X2RpY3RfdmVyc2lvbihvYmopOworLX0KKy0jZW5kaWYKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzMKKysgKiAgICAgICAgIHJldHVybiByZXN1bHQK KysgKiAKKysgKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICBkZWYgZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6CisrICog ICAgICAgICAiIiJHZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGFzeW5jaHJvbm91c2x5Lgor KyAqLworKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19l cnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA1NzMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisgCistLyogR2V0TW9kdWxl R2xvYmFsTmFtZSAqLworLSNpZiBDWVRIT05fVVNFX0RJQ1RfVkVSU0lPTlMKKy1zdGF0aWMgUHlP YmplY3QgKl9fUHl4X19HZXRNb2R1bGVHbG9iYWxOYW1lKFB5T2JqZWN0ICpuYW1lLCBQWV9VSU5U NjRfVCAqZGljdF92ZXJzaW9uLCBQeU9iamVjdCAqKmRpY3RfY2FjaGVkX3ZhbHVlKQorLSNlbHNl Cistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9fUHl4X19HZXRNb2R1bGVHbG9iYWxO YW1lKFB5T2JqZWN0ICpuYW1lKQorLSNlbmRpZgorLXsKKy0gICAgUHlPYmplY3QgKnJlc3VsdDsK Ky0jaWYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCistI2lmIENZVEhPTl9DT01QSUxJTkdf SU5fQ1BZVEhPTiAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDUwMEExCistICAgIHJlc3VsdCA9 IF9QeURpY3RfR2V0SXRlbV9Lbm93bkhhc2goX19weXhfZCwgbmFtZSwgKChQeUFTQ0lJT2JqZWN0 ICopIG5hbWUpLT5oYXNoKTsKKy0gICAgX19QWVhfVVBEQVRFX0RJQ1RfQ0FDSEUoX19weXhfZCwg cmVzdWx0LCAqZGljdF9jYWNoZWRfdmFsdWUsICpkaWN0X3ZlcnNpb24pCistICAgIGlmIChsaWtl bHkocmVzdWx0KSkgeworLSAgICAgICAgcmV0dXJuIF9fUHl4X05ld1JlZihyZXN1bHQpOworLSAg ICB9IGVsc2UgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSB7CistICAgICAgICByZXR1 cm4gTlVMTDsKKy0gICAgfQorLSNlbHNlCistICAgIHJlc3VsdCA9IFB5RGljdF9HZXRJdGVtKF9f cHl4X2QsIG5hbWUpOworLSAgICBfX1BZWF9VUERBVEVfRElDVF9DQUNIRShfX3B5eF9kLCByZXN1 bHQsICpkaWN0X2NhY2hlZF92YWx1ZSwgKmRpY3RfdmVyc2lvbikKKy0gICAgaWYgKGxpa2VseShy ZXN1bHQpKSB7CistICAgICAgICByZXR1cm4gX19QeXhfTmV3UmVmKHJlc3VsdCk7CistICAgIH0K Ky0jZW5kaWYKKy0jZWxzZQorLSAgICByZXN1bHQgPSBQeU9iamVjdF9HZXRJdGVtKF9fcHl4X2Qs IG5hbWUpOworLSAgICBfX1BZWF9VUERBVEVfRElDVF9DQUNIRShfX3B5eF9kLCByZXN1bHQsICpk aWN0X2NhY2hlZF92YWx1ZSwgKmRpY3RfdmVyc2lvbikKKy0gICAgaWYgKGxpa2VseShyZXN1bHQp KSB7CistICAgICAgICByZXR1cm4gX19QeXhfTmV3UmVmKHJlc3VsdCk7CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTc0CisrICogCisrICogICAgIEBfZXJyb3JzCisrICog ICAgIGRlZiBnZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgIiIiR2V0cyB0aGUgdmFsdWUgb2Yg YSBwcm9wZXJ0eSBhc3luY2hyb25vdXNseS4KKysgKiAKKysgKi8KKysgIF9fUHl4X0dldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19nZXRfcHJvcGVydHlfYXN5bmMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNCk7CisrICBfX3B5eF90XzEgPSBOVUxMOworKyAgaWYgKENZVEhP Tl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkg eworKyAgICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOworKyAgICBp ZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1l dGhvZF9HRVRfRlVOQ1RJT04oX19weXhfdF82KTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhf dF8xKTsKKysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JF Rl9TRVQoX19weXhfdF82LCBmdW5jdGlvbik7CisgICAgIH0KKy0gICAgUHlFcnJfQ2xlYXIoKTsK Ky0jZW5kaWYKKy0gICAgcmV0dXJuIF9fUHl4X0dldEJ1aWx0aW5OYW1lKG5hbWUpOworLX0KKysg IH0KKysgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdz KF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDU3MywgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKysgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVj dCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBf X3B5eF9uX3NfZ2V0X3Byb3BlcnR5X2FzeW5jLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAs IDU3NCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhf dF83ID0gMDsKKysgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCk7CisgCistLyogUHlGdW5jdGlvbkZhc3RDYWxsICovCistI2lmIENZVEhP Tl9GQVNUX1BZQ0FMTAorLXN0YXRpYyBQeU9iamVjdCogX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2Fs bE5vS3coUHlDb2RlT2JqZWN0ICpjbywgUHlPYmplY3QgKiphcmdzLCBQeV9zc2l6ZV90IG5hLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3Qg Kmdsb2JhbHMpIHsKKy0gICAgUHlGcmFtZU9iamVjdCAqZjsKKy0gICAgUHlUaHJlYWRTdGF0ZSAq dHN0YXRlID0gX19QeXhfUHlUaHJlYWRTdGF0ZV9DdXJyZW50OworLSAgICBQeU9iamVjdCAqKmZh c3Rsb2NhbHM7CistICAgIFB5X3NzaXplX3QgaTsKKy0gICAgUHlPYmplY3QgKnJlc3VsdDsKKy0g ICAgYXNzZXJ0KGdsb2JhbHMgIT0gTlVMTCk7CistICAgIC8qIFhYWCBQZXJoYXBzIHdlIHNob3Vs ZCBjcmVhdGUgYSBzcGVjaWFsaXplZAorLSAgICAgICBQeUZyYW1lX05ldygpIHRoYXQgZG9lc24n dCB0YWtlIGxvY2FscywgYnV0IGRvZXMKKy0gICAgICAgdGFrZSBidWlsdGlucyB3aXRob3V0IHNh bml0eSBjaGVja2luZyB0aGVtLgorLSAgICAgICAqLworLSAgICBhc3NlcnQodHN0YXRlICE9IE5V TEwpOworLSAgICBmID0gUHlGcmFtZV9OZXcodHN0YXRlLCBjbywgZ2xvYmFscywgTlVMTCk7Cist ICAgIGlmIChmID09IE5VTEwpIHsKKy0gICAgICAgIHJldHVybiBOVUxMOworLSAgICB9CistICAg IGZhc3Rsb2NhbHMgPSBfX1B5eF9QeUZyYW1lX0dldExvY2Fsc3BsdXMoZik7CistICAgIGZvciAo aSA9IDA7IGkgPCBuYTsgaSsrKSB7CistICAgICAgICBQeV9JTkNSRUYoKmFyZ3MpOworLSAgICAg ICAgZmFzdGxvY2Fsc1tpXSA9ICphcmdzKys7CistICAgIH0KKy0gICAgcmVzdWx0ID0gUHlFdmFs X0V2YWxGcmFtZUV4KGYsMCk7CistICAgICsrdHN0YXRlLT5yZWN1cnNpb25fZGVwdGg7CistICAg IFB5X0RFQ1JFRihmKTsKKy0gICAgLS10c3RhdGUtPnJlY3Vyc2lvbl9kZXB0aDsKKy0gICAgcmV0 dXJuIHJlc3VsdDsKKy19CistI2lmIDEgfHwgUFlfVkVSU0lPTl9IRVggPCAweDAzMDYwMEIxCist c3RhdGljIFB5T2JqZWN0ICpfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsRGljdChQeU9iamVjdCAq ZnVuYywgUHlPYmplY3QgKiphcmdzLCBQeV9zc2l6ZV90IG5hcmdzLCBQeU9iamVjdCAqa3dhcmdz KSB7CistICAgIFB5Q29kZU9iamVjdCAqY28gPSAoUHlDb2RlT2JqZWN0ICopUHlGdW5jdGlvbl9H RVRfQ09ERShmdW5jKTsKKy0gICAgUHlPYmplY3QgKmdsb2JhbHMgPSBQeUZ1bmN0aW9uX0dFVF9H TE9CQUxTKGZ1bmMpOworLSAgICBQeU9iamVjdCAqYXJnZGVmcyA9IFB5RnVuY3Rpb25fR0VUX0RF RkFVTFRTKGZ1bmMpOworLSAgICBQeU9iamVjdCAqY2xvc3VyZTsKKy0jaWYgUFlfTUFKT1JfVkVS U0lPTiA+PSAzCistICAgIFB5T2JqZWN0ICprd2RlZnM7CistI2VuZGlmCistICAgIFB5T2JqZWN0 ICprd3R1cGxlLCAqKms7CistICAgIFB5T2JqZWN0ICoqZDsKKy0gICAgUHlfc3NpemVfdCBuZDsK Ky0gICAgUHlfc3NpemVfdCBuazsKKy0gICAgUHlPYmplY3QgKnJlc3VsdDsKKy0gICAgYXNzZXJ0 KGt3YXJncyA9PSBOVUxMIHx8IFB5RGljdF9DaGVjayhrd2FyZ3MpKTsKKy0gICAgbmsgPSBrd2Fy Z3MgPyBQeURpY3RfU2l6ZShrd2FyZ3MpIDogMDsKKy0gICAgaWYgKFB5X0VudGVyUmVjdXJzaXZl Q2FsbCgoY2hhciopIiB3aGlsZSBjYWxsaW5nIGEgUHl0aG9uIG9iamVjdCIpKSB7CistICAgICAg ICByZXR1cm4gTlVMTDsKKy0gICAgfQorLSAgICBpZiAoCistI2lmIFBZX01BSk9SX1ZFUlNJT04g Pj0gMworLSAgICAgICAgICAgIGNvLT5jb19rd29ubHlhcmdjb3VudCA9PSAwICYmCistI2VuZGlm CistICAgICAgICAgICAgbGlrZWx5KGt3YXJncyA9PSBOVUxMIHx8IG5rID09IDApICYmCistICAg ICAgICAgICAgY28tPmNvX2ZsYWdzID09IChDT19PUFRJTUlaRUQgfCBDT19ORVdMT0NBTFMgfCBD T19OT0ZSRUUpKSB7CistICAgICAgICBpZiAoYXJnZGVmcyA9PSBOVUxMICYmIGNvLT5jb19hcmdj b3VudCA9PSBuYXJncykgeworLSAgICAgICAgICAgIHJlc3VsdCA9IF9fUHl4X1B5RnVuY3Rpb25f RmFzdENhbGxOb0t3KGNvLCBhcmdzLCBuYXJncywgZ2xvYmFscyk7CistICAgICAgICAgICAgZ290 byBkb25lOworLSAgICAgICAgfQorLSAgICAgICAgZWxzZSBpZiAobmFyZ3MgPT0gMCAmJiBhcmdk ZWZzICE9IE5VTEwKKy0gICAgICAgICAgICAgICAgICYmIGNvLT5jb19hcmdjb3VudCA9PSBQeV9T SVpFKGFyZ2RlZnMpKSB7CistICAgICAgICAgICAgLyogZnVuY3Rpb24gY2FsbGVkIHdpdGggbm8g YXJndW1lbnRzLCBidXQgYWxsIHBhcmFtZXRlcnMgaGF2ZQorLSAgICAgICAgICAgICAgIGEgZGVm YXVsdCB2YWx1ZTogdXNlIGRlZmF1bHQgdmFsdWVzIGFzIGFyZ3VtZW50cyAuKi8KKy0gICAgICAg ICAgICBhcmdzID0gJlB5VHVwbGVfR0VUX0lURU0oYXJnZGVmcywgMCk7CistICAgICAgICAgICAg cmVzdWx0ID1fX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsTm9LdyhjbywgYXJncywgUHlfU0laRShh cmdkZWZzKSwgZ2xvYmFscyk7CistICAgICAgICAgICAgZ290byBkb25lOworLSAgICAgICAgfQor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzNQorKyAqICAgICAgICAgcmV0 dXJuIHYKKysgKiAKKysgKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorKyAqICAgICBkZWYgc2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIHZhbHVlPVRydWUsIGFzeW5j aHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKToKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0 X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIiCisrICovCisrICBfX1B5eF9H ZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDYzNSwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo2MzYKKysgKiAKKysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIHNldF9wcm9w ZXJ0eShzZWxmLCBwcm9wLCB2YWx1ZT1UcnVlLCBhc3luY2hyb25vdXM9RmFsc2UsIGRhdGE9Tm9u ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIldyYXBzOiBt cHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIiCisrICogICAgICAg ICBhc3NlcnQgc2VsZi5fY3R4CisrICovCisrICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90 XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 LCBfX3B5eF9uX3Nfc2V0X3Byb3BlcnR5KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgNjM2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQp OworKyAgX19weXhfdF8xID0gTlVMTDsKKysgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYg dW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsKKysgICAgX19weXhfdF8xID0g UHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82KTsKKysgICAgaWYgKGxpa2VseShfX3B5eF90XzEp KSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKF9f cHl4X3RfNik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7CisrICAgICAgX19QeXhf SU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3RfNiwgZnVu Y3Rpb24pOworICAgICB9CistICAgIGlmIChrd2FyZ3MgIT0gTlVMTCkgeworLSAgICAgICAgUHlf c3NpemVfdCBwb3MsIGk7CistICAgICAgICBrd3R1cGxlID0gUHlUdXBsZV9OZXcoMiAqIG5rKTsK Ky0gICAgICAgIGlmIChrd3R1cGxlID09IE5VTEwpIHsKKy0gICAgICAgICAgICByZXN1bHQgPSBO VUxMOworLSAgICAgICAgICAgIGdvdG8gZG9uZTsKKy0gICAgICAgIH0KKy0gICAgICAgIGsgPSAm UHlUdXBsZV9HRVRfSVRFTShrd3R1cGxlLCAwKTsKKy0gICAgICAgIHBvcyA9IGkgPSAwOworLSAg ICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KGt3YXJncywgJnBvcywgJmtbaV0sICZrW2krMV0pKSB7 CistICAgICAgICAgICAgUHlfSU5DUkVGKGtbaV0pOworLSAgICAgICAgICAgIFB5X0lOQ1JFRihr W2krMV0pOworLSAgICAgICAgICAgIGkgKz0gMjsKKy0gICAgICAgIH0KKy0gICAgICAgIG5rID0g aSAvIDI7CisrICB9CisrICBfX3B5eF90XzcgPSAoX19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2Jq ZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQpOworKyAgX19QeXhfWERFQ1JFRihf X3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9f cHl4X3RfNCA9IDA7CisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA2 MzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgIGlmIChQeURpY3RfU2V0SXRl bSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+ dHBfZGljdCwgX19weXhfbl9zX3NldF9wcm9wZXJ0eSwgX19weXhfdF83KSA8IDApIF9fUFlYX0VS UigwLCA2MzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9f cHl4X3RfNyA9IDA7CisrICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQpOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjY3MworKyAqICAgICAgICAgcmV0dXJuIGVycgorKyAqIAorKyAqICAgICBAX2Vycm9ycyAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGRlZiBzZXRfb3B0aW9uKHNlbGYs IHByb3AsIHZhbHVlPVRydWUpOgorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9u IiIiCisrICovCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhf bl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDY3Mywg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzQKKysgKiAKKysgKiAgICAgQF9lcnJvcnMK KysgKiAgICAgZGVmIHNldF9vcHRpb24oc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X29wdGlv biIiIgorKyAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorKyAqLworKyAgX19QeXhfR2V0TmFt ZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3NldF9vcHRpb24pOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2NzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09U UkVGKF9fcHl4X3RfNCk7CisrICBfX3B5eF90XzEgPSBOVUxMOworKyAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgeworKyAg ICBfX3B5eF90XzEgPSBQeU1ldGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOworKyAgICBpZiAobGlr ZWx5KF9fcHl4X3RfMSkpIHsKKysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9H RVRfRlVOQ1RJT04oX19weXhfdF82KTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsK KysgICAgICBfX1B5eF9JTkNSRUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQo X19weXhfdF82LCBmdW5jdGlvbik7CisgICAgIH0KKy0gICAgZWxzZSB7CistICAgICAgICBrd3R1 cGxlID0gTlVMTDsKKy0gICAgICAgIGsgPSBOVUxMOworKyAgfQorKyAgX19weXhfdF83ID0gKF9f cHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEs IF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhf dF80KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworKyAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNjczLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dP VFJFRihfX3B5eF90XzcpOworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19zZXRfb3B0aW9uLCBf X3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDY3NCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5 eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgIFB5VHlwZV9Nb2RpZmllZChf X3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7CisrCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk1CisrICogICAgICAgICByZXR1cm4gZXJyCisr ICogCisrICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgZGVmIGluaXRpYWxpemUoc2VsZik6CisrICogICAgICAgICAiIiJXcmFwczogbXB2X2luaXRp YWxpemUiIiIKKysgKi8KKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBf X3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg Njk1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5NgorKyAqIAorKyAqICAgICBAX2Vy cm9ycworKyAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorKyAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9pbml0aWFsaXplIiIiCisrICogICAg ICAgICBhc3NlcnQgc2VsZi5fY3R4CisrICovCisrICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5 eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0LCBfX3B5eF9uX3NfaW5pdGlhbGl6ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDAsIDY5NiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKysgIF9fcHl4X3RfMSA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CisrICAgIF9fcHl4X3RfMSA9 IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CisrICAgIGlmIChsaWtlbHkoX19weXhfdF8x KSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihf X3B5eF90XzYpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1 bmN0aW9uKTsKKyAgICAgfQorLSAgICBjbG9zdXJlID0gUHlGdW5jdGlvbl9HRVRfQ0xPU1VSRShm dW5jKTsKKy0jaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICAgIGt3ZGVmcyA9IFB5RnVuY3Rp b25fR0VUX0tXX0RFRkFVTFRTKGZ1bmMpOworLSNlbmRpZgorLSAgICBpZiAoYXJnZGVmcyAhPSBO VUxMKSB7CistICAgICAgICBkID0gJlB5VHVwbGVfR0VUX0lURU0oYXJnZGVmcywgMCk7CistICAg ICAgICBuZCA9IFB5X1NJWkUoYXJnZGVmcyk7CisrICB9CisrICBfX3B5eF90XzcgPSAoX19weXhf dF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19w eXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQp OworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19QeXhf REVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNykpIF9fUFlYX0VSUigwLCA2OTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVG KF9fcHl4X3RfNyk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsK KysgIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX2luaXRpYWxpemUsIF9fcHl4 X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNjk2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgUHlUeXBlX01vZGlmaWVkKF9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKysKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDgKKysgKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJl YWQuc3RhcnQoKQorKyAqIAorKyAqICAgICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgIGRlZiBvYnNlcnZlX3Byb3BlcnR5KHNlbGYsIHByb3AsIGRhdGE9Tm9u ZSk6CisrICogICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVydHkiIiIKKysgKi8K KysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3Jz KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNzQ4LCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKworKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjc0OQorKyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBk ZWYgb2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVy dHkiIiIKKysgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKysgKi8KKysgIF9fUHl4X0dldE5h bWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19vYnNlcnZlX3Byb3BlcnR5KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNzQ5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0dPVFJFRihfX3B5eF90XzQpOworKyAgX19weXhfdF8xID0gTlVMTDsKKysgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkp IHsKKysgICAgX19weXhfdF8xID0gUHlNZXRob2RfR0VUX1NFTEYoX19weXhfdF82KTsKKysgICAg aWYgKGxpa2VseShfX3B5eF90XzEpKSB7CisrICAgICAgUHlPYmplY3QqIGZ1bmN0aW9uID0gUHlN ZXRob2RfR0VUX0ZVTkNUSU9OKF9fcHl4X3RfNik7CisrICAgICAgX19QeXhfSU5DUkVGKF9fcHl4 X3RfMSk7CisrICAgICAgX19QeXhfSU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgICBfX1B5eF9ERUNS RUZfU0VUKF9fcHl4X3RfNiwgZnVuY3Rpb24pOworICAgICB9CistICAgIGVsc2UgeworLSAgICAg ICAgZCA9IE5VTEw7CistICAgICAgICBuZCA9IDA7CisrICB9CisrICBfX3B5eF90XzcgPSAoX19w eXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwg X19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90 XzQpOworKyAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKyAgX19Q eXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBpZiAodW5saWtlbHkoIV9f cHl4X3RfNykpIF9fUFlYX0VSUigwLCA3NDgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09U UkVGKF9fcHl4X3RfNyk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKKysgIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX29ic2VydmVfcHJvcGVy dHksIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNzQ5LCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgUHlUeXBlX01vZGlm aWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKysKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzAKKysgKiAgICAgICAgIHJldHVybiBl cnIKKysgKiAKKysgKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor KyAqICAgICBkZWYgdW5vYnNlcnZlX3Byb3BlcnR5KHNlbGYsIGRhdGEpOgorKyAqICAgICAgICAg IiIiV3JhcHM6IG1wdl91bm9ic2VydmVfcHJvcGVydHkiIiIKKysgKi8KKysgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNzcwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjc3MQorKyAqIAorKyAqICAgICBAX2Vycm9ycworKyAqICAgICBkZWYgdW5vYnNlcnZlX3By b3BlcnR5KHNlbGYsIGRhdGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICAiIiJXcmFwczogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSIiIgorKyAqICAgICAgICAgYXNz ZXJ0IHNlbGYuX2N0eAorKyAqLworKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19w eXhfbl9zX3Vub2JzZXJ2ZV9wcm9wZXJ0eSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDAsIDc3MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKysgIF9fcHl4X3RfMSA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CisrICAgIF9fcHl4X3RfMSA9 IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CisrICAgIGlmIChsaWtlbHkoX19weXhfdF8x KSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihf X3B5eF90XzYpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAgICAgIF9fUHl4 X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90XzYsIGZ1 bmN0aW9uKTsKKyAgICAgfQorLSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgcmVzdWx0 ID0gUHlFdmFsX0V2YWxDb2RlRXgoKFB5T2JqZWN0KiljbywgZ2xvYmFscywgKFB5T2JqZWN0ICop TlVMTCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncywgKGludCluYXJncywK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaywgKGludCluaywKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZCwgKGludCluZCwga3dkZWZzLCBjbG9zdXJlKTsKKy0jZWxz ZQorLSAgICByZXN1bHQgPSBQeUV2YWxfRXZhbENvZGVFeChjbywgZ2xvYmFscywgKFB5T2JqZWN0 ICopTlVMTCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncywgKGludCluYXJn cywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaywgKGludCluaywKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZCwgKGludCluZCwgY2xvc3VyZSk7CistI2VuZGlmCist ICAgIFB5X1hERUNSRUYoa3d0dXBsZSk7CistZG9uZToKKy0gICAgUHlfTGVhdmVSZWN1cnNpdmVD YWxsKCk7CistICAgIHJldHVybiByZXN1bHQ7CistfQorLSNlbmRpZgorLSNlbmRpZgorKyAgfQor KyAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfNiwgX19weXhfdF80KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwor KyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNzcwLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICop X19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4 X25fc191bm9ic2VydmVfcHJvcGVydHksIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNzcx LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90Xzcg PSAwOworKyAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0KTsKKyAKKy0vKiBQeUNGdW5jdGlvbkZhc3RDYWxsICovCistI2lmIENZVEhPTl9G QVNUX1BZQ0NBTEwKKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCAqIF9fUHl4X1B5Q0Z1 bmN0aW9uX0Zhc3RDYWxsKFB5T2JqZWN0ICpmdW5jX29iaiwgUHlPYmplY3QgKiphcmdzLCBQeV9z c2l6ZV90IG5hcmdzKSB7CistICAgIFB5Q0Z1bmN0aW9uT2JqZWN0ICpmdW5jID0gKFB5Q0Z1bmN0 aW9uT2JqZWN0KilmdW5jX29iajsKKy0gICAgUHlDRnVuY3Rpb24gbWV0aCA9IFB5Q0Z1bmN0aW9u X0dFVF9GVU5DVElPTihmdW5jKTsKKy0gICAgUHlPYmplY3QgKnNlbGYgPSBQeUNGdW5jdGlvbl9H RVRfU0VMRihmdW5jKTsKKy0gICAgaW50IGZsYWdzID0gUHlDRnVuY3Rpb25fR0VUX0ZMQUdTKGZ1 bmMpOworLSAgICBhc3NlcnQoUHlDRnVuY3Rpb25fQ2hlY2soZnVuYykpOworLSAgICBhc3NlcnQo TUVUSF9GQVNUQ0FMTCA9PSAoZmxhZ3MgJiB+KE1FVEhfQ0xBU1MgfCBNRVRIX1NUQVRJQyB8IE1F VEhfQ09FWElTVCB8IE1FVEhfS0VZV09SRFMgfCBNRVRIX1NUQUNLTEVTUykpKTsKKy0gICAgYXNz ZXJ0KG5hcmdzID49IDApOworLSAgICBhc3NlcnQobmFyZ3MgPT0gMCB8fCBhcmdzICE9IE5VTEwp OworLSAgICAvKiBfUHlDRnVuY3Rpb25fRmFzdENhbGxEaWN0KCkgbXVzdCBub3QgYmUgY2FsbGVk IHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKy0gICAgICAgYmVjYXVzZSBpdCBtYXkgY2xlYXIgaXQg KGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGFuZCBzbyB0aGUKKy0gICAgICAgY2FsbGVyIGxvc2Vz IGl0cyBleGNlcHRpb24gKi8KKy0gICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKy0gICAg aWYgKChQWV9WRVJTSU9OX0hFWCA8IDB4MDMwNzAwQTApIHx8IHVubGlrZWx5KGZsYWdzICYgTUVU SF9LRVlXT1JEUykpIHsKKy0gICAgICAgIHJldHVybiAoKigoX19QeXhfUHlDRnVuY3Rpb25GYXN0 V2l0aEtleXdvcmRzKSh2b2lkKiltZXRoKSkgKHNlbGYsIGFyZ3MsIG5hcmdzLCBOVUxMKTsKKy0g ICAgfSBlbHNlIHsKKy0gICAgICAgIHJldHVybiAoKigoX19QeXhfUHlDRnVuY3Rpb25GYXN0KSh2 b2lkKiltZXRoKSkgKHNlbGYsIGFyZ3MsIG5hcmdzKTsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5MzgKKysgKiAKKysgKiBjZGVmIGNsYXNzIFJlbmRlckNvbnRleHQob2Jq ZWN0KToKKysgKiAgICAgQVBJX09QRU5HTCA9ICJvcGVuZ2wiICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgVVBEQVRFX0ZSQU1FID0gTVBWX1JFTkRFUl9VUERBVEVfRlJBTUUK KysgKiAKKysgKi8KKysgIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9z X0FQSV9PUEVOR0wsIF9fcHl4X25fc19vcGVuZ2wpIDwgMCkgX19QWVhfRVJSKDAsIDkzOCwgX19w eXhfTDFfZXJyb3IpCisrICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X1JlbmRlckNvbnRleHQpOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjkzOQorKyAqIGNkZWYgY2xhc3MgUmVuZGVyQ29udGV4dChvYmplY3QpOgorKyAq ICAgICBBUElfT1BFTkdMID0gIm9wZW5nbCIKKysgKiAgICAgVVBEQVRFX0ZSQU1FID0gTVBWX1JF TkRFUl9VUERBVEVfRlJBTUUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqIAorKyAq ICAgICBjZGVmOgorKyAqLworKyAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19t cHZfcmVuZGVyX3VwZGF0ZV9mbGFnKE1QVl9SRU5ERVJfVVBEQVRFX0ZSQU1FKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgOTM5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAq KV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0 LCBfX3B5eF9uX3NfVVBEQVRFX0ZSQU1FLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDkz OSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83 ID0gMDsKKysgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyQ29udGV4dCk7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTAwOQorKyAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCisrICogCisrICogICAgIEBf ZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZGVmIHNldF9pY2Nf cHJvZmlsZShzZWxmLCBpY2NfYmxvYik6CisrICogICAgICAgICBjZGVmOgorKyAqLworKyAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDA5LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKworKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwMTAKKysgKiAKKysgKiAgICAgQF9lcnJvcnMKKysgKiAgICAgZGVmIHNl dF9pY2NfcHJvZmlsZShzZWxmLCBpY2NfYmxvYik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKysgKiAgICAgICAgIGNkZWY6CisrICogICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBw YXJhbQorKyAqLworKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3Qg KilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgX19weXhf bl9zX3NldF9pY2NfcHJvZmlsZSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDEwMTAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Cisr ICBfX3B5eF90XzEgPSBOVUxMOworKyAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgeworKyAgICBfX3B5eF90XzEgPSBQeU1l dGhvZF9HRVRfU0VMRihfX3B5eF90XzYpOworKyAgICBpZiAobGlrZWx5KF9fcHl4X3RfMSkpIHsK KysgICAgICBQeU9iamVjdCogZnVuY3Rpb24gPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oX19weXhf dF82KTsKKysgICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKysgICAgICBfX1B5eF9JTkNS RUYoZnVuY3Rpb24pOworKyAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdF82LCBmdW5jdGlv bik7CisrICAgIH0KKysgIH0KKysgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlP YmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CisrICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKKysgIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJS KDAsIDEwMDksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7Cisr ICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKysgIGlmIChQeURpY3Rf U2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVu ZGVyQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3NldF9pY2NfcHJvZmlsZSwgX19weXhfdF83 KSA8IDApIF9fUFlYX0VSUigwLCAxMDEwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworKyAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KTsKKysKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI4CisrICogICAgICAgICByZXR1cm4gZXJyCisr ICogCisrICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAg ICAgZGVmIHNldF9hbWJpZW50X2xpZ2h0KHNlbGYsIGx1eCk6CisrICogICAgICAgICBjZGVmOgor KyAqLworKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19l cnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDI4LCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKworKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjkKKysgKiAKKysgKiAgICAgQF9lcnJvcnMKKysg KiAgICAgZGVmIHNldF9hbWJpZW50X2xpZ2h0KHNlbGYsIGx1eCk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIGNkZWY6CisrICogICAgICAgICAgICAgbXB2X3JlbmRl cl9wYXJhbSBwYXJhbQorKyAqLworKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dCwgX19weXhfbl9zX3NldF9hbWJpZW50X2xpZ2h0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMTAyOSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19w eXhfdF80KTsKKysgIF9fcHl4X3RfMSA9IE5VTEw7CisrICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRI T0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CisrICAgIF9fcHl4 X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CisrICAgIGlmIChsaWtlbHkoX19w eXhfdF8xKSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihfX3B5eF90XzYpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOworKyAgICAg IF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF90 XzYsIGZ1bmN0aW9uKTsKKyAgICAgfQorLX0KKy0jZW5kaWYKKysgIH0KKysgIF9fcHl4X3RfNyA9 IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhf dF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9f cHl4X3RfNCk7CisrICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7Cisr ICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKysgIGlmICh1bmxpa2Vs eSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEwMjgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKKysgIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3Nl dF9hbWJpZW50X2xpZ2h0LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDEwMjksIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Cisr ICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckNvbnRleHQpOworIAorLS8qIFB5T2JqZWN0Q2FsbCAqLworLSNpZiBDWVRIT05fQ09NUElMSU5H X0lOX0NQWVRIT04KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlPYmpl Y3RfQ2FsbChQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZywgUHlPYmplY3QgKmt3KSB7Cist ICAgIFB5T2JqZWN0ICpyZXN1bHQ7CistICAgIHRlcm5hcnlmdW5jIGNhbGwgPSBmdW5jLT5vYl90 eXBlLT50cF9jYWxsOworLSAgICBpZiAodW5saWtlbHkoIWNhbGwpKQorLSAgICAgICAgcmV0dXJu IFB5T2JqZWN0X0NhbGwoZnVuYywgYXJnLCBrdyk7CistICAgIGlmICh1bmxpa2VseShQeV9FbnRl clJlY3Vyc2l2ZUNhbGwoKGNoYXIqKSIgd2hpbGUgY2FsbGluZyBhIFB5dGhvbiBvYmplY3QiKSkp CistICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgcmVzdWx0ID0gKCpjYWxsKShmdW5jLCBhcmcs IGt3KTsKKy0gICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CistICAgIGlmICh1bmxpa2VseSgh cmVzdWx0KSAmJiB1bmxpa2VseSghUHlFcnJfT2NjdXJyZWQoKSkpIHsKKy0gICAgICAgIFB5RXJy X1NldFN0cmluZygKKy0gICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKKy0gICAgICAgICAg ICAiTlVMTCByZXN1bHQgd2l0aG91dCBlcnJvciBpbiBQeU9iamVjdF9DYWxsIik7CistICAgIH0K Ky0gICAgcmV0dXJuIHJlc3VsdDsKKy19CistI2VuZGlmCisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA2OAorKyAqICAgICAgICAgcmV0dXJuIHJldAorKyAqIAorKyAqICAg ICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIGRlZiByZW5k ZXIoc2VsZiwKKysgKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUsCisrICovCisrICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEwNjgsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisgCistLyogR2V0VG9wbW9zdEV4Y2VwdGlv biAqLworLSNpZiBDWVRIT05fVVNFX0VYQ19JTkZPX1NUQUNLCistc3RhdGljIF9QeUVycl9TdGFj a0l0ZW0gKgorLV9fUHl4X1B5RXJyX0dldFRvcG1vc3RFeGNlcHRpb24oUHlUaHJlYWRTdGF0ZSAq dHN0YXRlKQorLXsKKy0gICAgX1B5RXJyX1N0YWNrSXRlbSAqZXhjX2luZm8gPSB0c3RhdGUtPmV4 Y19pbmZvOworLSAgICB3aGlsZSAoKGV4Y19pbmZvLT5leGNfdHlwZSA9PSBOVUxMIHx8IGV4Y19p bmZvLT5leGNfdHlwZSA9PSBQeV9Ob25lKSAmJgorLSAgICAgICAgICAgZXhjX2luZm8tPnByZXZp b3VzX2l0ZW0gIT0gTlVMTCkKKy0gICAgeworLSAgICAgICAgZXhjX2luZm8gPSBleGNfaW5mby0+ cHJldmlvdXNfaXRlbTsKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY5 CisrICogCisrICogICAgIEBfZXJyb3JzCisrICogICAgIGRlZiByZW5kZXIoc2VsZiwgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICAgICAgICAgICAgIG9wZW5nbF9mYm89Tm9u ZSwKKysgKiAgICAgICAgICAgICAgICBmbGlwX3k9RmFsc2UsCisrICovCisrICBfX1B5eF9HZXRO YW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LCBfX3B5eF9uX3NfcmVuZGVyKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA2OSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5 eF9HT1RSRUYoX19weXhfdF80KTsKKysgIF9fcHl4X3RfMSA9IE5VTEw7CisrICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7 CisrICAgIF9fcHl4X3RfMSA9IFB5TWV0aG9kX0dFVF9TRUxGKF9fcHl4X3RfNik7CisrICAgIGlm IChsaWtlbHkoX19weXhfdF8xKSkgeworKyAgICAgIFB5T2JqZWN0KiBmdW5jdGlvbiA9IFB5TWV0 aG9kX0dFVF9GVU5DVElPTihfX3B5eF90XzYpOworKyAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90 XzEpOworKyAgICAgIF9fUHl4X0lOQ1JFRihmdW5jdGlvbik7CisrICAgICAgX19QeXhfREVDUkVG X1NFVChfX3B5eF90XzYsIGZ1bmN0aW9uKTsKKyAgICAgfQorLSAgICByZXR1cm4gZXhjX2luZm87 CistfQorLSNlbmRpZgorKyAgfQorKyAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9Q eU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80KTsKKysgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9F UlIoMCwgMTA2OCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsK KysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworKyAgaWYgKFB5RGlj dF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9S ZW5kZXJDb250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfcmVuZGVyLCBfX3B5eF90XzcpIDwgMCkg X19QWVhfRVJSKDAsIDEwNjksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisrICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQpOworIAorLS8qIFNhdmVSZXNldEV4Y2Vw dGlvbiAqLworLSNpZiBDWVRIT05fRkFTVF9USFJFQURfU1RBVEUKKy1zdGF0aWMgQ1lUSE9OX0lO TElORSB2b2lkIF9fUHl4X19FeGNlcHRpb25TYXZlKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlP YmplY3QgKip0eXBlLCBQeU9iamVjdCAqKnZhbHVlLCBQeU9iamVjdCAqKnRiKSB7CistICAgICNp ZiBDWVRIT05fVVNFX0VYQ19JTkZPX1NUQUNLCistICAgIF9QeUVycl9TdGFja0l0ZW0gKmV4Y19p bmZvID0gX19QeXhfUHlFcnJfR2V0VG9wbW9zdEV4Y2VwdGlvbih0c3RhdGUpOworLSAgICAqdHlw ZSA9IGV4Y19pbmZvLT5leGNfdHlwZTsKKy0gICAgKnZhbHVlID0gZXhjX2luZm8tPmV4Y192YWx1 ZTsKKy0gICAgKnRiID0gZXhjX2luZm8tPmV4Y190cmFjZWJhY2s7CistICAgICNlbHNlCistICAg ICp0eXBlID0gdHN0YXRlLT5leGNfdHlwZTsKKy0gICAgKnZhbHVlID0gdHN0YXRlLT5leGNfdmFs dWU7CistICAgICp0YiA9IHRzdGF0ZS0+ZXhjX3RyYWNlYmFjazsKKy0gICAgI2VuZGlmCistICAg IFB5X1hJTkNSRUYoKnR5cGUpOworLSAgICBQeV9YSU5DUkVGKCp2YWx1ZSk7CistICAgIFB5X1hJ TkNSRUYoKnRiKTsKKy19Cistc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9fRXhjZXB0 aW9uUmVzZXQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeU9iamVjdCAqdHlwZSwgUHlPYmplY3Qg KnZhbHVlLCBQeU9iamVjdCAqdGIpIHsKKy0gICAgUHlPYmplY3QgKnRtcF90eXBlLCAqdG1wX3Zh bHVlLCAqdG1wX3RiOworLSAgICAjaWYgQ1lUSE9OX1VTRV9FWENfSU5GT19TVEFDSworLSAgICBf UHlFcnJfU3RhY2tJdGVtICpleGNfaW5mbyA9IHRzdGF0ZS0+ZXhjX2luZm87CistICAgIHRtcF90 eXBlID0gZXhjX2luZm8tPmV4Y190eXBlOworLSAgICB0bXBfdmFsdWUgPSBleGNfaW5mby0+ZXhj X3ZhbHVlOworLSAgICB0bXBfdGIgPSBleGNfaW5mby0+ZXhjX3RyYWNlYmFjazsKKy0gICAgZXhj X2luZm8tPmV4Y190eXBlID0gdHlwZTsKKy0gICAgZXhjX2luZm8tPmV4Y192YWx1ZSA9IHZhbHVl OworLSAgICBleGNfaW5mby0+ZXhjX3RyYWNlYmFjayA9IHRiOworLSAgICAjZWxzZQorLSAgICB0 bXBfdHlwZSA9IHRzdGF0ZS0+ZXhjX3R5cGU7CistICAgIHRtcF92YWx1ZSA9IHRzdGF0ZS0+ZXhj X3ZhbHVlOworLSAgICB0bXBfdGIgPSB0c3RhdGUtPmV4Y190cmFjZWJhY2s7CistICAgIHRzdGF0 ZS0+ZXhjX3R5cGUgPSB0eXBlOworLSAgICB0c3RhdGUtPmV4Y192YWx1ZSA9IHZhbHVlOworLSAg ICB0c3RhdGUtPmV4Y190cmFjZWJhY2sgPSB0YjsKKy0gICAgI2VuZGlmCistICAgIFB5X1hERUNS RUYodG1wX3R5cGUpOworLSAgICBQeV9YREVDUkVGKHRtcF92YWx1ZSk7CistICAgIFB5X1hERUNS RUYodG1wX3RiKTsKKy19CistI2VuZGlmCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTEzMgorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BhcmFt cywgKmFyZ3MsICoqa3dhcmdzKQorKyAqIAorKyAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVh ZCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZGVmIF9faW5pdF9fKHNl bGYpOgorKyAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCisrICovCisrICBfX1B5eF9H ZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNywgX19weXhfbl9zX1RocmVhZCk7IGlmICh1bmxp a2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDExMzIsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisrICBfX3B5eF90XzYgPSBQeVR1cGxlX05ldygxKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgIF9fUHl4X0dJVkVSRUYoX19weXhf dF83KTsKKysgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF82LCAwLCBfX3B5eF90XzcpOworKyAg X19weXhfdF83ID0gMDsKKysgIF9fcHl4X3RfNyA9IF9fUHl4X0NhbGN1bGF0ZU1ldGFjbGFzcyhO VUxMLCBfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAx MTMyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworKyAgX19w eXhfdF80ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzcsIF9fcHl4X3RfNiwg X19weXhfbl9zX0NhbGxiYWNrVGhyZWFkLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIChQeU9i amVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikg TlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDExMzIsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgCistLyogUHlFcnJFeGNl cHRpb25NYXRjaGVzICovCistI2lmIENZVEhPTl9GQVNUX1RIUkVBRF9TVEFURQorLXN0YXRpYyBp bnQgX19QeXhfUHlFcnJfRXhjZXB0aW9uTWF0Y2hlc1R1cGxlKFB5T2JqZWN0ICpleGNfdHlwZSwg UHlPYmplY3QgKnR1cGxlKSB7CistICAgIFB5X3NzaXplX3QgaSwgbjsKKy0gICAgbiA9IFB5VHVw bGVfR0VUX1NJWkUodHVwbGUpOworLSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgZm9y IChpPTA7IGk8bjsgaSsrKSB7CistICAgICAgICBpZiAoZXhjX3R5cGUgPT0gUHlUdXBsZV9HRVRf SVRFTSh0dXBsZSwgaSkpIHJldHVybiAxOworLSAgICB9CistI2VuZGlmCistICAgIGZvciAoaT0w OyBpPG47IGkrKykgeworLSAgICAgICAgaWYgKF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0 Y2hlcyhleGNfdHlwZSwgUHlUdXBsZV9HRVRfSVRFTSh0dXBsZSwgaSkpKSByZXR1cm4gMTsKKy0g ICAgfQorLSAgICByZXR1cm4gMDsKKy19Cistc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4 X1B5RXJyX0V4Y2VwdGlvbk1hdGNoZXNJblN0YXRlKFB5VGhyZWFkU3RhdGUqIHRzdGF0ZSwgUHlP YmplY3QqIGVycikgeworLSAgICBQeU9iamVjdCAqZXhjX3R5cGUgPSB0c3RhdGUtPmN1cmV4Y190 eXBlOworLSAgICBpZiAoZXhjX3R5cGUgPT0gZXJyKSByZXR1cm4gMTsKKy0gICAgaWYgKHVubGlr ZWx5KCFleGNfdHlwZSkpIHJldHVybiAwOworLSAgICBpZiAodW5saWtlbHkoUHlUdXBsZV9DaGVj ayhlcnIpKSkKKy0gICAgICAgIHJldHVybiBfX1B5eF9QeUVycl9FeGNlcHRpb25NYXRjaGVzVHVw bGUoZXhjX3R5cGUsIGVycik7CistICAgIHJldHVybiBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlv bk1hdGNoZXMoZXhjX3R5cGUsIGVycik7CistfQorLSNlbmRpZgorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExMzMKKysgKiAKKysgKiBjbGFzcyBDYWxsYmFja1RocmVhZChU aHJlYWQpOgorKyAqICAgICBkZWYgX19pbml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKysgKiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQorKyAqICAgICAgICAg c2VsZi5kYWVtb24gPSBUcnVlCisrICovCisrICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9u X05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8x X19pbml0X18sIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9fX2luaXQsIE5VTEwsIF9fcHl4 X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rl b2JqX18zNSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTMzLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX2luaXQsIF9fcHl4X3RfMSkgPCAw KSBfX1BZWF9FUlIoMCwgMTEzMywgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTQxCisrICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZQorKyAqIAor KyAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KysgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRydWUKKysgKiAgICAgICAgIHNlbGYuY2Fs bGJhY2sgPSBOb25lCisrICovCisrICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygm X19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8zc2h1dGRv d24sIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9zaHV0ZG93biwgTlVMTCwgX19weXhfbl9z X3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpf XzM3KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNDEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X3RfMSkgPCAw KSBfX1BZWF9FUlIoMCwgMTE0MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTQ2CisrICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisrICogCisrICog ICAgIGRlZiBjYWxsKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAg ICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisrICogCisrICovCisrICBfX3B5eF90XzEgPSBfX1B5 eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxs YmFja1RocmVhZF81Y2FsbCwgMCwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX2NhbGwsIE5VTEws IF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5 eF9jb2Rlb2JqX18zOSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAx MTQ2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworKyAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX2NhbGwsIF9fcHl4X3Rf MSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNS RUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTQ5CisrICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisrICog CisrICogICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisrICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKysgKiAKKysgKi8K KysgIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzdzZXQsIDAsIF9fcHl4X25fc19DYWxsYmFj a1RocmVhZF9zZXQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2Qs ICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX180MSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhf bl9zX3NldCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworKworKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTIKKysgKiAgICAgICAgIHNlbGYuY2Fs bGJhY2sgPSBjYWxsYmFjaworKyAqIAorKyAqICAgICBkZWYgcnVuKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3NodXRkb3du OgorKyAqICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpCisrICovCisrICBfX3B5 eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTRDYWxsYmFja1RocmVhZF85cnVuLCAwLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWRf cnVuLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2Jq ZWN0ICopX19weXhfY29kZW9ial9fNDMpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgMTE1MiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19ydW4s IF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE1MiwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKysKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU3CisrICogICAgICAgICAgICAgc2VsZi5tcHZfY2Fs bGJhY2soc2VsZi5jYWxsYmFjaykgaWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUKKysgKiAKKysg KiAgICAgZGVmIG1wdl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgICAgIHRyeToKKysgKiAgICAgICAgICAgICBjYWxsYmFjaygp CisrICovCisrICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xMW1wdl9jYWxsYmFjaywgMCwg X19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX21wdl9jYWxsYmFjaywgTlVMTCwgX19weXhfbl9zX3Zp ZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzQ1 KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNTcsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisrICBpZiAoX19QeXhfU2V0TmFt ZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3NfbXB2X2NhbGxiYWNrLCBfX3B5eF90XzEpIDwg MCkgX19QWVhfRVJSKDAsIDExNTcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisrCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEzMgorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3Bh cmFtcywgKmFyZ3MsICoqa3dhcmdzKQorKyAqIAorKyAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRo cmVhZCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKysgKiAgICAgZGVmIF9faW5pdF9f KHNlbGYpOgorKyAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCisrICovCisrICBfX3B5 eF90XzEgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZShfX3B5eF90XzcsIF9fcHl4X25fc19DYWxsYmFj a1RocmVhZCwgX19weXhfdF82LCBfX3B5eF90XzQsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTMyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworKyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4 X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTMyLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OworKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisrICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSAwOworKworKyAgLyogIih0cmVlIGZyYWdtZW50KSI6MQorKyAqIGRl ZiBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkKF9fcHl4X3R5cGUsIGxvbmcgX19weXhf Y2hlY2tzdW0sIF9fcHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAq ICAgICBjZGVmIG9iamVjdCBfX3B5eF9QaWNrbGVFcnJvcgorKyAqICAgICBjZGVmIG9iamVjdCBf X3B5eF9yZXN1bHQKKysgKi8KKysgIF9fcHl4X3RfNiA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZfX3B5 eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X19weXhfdW5waWNrbGVfRW5kT2ZGaWxlUmVh Y2hlZCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9z X3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJS KDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4 X3RfNiA9IDA7CisgCistLyogR2V0RXhjZXB0aW9uICovCistI2lmIENZVEhPTl9GQVNUX1RIUkVB RF9TVEFURQorLXN0YXRpYyBpbnQgX19QeXhfX0dldEV4Y2VwdGlvbihQeVRocmVhZFN0YXRlICp0 c3RhdGUsIFB5T2JqZWN0ICoqdHlwZSwgUHlPYmplY3QgKip2YWx1ZSwgUHlPYmplY3QgKip0YikK Ky0jZWxzZQorLXN0YXRpYyBpbnQgX19QeXhfR2V0RXhjZXB0aW9uKFB5T2JqZWN0ICoqdHlwZSwg UHlPYmplY3QgKip2YWx1ZSwgUHlPYmplY3QgKip0YikKKy0jZW5kaWYKKy17CistICAgIFB5T2Jq ZWN0ICpsb2NhbF90eXBlLCAqbG9jYWxfdmFsdWUsICpsb2NhbF90YjsKKy0jaWYgQ1lUSE9OX0ZB U1RfVEhSRUFEX1NUQVRFCistICAgIFB5T2JqZWN0ICp0bXBfdHlwZSwgKnRtcF92YWx1ZSwgKnRt cF90YjsKKy0gICAgbG9jYWxfdHlwZSA9IHRzdGF0ZS0+Y3VyZXhjX3R5cGU7CistICAgIGxvY2Fs X3ZhbHVlID0gdHN0YXRlLT5jdXJleGNfdmFsdWU7CistICAgIGxvY2FsX3RiID0gdHN0YXRlLT5j dXJleGNfdHJhY2ViYWNrOworLSAgICB0c3RhdGUtPmN1cmV4Y190eXBlID0gMDsKKy0gICAgdHN0 YXRlLT5jdXJleGNfdmFsdWUgPSAwOworLSAgICB0c3RhdGUtPmN1cmV4Y190cmFjZWJhY2sgPSAw OworLSNlbHNlCistICAgIFB5RXJyX0ZldGNoKCZsb2NhbF90eXBlLCAmbG9jYWxfdmFsdWUsICZs b2NhbF90Yik7CistI2VuZGlmCistICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmbG9jYWxf dHlwZSwgJmxvY2FsX3ZhbHVlLCAmbG9jYWxfdGIpOworLSNpZiBDWVRIT05fRkFTVF9USFJFQURf U1RBVEUKKy0gICAgaWYgKHVubGlrZWx5KHRzdGF0ZS0+Y3VyZXhjX3R5cGUpKQorLSNlbHNlCist ICAgIGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkKKy0jZW5kaWYKKy0gICAgICAgIGdv dG8gYmFkOworLSAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICAgIGlmIChsb2NhbF90 YikgeworLSAgICAgICAgaWYgKHVubGlrZWx5KFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayhsb2Nh bF92YWx1ZSwgbG9jYWxfdGIpIDwgMCkpCistICAgICAgICAgICAgZ290byBiYWQ7CistICAgIH0K Ky0gICAgI2VuZGlmCistICAgIFB5X1hJTkNSRUYobG9jYWxfdGIpOworLSAgICBQeV9YSU5DUkVG KGxvY2FsX3R5cGUpOworLSAgICBQeV9YSU5DUkVGKGxvY2FsX3ZhbHVlKTsKKy0gICAgKnR5cGUg PSBsb2NhbF90eXBlOworLSAgICAqdmFsdWUgPSBsb2NhbF92YWx1ZTsKKy0gICAgKnRiID0gbG9j YWxfdGI7CistI2lmIENZVEhPTl9GQVNUX1RIUkVBRF9TVEFURQorLSAgICAjaWYgQ1lUSE9OX1VT RV9FWENfSU5GT19TVEFDSworLSAgICB7CistICAgICAgICBfUHlFcnJfU3RhY2tJdGVtICpleGNf aW5mbyA9IHRzdGF0ZS0+ZXhjX2luZm87CistICAgICAgICB0bXBfdHlwZSA9IGV4Y19pbmZvLT5l eGNfdHlwZTsKKy0gICAgICAgIHRtcF92YWx1ZSA9IGV4Y19pbmZvLT5leGNfdmFsdWU7CistICAg ICAgICB0bXBfdGIgPSBleGNfaW5mby0+ZXhjX3RyYWNlYmFjazsKKy0gICAgICAgIGV4Y19pbmZv LT5leGNfdHlwZSA9IGxvY2FsX3R5cGU7CistICAgICAgICBleGNfaW5mby0+ZXhjX3ZhbHVlID0g bG9jYWxfdmFsdWU7CistICAgICAgICBleGNfaW5mby0+ZXhjX3RyYWNlYmFjayA9IGxvY2FsX3Ri OworLSAgICB9CistICAgICNlbHNlCistICAgIHRtcF90eXBlID0gdHN0YXRlLT5leGNfdHlwZTsK Ky0gICAgdG1wX3ZhbHVlID0gdHN0YXRlLT5leGNfdmFsdWU7CistICAgIHRtcF90YiA9IHRzdGF0 ZS0+ZXhjX3RyYWNlYmFjazsKKy0gICAgdHN0YXRlLT5leGNfdHlwZSA9IGxvY2FsX3R5cGU7Cist ICAgIHRzdGF0ZS0+ZXhjX3ZhbHVlID0gbG9jYWxfdmFsdWU7CistICAgIHRzdGF0ZS0+ZXhjX3Ry YWNlYmFjayA9IGxvY2FsX3RiOworLSAgICAjZW5kaWYKKy0gICAgUHlfWERFQ1JFRih0bXBfdHlw ZSk7CistICAgIFB5X1hERUNSRUYodG1wX3ZhbHVlKTsKKy0gICAgUHlfWERFQ1JFRih0bXBfdGIp OworLSNlbHNlCistICAgIFB5RXJyX1NldEV4Y0luZm8obG9jYWxfdHlwZSwgbG9jYWxfdmFsdWUs IGxvY2FsX3RiKTsKKy0jZW5kaWYKKy0gICAgcmV0dXJuIDA7CistYmFkOgorLSAgICAqdHlwZSA9 IDA7CistICAgICp2YWx1ZSA9IDA7CistICAgICp0YiA9IDA7CistICAgIFB5X1hERUNSRUYobG9j YWxfdHlwZSk7CistICAgIFB5X1hERUNSRUYobG9jYWxfdmFsdWUpOworLSAgICBQeV9YREVDUkVG KGxvY2FsX3RiKTsKKy0gICAgcmV0dXJuIC0xOworLX0KKysgIC8qICIodHJlZSBmcmFnbWVudCki OjExCisrICogICAgICAgICBfX3B5eF91bnBpY2tsZV9FbmRPZkZpbGVSZWFjaGVkX19zZXRfc3Rh dGUoPEVuZE9mRmlsZVJlYWNoZWQ+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICogICAg IHJldHVybiBfX3B5eF9yZXN1bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJl YWNoZWRfX3NldF9zdGF0ZShFbmRPZkZpbGVSZWFjaGVkIF9fcHl4X3Jlc3VsdCwgdHVwbGUgX19w eXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogICAgIF9fcHl4X3Jl c3VsdC5lcnJvciA9IF9fcHl4X3N0YXRlWzBdOyBfX3B5eF9yZXN1bHQucmVhc29uID0gX19weXhf c3RhdGVbMV0KKysgKiAgICAgaWYgbGVuKF9fcHl4X3N0YXRlKSA+IDIgYW5kIGhhc2F0dHIoX19w eXhfcmVzdWx0LCAnX19kaWN0X18nKToKKysgKi8KKysgIF9fcHl4X3RfNiA9IFB5Q0Z1bmN0aW9u X05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl85X19weXhfdW5waWNrbGVf TG9nTWVzc2FnZSwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19w eXhfbl9zX3B5eF91bnBpY2tsZV9Mb2dNZXNzYWdlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJS KDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4 X3RfNiA9IDA7CisgCistLyogUHlPYmplY3RDYWxsTWV0aE8gKi8KKy0jaWYgQ1lUSE9OX0NPTVBJ TElOR19JTl9DUFlUSE9OCistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5 T2JqZWN0X0NhbGxNZXRoTyhQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZykgeworLSAgICBQ eU9iamVjdCAqc2VsZiwgKnJlc3VsdDsKKy0gICAgUHlDRnVuY3Rpb24gY2Z1bmM7CistICAgIGNm dW5jID0gUHlDRnVuY3Rpb25fR0VUX0ZVTkNUSU9OKGZ1bmMpOworLSAgICBzZWxmID0gUHlDRnVu Y3Rpb25fR0VUX1NFTEYoZnVuYyk7CistICAgIGlmICh1bmxpa2VseShQeV9FbnRlclJlY3Vyc2l2 ZUNhbGwoKGNoYXIqKSIgd2hpbGUgY2FsbGluZyBhIFB5dGhvbiBvYmplY3QiKSkpCistICAgICAg ICByZXR1cm4gTlVMTDsKKy0gICAgcmVzdWx0ID0gY2Z1bmMoc2VsZiwgYXJnKTsKKy0gICAgUHlf TGVhdmVSZWN1cnNpdmVDYWxsKCk7CistICAgIGlmICh1bmxpa2VseSghcmVzdWx0KSAmJiB1bmxp a2VseSghUHlFcnJfT2NjdXJyZWQoKSkpIHsKKy0gICAgICAgIFB5RXJyX1NldFN0cmluZygKKy0g ICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKKy0gICAgICAgICAgICAiTlVMTCByZXN1bHQg d2l0aG91dCBlcnJvciBpbiBQeU9iamVjdF9DYWxsIik7CistICAgIH0KKy0gICAgcmV0dXJuIHJl c3VsdDsKKy19CistI2VuZGlmCisrICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisrICogZGVmIF9f cHl4X3VucGlja2xlX1Byb3BlcnR5KF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9f cHl4X3N0YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBjZGVmIG9i amVjdCBfX3B5eF9QaWNrbGVFcnJvcgorKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQK KysgKi8KKysgIF9fcHl4X3RfNiA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xMV9fcHl4X3VucGlja2xlX1Byb3BlcnR5LCBOVUxMLCBfX3B5eF9u X3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysg IGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfcHl4X3VucGlja2xlX1Byb3Bl cnR5LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistLyogUHlPYmplY3RD YWxsT25lQXJnICovCistI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTgorLXN0YXRpYyBQ eU9iamVjdCogX19QeXhfX1B5T2JqZWN0X0NhbGxPbmVBcmcoUHlPYmplY3QgKmZ1bmMsIFB5T2Jq ZWN0ICphcmcpIHsKKy0gICAgUHlPYmplY3QgKnJlc3VsdDsKKy0gICAgUHlPYmplY3QgKmFyZ3Mg PSBQeVR1cGxlX05ldygxKTsKKy0gICAgaWYgKHVubGlrZWx5KCFhcmdzKSkgcmV0dXJuIE5VTEw7 CistICAgIFB5X0lOQ1JFRihhcmcpOworLSAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDAsIGFy Zyk7CistICAgIHJlc3VsdCA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoZnVuYywgYXJncywgTlVMTCk7 CistICAgIFB5X0RFQ1JFRihhcmdzKTsKKy0gICAgcmV0dXJuIHJlc3VsdDsKKy19Cistc3RhdGlj IENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoUHlPYmpl Y3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcpIHsKKy0jaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCistICAg IGlmIChQeUZ1bmN0aW9uX0NoZWNrKGZ1bmMpKSB7CistICAgICAgICByZXR1cm4gX19QeXhfUHlG dW5jdGlvbl9GYXN0Q2FsbChmdW5jLCAmYXJnLCAxKTsKKy0gICAgfQorLSNlbmRpZgorLSAgICBp ZiAobGlrZWx5KFB5Q0Z1bmN0aW9uX0NoZWNrKGZ1bmMpKSkgeworLSAgICAgICAgaWYgKGxpa2Vs eShQeUNGdW5jdGlvbl9HRVRfRkxBR1MoZnVuYykgJiBNRVRIX08pKSB7CistICAgICAgICAgICAg cmV0dXJuIF9fUHl4X1B5T2JqZWN0X0NhbGxNZXRoTyhmdW5jLCBhcmcpOworLSNpZiBDWVRIT05f RkFTVF9QWUNDQUxMCistICAgICAgICB9IGVsc2UgaWYgKFB5Q0Z1bmN0aW9uX0dFVF9GTEFHUyhm dW5jKSAmIE1FVEhfRkFTVENBTEwpIHsKKy0gICAgICAgICAgICByZXR1cm4gX19QeXhfUHlDRnVu Y3Rpb25fRmFzdENhbGwoZnVuYywgJmFyZywgMSk7CistI2VuZGlmCistICAgICAgICB9CistICAg IH0KKy0gICAgcmV0dXJuIF9fUHl4X19QeU9iamVjdF9DYWxsT25lQXJnKGZ1bmMsIGFyZyk7Cist fQorLSNlbHNlCistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcpIHsKKy0gICAgUHlPYmpl Y3QgKnJlc3VsdDsKKy0gICAgUHlPYmplY3QgKmFyZ3MgPSBQeVR1cGxlX1BhY2soMSwgYXJnKTsK Ky0gICAgaWYgKHVubGlrZWx5KCFhcmdzKSkgcmV0dXJuIE5VTEw7CistICAgIHJlc3VsdCA9IF9f UHl4X1B5T2JqZWN0X0NhbGwoZnVuYywgYXJncywgTlVMTCk7CistICAgIFB5X0RFQ1JFRihhcmdz KTsKKy0gICAgcmV0dXJuIHJlc3VsdDsKKy19CistI2VuZGlmCisrICAvKiAiKHRyZWUgZnJhZ21l bnQpIjoxMQorKyAqICAgICAgICAgX19weXhfdW5waWNrbGVfUHJvcGVydHlfX3NldF9zdGF0ZSg8 UHJvcGVydHk+IF9fcHl4X3Jlc3VsdCwgX19weXhfc3RhdGUpCisrICogICAgIHJldHVybiBfX3B5 eF9yZXN1bHQKKysgKiBjZGVmIF9fcHl4X3VucGlja2xlX1Byb3BlcnR5X19zZXRfc3RhdGUoUHJv cGVydHkgX19weXhfcmVzdWx0LCB0dXBsZSBfX3B5eF9zdGF0ZSk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKysgKiAgICAgX19weXhfcmVzdWx0LmRhdGEgPSBfX3B5eF9zdGF0ZVswXTsg X19weXhfcmVzdWx0Lm5hbWUgPSBfX3B5eF9zdGF0ZVsxXQorKyAqICAgICBpZiBsZW4oX19weXhf c3RhdGUpID4gMiBhbmQgaGFzYXR0cihfX3B5eF9yZXN1bHQsICdfX2RpY3RfXycpOgorKyAqLwor KyAgX19weXhfdF82ID0gUHlDRnVuY3Rpb25fTmV3RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzEzX19weXhfdW5waWNrbGVfRXZlbnQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0 ZXJfbGlic19tcHYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigxLCAxLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworKyAgaWYgKFB5RGlj dF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19weXhfdW5waWNrbGVfRXZlbnQsIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9ERUNSRUYo X19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0vKiBQeUVyckZldGNoUmVzdG9yZSAqLwor LSNpZiBDWVRIT05fRkFTVF9USFJFQURfU1RBVEUKKy1zdGF0aWMgQ1lUSE9OX0lOTElORSB2b2lk IF9fUHl4X0VyclJlc3RvcmVJblN0YXRlKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlPYmplY3Qg KnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRiKSB7CistICAgIFB5T2JqZWN0ICp0 bXBfdHlwZSwgKnRtcF92YWx1ZSwgKnRtcF90YjsKKy0gICAgdG1wX3R5cGUgPSB0c3RhdGUtPmN1 cmV4Y190eXBlOworLSAgICB0bXBfdmFsdWUgPSB0c3RhdGUtPmN1cmV4Y192YWx1ZTsKKy0gICAg dG1wX3RiID0gdHN0YXRlLT5jdXJleGNfdHJhY2ViYWNrOworLSAgICB0c3RhdGUtPmN1cmV4Y190 eXBlID0gdHlwZTsKKy0gICAgdHN0YXRlLT5jdXJleGNfdmFsdWUgPSB2YWx1ZTsKKy0gICAgdHN0 YXRlLT5jdXJleGNfdHJhY2ViYWNrID0gdGI7CistICAgIFB5X1hERUNSRUYodG1wX3R5cGUpOwor LSAgICBQeV9YREVDUkVGKHRtcF92YWx1ZSk7CistICAgIFB5X1hERUNSRUYodG1wX3RiKTsKKy19 Cistc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9FcnJGZXRjaEluU3RhdGUoUHlUaHJl YWRTdGF0ZSAqdHN0YXRlLCBQeU9iamVjdCAqKnR5cGUsIFB5T2JqZWN0ICoqdmFsdWUsIFB5T2Jq ZWN0ICoqdGIpIHsKKy0gICAgKnR5cGUgPSB0c3RhdGUtPmN1cmV4Y190eXBlOworLSAgICAqdmFs dWUgPSB0c3RhdGUtPmN1cmV4Y192YWx1ZTsKKy0gICAgKnRiID0gdHN0YXRlLT5jdXJleGNfdHJh Y2ViYWNrOworLSAgICB0c3RhdGUtPmN1cmV4Y190eXBlID0gMDsKKy0gICAgdHN0YXRlLT5jdXJl eGNfdmFsdWUgPSAwOworLSAgICB0c3RhdGUtPmN1cmV4Y190cmFjZWJhY2sgPSAwOworLX0KKy0j ZW5kaWYKKysgIC8qICIodHJlZSBmcmFnbWVudCkiOjEKKysgKiBkZWYgX19weXhfdW5waWNrbGVf UmVuZGVyRnJhbWVJbmZvKF9fcHl4X3R5cGUsIGxvbmcgX19weXhfY2hlY2tzdW0sIF9fcHl4X3N0 YXRlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorKyAqICAgICBjZGVmIG9iamVjdCBf X3B5eF9QaWNrbGVFcnJvcgorKyAqICAgICBjZGVmIG9iamVjdCBfX3B5eF9yZXN1bHQKKysgKi8K KysgIF9fcHl4X3RfNiA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNV9fcHl4X3VucGlja2xlX1JlbmRlckZyYW1lSW5mbywgTlVMTCwgX19weXhf bl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDEsIDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cisr ICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3B5eF91bnBpY2tsZV9SZW5k ZXJGcmFtZUluZm8sIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMSwgMSwgX19weXhfTDFfZXJy b3IpCisrICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0vKiBH ZXRBdHRyICovCistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9fUHl4X0dldEF0dHIo UHlPYmplY3QgKm8sIFB5T2JqZWN0ICpuKSB7CistI2lmIENZVEhPTl9VU0VfVFlQRV9TTE9UUwor LSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgaWYgKGxpa2VseShQeVVuaWNvZGVfQ2hl Y2sobikpKQorLSNlbHNlCistICAgIGlmIChsaWtlbHkoUHlTdHJpbmdfQ2hlY2sobikpKQorLSNl bmRpZgorLSAgICAgICAgcmV0dXJuIF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIobywgbik7Cist I2VuZGlmCistICAgIHJldHVybiBQeU9iamVjdF9HZXRBdHRyKG8sIG4pOworLX0KKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxCisrICogIyBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisrICogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAqICMgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KysgKi8KKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBf X3B5eF9uX3NfdGVzdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLS8q IEdldEF0dHIzICovCistc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9HZXRBdHRyM0RlZmF1bHQoUHlP YmplY3QgKmQpIHsKKy0gICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9kZWNsYXJlCistICAgIF9fUHl4 X1B5VGhyZWFkU3RhdGVfYXNzaWduCistICAgIGlmICh1bmxpa2VseSghX19QeXhfUHlFcnJfRXhj ZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpKQorLSAgICAgICAgcmV0dXJuIE5V TEw7CistICAgIF9fUHl4X1B5RXJyX0NsZWFyKCk7CistICAgIFB5X0lOQ1JFRihkKTsKKy0gICAg cmV0dXJuIGQ7CisrICAvKi0tLSBXcmFwcGVkIHZhcnMgY29kZSAtLS0qLworKworKyAgZ290byBf X3B5eF9MMDsKKysgIF9fcHl4X0wxX2Vycm9yOjsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8x KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF8yKTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhf dF80KTsKKysgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsKKysgIF9fUHl4X1hERUNSRUYoX19w eXhfdF83KTsKKysgIGlmIChfX3B5eF9tKSB7CisrICAgIGlmIChfX3B5eF9kKSB7CisrICAgICAg X19QeXhfQWRkVHJhY2ViYWNrKCJpbml0IHZpZGN1dHRlci5saWJzLm1wdiIsIF9fcHl4X2NsaW5l bm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworKyAgICB9CisrICAgIFB5X0NMRUFS KF9fcHl4X20pOworKyAgfSBlbHNlIGlmICghUHlFcnJfT2NjdXJyZWQoKSkgeworKyAgICBQeUVy cl9TZXRTdHJpbmcoUHlFeGNfSW1wb3J0RXJyb3IsICJpbml0IHZpZGN1dHRlci5saWJzLm1wdiIp OworKyAgfQorKyAgX19weXhfTDA6OworKyAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7 CisrICAjaWYgQ1lUSE9OX1BFUDQ4OV9NVUxUSV9QSEFTRV9JTklUCisrICByZXR1cm4gKF9fcHl4 X20gIT0gTlVMTCkgPyAwIDogLTE7CisrICAjZWxpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysg IHJldHVybiBfX3B5eF9tOworKyAgI2Vsc2UKKysgIHJldHVybjsKKysgICNlbmRpZgorIH0KKy1z dGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCAqX19QeXhfR2V0QXR0cjMoUHlPYmplY3QgKm8s IFB5T2JqZWN0ICpuLCBQeU9iamVjdCAqZCkgeworLSAgICBQeU9iamVjdCAqciA9IF9fUHl4X0dl dEF0dHIobywgbik7CistICAgIHJldHVybiAobGlrZWx5KHIpKSA/IHIgOiBfX1B5eF9HZXRBdHRy M0RlZmF1bHQoZCk7CisrCisrLyogLS0tIFJ1bnRpbWUgc3VwcG9ydCBjb2RlIC0tLSAqLworKy8q IFJlZm5hbm55ICovCisrI2lmIENZVEhPTl9SRUZOQU5OWQorK3N0YXRpYyBfX1B5eF9SZWZOYW5u eUFQSVN0cnVjdCAqX19QeXhfUmVmTmFubnlJbXBvcnRBUEkoY29uc3QgY2hhciAqbW9kbmFtZSkg eworKyAgICBQeU9iamVjdCAqbSA9IE5VTEwsICpwID0gTlVMTDsKKysgICAgdm9pZCAqciA9IE5V TEw7CisrICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUobW9kbmFtZSk7CisrICAgIGlmICgh bSkgZ290byBlbmQ7CisrICAgIHAgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG0sICJSZWZOYW5u eUFQSSIpOworKyAgICBpZiAoIXApIGdvdG8gZW5kOworKyAgICByID0gUHlMb25nX0FzVm9pZFB0 cihwKTsKKytlbmQ6CisrICAgIFB5X1hERUNSRUYocCk7CisrICAgIFB5X1hERUNSRUYobSk7Cisr ICAgIHJldHVybiAoX19QeXhfUmVmTmFubnlBUElTdHJ1Y3QgKilyOworIH0KKysjZW5kaWYKKyAK Ky0vKiBQeU9iamVjdENhbGwyQXJncyAqLworLXN0YXRpYyBDWVRIT05fVU5VU0VEIFB5T2JqZWN0 KiBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoUHlPYmplY3QqIGZ1bmN0aW9uLCBQeU9iamVjdCog YXJnMSwgUHlPYmplY3QqIGFyZzIpIHsKKy0gICAgUHlPYmplY3QgKmFyZ3MsICpyZXN1bHQgPSBO VUxMOworLSAgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCistICAgIGlmIChQeUZ1bmN0aW9uX0No ZWNrKGZ1bmN0aW9uKSkgeworLSAgICAgICAgUHlPYmplY3QgKmFyZ3NbMl0gPSB7YXJnMSwgYXJn Mn07CistICAgICAgICByZXR1cm4gX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChmdW5jdGlvbiwg YXJncywgMik7CistICAgIH0KKy0gICAgI2VuZGlmCistICAgICNpZiBDWVRIT05fRkFTVF9QWUND QUxMCistICAgIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2soZnVuY3Rpb24pKSB7Cist ICAgICAgICBQeU9iamVjdCAqYXJnc1syXSA9IHthcmcxLCBhcmcyfTsKKy0gICAgICAgIHJldHVy biBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChmdW5jdGlvbiwgYXJncywgMik7CistICAgIH0K Ky0gICAgI2VuZGlmCistICAgIGFyZ3MgPSBQeVR1cGxlX05ldygyKTsKKy0gICAgaWYgKHVubGlr ZWx5KCFhcmdzKSkgZ290byBkb25lOworLSAgICBQeV9JTkNSRUYoYXJnMSk7CistICAgIFB5VHVw bGVfU0VUX0lURU0oYXJncywgMCwgYXJnMSk7CistICAgIFB5X0lOQ1JFRihhcmcyKTsKKy0gICAg UHlUdXBsZV9TRVRfSVRFTShhcmdzLCAxLCBhcmcyKTsKKy0gICAgUHlfSU5DUkVGKGZ1bmN0aW9u KTsKKy0gICAgcmVzdWx0ID0gX19QeXhfUHlPYmplY3RfQ2FsbChmdW5jdGlvbiwgYXJncywgTlVM TCk7CistICAgIFB5X0RFQ1JFRihhcmdzKTsKKy0gICAgUHlfREVDUkVGKGZ1bmN0aW9uKTsKKy1k b25lOgorLSAgICByZXR1cm4gcmVzdWx0OworKy8qIFB5T2JqZWN0R2V0QXR0clN0ciAqLworKyNp ZiBDWVRIT05fVVNFX1RZUEVfU0xPVFMKKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCog X19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihQeU9iamVjdCogb2JqLCBQeU9iamVjdCogYXR0cl9u YW1lKSB7CisrICAgIFB5VHlwZU9iamVjdCogdHAgPSBQeV9UWVBFKG9iaik7CisrICAgIGlmIChs aWtlbHkodHAtPnRwX2dldGF0dHJvKSkKKysgICAgICAgIHJldHVybiB0cC0+dHBfZ2V0YXR0cm8o b2JqLCBhdHRyX25hbWUpOworKyNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworKyAgICBpZiAobGlr ZWx5KHRwLT50cF9nZXRhdHRyKSkKKysgICAgICAgIHJldHVybiB0cC0+dHBfZ2V0YXR0cihvYmos IFB5U3RyaW5nX0FTX1NUUklORyhhdHRyX25hbWUpKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIFB5 T2JqZWN0X0dldEF0dHIob2JqLCBhdHRyX25hbWUpOworIH0KKy0KKy0vKiBQeU9iamVjdEdldE1l dGhvZCAqLworLXN0YXRpYyBpbnQgX19QeXhfUHlPYmplY3RfR2V0TWV0aG9kKFB5T2JqZWN0ICpv YmosIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqKm1ldGhvZCkgeworLSAgICBQeU9iamVjdCAq YXR0cjsKKy0jaWYgQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIENZVEhPTl9DT01QSUxJTkdfSU5f Q1BZVEhPTiAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVAKKy0gICAgUHlUeXBlT2JqZWN0ICp0 cCA9IFB5X1RZUEUob2JqKTsKKy0gICAgUHlPYmplY3QgKmRlc2NyOworLSAgICBkZXNjcmdldGZ1 bmMgZiA9IE5VTEw7CistICAgIFB5T2JqZWN0ICoqZGljdHB0ciwgKmRpY3Q7CistICAgIGludCBt ZXRoX2ZvdW5kID0gMDsKKy0gICAgYXNzZXJ0ICgqbWV0aG9kID09IE5VTEwpOworLSAgICBpZiAo dW5saWtlbHkodHAtPnRwX2dldGF0dHJvICE9IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgewor LSAgICAgICAgYXR0ciA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIob2JqLCBuYW1lKTsKKy0g ICAgICAgIGdvdG8gdHJ5X3VucGFjazsKKy0gICAgfQorLSAgICBpZiAodW5saWtlbHkodHAtPnRw X2RpY3QgPT0gTlVMTCkgJiYgdW5saWtlbHkoUHlUeXBlX1JlYWR5KHRwKSA8IDApKSB7CistICAg ICAgICByZXR1cm4gMDsKKy0gICAgfQorLSAgICBkZXNjciA9IF9QeVR5cGVfTG9va3VwKHRwLCBu YW1lKTsKKy0gICAgaWYgKGxpa2VseShkZXNjciAhPSBOVUxMKSkgeworLSAgICAgICAgUHlfSU5D UkVGKGRlc2NyKTsKKy0jaWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICAgICAgICAjaWZkZWYg X19QeXhfQ3lGdW5jdGlvbl9VU0VECistICAgICAgICBpZiAobGlrZWx5KFB5RnVuY3Rpb25fQ2hl Y2soZGVzY3IpIHx8IChQeV9UWVBFKGRlc2NyKSA9PSAmUHlNZXRob2REZXNjcl9UeXBlKSB8fCBf X1B5eF9DeUZ1bmN0aW9uX0NoZWNrKGRlc2NyKSkpCistICAgICAgICAjZWxzZQorLSAgICAgICAg aWYgKGxpa2VseShQeUZ1bmN0aW9uX0NoZWNrKGRlc2NyKSB8fCAoUHlfVFlQRShkZXNjcikgPT0g JlB5TWV0aG9kRGVzY3JfVHlwZSkpKQorLSAgICAgICAgI2VuZGlmCistI2Vsc2UKKy0gICAgICAg ICNpZmRlZiBfX1B5eF9DeUZ1bmN0aW9uX1VTRUQKKy0gICAgICAgIGlmIChsaWtlbHkoUHlGdW5j dGlvbl9DaGVjayhkZXNjcikgfHwgX19QeXhfQ3lGdW5jdGlvbl9DaGVjayhkZXNjcikpKQorLSAg ICAgICAgI2Vsc2UKKy0gICAgICAgIGlmIChsaWtlbHkoUHlGdW5jdGlvbl9DaGVjayhkZXNjcikp KQorLSAgICAgICAgI2VuZGlmCisgI2VuZGlmCistICAgICAgICB7CistICAgICAgICAgICAgbWV0 aF9mb3VuZCA9IDE7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIGYgPSBQeV9UWVBF KGRlc2NyKS0+dHBfZGVzY3JfZ2V0OworLSAgICAgICAgICAgIGlmIChmICE9IE5VTEwgJiYgUHlE ZXNjcl9Jc0RhdGEoZGVzY3IpKSB7CistICAgICAgICAgICAgICAgIGF0dHIgPSBmKGRlc2NyLCBv YmosIChQeU9iamVjdCAqKVB5X1RZUEUob2JqKSk7CistICAgICAgICAgICAgICAgIFB5X0RFQ1JF RihkZXNjcik7CistICAgICAgICAgICAgICAgIGdvdG8gdHJ5X3VucGFjazsKKy0gICAgICAgICAg ICB9CistICAgICAgICB9CistICAgIH0KKy0gICAgZGljdHB0ciA9IF9QeU9iamVjdF9HZXREaWN0 UHRyKG9iaik7CistICAgIGlmIChkaWN0cHRyICE9IE5VTEwgJiYgKGRpY3QgPSAqZGljdHB0cikg IT0gTlVMTCkgeworLSAgICAgICAgUHlfSU5DUkVGKGRpY3QpOworLSAgICAgICAgYXR0ciA9IF9f UHl4X1B5RGljdF9HZXRJdGVtU3RyKGRpY3QsIG5hbWUpOworLSAgICAgICAgaWYgKGF0dHIgIT0g TlVMTCkgeworLSAgICAgICAgICAgIFB5X0lOQ1JFRihhdHRyKTsKKy0gICAgICAgICAgICBQeV9E RUNSRUYoZGljdCk7CistICAgICAgICAgICAgUHlfWERFQ1JFRihkZXNjcik7CistICAgICAgICAg ICAgZ290byB0cnlfdW5wYWNrOworLSAgICAgICAgfQorLSAgICAgICAgUHlfREVDUkVGKGRpY3Qp OworLSAgICB9CistICAgIGlmIChtZXRoX2ZvdW5kKSB7CistICAgICAgICAqbWV0aG9kID0gZGVz Y3I7CistICAgICAgICByZXR1cm4gMTsKKy0gICAgfQorLSAgICBpZiAoZiAhPSBOVUxMKSB7Cist ICAgICAgICBhdHRyID0gZihkZXNjciwgb2JqLCAoUHlPYmplY3QgKilQeV9UWVBFKG9iaikpOwor LSAgICAgICAgUHlfREVDUkVGKGRlc2NyKTsKKy0gICAgICAgIGdvdG8gdHJ5X3VucGFjazsKKy0g ICAgfQorLSAgICBpZiAoZGVzY3IgIT0gTlVMTCkgeworLSAgICAgICAgKm1ldGhvZCA9IGRlc2Ny OworLSAgICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0 dHJpYnV0ZUVycm9yLAorKworKy8qIEdldEJ1aWx0aW5OYW1lICovCisrc3RhdGljIFB5T2JqZWN0 ICpfX1B5eF9HZXRCdWlsdGluTmFtZShQeU9iamVjdCAqbmFtZSkgeworKyAgICBQeU9iamVjdCog cmVzdWx0ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF9iLCBuYW1lKTsKKysgICAg aWYgKHVubGlrZWx5KCFyZXN1bHQpKSB7CisrICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTmFt ZUVycm9yLAorICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgICAgICAgICAgICAgICIn JS41MHMnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICclVSciLAorLSAgICAgICAgICAgICAgICAg dHAtPnRwX25hbWUsIG5hbWUpOworLSNlbHNlCistICAgICAgICAgICAgICAgICAiJyUuNTBzJyBv YmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnJS40MDBzJyIsCistICAgICAgICAgICAgICAgICB0cC0+ dHBfbmFtZSwgUHlTdHJpbmdfQVNfU1RSSU5HKG5hbWUpKTsKKy0jZW5kaWYKKy0gICAgcmV0dXJu IDA7CisrICAgICAgICAgICAgIm5hbWUgJyVVJyBpcyBub3QgZGVmaW5lZCIsIG5hbWUpOworICNl bHNlCistICAgIGF0dHIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG9iaiwgbmFtZSk7Cist ICAgIGdvdG8gdHJ5X3VucGFjazsKKysgICAgICAgICAgICAibmFtZSAnJS4yMDBzJyBpcyBub3Qg ZGVmaW5lZCIsIFB5U3RyaW5nX0FTX1NUUklORyhuYW1lKSk7CisgI2VuZGlmCistdHJ5X3VucGFj azoKKy0jaWYgQ1lUSE9OX1VOUEFDS19NRVRIT0RTCistICAgIGlmIChsaWtlbHkoYXR0cikgJiYg UHlNZXRob2RfQ2hlY2soYXR0cikgJiYgbGlrZWx5KFB5TWV0aG9kX0dFVF9TRUxGKGF0dHIpID09 IG9iaikpIHsKKy0gICAgICAgIFB5T2JqZWN0ICpmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5D VElPTihhdHRyKTsKKy0gICAgICAgIFB5X0lOQ1JFRihmdW5jdGlvbik7CistICAgICAgICBQeV9E RUNSRUYoYXR0cik7CistICAgICAgICAqbWV0aG9kID0gZnVuY3Rpb247CistICAgICAgICByZXR1 cm4gMTsKKyAgICAgfQorLSNlbmRpZgorLSAgICAqbWV0aG9kID0gYXR0cjsKKy0gICAgcmV0dXJu IDA7CistfQorLQorLS8qIFB5T2JqZWN0Q2FsbE1ldGhvZDEgKi8KKy1zdGF0aWMgUHlPYmplY3Qq IF9fUHl4X19QeU9iamVjdF9DYWxsTWV0aG9kMShQeU9iamVjdCogbWV0aG9kLCBQeU9iamVjdCog YXJnKSB7CistICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KG1ldGhvZCwgYXJnKTsKKy0gICAgUHlfREVDUkVGKG1ldGhvZCk7CisgICAgIHJldHVybiByZXN1 bHQ7CisgfQorLXN0YXRpYyBQeU9iamVjdCogX19QeXhfUHlPYmplY3RfQ2FsbE1ldGhvZDEoUHlP YmplY3QqIG9iaiwgUHlPYmplY3QqIG1ldGhvZF9uYW1lLCBQeU9iamVjdCogYXJnKSB7CistICAg IFB5T2JqZWN0ICptZXRob2QgPSBOVUxMLCAqcmVzdWx0OworLSAgICBpbnQgaXNfbWV0aG9kID0g X19QeXhfUHlPYmplY3RfR2V0TWV0aG9kKG9iaiwgbWV0aG9kX25hbWUsICZtZXRob2QpOworLSAg ICBpZiAobGlrZWx5KGlzX21ldGhvZCkpIHsKKy0gICAgICAgIHJlc3VsdCA9IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhtZXRob2QsIG9iaiwgYXJnKTsKKy0gICAgICAgIFB5X0RFQ1JFRihtZXRo b2QpOworLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKy0gICAgfQorLSAgICBpZiAodW5saWtlbHko IW1ldGhvZCkpIHJldHVybiBOVUxMOworLSAgICByZXR1cm4gX19QeXhfX1B5T2JqZWN0X0NhbGxN ZXRob2QxKG1ldGhvZCwgYXJnKTsKKy19CisgCistLyogYXBwZW5kICovCistc3RhdGljIENZVEhP Tl9JTkxJTkUgaW50IF9fUHl4X1B5T2JqZWN0X0FwcGVuZChQeU9iamVjdCogTCwgUHlPYmplY3Qq IHgpIHsKKy0gICAgaWYgKGxpa2VseShQeUxpc3RfQ2hlY2tFeGFjdChMKSkpIHsKKy0gICAgICAg IGlmICh1bmxpa2VseShfX1B5eF9QeUxpc3RfQXBwZW5kKEwsIHgpIDwgMCkpIHJldHVybiAtMTsK Ky0gICAgfSBlbHNlIHsKKy0gICAgICAgIFB5T2JqZWN0KiByZXR2YWwgPSBfX1B5eF9QeU9iamVj dF9DYWxsTWV0aG9kMShMLCBfX3B5eF9uX3NfYXBwZW5kLCB4KTsKKy0gICAgICAgIGlmICh1bmxp a2VseSghcmV0dmFsKSkKKy0gICAgICAgICAgICByZXR1cm4gLTE7CistICAgICAgICBQeV9ERUNS RUYocmV0dmFsKTsKKy0gICAgfQorLSAgICByZXR1cm4gMDsKKysvKiBQeURpY3RWZXJzaW9uaW5n ICovCisrI2lmIENZVEhPTl9VU0VfRElDVF9WRVJTSU9OUyAmJiBDWVRIT05fVVNFX1RZUEVfU0xP VFMKKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQWV9VSU5UNjRfVCBfX1B5eF9nZXRfdHBfZGljdF92 ZXJzaW9uKFB5T2JqZWN0ICpvYmopIHsKKysgICAgUHlPYmplY3QgKmRpY3QgPSBQeV9UWVBFKG9i aiktPnRwX2RpY3Q7CisrICAgIHJldHVybiBsaWtlbHkoZGljdCkgPyBfX1BZWF9HRVRfRElDVF9W RVJTSU9OKGRpY3QpIDogMDsKKyB9CistCistLyogUHlPYmplY3RDYWxsTm9BcmcgKi8KKytzdGF0 aWMgQ1lUSE9OX0lOTElORSBQWV9VSU5UNjRfVCBfX1B5eF9nZXRfb2JqZWN0X2RpY3RfdmVyc2lv bihQeU9iamVjdCAqb2JqKSB7CisrICAgIFB5T2JqZWN0ICoqZGljdHB0ciA9IE5VTEw7CisrICAg IFB5X3NzaXplX3Qgb2Zmc2V0ID0gUHlfVFlQRShvYmopLT50cF9kaWN0b2Zmc2V0OworKyAgICBp ZiAob2Zmc2V0KSB7CisgI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTgorLXN0YXRpYyBD WVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoUHlPYmplY3Qg KmZ1bmMpIHsKKy0jaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCistICAgIGlmIChQeUZ1bmN0aW9uX0No ZWNrKGZ1bmMpKSB7CistICAgICAgICByZXR1cm4gX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChm dW5jLCBOVUxMLCAwKTsKKy0gICAgfQorLSNlbmRpZgorLSNpZmRlZiBfX1B5eF9DeUZ1bmN0aW9u X1VTRUQKKy0gICAgaWYgKGxpa2VseShQeUNGdW5jdGlvbl9DaGVjayhmdW5jKSB8fCBfX1B5eF9D eUZ1bmN0aW9uX0NoZWNrKGZ1bmMpKSkKKysgICAgICAgIGRpY3RwdHIgPSAobGlrZWx5KG9mZnNl dCA+IDApKSA/IChQeU9iamVjdCAqKikgKChjaGFyICopb2JqICsgb2Zmc2V0KSA6IF9QeU9iamVj dF9HZXREaWN0UHRyKG9iaik7CisgI2Vsc2UKKy0gICAgaWYgKGxpa2VseShQeUNGdW5jdGlvbl9D aGVjayhmdW5jKSkpCisrICAgICAgICBkaWN0cHRyID0gX1B5T2JqZWN0X0dldERpY3RQdHIob2Jq KTsKKyAjZW5kaWYKKy0gICAgeworLSAgICAgICAgaWYgKGxpa2VseShQeUNGdW5jdGlvbl9HRVRf RkxBR1MoZnVuYykgJiBNRVRIX05PQVJHUykpIHsKKy0gICAgICAgICAgICByZXR1cm4gX19QeXhf UHlPYmplY3RfQ2FsbE1ldGhPKGZ1bmMsIE5VTEwpOworLSAgICAgICAgfQorICAgICB9CistICAg IHJldHVybiBfX1B5eF9QeU9iamVjdF9DYWxsKGZ1bmMsIF9fcHl4X2VtcHR5X3R1cGxlLCBOVUxM KTsKKysgICAgcmV0dXJuIChkaWN0cHRyICYmICpkaWN0cHRyKSA/IF9fUFlYX0dFVF9ESUNUX1ZF UlNJT04oKmRpY3RwdHIpIDogMDsKKyt9Cisrc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4 X29iamVjdF9kaWN0X3ZlcnNpb25fbWF0Y2hlcyhQeU9iamVjdCogb2JqLCBQWV9VSU5UNjRfVCB0 cF9kaWN0X3ZlcnNpb24sIFBZX1VJTlQ2NF9UIG9ial9kaWN0X3ZlcnNpb24pIHsKKysgICAgUHlP YmplY3QgKmRpY3QgPSBQeV9UWVBFKG9iaiktPnRwX2RpY3Q7CisrICAgIGlmICh1bmxpa2VseSgh ZGljdCkgfHwgdW5saWtlbHkodHBfZGljdF92ZXJzaW9uICE9IF9fUFlYX0dFVF9ESUNUX1ZFUlNJ T04oZGljdCkpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiBvYmpfZGljdF92ZXJz aW9uID09IF9fUHl4X2dldF9vYmplY3RfZGljdF92ZXJzaW9uKG9iaik7CisgfQorICNlbmRpZgor IAorLS8qIEdldEl0ZW1JbnQgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fUHl4X0dldEl0ZW1JbnRf R2VuZXJpYyhQeU9iamVjdCAqbywgUHlPYmplY3QqIGopIHsKKy0gICAgUHlPYmplY3QgKnI7Cist ICAgIGlmICghaikgcmV0dXJuIE5VTEw7CistICAgIHIgPSBQeU9iamVjdF9HZXRJdGVtKG8sIGop OworLSAgICBQeV9ERUNSRUYoaik7CistICAgIHJldHVybiByOworLX0KKy1zdGF0aWMgQ1lUSE9O X0lOTElORSBQeU9iamVjdCAqX19QeXhfR2V0SXRlbUludF9MaXN0X0Zhc3QoUHlPYmplY3QgKm8s IFB5X3NzaXplX3QgaSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENZVEhPTl9OQ1BfVU5VU0VEIGludCB3cmFwYXJvdW5kLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ1lUSE9OX05DUF9VTlVTRUQgaW50IGJvdW5kc2NoZWNrKSB7CistI2lmIENZVEhPTl9B U1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCistICAgIFB5 X3NzaXplX3Qgd3JhcHBlZF9pID0gaTsKKy0gICAgaWYgKHdyYXBhcm91bmQgJiB1bmxpa2VseShp IDwgMCkpIHsKKy0gICAgICAgIHdyYXBwZWRfaSArPSBQeUxpc3RfR0VUX1NJWkUobyk7CisrLyog R2V0TW9kdWxlR2xvYmFsTmFtZSAqLworKyNpZiBDWVRIT05fVVNFX0RJQ1RfVkVSU0lPTlMKKytz dGF0aWMgUHlPYmplY3QgKl9fUHl4X19HZXRNb2R1bGVHbG9iYWxOYW1lKFB5T2JqZWN0ICpuYW1l LCBQWV9VSU5UNjRfVCAqZGljdF92ZXJzaW9uLCBQeU9iamVjdCAqKmRpY3RfY2FjaGVkX3ZhbHVl KQorKyNlbHNlCisrc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9fUHl4X19HZXRNb2R1 bGVHbG9iYWxOYW1lKFB5T2JqZWN0ICpuYW1lKQorKyNlbmRpZgorK3sKKysgICAgUHlPYmplY3Qg KnJlc3VsdDsKKysjaWYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCisrI2lmIENZVEhPTl9D T01QSUxJTkdfSU5fQ1BZVEhPTiAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDUwMEExCisrICAg IHJlc3VsdCA9IF9QeURpY3RfR2V0SXRlbV9Lbm93bkhhc2goX19weXhfZCwgbmFtZSwgKChQeUFT Q0lJT2JqZWN0ICopIG5hbWUpLT5oYXNoKTsKKysgICAgX19QWVhfVVBEQVRFX0RJQ1RfQ0FDSEUo X19weXhfZCwgcmVzdWx0LCAqZGljdF9jYWNoZWRfdmFsdWUsICpkaWN0X3ZlcnNpb24pCisrICAg IGlmIChsaWtlbHkocmVzdWx0KSkgeworKyAgICAgICAgcmV0dXJuIF9fUHl4X05ld1JlZihyZXN1 bHQpOworKyAgICB9IGVsc2UgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSB7CisrICAg ICAgICByZXR1cm4gTlVMTDsKKyAgICAgfQorLSAgICBpZiAoKCFib3VuZHNjaGVjaykgfHwgbGlr ZWx5KF9fUHl4X2lzX3ZhbGlkX2luZGV4KHdyYXBwZWRfaSwgUHlMaXN0X0dFVF9TSVpFKG8pKSkp IHsKKy0gICAgICAgIFB5T2JqZWN0ICpyID0gUHlMaXN0X0dFVF9JVEVNKG8sIHdyYXBwZWRfaSk7 CistICAgICAgICBQeV9JTkNSRUYocik7CistICAgICAgICByZXR1cm4gcjsKKysjZWxzZQorKyAg ICByZXN1bHQgPSBQeURpY3RfR2V0SXRlbShfX3B5eF9kLCBuYW1lKTsKKysgICAgX19QWVhfVVBE QVRFX0RJQ1RfQ0FDSEUoX19weXhfZCwgcmVzdWx0LCAqZGljdF9jYWNoZWRfdmFsdWUsICpkaWN0 X3ZlcnNpb24pCisrICAgIGlmIChsaWtlbHkocmVzdWx0KSkgeworKyAgICAgICAgcmV0dXJuIF9f UHl4X05ld1JlZihyZXN1bHQpOworKyAgICB9CisrI2VuZGlmCisrI2Vsc2UKKysgICAgcmVzdWx0 ID0gUHlPYmplY3RfR2V0SXRlbShfX3B5eF9kLCBuYW1lKTsKKysgICAgX19QWVhfVVBEQVRFX0RJ Q1RfQ0FDSEUoX19weXhfZCwgcmVzdWx0LCAqZGljdF9jYWNoZWRfdmFsdWUsICpkaWN0X3ZlcnNp b24pCisrICAgIGlmIChsaWtlbHkocmVzdWx0KSkgeworKyAgICAgICAgcmV0dXJuIF9fUHl4X05l d1JlZihyZXN1bHQpOworICAgICB9CistICAgIHJldHVybiBfX1B5eF9HZXRJdGVtSW50X0dlbmVy aWMobywgUHlJbnRfRnJvbVNzaXplX3QoaSkpOworLSNlbHNlCistICAgIHJldHVybiBQeVNlcXVl bmNlX0dldEl0ZW0obywgaSk7CisrICAgIFB5RXJyX0NsZWFyKCk7CisgI2VuZGlmCisrICAgIHJl dHVybiBfX1B5eF9HZXRCdWlsdGluTmFtZShuYW1lKTsKKyB9Cistc3RhdGljIENZVEhPTl9JTkxJ TkUgUHlPYmplY3QgKl9fUHl4X0dldEl0ZW1JbnRfVHVwbGVfRmFzdChQeU9iamVjdCAqbywgUHlf c3NpemVfdCBpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ1lUSE9OX05DUF9VTlVTRUQgaW50IHdyYXBhcm91bmQsCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDWVRIT05fTkNQX1VOVVNFRCBpbnQgYm91bmRzY2hlY2spIHsKKy0jaWYgQ1lUSE9OX0FTU1VN RV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMKKy0gICAgUHlfc3Np emVfdCB3cmFwcGVkX2kgPSBpOworLSAgICBpZiAod3JhcGFyb3VuZCAmIHVubGlrZWx5KGkgPCAw KSkgeworLSAgICAgICAgd3JhcHBlZF9pICs9IFB5VHVwbGVfR0VUX1NJWkUobyk7CisrCisrLyog UHlGdW5jdGlvbkZhc3RDYWxsICovCisrI2lmIENZVEhPTl9GQVNUX1BZQ0FMTAorK3N0YXRpYyBQ eU9iamVjdCogX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbE5vS3coUHlDb2RlT2JqZWN0ICpjbywg UHlPYmplY3QgKiphcmdzLCBQeV9zc2l6ZV90IG5hLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmdsb2JhbHMpIHsKKysgICAgUHlGcmFt ZU9iamVjdCAqZjsKKysgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gX19QeXhfUHlUaHJlYWRT dGF0ZV9DdXJyZW50OworKyAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHM7CisrICAgIFB5X3NzaXpl X3QgaTsKKysgICAgUHlPYmplY3QgKnJlc3VsdDsKKysgICAgYXNzZXJ0KGdsb2JhbHMgIT0gTlVM TCk7CisrICAgIC8qIFhYWCBQZXJoYXBzIHdlIHNob3VsZCBjcmVhdGUgYSBzcGVjaWFsaXplZAor KyAgICAgICBQeUZyYW1lX05ldygpIHRoYXQgZG9lc24ndCB0YWtlIGxvY2FscywgYnV0IGRvZXMK KysgICAgICAgdGFrZSBidWlsdGlucyB3aXRob3V0IHNhbml0eSBjaGVja2luZyB0aGVtLgorKyAg ICAgICAqLworKyAgICBhc3NlcnQodHN0YXRlICE9IE5VTEwpOworKyAgICBmID0gUHlGcmFtZV9O ZXcodHN0YXRlLCBjbywgZ2xvYmFscywgTlVMTCk7CisrICAgIGlmIChmID09IE5VTEwpIHsKKysg ICAgICAgIHJldHVybiBOVUxMOworICAgICB9CistICAgIGlmICgoIWJvdW5kc2NoZWNrKSB8fCBs aWtlbHkoX19QeXhfaXNfdmFsaWRfaW5kZXgod3JhcHBlZF9pLCBQeVR1cGxlX0dFVF9TSVpFKG8p KSkpIHsKKy0gICAgICAgIFB5T2JqZWN0ICpyID0gUHlUdXBsZV9HRVRfSVRFTShvLCB3cmFwcGVk X2kpOworLSAgICAgICAgUHlfSU5DUkVGKHIpOworLSAgICAgICAgcmV0dXJuIHI7CisrICAgIGZh c3Rsb2NhbHMgPSBfX1B5eF9QeUZyYW1lX0dldExvY2Fsc3BsdXMoZik7CisrICAgIGZvciAoaSA9 IDA7IGkgPCBuYTsgaSsrKSB7CisrICAgICAgICBQeV9JTkNSRUYoKmFyZ3MpOworKyAgICAgICAg ZmFzdGxvY2Fsc1tpXSA9ICphcmdzKys7CisgICAgIH0KKy0gICAgcmV0dXJuIF9fUHl4X0dldEl0 ZW1JbnRfR2VuZXJpYyhvLCBQeUludF9Gcm9tU3NpemVfdChpKSk7CistI2Vsc2UKKy0gICAgcmV0 dXJuIFB5U2VxdWVuY2VfR2V0SXRlbShvLCBpKTsKKy0jZW5kaWYKKysgICAgcmVzdWx0ID0gUHlF dmFsX0V2YWxGcmFtZUV4KGYsMCk7CisrICAgICsrdHN0YXRlLT5yZWN1cnNpb25fZGVwdGg7Cisr ICAgIFB5X0RFQ1JFRihmKTsKKysgICAgLS10c3RhdGUtPnJlY3Vyc2lvbl9kZXB0aDsKKysgICAg cmV0dXJuIHJlc3VsdDsKKyB9Cistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9fUHl4 X0dldEl0ZW1JbnRfRmFzdChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBpLCBpbnQgaXNfbGlzdCwK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENZ VEhPTl9OQ1BfVU5VU0VEIGludCB3cmFwYXJvdW5kLAorLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX05DUF9VTlVTRUQgaW50IGJvdW5k c2NoZWNrKSB7CistI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9J RF9CT1JST1dFRF9SRUZTICYmIENZVEhPTl9VU0VfVFlQRV9TTE9UUworLSAgICBpZiAoaXNfbGlz dCB8fCBQeUxpc3RfQ2hlY2tFeGFjdChvKSkgeworLSAgICAgICAgUHlfc3NpemVfdCBuID0gKCgh d3JhcGFyb3VuZCkgfCBsaWtlbHkoaSA+PSAwKSkgPyBpIDogaSArIFB5TGlzdF9HRVRfU0laRShv KTsKKy0gICAgICAgIGlmICgoIWJvdW5kc2NoZWNrKSB8fCAobGlrZWx5KF9fUHl4X2lzX3ZhbGlk X2luZGV4KG4sIFB5TGlzdF9HRVRfU0laRShvKSkpKSkgeworLSAgICAgICAgICAgIFB5T2JqZWN0 ICpyID0gUHlMaXN0X0dFVF9JVEVNKG8sIG4pOworLSAgICAgICAgICAgIFB5X0lOQ1JFRihyKTsK Ky0gICAgICAgICAgICByZXR1cm4gcjsKKysjaWYgMSB8fCBQWV9WRVJTSU9OX0hFWCA8IDB4MDMw NjAwQjEKKytzdGF0aWMgUHlPYmplY3QgKl9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGxEaWN0KFB5 T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqKmFyZ3MsIFB5X3NzaXplX3QgbmFyZ3MsIFB5T2JqZWN0 ICprd2FyZ3MpIHsKKysgICAgUHlDb2RlT2JqZWN0ICpjbyA9IChQeUNvZGVPYmplY3QgKilQeUZ1 bmN0aW9uX0dFVF9DT0RFKGZ1bmMpOworKyAgICBQeU9iamVjdCAqZ2xvYmFscyA9IFB5RnVuY3Rp b25fR0VUX0dMT0JBTFMoZnVuYyk7CisrICAgIFB5T2JqZWN0ICphcmdkZWZzID0gUHlGdW5jdGlv bl9HRVRfREVGQVVMVFMoZnVuYyk7CisrICAgIFB5T2JqZWN0ICpjbG9zdXJlOworKyNpZiBQWV9N QUpPUl9WRVJTSU9OID49IDMKKysgICAgUHlPYmplY3QgKmt3ZGVmczsKKysjZW5kaWYKKysgICAg UHlPYmplY3QgKmt3dHVwbGUsICoqazsKKysgICAgUHlPYmplY3QgKipkOworKyAgICBQeV9zc2l6 ZV90IG5kOworKyAgICBQeV9zc2l6ZV90IG5rOworKyAgICBQeU9iamVjdCAqcmVzdWx0OworKyAg ICBhc3NlcnQoa3dhcmdzID09IE5VTEwgfHwgUHlEaWN0X0NoZWNrKGt3YXJncykpOworKyAgICBu ayA9IGt3YXJncyA/IFB5RGljdF9TaXplKGt3YXJncykgOiAwOworKyAgICBpZiAoUHlfRW50ZXJS ZWN1cnNpdmVDYWxsKChjaGFyKikiIHdoaWxlIGNhbGxpbmcgYSBQeXRob24gb2JqZWN0IikpIHsK KysgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrICAgIGlmICgKKysjaWYgUFlfTUFKT1Jf VkVSU0lPTiA+PSAzCisrICAgICAgICAgICAgY28tPmNvX2t3b25seWFyZ2NvdW50ID09IDAgJiYK KysjZW5kaWYKKysgICAgICAgICAgICBsaWtlbHkoa3dhcmdzID09IE5VTEwgfHwgbmsgPT0gMCkg JiYKKysgICAgICAgICAgICBjby0+Y29fZmxhZ3MgPT0gKENPX09QVElNSVpFRCB8IENPX05FV0xP Q0FMUyB8IENPX05PRlJFRSkpIHsKKysgICAgICAgIGlmIChhcmdkZWZzID09IE5VTEwgJiYgY28t PmNvX2FyZ2NvdW50ID09IG5hcmdzKSB7CisrICAgICAgICAgICAgcmVzdWx0ID0gX19QeXhfUHlG dW5jdGlvbl9GYXN0Q2FsbE5vS3coY28sIGFyZ3MsIG5hcmdzLCBnbG9iYWxzKTsKKysgICAgICAg ICAgICBnb3RvIGRvbmU7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIGlmIChuYXJncyA9PSAw ICYmIGFyZ2RlZnMgIT0gTlVMTAorKyAgICAgICAgICAgICAgICAgJiYgY28tPmNvX2FyZ2NvdW50 ID09IFB5X1NJWkUoYXJnZGVmcykpIHsKKysgICAgICAgICAgICAvKiBmdW5jdGlvbiBjYWxsZWQg d2l0aCBubyBhcmd1bWVudHMsIGJ1dCBhbGwgcGFyYW1ldGVycyBoYXZlCisrICAgICAgICAgICAg ICAgYSBkZWZhdWx0IHZhbHVlOiB1c2UgZGVmYXVsdCB2YWx1ZXMgYXMgYXJndW1lbnRzIC4qLwor KyAgICAgICAgICAgIGFyZ3MgPSAmUHlUdXBsZV9HRVRfSVRFTShhcmdkZWZzLCAwKTsKKysgICAg ICAgICAgICByZXN1bHQgPV9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGxOb0t3KGNvLCBhcmdzLCBQ eV9TSVpFKGFyZ2RlZnMpLCBnbG9iYWxzKTsKKysgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAg ICAgICB9CisgICAgIH0KKy0gICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVja0V4YWN0KG8pKSB7Cist ICAgICAgICBQeV9zc2l6ZV90IG4gPSAoKCF3cmFwYXJvdW5kKSB8IGxpa2VseShpID49IDApKSA/ IGkgOiBpICsgUHlUdXBsZV9HRVRfU0laRShvKTsKKy0gICAgICAgIGlmICgoIWJvdW5kc2NoZWNr KSB8fCBsaWtlbHkoX19QeXhfaXNfdmFsaWRfaW5kZXgobiwgUHlUdXBsZV9HRVRfU0laRShvKSkp KSB7CistICAgICAgICAgICAgUHlPYmplY3QgKnIgPSBQeVR1cGxlX0dFVF9JVEVNKG8sIG4pOwor LSAgICAgICAgICAgIFB5X0lOQ1JFRihyKTsKKy0gICAgICAgICAgICByZXR1cm4gcjsKKysgICAg aWYgKGt3YXJncyAhPSBOVUxMKSB7CisrICAgICAgICBQeV9zc2l6ZV90IHBvcywgaTsKKysgICAg ICAgIGt3dHVwbGUgPSBQeVR1cGxlX05ldygyICogbmspOworKyAgICAgICAgaWYgKGt3dHVwbGUg PT0gTlVMTCkgeworKyAgICAgICAgICAgIHJlc3VsdCA9IE5VTEw7CisrICAgICAgICAgICAgZ290 byBkb25lOworICAgICAgICAgfQorLSAgICB9IGVsc2UgeworLSAgICAgICAgUHlTZXF1ZW5jZU1l dGhvZHMgKm0gPSBQeV9UWVBFKG8pLT50cF9hc19zZXF1ZW5jZTsKKy0gICAgICAgIGlmIChsaWtl bHkobSAmJiBtLT5zcV9pdGVtKSkgeworLSAgICAgICAgICAgIGlmICh3cmFwYXJvdW5kICYmIHVu bGlrZWx5KGkgPCAwKSAmJiBsaWtlbHkobS0+c3FfbGVuZ3RoKSkgeworLSAgICAgICAgICAgICAg ICBQeV9zc2l6ZV90IGwgPSBtLT5zcV9sZW5ndGgobyk7CistICAgICAgICAgICAgICAgIGlmIChs aWtlbHkobCA+PSAwKSkgeworLSAgICAgICAgICAgICAgICAgICAgaSArPSBsOworLSAgICAgICAg ICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRp b25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorLSAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBOVUxMOworLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKy0gICAg ICAgICAgICAgICAgfQorLSAgICAgICAgICAgIH0KKy0gICAgICAgICAgICByZXR1cm4gbS0+c3Ff aXRlbShvLCBpKTsKKysgICAgICAgIGsgPSAmUHlUdXBsZV9HRVRfSVRFTShrd3R1cGxlLCAwKTsK KysgICAgICAgIHBvcyA9IGkgPSAwOworKyAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KGt3YXJn cywgJnBvcywgJmtbaV0sICZrW2krMV0pKSB7CisrICAgICAgICAgICAgUHlfSU5DUkVGKGtbaV0p OworKyAgICAgICAgICAgIFB5X0lOQ1JFRihrW2krMV0pOworKyAgICAgICAgICAgIGkgKz0gMjsK KyAgICAgICAgIH0KKysgICAgICAgIG5rID0gaSAvIDI7CisgICAgIH0KKy0jZWxzZQorLSAgICBp ZiAoaXNfbGlzdCB8fCBQeVNlcXVlbmNlX0NoZWNrKG8pKSB7CistICAgICAgICByZXR1cm4gUHlT ZXF1ZW5jZV9HZXRJdGVtKG8sIGkpOworKyAgICBlbHNlIHsKKysgICAgICAgIGt3dHVwbGUgPSBO VUxMOworKyAgICAgICAgayA9IE5VTEw7CisgICAgIH0KKysgICAgY2xvc3VyZSA9IFB5RnVuY3Rp b25fR0VUX0NMT1NVUkUoZnVuYyk7CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMworKyAgICBr d2RlZnMgPSBQeUZ1bmN0aW9uX0dFVF9LV19ERUZBVUxUUyhmdW5jKTsKKyAjZW5kaWYKKy0gICAg cmV0dXJuIF9fUHl4X0dldEl0ZW1JbnRfR2VuZXJpYyhvLCBQeUludF9Gcm9tU3NpemVfdChpKSk7 CistfQorLQorLS8qIERlbEl0ZW1JbnQgKi8KKy1zdGF0aWMgaW50IF9fUHl4X0RlbEl0ZW1fR2Vu ZXJpYyhQeU9iamVjdCAqbywgUHlPYmplY3QgKmopIHsKKy0gICAgaW50IHI7CistICAgIGlmICgh aikgcmV0dXJuIC0xOworLSAgICByID0gUHlPYmplY3RfRGVsSXRlbShvLCBqKTsKKy0gICAgUHlf REVDUkVGKGopOworLSAgICByZXR1cm4gcjsKKy19Cistc3RhdGljIENZVEhPTl9JTkxJTkUgaW50 IF9fUHl4X0RlbEl0ZW1JbnRfRmFzdChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBpLAorLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX1VOVVNFRCBp bnQgaXNfbGlzdCwgQ1lUSE9OX05DUF9VTlVTRUQgaW50IHdyYXBhcm91bmQpIHsKKy0jaWYgIUNZ VEhPTl9VU0VfVFlQRV9TTE9UUworLSAgICBpZiAoaXNfbGlzdCB8fCBQeVNlcXVlbmNlX0NoZWNr KG8pKSB7CistICAgICAgICByZXR1cm4gUHlTZXF1ZW5jZV9EZWxJdGVtKG8sIGkpOworKyAgICBp ZiAoYXJnZGVmcyAhPSBOVUxMKSB7CisrICAgICAgICBkID0gJlB5VHVwbGVfR0VUX0lURU0oYXJn ZGVmcywgMCk7CisrICAgICAgICBuZCA9IFB5X1NJWkUoYXJnZGVmcyk7CisrICAgIH0KKysgICAg ZWxzZSB7CisrICAgICAgICBkID0gTlVMTDsKKysgICAgICAgIG5kID0gMDsKKyAgICAgfQorKyNp ZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgICAgcmVzdWx0ID0gUHlFdmFsX0V2YWxDb2RlRXgo KFB5T2JqZWN0KiljbywgZ2xvYmFscywgKFB5T2JqZWN0ICopTlVMTCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXJncywgKGludCluYXJncywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaywgKGludCluaywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZCwgKGludCluZCwga3dkZWZzLCBjbG9zdXJlKTsKKyAjZWxzZQorLSAgICBQeVNlcXVlbmNlTWV0 aG9kcyAqbSA9IFB5X1RZUEUobyktPnRwX2FzX3NlcXVlbmNlOworLSAgICBpZiAobGlrZWx5KG0g JiYgbS0+c3FfYXNzX2l0ZW0pKSB7CistICAgICAgICBpZiAod3JhcGFyb3VuZCAmJiB1bmxpa2Vs eShpIDwgMCkgJiYgbGlrZWx5KG0tPnNxX2xlbmd0aCkpIHsKKy0gICAgICAgICAgICBQeV9zc2l6 ZV90IGwgPSBtLT5zcV9sZW5ndGgobyk7CistICAgICAgICAgICAgaWYgKGxpa2VseShsID49IDAp KSB7CistICAgICAgICAgICAgICAgIGkgKz0gbDsKKy0gICAgICAgICAgICB9IGVsc2UgeworLSAg ICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dF cnJvcikpCistICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CistICAgICAgICAgICAgICAg IFB5RXJyX0NsZWFyKCk7CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLSAgICAgICAgcmV0 dXJuIG0tPnNxX2Fzc19pdGVtKG8sIGksIChQeU9iamVjdCAqKU5VTEwpOworKyAgICByZXN1bHQg PSBQeUV2YWxfRXZhbENvZGVFeChjbywgZ2xvYmFscywgKFB5T2JqZWN0ICopTlVMTCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncywgKGludCluYXJncywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaywgKGludCluaywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZCwgKGludCluZCwgY2xvc3VyZSk7CisrI2VuZGlmCisrICAgIFB5X1hERUNSRUYo a3d0dXBsZSk7CisrZG9uZToKKysgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CisrICAgIHJl dHVybiByZXN1bHQ7CisrfQorKyNlbmRpZgorKyNlbmRpZgorKworKy8qIFB5Q0Z1bmN0aW9uRmFz dENhbGwgKi8KKysjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAorK3N0YXRpYyBDWVRIT05fSU5MSU5F IFB5T2JqZWN0ICogX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoUHlPYmplY3QgKmZ1bmNfb2Jq LCBQeU9iamVjdCAqKmFyZ3MsIFB5X3NzaXplX3QgbmFyZ3MpIHsKKysgICAgUHlDRnVuY3Rpb25P YmplY3QgKmZ1bmMgPSAoUHlDRnVuY3Rpb25PYmplY3QqKWZ1bmNfb2JqOworKyAgICBQeUNGdW5j dGlvbiBtZXRoID0gUHlDRnVuY3Rpb25fR0VUX0ZVTkNUSU9OKGZ1bmMpOworKyAgICBQeU9iamVj dCAqc2VsZiA9IFB5Q0Z1bmN0aW9uX0dFVF9TRUxGKGZ1bmMpOworKyAgICBpbnQgZmxhZ3MgPSBQ eUNGdW5jdGlvbl9HRVRfRkxBR1MoZnVuYyk7CisrICAgIGFzc2VydChQeUNGdW5jdGlvbl9DaGVj ayhmdW5jKSk7CisrICAgIGFzc2VydChNRVRIX0ZBU1RDQUxMID09IChmbGFncyAmIH4oTUVUSF9D TEFTUyB8IE1FVEhfU1RBVElDIHwgTUVUSF9DT0VYSVNUIHwgTUVUSF9LRVlXT1JEUyB8IE1FVEhf U1RBQ0tMRVNTKSkpOworKyAgICBhc3NlcnQobmFyZ3MgPj0gMCk7CisrICAgIGFzc2VydChuYXJn cyA9PSAwIHx8IGFyZ3MgIT0gTlVMTCk7CisrICAgIC8qIF9QeUNGdW5jdGlvbl9GYXN0Q2FsbERp Y3QoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorKyAgICAgICBi ZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRo ZQorKyAgICAgICBjYWxsZXIgbG9zZXMgaXRzIGV4Y2VwdGlvbiAqLworKyAgICBhc3NlcnQoIVB5 RXJyX09jY3VycmVkKCkpOworKyAgICBpZiAoKFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA3MDBBMCkg fHwgdW5saWtlbHkoZmxhZ3MgJiBNRVRIX0tFWVdPUkRTKSkgeworKyAgICAgICAgcmV0dXJuICgq KChfX1B5eF9QeUNGdW5jdGlvbkZhc3RXaXRoS2V5d29yZHMpKHZvaWQqKW1ldGgpKSAoc2VsZiwg YXJncywgbmFyZ3MsIE5VTEwpOworKyAgICB9IGVsc2UgeworKyAgICAgICAgcmV0dXJuICgqKChf X1B5eF9QeUNGdW5jdGlvbkZhc3QpKHZvaWQqKW1ldGgpKSAoc2VsZiwgYXJncywgbmFyZ3MpOwor ICAgICB9CisrfQorICNlbmRpZgorLSAgICByZXR1cm4gX19QeXhfRGVsSXRlbV9HZW5lcmljKG8s IFB5SW50X0Zyb21Tc2l6ZV90KGkpKTsKKysKKysvKiBQeU9iamVjdENhbGwgKi8KKysjaWYgQ1lU SE9OX0NPTVBJTElOR19JTl9DUFlUSE9OCisrc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3Qq IF9fUHl4X1B5T2JqZWN0X0NhbGwoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcsIFB5T2Jq ZWN0ICprdykgeworKyAgICBQeU9iamVjdCAqcmVzdWx0OworKyAgICB0ZXJuYXJ5ZnVuYyBjYWxs ID0gUHlfVFlQRShmdW5jKS0+dHBfY2FsbDsKKysgICAgaWYgKHVubGlrZWx5KCFjYWxsKSkKKysg ICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsKGZ1bmMsIGFyZywga3cpOworKyAgICBpZiAodW5s aWtlbHkoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKChjaGFyKikiIHdoaWxlIGNhbGxpbmcgYSBQeXRo b24gb2JqZWN0IikpKQorKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIHJlc3VsdCA9ICgqY2Fs bCkoZnVuYywgYXJnLCBrdyk7CisrICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOworKyAgICBp ZiAodW5saWtlbHkoIXJlc3VsdCkgJiYgdW5saWtlbHkoIVB5RXJyX09jY3VycmVkKCkpKSB7Cisr ICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisrICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXJyb3Is CisrICAgICAgICAgICAgIk5VTEwgcmVzdWx0IHdpdGhvdXQgZXJyb3IgaW4gUHlPYmplY3RfQ2Fs bCIpOworKyAgICB9CisrICAgIHJldHVybiByZXN1bHQ7CisgfQorKyNlbmRpZgorIAorLS8qIEtl eXdvcmRTdHJpbmdDaGVjayAqLworLXN0YXRpYyBpbnQgX19QeXhfQ2hlY2tLZXl3b3JkU3RyaW5n cygKKy0gICAgUHlPYmplY3QgKmt3ZGljdCwKKy0gICAgY29uc3QgY2hhciogZnVuY3Rpb25fbmFt ZSwKKy0gICAgaW50IGt3X2FsbG93ZWQpCisrLyogR2V0VG9wbW9zdEV4Y2VwdGlvbiAqLworKyNp ZiBDWVRIT05fVVNFX0VYQ19JTkZPX1NUQUNLCisrc3RhdGljIF9QeUVycl9TdGFja0l0ZW0gKgor K19fUHl4X1B5RXJyX0dldFRvcG1vc3RFeGNlcHRpb24oUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQor IHsKKy0gICAgUHlPYmplY3QqIGtleSA9IDA7CistICAgIFB5X3NzaXplX3QgcG9zID0gMDsKKy0j aWYgQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZCistICAgIGlmICgha3dfYWxsb3dlZCAmJiBQeURp Y3RfTmV4dChrd2RpY3QsICZwb3MsICZrZXksIDApKQorLSAgICAgICAgZ290byBpbnZhbGlkX2tl eXdvcmQ7CistICAgIHJldHVybiAxOworLSNlbHNlCistICAgIHdoaWxlIChQeURpY3RfTmV4dChr d2RpY3QsICZwb3MsICZrZXksIDApKSB7CistICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8 IDMKKy0gICAgICAgIGlmICh1bmxpa2VseSghUHlTdHJpbmdfQ2hlY2soa2V5KSkpCistICAgICAg ICAjZW5kaWYKKy0gICAgICAgICAgICBpZiAodW5saWtlbHkoIVB5VW5pY29kZV9DaGVjayhrZXkp KSkKKy0gICAgICAgICAgICAgICAgZ290byBpbnZhbGlkX2tleXdvcmRfdHlwZTsKKysgICAgX1B5 RXJyX1N0YWNrSXRlbSAqZXhjX2luZm8gPSB0c3RhdGUtPmV4Y19pbmZvOworKyAgICB3aGlsZSAo KGV4Y19pbmZvLT5leGNfdHlwZSA9PSBOVUxMIHx8IGV4Y19pbmZvLT5leGNfdHlwZSA9PSBQeV9O b25lKSAmJgorKyAgICAgICAgICAgZXhjX2luZm8tPnByZXZpb3VzX2l0ZW0gIT0gTlVMTCkKKysg ICAgeworKyAgICAgICAgZXhjX2luZm8gPSBleGNfaW5mby0+cHJldmlvdXNfaXRlbTsKKyAgICAg fQorLSAgICBpZiAoKCFrd19hbGxvd2VkKSAmJiB1bmxpa2VseShrZXkpKQorLSAgICAgICAgZ290 byBpbnZhbGlkX2tleXdvcmQ7CistICAgIHJldHVybiAxOworLWludmFsaWRfa2V5d29yZF90eXBl OgorLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorLSAgICAgICAgIiUuMjAwcygp IGtleXdvcmRzIG11c3QgYmUgc3RyaW5ncyIsIGZ1bmN0aW9uX25hbWUpOworLSAgICByZXR1cm4g MDsKKysgICAgcmV0dXJuIGV4Y19pbmZvOworK30KKyAjZW5kaWYKKy1pbnZhbGlkX2tleXdvcmQ6 CistICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCistICAgICNpZiBQWV9NQUpPUl9W RVJTSU9OIDwgMworLSAgICAgICAgIiUuMjAwcygpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQg YXJndW1lbnQgJyUuMjAwcyciLAorLSAgICAgICAgZnVuY3Rpb25fbmFtZSwgUHlTdHJpbmdfQXNT dHJpbmcoa2V5KSk7CisrCisrLyogU2F2ZVJlc2V0RXhjZXB0aW9uICovCisrI2lmIENZVEhPTl9G QVNUX1RIUkVBRF9TVEFURQorK3N0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgX19QeXhfX0V4Y2Vw dGlvblNhdmUoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeU9iamVjdCAqKnR5cGUsIFB5T2JqZWN0 ICoqdmFsdWUsIFB5T2JqZWN0ICoqdGIpIHsKKysgICAgI2lmIENZVEhPTl9VU0VfRVhDX0lORk9f U1RBQ0sKKysgICAgX1B5RXJyX1N0YWNrSXRlbSAqZXhjX2luZm8gPSBfX1B5eF9QeUVycl9HZXRU b3Btb3N0RXhjZXB0aW9uKHRzdGF0ZSk7CisrICAgICp0eXBlID0gZXhjX2luZm8tPmV4Y190eXBl OworKyAgICAqdmFsdWUgPSBleGNfaW5mby0+ZXhjX3ZhbHVlOworKyAgICAqdGIgPSBleGNfaW5m by0+ZXhjX3RyYWNlYmFjazsKKyAgICAgI2Vsc2UKKy0gICAgICAgICIlcygpIGdvdCBhbiB1bmV4 cGVjdGVkIGtleXdvcmQgYXJndW1lbnQgJyVVJyIsCistICAgICAgICBmdW5jdGlvbl9uYW1lLCBr ZXkpOworKyAgICAqdHlwZSA9IHRzdGF0ZS0+ZXhjX3R5cGU7CisrICAgICp2YWx1ZSA9IHRzdGF0 ZS0+ZXhjX3ZhbHVlOworKyAgICAqdGIgPSB0c3RhdGUtPmV4Y190cmFjZWJhY2s7CisgICAgICNl bmRpZgorLSAgICByZXR1cm4gMDsKKysgICAgUHlfWElOQ1JFRigqdHlwZSk7CisrICAgIFB5X1hJ TkNSRUYoKnZhbHVlKTsKKysgICAgUHlfWElOQ1JFRigqdGIpOworIH0KKy0KKy0vKiBOb25lICov Cistc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9SYWlzZUNsb3N1cmVOYW1lRXJyb3Io Y29uc3QgY2hhciAqdmFybmFtZSkgeworLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTmFtZUVycm9y LCAiZnJlZSB2YXJpYWJsZSAnJXMnIHJlZmVyZW5jZWQgYmVmb3JlIGFzc2lnbm1lbnQgaW4gZW5j bG9zaW5nIHNjb3BlIiwgdmFybmFtZSk7Cisrc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5 eF9fRXhjZXB0aW9uUmVzZXQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeU9iamVjdCAqdHlwZSwg UHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqdGIpIHsKKysgICAgUHlPYmplY3QgKnRtcF90eXBl LCAqdG1wX3ZhbHVlLCAqdG1wX3RiOworKyAgICAjaWYgQ1lUSE9OX1VTRV9FWENfSU5GT19TVEFD SworKyAgICBfUHlFcnJfU3RhY2tJdGVtICpleGNfaW5mbyA9IHRzdGF0ZS0+ZXhjX2luZm87Cisr ICAgIHRtcF90eXBlID0gZXhjX2luZm8tPmV4Y190eXBlOworKyAgICB0bXBfdmFsdWUgPSBleGNf aW5mby0+ZXhjX3ZhbHVlOworKyAgICB0bXBfdGIgPSBleGNfaW5mby0+ZXhjX3RyYWNlYmFjazsK KysgICAgZXhjX2luZm8tPmV4Y190eXBlID0gdHlwZTsKKysgICAgZXhjX2luZm8tPmV4Y192YWx1 ZSA9IHZhbHVlOworKyAgICBleGNfaW5mby0+ZXhjX3RyYWNlYmFjayA9IHRiOworKyAgICAjZWxz ZQorKyAgICB0bXBfdHlwZSA9IHRzdGF0ZS0+ZXhjX3R5cGU7CisrICAgIHRtcF92YWx1ZSA9IHRz dGF0ZS0+ZXhjX3ZhbHVlOworKyAgICB0bXBfdGIgPSB0c3RhdGUtPmV4Y190cmFjZWJhY2s7Cisr ICAgIHRzdGF0ZS0+ZXhjX3R5cGUgPSB0eXBlOworKyAgICB0c3RhdGUtPmV4Y192YWx1ZSA9IHZh bHVlOworKyAgICB0c3RhdGUtPmV4Y190cmFjZWJhY2sgPSB0YjsKKysgICAgI2VuZGlmCisrICAg IFB5X1hERUNSRUYodG1wX3R5cGUpOworKyAgICBQeV9YREVDUkVGKHRtcF92YWx1ZSk7CisrICAg IFB5X1hERUNSRUYodG1wX3RiKTsKKyB9CisrI2VuZGlmCisgCistLyogUmFpc2VFeGNlcHRpb24g Ki8KKy0jaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKy1zdGF0aWMgdm9pZCBfX1B5eF9SYWlzZShQ eU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqdGIsCistICAgICAgICAg ICAgICAgICAgICAgICAgQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqY2F1c2UpIHsKKy0gICAgX19Q eXhfUHlUaHJlYWRTdGF0ZV9kZWNsYXJlCistICAgIFB5X1hJTkNSRUYodHlwZSk7CistICAgIGlm ICghdmFsdWUgfHwgdmFsdWUgPT0gUHlfTm9uZSkKKy0gICAgICAgIHZhbHVlID0gTlVMTDsKKy0g ICAgZWxzZQorLSAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKy0gICAgaWYgKCF0YiB8fCB0YiA9 PSBQeV9Ob25lKQorLSAgICAgICAgdGIgPSBOVUxMOworLSAgICBlbHNlIHsKKy0gICAgICAgIFB5 X0lOQ1JFRih0Yik7CistICAgICAgICBpZiAoIVB5VHJhY2VCYWNrX0NoZWNrKHRiKSkgeworLSAg ICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCistICAgICAgICAgICAg ICAgICJyYWlzZTogYXJnIDMgbXVzdCBiZSBhIHRyYWNlYmFjayBvciBOb25lIik7CistICAgICAg ICAgICAgZ290byByYWlzZV9lcnJvcjsKKy0gICAgICAgIH0KKysvKiBQeUVyckV4Y2VwdGlvbk1h dGNoZXMgKi8KKysjaWYgQ1lUSE9OX0ZBU1RfVEhSRUFEX1NUQVRFCisrc3RhdGljIGludCBfX1B5 eF9QeUVycl9FeGNlcHRpb25NYXRjaGVzVHVwbGUoUHlPYmplY3QgKmV4Y190eXBlLCBQeU9iamVj dCAqdHVwbGUpIHsKKysgICAgUHlfc3NpemVfdCBpLCBuOworKyAgICBuID0gUHlUdXBsZV9HRVRf U0laRSh0dXBsZSk7CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMworKyAgICBmb3IgKGk9MDsg aTxuOyBpKyspIHsKKysgICAgICAgIGlmIChleGNfdHlwZSA9PSBQeVR1cGxlX0dFVF9JVEVNKHR1 cGxlLCBpKSkgcmV0dXJuIDE7CisgICAgIH0KKy0gICAgaWYgKFB5VHlwZV9DaGVjayh0eXBlKSkg eworLSNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkKKy0gICAgICAgIGlmICghdmFsdWUpIHsK Ky0gICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CistICAgICAgICAgICAgdmFsdWUgPSBQ eV9Ob25lOworLSAgICAgICAgfQorICNlbmRpZgorLSAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhj ZXB0aW9uKCZ0eXBlLCAmdmFsdWUsICZ0Yik7CistICAgIH0gZWxzZSB7CistICAgICAgICBpZiAo dmFsdWUpIHsKKy0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAor LSAgICAgICAgICAgICAgICAiaW5zdGFuY2UgZXhjZXB0aW9uIG1heSBub3QgaGF2ZSBhIHNlcGFy YXRlIHZhbHVlIik7CistICAgICAgICAgICAgZ290byByYWlzZV9lcnJvcjsKKy0gICAgICAgIH0K Ky0gICAgICAgIHZhbHVlID0gdHlwZTsKKy0gICAgICAgIHR5cGUgPSAoUHlPYmplY3QqKSBQeV9U WVBFKHR5cGUpOworLSAgICAgICAgUHlfSU5DUkVGKHR5cGUpOworLSAgICAgICAgaWYgKCFQeVR5 cGVfSXNTdWJ0eXBlKChQeVR5cGVPYmplY3QgKil0eXBlLCAoUHlUeXBlT2JqZWN0ICopUHlFeGNf QmFzZUV4Y2VwdGlvbikpIHsKKy0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlw ZUVycm9yLAorLSAgICAgICAgICAgICAgICAicmFpc2U6IGV4Y2VwdGlvbiBjbGFzcyBtdXN0IGJl IGEgc3ViY2xhc3Mgb2YgQmFzZUV4Y2VwdGlvbiIpOworLSAgICAgICAgICAgIGdvdG8gcmFpc2Vf ZXJyb3I7CistICAgICAgICB9CisrICAgIGZvciAoaT0wOyBpPG47IGkrKykgeworKyAgICAgICAg aWYgKF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyhleGNfdHlwZSwgUHlUdXBsZV9H RVRfSVRFTSh0dXBsZSwgaSkpKSByZXR1cm4gMTsKKyAgICAgfQorLSAgICBfX1B5eF9QeVRocmVh ZFN0YXRlX2Fzc2lnbgorLSAgICBfX1B5eF9FcnJSZXN0b3JlKHR5cGUsIHZhbHVlLCB0Yik7Cist ICAgIHJldHVybjsKKy1yYWlzZV9lcnJvcjoKKy0gICAgUHlfWERFQ1JFRih2YWx1ZSk7CistICAg IFB5X1hERUNSRUYodHlwZSk7CistICAgIFB5X1hERUNSRUYodGIpOworLSAgICByZXR1cm47Cisr ICAgIHJldHVybiAwOworK30KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfUHlFcnJf RXhjZXB0aW9uTWF0Y2hlc0luU3RhdGUoUHlUaHJlYWRTdGF0ZSogdHN0YXRlLCBQeU9iamVjdCog ZXJyKSB7CisrICAgIFB5T2JqZWN0ICpleGNfdHlwZSA9IHRzdGF0ZS0+Y3VyZXhjX3R5cGU7Cisr ICAgIGlmIChleGNfdHlwZSA9PSBlcnIpIHJldHVybiAxOworKyAgICBpZiAodW5saWtlbHkoIWV4 Y190eXBlKSkgcmV0dXJuIDA7CisrICAgIGlmICh1bmxpa2VseShQeVR1cGxlX0NoZWNrKGVycikp KQorKyAgICAgICAgcmV0dXJuIF9fUHl4X1B5RXJyX0V4Y2VwdGlvbk1hdGNoZXNUdXBsZShleGNf dHlwZSwgZXJyKTsKKysgICAgcmV0dXJuIF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hl cyhleGNfdHlwZSwgZXJyKTsKKyB9CisrI2VuZGlmCisrCisrLyogR2V0RXhjZXB0aW9uICovCisr I2lmIENZVEhPTl9GQVNUX1RIUkVBRF9TVEFURQorK3N0YXRpYyBpbnQgX19QeXhfX0dldEV4Y2Vw dGlvbihQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5T2JqZWN0ICoqdHlwZSwgUHlPYmplY3QgKip2 YWx1ZSwgUHlPYmplY3QgKip0YikKKyAjZWxzZQorLXN0YXRpYyB2b2lkIF9fUHl4X1JhaXNlKFB5 T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICp0YiwgUHlPYmplY3QgKmNh dXNlKSB7CistICAgIFB5T2JqZWN0KiBvd25lZF9pbnN0YW5jZSA9IE5VTEw7CistICAgIGlmICh0 YiA9PSBQeV9Ob25lKSB7CistICAgICAgICB0YiA9IDA7CistICAgIH0gZWxzZSBpZiAodGIgJiYg IVB5VHJhY2VCYWNrX0NoZWNrKHRiKSkgeworLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhj X1R5cGVFcnJvciwKKy0gICAgICAgICAgICAicmFpc2U6IGFyZyAzIG11c3QgYmUgYSB0cmFjZWJh Y2sgb3IgTm9uZSIpOworK3N0YXRpYyBpbnQgX19QeXhfR2V0RXhjZXB0aW9uKFB5T2JqZWN0ICoq dHlwZSwgUHlPYmplY3QgKip2YWx1ZSwgUHlPYmplY3QgKip0YikKKysjZW5kaWYKKyt7CisrICAg IFB5T2JqZWN0ICpsb2NhbF90eXBlLCAqbG9jYWxfdmFsdWUsICpsb2NhbF90YjsKKysjaWYgQ1lU SE9OX0ZBU1RfVEhSRUFEX1NUQVRFCisrICAgIFB5T2JqZWN0ICp0bXBfdHlwZSwgKnRtcF92YWx1 ZSwgKnRtcF90YjsKKysgICAgbG9jYWxfdHlwZSA9IHRzdGF0ZS0+Y3VyZXhjX3R5cGU7CisrICAg IGxvY2FsX3ZhbHVlID0gdHN0YXRlLT5jdXJleGNfdmFsdWU7CisrICAgIGxvY2FsX3RiID0gdHN0 YXRlLT5jdXJleGNfdHJhY2ViYWNrOworKyAgICB0c3RhdGUtPmN1cmV4Y190eXBlID0gMDsKKysg ICAgdHN0YXRlLT5jdXJleGNfdmFsdWUgPSAwOworKyAgICB0c3RhdGUtPmN1cmV4Y190cmFjZWJh Y2sgPSAwOworKyNlbHNlCisrICAgIFB5RXJyX0ZldGNoKCZsb2NhbF90eXBlLCAmbG9jYWxfdmFs dWUsICZsb2NhbF90Yik7CisrI2VuZGlmCisrICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigm bG9jYWxfdHlwZSwgJmxvY2FsX3ZhbHVlLCAmbG9jYWxfdGIpOworKyNpZiBDWVRIT05fRkFTVF9U SFJFQURfU1RBVEUKKysgICAgaWYgKHVubGlrZWx5KHRzdGF0ZS0+Y3VyZXhjX3R5cGUpKQorKyNl bHNlCisrICAgIGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkKKysjZW5kaWYKKyAgICAg ICAgIGdvdG8gYmFkOworLSAgICB9CistICAgIGlmICh2YWx1ZSA9PSBQeV9Ob25lKQorLSAgICAg ICAgdmFsdWUgPSAwOworLSAgICBpZiAoUHlFeGNlcHRpb25JbnN0YW5jZV9DaGVjayh0eXBlKSkg eworLSAgICAgICAgaWYgKHZhbHVlKSB7CistICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5 RXhjX1R5cGVFcnJvciwKKy0gICAgICAgICAgICAgICAgImluc3RhbmNlIGV4Y2VwdGlvbiBtYXkg bm90IGhhdmUgYSBzZXBhcmF0ZSB2YWx1ZSIpOworKyAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA+ PSAzCisrICAgIGlmIChsb2NhbF90YikgeworKyAgICAgICAgaWYgKHVubGlrZWx5KFB5RXhjZXB0 aW9uX1NldFRyYWNlYmFjayhsb2NhbF92YWx1ZSwgbG9jYWxfdGIpIDwgMCkpCisgICAgICAgICAg ICAgZ290byBiYWQ7CistICAgICAgICB9CistICAgICAgICB2YWx1ZSA9IHR5cGU7CistICAgICAg ICB0eXBlID0gKFB5T2JqZWN0KikgUHlfVFlQRSh2YWx1ZSk7CistICAgIH0gZWxzZSBpZiAoUHlF eGNlcHRpb25DbGFzc19DaGVjayh0eXBlKSkgeworLSAgICAgICAgUHlPYmplY3QgKmluc3RhbmNl X2NsYXNzID0gTlVMTDsKKy0gICAgICAgIGlmICh2YWx1ZSAmJiBQeUV4Y2VwdGlvbkluc3RhbmNl X0NoZWNrKHZhbHVlKSkgeworLSAgICAgICAgICAgIGluc3RhbmNlX2NsYXNzID0gKFB5T2JqZWN0 KikgUHlfVFlQRSh2YWx1ZSk7CistICAgICAgICAgICAgaWYgKGluc3RhbmNlX2NsYXNzICE9IHR5 cGUpIHsKKy0gICAgICAgICAgICAgICAgaW50IGlzX3N1YmNsYXNzID0gUHlPYmplY3RfSXNTdWJj bGFzcyhpbnN0YW5jZV9jbGFzcywgdHlwZSk7CistICAgICAgICAgICAgICAgIGlmICghaXNfc3Vi Y2xhc3MpIHsKKy0gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlX2NsYXNzID0gTlVMTDsKKy0g ICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1bmxpa2VseShpc19zdWJjbGFzcyA9PSAtMSkpIHsK Ky0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFkOworLSAgICAgICAgICAgICAgICB9IGVsc2Ug eworLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGluc3RhbmNlX2NsYXNzOworLSAgICAgICAg ICAgICAgICB9CistICAgICAgICAgICAgfQorLSAgICAgICAgfQorLSAgICAgICAgaWYgKCFpbnN0 YW5jZV9jbGFzcykgeworLSAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzOworLSAgICAgICAgICAg IGlmICghdmFsdWUpCistICAgICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKKy0g ICAgICAgICAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrKHZhbHVlKSkgeworLSAgICAgICAgICAg ICAgICBQeV9JTkNSRUYodmFsdWUpOworLSAgICAgICAgICAgICAgICBhcmdzID0gdmFsdWU7Cist ICAgICAgICAgICAgfSBlbHNlCistICAgICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX1BhY2so MSwgdmFsdWUpOworLSAgICAgICAgICAgIGlmICghYXJncykKKy0gICAgICAgICAgICAgICAgZ290 byBiYWQ7CistICAgICAgICAgICAgb3duZWRfaW5zdGFuY2UgPSBQeU9iamVjdF9DYWxsKHR5cGUs IGFyZ3MsIE5VTEwpOworLSAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKy0gICAgICAgICAg ICBpZiAoIW93bmVkX2luc3RhbmNlKQorLSAgICAgICAgICAgICAgICBnb3RvIGJhZDsKKy0gICAg ICAgICAgICB2YWx1ZSA9IG93bmVkX2luc3RhbmNlOworLSAgICAgICAgICAgIGlmICghUHlFeGNl cHRpb25JbnN0YW5jZV9DaGVjayh2YWx1ZSkpIHsKKy0gICAgICAgICAgICAgICAgUHlFcnJfRm9y bWF0KFB5RXhjX1R5cGVFcnJvciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYWxs aW5nICVSIHNob3VsZCBoYXZlIHJldHVybmVkIGFuIGluc3RhbmNlIG9mICIKKy0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJCYXNlRXhjZXB0aW9uLCBub3QgJVIiLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHlwZSwgUHlfVFlQRSh2YWx1ZSkpOworLSAgICAgICAgICAgICAg ICBnb3RvIGJhZDsKKy0gICAgICAgICAgICB9CistICAgICAgICB9CistICAgIH0gZWxzZSB7Cist ICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorLSAgICAgICAgICAgICJy YWlzZTogZXhjZXB0aW9uIGNsYXNzIG11c3QgYmUgYSBzdWJjbGFzcyBvZiBCYXNlRXhjZXB0aW9u Iik7CistICAgICAgICBnb3RvIGJhZDsKKyAgICAgfQorLSAgICBpZiAoY2F1c2UpIHsKKy0gICAg ICAgIFB5T2JqZWN0ICpmaXhlZF9jYXVzZTsKKy0gICAgICAgIGlmIChjYXVzZSA9PSBQeV9Ob25l KSB7CistICAgICAgICAgICAgZml4ZWRfY2F1c2UgPSBOVUxMOworLSAgICAgICAgfSBlbHNlIGlm IChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKGNhdXNlKSkgeworLSAgICAgICAgICAgIGZpeGVkX2Nh dXNlID0gUHlPYmplY3RfQ2FsbE9iamVjdChjYXVzZSwgTlVMTCk7CistICAgICAgICAgICAgaWYg KGZpeGVkX2NhdXNlID09IE5VTEwpCistICAgICAgICAgICAgICAgIGdvdG8gYmFkOworLSAgICAg ICAgfSBlbHNlIGlmIChQeUV4Y2VwdGlvbkluc3RhbmNlX0NoZWNrKGNhdXNlKSkgeworLSAgICAg ICAgICAgIGZpeGVkX2NhdXNlID0gY2F1c2U7CistICAgICAgICAgICAgUHlfSU5DUkVGKGZpeGVk X2NhdXNlKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5n KFB5RXhjX1R5cGVFcnJvciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlv biBjYXVzZXMgbXVzdCBkZXJpdmUgZnJvbSAiCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJCYXNlRXhjZXB0aW9uIik7CistICAgICAgICAgICAgZ290byBiYWQ7CisrICAgICNlbmRpZgor KyAgICBQeV9YSU5DUkVGKGxvY2FsX3RiKTsKKysgICAgUHlfWElOQ1JFRihsb2NhbF90eXBlKTsK KysgICAgUHlfWElOQ1JFRihsb2NhbF92YWx1ZSk7CisrICAgICp0eXBlID0gbG9jYWxfdHlwZTsK KysgICAgKnZhbHVlID0gbG9jYWxfdmFsdWU7CisrICAgICp0YiA9IGxvY2FsX3RiOworKyNpZiBD WVRIT05fRkFTVF9USFJFQURfU1RBVEUKKysgICAgI2lmIENZVEhPTl9VU0VfRVhDX0lORk9fU1RB Q0sKKysgICAgeworKyAgICAgICAgX1B5RXJyX1N0YWNrSXRlbSAqZXhjX2luZm8gPSB0c3RhdGUt PmV4Y19pbmZvOworKyAgICAgICAgdG1wX3R5cGUgPSBleGNfaW5mby0+ZXhjX3R5cGU7CisrICAg ICAgICB0bXBfdmFsdWUgPSBleGNfaW5mby0+ZXhjX3ZhbHVlOworKyAgICAgICAgdG1wX3RiID0g ZXhjX2luZm8tPmV4Y190cmFjZWJhY2s7CisrICAgICAgICBleGNfaW5mby0+ZXhjX3R5cGUgPSBs b2NhbF90eXBlOworKyAgICAgICAgZXhjX2luZm8tPmV4Y192YWx1ZSA9IGxvY2FsX3ZhbHVlOwor KyAgICAgICAgZXhjX2luZm8tPmV4Y190cmFjZWJhY2sgPSBsb2NhbF90YjsKKysgICAgfQorKyAg ICAjZWxzZQorKyAgICB0bXBfdHlwZSA9IHRzdGF0ZS0+ZXhjX3R5cGU7CisrICAgIHRtcF92YWx1 ZSA9IHRzdGF0ZS0+ZXhjX3ZhbHVlOworKyAgICB0bXBfdGIgPSB0c3RhdGUtPmV4Y190cmFjZWJh Y2s7CisrICAgIHRzdGF0ZS0+ZXhjX3R5cGUgPSBsb2NhbF90eXBlOworKyAgICB0c3RhdGUtPmV4 Y192YWx1ZSA9IGxvY2FsX3ZhbHVlOworKyAgICB0c3RhdGUtPmV4Y190cmFjZWJhY2sgPSBsb2Nh bF90YjsKKysgICAgI2VuZGlmCisrICAgIFB5X1hERUNSRUYodG1wX3R5cGUpOworKyAgICBQeV9Y REVDUkVGKHRtcF92YWx1ZSk7CisrICAgIFB5X1hERUNSRUYodG1wX3RiKTsKKysjZWxzZQorKyAg ICBQeUVycl9TZXRFeGNJbmZvKGxvY2FsX3R5cGUsIGxvY2FsX3ZhbHVlLCBsb2NhbF90Yik7Cisr I2VuZGlmCisrICAgIHJldHVybiAwOworK2JhZDoKKysgICAgKnR5cGUgPSAwOworKyAgICAqdmFs dWUgPSAwOworKyAgICAqdGIgPSAwOworKyAgICBQeV9YREVDUkVGKGxvY2FsX3R5cGUpOworKyAg ICBQeV9YREVDUkVGKGxvY2FsX3ZhbHVlKTsKKysgICAgUHlfWERFQ1JFRihsb2NhbF90Yik7Cisr ICAgIHJldHVybiAtMTsKKyt9CisrCisrLyogUHlPYmplY3RDYWxsTWV0aE8gKi8KKysjaWYgQ1lU SE9OX0NPTVBJTElOR19JTl9DUFlUSE9OCisrc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3Qq IF9fUHl4X1B5T2JqZWN0X0NhbGxNZXRoTyhQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZykg eworKyAgICBQeU9iamVjdCAqc2VsZiwgKnJlc3VsdDsKKysgICAgUHlDRnVuY3Rpb24gY2Z1bmM7 CisrICAgIGNmdW5jID0gUHlDRnVuY3Rpb25fR0VUX0ZVTkNUSU9OKGZ1bmMpOworKyAgICBzZWxm ID0gUHlDRnVuY3Rpb25fR0VUX1NFTEYoZnVuYyk7CisrICAgIGlmICh1bmxpa2VseShQeV9FbnRl clJlY3Vyc2l2ZUNhbGwoKGNoYXIqKSIgd2hpbGUgY2FsbGluZyBhIFB5dGhvbiBvYmplY3QiKSkp CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgcmVzdWx0ID0gY2Z1bmMoc2VsZiwgYXJnKTsK KysgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CisrICAgIGlmICh1bmxpa2VseSghcmVzdWx0 KSAmJiB1bmxpa2VseSghUHlFcnJfT2NjdXJyZWQoKSkpIHsKKysgICAgICAgIFB5RXJyX1NldFN0 cmluZygKKysgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKKysgICAgICAgICAgICAiTlVM TCByZXN1bHQgd2l0aG91dCBlcnJvciBpbiBQeU9iamVjdF9DYWxsIik7CisrICAgIH0KKysgICAg cmV0dXJuIHJlc3VsdDsKKyt9CisrI2VuZGlmCisrCisrLyogUHlPYmplY3RDYWxsT25lQXJnICov CisrI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTgorK3N0YXRpYyBQeU9iamVjdCogX19Q eXhfX1B5T2JqZWN0X0NhbGxPbmVBcmcoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcpIHsK KysgICAgUHlPYmplY3QgKnJlc3VsdDsKKysgICAgUHlPYmplY3QgKmFyZ3MgPSBQeVR1cGxlX05l dygxKTsKKysgICAgaWYgKHVubGlrZWx5KCFhcmdzKSkgcmV0dXJuIE5VTEw7CisrICAgIFB5X0lO Q1JFRihhcmcpOworKyAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDAsIGFyZyk7CisrICAgIHJl c3VsdCA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoZnVuYywgYXJncywgTlVMTCk7CisrICAgIFB5X0RF Q1JFRihhcmdzKTsKKysgICAgcmV0dXJuIHJlc3VsdDsKKyt9Cisrc3RhdGljIENZVEhPTl9JTkxJ TkUgUHlPYmplY3QqIF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoUHlPYmplY3QgKmZ1bmMsIFB5 T2JqZWN0ICphcmcpIHsKKysjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCisrICAgIGlmIChQeUZ1bmN0 aW9uX0NoZWNrKGZ1bmMpKSB7CisrICAgICAgICByZXR1cm4gX19QeXhfUHlGdW5jdGlvbl9GYXN0 Q2FsbChmdW5jLCAmYXJnLCAxKTsKKysgICAgfQorKyNlbmRpZgorKyAgICBpZiAobGlrZWx5KFB5 Q0Z1bmN0aW9uX0NoZWNrKGZ1bmMpKSkgeworKyAgICAgICAgaWYgKGxpa2VseShQeUNGdW5jdGlv bl9HRVRfRkxBR1MoZnVuYykgJiBNRVRIX08pKSB7CisrICAgICAgICAgICAgcmV0dXJuIF9fUHl4 X1B5T2JqZWN0X0NhbGxNZXRoTyhmdW5jLCBhcmcpOworKyNpZiBDWVRIT05fRkFTVF9QWUNDQUxM CisrICAgICAgICB9IGVsc2UgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhmdW5jKSkg eworKyAgICAgICAgICAgIHJldHVybiBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChmdW5jLCAm YXJnLCAxKTsKKysjZW5kaWYKKyAgICAgICAgIH0KKy0gICAgICAgIFB5RXhjZXB0aW9uX1NldENh dXNlKHZhbHVlLCBmaXhlZF9jYXVzZSk7CisgICAgIH0KKy0gICAgUHlFcnJfU2V0T2JqZWN0KHR5 cGUsIHZhbHVlKTsKKy0gICAgaWYgKHRiKSB7CistI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fUFlQ WQorLSAgICAgICAgUHlPYmplY3QgKnRtcF90eXBlLCAqdG1wX3ZhbHVlLCAqdG1wX3RiOworLSAg ICAgICAgUHlFcnJfRmV0Y2goJnRtcF90eXBlLCAmdG1wX3ZhbHVlLCAmdG1wX3RiKTsKKy0gICAg ICAgIFB5X0lOQ1JFRih0Yik7CistICAgICAgICBQeUVycl9SZXN0b3JlKHRtcF90eXBlLCB0bXBf dmFsdWUsIHRiKTsKKy0gICAgICAgIFB5X1hERUNSRUYodG1wX3RiKTsKKysgICAgcmV0dXJuIF9f UHl4X19QeU9iamVjdF9DYWxsT25lQXJnKGZ1bmMsIGFyZyk7CisrfQorICNlbHNlCistICAgICAg ICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBfX1B5eF9QeVRocmVhZFN0YXRlX0N1cnJlbnQ7Cist ICAgICAgICBQeU9iamVjdCogdG1wX3RiID0gdHN0YXRlLT5jdXJleGNfdHJhY2ViYWNrOworLSAg ICAgICAgaWYgKHRiICE9IHRtcF90YikgeworLSAgICAgICAgICAgIFB5X0lOQ1JFRih0Yik7Cist ICAgICAgICAgICAgdHN0YXRlLT5jdXJleGNfdHJhY2ViYWNrID0gdGI7CistICAgICAgICAgICAg UHlfWERFQ1JFRih0bXBfdGIpOworLSAgICAgICAgfQorK3N0YXRpYyBDWVRIT05fSU5MSU5FIFB5 T2JqZWN0KiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVj dCAqYXJnKSB7CisrICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisrICAgIFB5T2JqZWN0ICphcmdzID0g UHlUdXBsZV9QYWNrKDEsIGFyZyk7CisrICAgIGlmICh1bmxpa2VseSghYXJncykpIHJldHVybiBO VUxMOworKyAgICByZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9DYWxsKGZ1bmMsIGFyZ3MsIE5VTEwp OworKyAgICBQeV9ERUNSRUYoYXJncyk7CisrICAgIHJldHVybiByZXN1bHQ7CisrfQorICNlbmRp ZgorLSAgICB9CistYmFkOgorLSAgICBQeV9YREVDUkVGKG93bmVkX2luc3RhbmNlKTsKKy0gICAg cmV0dXJuOworKworKy8qIFB5RXJyRmV0Y2hSZXN0b3JlICovCisrI2lmIENZVEhPTl9GQVNUX1RI UkVBRF9TVEFURQorK3N0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgX19QeXhfRXJyUmVzdG9yZUlu U3RhdGUoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZh bHVlLCBQeU9iamVjdCAqdGIpIHsKKysgICAgUHlPYmplY3QgKnRtcF90eXBlLCAqdG1wX3ZhbHVl LCAqdG1wX3RiOworKyAgICB0bXBfdHlwZSA9IHRzdGF0ZS0+Y3VyZXhjX3R5cGU7CisrICAgIHRt cF92YWx1ZSA9IHRzdGF0ZS0+Y3VyZXhjX3ZhbHVlOworKyAgICB0bXBfdGIgPSB0c3RhdGUtPmN1 cmV4Y190cmFjZWJhY2s7CisrICAgIHRzdGF0ZS0+Y3VyZXhjX3R5cGUgPSB0eXBlOworKyAgICB0 c3RhdGUtPmN1cmV4Y192YWx1ZSA9IHZhbHVlOworKyAgICB0c3RhdGUtPmN1cmV4Y190cmFjZWJh Y2sgPSB0YjsKKysgICAgUHlfWERFQ1JFRih0bXBfdHlwZSk7CisrICAgIFB5X1hERUNSRUYodG1w X3ZhbHVlKTsKKysgICAgUHlfWERFQ1JFRih0bXBfdGIpOworK30KKytzdGF0aWMgQ1lUSE9OX0lO TElORSB2b2lkIF9fUHl4X0VyckZldGNoSW5TdGF0ZShQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5 T2JqZWN0ICoqdHlwZSwgUHlPYmplY3QgKip2YWx1ZSwgUHlPYmplY3QgKip0YikgeworKyAgICAq dHlwZSA9IHRzdGF0ZS0+Y3VyZXhjX3R5cGU7CisrICAgICp2YWx1ZSA9IHRzdGF0ZS0+Y3VyZXhj X3ZhbHVlOworKyAgICAqdGIgPSB0c3RhdGUtPmN1cmV4Y190cmFjZWJhY2s7CisrICAgIHRzdGF0 ZS0+Y3VyZXhjX3R5cGUgPSAwOworKyAgICB0c3RhdGUtPmN1cmV4Y192YWx1ZSA9IDA7CisrICAg IHRzdGF0ZS0+Y3VyZXhjX3RyYWNlYmFjayA9IDA7CisgfQorICNlbmRpZgorIAorLS8qIEZldGNo Q29tbW9uVHlwZSAqLworLXN0YXRpYyBQeVR5cGVPYmplY3QqIF9fUHl4X0ZldGNoQ29tbW9uVHlw ZShQeVR5cGVPYmplY3QqIHR5cGUpIHsKKy0gICAgUHlPYmplY3QqIGZha2VfbW9kdWxlOworLSAg ICBQeVR5cGVPYmplY3QqIGNhY2hlZF90eXBlID0gTlVMTDsKKy0gICAgZmFrZV9tb2R1bGUgPSBQ eUltcG9ydF9BZGRNb2R1bGUoKGNoYXIqKSAiX2N5dGhvbl8iIENZVEhPTl9BQkkpOworLSAgICBp ZiAoIWZha2VfbW9kdWxlKSByZXR1cm4gTlVMTDsKKy0gICAgUHlfSU5DUkVGKGZha2VfbW9kdWxl KTsKKy0gICAgY2FjaGVkX3R5cGUgPSAoUHlUeXBlT2JqZWN0KikgUHlPYmplY3RfR2V0QXR0clN0 cmluZyhmYWtlX21vZHVsZSwgdHlwZS0+dHBfbmFtZSk7CistICAgIGlmIChjYWNoZWRfdHlwZSkg eworLSAgICAgICAgaWYgKCFQeVR5cGVfQ2hlY2soKFB5T2JqZWN0KiljYWNoZWRfdHlwZSkpIHsK Ky0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorLSAgICAgICAgICAg ICAgICAiU2hhcmVkIEN5dGhvbiB0eXBlICUuMjAwcyBpcyBub3QgYSB0eXBlIG9iamVjdCIsCist ICAgICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUpOworLSAgICAgICAgICAgIGdvdG8gYmFkOwor LSAgICAgICAgfQorLSAgICAgICAgaWYgKGNhY2hlZF90eXBlLT50cF9iYXNpY3NpemUgIT0gdHlw ZS0+dHBfYmFzaWNzaXplKSB7CistICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVF cnJvciwKKy0gICAgICAgICAgICAgICAgIlNoYXJlZCBDeXRob24gdHlwZSAlLjIwMHMgaGFzIHRo ZSB3cm9uZyBzaXplLCB0cnkgcmVjb21waWxpbmciLAorLSAgICAgICAgICAgICAgICB0eXBlLT50 cF9uYW1lKTsKKy0gICAgICAgICAgICBnb3RvIGJhZDsKKy0gICAgICAgIH0KKy0gICAgfSBlbHNl IHsKKy0gICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVF cnJvcikpIGdvdG8gYmFkOworLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKy0gICAgICAgIGlmIChQ eVR5cGVfUmVhZHkodHlwZSkgPCAwKSBnb3RvIGJhZDsKKy0gICAgICAgIGlmIChQeU9iamVjdF9T ZXRBdHRyU3RyaW5nKGZha2VfbW9kdWxlLCB0eXBlLT50cF9uYW1lLCAoUHlPYmplY3QqKSB0eXBl KSA8IDApCistICAgICAgICAgICAgZ290byBiYWQ7CistICAgICAgICBQeV9JTkNSRUYodHlwZSk7 CistICAgICAgICBjYWNoZWRfdHlwZSA9IHR5cGU7CisrLyogR2V0QXR0ciAqLworK3N0YXRpYyBD WVRIT05fSU5MSU5FIFB5T2JqZWN0ICpfX1B5eF9HZXRBdHRyKFB5T2JqZWN0ICpvLCBQeU9iamVj dCAqbikgeworKyNpZiBDWVRIT05fVVNFX1RZUEVfU0xPVFMKKysjaWYgUFlfTUFKT1JfVkVSU0lP TiA+PSAzCisrICAgIGlmIChsaWtlbHkoUHlVbmljb2RlX0NoZWNrKG4pKSkKKysjZWxzZQorKyAg ICBpZiAobGlrZWx5KFB5U3RyaW5nX0NoZWNrKG4pKSkKKysjZW5kaWYKKysgICAgICAgIHJldHVy biBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG8sIG4pOworKyNlbmRpZgorKyAgICByZXR1cm4g UHlPYmplY3RfR2V0QXR0cihvLCBuKTsKKyt9CisrCisrLyogR2V0QXR0cjMgKi8KKytzdGF0aWMg UHlPYmplY3QgKl9fUHl4X0dldEF0dHIzRGVmYXVsdChQeU9iamVjdCAqZCkgeworKyAgICBfX1B5 eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKKysgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24K KysgICAgaWYgKHVubGlrZWx5KCFfX1B5eF9QeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0 dHJpYnV0ZUVycm9yKSkpCisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgX19QeXhfUHlFcnJf Q2xlYXIoKTsKKysgICAgUHlfSU5DUkVGKGQpOworKyAgICByZXR1cm4gZDsKKyt9Cisrc3RhdGlj IENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9fUHl4X0dldEF0dHIzKFB5T2JqZWN0ICpvLCBQeU9i amVjdCAqbiwgUHlPYmplY3QgKmQpIHsKKysgICAgUHlPYmplY3QgKnIgPSBfX1B5eF9HZXRBdHRy KG8sIG4pOworKyAgICByZXR1cm4gKGxpa2VseShyKSkgPyByIDogX19QeXhfR2V0QXR0cjNEZWZh dWx0KGQpOworK30KKysKKysvKiBQeU9iamVjdENhbGwyQXJncyAqLworK3N0YXRpYyBDWVRIT05f VU5VU0VEIFB5T2JqZWN0KiBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoUHlPYmplY3QqIGZ1bmN0 aW9uLCBQeU9iamVjdCogYXJnMSwgUHlPYmplY3QqIGFyZzIpIHsKKysgICAgUHlPYmplY3QgKmFy Z3MsICpyZXN1bHQgPSBOVUxMOworKyAgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCisrICAgIGlm IChQeUZ1bmN0aW9uX0NoZWNrKGZ1bmN0aW9uKSkgeworKyAgICAgICAgUHlPYmplY3QgKmFyZ3Nb Ml0gPSB7YXJnMSwgYXJnMn07CisrICAgICAgICByZXR1cm4gX19QeXhfUHlGdW5jdGlvbl9GYXN0 Q2FsbChmdW5jdGlvbiwgYXJncywgMik7CisrICAgIH0KKysgICAgI2VuZGlmCisrICAgICNpZiBD WVRIT05fRkFTVF9QWUNDQUxMCisrICAgIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2so ZnVuY3Rpb24pKSB7CisrICAgICAgICBQeU9iamVjdCAqYXJnc1syXSA9IHthcmcxLCBhcmcyfTsK KysgICAgICAgIHJldHVybiBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChmdW5jdGlvbiwgYXJn cywgMik7CisgICAgIH0KKysgICAgI2VuZGlmCisrICAgIGFyZ3MgPSBQeVR1cGxlX05ldygyKTsK KysgICAgaWYgKHVubGlrZWx5KCFhcmdzKSkgZ290byBkb25lOworKyAgICBQeV9JTkNSRUYoYXJn MSk7CisrICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMCwgYXJnMSk7CisrICAgIFB5X0lOQ1JF RihhcmcyKTsKKysgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAxLCBhcmcyKTsKKysgICAgUHlf SU5DUkVGKGZ1bmN0aW9uKTsKKysgICAgcmVzdWx0ID0gX19QeXhfUHlPYmplY3RfQ2FsbChmdW5j dGlvbiwgYXJncywgTlVMTCk7CisrICAgIFB5X0RFQ1JFRihhcmdzKTsKKysgICAgUHlfREVDUkVG KGZ1bmN0aW9uKTsKKyBkb25lOgorLSAgICBQeV9ERUNSRUYoZmFrZV9tb2R1bGUpOworLSAgICBy ZXR1cm4gY2FjaGVkX3R5cGU7CistYmFkOgorLSAgICBQeV9YREVDUkVGKGNhY2hlZF90eXBlKTsK Ky0gICAgY2FjaGVkX3R5cGUgPSBOVUxMOworLSAgICBnb3RvIGRvbmU7CisrICAgIHJldHVybiBy ZXN1bHQ7CisgfQorIAorLS8qIEN5dGhvbkZ1bmN0aW9uU2hhcmVkICovCistI2luY2x1ZGUgPHN0 cnVjdG1lbWJlci5oPgorLXN0YXRpYyBQeU9iamVjdCAqCistX19QeXhfQ3lGdW5jdGlvbl9nZXRf ZG9jKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNsb3N1 cmUpCisteworLSAgICBpZiAodW5saWtlbHkob3AtPmZ1bmNfZG9jID09IE5VTEwpKSB7CistICAg ICAgICBpZiAob3AtPmZ1bmMubV9tbC0+bWxfZG9jKSB7CisrLyogUHlPYmplY3RHZXRNZXRob2Qg Ki8KKytzdGF0aWMgaW50IF9fUHl4X1B5T2JqZWN0X0dldE1ldGhvZChQeU9iamVjdCAqb2JqLCBQ eU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKiptZXRob2QpIHsKKysgICAgUHlPYmplY3QgKmF0dHI7 CisrI2lmIENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRI T04gJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQCisrICAgIFB5VHlwZU9iamVjdCAqdHAgPSBQ eV9UWVBFKG9iaik7CisrICAgIFB5T2JqZWN0ICpkZXNjcjsKKysgICAgZGVzY3JnZXRmdW5jIGYg PSBOVUxMOworKyAgICBQeU9iamVjdCAqKmRpY3RwdHIsICpkaWN0OworKyAgICBpbnQgbWV0aF9m b3VuZCA9IDA7CisrICAgIGFzc2VydCAoKm1ldGhvZCA9PSBOVUxMKTsKKysgICAgaWYgKHVubGlr ZWx5KHRwLT50cF9nZXRhdHRybyAhPSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKysgICAg ICAgIGF0dHIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG9iaiwgbmFtZSk7CisrICAgICAg ICBnb3RvIHRyeV91bnBhY2s7CisrICAgIH0KKysgICAgaWYgKHVubGlrZWx5KHRwLT50cF9kaWN0 ID09IE5VTEwpICYmIHVubGlrZWx5KFB5VHlwZV9SZWFkeSh0cCkgPCAwKSkgeworKyAgICAgICAg cmV0dXJuIDA7CisrICAgIH0KKysgICAgZGVzY3IgPSBfUHlUeXBlX0xvb2t1cCh0cCwgbmFtZSk7 CisrICAgIGlmIChsaWtlbHkoZGVzY3IgIT0gTlVMTCkpIHsKKysgICAgICAgIFB5X0lOQ1JFRihk ZXNjcik7CisgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMworLSAgICAgICAgICAgIG9wLT5mdW5j X2RvYyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG9wLT5mdW5jLm1fbWwtPm1sX2RvYyk7CisrICAg ICAgICAjaWZkZWYgX19QeXhfQ3lGdW5jdGlvbl9VU0VECisrICAgICAgICBpZiAobGlrZWx5KFB5 RnVuY3Rpb25fQ2hlY2soZGVzY3IpIHx8IChQeV9UWVBFKGRlc2NyKSA9PSAmUHlNZXRob2REZXNj cl9UeXBlKSB8fCBfX1B5eF9DeUZ1bmN0aW9uX0NoZWNrKGRlc2NyKSkpCisrICAgICAgICAjZWxz ZQorKyAgICAgICAgaWYgKGxpa2VseShQeUZ1bmN0aW9uX0NoZWNrKGRlc2NyKSB8fCAoUHlfVFlQ RShkZXNjcikgPT0gJlB5TWV0aG9kRGVzY3JfVHlwZSkpKQorKyAgICAgICAgI2VuZGlmCisgI2Vs c2UKKy0gICAgICAgICAgICBvcC0+ZnVuY19kb2MgPSBQeVN0cmluZ19Gcm9tU3RyaW5nKG9wLT5m dW5jLm1fbWwtPm1sX2RvYyk7CisrICAgICAgICAjaWZkZWYgX19QeXhfQ3lGdW5jdGlvbl9VU0VE CisrICAgICAgICBpZiAobGlrZWx5KFB5RnVuY3Rpb25fQ2hlY2soZGVzY3IpIHx8IF9fUHl4X0N5 RnVuY3Rpb25fQ2hlY2soZGVzY3IpKSkKKysgICAgICAgICNlbHNlCisrICAgICAgICBpZiAobGlr ZWx5KFB5RnVuY3Rpb25fQ2hlY2soZGVzY3IpKSkKKysgICAgICAgICNlbmRpZgorICNlbmRpZgor LSAgICAgICAgICAgIGlmICh1bmxpa2VseShvcC0+ZnVuY19kb2MgPT0gTlVMTCkpCistICAgICAg ICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgeworKyAgICAgICAgICAgIG1ldGhfZm91 bmQgPSAxOworICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9u ZSk7CistICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7CisrICAgICAgICAgICAgZiA9IFB5X1RZ UEUoZGVzY3IpLT50cF9kZXNjcl9nZXQ7CisrICAgICAgICAgICAgaWYgKGYgIT0gTlVMTCAmJiBQ eURlc2NyX0lzRGF0YShkZXNjcikpIHsKKysgICAgICAgICAgICAgICAgYXR0ciA9IGYoZGVzY3Is IG9iaiwgKFB5T2JqZWN0ICopUHlfVFlQRShvYmopKTsKKysgICAgICAgICAgICAgICAgUHlfREVD UkVGKGRlc2NyKTsKKysgICAgICAgICAgICAgICAgZ290byB0cnlfdW5wYWNrOworKyAgICAgICAg ICAgIH0KKysgICAgICAgIH0KKysgICAgfQorKyAgICBkaWN0cHRyID0gX1B5T2JqZWN0X0dldERp Y3RQdHIob2JqKTsKKysgICAgaWYgKGRpY3RwdHIgIT0gTlVMTCAmJiAoZGljdCA9ICpkaWN0cHRy KSAhPSBOVUxMKSB7CisrICAgICAgICBQeV9JTkNSRUYoZGljdCk7CisrICAgICAgICBhdHRyID0g X19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoZGljdCwgbmFtZSk7CisrICAgICAgICBpZiAoYXR0ciAh PSBOVUxMKSB7CisrICAgICAgICAgICAgUHlfSU5DUkVGKGF0dHIpOworKyAgICAgICAgICAgIFB5 X0RFQ1JFRihkaWN0KTsKKysgICAgICAgICAgICBQeV9YREVDUkVGKGRlc2NyKTsKKysgICAgICAg ICAgICBnb3RvIHRyeV91bnBhY2s7CisgICAgICAgICB9CisrICAgICAgICBQeV9ERUNSRUYoZGlj dCk7CisgICAgIH0KKy0gICAgUHlfSU5DUkVGKG9wLT5mdW5jX2RvYyk7CistICAgIHJldHVybiBv cC0+ZnVuY19kb2M7CistfQorLXN0YXRpYyBpbnQKKy1fX1B5eF9DeUZ1bmN0aW9uX3NldF9kb2Mo X19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIFB5T2JqZWN0ICp2YWx1ZSwgQ1lUSE9OX1VOVVNF RCB2b2lkICpjb250ZXh0KQorLXsKKy0gICAgUHlPYmplY3QgKnRtcCA9IG9wLT5mdW5jX2RvYzsK Ky0gICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKy0gICAgICAgIHZhbHVlID0gUHlfTm9uZTsKKysg ICAgaWYgKG1ldGhfZm91bmQpIHsKKysgICAgICAgICptZXRob2QgPSBkZXNjcjsKKysgICAgICAg IHJldHVybiAxOworICAgICB9CistICAgIFB5X0lOQ1JFRih2YWx1ZSk7CistICAgIG9wLT5mdW5j X2RvYyA9IHZhbHVlOworLSAgICBQeV9YREVDUkVGKHRtcCk7CistICAgIHJldHVybiAwOworLX0K Ky1zdGF0aWMgUHlPYmplY3QgKgorLV9fUHl4X0N5RnVuY3Rpb25fZ2V0X25hbWUoX19weXhfQ3lG dW5jdGlvbk9iamVjdCAqb3AsIENZVEhPTl9VTlVTRUQgdm9pZCAqY29udGV4dCkKKy17CistICAg IGlmICh1bmxpa2VseShvcC0+ZnVuY19uYW1lID09IE5VTEwpKSB7CistI2lmIFBZX01BSk9SX1ZF UlNJT04gPj0gMworLSAgICAgICAgb3AtPmZ1bmNfbmFtZSA9IFB5VW5pY29kZV9JbnRlcm5Gcm9t U3RyaW5nKG9wLT5mdW5jLm1fbWwtPm1sX25hbWUpOworLSNlbHNlCistICAgICAgICBvcC0+ZnVu Y19uYW1lID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZyhvcC0+ZnVuYy5tX21sLT5tbF9uYW1l KTsKKy0jZW5kaWYKKy0gICAgICAgIGlmICh1bmxpa2VseShvcC0+ZnVuY19uYW1lID09IE5VTEwp KQorLSAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICBpZiAoZiAhPSBOVUxMKSB7CisrICAg ICAgICBhdHRyID0gZihkZXNjciwgb2JqLCAoUHlPYmplY3QgKilQeV9UWVBFKG9iaikpOworKyAg ICAgICAgUHlfREVDUkVGKGRlc2NyKTsKKysgICAgICAgIGdvdG8gdHJ5X3VucGFjazsKKyAgICAg fQorLSAgICBQeV9JTkNSRUYob3AtPmZ1bmNfbmFtZSk7CistICAgIHJldHVybiBvcC0+ZnVuY19u YW1lOworLX0KKy1zdGF0aWMgaW50CistX19QeXhfQ3lGdW5jdGlvbl9zZXRfbmFtZShfX3B5eF9D eUZ1bmN0aW9uT2JqZWN0ICpvcCwgUHlPYmplY3QgKnZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQg KmNvbnRleHQpCisteworLSAgICBQeU9iamVjdCAqdG1wOworKyAgICBpZiAoZGVzY3IgIT0gTlVM TCkgeworKyAgICAgICAgKm1ldGhvZCA9IGRlc2NyOworKyAgICAgICAgcmV0dXJuIDA7CisrICAg IH0KKysgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorICNpZiBQWV9NQUpP Ul9WRVJTSU9OID49IDMKKy0gICAgaWYgKHVubGlrZWx5KHZhbHVlID09IE5VTEwgfHwgIVB5VW5p Y29kZV9DaGVjayh2YWx1ZSkpKQorKyAgICAgICAgICAgICAgICAgIiclLjUwcycgb2JqZWN0IGhh cyBubyBhdHRyaWJ1dGUgJyVVJyIsCisrICAgICAgICAgICAgICAgICB0cC0+dHBfbmFtZSwgbmFt ZSk7CisgI2Vsc2UKKy0gICAgaWYgKHVubGlrZWx5KHZhbHVlID09IE5VTEwgfHwgIVB5U3RyaW5n X0NoZWNrKHZhbHVlKSkpCisrICAgICAgICAgICAgICAgICAiJyUuNTBzJyBvYmplY3QgaGFzIG5v IGF0dHJpYnV0ZSAnJS40MDBzJyIsCisrICAgICAgICAgICAgICAgICB0cC0+dHBfbmFtZSwgUHlT dHJpbmdfQVNfU1RSSU5HKG5hbWUpKTsKKyAjZW5kaWYKKy0gICAgeworLSAgICAgICAgUHlFcnJf U2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAiX19u YW1lX18gbXVzdCBiZSBzZXQgdG8gYSBzdHJpbmcgb2JqZWN0Iik7CistICAgICAgICByZXR1cm4g LTE7CistICAgIH0KKy0gICAgdG1wID0gb3AtPmZ1bmNfbmFtZTsKKy0gICAgUHlfSU5DUkVGKHZh bHVlKTsKKy0gICAgb3AtPmZ1bmNfbmFtZSA9IHZhbHVlOworLSAgICBQeV9YREVDUkVGKHRtcCk7 CisgICAgIHJldHVybiAwOworLX0KKy1zdGF0aWMgUHlPYmplY3QgKgorLV9fUHl4X0N5RnVuY3Rp b25fZ2V0X3F1YWxuYW1lKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VE IHZvaWQgKmNvbnRleHQpCisteworLSAgICBQeV9JTkNSRUYob3AtPmZ1bmNfcXVhbG5hbWUpOwor LSAgICByZXR1cm4gb3AtPmZ1bmNfcXVhbG5hbWU7CistfQorLXN0YXRpYyBpbnQKKy1fX1B5eF9D eUZ1bmN0aW9uX3NldF9xdWFsbmFtZShfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgUHlPYmpl Y3QgKnZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCisteworLSAgICBQeU9iamVj dCAqdG1wOworLSNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgaWYgKHVubGlrZWx5KHZh bHVlID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVjayh2YWx1ZSkpKQorICNlbHNlCistICAgIGlm ICh1bmxpa2VseSh2YWx1ZSA9PSBOVUxMIHx8ICFQeVN0cmluZ19DaGVjayh2YWx1ZSkpKQorKyAg ICBhdHRyID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihvYmosIG5hbWUpOworKyAgICBnb3Rv IHRyeV91bnBhY2s7CisgI2VuZGlmCistICAgIHsKKy0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQ eUV4Y19UeXBlRXJyb3IsCistICAgICAgICAgICAgICAgICAgICAgICAgIl9fcXVhbG5hbWVfXyBt dXN0IGJlIHNldCB0byBhIHN0cmluZyBvYmplY3QiKTsKKy0gICAgICAgIHJldHVybiAtMTsKKy0g ICAgfQorLSAgICB0bXAgPSBvcC0+ZnVuY19xdWFsbmFtZTsKKy0gICAgUHlfSU5DUkVGKHZhbHVl KTsKKy0gICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSB2YWx1ZTsKKy0gICAgUHlfWERFQ1JFRih0bXAp OworLSAgICByZXR1cm4gMDsKKy19Cistc3RhdGljIFB5T2JqZWN0ICoKKy1fX1B5eF9DeUZ1bmN0 aW9uX2dldF9zZWxmKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm0sIENZVEhPTl9VTlVTRUQgdm9p ZCAqY2xvc3VyZSkKKy17CistICAgIFB5T2JqZWN0ICpzZWxmOworLSAgICBzZWxmID0gbS0+ZnVu Y19jbG9zdXJlOworLSAgICBpZiAoc2VsZiA9PSBOVUxMKQorLSAgICAgICAgc2VsZiA9IFB5X05v bmU7CistICAgIFB5X0lOQ1JFRihzZWxmKTsKKy0gICAgcmV0dXJuIHNlbGY7CistfQorLXN0YXRp YyBQeU9iamVjdCAqCistX19QeXhfQ3lGdW5jdGlvbl9nZXRfZGljdChfX3B5eF9DeUZ1bmN0aW9u T2JqZWN0ICpvcCwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KQorLXsKKy0gICAgaWYgKHVu bGlrZWx5KG9wLT5mdW5jX2RpY3QgPT0gTlVMTCkpIHsKKy0gICAgICAgIG9wLT5mdW5jX2RpY3Qg PSBQeURpY3RfTmV3KCk7CistICAgICAgICBpZiAodW5saWtlbHkob3AtPmZ1bmNfZGljdCA9PSBO VUxMKSkKKy0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgfQorLSAgICBQeV9JTkNSRUYo b3AtPmZ1bmNfZGljdCk7CistICAgIHJldHVybiBvcC0+ZnVuY19kaWN0OworLX0KKy1zdGF0aWMg aW50CistX19QeXhfQ3lGdW5jdGlvbl9zZXRfZGljdChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpv cCwgUHlPYmplY3QgKnZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCisteworLSAg ICBQeU9iamVjdCAqdG1wOworLSAgICBpZiAodW5saWtlbHkodmFsdWUgPT0gTlVMTCkpIHsKKy0g ICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCistICAgICAgICAgICAgICAg ImZ1bmN0aW9uJ3MgZGljdGlvbmFyeSBtYXkgbm90IGJlIGRlbGV0ZWQiKTsKKy0gICAgICAgIHJl dHVybiAtMTsKKy0gICAgfQorLSAgICBpZiAodW5saWtlbHkoIVB5RGljdF9DaGVjayh2YWx1ZSkp KSB7CistICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorLSAgICAgICAg ICAgICAgICJzZXR0aW5nIGZ1bmN0aW9uJ3MgZGljdGlvbmFyeSB0byBhIG5vbi1kaWN0Iik7Cist ICAgICAgICByZXR1cm4gLTE7CisrdHJ5X3VucGFjazoKKysjaWYgQ1lUSE9OX1VOUEFDS19NRVRI T0RTCisrICAgIGlmIChsaWtlbHkoYXR0cikgJiYgUHlNZXRob2RfQ2hlY2soYXR0cikgJiYgbGlr ZWx5KFB5TWV0aG9kX0dFVF9TRUxGKGF0dHIpID09IG9iaikpIHsKKysgICAgICAgIFB5T2JqZWN0 ICpmdW5jdGlvbiA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihhdHRyKTsKKysgICAgICAgIFB5X0lO Q1JFRihmdW5jdGlvbik7CisrICAgICAgICBQeV9ERUNSRUYoYXR0cik7CisrICAgICAgICAqbWV0 aG9kID0gZnVuY3Rpb247CisrICAgICAgICByZXR1cm4gMTsKKyAgICAgfQorLSAgICB0bXAgPSBv cC0+ZnVuY19kaWN0OworLSAgICBQeV9JTkNSRUYodmFsdWUpOworLSAgICBvcC0+ZnVuY19kaWN0 ID0gdmFsdWU7CistICAgIFB5X1hERUNSRUYodG1wKTsKKysjZW5kaWYKKysgICAgKm1ldGhvZCA9 IGF0dHI7CisgICAgIHJldHVybiAwOworIH0KKy1zdGF0aWMgUHlPYmplY3QgKgorLV9fUHl4X0N5 RnVuY3Rpb25fZ2V0X2dsb2JhbHMoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIENZVEhPTl9V TlVTRUQgdm9pZCAqY29udGV4dCkKKy17CistICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19nbG9iYWxz KTsKKy0gICAgcmV0dXJuIG9wLT5mdW5jX2dsb2JhbHM7CistfQorLXN0YXRpYyBQeU9iamVjdCAq CistX19QeXhfQ3lGdW5jdGlvbl9nZXRfY2xvc3VyZShDWVRIT05fVU5VU0VEIF9fcHl4X0N5RnVu Y3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCisteworLSAgICBQ eV9JTkNSRUYoUHlfTm9uZSk7CistICAgIHJldHVybiBQeV9Ob25lOworLX0KKy1zdGF0aWMgUHlP YmplY3QgKgorLV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2NvZGUoX19weXhfQ3lGdW5jdGlvbk9iamVj dCAqb3AsIENZVEhPTl9VTlVTRUQgdm9pZCAqY29udGV4dCkKKy17CistICAgIFB5T2JqZWN0KiBy ZXN1bHQgPSAob3AtPmZ1bmNfY29kZSkgPyBvcC0+ZnVuY19jb2RlIDogUHlfTm9uZTsKKy0gICAg UHlfSU5DUkVGKHJlc3VsdCk7CistICAgIHJldHVybiByZXN1bHQ7CistfQorLXN0YXRpYyBpbnQK Ky1fX1B5eF9DeUZ1bmN0aW9uX2luaXRfZGVmYXVsdHMoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAq b3ApIHsKKy0gICAgaW50IHJlc3VsdCA9IDA7CistICAgIFB5T2JqZWN0ICpyZXMgPSBvcC0+ZGVm YXVsdHNfZ2V0dGVyKChQeU9iamVjdCAqKSBvcCk7CistICAgIGlmICh1bmxpa2VseSghcmVzKSkK Ky0gICAgICAgIHJldHVybiAtMTsKKy0gICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1Mg JiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCistICAgIG9wLT5kZWZhdWx0c190dXBsZSA9 IFB5VHVwbGVfR0VUX0lURU0ocmVzLCAwKTsKKy0gICAgUHlfSU5DUkVGKG9wLT5kZWZhdWx0c190 dXBsZSk7CistICAgIG9wLT5kZWZhdWx0c19rd2RpY3QgPSBQeVR1cGxlX0dFVF9JVEVNKHJlcywg MSk7CistICAgIFB5X0lOQ1JFRihvcC0+ZGVmYXVsdHNfa3dkaWN0KTsKKy0gICAgI2Vsc2UKKy0g ICAgb3AtPmRlZmF1bHRzX3R1cGxlID0gUHlTZXF1ZW5jZV9JVEVNKHJlcywgMCk7CistICAgIGlm ICh1bmxpa2VseSghb3AtPmRlZmF1bHRzX3R1cGxlKSkgcmVzdWx0ID0gLTE7CistICAgIGVsc2Ug eworLSAgICAgICAgb3AtPmRlZmF1bHRzX2t3ZGljdCA9IFB5U2VxdWVuY2VfSVRFTShyZXMsIDEp OworLSAgICAgICAgaWYgKHVubGlrZWx5KCFvcC0+ZGVmYXVsdHNfa3dkaWN0KSkgcmVzdWx0ID0g LTE7CistICAgIH0KKy0gICAgI2VuZGlmCistICAgIFB5X0RFQ1JFRihyZXMpOworKworKy8qIFB5 T2JqZWN0Q2FsbE1ldGhvZDEgKi8KKytzdGF0aWMgUHlPYmplY3QqIF9fUHl4X19QeU9iamVjdF9D YWxsTWV0aG9kMShQeU9iamVjdCogbWV0aG9kLCBQeU9iamVjdCogYXJnKSB7CisrICAgIFB5T2Jq ZWN0ICpyZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKG1ldGhvZCwgYXJnKTsKKysg ICAgUHlfREVDUkVGKG1ldGhvZCk7CisgICAgIHJldHVybiByZXN1bHQ7CisgfQorLXN0YXRpYyBp bnQKKy1fX1B5eF9DeUZ1bmN0aW9uX3NldF9kZWZhdWx0cyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0 ICpvcCwgUHlPYmplY3QqIHZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpIHsKKy0g ICAgUHlPYmplY3QqIHRtcDsKKy0gICAgaWYgKCF2YWx1ZSkgeworLSAgICAgICAgdmFsdWUgPSBQ eV9Ob25lOworLSAgICB9IGVsc2UgaWYgKHZhbHVlICE9IFB5X05vbmUgJiYgIVB5VHVwbGVfQ2hl Y2sodmFsdWUpKSB7CistICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAor LSAgICAgICAgICAgICAgICAgICAgICAgICJfX2RlZmF1bHRzX18gbXVzdCBiZSBzZXQgdG8gYSB0 dXBsZSBvYmplY3QiKTsKKy0gICAgICAgIHJldHVybiAtMTsKKy0gICAgfQorLSAgICBQeV9JTkNS RUYodmFsdWUpOworLSAgICB0bXAgPSBvcC0+ZGVmYXVsdHNfdHVwbGU7CistICAgIG9wLT5kZWZh dWx0c190dXBsZSA9IHZhbHVlOworLSAgICBQeV9YREVDUkVGKHRtcCk7CistICAgIHJldHVybiAw OworLX0KKy1zdGF0aWMgUHlPYmplY3QgKgorLV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2RlZmF1bHRz KF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQp IHsKKy0gICAgUHlPYmplY3QqIHJlc3VsdCA9IG9wLT5kZWZhdWx0c190dXBsZTsKKy0gICAgaWYg KHVubGlrZWx5KCFyZXN1bHQpKSB7CistICAgICAgICBpZiAob3AtPmRlZmF1bHRzX2dldHRlcikg eworLSAgICAgICAgICAgIGlmIChfX1B5eF9DeUZ1bmN0aW9uX2luaXRfZGVmYXVsdHMob3ApIDwg MCkgcmV0dXJuIE5VTEw7CistICAgICAgICAgICAgcmVzdWx0ID0gb3AtPmRlZmF1bHRzX3R1cGxl OworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICByZXN1bHQgPSBQeV9Ob25lOworLSAg ICAgICAgfQorK3N0YXRpYyBQeU9iamVjdCogX19QeXhfUHlPYmplY3RfQ2FsbE1ldGhvZDEoUHlP YmplY3QqIG9iaiwgUHlPYmplY3QqIG1ldGhvZF9uYW1lLCBQeU9iamVjdCogYXJnKSB7CisrICAg IFB5T2JqZWN0ICptZXRob2QgPSBOVUxMLCAqcmVzdWx0OworKyAgICBpbnQgaXNfbWV0aG9kID0g X19QeXhfUHlPYmplY3RfR2V0TWV0aG9kKG9iaiwgbWV0aG9kX25hbWUsICZtZXRob2QpOworKyAg ICBpZiAobGlrZWx5KGlzX21ldGhvZCkpIHsKKysgICAgICAgIHJlc3VsdCA9IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhtZXRob2QsIG9iaiwgYXJnKTsKKysgICAgICAgIFB5X0RFQ1JFRihtZXRo b2QpOworKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgfQorLSAgICBQeV9JTkNSRUYocmVz dWx0KTsKKy0gICAgcmV0dXJuIHJlc3VsdDsKKysgICAgaWYgKHVubGlrZWx5KCFtZXRob2QpKSBy ZXR1cm4gTlVMTDsKKysgICAgcmV0dXJuIF9fUHl4X19QeU9iamVjdF9DYWxsTWV0aG9kMShtZXRo b2QsIGFyZyk7CisgfQorLXN0YXRpYyBpbnQKKy1fX1B5eF9DeUZ1bmN0aW9uX3NldF9rd2RlZmF1 bHRzKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBQeU9iamVjdCogdmFsdWUsIENZVEhPTl9V TlVTRUQgdm9pZCAqY29udGV4dCkgeworLSAgICBQeU9iamVjdCogdG1wOworLSAgICBpZiAoIXZh bHVlKSB7CistICAgICAgICB2YWx1ZSA9IFB5X05vbmU7CistICAgIH0gZWxzZSBpZiAodmFsdWUg IT0gUHlfTm9uZSAmJiAhUHlEaWN0X0NoZWNrKHZhbHVlKSkgeworLSAgICAgICAgUHlFcnJfU2V0 U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAiX19rd2Rl ZmF1bHRzX18gbXVzdCBiZSBzZXQgdG8gYSBkaWN0IG9iamVjdCIpOworLSAgICAgICAgcmV0dXJu IC0xOworKworKy8qIGFwcGVuZCAqLworK3N0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9Q eU9iamVjdF9BcHBlbmQoUHlPYmplY3QqIEwsIFB5T2JqZWN0KiB4KSB7CisrICAgIGlmIChsaWtl bHkoUHlMaXN0X0NoZWNrRXhhY3QoTCkpKSB7CisrICAgICAgICBpZiAodW5saWtlbHkoX19QeXhf UHlMaXN0X0FwcGVuZChMLCB4KSA8IDApKSByZXR1cm4gLTE7CisrICAgIH0gZWxzZSB7CisrICAg ICAgICBQeU9iamVjdCogcmV0dmFsID0gX19QeXhfUHlPYmplY3RfQ2FsbE1ldGhvZDEoTCwgX19w eXhfbl9zX2FwcGVuZCwgeCk7CisrICAgICAgICBpZiAodW5saWtlbHkoIXJldHZhbCkpCisrICAg ICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7CisgICAgIH0K Ky0gICAgUHlfSU5DUkVGKHZhbHVlKTsKKy0gICAgdG1wID0gb3AtPmRlZmF1bHRzX2t3ZGljdDsK Ky0gICAgb3AtPmRlZmF1bHRzX2t3ZGljdCA9IHZhbHVlOworLSAgICBQeV9YREVDUkVGKHRtcCk7 CisgICAgIHJldHVybiAwOworIH0KKy1zdGF0aWMgUHlPYmplY3QgKgorLV9fUHl4X0N5RnVuY3Rp b25fZ2V0X2t3ZGVmYXVsdHMoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIENZVEhPTl9VTlVT RUQgdm9pZCAqY29udGV4dCkgeworLSAgICBQeU9iamVjdCogcmVzdWx0ID0gb3AtPmRlZmF1bHRz X2t3ZGljdDsKKy0gICAgaWYgKHVubGlrZWx5KCFyZXN1bHQpKSB7CistICAgICAgICBpZiAob3At PmRlZmF1bHRzX2dldHRlcikgeworLSAgICAgICAgICAgIGlmIChfX1B5eF9DeUZ1bmN0aW9uX2lu aXRfZGVmYXVsdHMob3ApIDwgMCkgcmV0dXJuIE5VTEw7CistICAgICAgICAgICAgcmVzdWx0ID0g b3AtPmRlZmF1bHRzX2t3ZGljdDsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgcmVz dWx0ID0gUHlfTm9uZTsKKysKKysvKiBQeU9iamVjdENhbGxOb0FyZyAqLworKyNpZiBDWVRIT05f Q09NUElMSU5HX0lOX0NQWVRIT04KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19Q eXhfUHlPYmplY3RfQ2FsbE5vQXJnKFB5T2JqZWN0ICpmdW5jKSB7CisrI2lmIENZVEhPTl9GQVNU X1BZQ0FMTAorKyAgICBpZiAoUHlGdW5jdGlvbl9DaGVjayhmdW5jKSkgeworKyAgICAgICAgcmV0 dXJuIF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGwoZnVuYywgTlVMTCwgMCk7CisrICAgIH0KKysj ZW5kaWYKKysjaWZkZWYgX19QeXhfQ3lGdW5jdGlvbl9VU0VECisrICAgIGlmIChsaWtlbHkoUHlD RnVuY3Rpb25fQ2hlY2soZnVuYykgfHwgX19QeXhfQ3lGdW5jdGlvbl9DaGVjayhmdW5jKSkpCisr I2Vsc2UKKysgICAgaWYgKGxpa2VseShQeUNGdW5jdGlvbl9DaGVjayhmdW5jKSkpCisrI2VuZGlm CisrICAgIHsKKysgICAgICAgIGlmIChsaWtlbHkoUHlDRnVuY3Rpb25fR0VUX0ZMQUdTKGZ1bmMp ICYgTUVUSF9OT0FSR1MpKSB7CisrICAgICAgICAgICAgcmV0dXJuIF9fUHl4X1B5T2JqZWN0X0Nh bGxNZXRoTyhmdW5jLCBOVUxMKTsKKyAgICAgICAgIH0KKyAgICAgfQorLSAgICBQeV9JTkNSRUYo cmVzdWx0KTsKKy0gICAgcmV0dXJuIHJlc3VsdDsKKysgICAgcmV0dXJuIF9fUHl4X1B5T2JqZWN0 X0NhbGwoZnVuYywgX19weXhfZW1wdHlfdHVwbGUsIE5VTEwpOworIH0KKy1zdGF0aWMgaW50Cist X19QeXhfQ3lGdW5jdGlvbl9zZXRfYW5ub3RhdGlvbnMoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAq b3AsIFB5T2JqZWN0KiB2YWx1ZSwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KSB7CistICAg IFB5T2JqZWN0KiB0bXA7CistICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPT0gUHlfTm9uZSkgewor LSAgICAgICAgdmFsdWUgPSBOVUxMOworLSAgICB9IGVsc2UgaWYgKCFQeURpY3RfQ2hlY2sodmFs dWUpKSB7CistICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorLSAgICAg ICAgICAgICAgICAgICAgICAgICJfX2Fubm90YXRpb25zX18gbXVzdCBiZSBzZXQgdG8gYSBkaWN0 IG9iamVjdCIpOworLSAgICAgICAgcmV0dXJuIC0xOworKyNlbmRpZgorKworKy8qIEdldEl0ZW1J bnQgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fUHl4X0dldEl0ZW1JbnRfR2VuZXJpYyhQeU9iamVj dCAqbywgUHlPYmplY3QqIGopIHsKKysgICAgUHlPYmplY3QgKnI7CisrICAgIGlmICghaikgcmV0 dXJuIE5VTEw7CisrICAgIHIgPSBQeU9iamVjdF9HZXRJdGVtKG8sIGopOworKyAgICBQeV9ERUNS RUYoaik7CisrICAgIHJldHVybiByOworK30KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVj dCAqX19QeXhfR2V0SXRlbUludF9MaXN0X0Zhc3QoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgaSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIENZVEhPTl9OQ1BfVU5VU0VEIGludCB3cmFwYXJvdW5kLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX05D UF9VTlVTRUQgaW50IGJvdW5kc2NoZWNrKSB7CisrI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNS T1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCisrICAgIFB5X3NzaXplX3Qgd3JhcHBl ZF9pID0gaTsKKysgICAgaWYgKHdyYXBhcm91bmQgJiB1bmxpa2VseShpIDwgMCkpIHsKKysgICAg ICAgIHdyYXBwZWRfaSArPSBQeUxpc3RfR0VUX1NJWkUobyk7CisgICAgIH0KKy0gICAgUHlfWElO Q1JFRih2YWx1ZSk7CistICAgIHRtcCA9IG9wLT5mdW5jX2Fubm90YXRpb25zOworLSAgICBvcC0+ ZnVuY19hbm5vdGF0aW9ucyA9IHZhbHVlOworLSAgICBQeV9YREVDUkVGKHRtcCk7CistICAgIHJl dHVybiAwOworKyAgICBpZiAoKCFib3VuZHNjaGVjaykgfHwgbGlrZWx5KF9fUHl4X2lzX3ZhbGlk X2luZGV4KHdyYXBwZWRfaSwgUHlMaXN0X0dFVF9TSVpFKG8pKSkpIHsKKysgICAgICAgIFB5T2Jq ZWN0ICpyID0gUHlMaXN0X0dFVF9JVEVNKG8sIHdyYXBwZWRfaSk7CisrICAgICAgICBQeV9JTkNS RUYocik7CisrICAgICAgICByZXR1cm4gcjsKKysgICAgfQorKyAgICByZXR1cm4gX19QeXhfR2V0 SXRlbUludF9HZW5lcmljKG8sIFB5SW50X0Zyb21Tc2l6ZV90KGkpKTsKKysjZWxzZQorKyAgICBy ZXR1cm4gUHlTZXF1ZW5jZV9HZXRJdGVtKG8sIGkpOworKyNlbmRpZgorIH0KKy1zdGF0aWMgUHlP YmplY3QgKgorLV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2Fubm90YXRpb25zKF9fcHl4X0N5RnVuY3Rp b25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpIHsKKy0gICAgUHlPYmpl Y3QqIHJlc3VsdCA9IG9wLT5mdW5jX2Fubm90YXRpb25zOworLSAgICBpZiAodW5saWtlbHkoIXJl c3VsdCkpIHsKKy0gICAgICAgIHJlc3VsdCA9IFB5RGljdF9OZXcoKTsKKy0gICAgICAgIGlmICh1 bmxpa2VseSghcmVzdWx0KSkgcmV0dXJuIE5VTEw7CistICAgICAgICBvcC0+ZnVuY19hbm5vdGF0 aW9ucyA9IHJlc3VsdDsKKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCAqX19QeXhfR2V0 SXRlbUludF9UdXBsZV9GYXN0KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGksCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDWVRI T05fTkNQX1VOVVNFRCBpbnQgd3JhcGFyb3VuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENZVEhPTl9OQ1BfVU5VU0VEIGlu dCBib3VuZHNjaGVjaykgeworKyNpZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRI T05fQVZPSURfQk9SUk9XRURfUkVGUworKyAgICBQeV9zc2l6ZV90IHdyYXBwZWRfaSA9IGk7Cisr ICAgIGlmICh3cmFwYXJvdW5kICYgdW5saWtlbHkoaSA8IDApKSB7CisrICAgICAgICB3cmFwcGVk X2kgKz0gUHlUdXBsZV9HRVRfU0laRShvKTsKKyAgICAgfQorLSAgICBQeV9JTkNSRUYocmVzdWx0 KTsKKy0gICAgcmV0dXJuIHJlc3VsdDsKKysgICAgaWYgKCghYm91bmRzY2hlY2spIHx8IGxpa2Vs eShfX1B5eF9pc192YWxpZF9pbmRleCh3cmFwcGVkX2ksIFB5VHVwbGVfR0VUX1NJWkUobykpKSkg eworKyAgICAgICAgUHlPYmplY3QgKnIgPSBQeVR1cGxlX0dFVF9JVEVNKG8sIHdyYXBwZWRfaSk7 CisrICAgICAgICBQeV9JTkNSRUYocik7CisrICAgICAgICByZXR1cm4gcjsKKysgICAgfQorKyAg ICByZXR1cm4gX19QeXhfR2V0SXRlbUludF9HZW5lcmljKG8sIFB5SW50X0Zyb21Tc2l6ZV90KGkp KTsKKysjZWxzZQorKyAgICByZXR1cm4gUHlTZXF1ZW5jZV9HZXRJdGVtKG8sIGkpOworKyNlbmRp ZgorIH0KKy1zdGF0aWMgUHlHZXRTZXREZWYgX19weXhfQ3lGdW5jdGlvbl9nZXRzZXRzW10gPSB7 CistICAgIHsoY2hhciAqKSAiZnVuY19kb2MiLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0 X2RvYywgKHNldHRlcilfX1B5eF9DeUZ1bmN0aW9uX3NldF9kb2MsIDAsIDB9LAorLSAgICB7KGNo YXIgKikgIl9fZG9jX18iLCAgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9kb2MsIChzZXR0 ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfZG9jLCAwLCAwfSwKKy0gICAgeyhjaGFyICopICJmdW5j X25hbWUiLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X25hbWUsIChzZXR0ZXIpX19QeXhf Q3lGdW5jdGlvbl9zZXRfbmFtZSwgMCwgMH0sCistICAgIHsoY2hhciAqKSAiX19uYW1lX18iLCAo Z2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X25hbWUsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlv bl9zZXRfbmFtZSwgMCwgMH0sCistICAgIHsoY2hhciAqKSAiX19xdWFsbmFtZV9fIiwgKGdldHRl cilfX1B5eF9DeUZ1bmN0aW9uX2dldF9xdWFsbmFtZSwgKHNldHRlcilfX1B5eF9DeUZ1bmN0aW9u X3NldF9xdWFsbmFtZSwgMCwgMH0sCistICAgIHsoY2hhciAqKSAiX19zZWxmX18iLCAoZ2V0dGVy KV9fUHl4X0N5RnVuY3Rpb25fZ2V0X3NlbGYsIDAsIDAsIDB9LAorLSAgICB7KGNoYXIgKikgImZ1 bmNfZGljdCIsIChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9nZXRfZGljdCwgKHNldHRlcilfX1B5 eF9DeUZ1bmN0aW9uX3NldF9kaWN0LCAwLCAwfSwKKy0gICAgeyhjaGFyICopICJfX2RpY3RfXyIs IChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9nZXRfZGljdCwgKHNldHRlcilfX1B5eF9DeUZ1bmN0 aW9uX3NldF9kaWN0LCAwLCAwfSwKKy0gICAgeyhjaGFyICopICJmdW5jX2dsb2JhbHMiLCAoZ2V0 dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2dsb2JhbHMsIDAsIDAsIDB9LAorLSAgICB7KGNoYXIg KikgIl9fZ2xvYmFsc19fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9nbG9iYWxzLCAw LCAwLCAwfSwKKy0gICAgeyhjaGFyICopICJmdW5jX2Nsb3N1cmUiLCAoZ2V0dGVyKV9fUHl4X0N5 RnVuY3Rpb25fZ2V0X2Nsb3N1cmUsIDAsIDAsIDB9LAorLSAgICB7KGNoYXIgKikgIl9fY2xvc3Vy ZV9fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9jbG9zdXJlLCAwLCAwLCAwfSwKKy0g ICAgeyhjaGFyICopICJmdW5jX2NvZGUiLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2Nv ZGUsIDAsIDAsIDB9LAorLSAgICB7KGNoYXIgKikgIl9fY29kZV9fIiwgKGdldHRlcilfX1B5eF9D eUZ1bmN0aW9uX2dldF9jb2RlLCAwLCAwLCAwfSwKKy0gICAgeyhjaGFyICopICJmdW5jX2RlZmF1 bHRzIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9kZWZhdWx0cywgKHNldHRlcilfX1B5 eF9DeUZ1bmN0aW9uX3NldF9kZWZhdWx0cywgMCwgMH0sCistICAgIHsoY2hhciAqKSAiX19kZWZh dWx0c19fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9kZWZhdWx0cywgKHNldHRlcilf X1B5eF9DeUZ1bmN0aW9uX3NldF9kZWZhdWx0cywgMCwgMH0sCistICAgIHsoY2hhciAqKSAiX19r d2RlZmF1bHRzX18iLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2t3ZGVmYXVsdHMsIChz ZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfa3dkZWZhdWx0cywgMCwgMH0sCistICAgIHsoY2hh ciAqKSAiX19hbm5vdGF0aW9uc19fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9hbm5v dGF0aW9ucywgKHNldHRlcilfX1B5eF9DeUZ1bmN0aW9uX3NldF9hbm5vdGF0aW9ucywgMCwgMH0s CistICAgIHswLCAwLCAwLCAwLCAwfQorLX07Cistc3RhdGljIFB5TWVtYmVyRGVmIF9fcHl4X0N5 RnVuY3Rpb25fbWVtYmVyc1tdID0geworLSAgICB7KGNoYXIgKikgIl9fbW9kdWxlX18iLCBUX09C SkVDVCwgb2Zmc2V0b2YoUHlDRnVuY3Rpb25PYmplY3QsIG1fbW9kdWxlKSwgUFlfV1JJVEVfUkVT VFJJQ1RFRCwgMH0sCistICAgIHswLCAwLCAwLCAgMCwgMH0KKy19OworLXN0YXRpYyBQeU9iamVj dCAqCistX19QeXhfQ3lGdW5jdGlvbl9yZWR1Y2UoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSwg Q1lUSE9OX1VOVVNFRCBQeU9iamVjdCAqYXJncykKKy17CistI2lmIFBZX01BSk9SX1ZFUlNJT04g Pj0gMworLSAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcobS0+ZnVuYy5tX21sLT5tbF9u YW1lKTsKKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCAqX19QeXhfR2V0SXRlbUludF9G YXN0KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGksIGludCBpc19saXN0LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX05DUF9VTlVT RUQgaW50IHdyYXBhcm91bmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBDWVRIT05fTkNQX1VOVVNFRCBpbnQgYm91bmRzY2hlY2spIHsKKysj aWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JF RlMgJiYgQ1lUSE9OX1VTRV9UWVBFX1NMT1RTCisrICAgIGlmIChpc19saXN0IHx8IFB5TGlzdF9D aGVja0V4YWN0KG8pKSB7CisrICAgICAgICBQeV9zc2l6ZV90IG4gPSAoKCF3cmFwYXJvdW5kKSB8 IGxpa2VseShpID49IDApKSA/IGkgOiBpICsgUHlMaXN0X0dFVF9TSVpFKG8pOworKyAgICAgICAg aWYgKCghYm91bmRzY2hlY2spIHx8IChsaWtlbHkoX19QeXhfaXNfdmFsaWRfaW5kZXgobiwgUHlM aXN0X0dFVF9TSVpFKG8pKSkpKSB7CisrICAgICAgICAgICAgUHlPYmplY3QgKnIgPSBQeUxpc3Rf R0VUX0lURU0obywgbik7CisrICAgICAgICAgICAgUHlfSU5DUkVGKHIpOworKyAgICAgICAgICAg IHJldHVybiByOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hl Y2tFeGFjdChvKSkgeworKyAgICAgICAgUHlfc3NpemVfdCBuID0gKCghd3JhcGFyb3VuZCkgfCBs aWtlbHkoaSA+PSAwKSkgPyBpIDogaSArIFB5VHVwbGVfR0VUX1NJWkUobyk7CisrICAgICAgICBp ZiAoKCFib3VuZHNjaGVjaykgfHwgbGlrZWx5KF9fUHl4X2lzX3ZhbGlkX2luZGV4KG4sIFB5VHVw bGVfR0VUX1NJWkUobykpKSkgeworKyAgICAgICAgICAgIFB5T2JqZWN0ICpyID0gUHlUdXBsZV9H RVRfSVRFTShvLCBuKTsKKysgICAgICAgICAgICBQeV9JTkNSRUYocik7CisrICAgICAgICAgICAg cmV0dXJuIHI7CisrICAgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgICBQeVNlcXVlbmNl TWV0aG9kcyAqbSA9IFB5X1RZUEUobyktPnRwX2FzX3NlcXVlbmNlOworKyAgICAgICAgaWYgKGxp a2VseShtICYmIG0tPnNxX2l0ZW0pKSB7CisrICAgICAgICAgICAgaWYgKHdyYXBhcm91bmQgJiYg dW5saWtlbHkoaSA8IDApICYmIGxpa2VseShtLT5zcV9sZW5ndGgpKSB7CisrICAgICAgICAgICAg ICAgIFB5X3NzaXplX3QgbCA9IG0tPnNxX2xlbmd0aChvKTsKKysgICAgICAgICAgICAgICAgaWYg KGxpa2VseShsID49IDApKSB7CisrICAgICAgICAgICAgICAgICAgICBpICs9IGw7CisrICAgICAg ICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2Vw dGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisrICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworKyAg ICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHJldHVybiBtLT5z cV9pdGVtKG8sIGkpOworKyAgICAgICAgfQorKyAgICB9CisgI2Vsc2UKKy0gICAgcmV0dXJuIFB5 U3RyaW5nX0Zyb21TdHJpbmcobS0+ZnVuYy5tX21sLT5tbF9uYW1lKTsKKysgICAgaWYgKGlzX2xp c3QgfHwgUHlTZXF1ZW5jZV9DaGVjayhvKSkgeworKyAgICAgICAgcmV0dXJuIFB5U2VxdWVuY2Vf R2V0SXRlbShvLCBpKTsKKysgICAgfQorICNlbmRpZgorKyAgICByZXR1cm4gX19QeXhfR2V0SXRl bUludF9HZW5lcmljKG8sIFB5SW50X0Zyb21Tc2l6ZV90KGkpKTsKKyB9Cistc3RhdGljIFB5TWV0 aG9kRGVmIF9fcHl4X0N5RnVuY3Rpb25fbWV0aG9kc1tdID0geworLSAgICB7Il9fcmVkdWNlX18i LCAoUHlDRnVuY3Rpb24pX19QeXhfQ3lGdW5jdGlvbl9yZWR1Y2UsIE1FVEhfVkFSQVJHUywgMH0s CistICAgIHswLCAwLCAwLCAwfQorLX07CistI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA1MDBB MAorLSNkZWZpbmUgX19QeXhfQ3lGdW5jdGlvbl93ZWFrcmVmbGlzdChjeWZ1bmMpICgoY3lmdW5j KS0+ZnVuY193ZWFrcmVmbGlzdCkKKysKKysvKiBEZWxJdGVtSW50ICovCisrc3RhdGljIGludCBf X1B5eF9EZWxJdGVtX0dlbmVyaWMoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpqKSB7CisrICAgIGlu dCByOworKyAgICBpZiAoIWopIHJldHVybiAtMTsKKysgICAgciA9IFB5T2JqZWN0X0RlbEl0ZW0o bywgaik7CisrICAgIFB5X0RFQ1JFRihqKTsKKysgICAgcmV0dXJuIHI7CisrfQorK3N0YXRpYyBD WVRIT05fSU5MSU5FIGludCBfX1B5eF9EZWxJdGVtSW50X0Zhc3QoUHlPYmplY3QgKm8sIFB5X3Nz aXplX3QgaSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IENZVEhPTl9VTlVTRUQgaW50IGlzX2xpc3QsIENZVEhPTl9OQ1BfVU5VU0VEIGludCB3cmFwYXJv dW5kKSB7CisrI2lmICFDWVRIT05fVVNFX1RZUEVfU0xPVFMKKysgICAgaWYgKGlzX2xpc3QgfHwg UHlTZXF1ZW5jZV9DaGVjayhvKSkgeworKyAgICAgICAgcmV0dXJuIFB5U2VxdWVuY2VfRGVsSXRl bShvLCBpKTsKKysgICAgfQorICNlbHNlCistI2RlZmluZSBfX1B5eF9DeUZ1bmN0aW9uX3dlYWty ZWZsaXN0KGN5ZnVuYykgKChjeWZ1bmMpLT5mdW5jLm1fd2Vha3JlZmxpc3QpCisrICAgIFB5U2Vx dWVuY2VNZXRob2RzICptID0gUHlfVFlQRShvKS0+dHBfYXNfc2VxdWVuY2U7CisrICAgIGlmIChs aWtlbHkobSAmJiBtLT5zcV9hc3NfaXRlbSkpIHsKKysgICAgICAgIGlmICh3cmFwYXJvdW5kICYm IHVubGlrZWx5KGkgPCAwKSAmJiBsaWtlbHkobS0+c3FfbGVuZ3RoKSkgeworKyAgICAgICAgICAg IFB5X3NzaXplX3QgbCA9IG0tPnNxX2xlbmd0aChvKTsKKysgICAgICAgICAgICBpZiAobGlrZWx5 KGwgPj0gMCkpIHsKKysgICAgICAgICAgICAgICAgaSArPSBsOworKyAgICAgICAgICAgIH0gZWxz ZSB7CisrICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19P dmVyZmxvd0Vycm9yKSkKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAg ICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAg ICAgICByZXR1cm4gbS0+c3FfYXNzX2l0ZW0obywgaSwgKFB5T2JqZWN0ICopTlVMTCk7CisrICAg IH0KKyAjZW5kaWYKKy1zdGF0aWMgUHlPYmplY3QgKl9fUHl4X0N5RnVuY3Rpb25fSW5pdChfX3B5 eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgUHlNZXRob2REZWYgKm1sLCBpbnQgZmxhZ3MsIFB5T2Jq ZWN0KiBxdWFsbmFtZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ eU9iamVjdCAqY2xvc3VyZSwgUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QqIGdsb2JhbHMsIFB5 T2JqZWN0KiBjb2RlKSB7CistICAgIGlmICh1bmxpa2VseShvcCA9PSBOVUxMKSkKKy0gICAgICAg IHJldHVybiBOVUxMOworLSAgICBvcC0+ZmxhZ3MgPSBmbGFnczsKKy0gICAgX19QeXhfQ3lGdW5j dGlvbl93ZWFrcmVmbGlzdChvcCkgPSBOVUxMOworLSAgICBvcC0+ZnVuYy5tX21sID0gbWw7Cist ICAgIG9wLT5mdW5jLm1fc2VsZiA9IChQeU9iamVjdCAqKSBvcDsKKy0gICAgUHlfWElOQ1JFRihj bG9zdXJlKTsKKy0gICAgb3AtPmZ1bmNfY2xvc3VyZSA9IGNsb3N1cmU7CistICAgIFB5X1hJTkNS RUYobW9kdWxlKTsKKy0gICAgb3AtPmZ1bmMubV9tb2R1bGUgPSBtb2R1bGU7CistICAgIG9wLT5m dW5jX2RpY3QgPSBOVUxMOworLSAgICBvcC0+ZnVuY19uYW1lID0gTlVMTDsKKy0gICAgUHlfSU5D UkVGKHF1YWxuYW1lKTsKKy0gICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSBxdWFsbmFtZTsKKy0gICAg b3AtPmZ1bmNfZG9jID0gTlVMTDsKKy0gICAgb3AtPmZ1bmNfY2xhc3NvYmogPSBOVUxMOworLSAg ICBvcC0+ZnVuY19nbG9iYWxzID0gZ2xvYmFsczsKKy0gICAgUHlfSU5DUkVGKG9wLT5mdW5jX2ds b2JhbHMpOworLSAgICBQeV9YSU5DUkVGKGNvZGUpOworLSAgICBvcC0+ZnVuY19jb2RlID0gY29k ZTsKKy0gICAgb3AtPmRlZmF1bHRzX3B5b2JqZWN0cyA9IDA7CistICAgIG9wLT5kZWZhdWx0c19z aXplID0gMDsKKy0gICAgb3AtPmRlZmF1bHRzID0gTlVMTDsKKy0gICAgb3AtPmRlZmF1bHRzX3R1 cGxlID0gTlVMTDsKKy0gICAgb3AtPmRlZmF1bHRzX2t3ZGljdCA9IE5VTEw7CistICAgIG9wLT5k ZWZhdWx0c19nZXR0ZXIgPSBOVUxMOworLSAgICBvcC0+ZnVuY19hbm5vdGF0aW9ucyA9IE5VTEw7 CistICAgIHJldHVybiAoUHlPYmplY3QgKikgb3A7CisrICAgIHJldHVybiBfX1B5eF9EZWxJdGVt X0dlbmVyaWMobywgUHlJbnRfRnJvbVNzaXplX3QoaSkpOworIH0KKy1zdGF0aWMgaW50CistX19Q eXhfQ3lGdW5jdGlvbl9jbGVhcihfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICptKQorKworKy8qIEtl eXdvcmRTdHJpbmdDaGVjayAqLworK3N0YXRpYyBpbnQgX19QeXhfQ2hlY2tLZXl3b3JkU3RyaW5n cygKKysgICAgUHlPYmplY3QgKmt3ZGljdCwKKysgICAgY29uc3QgY2hhciogZnVuY3Rpb25fbmFt ZSwKKysgICAgaW50IGt3X2FsbG93ZWQpCisgeworLSAgICBQeV9DTEVBUihtLT5mdW5jX2Nsb3N1 cmUpOworLSAgICBQeV9DTEVBUihtLT5mdW5jLm1fbW9kdWxlKTsKKy0gICAgUHlfQ0xFQVIobS0+ ZnVuY19kaWN0KTsKKy0gICAgUHlfQ0xFQVIobS0+ZnVuY19uYW1lKTsKKy0gICAgUHlfQ0xFQVIo bS0+ZnVuY19xdWFsbmFtZSk7CistICAgIFB5X0NMRUFSKG0tPmZ1bmNfZG9jKTsKKy0gICAgUHlf Q0xFQVIobS0+ZnVuY19nbG9iYWxzKTsKKy0gICAgUHlfQ0xFQVIobS0+ZnVuY19jb2RlKTsKKy0g ICAgUHlfQ0xFQVIobS0+ZnVuY19jbGFzc29iaik7CistICAgIFB5X0NMRUFSKG0tPmRlZmF1bHRz X3R1cGxlKTsKKy0gICAgUHlfQ0xFQVIobS0+ZGVmYXVsdHNfa3dkaWN0KTsKKy0gICAgUHlfQ0xF QVIobS0+ZnVuY19hbm5vdGF0aW9ucyk7CistICAgIGlmIChtLT5kZWZhdWx0cykgeworLSAgICAg ICAgUHlPYmplY3QgKipweWRlZmF1bHRzID0gX19QeXhfQ3lGdW5jdGlvbl9EZWZhdWx0cyhQeU9i amVjdCAqLCBtKTsKKy0gICAgICAgIGludCBpOworLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG0t PmRlZmF1bHRzX3B5b2JqZWN0czsgaSsrKQorLSAgICAgICAgICAgIFB5X1hERUNSRUYocHlkZWZh dWx0c1tpXSk7CistICAgICAgICBQeU9iamVjdF9GcmVlKG0tPmRlZmF1bHRzKTsKKy0gICAgICAg IG0tPmRlZmF1bHRzID0gTlVMTDsKKysgICAgUHlPYmplY3QqIGtleSA9IDA7CisrICAgIFB5X3Nz aXplX3QgcG9zID0gMDsKKysjaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZCisrICAgIGlmICgh a3dfYWxsb3dlZCAmJiBQeURpY3RfTmV4dChrd2RpY3QsICZwb3MsICZrZXksIDApKQorKyAgICAg ICAgZ290byBpbnZhbGlkX2tleXdvcmQ7CisrICAgIHJldHVybiAxOworKyNlbHNlCisrICAgIHdo aWxlIChQeURpY3RfTmV4dChrd2RpY3QsICZwb3MsICZrZXksIDApKSB7CisrICAgICAgICAjaWYg UFlfTUFKT1JfVkVSU0lPTiA8IDMKKysgICAgICAgIGlmICh1bmxpa2VseSghUHlTdHJpbmdfQ2hl Y2soa2V5KSkpCisrICAgICAgICAjZW5kaWYKKysgICAgICAgICAgICBpZiAodW5saWtlbHkoIVB5 VW5pY29kZV9DaGVjayhrZXkpKSkKKysgICAgICAgICAgICAgICAgZ290byBpbnZhbGlkX2tleXdv cmRfdHlwZTsKKyAgICAgfQorKyAgICBpZiAoKCFrd19hbGxvd2VkKSAmJiB1bmxpa2VseShrZXkp KQorKyAgICAgICAgZ290byBpbnZhbGlkX2tleXdvcmQ7CisrICAgIHJldHVybiAxOworK2ludmFs aWRfa2V5d29yZF90eXBlOgorKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorKyAg ICAgICAgIiUuMjAwcygpIGtleXdvcmRzIG11c3QgYmUgc3RyaW5ncyIsIGZ1bmN0aW9uX25hbWUp OworKyAgICByZXR1cm4gMDsKKysjZW5kaWYKKytpbnZhbGlkX2tleXdvcmQ6CisrICAgIFB5RXJy X0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisrICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMwor KyAgICAgICAgIiUuMjAwcygpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQgJyUu MjAwcyciLAorKyAgICAgICAgZnVuY3Rpb25fbmFtZSwgUHlTdHJpbmdfQXNTdHJpbmcoa2V5KSk7 CisrICAgICNlbHNlCisrICAgICAgICAiJXMoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFy Z3VtZW50ICclVSciLAorKyAgICAgICAgZnVuY3Rpb25fbmFtZSwga2V5KTsKKysgICAgI2VuZGlm CisgICAgIHJldHVybiAwOworIH0KKy1zdGF0aWMgdm9pZCBfX1B5eF9fQ3lGdW5jdGlvbl9kZWFs bG9jKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm0pCisteworLSAgICBpZiAoX19QeXhfQ3lGdW5j dGlvbl93ZWFrcmVmbGlzdChtKSAhPSBOVUxMKQorLSAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFr UmVmcygoUHlPYmplY3QgKikgbSk7CistICAgIF9fUHl4X0N5RnVuY3Rpb25fY2xlYXIobSk7Cist ICAgIFB5T2JqZWN0X0dDX0RlbChtKTsKKy19Cistc3RhdGljIHZvaWQgX19QeXhfQ3lGdW5jdGlv bl9kZWFsbG9jKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm0pCisteworLSAgICBQeU9iamVjdF9H Q19VblRyYWNrKG0pOworLSAgICBfX1B5eF9fQ3lGdW5jdGlvbl9kZWFsbG9jKG0pOworKworKy8q IE5vbmUgKi8KKytzdGF0aWMgQ1lUSE9OX0lOTElORSB2b2lkIF9fUHl4X1JhaXNlQ2xvc3VyZU5h bWVFcnJvcihjb25zdCBjaGFyICp2YXJuYW1lKSB7CisrICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19O YW1lRXJyb3IsICJmcmVlIHZhcmlhYmxlICclcycgcmVmZXJlbmNlZCBiZWZvcmUgYXNzaWdubWVu dCBpbiBlbmNsb3Npbmcgc2NvcGUiLCB2YXJuYW1lKTsKKyB9Cistc3RhdGljIGludCBfX1B5eF9D eUZ1bmN0aW9uX3RyYXZlcnNlKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm0sIHZpc2l0cHJvYyB2 aXNpdCwgdm9pZCAqYXJnKQorLXsKKy0gICAgUHlfVklTSVQobS0+ZnVuY19jbG9zdXJlKTsKKy0g ICAgUHlfVklTSVQobS0+ZnVuYy5tX21vZHVsZSk7CistICAgIFB5X1ZJU0lUKG0tPmZ1bmNfZGlj dCk7CistICAgIFB5X1ZJU0lUKG0tPmZ1bmNfbmFtZSk7CistICAgIFB5X1ZJU0lUKG0tPmZ1bmNf cXVhbG5hbWUpOworLSAgICBQeV9WSVNJVChtLT5mdW5jX2RvYyk7CistICAgIFB5X1ZJU0lUKG0t PmZ1bmNfZ2xvYmFscyk7CistICAgIFB5X1ZJU0lUKG0tPmZ1bmNfY29kZSk7CistICAgIFB5X1ZJ U0lUKG0tPmZ1bmNfY2xhc3NvYmopOworLSAgICBQeV9WSVNJVChtLT5kZWZhdWx0c190dXBsZSk7 CistICAgIFB5X1ZJU0lUKG0tPmRlZmF1bHRzX2t3ZGljdCk7CistICAgIGlmIChtLT5kZWZhdWx0 cykgeworLSAgICAgICAgUHlPYmplY3QgKipweWRlZmF1bHRzID0gX19QeXhfQ3lGdW5jdGlvbl9E ZWZhdWx0cyhQeU9iamVjdCAqLCBtKTsKKy0gICAgICAgIGludCBpOworLSAgICAgICAgZm9yIChp ID0gMDsgaSA8IG0tPmRlZmF1bHRzX3B5b2JqZWN0czsgaSsrKQorLSAgICAgICAgICAgIFB5X1ZJ U0lUKHB5ZGVmYXVsdHNbaV0pOworKworKy8qIFJhaXNlRXhjZXB0aW9uICovCisrI2lmIFBZX01B Sk9SX1ZFUlNJT04gPCAzCisrc3RhdGljIHZvaWQgX19QeXhfUmFpc2UoUHlPYmplY3QgKnR5cGUs IFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRiLAorKyAgICAgICAgICAgICAgICAgICAgICAg IENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKmNhdXNlKSB7CisrICAgIF9fUHl4X1B5VGhyZWFkU3Rh dGVfZGVjbGFyZQorKyAgICBQeV9YSU5DUkVGKHR5cGUpOworKyAgICBpZiAoIXZhbHVlIHx8IHZh bHVlID09IFB5X05vbmUpCisrICAgICAgICB2YWx1ZSA9IE5VTEw7CisrICAgIGVsc2UKKysgICAg ICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisrICAgIGlmICghdGIgfHwgdGIgPT0gUHlfTm9uZSkKKysg ICAgICAgIHRiID0gTlVMTDsKKysgICAgZWxzZSB7CisrICAgICAgICBQeV9JTkNSRUYodGIpOwor KyAgICAgICAgaWYgKCFQeVRyYWNlQmFja19DaGVjayh0YikpIHsKKysgICAgICAgICAgICBQeUVy cl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorKyAgICAgICAgICAgICAgICAicmFpc2U6IGFy ZyAzIG11c3QgYmUgYSB0cmFjZWJhY2sgb3IgTm9uZSIpOworKyAgICAgICAgICAgIGdvdG8gcmFp c2VfZXJyb3I7CisrICAgICAgICB9CisgICAgIH0KKy0gICAgcmV0dXJuIDA7CisrICAgIGlmIChQ eVR5cGVfQ2hlY2sodHlwZSkpIHsKKysjaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZCisrICAg ICAgICBpZiAoIXZhbHVlKSB7CisrICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworKyAg ICAgICAgICAgIHZhbHVlID0gUHlfTm9uZTsKKysgICAgICAgIH0KKysjZW5kaWYKKysgICAgICAg IFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmdHlwZSwgJnZhbHVlLCAmdGIpOworKyAgICB9IGVs c2UgeworKyAgICAgICAgaWYgKHZhbHVlKSB7CisrICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5n KFB5RXhjX1R5cGVFcnJvciwKKysgICAgICAgICAgICAgICAgImluc3RhbmNlIGV4Y2VwdGlvbiBt YXkgbm90IGhhdmUgYSBzZXBhcmF0ZSB2YWx1ZSIpOworKyAgICAgICAgICAgIGdvdG8gcmFpc2Vf ZXJyb3I7CisrICAgICAgICB9CisrICAgICAgICB2YWx1ZSA9IHR5cGU7CisrICAgICAgICB0eXBl ID0gKFB5T2JqZWN0KikgUHlfVFlQRSh0eXBlKTsKKysgICAgICAgIFB5X0lOQ1JFRih0eXBlKTsK KysgICAgICAgIGlmICghUHlUeXBlX0lzU3VidHlwZSgoUHlUeXBlT2JqZWN0ICopdHlwZSwgKFB5 VHlwZU9iamVjdCAqKVB5RXhjX0Jhc2VFeGNlcHRpb24pKSB7CisrICAgICAgICAgICAgUHlFcnJf U2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKysgICAgICAgICAgICAgICAgInJhaXNlOiBleGNl cHRpb24gY2xhc3MgbXVzdCBiZSBhIHN1YmNsYXNzIG9mIEJhc2VFeGNlcHRpb24iKTsKKysgICAg ICAgICAgICBnb3RvIHJhaXNlX2Vycm9yOworKyAgICAgICAgfQorKyAgICB9CisrICAgIF9fUHl4 X1B5VGhyZWFkU3RhdGVfYXNzaWduCisrICAgIF9fUHl4X0VyclJlc3RvcmUodHlwZSwgdmFsdWUs IHRiKTsKKysgICAgcmV0dXJuOworK3JhaXNlX2Vycm9yOgorKyAgICBQeV9YREVDUkVGKHZhbHVl KTsKKysgICAgUHlfWERFQ1JFRih0eXBlKTsKKysgICAgUHlfWERFQ1JFRih0Yik7CisrICAgIHJl dHVybjsKKyB9Cistc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9DeUZ1bmN0aW9uX2Rlc2NyX2dldChQ eU9iamVjdCAqZnVuYywgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKnR5cGUpCisteworLSNpZiBQ WV9NQUpPUl9WRVJTSU9OIDwgMworLSAgICBfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICptID0gKF9f cHl4X0N5RnVuY3Rpb25PYmplY3QgKikgZnVuYzsKKy0gICAgaWYgKG0tPmZsYWdzICYgX19QeXhf Q1lGVU5DVElPTl9TVEFUSUNNRVRIT0QpIHsKKy0gICAgICAgIFB5X0lOQ1JFRihmdW5jKTsKKy0g ICAgICAgIHJldHVybiBmdW5jOworKyNlbHNlCisrc3RhdGljIHZvaWQgX19QeXhfUmFpc2UoUHlP YmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRiLCBQeU9iamVjdCAqY2F1 c2UpIHsKKysgICAgUHlPYmplY3QqIG93bmVkX2luc3RhbmNlID0gTlVMTDsKKysgICAgaWYgKHRi ID09IFB5X05vbmUpIHsKKysgICAgICAgIHRiID0gMDsKKysgICAgfSBlbHNlIGlmICh0YiAmJiAh UHlUcmFjZUJhY2tfQ2hlY2sodGIpKSB7CisrICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNf VHlwZUVycm9yLAorKyAgICAgICAgICAgICJyYWlzZTogYXJnIDMgbXVzdCBiZSBhIHRyYWNlYmFj ayBvciBOb25lIik7CisrICAgICAgICBnb3RvIGJhZDsKKyAgICAgfQorLSAgICBpZiAobS0+Zmxh Z3MgJiBfX1B5eF9DWUZVTkNUSU9OX0NMQVNTTUVUSE9EKSB7CistICAgICAgICBpZiAodHlwZSA9 PSBOVUxMKQorLSAgICAgICAgICAgIHR5cGUgPSAoUHlPYmplY3QgKikoUHlfVFlQRShvYmopKTsK Ky0gICAgICAgIHJldHVybiBfX1B5eF9QeU1ldGhvZF9OZXcoZnVuYywgdHlwZSwgKFB5T2JqZWN0 ICopKFB5X1RZUEUodHlwZSkpKTsKKysgICAgaWYgKHZhbHVlID09IFB5X05vbmUpCisrICAgICAg ICB2YWx1ZSA9IDA7CisrICAgIGlmIChQeUV4Y2VwdGlvbkluc3RhbmNlX0NoZWNrKHR5cGUpKSB7 CisrICAgICAgICBpZiAodmFsdWUpIHsKKysgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlF eGNfVHlwZUVycm9yLAorKyAgICAgICAgICAgICAgICAiaW5zdGFuY2UgZXhjZXB0aW9uIG1heSBu b3QgaGF2ZSBhIHNlcGFyYXRlIHZhbHVlIik7CisrICAgICAgICAgICAgZ290byBiYWQ7CisrICAg ICAgICB9CisrICAgICAgICB2YWx1ZSA9IHR5cGU7CisrICAgICAgICB0eXBlID0gKFB5T2JqZWN0 KikgUHlfVFlQRSh2YWx1ZSk7CisrICAgIH0gZWxzZSBpZiAoUHlFeGNlcHRpb25DbGFzc19DaGVj ayh0eXBlKSkgeworKyAgICAgICAgUHlPYmplY3QgKmluc3RhbmNlX2NsYXNzID0gTlVMTDsKKysg ICAgICAgIGlmICh2YWx1ZSAmJiBQeUV4Y2VwdGlvbkluc3RhbmNlX0NoZWNrKHZhbHVlKSkgewor KyAgICAgICAgICAgIGluc3RhbmNlX2NsYXNzID0gKFB5T2JqZWN0KikgUHlfVFlQRSh2YWx1ZSk7 CisrICAgICAgICAgICAgaWYgKGluc3RhbmNlX2NsYXNzICE9IHR5cGUpIHsKKysgICAgICAgICAg ICAgICAgaW50IGlzX3N1YmNsYXNzID0gUHlPYmplY3RfSXNTdWJjbGFzcyhpbnN0YW5jZV9jbGFz cywgdHlwZSk7CisrICAgICAgICAgICAgICAgIGlmICghaXNfc3ViY2xhc3MpIHsKKysgICAgICAg ICAgICAgICAgICAgIGluc3RhbmNlX2NsYXNzID0gTlVMTDsKKysgICAgICAgICAgICAgICAgfSBl bHNlIGlmICh1bmxpa2VseShpc19zdWJjbGFzcyA9PSAtMSkpIHsKKysgICAgICAgICAgICAgICAg ICAgIGdvdG8gYmFkOworKyAgICAgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAg ICAgICAgdHlwZSA9IGluc3RhbmNlX2NsYXNzOworKyAgICAgICAgICAgICAgICB9CisrICAgICAg ICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKCFpbnN0YW5jZV9jbGFzcykgeworKyAg ICAgICAgICAgIFB5T2JqZWN0ICphcmdzOworKyAgICAgICAgICAgIGlmICghdmFsdWUpCisrICAg ICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKKysgICAgICAgICAgICBlbHNlIGlm IChQeVR1cGxlX0NoZWNrKHZhbHVlKSkgeworKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYodmFs dWUpOworKyAgICAgICAgICAgICAgICBhcmdzID0gdmFsdWU7CisrICAgICAgICAgICAgfSBlbHNl CisrICAgICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX1BhY2soMSwgdmFsdWUpOworKyAgICAg ICAgICAgIGlmICghYXJncykKKysgICAgICAgICAgICAgICAgZ290byBiYWQ7CisrICAgICAgICAg ICAgb3duZWRfaW5zdGFuY2UgPSBQeU9iamVjdF9DYWxsKHR5cGUsIGFyZ3MsIE5VTEwpOworKyAg ICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKysgICAgICAgICAgICBpZiAoIW93bmVkX2luc3Rh bmNlKQorKyAgICAgICAgICAgICAgICBnb3RvIGJhZDsKKysgICAgICAgICAgICB2YWx1ZSA9IG93 bmVkX2luc3RhbmNlOworKyAgICAgICAgICAgIGlmICghUHlFeGNlcHRpb25JbnN0YW5jZV9DaGVj ayh2YWx1ZSkpIHsKKysgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJv ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYWxsaW5nICVSIHNob3VsZCBoYXZl IHJldHVybmVkIGFuIGluc3RhbmNlIG9mICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJCYXNlRXhjZXB0aW9uLCBub3QgJVIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dHlwZSwgUHlfVFlQRSh2YWx1ZSkpOworKyAgICAgICAgICAgICAgICBnb3RvIGJhZDsKKysgICAg ICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgICBQeUVycl9TZXRT dHJpbmcoUHlFeGNfVHlwZUVycm9yLAorKyAgICAgICAgICAgICJyYWlzZTogZXhjZXB0aW9uIGNs YXNzIG11c3QgYmUgYSBzdWJjbGFzcyBvZiBCYXNlRXhjZXB0aW9uIik7CisrICAgICAgICBnb3Rv IGJhZDsKKyAgICAgfQorLSAgICBpZiAob2JqID09IFB5X05vbmUpCistICAgICAgICBvYmogPSBO VUxMOworKyAgICBpZiAoY2F1c2UpIHsKKysgICAgICAgIFB5T2JqZWN0ICpmaXhlZF9jYXVzZTsK KysgICAgICAgIGlmIChjYXVzZSA9PSBQeV9Ob25lKSB7CisrICAgICAgICAgICAgZml4ZWRfY2F1 c2UgPSBOVUxMOworKyAgICAgICAgfSBlbHNlIGlmIChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKGNh dXNlKSkgeworKyAgICAgICAgICAgIGZpeGVkX2NhdXNlID0gUHlPYmplY3RfQ2FsbE9iamVjdChj YXVzZSwgTlVMTCk7CisrICAgICAgICAgICAgaWYgKGZpeGVkX2NhdXNlID09IE5VTEwpCisrICAg ICAgICAgICAgICAgIGdvdG8gYmFkOworKyAgICAgICAgfSBlbHNlIGlmIChQeUV4Y2VwdGlvbklu c3RhbmNlX0NoZWNrKGNhdXNlKSkgeworKyAgICAgICAgICAgIGZpeGVkX2NhdXNlID0gY2F1c2U7 CisrICAgICAgICAgICAgUHlfSU5DUkVGKGZpeGVkX2NhdXNlKTsKKysgICAgICAgIH0gZWxzZSB7 CisrICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbiBjYXVzZXMgbXVzdCBkZXJpdmUgZnJvbSAi CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCYXNlRXhjZXB0aW9uIik7CisrICAgICAg ICAgICAgZ290byBiYWQ7CisrICAgICAgICB9CisrICAgICAgICBQeUV4Y2VwdGlvbl9TZXRDYXVz ZSh2YWx1ZSwgZml4ZWRfY2F1c2UpOworKyAgICB9CisrICAgIFB5RXJyX1NldE9iamVjdCh0eXBl LCB2YWx1ZSk7CisrICAgIGlmICh0YikgeworKyNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkK KysgICAgICAgIFB5T2JqZWN0ICp0bXBfdHlwZSwgKnRtcF92YWx1ZSwgKnRtcF90YjsKKysgICAg ICAgIFB5RXJyX0ZldGNoKCZ0bXBfdHlwZSwgJnRtcF92YWx1ZSwgJnRtcF90Yik7CisrICAgICAg ICBQeV9JTkNSRUYodGIpOworKyAgICAgICAgUHlFcnJfUmVzdG9yZSh0bXBfdHlwZSwgdG1wX3Zh bHVlLCB0Yik7CisrICAgICAgICBQeV9YREVDUkVGKHRtcF90Yik7CisrI2Vsc2UKKysgICAgICAg IFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IF9fUHl4X1B5VGhyZWFkU3RhdGVfQ3VycmVudDsKKysg ICAgICAgIFB5T2JqZWN0KiB0bXBfdGIgPSB0c3RhdGUtPmN1cmV4Y190cmFjZWJhY2s7CisrICAg ICAgICBpZiAodGIgIT0gdG1wX3RiKSB7CisrICAgICAgICAgICAgUHlfSU5DUkVGKHRiKTsKKysg ICAgICAgICAgICB0c3RhdGUtPmN1cmV4Y190cmFjZWJhY2sgPSB0YjsKKysgICAgICAgICAgICBQ eV9YREVDUkVGKHRtcF90Yik7CisrICAgICAgICB9CisgI2VuZGlmCistICAgIHJldHVybiBfX1B5 eF9QeU1ldGhvZF9OZXcoZnVuYywgb2JqLCB0eXBlKTsKKysgICAgfQorK2JhZDoKKysgICAgUHlf WERFQ1JFRihvd25lZF9pbnN0YW5jZSk7CisrICAgIHJldHVybjsKKyt9CisrI2VuZGlmCisrCisr LyogRmV0Y2hDb21tb25UeXBlICovCisrc3RhdGljIFB5VHlwZU9iamVjdCogX19QeXhfRmV0Y2hD b21tb25UeXBlKFB5VHlwZU9iamVjdCogdHlwZSkgeworKyAgICBQeU9iamVjdCogZmFrZV9tb2R1 bGU7CisrICAgIFB5VHlwZU9iamVjdCogY2FjaGVkX3R5cGUgPSBOVUxMOworKyAgICBmYWtlX21v ZHVsZSA9IFB5SW1wb3J0X0FkZE1vZHVsZSgoY2hhciopICJfY3l0aG9uXyIgQ1lUSE9OX0FCSSk7 CisrICAgIGlmICghZmFrZV9tb2R1bGUpIHJldHVybiBOVUxMOworKyAgICBQeV9JTkNSRUYoZmFr ZV9tb2R1bGUpOworKyAgICBjYWNoZWRfdHlwZSA9IChQeVR5cGVPYmplY3QqKSBQeU9iamVjdF9H ZXRBdHRyU3RyaW5nKGZha2VfbW9kdWxlLCB0eXBlLT50cF9uYW1lKTsKKysgICAgaWYgKGNhY2hl ZF90eXBlKSB7CisrICAgICAgICBpZiAoIVB5VHlwZV9DaGVjaygoUHlPYmplY3QqKWNhY2hlZF90 eXBlKSkgeworKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisrICAg ICAgICAgICAgICAgICJTaGFyZWQgQ3l0aG9uIHR5cGUgJS4yMDBzIGlzIG5vdCBhIHR5cGUgb2Jq ZWN0IiwKKysgICAgICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSk7CisrICAgICAgICAgICAgZ290 byBiYWQ7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY2FjaGVkX3R5cGUtPnRwX2Jhc2ljc2l6 ZSAhPSB0eXBlLT50cF9iYXNpY3NpemUpIHsKKysgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlF eGNfVHlwZUVycm9yLAorKyAgICAgICAgICAgICAgICAiU2hhcmVkIEN5dGhvbiB0eXBlICUuMjAw cyBoYXMgdGhlIHdyb25nIHNpemUsIHRyeSByZWNvbXBpbGluZyIsCisrICAgICAgICAgICAgICAg IHR5cGUtPnRwX25hbWUpOworKyAgICAgICAgICAgIGdvdG8gYmFkOworKyAgICAgICAgfQorKyAg ICB9IGVsc2UgeworKyAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0 dHJpYnV0ZUVycm9yKSkgZ290byBiYWQ7CisrICAgICAgICBQeUVycl9DbGVhcigpOworKyAgICAg ICAgaWYgKFB5VHlwZV9SZWFkeSh0eXBlKSA8IDApIGdvdG8gYmFkOworKyAgICAgICAgaWYgKFB5 T2JqZWN0X1NldEF0dHJTdHJpbmcoZmFrZV9tb2R1bGUsIHR5cGUtPnRwX25hbWUsIChQeU9iamVj dCopIHR5cGUpIDwgMCkKKysgICAgICAgICAgICBnb3RvIGJhZDsKKysgICAgICAgIFB5X0lOQ1JF Rih0eXBlKTsKKysgICAgICAgIGNhY2hlZF90eXBlID0gdHlwZTsKKysgICAgfQorK2RvbmU6Cisr ICAgIFB5X0RFQ1JFRihmYWtlX21vZHVsZSk7CisrICAgIHJldHVybiBjYWNoZWRfdHlwZTsKKyti YWQ6CisrICAgIFB5X1hERUNSRUYoY2FjaGVkX3R5cGUpOworKyAgICBjYWNoZWRfdHlwZSA9IE5V TEw7CisrICAgIGdvdG8gZG9uZTsKKyB9Cistc3RhdGljIFB5T2JqZWN0KgorLV9fUHl4X0N5RnVu Y3Rpb25fcmVwcihfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCkKKysKKysvKiBDeXRob25GdW5j dGlvblNoYXJlZCAqLworKyNpbmNsdWRlIDxzdHJ1Y3RtZW1iZXIuaD4KKytzdGF0aWMgUHlPYmpl Y3QgKgorK19fUHl4X0N5RnVuY3Rpb25fZ2V0X2RvYyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpv cCwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjbG9zdXJlKQorIHsKKysgICAgaWYgKHVubGlrZWx5KG9w LT5mdW5jX2RvYyA9PSBOVUxMKSkgeworKyAgICAgICAgaWYgKG9wLT5mdW5jLm1fbWwtPm1sX2Rv YykgeworICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgcmV0dXJuIFB5VW5pY29kZV9G cm9tRm9ybWF0KCI8Y3lmdW5jdGlvbiAlVSBhdCAlcD4iLAorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb3AtPmZ1bmNfcXVhbG5hbWUsICh2b2lkICopb3ApOworKyAgICAgICAgICAg IG9wLT5mdW5jX2RvYyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG9wLT5mdW5jLm1fbWwtPm1sX2Rv Yyk7CisgI2Vsc2UKKy0gICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21Gb3JtYXQoIjxjeWZ1bmN0aW9u ICVzIGF0ICVwPiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RyaW5nX0Fz U3RyaW5nKG9wLT5mdW5jX3F1YWxuYW1lKSwgKHZvaWQgKilvcCk7CisrICAgICAgICAgICAgb3At PmZ1bmNfZG9jID0gUHlTdHJpbmdfRnJvbVN0cmluZyhvcC0+ZnVuYy5tX21sLT5tbF9kb2MpOwor ICNlbmRpZgorLX0KKy1zdGF0aWMgUHlPYmplY3QgKiBfX1B5eF9DeUZ1bmN0aW9uX0NhbGxNZXRo b2QoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnLCBQeU9iamVj dCAqa3cpIHsKKy0gICAgUHlDRnVuY3Rpb25PYmplY3QqIGYgPSAoUHlDRnVuY3Rpb25PYmplY3Qq KWZ1bmM7CistICAgIFB5Q0Z1bmN0aW9uIG1ldGggPSBmLT5tX21sLT5tbF9tZXRoOworLSAgICBQ eV9zc2l6ZV90IHNpemU7CistICAgIHN3aXRjaCAoZi0+bV9tbC0+bWxfZmxhZ3MgJiAoTUVUSF9W QVJBUkdTIHwgTUVUSF9LRVlXT1JEUyB8IE1FVEhfTk9BUkdTIHwgTUVUSF9PKSkgeworLSAgICBj YXNlIE1FVEhfVkFSQVJHUzoKKy0gICAgICAgIGlmIChsaWtlbHkoa3cgPT0gTlVMTCB8fCBQeURp Y3RfU2l6ZShrdykgPT0gMCkpCistICAgICAgICAgICAgcmV0dXJuICgqbWV0aCkoc2VsZiwgYXJn KTsKKy0gICAgICAgIGJyZWFrOworLSAgICBjYXNlIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09S RFM6CistICAgICAgICByZXR1cm4gKCooUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpKHZvaWQqKW1l dGgpKHNlbGYsIGFyZywga3cpOworLSAgICBjYXNlIE1FVEhfTk9BUkdTOgorLSAgICAgICAgaWYg KGxpa2VseShrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKSkgeworLSAgICAgICAg ICAgIHNpemUgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZyk7CistICAgICAgICAgICAgaWYgKGxpa2Vs eShzaXplID09IDApKQorLSAgICAgICAgICAgICAgICByZXR1cm4gKCptZXRoKShzZWxmLCBOVUxM KTsKKy0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorLSAgICAgICAg ICAgICAgICAiJS4yMDBzKCkgdGFrZXMgbm8gYXJndW1lbnRzICglIiBDWVRIT05fRk9STUFUX1NT SVpFX1QgImQgZ2l2ZW4pIiwKKy0gICAgICAgICAgICAgICAgZi0+bV9tbC0+bWxfbmFtZSwgc2l6 ZSk7CistICAgICAgICAgICAgcmV0dXJuIE5VTEw7CistICAgICAgICB9CistICAgICAgICBicmVh azsKKy0gICAgY2FzZSBNRVRIX086CistICAgICAgICBpZiAobGlrZWx5KGt3ID09IE5VTEwgfHwg UHlEaWN0X1NpemUoa3cpID09IDApKSB7CistICAgICAgICAgICAgc2l6ZSA9IFB5VHVwbGVfR0VU X1NJWkUoYXJnKTsKKy0gICAgICAgICAgICBpZiAobGlrZWx5KHNpemUgPT0gMSkpIHsKKy0gICAg ICAgICAgICAgICAgUHlPYmplY3QgKnJlc3VsdCwgKmFyZzA7CistICAgICAgICAgICAgICAgICNp ZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVG UworLSAgICAgICAgICAgICAgICBhcmcwID0gUHlUdXBsZV9HRVRfSVRFTShhcmcsIDApOworLSAg ICAgICAgICAgICAgICAjZWxzZQorLSAgICAgICAgICAgICAgICBhcmcwID0gUHlTZXF1ZW5jZV9J VEVNKGFyZywgMCk7IGlmICh1bmxpa2VseSghYXJnMCkpIHJldHVybiBOVUxMOworLSAgICAgICAg ICAgICAgICAjZW5kaWYKKy0gICAgICAgICAgICAgICAgcmVzdWx0ID0gKCptZXRoKShzZWxmLCBh cmcwKTsKKy0gICAgICAgICAgICAgICAgI2lmICEoQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAm JiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMpCistICAgICAgICAgICAgICAgIFB5X0RFQ1JF RihhcmcwKTsKKy0gICAgICAgICAgICAgICAgI2VuZGlmCistICAgICAgICAgICAgICAgIHJldHVy biByZXN1bHQ7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4 Y19UeXBlRXJyb3IsCistICAgICAgICAgICAgICAgICIlLjIwMHMoKSB0YWtlcyBleGFjdGx5IG9u ZSBhcmd1bWVudCAoJSIgQ1lUSE9OX0ZPUk1BVF9TU0laRV9UICJkIGdpdmVuKSIsCistICAgICAg ICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUsIHNpemUpOworLSAgICAgICAgICAgIHJldHVybiBO VUxMOworKyAgICAgICAgICAgIGlmICh1bmxpa2VseShvcC0+ZnVuY19kb2MgPT0gTlVMTCkpCisr ICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAg ICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisrICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Cisg ICAgICAgICB9CistICAgICAgICBicmVhazsKKy0gICAgZGVmYXVsdDoKKy0gICAgICAgIFB5RXJy X1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgIkJhZCBjYWxsIGZsYWdzIGluICIKKy0gICAg ICAgICAgICAgICAgICAgICAgICAiX19QeXhfQ3lGdW5jdGlvbl9DYWxsLiBNRVRIX09MREFSR1Mg aXMgbm8gIgorLSAgICAgICAgICAgICAgICAgICAgICAgICJsb25nZXIgc3VwcG9ydGVkISIpOwor LSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgIH0KKy0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5 cGVFcnJvciwgIiUuMjAwcygpIHRha2VzIG5vIGtleXdvcmQgYXJndW1lbnRzIiwKKy0gICAgICAg ICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUpOworLSAgICByZXR1cm4gTlVMTDsKKy19Cistc3Rh dGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QgKl9fUHl4X0N5RnVuY3Rpb25fQ2FsbChQeU9iamVj dCAqZnVuYywgUHlPYmplY3QgKmFyZywgUHlPYmplY3QgKmt3KSB7CistICAgIHJldHVybiBfX1B5 eF9DeUZ1bmN0aW9uX0NhbGxNZXRob2QoZnVuYywgKChQeUNGdW5jdGlvbk9iamVjdCopZnVuYykt Pm1fc2VsZiwgYXJnLCBrdyk7CisrICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19kb2MpOworKyAgICBy ZXR1cm4gb3AtPmZ1bmNfZG9jOworIH0KKy1zdGF0aWMgUHlPYmplY3QgKl9fUHl4X0N5RnVuY3Rp b25fQ2FsbEFzTWV0aG9kKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3Qg Kmt3KSB7CistICAgIFB5T2JqZWN0ICpyZXN1bHQ7CistICAgIF9fcHl4X0N5RnVuY3Rpb25PYmpl Y3QgKmN5ZnVuYyA9IChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICopIGZ1bmM7CistICAgIGlmICgo Y3lmdW5jLT5mbGFncyAmIF9fUHl4X0NZRlVOQ1RJT05fQ0NMQVNTKSAmJiAhKGN5ZnVuYy0+Zmxh Z3MgJiBfX1B5eF9DWUZVTkNUSU9OX1NUQVRJQ01FVEhPRCkpIHsKKy0gICAgICAgIFB5X3NzaXpl X3QgYXJnYzsKKy0gICAgICAgIFB5T2JqZWN0ICpuZXdfYXJnczsKKy0gICAgICAgIFB5T2JqZWN0 ICpzZWxmOworLSAgICAgICAgYXJnYyA9IFB5VHVwbGVfR0VUX1NJWkUoYXJncyk7CistICAgICAg ICBuZXdfYXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoYXJncywgMSwgYXJnYyk7CistICAgICAgICBp ZiAodW5saWtlbHkoIW5ld19hcmdzKSkKKy0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAg ICAgIHNlbGYgPSBQeVR1cGxlX0dldEl0ZW0oYXJncywgMCk7CistICAgICAgICBpZiAodW5saWtl bHkoIXNlbGYpKSB7CistICAgICAgICAgICAgUHlfREVDUkVGKG5ld19hcmdzKTsKKy0gICAgICAg ICAgICByZXR1cm4gTlVMTDsKKy0gICAgICAgIH0KKy0gICAgICAgIHJlc3VsdCA9IF9fUHl4X0N5 RnVuY3Rpb25fQ2FsbE1ldGhvZChmdW5jLCBzZWxmLCBuZXdfYXJncywga3cpOworLSAgICAgICAg UHlfREVDUkVGKG5ld19hcmdzKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHJlc3VsdCA9IF9f UHl4X0N5RnVuY3Rpb25fQ2FsbChmdW5jLCBhcmdzLCBrdyk7Cisrc3RhdGljIGludAorK19fUHl4 X0N5RnVuY3Rpb25fc2V0X2RvYyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgUHlPYmplY3Qg KnZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCisreworKyAgICBQeU9iamVjdCAq dG1wID0gb3AtPmZ1bmNfZG9jOworKyAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworKyAgICAgICAg dmFsdWUgPSBQeV9Ob25lOworICAgICB9CistICAgIHJldHVybiByZXN1bHQ7CisrICAgIFB5X0lO Q1JFRih2YWx1ZSk7CisrICAgIG9wLT5mdW5jX2RvYyA9IHZhbHVlOworKyAgICBQeV9YREVDUkVG KHRtcCk7CisrICAgIHJldHVybiAwOworIH0KKy1zdGF0aWMgUHlUeXBlT2JqZWN0IF9fcHl4X0N5 RnVuY3Rpb25UeXBlX3R5cGUgPSB7CistICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgwLCAwKQor LSAgICAiY3l0aG9uX2Z1bmN0aW9uX29yX21ldGhvZCIsCistICAgIHNpemVvZihfX3B5eF9DeUZ1 bmN0aW9uT2JqZWN0KSwKKy0gICAgMCwKKy0gICAgKGRlc3RydWN0b3IpIF9fUHl4X0N5RnVuY3Rp b25fZGVhbGxvYywKKy0gICAgMCwKKy0gICAgMCwKKy0gICAgMCwKKy0jaWYgUFlfTUFKT1JfVkVS U0lPTiA8IDMKKy0gICAgMCwKKytzdGF0aWMgUHlPYmplY3QgKgorK19fUHl4X0N5RnVuY3Rpb25f Z2V0X25hbWUoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIENZVEhPTl9VTlVTRUQgdm9pZCAq Y29udGV4dCkKKyt7CisrICAgIGlmICh1bmxpa2VseShvcC0+ZnVuY19uYW1lID09IE5VTEwpKSB7 CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMworKyAgICAgICAgb3AtPmZ1bmNfbmFtZSA9IFB5 VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKG9wLT5mdW5jLm1fbWwtPm1sX25hbWUpOworICNlbHNl CistICAgIDAsCisrICAgICAgICBvcC0+ZnVuY19uYW1lID0gUHlTdHJpbmdfSW50ZXJuRnJvbVN0 cmluZyhvcC0+ZnVuYy5tX21sLT5tbF9uYW1lKTsKKyAjZW5kaWYKKy0gICAgKHJlcHJmdW5jKSBf X1B5eF9DeUZ1bmN0aW9uX3JlcHIsCistICAgIDAsCistICAgIDAsCistICAgIDAsCistICAgIDAs CistICAgIF9fUHl4X0N5RnVuY3Rpb25fQ2FsbEFzTWV0aG9kLAorLSAgICAwLAorLSAgICAwLAor LSAgICAwLAorLSAgICAwLAorLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hB VkVfR0MsCistICAgIDAsCistICAgICh0cmF2ZXJzZXByb2MpIF9fUHl4X0N5RnVuY3Rpb25fdHJh dmVyc2UsCistICAgIChpbnF1aXJ5KSBfX1B5eF9DeUZ1bmN0aW9uX2NsZWFyLAorLSAgICAwLAor LSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwNTAwQTAKKy0gICAgb2Zmc2V0b2YoX19weXhfQ3lG dW5jdGlvbk9iamVjdCwgZnVuY193ZWFrcmVmbGlzdCksCisrICAgICAgICBpZiAodW5saWtlbHko b3AtPmZ1bmNfbmFtZSA9PSBOVUxMKSkKKysgICAgICAgICAgICByZXR1cm4gTlVMTDsKKysgICAg fQorKyAgICBQeV9JTkNSRUYob3AtPmZ1bmNfbmFtZSk7CisrICAgIHJldHVybiBvcC0+ZnVuY19u YW1lOworK30KKytzdGF0aWMgaW50CisrX19QeXhfQ3lGdW5jdGlvbl9zZXRfbmFtZShfX3B5eF9D eUZ1bmN0aW9uT2JqZWN0ICpvcCwgUHlPYmplY3QgKnZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQg KmNvbnRleHQpCisreworKyAgICBQeU9iamVjdCAqdG1wOworKyNpZiBQWV9NQUpPUl9WRVJTSU9O ID49IDMKKysgICAgaWYgKHVubGlrZWx5KHZhbHVlID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVj ayh2YWx1ZSkpKQorICNlbHNlCistICAgIG9mZnNldG9mKFB5Q0Z1bmN0aW9uT2JqZWN0LCBtX3dl YWtyZWZsaXN0KSwKKy0jZW5kaWYKKy0gICAgMCwKKy0gICAgMCwKKy0gICAgX19weXhfQ3lGdW5j dGlvbl9tZXRob2RzLAorLSAgICBfX3B5eF9DeUZ1bmN0aW9uX21lbWJlcnMsCistICAgIF9fcHl4 X0N5RnVuY3Rpb25fZ2V0c2V0cywKKy0gICAgMCwKKy0gICAgMCwKKy0gICAgX19QeXhfQ3lGdW5j dGlvbl9kZXNjcl9nZXQsCistICAgIDAsCistICAgIG9mZnNldG9mKF9fcHl4X0N5RnVuY3Rpb25P YmplY3QsIGZ1bmNfZGljdCksCistICAgIDAsCistICAgIDAsCistICAgIDAsCistICAgIDAsCist ICAgIDAsCistICAgIDAsCistICAgIDAsCistICAgIDAsCistICAgIDAsCistICAgIDAsCistICAg IDAsCistICAgIDAsCistI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwNDAwYTEKKy0gICAgMCwK Ky0jZW5kaWYKKy0jaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMQorLSAgICAwLAorLSNl bmRpZgorLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDgwMGI0ICYmIFBZX1ZFUlNJT05fSEVY IDwgMHgwMzA5MDAwMAorLSAgICAwLAorKyAgICBpZiAodW5saWtlbHkodmFsdWUgPT0gTlVMTCB8 fCAhUHlTdHJpbmdfQ2hlY2sodmFsdWUpKSkKKyAjZW5kaWYKKy19OworLXN0YXRpYyBpbnQgX19w eXhfQ3lGdW5jdGlvbl9pbml0KHZvaWQpIHsKKy0gICAgX19weXhfQ3lGdW5jdGlvblR5cGUgPSBf X1B5eF9GZXRjaENvbW1vblR5cGUoJl9fcHl4X0N5RnVuY3Rpb25UeXBlX3R5cGUpOworLSAgICBp ZiAodW5saWtlbHkoX19weXhfQ3lGdW5jdGlvblR5cGUgPT0gTlVMTCkpIHsKKysgICAgeworKyAg ICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKysgICAgICAgICAgICAgICAg ICAgICAgICAiX19uYW1lX18gbXVzdCBiZSBzZXQgdG8gYSBzdHJpbmcgb2JqZWN0Iik7CisgICAg ICAgICByZXR1cm4gLTE7CisgICAgIH0KKysgICAgdG1wID0gb3AtPmZ1bmNfbmFtZTsKKysgICAg UHlfSU5DUkVGKHZhbHVlKTsKKysgICAgb3AtPmZ1bmNfbmFtZSA9IHZhbHVlOworKyAgICBQeV9Y REVDUkVGKHRtcCk7CisgICAgIHJldHVybiAwOworIH0KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSB2 b2lkICpfX1B5eF9DeUZ1bmN0aW9uX0luaXREZWZhdWx0cyhQeU9iamVjdCAqZnVuYywgc2l6ZV90 IHNpemUsIGludCBweW9iamVjdHMpIHsKKy0gICAgX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSA9 IChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICopIGZ1bmM7CistICAgIG0tPmRlZmF1bHRzID0gUHlP YmplY3RfTWFsbG9jKHNpemUpOworLSAgICBpZiAodW5saWtlbHkoIW0tPmRlZmF1bHRzKSkKKy0g ICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworLSAgICBtZW1zZXQobS0+ZGVmYXVsdHMs IDAsIHNpemUpOworLSAgICBtLT5kZWZhdWx0c19weW9iamVjdHMgPSBweW9iamVjdHM7CistICAg IG0tPmRlZmF1bHRzX3NpemUgPSBzaXplOworLSAgICByZXR1cm4gbS0+ZGVmYXVsdHM7CistfQor LXN0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgX19QeXhfQ3lGdW5jdGlvbl9TZXREZWZhdWx0c1R1 cGxlKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqdHVwbGUpIHsKKy0gICAgX19weXhfQ3lGdW5j dGlvbk9iamVjdCAqbSA9IChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICopIGZ1bmM7CistICAgIG0t PmRlZmF1bHRzX3R1cGxlID0gdHVwbGU7CistICAgIFB5X0lOQ1JFRih0dXBsZSk7Cisrc3RhdGlj IFB5T2JqZWN0ICoKKytfX1B5eF9DeUZ1bmN0aW9uX2dldF9xdWFsbmFtZShfX3B5eF9DeUZ1bmN0 aW9uT2JqZWN0ICpvcCwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KQorK3sKKysgICAgUHlf SU5DUkVGKG9wLT5mdW5jX3F1YWxuYW1lKTsKKysgICAgcmV0dXJuIG9wLT5mdW5jX3F1YWxuYW1l OworIH0KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSB2b2lkIF9fUHl4X0N5RnVuY3Rpb25fU2V0RGVm YXVsdHNLd0RpY3QoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpkaWN0KSB7CistICAgIF9fcHl4 X0N5RnVuY3Rpb25PYmplY3QgKm0gPSAoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqKSBmdW5jOwor LSAgICBtLT5kZWZhdWx0c19rd2RpY3QgPSBkaWN0OworLSAgICBQeV9JTkNSRUYoZGljdCk7Cisr c3RhdGljIGludAorK19fUHl4X0N5RnVuY3Rpb25fc2V0X3F1YWxuYW1lKF9fcHl4X0N5RnVuY3Rp b25PYmplY3QgKm9wLCBQeU9iamVjdCAqdmFsdWUsIENZVEhPTl9VTlVTRUQgdm9pZCAqY29udGV4 dCkKKyt7CisrICAgIFB5T2JqZWN0ICp0bXA7CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwor KyAgICBpZiAodW5saWtlbHkodmFsdWUgPT0gTlVMTCB8fCAhUHlVbmljb2RlX0NoZWNrKHZhbHVl KSkpCisrI2Vsc2UKKysgICAgaWYgKHVubGlrZWx5KHZhbHVlID09IE5VTEwgfHwgIVB5U3RyaW5n X0NoZWNrKHZhbHVlKSkpCisrI2VuZGlmCisrICAgIHsKKysgICAgICAgIFB5RXJyX1NldFN0cmlu ZyhQeUV4Y19UeXBlRXJyb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgIl9fcXVhbG5hbWVf XyBtdXN0IGJlIHNldCB0byBhIHN0cmluZyBvYmplY3QiKTsKKysgICAgICAgIHJldHVybiAtMTsK KysgICAgfQorKyAgICB0bXAgPSBvcC0+ZnVuY19xdWFsbmFtZTsKKysgICAgUHlfSU5DUkVGKHZh bHVlKTsKKysgICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSB2YWx1ZTsKKysgICAgUHlfWERFQ1JFRih0 bXApOworKyAgICByZXR1cm4gMDsKKyB9Cistc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5 eF9DeUZ1bmN0aW9uX1NldEFubm90YXRpb25zRGljdChQeU9iamVjdCAqZnVuYywgUHlPYmplY3Qg KmRpY3QpIHsKKy0gICAgX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSA9IChfX3B5eF9DeUZ1bmN0 aW9uT2JqZWN0ICopIGZ1bmM7CistICAgIG0tPmZ1bmNfYW5ub3RhdGlvbnMgPSBkaWN0OworLSAg ICBQeV9JTkNSRUYoZGljdCk7Cisrc3RhdGljIFB5T2JqZWN0ICoKKytfX1B5eF9DeUZ1bmN0aW9u X2dldF9zZWxmKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm0sIENZVEhPTl9VTlVTRUQgdm9pZCAq Y2xvc3VyZSkKKyt7CisrICAgIFB5T2JqZWN0ICpzZWxmOworKyAgICBzZWxmID0gbS0+ZnVuY19j bG9zdXJlOworKyAgICBpZiAoc2VsZiA9PSBOVUxMKQorKyAgICAgICAgc2VsZiA9IFB5X05vbmU7 CisrICAgIFB5X0lOQ1JFRihzZWxmKTsKKysgICAgcmV0dXJuIHNlbGY7CisgfQorLQorLS8qIEN5 dGhvbkZ1bmN0aW9uICovCistc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9DeUZ1bmN0aW9uX05ldyhQ eU1ldGhvZERlZiAqbWwsIGludCBmbGFncywgUHlPYmplY3QqIHF1YWxuYW1lLAorLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNsb3N1cmUsIFB5T2JqZWN0 ICptb2R1bGUsIFB5T2JqZWN0KiBnbG9iYWxzLCBQeU9iamVjdCogY29kZSkgeworLSAgICBQeU9i amVjdCAqb3AgPSBfX1B5eF9DeUZ1bmN0aW9uX0luaXQoCistICAgICAgICBQeU9iamVjdF9HQ19O ZXcoX19weXhfQ3lGdW5jdGlvbk9iamVjdCwgX19weXhfQ3lGdW5jdGlvblR5cGUpLAorLSAgICAg ICAgbWwsIGZsYWdzLCBxdWFsbmFtZSwgY2xvc3VyZSwgbW9kdWxlLCBnbG9iYWxzLCBjb2RlCist ICAgICk7CistICAgIGlmIChsaWtlbHkob3ApKSB7CistICAgICAgICBQeU9iamVjdF9HQ19UcmFj ayhvcCk7Cisrc3RhdGljIFB5T2JqZWN0ICoKKytfX1B5eF9DeUZ1bmN0aW9uX2dldF9kaWN0KF9f cHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCisr eworKyAgICBpZiAodW5saWtlbHkob3AtPmZ1bmNfZGljdCA9PSBOVUxMKSkgeworKyAgICAgICAg b3AtPmZ1bmNfZGljdCA9IFB5RGljdF9OZXcoKTsKKysgICAgICAgIGlmICh1bmxpa2VseShvcC0+ ZnVuY19kaWN0ID09IE5VTEwpKQorKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICB9Cist ICAgIHJldHVybiBvcDsKKysgICAgUHlfSU5DUkVGKG9wLT5mdW5jX2RpY3QpOworKyAgICByZXR1 cm4gb3AtPmZ1bmNfZGljdDsKKyB9CistCistLyogUmFpc2VBcmdUdXBsZUludmFsaWQgKi8KKy1z dGF0aWMgdm9pZCBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgKKy0gICAgY29uc3QgY2hhciog ZnVuY19uYW1lLAorLSAgICBpbnQgZXhhY3QsCistICAgIFB5X3NzaXplX3QgbnVtX21pbiwKKy0g ICAgUHlfc3NpemVfdCBudW1fbWF4LAorLSAgICBQeV9zc2l6ZV90IG51bV9mb3VuZCkKKytzdGF0 aWMgaW50CisrX19QeXhfQ3lGdW5jdGlvbl9zZXRfZGljdChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0 ICpvcCwgUHlPYmplY3QgKnZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCisgewor LSAgICBQeV9zc2l6ZV90IG51bV9leHBlY3RlZDsKKy0gICAgY29uc3QgY2hhciAqbW9yZV9vcl9s ZXNzOworLSAgICBpZiAobnVtX2ZvdW5kIDwgbnVtX21pbikgeworLSAgICAgICAgbnVtX2V4cGVj dGVkID0gbnVtX21pbjsKKy0gICAgICAgIG1vcmVfb3JfbGVzcyA9ICJhdCBsZWFzdCI7CistICAg IH0gZWxzZSB7CistICAgICAgICBudW1fZXhwZWN0ZWQgPSBudW1fbWF4OworLSAgICAgICAgbW9y ZV9vcl9sZXNzID0gImF0IG1vc3QiOworKyAgICBQeU9iamVjdCAqdG1wOworKyAgICBpZiAodW5s aWtlbHkodmFsdWUgPT0gTlVMTCkpIHsKKysgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19U eXBlRXJyb3IsCisrICAgICAgICAgICAgICAgImZ1bmN0aW9uJ3MgZGljdGlvbmFyeSBtYXkgbm90 IGJlIGRlbGV0ZWQiKTsKKysgICAgICAgIHJldHVybiAtMTsKKyAgICAgfQorLSAgICBpZiAoZXhh Y3QpIHsKKy0gICAgICAgIG1vcmVfb3JfbGVzcyA9ICJleGFjdGx5IjsKKysgICAgaWYgKHVubGlr ZWx5KCFQeURpY3RfQ2hlY2sodmFsdWUpKSkgeworKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5 RXhjX1R5cGVFcnJvciwKKysgICAgICAgICAgICAgICAic2V0dGluZyBmdW5jdGlvbidzIGRpY3Rp b25hcnkgdG8gYSBub24tZGljdCIpOworKyAgICAgICAgcmV0dXJuIC0xOworICAgICB9CistICAg IFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCistICAgICAgICAgICAgICAgICAiJS4yMDBz KCkgdGFrZXMgJS44cyAlIiBDWVRIT05fRk9STUFUX1NTSVpFX1QgImQgcG9zaXRpb25hbCBhcmd1 bWVudCUuMXMgKCUiIENZVEhPTl9GT1JNQVRfU1NJWkVfVCAiZCBnaXZlbikiLAorLSAgICAgICAg ICAgICAgICAgZnVuY19uYW1lLCBtb3JlX29yX2xlc3MsIG51bV9leHBlY3RlZCwKKy0gICAgICAg ICAgICAgICAgIChudW1fZXhwZWN0ZWQgPT0gMSkgPyAiIiA6ICJzIiwgbnVtX2ZvdW5kKTsKKysg ICAgdG1wID0gb3AtPmZ1bmNfZGljdDsKKysgICAgUHlfSU5DUkVGKHZhbHVlKTsKKysgICAgb3At PmZ1bmNfZGljdCA9IHZhbHVlOworKyAgICBQeV9YREVDUkVGKHRtcCk7CisrICAgIHJldHVybiAw OworIH0KKy0KKy0vKiBSYWlzZURvdWJsZUtleXdvcmRzICovCistc3RhdGljIHZvaWQgX19QeXhf UmFpc2VEb3VibGVLZXl3b3Jkc0Vycm9yKAorLSAgICBjb25zdCBjaGFyKiBmdW5jX25hbWUsCist ICAgIFB5T2JqZWN0KiBrd19uYW1lKQorK3N0YXRpYyBQeU9iamVjdCAqCisrX19QeXhfQ3lGdW5j dGlvbl9nZXRfZ2xvYmFscyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwgQ1lUSE9OX1VOVVNF RCB2b2lkICpjb250ZXh0KQorIHsKKy0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwK Ky0gICAgICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgICAgICIlcygpIGdvdCBt dWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgJyVVJyIsIGZ1bmNfbmFtZSwga3df bmFtZSk7CistICAgICAgICAjZWxzZQorLSAgICAgICAgIiVzKCkgZ290IG11bHRpcGxlIHZhbHVl cyBmb3Iga2V5d29yZCBhcmd1bWVudCAnJXMnIiwgZnVuY19uYW1lLAorLSAgICAgICAgUHlTdHJp bmdfQXNTdHJpbmcoa3dfbmFtZSkpOworLSAgICAgICAgI2VuZGlmCisrICAgIFB5X0lOQ1JFRihv cC0+ZnVuY19nbG9iYWxzKTsKKysgICAgcmV0dXJuIG9wLT5mdW5jX2dsb2JhbHM7CisgfQorLQor LS8qIFBhcnNlS2V5d29yZHMgKi8KKy1zdGF0aWMgaW50IF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3 b3JkcygKKy0gICAgUHlPYmplY3QgKmt3ZHMsCistICAgIFB5T2JqZWN0ICoqYXJnbmFtZXNbXSwK Ky0gICAgUHlPYmplY3QgKmt3ZHMyLAorLSAgICBQeU9iamVjdCAqdmFsdWVzW10sCistICAgIFB5 X3NzaXplX3QgbnVtX3Bvc19hcmdzLAorLSAgICBjb25zdCBjaGFyKiBmdW5jdGlvbl9uYW1lKQor K3N0YXRpYyBQeU9iamVjdCAqCisrX19QeXhfQ3lGdW5jdGlvbl9nZXRfY2xvc3VyZShDWVRIT05f VU5VU0VEIF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNv bnRleHQpCisgeworLSAgICBQeU9iamVjdCAqa2V5ID0gMCwgKnZhbHVlID0gMDsKKy0gICAgUHlf c3NpemVfdCBwb3MgPSAwOworLSAgICBQeU9iamVjdCoqKiBuYW1lOworLSAgICBQeU9iamVjdCoq KiBmaXJzdF9rd19hcmcgPSBhcmduYW1lcyArIG51bV9wb3NfYXJnczsKKy0gICAgd2hpbGUgKFB5 RGljdF9OZXh0KGt3ZHMsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKKy0gICAgICAgIG5hbWUgPSBm aXJzdF9rd19hcmc7CistICAgICAgICB3aGlsZSAoKm5hbWUgJiYgKCoqbmFtZSAhPSBrZXkpKSBu YW1lKys7CistICAgICAgICBpZiAoKm5hbWUpIHsKKy0gICAgICAgICAgICB2YWx1ZXNbbmFtZS1h cmduYW1lc10gPSB2YWx1ZTsKKy0gICAgICAgICAgICBjb250aW51ZTsKKy0gICAgICAgIH0KKy0g ICAgICAgIG5hbWUgPSBmaXJzdF9rd19hcmc7CistICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lP TiA8IDMKKy0gICAgICAgIGlmIChsaWtlbHkoUHlTdHJpbmdfQ2hlY2soa2V5KSkpIHsKKy0gICAg ICAgICAgICB3aGlsZSAoKm5hbWUpIHsKKy0gICAgICAgICAgICAgICAgaWYgKChDWVRIT05fQ09N UElMSU5HX0lOX1BZUFkgfHwgUHlTdHJpbmdfR0VUX1NJWkUoKipuYW1lKSA9PSBQeVN0cmluZ19H RVRfU0laRShrZXkpKQorLSAgICAgICAgICAgICAgICAgICAgICAgICYmIF9QeVN0cmluZ19FcSgq Km5hbWUsIGtleSkpIHsKKy0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1tuYW1lLWFyZ25hbWVz XSA9IHZhbHVlOworLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAg IH0KKy0gICAgICAgICAgICAgICAgbmFtZSsrOworLSAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICBpZiAoKm5hbWUpIGNvbnRpbnVlOworLSAgICAgICAgICAgIGVsc2UgeworLSAgICAgICAgICAg ICAgICBQeU9iamVjdCoqKiBhcmduYW1lID0gYXJnbmFtZXM7CistICAgICAgICAgICAgICAgIHdo aWxlIChhcmduYW1lICE9IGZpcnN0X2t3X2FyZykgeworLSAgICAgICAgICAgICAgICAgICAgaWYg KCgqKmFyZ25hbWUgPT0ga2V5KSB8fCAoCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIChD WVRIT05fQ09NUElMSU5HX0lOX1BZUFkgfHwgUHlTdHJpbmdfR0VUX1NJWkUoKiphcmduYW1lKSA9 PSBQeVN0cmluZ19HRVRfU0laRShrZXkpKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgX1B5U3RyaW5nX0VxKCoqYXJnbmFtZSwga2V5KSkpIHsKKy0gICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIGFyZ19wYXNzZWRfdHdpY2U7CistICAgICAgICAgICAgICAgICAgICB9CistICAg ICAgICAgICAgICAgICAgICBhcmduYW1lKys7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAg ICAgICB9CistICAgICAgICB9IGVsc2UKKy0gICAgICAgICNlbmRpZgorLSAgICAgICAgaWYgKGxp a2VseShQeVVuaWNvZGVfQ2hlY2soa2V5KSkpIHsKKy0gICAgICAgICAgICB3aGlsZSAoKm5hbWUp IHsKKy0gICAgICAgICAgICAgICAgaW50IGNtcCA9ICgqKm5hbWUgPT0ga2V5KSA/IDAgOgorLSAg ICAgICAgICAgICAgICAjaWYgIUNZVEhPTl9DT01QSUxJTkdfSU5fUFlQWSAmJiBQWV9NQUpPUl9W RVJTSU9OID49IDMKKy0gICAgICAgICAgICAgICAgICAgIChfX1B5eF9QeVVuaWNvZGVfR0VUX0xF TkdUSCgqKm5hbWUpICE9IF9fUHl4X1B5VW5pY29kZV9HRVRfTEVOR1RIKGtleSkpID8gMSA6Cist ICAgICAgICAgICAgICAgICNlbmRpZgorLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Nv bXBhcmUoKipuYW1lLCBrZXkpOworLSAgICAgICAgICAgICAgICBpZiAoY21wIDwgMCAmJiB1bmxp a2VseShQeUVycl9PY2N1cnJlZCgpKSkgZ290byBiYWQ7CistICAgICAgICAgICAgICAgIGlmIChj bXAgPT0gMCkgeworLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzW25hbWUtYXJnbmFtZXNdID0g dmFsdWU7CistICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgICAgfQor LSAgICAgICAgICAgICAgICBuYW1lKys7CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGlm ICgqbmFtZSkgY29udGludWU7CistICAgICAgICAgICAgZWxzZSB7CistICAgICAgICAgICAgICAg IFB5T2JqZWN0KioqIGFyZ25hbWUgPSBhcmduYW1lczsKKy0gICAgICAgICAgICAgICAgd2hpbGUg KGFyZ25hbWUgIT0gZmlyc3Rfa3dfYXJnKSB7CistICAgICAgICAgICAgICAgICAgICBpbnQgY21w ID0gKCoqYXJnbmFtZSA9PSBrZXkpID8gMCA6CistICAgICAgICAgICAgICAgICAgICAjaWYgIUNZ VEhPTl9DT01QSUxJTkdfSU5fUFlQWSAmJiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgICAg ICAgICAgICAgICAgICAgICAoX19QeXhfUHlVbmljb2RlX0dFVF9MRU5HVEgoKiphcmduYW1lKSAh PSBfX1B5eF9QeVVuaWNvZGVfR0VUX0xFTkdUSChrZXkpKSA/IDEgOgorLSAgICAgICAgICAgICAg ICAgICAgI2VuZGlmCistICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmUo KiphcmduYW1lLCBrZXkpOworLSAgICAgICAgICAgICAgICAgICAgaWYgKGNtcCA8IDAgJiYgdW5s aWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIGdvdG8gYmFkOworLSAgICAgICAgICAgICAgICAgICAg aWYgKGNtcCA9PSAwKSBnb3RvIGFyZ19wYXNzZWRfdHdpY2U7CistICAgICAgICAgICAgICAgICAg ICBhcmduYW1lKys7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICB9CistICAgICAg ICB9IGVsc2UKKy0gICAgICAgICAgICBnb3RvIGludmFsaWRfa2V5d29yZF90eXBlOworLSAgICAg ICAgaWYgKGt3ZHMyKSB7CistICAgICAgICAgICAgaWYgKHVubGlrZWx5KFB5RGljdF9TZXRJdGVt KGt3ZHMyLCBrZXksIHZhbHVlKSkpIGdvdG8gYmFkOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAg ICAgICAgICBnb3RvIGludmFsaWRfa2V5d29yZDsKKy0gICAgICAgIH0KKy0gICAgfQorLSAgICBy ZXR1cm4gMDsKKy1hcmdfcGFzc2VkX3R3aWNlOgorLSAgICBfX1B5eF9SYWlzZURvdWJsZUtleXdv cmRzRXJyb3IoZnVuY3Rpb25fbmFtZSwga2V5KTsKKy0gICAgZ290byBiYWQ7CistaW52YWxpZF9r ZXl3b3JkX3R5cGU6CistICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCistICAgICAg ICAiJS4yMDBzKCkga2V5d29yZHMgbXVzdCBiZSBzdHJpbmdzIiwgZnVuY3Rpb25fbmFtZSk7Cist ICAgIGdvdG8gYmFkOworLWludmFsaWRfa2V5d29yZDoKKy0gICAgUHlFcnJfRm9ybWF0KFB5RXhj X1R5cGVFcnJvciwKKy0gICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCistICAgICAgICAiJS4y MDBzKCkgZ290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudCAnJS4yMDBzJyIsCistICAg ICAgICBmdW5jdGlvbl9uYW1lLCBQeVN0cmluZ19Bc1N0cmluZyhrZXkpKTsKKysgICAgUHlfSU5D UkVGKFB5X05vbmUpOworKyAgICByZXR1cm4gUHlfTm9uZTsKKyt9Cisrc3RhdGljIFB5T2JqZWN0 ICoKKytfX1B5eF9DeUZ1bmN0aW9uX2dldF9jb2RlKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9w LCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpCisreworKyAgICBQeU9iamVjdCogcmVzdWx0 ID0gKG9wLT5mdW5jX2NvZGUpID8gb3AtPmZ1bmNfY29kZSA6IFB5X05vbmU7CisrICAgIFB5X0lO Q1JFRihyZXN1bHQpOworKyAgICByZXR1cm4gcmVzdWx0OworK30KKytzdGF0aWMgaW50CisrX19Q eXhfQ3lGdW5jdGlvbl9pbml0X2RlZmF1bHRzKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wKSB7 CisrICAgIGludCByZXN1bHQgPSAwOworKyAgICBQeU9iamVjdCAqcmVzID0gb3AtPmRlZmF1bHRz X2dldHRlcigoUHlPYmplY3QgKikgb3ApOworKyAgICBpZiAodW5saWtlbHkoIXJlcykpCisrICAg ICAgICByZXR1cm4gLTE7CisrICAgICNpZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFD WVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworKyAgICBvcC0+ZGVmYXVsdHNfdHVwbGUgPSBQeVR1 cGxlX0dFVF9JVEVNKHJlcywgMCk7CisrICAgIFB5X0lOQ1JFRihvcC0+ZGVmYXVsdHNfdHVwbGUp OworKyAgICBvcC0+ZGVmYXVsdHNfa3dkaWN0ID0gUHlUdXBsZV9HRVRfSVRFTShyZXMsIDEpOwor KyAgICBQeV9JTkNSRUYob3AtPmRlZmF1bHRzX2t3ZGljdCk7CisgICAgICNlbHNlCistICAgICAg ICAiJXMoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50ICclVSciLAorLSAgICAg ICAgZnVuY3Rpb25fbmFtZSwga2V5KTsKKysgICAgb3AtPmRlZmF1bHRzX3R1cGxlID0gUHlTZXF1 ZW5jZV9JVEVNKHJlcywgMCk7CisrICAgIGlmICh1bmxpa2VseSghb3AtPmRlZmF1bHRzX3R1cGxl KSkgcmVzdWx0ID0gLTE7CisrICAgIGVsc2UgeworKyAgICAgICAgb3AtPmRlZmF1bHRzX2t3ZGlj dCA9IFB5U2VxdWVuY2VfSVRFTShyZXMsIDEpOworKyAgICAgICAgaWYgKHVubGlrZWx5KCFvcC0+ ZGVmYXVsdHNfa3dkaWN0KSkgcmVzdWx0ID0gLTE7CisrICAgIH0KKyAgICAgI2VuZGlmCistYmFk OgorLSAgICByZXR1cm4gLTE7CisrICAgIFB5X0RFQ1JFRihyZXMpOworKyAgICByZXR1cm4gcmVz dWx0OworIH0KKy0KKy0vKiBQeU9iamVjdFNldEF0dHJTdHIgKi8KKy0jaWYgQ1lUSE9OX1VTRV9U WVBFX1NMT1RTCistc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X1B5T2JqZWN0X1NldEF0 dHJTdHIoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqIGF0dHJfbmFtZSwgUHlPYmplY3QqIHZhbHVl KSB7CistICAgIFB5VHlwZU9iamVjdCogdHAgPSBQeV9UWVBFKG9iaik7CistICAgIGlmIChsaWtl bHkodHAtPnRwX3NldGF0dHJvKSkKKy0gICAgICAgIHJldHVybiB0cC0+dHBfc2V0YXR0cm8ob2Jq LCBhdHRyX25hbWUsIHZhbHVlKTsKKy0jaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKy0gICAgaWYg KGxpa2VseSh0cC0+dHBfc2V0YXR0cikpCistICAgICAgICByZXR1cm4gdHAtPnRwX3NldGF0dHIo b2JqLCBQeVN0cmluZ19BU19TVFJJTkcoYXR0cl9uYW1lKSwgdmFsdWUpOworLSNlbmRpZgorLSAg ICByZXR1cm4gUHlPYmplY3RfU2V0QXR0cihvYmosIGF0dHJfbmFtZSwgdmFsdWUpOworK3N0YXRp YyBpbnQKKytfX1B5eF9DeUZ1bmN0aW9uX3NldF9kZWZhdWx0cyhfX3B5eF9DeUZ1bmN0aW9uT2Jq ZWN0ICpvcCwgUHlPYmplY3QqIHZhbHVlLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQpIHsK KysgICAgUHlPYmplY3QqIHRtcDsKKysgICAgaWYgKCF2YWx1ZSkgeworKyAgICAgICAgdmFsdWUg PSBQeV9Ob25lOworKyAgICB9IGVsc2UgaWYgKHZhbHVlICE9IFB5X05vbmUgJiYgIVB5VHVwbGVf Q2hlY2sodmFsdWUpKSB7CisrICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9y LAorKyAgICAgICAgICAgICAgICAgICAgICAgICJfX2RlZmF1bHRzX18gbXVzdCBiZSBzZXQgdG8g YSB0dXBsZSBvYmplY3QiKTsKKysgICAgICAgIHJldHVybiAtMTsKKysgICAgfQorKyAgICBQeV9J TkNSRUYodmFsdWUpOworKyAgICB0bXAgPSBvcC0+ZGVmYXVsdHNfdHVwbGU7CisrICAgIG9wLT5k ZWZhdWx0c190dXBsZSA9IHZhbHVlOworKyAgICBQeV9YREVDUkVGKHRtcCk7CisrICAgIHJldHVy biAwOworIH0KKy0jZW5kaWYKKy0KKy0vKiBQeUludEJpbm9wICovCistI2lmICFDWVRIT05fQ09N UElMSU5HX0lOX1BZUFkKKy1zdGF0aWMgUHlPYmplY3QqIF9fUHl4X1B5SW50X0FkZE9iakMoUHlP YmplY3QgKm9wMSwgUHlPYmplY3QgKm9wMiwgQ1lUSE9OX1VOVVNFRCBsb25nIGludHZhbCwgaW50 IGlucGxhY2UsIGludCB6ZXJvZGl2aXNpb25fY2hlY2spIHsKKy0gICAgKHZvaWQpaW5wbGFjZTsK Ky0gICAgKHZvaWQpemVyb2RpdmlzaW9uX2NoZWNrOworLSAgICAjaWYgUFlfTUFKT1JfVkVSU0lP TiA8IDMKKy0gICAgaWYgKGxpa2VseShQeUludF9DaGVja0V4YWN0KG9wMSkpKSB7CistICAgICAg ICBjb25zdCBsb25nIGIgPSBpbnR2YWw7CistICAgICAgICBsb25nIHg7CistICAgICAgICBsb25n IGEgPSBQeUludF9BU19MT05HKG9wMSk7CistICAgICAgICAgICAgeCA9IChsb25nKSgodW5zaWdu ZWQgbG9uZylhICsgYik7CistICAgICAgICAgICAgaWYgKGxpa2VseSgoeF5hKSA+PSAwIHx8ICh4 XmIpID49IDApKQorLSAgICAgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoeCk7Cist ICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19UeXBlLnRwX2FzX251bWJlci0+bmJfYWRkKG9wMSwg b3AyKTsKKytzdGF0aWMgUHlPYmplY3QgKgorK19fUHl4X0N5RnVuY3Rpb25fZ2V0X2RlZmF1bHRz KF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5VU0VEIHZvaWQgKmNvbnRleHQp IHsKKysgICAgUHlPYmplY3QqIHJlc3VsdCA9IG9wLT5kZWZhdWx0c190dXBsZTsKKysgICAgaWYg KHVubGlrZWx5KCFyZXN1bHQpKSB7CisrICAgICAgICBpZiAob3AtPmRlZmF1bHRzX2dldHRlcikg eworKyAgICAgICAgICAgIGlmIChfX1B5eF9DeUZ1bmN0aW9uX2luaXRfZGVmYXVsdHMob3ApIDwg MCkgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgcmVzdWx0ID0gb3AtPmRlZmF1bHRzX3R1cGxl OworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICByZXN1bHQgPSBQeV9Ob25lOworKyAg ICAgICAgfQorICAgICB9CistICAgICNlbmRpZgorLSAgICAjaWYgQ1lUSE9OX1VTRV9QWUxPTkdf SU5URVJOQUxTCistICAgIGlmIChsaWtlbHkoUHlMb25nX0NoZWNrRXhhY3Qob3AxKSkpIHsKKy0g ICAgICAgIGNvbnN0IGxvbmcgYiA9IGludHZhbDsKKy0gICAgICAgIGxvbmcgYSwgeDsKKy0jaWZk ZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgIGNvbnN0IFBZX0xPTkdfTE9ORyBsbGIgPSBpbnR2 YWw7CistICAgICAgICBQWV9MT05HX0xPTkcgbGxhLCBsbHg7CistI2VuZGlmCistICAgICAgICBj b25zdCBkaWdpdCogZGlnaXRzID0gKChQeUxvbmdPYmplY3QqKW9wMSktPm9iX2RpZ2l0OworLSAg ICAgICAgY29uc3QgUHlfc3NpemVfdCBzaXplID0gUHlfU0laRShvcDEpOworLSAgICAgICAgaWYg KGxpa2VseShfX1B5eF9zc3RfYWJzKHNpemUpIDw9IDEpKSB7CistICAgICAgICAgICAgYSA9IGxp a2VseShzaXplKSA/IGRpZ2l0c1swXSA6IDA7CistICAgICAgICAgICAgaWYgKHNpemUgPT0gLTEp IGEgPSAtYTsKKysgICAgUHlfSU5DUkVGKHJlc3VsdCk7CisrICAgIHJldHVybiByZXN1bHQ7Cisr fQorK3N0YXRpYyBpbnQKKytfX1B5eF9DeUZ1bmN0aW9uX3NldF9rd2RlZmF1bHRzKF9fcHl4X0N5 RnVuY3Rpb25PYmplY3QgKm9wLCBQeU9iamVjdCogdmFsdWUsIENZVEhPTl9VTlVTRUQgdm9pZCAq Y29udGV4dCkgeworKyAgICBQeU9iamVjdCogdG1wOworKyAgICBpZiAoIXZhbHVlKSB7CisrICAg ICAgICB2YWx1ZSA9IFB5X05vbmU7CisrICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gUHlfTm9uZSAm JiAhUHlEaWN0X0NoZWNrKHZhbHVlKSkgeworKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhj X1R5cGVFcnJvciwKKysgICAgICAgICAgICAgICAgICAgICAgICAiX19rd2RlZmF1bHRzX18gbXVz dCBiZSBzZXQgdG8gYSBkaWN0IG9iamVjdCIpOworKyAgICAgICAgcmV0dXJuIC0xOworKyAgICB9 CisrICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisrICAgIHRtcCA9IG9wLT5kZWZhdWx0c19rd2RpY3Q7 CisrICAgIG9wLT5kZWZhdWx0c19rd2RpY3QgPSB2YWx1ZTsKKysgICAgUHlfWERFQ1JFRih0bXAp OworKyAgICByZXR1cm4gMDsKKyt9Cisrc3RhdGljIFB5T2JqZWN0ICoKKytfX1B5eF9DeUZ1bmN0 aW9uX2dldF9rd2RlZmF1bHRzKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKm9wLCBDWVRIT05fVU5V U0VEIHZvaWQgKmNvbnRleHQpIHsKKysgICAgUHlPYmplY3QqIHJlc3VsdCA9IG9wLT5kZWZhdWx0 c19rd2RpY3Q7CisrICAgIGlmICh1bmxpa2VseSghcmVzdWx0KSkgeworKyAgICAgICAgaWYgKG9w LT5kZWZhdWx0c19nZXR0ZXIpIHsKKysgICAgICAgICAgICBpZiAoX19QeXhfQ3lGdW5jdGlvbl9p bml0X2RlZmF1bHRzKG9wKSA8IDApIHJldHVybiBOVUxMOworKyAgICAgICAgICAgIHJlc3VsdCA9 IG9wLT5kZWZhdWx0c19rd2RpY3Q7CisgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHN3 aXRjaCAoc2l6ZSkgeworLSAgICAgICAgICAgICAgICBjYXNlIC0yOgorLSAgICAgICAgICAgICAg ICAgICAgaWYgKDggKiBzaXplb2YobG9uZykgLSAxID4gMiAqIFB5TG9uZ19TSElGVCkgeworLSAg ICAgICAgICAgICAgICAgICAgICAgIGEgPSAtKGxvbmcpICgoKCgodW5zaWduZWQgbG9uZylkaWdp dHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKKy0g ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0g ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0g MSA+IDIgKiBQeUxvbmdfU0hJRlQpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAt KFBZX0xPTkdfTE9ORykgKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQ eUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKKy0gICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGxvbmdfbG9uZzsKKy0jZW5kaWYKKy0gICAgICAgICAg ICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0g ICAgICAgICAgICAgICAgY2FzZSAyOgorLSAgICAgICAgICAgICAgICAgICAgaWYgKDggKiBzaXpl b2YobG9uZykgLSAxID4gMiAqIFB5TG9uZ19TSElGVCkgeworLSAgICAgICAgICAgICAgICAgICAg ICAgIGEgPSAobG9uZykgKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NI SUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOworLSAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworLSNpZmRlZiBIQVZFX0xPTkdfTE9ORworLSAgICAgICAgICAgICAgICAgICAg fSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gMiAqIFB5TG9uZ19TSElG VCkgeworLSAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IChQWV9MT05HX0xPTkcpICgoKCgo dW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNp Z25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7CistICAgICAgICAgICAgICAgICAgICAgICAg Z290byBsb25nX2xvbmc7CistI2VuZGlmCistICAgICAgICAgICAgICAgICAgICB9CistICAgICAg ICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICAgICAgICAgIGNhc2Ug LTM6CistICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAtIDEgPiAzICog UHlMb25nX1NISUZUKSB7CistICAgICAgICAgICAgICAgICAgICAgICAgYSA9IC0obG9uZykgKCgo KCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVk IGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRz WzBdKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistI2lmZGVmIEhBVkVfTE9O R19MT05HCistICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXplb2YoUFlfTE9O R19MT05HKSAtIDEgPiAzICogUHlMb25nX1NISUZUKSB7CistICAgICAgICAgICAgICAgICAgICAg ICAgbGxhID0gLShQWV9MT05HX0xPTkcpICgoKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGln aXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNb MV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1swXSkp OworLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOworLSNlbmRpZgorLSAg ICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZBTExUSFJP VUdIOworLSAgICAgICAgICAgICAgICBjYXNlIDM6CistICAgICAgICAgICAgICAgICAgICBpZiAo OCAqIHNpemVvZihsb25nKSAtIDEgPiAzICogUHlMb25nX1NISUZUKSB7CistICAgICAgICAgICAg ICAgICAgICAgICAgYSA9IChsb25nKSAoKCgoKCgodW5zaWduZWQgbG9uZylkaWdpdHNbMl0pIDw8 IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElG VCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKKy0gICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDMgKiBQeUxvbmdfU0hJRlQp IHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAoUFlfTE9OR19MT05HKSAoKCgoKCgo dW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNp Z25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVk IFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGxvbmdfbG9uZzsKKy0jZW5kaWYKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKy0gICAgICAgICAgICAgICAgY2FzZSAtNDoK Ky0gICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+IDQgKiBQeUxv bmdfU0hJRlQpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBhID0gLShsb25nKSAoKCgoKCgo KCh1bnNpZ25lZCBsb25nKWRpZ2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBs b25nKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1sx XSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOworLSAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSNpZmRlZiBIQVZFX0xPTkdfTE9ORworLSAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4g NCAqIFB5TG9uZ19TSElGVCkgeworLSAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IC0oUFlf TE9OR19MT05HKSAoKCgoKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzNdKSA8PCBQ eUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMl0pIDw8IFB5TG9u Z19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NI SUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7CistICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBsb25nX2xvbmc7CistI2VuZGlmCistICAgICAgICAgICAgICAgICAg ICB9CistICAgICAgICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICAg ICAgICAgIGNhc2UgNDoKKy0gICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcp IC0gMSA+IDQgKiBQeUxvbmdfU0hJRlQpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBhID0g KGxvbmcpICgoKCgoKCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzNdKSA8PCBQeUxvbmdfU0hJRlQp IHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVk IGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRz WzBdKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistI2lmZGVmIEhBVkVfTE9O R19MT05HCistICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXplb2YoUFlfTE9O R19MT05HKSAtIDEgPiA0ICogUHlMb25nX1NISUZUKSB7CistICAgICAgICAgICAgICAgICAgICAg ICAgbGxhID0gKFBZX0xPTkdfTE9ORykgKCgoKCgoKCgodW5zaWduZWQgUFlfTE9OR19MT05HKWRp Z2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRz WzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMV0p IDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1swXSkpOwor LSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOworLSNlbmRpZgorLSAgICAg ICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdI OworLSAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gUHlMb25nX1R5cGUudHBfYXNfbnVt YmVyLT5uYl9hZGQob3AxLCBvcDIpOworLSAgICAgICAgICAgIH0KKysgICAgICAgICAgICByZXN1 bHQgPSBQeV9Ob25lOworICAgICAgICAgfQorLSAgICAgICAgICAgICAgICB4ID0gYSArIGI7Cist ICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh4KTsKKy0jaWZkZWYgSEFWRV9MT05H X0xPTkcKKy0gICAgICAgIGxvbmdfbG9uZzoKKy0gICAgICAgICAgICAgICAgbGx4ID0gbGxhICsg bGxiOworLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKGxseCk7CistI2Vu ZGlmCistICAgICAgICAKKy0gICAgICAgIAorICAgICB9CistICAgICNlbmRpZgorLSAgICBpZiAo UHlGbG9hdF9DaGVja0V4YWN0KG9wMSkpIHsKKy0gICAgICAgIGNvbnN0IGxvbmcgYiA9IGludHZh bDsKKy0gICAgICAgIGRvdWJsZSBhID0gUHlGbG9hdF9BU19ET1VCTEUob3AxKTsKKy0gICAgICAg ICAgICBkb3VibGUgcmVzdWx0OworLSAgICAgICAgICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImFk ZCIsIHJldHVybiBOVUxMKQorLSAgICAgICAgICAgIHJlc3VsdCA9ICgoZG91YmxlKWEpICsgKGRv dWJsZSliOworLSAgICAgICAgICAgIFB5RlBFX0VORF9QUk9URUNUKHJlc3VsdCkKKy0gICAgICAg ICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHJlc3VsdCk7CisrICAgIFB5X0lOQ1JFRihy ZXN1bHQpOworKyAgICByZXR1cm4gcmVzdWx0OworK30KKytzdGF0aWMgaW50CisrX19QeXhfQ3lG dW5jdGlvbl9zZXRfYW5ub3RhdGlvbnMoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIFB5T2Jq ZWN0KiB2YWx1ZSwgQ1lUSE9OX1VOVVNFRCB2b2lkICpjb250ZXh0KSB7CisrICAgIFB5T2JqZWN0 KiB0bXA7CisrICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPT0gUHlfTm9uZSkgeworKyAgICAgICAg dmFsdWUgPSBOVUxMOworKyAgICB9IGVsc2UgaWYgKCFQeURpY3RfQ2hlY2sodmFsdWUpKSB7Cisr ICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICJfX2Fubm90YXRpb25zX18gbXVzdCBiZSBzZXQgdG8gYSBkaWN0IG9iamVjdCIp OworKyAgICAgICAgcmV0dXJuIC0xOworICAgICB9CistICAgIHJldHVybiAoaW5wbGFjZSA/IFB5 TnVtYmVyX0luUGxhY2VBZGQgOiBQeU51bWJlcl9BZGQpKG9wMSwgb3AyKTsKKysgICAgUHlfWElO Q1JFRih2YWx1ZSk7CisrICAgIHRtcCA9IG9wLT5mdW5jX2Fubm90YXRpb25zOworKyAgICBvcC0+ ZnVuY19hbm5vdGF0aW9ucyA9IHZhbHVlOworKyAgICBQeV9YREVDUkVGKHRtcCk7CisrICAgIHJl dHVybiAwOworIH0KKy0jZW5kaWYKKy0KKy0vKiBQeUludEJpbm9wICovCistI2lmICFDWVRIT05f Q09NUElMSU5HX0lOX1BZUFkKKy1zdGF0aWMgUHlPYmplY3QqIF9fUHl4X1B5SW50X1N1YnRyYWN0 T2JqQyhQeU9iamVjdCAqb3AxLCBQeU9iamVjdCAqb3AyLCBDWVRIT05fVU5VU0VEIGxvbmcgaW50 dmFsLCBpbnQgaW5wbGFjZSwgaW50IHplcm9kaXZpc2lvbl9jaGVjaykgeworLSAgICAodm9pZClp bnBsYWNlOworLSAgICAodm9pZCl6ZXJvZGl2aXNpb25fY2hlY2s7CistICAgICNpZiBQWV9NQUpP Ul9WRVJTSU9OIDwgMworLSAgICBpZiAobGlrZWx5KFB5SW50X0NoZWNrRXhhY3Qob3AxKSkpIHsK Ky0gICAgICAgIGNvbnN0IGxvbmcgYiA9IGludHZhbDsKKy0gICAgICAgIGxvbmcgeDsKKy0gICAg ICAgIGxvbmcgYSA9IFB5SW50X0FTX0xPTkcob3AxKTsKKy0gICAgICAgICAgICB4ID0gKGxvbmcp KCh1bnNpZ25lZCBsb25nKWEgLSBiKTsKKy0gICAgICAgICAgICBpZiAobGlrZWx5KCh4XmEpID49 IDAgfHwgKHhefmIpID49IDApKQorLSAgICAgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxv bmcoeCk7CistICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19UeXBlLnRwX2FzX251bWJlci0+bmJf c3VidHJhY3Qob3AxLCBvcDIpOworK3N0YXRpYyBQeU9iamVjdCAqCisrX19QeXhfQ3lGdW5jdGlv bl9nZXRfYW5ub3RhdGlvbnMoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqb3AsIENZVEhPTl9VTlVT RUQgdm9pZCAqY29udGV4dCkgeworKyAgICBQeU9iamVjdCogcmVzdWx0ID0gb3AtPmZ1bmNfYW5u b3RhdGlvbnM7CisrICAgIGlmICh1bmxpa2VseSghcmVzdWx0KSkgeworKyAgICAgICAgcmVzdWx0 ID0gUHlEaWN0X05ldygpOworKyAgICAgICAgaWYgKHVubGlrZWx5KCFyZXN1bHQpKSByZXR1cm4g TlVMTDsKKysgICAgICAgIG9wLT5mdW5jX2Fubm90YXRpb25zID0gcmVzdWx0OworICAgICB9Cist ICAgICNlbmRpZgorLSAgICAjaWYgQ1lUSE9OX1VTRV9QWUxPTkdfSU5URVJOQUxTCistICAgIGlm IChsaWtlbHkoUHlMb25nX0NoZWNrRXhhY3Qob3AxKSkpIHsKKy0gICAgICAgIGNvbnN0IGxvbmcg YiA9IGludHZhbDsKKy0gICAgICAgIGxvbmcgYSwgeDsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcK Ky0gICAgICAgIGNvbnN0IFBZX0xPTkdfTE9ORyBsbGIgPSBpbnR2YWw7CistICAgICAgICBQWV9M T05HX0xPTkcgbGxhLCBsbHg7CistI2VuZGlmCistICAgICAgICBjb25zdCBkaWdpdCogZGlnaXRz ID0gKChQeUxvbmdPYmplY3QqKW9wMSktPm9iX2RpZ2l0OworLSAgICAgICAgY29uc3QgUHlfc3Np emVfdCBzaXplID0gUHlfU0laRShvcDEpOworLSAgICAgICAgaWYgKGxpa2VseShfX1B5eF9zc3Rf YWJzKHNpemUpIDw9IDEpKSB7CistICAgICAgICAgICAgYSA9IGxpa2VseShzaXplKSA/IGRpZ2l0 c1swXSA6IDA7CistICAgICAgICAgICAgaWYgKHNpemUgPT0gLTEpIGEgPSAtYTsKKy0gICAgICAg IH0gZWxzZSB7CistICAgICAgICAgICAgc3dpdGNoIChzaXplKSB7CistICAgICAgICAgICAgICAg IGNhc2UgLTI6CistICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAtIDEg PiAyICogUHlMb25nX1NISUZUKSB7CistICAgICAgICAgICAgICAgICAgICAgICAgYSA9IC0obG9u ZykgKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNp Z25lZCBsb25nKWRpZ2l0c1swXSkpOworLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor LSNpZmRlZiBIQVZFX0xPTkdfTE9ORworLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICg4 ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gMiAqIFB5TG9uZ19TSElGVCkgeworLSAgICAg ICAgICAgICAgICAgICAgICAgIGxsYSA9IC0oUFlfTE9OR19MT05HKSAoKCgoKHVuc2lnbmVkIFBZ X0xPTkdfTE9ORylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9O R19MT05HKWRpZ2l0c1swXSkpOworLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19s b25nOworLSNlbmRpZgorLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAg ICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworLSAgICAgICAgICAgICAgICBjYXNlIDI6CistICAgICAg ICAgICAgICAgICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAtIDEgPiAyICogUHlMb25nX1NISUZU KSB7CistICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChsb25nKSAoKCgoKHVuc2lnbmVkIGxv bmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzBd KSk7CistICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistI2lmZGVmIEhBVkVfTE9OR19M T05HCistICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXplb2YoUFlfTE9OR19M T05HKSAtIDEgPiAyICogUHlMb25nX1NISUZUKSB7CistICAgICAgICAgICAgICAgICAgICAgICAg bGxhID0gKFBZX0xPTkdfTE9ORykgKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFd KSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsK Ky0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGxvbmdfbG9uZzsKKy0jZW5kaWYKKy0gICAg ICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIENZVEhPTl9GQUxMVEhST1VH SDsKKy0gICAgICAgICAgICAgICAgY2FzZSAtMzoKKy0gICAgICAgICAgICAgICAgICAgIGlmICg4 ICogc2l6ZW9mKGxvbmcpIC0gMSA+IDMgKiBQeUxvbmdfU0hJRlQpIHsKKy0gICAgICAgICAgICAg ICAgICAgICAgICBhID0gLShsb25nKSAoKCgoKCgodW5zaWduZWQgbG9uZylkaWdpdHNbMl0pIDw8 IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElG VCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKKy0gICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDMgKiBQeUxvbmdfU0hJRlQp IHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAtKFBZX0xPTkdfTE9ORykgKCgoKCgo KHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMl0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5z aWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25l ZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgZ290 byBsb25nX2xvbmc7CistI2VuZGlmCistICAgICAgICAgICAgICAgICAgICB9CistICAgICAgICAg ICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICAgICAgICAgIGNhc2UgMzoK Ky0gICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+IDMgKiBQeUxv bmdfU0hJRlQpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBhID0gKGxvbmcpICgoKCgoKCh1 bnNpZ25lZCBsb25nKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25n KWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkp OworLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworLSNpZmRlZiBIQVZFX0xPTkdfTE9O RworLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9O RykgLSAxID4gMyAqIFB5TG9uZ19TSElGVCkgeworLSAgICAgICAgICAgICAgICAgICAgICAgIGxs YSA9IChQWV9MT05HX0xPTkcpICgoKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzJd KSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMV0pIDw8 IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1swXSkpOworLSAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOworLSNlbmRpZgorLSAgICAgICAg ICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOwor LSAgICAgICAgICAgICAgICBjYXNlIC00OgorLSAgICAgICAgICAgICAgICAgICAgaWYgKDggKiBz aXplb2YobG9uZykgLSAxID4gNCAqIFB5TG9uZ19TSElGVCkgeworLSAgICAgICAgICAgICAgICAg ICAgICAgIGEgPSAtKGxvbmcpICgoKCgoKCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzNdKSA8PCBQ eUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQp IHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVk IGxvbmcpZGlnaXRzWzBdKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistI2lm ZGVmIEhBVkVfTE9OR19MT05HCistICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBz aXplb2YoUFlfTE9OR19MT05HKSAtIDEgPiA0ICogUHlMb25nX1NISUZUKSB7CistICAgICAgICAg ICAgICAgICAgICAgICAgbGxhID0gLShQWV9MT05HX0xPTkcpICgoKCgoKCgoKHVuc2lnbmVkIFBZ X0xPTkdfTE9ORylkaWdpdHNbM10pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9O R19MT05HKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xP TkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylk aWdpdHNbMF0pKTsKKy0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGxvbmdfbG9uZzsKKy0j ZW5kaWYKKy0gICAgICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgICAgIENZVEhP Tl9GQUxMVEhST1VHSDsKKy0gICAgICAgICAgICAgICAgY2FzZSA0OgorLSAgICAgICAgICAgICAg ICAgICAgaWYgKDggKiBzaXplb2YobG9uZykgLSAxID4gNCAqIFB5TG9uZ19TSElGVCkgeworLSAg ICAgICAgICAgICAgICAgICAgICAgIGEgPSAobG9uZykgKCgoKCgoKCgodW5zaWduZWQgbG9uZylk aWdpdHNbM10pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMl0pIDw8 IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElG VCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKKy0gICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDQgKiBQeUxvbmdfU0hJRlQp IHsKKy0gICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAoUFlfTE9OR19MT05HKSAoKCgoKCgo KCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzNdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVu c2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMl0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWdu ZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQ WV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7CistICAgICAgICAgICAgICAgICAgICAgICAgZ290byBs b25nX2xvbmc7CisrICAgIFB5X0lOQ1JFRihyZXN1bHQpOworKyAgICByZXR1cm4gcmVzdWx0Owor K30KKytzdGF0aWMgUHlHZXRTZXREZWYgX19weXhfQ3lGdW5jdGlvbl9nZXRzZXRzW10gPSB7Cisr ICAgIHsoY2hhciAqKSAiZnVuY19kb2MiLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2Rv YywgKHNldHRlcilfX1B5eF9DeUZ1bmN0aW9uX3NldF9kb2MsIDAsIDB9LAorKyAgICB7KGNoYXIg KikgIl9fZG9jX18iLCAgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9kb2MsIChzZXR0ZXIp X19QeXhfQ3lGdW5jdGlvbl9zZXRfZG9jLCAwLCAwfSwKKysgICAgeyhjaGFyICopICJmdW5jX25h bWUiLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X25hbWUsIChzZXR0ZXIpX19QeXhfQ3lG dW5jdGlvbl9zZXRfbmFtZSwgMCwgMH0sCisrICAgIHsoY2hhciAqKSAiX19uYW1lX18iLCAoZ2V0 dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X25hbWUsIChzZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9z ZXRfbmFtZSwgMCwgMH0sCisrICAgIHsoY2hhciAqKSAiX19xdWFsbmFtZV9fIiwgKGdldHRlcilf X1B5eF9DeUZ1bmN0aW9uX2dldF9xdWFsbmFtZSwgKHNldHRlcilfX1B5eF9DeUZ1bmN0aW9uX3Nl dF9xdWFsbmFtZSwgMCwgMH0sCisrICAgIHsoY2hhciAqKSAiX19zZWxmX18iLCAoZ2V0dGVyKV9f UHl4X0N5RnVuY3Rpb25fZ2V0X3NlbGYsIDAsIDAsIDB9LAorKyAgICB7KGNoYXIgKikgImZ1bmNf ZGljdCIsIChnZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9nZXRfZGljdCwgKHNldHRlcilfX1B5eF9D eUZ1bmN0aW9uX3NldF9kaWN0LCAwLCAwfSwKKysgICAgeyhjaGFyICopICJfX2RpY3RfXyIsIChn ZXR0ZXIpX19QeXhfQ3lGdW5jdGlvbl9nZXRfZGljdCwgKHNldHRlcilfX1B5eF9DeUZ1bmN0aW9u X3NldF9kaWN0LCAwLCAwfSwKKysgICAgeyhjaGFyICopICJmdW5jX2dsb2JhbHMiLCAoZ2V0dGVy KV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2dsb2JhbHMsIDAsIDAsIDB9LAorKyAgICB7KGNoYXIgKikg Il9fZ2xvYmFsc19fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9nbG9iYWxzLCAwLCAw LCAwfSwKKysgICAgeyhjaGFyICopICJmdW5jX2Nsb3N1cmUiLCAoZ2V0dGVyKV9fUHl4X0N5RnVu Y3Rpb25fZ2V0X2Nsb3N1cmUsIDAsIDAsIDB9LAorKyAgICB7KGNoYXIgKikgIl9fY2xvc3VyZV9f IiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9jbG9zdXJlLCAwLCAwLCAwfSwKKysgICAg eyhjaGFyICopICJmdW5jX2NvZGUiLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2NvZGUs IDAsIDAsIDB9LAorKyAgICB7KGNoYXIgKikgIl9fY29kZV9fIiwgKGdldHRlcilfX1B5eF9DeUZ1 bmN0aW9uX2dldF9jb2RlLCAwLCAwLCAwfSwKKysgICAgeyhjaGFyICopICJmdW5jX2RlZmF1bHRz IiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9kZWZhdWx0cywgKHNldHRlcilfX1B5eF9D eUZ1bmN0aW9uX3NldF9kZWZhdWx0cywgMCwgMH0sCisrICAgIHsoY2hhciAqKSAiX19kZWZhdWx0 c19fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9kZWZhdWx0cywgKHNldHRlcilfX1B5 eF9DeUZ1bmN0aW9uX3NldF9kZWZhdWx0cywgMCwgMH0sCisrICAgIHsoY2hhciAqKSAiX19rd2Rl ZmF1bHRzX18iLCAoZ2V0dGVyKV9fUHl4X0N5RnVuY3Rpb25fZ2V0X2t3ZGVmYXVsdHMsIChzZXR0 ZXIpX19QeXhfQ3lGdW5jdGlvbl9zZXRfa3dkZWZhdWx0cywgMCwgMH0sCisrICAgIHsoY2hhciAq KSAiX19hbm5vdGF0aW9uc19fIiwgKGdldHRlcilfX1B5eF9DeUZ1bmN0aW9uX2dldF9hbm5vdGF0 aW9ucywgKHNldHRlcilfX1B5eF9DeUZ1bmN0aW9uX3NldF9hbm5vdGF0aW9ucywgMCwgMH0sCisr ICAgIHswLCAwLCAwLCAwLCAwfQorK307Cisrc3RhdGljIFB5TWVtYmVyRGVmIF9fcHl4X0N5RnVu Y3Rpb25fbWVtYmVyc1tdID0geworKyAgICB7KGNoYXIgKikgIl9fbW9kdWxlX18iLCBUX09CSkVD VCwgb2Zmc2V0b2YoUHlDRnVuY3Rpb25PYmplY3QsIG1fbW9kdWxlKSwgUFlfV1JJVEVfUkVTVFJJ Q1RFRCwgMH0sCisrICAgIHswLCAwLCAwLCAgMCwgMH0KKyt9OworK3N0YXRpYyBQeU9iamVjdCAq CisrX19QeXhfQ3lGdW5jdGlvbl9yZWR1Y2UoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSwgQ1lU SE9OX1VOVVNFRCBQeU9iamVjdCAqYXJncykKKyt7CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0g MworKyAgICBQeV9JTkNSRUYobS0+ZnVuY19xdWFsbmFtZSk7CisrICAgIHJldHVybiBtLT5mdW5j X3F1YWxuYW1lOworKyNlbHNlCisrICAgIHJldHVybiBQeVN0cmluZ19Gcm9tU3RyaW5nKG0tPmZ1 bmMubV9tbC0+bWxfbmFtZSk7CisgI2VuZGlmCistICAgICAgICAgICAgICAgICAgICB9CistICAg ICAgICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CistICAgICAgICAgICAgICAgIGRl ZmF1bHQ6IHJldHVybiBQeUxvbmdfVHlwZS50cF9hc19udW1iZXItPm5iX3N1YnRyYWN0KG9wMSwg b3AyKTsKKy0gICAgICAgICAgICB9CistICAgICAgICB9CistICAgICAgICAgICAgICAgIHggPSBh IC0gYjsKKy0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHgpOworLSNpZmRlZiBI QVZFX0xPTkdfTE9ORworLSAgICAgICAgbG9uZ19sb25nOgorLSAgICAgICAgICAgICAgICBsbHgg PSBsbGEgLSBsbGI7CistICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZ0xvbmcobGx4 KTsKKyt9Cisrc3RhdGljIFB5TWV0aG9kRGVmIF9fcHl4X0N5RnVuY3Rpb25fbWV0aG9kc1tdID0g eworKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pX19QeXhfQ3lGdW5jdGlvbl9yZWR1 Y2UsIE1FVEhfVkFSQVJHUywgMH0sCisrICAgIHswLCAwLCAwLCAwfQorK307CisrI2lmIFBZX1ZF UlNJT05fSEVYIDwgMHgwMzA1MDBBMAorKyNkZWZpbmUgX19QeXhfQ3lGdW5jdGlvbl93ZWFrcmVm bGlzdChjeWZ1bmMpICgoY3lmdW5jKS0+ZnVuY193ZWFrcmVmbGlzdCkKKysjZWxzZQorKyNkZWZp bmUgX19QeXhfQ3lGdW5jdGlvbl93ZWFrcmVmbGlzdChjeWZ1bmMpICgoY3lmdW5jKS0+ZnVuYy5t X3dlYWtyZWZsaXN0KQorICNlbmRpZgorLSAgICAgICAgCistICAgICAgICAKKytzdGF0aWMgUHlP YmplY3QgKl9fUHl4X0N5RnVuY3Rpb25fSW5pdChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCwg UHlNZXRob2REZWYgKm1sLCBpbnQgZmxhZ3MsIFB5T2JqZWN0KiBxdWFsbmFtZSwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqY2xvc3VyZSwgUHlPYmpl Y3QgKm1vZHVsZSwgUHlPYmplY3QqIGdsb2JhbHMsIFB5T2JqZWN0KiBjb2RlKSB7CisrICAgIGlm ICh1bmxpa2VseShvcCA9PSBOVUxMKSkKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICBvcC0+ ZmxhZ3MgPSBmbGFnczsKKysgICAgX19QeXhfQ3lGdW5jdGlvbl93ZWFrcmVmbGlzdChvcCkgPSBO VUxMOworKyAgICBvcC0+ZnVuYy5tX21sID0gbWw7CisrICAgIG9wLT5mdW5jLm1fc2VsZiA9IChQ eU9iamVjdCAqKSBvcDsKKysgICAgUHlfWElOQ1JFRihjbG9zdXJlKTsKKysgICAgb3AtPmZ1bmNf Y2xvc3VyZSA9IGNsb3N1cmU7CisrICAgIFB5X1hJTkNSRUYobW9kdWxlKTsKKysgICAgb3AtPmZ1 bmMubV9tb2R1bGUgPSBtb2R1bGU7CisrICAgIG9wLT5mdW5jX2RpY3QgPSBOVUxMOworKyAgICBv cC0+ZnVuY19uYW1lID0gTlVMTDsKKysgICAgUHlfSU5DUkVGKHF1YWxuYW1lKTsKKysgICAgb3At PmZ1bmNfcXVhbG5hbWUgPSBxdWFsbmFtZTsKKysgICAgb3AtPmZ1bmNfZG9jID0gTlVMTDsKKysg ICAgb3AtPmZ1bmNfY2xhc3NvYmogPSBOVUxMOworKyAgICBvcC0+ZnVuY19nbG9iYWxzID0gZ2xv YmFsczsKKysgICAgUHlfSU5DUkVGKG9wLT5mdW5jX2dsb2JhbHMpOworKyAgICBQeV9YSU5DUkVG KGNvZGUpOworKyAgICBvcC0+ZnVuY19jb2RlID0gY29kZTsKKysgICAgb3AtPmRlZmF1bHRzX3B5 b2JqZWN0cyA9IDA7CisrICAgIG9wLT5kZWZhdWx0c19zaXplID0gMDsKKysgICAgb3AtPmRlZmF1 bHRzID0gTlVMTDsKKysgICAgb3AtPmRlZmF1bHRzX3R1cGxlID0gTlVMTDsKKysgICAgb3AtPmRl ZmF1bHRzX2t3ZGljdCA9IE5VTEw7CisrICAgIG9wLT5kZWZhdWx0c19nZXR0ZXIgPSBOVUxMOwor KyAgICBvcC0+ZnVuY19hbm5vdGF0aW9ucyA9IE5VTEw7CisrICAgIHJldHVybiAoUHlPYmplY3Qg Kikgb3A7CisrfQorK3N0YXRpYyBpbnQKKytfX1B5eF9DeUZ1bmN0aW9uX2NsZWFyKF9fcHl4X0N5 RnVuY3Rpb25PYmplY3QgKm0pCisreworKyAgICBQeV9DTEVBUihtLT5mdW5jX2Nsb3N1cmUpOwor KyAgICBQeV9DTEVBUihtLT5mdW5jLm1fbW9kdWxlKTsKKysgICAgUHlfQ0xFQVIobS0+ZnVuY19k aWN0KTsKKysgICAgUHlfQ0xFQVIobS0+ZnVuY19uYW1lKTsKKysgICAgUHlfQ0xFQVIobS0+ZnVu Y19xdWFsbmFtZSk7CisrICAgIFB5X0NMRUFSKG0tPmZ1bmNfZG9jKTsKKysgICAgUHlfQ0xFQVIo bS0+ZnVuY19nbG9iYWxzKTsKKysgICAgUHlfQ0xFQVIobS0+ZnVuY19jb2RlKTsKKysgICAgUHlf Q0xFQVIobS0+ZnVuY19jbGFzc29iaik7CisrICAgIFB5X0NMRUFSKG0tPmRlZmF1bHRzX3R1cGxl KTsKKysgICAgUHlfQ0xFQVIobS0+ZGVmYXVsdHNfa3dkaWN0KTsKKysgICAgUHlfQ0xFQVIobS0+ ZnVuY19hbm5vdGF0aW9ucyk7CisrICAgIGlmIChtLT5kZWZhdWx0cykgeworKyAgICAgICAgUHlP YmplY3QgKipweWRlZmF1bHRzID0gX19QeXhfQ3lGdW5jdGlvbl9EZWZhdWx0cyhQeU9iamVjdCAq LCBtKTsKKysgICAgICAgIGludCBpOworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG0tPmRlZmF1 bHRzX3B5b2JqZWN0czsgaSsrKQorKyAgICAgICAgICAgIFB5X1hERUNSRUYocHlkZWZhdWx0c1tp XSk7CisrICAgICAgICBQeU9iamVjdF9GcmVlKG0tPmRlZmF1bHRzKTsKKysgICAgICAgIG0tPmRl ZmF1bHRzID0gTlVMTDsKKyAgICAgfQorLSAgICAjZW5kaWYKKy0gICAgaWYgKFB5RmxvYXRfQ2hl Y2tFeGFjdChvcDEpKSB7CistICAgICAgICBjb25zdCBsb25nIGIgPSBpbnR2YWw7CistICAgICAg ICBkb3VibGUgYSA9IFB5RmxvYXRfQVNfRE9VQkxFKG9wMSk7CistICAgICAgICAgICAgZG91Ymxl IHJlc3VsdDsKKy0gICAgICAgICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJzdWJ0cmFjdCIsIHJl dHVybiBOVUxMKQorLSAgICAgICAgICAgIHJlc3VsdCA9ICgoZG91YmxlKWEpIC0gKGRvdWJsZSli OworLSAgICAgICAgICAgIFB5RlBFX0VORF9QUk9URUNUKHJlc3VsdCkKKy0gICAgICAgICAgICBy ZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHJlc3VsdCk7CisrICAgIHJldHVybiAwOworK30KKytz dGF0aWMgdm9pZCBfX1B5eF9fQ3lGdW5jdGlvbl9kZWFsbG9jKF9fcHl4X0N5RnVuY3Rpb25PYmpl Y3QgKm0pCisreworKyAgICBpZiAoX19QeXhfQ3lGdW5jdGlvbl93ZWFrcmVmbGlzdChtKSAhPSBO VUxMKQorKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgbSk7Cisr ICAgIF9fUHl4X0N5RnVuY3Rpb25fY2xlYXIobSk7CisrICAgIFB5T2JqZWN0X0dDX0RlbChtKTsK Kyt9Cisrc3RhdGljIHZvaWQgX19QeXhfQ3lGdW5jdGlvbl9kZWFsbG9jKF9fcHl4X0N5RnVuY3Rp b25PYmplY3QgKm0pCisreworKyAgICBQeU9iamVjdF9HQ19VblRyYWNrKG0pOworKyAgICBfX1B5 eF9fQ3lGdW5jdGlvbl9kZWFsbG9jKG0pOworK30KKytzdGF0aWMgaW50IF9fUHl4X0N5RnVuY3Rp b25fdHJhdmVyc2UoX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSwgdmlzaXRwcm9jIHZpc2l0LCB2 b2lkICphcmcpCisreworKyAgICBQeV9WSVNJVChtLT5mdW5jX2Nsb3N1cmUpOworKyAgICBQeV9W SVNJVChtLT5mdW5jLm1fbW9kdWxlKTsKKysgICAgUHlfVklTSVQobS0+ZnVuY19kaWN0KTsKKysg ICAgUHlfVklTSVQobS0+ZnVuY19uYW1lKTsKKysgICAgUHlfVklTSVQobS0+ZnVuY19xdWFsbmFt ZSk7CisrICAgIFB5X1ZJU0lUKG0tPmZ1bmNfZG9jKTsKKysgICAgUHlfVklTSVQobS0+ZnVuY19n bG9iYWxzKTsKKysgICAgUHlfVklTSVQobS0+ZnVuY19jb2RlKTsKKysgICAgUHlfVklTSVQobS0+ ZnVuY19jbGFzc29iaik7CisrICAgIFB5X1ZJU0lUKG0tPmRlZmF1bHRzX3R1cGxlKTsKKysgICAg UHlfVklTSVQobS0+ZGVmYXVsdHNfa3dkaWN0KTsKKysgICAgaWYgKG0tPmRlZmF1bHRzKSB7Cisr ICAgICAgICBQeU9iamVjdCAqKnB5ZGVmYXVsdHMgPSBfX1B5eF9DeUZ1bmN0aW9uX0RlZmF1bHRz KFB5T2JqZWN0ICosIG0pOworKyAgICAgICAgaW50IGk7CisrICAgICAgICBmb3IgKGkgPSAwOyBp IDwgbS0+ZGVmYXVsdHNfcHlvYmplY3RzOyBpKyspCisrICAgICAgICAgICAgUHlfVklTSVQocHlk ZWZhdWx0c1tpXSk7CisgICAgIH0KKy0gICAgcmV0dXJuIChpbnBsYWNlID8gUHlOdW1iZXJfSW5Q bGFjZVN1YnRyYWN0IDogUHlOdW1iZXJfU3VidHJhY3QpKG9wMSwgb3AyKTsKKysgICAgcmV0dXJu IDA7CisgfQorK3N0YXRpYyBQeU9iamVjdCAqX19QeXhfQ3lGdW5jdGlvbl9kZXNjcl9nZXQoUHlP YmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICp0eXBlKQorK3sKKysjaWYgUFlf TUFKT1JfVkVSU0lPTiA8IDMKKysgICAgX19weXhfQ3lGdW5jdGlvbk9iamVjdCAqbSA9IChfX3B5 eF9DeUZ1bmN0aW9uT2JqZWN0ICopIGZ1bmM7CisrICAgIGlmIChtLT5mbGFncyAmIF9fUHl4X0NZ RlVOQ1RJT05fU1RBVElDTUVUSE9EKSB7CisrICAgICAgICBQeV9JTkNSRUYoZnVuYyk7CisrICAg ICAgICByZXR1cm4gZnVuYzsKKysgICAgfQorKyAgICBpZiAobS0+ZmxhZ3MgJiBfX1B5eF9DWUZV TkNUSU9OX0NMQVNTTUVUSE9EKSB7CisrICAgICAgICBpZiAodHlwZSA9PSBOVUxMKQorKyAgICAg ICAgICAgIHR5cGUgPSAoUHlPYmplY3QgKikoUHlfVFlQRShvYmopKTsKKysgICAgICAgIHJldHVy biBfX1B5eF9QeU1ldGhvZF9OZXcoZnVuYywgdHlwZSwgKFB5T2JqZWN0ICopKFB5X1RZUEUodHlw ZSkpKTsKKysgICAgfQorKyAgICBpZiAob2JqID09IFB5X05vbmUpCisrICAgICAgICBvYmogPSBO VUxMOworICNlbmRpZgorLQorLS8qIFdyaXRlVW5yYWlzYWJsZUV4Y2VwdGlvbiAqLworLXN0YXRp YyB2b2lkIF9fUHl4X1dyaXRlVW5yYWlzYWJsZShjb25zdCBjaGFyICpuYW1lLCBDWVRIT05fVU5V U0VEIGludCBjbGluZW5vLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDWVRI T05fVU5VU0VEIGludCBsaW5lbm8sIENZVEhPTl9VTlVTRUQgY29uc3QgY2hhciAqZmlsZW5hbWUs CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmdWxsX3RyYWNlYmFjaywg Q1lUSE9OX1VOVVNFRCBpbnQgbm9naWwpIHsKKy0gICAgUHlPYmplY3QgKm9sZF9leGMsICpvbGRf dmFsLCAqb2xkX3RiOworLSAgICBQeU9iamVjdCAqY3R4OworLSAgICBfX1B5eF9QeVRocmVhZFN0 YXRlX2RlY2xhcmUKKy0jaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgUHlHSUxTdGF0ZV9TVEFURSBz dGF0ZTsKKy0gICAgaWYgKG5vZ2lsKQorLSAgICAgICAgc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3Vy ZSgpOworLSNpZmRlZiBfTVNDX1ZFUgorLSAgICBlbHNlIHN0YXRlID0gKFB5R0lMU3RhdGVfU1RB VEUpLTE7CistI2VuZGlmCisrICAgIHJldHVybiBfX1B5eF9QeU1ldGhvZF9OZXcoZnVuYywgb2Jq LCB0eXBlKTsKKyt9Cisrc3RhdGljIFB5T2JqZWN0KgorK19fUHl4X0N5RnVuY3Rpb25fcmVwcihf X3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICpvcCkKKyt7CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0g MworKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxjeWZ1bmN0aW9uICVVIGF0ICVw PiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC0+ZnVuY19xdWFsbmFtZSwg KHZvaWQgKilvcCk7CisrI2Vsc2UKKysgICAgcmV0dXJuIFB5U3RyaW5nX0Zyb21Gb3JtYXQoIjxj eWZ1bmN0aW9uICVzIGF0ICVwPiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5 U3RyaW5nX0FzU3RyaW5nKG9wLT5mdW5jX3F1YWxuYW1lKSwgKHZvaWQgKilvcCk7CisgI2VuZGlm CistICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfYXNzaWduCistICAgIF9fUHl4X0VyckZldGNoKCZv bGRfZXhjLCAmb2xkX3ZhbCwgJm9sZF90Yik7CistICAgIGlmIChmdWxsX3RyYWNlYmFjaykgewor LSAgICAgICAgUHlfWElOQ1JFRihvbGRfZXhjKTsKKy0gICAgICAgIFB5X1hJTkNSRUYob2xkX3Zh bCk7CistICAgICAgICBQeV9YSU5DUkVGKG9sZF90Yik7CistICAgICAgICBfX1B5eF9FcnJSZXN0 b3JlKG9sZF9leGMsIG9sZF92YWwsIG9sZF90Yik7CistICAgICAgICBQeUVycl9QcmludEV4KDEp OworLSAgICB9CistICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLSAgICBjdHggPSBQeVN0 cmluZ19Gcm9tU3RyaW5nKG5hbWUpOworLSAgICAjZWxzZQorLSAgICBjdHggPSBQeVVuaWNvZGVf RnJvbVN0cmluZyhuYW1lKTsKKy0gICAgI2VuZGlmCistICAgIF9fUHl4X0VyclJlc3RvcmUob2xk X2V4Yywgb2xkX3ZhbCwgb2xkX3RiKTsKKy0gICAgaWYgKCFjdHgpIHsKKy0gICAgICAgIFB5RXJy X1dyaXRlVW5yYWlzYWJsZShQeV9Ob25lKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIFB5RXJy X1dyaXRlVW5yYWlzYWJsZShjdHgpOworLSAgICAgICAgUHlfREVDUkVGKGN0eCk7CisrfQorK3N0 YXRpYyBQeU9iamVjdCAqIF9fUHl4X0N5RnVuY3Rpb25fQ2FsbE1ldGhvZChQeU9iamVjdCAqZnVu YywgUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcsIFB5T2JqZWN0ICprdykgeworKyAgICBQ eUNGdW5jdGlvbk9iamVjdCogZiA9IChQeUNGdW5jdGlvbk9iamVjdCopZnVuYzsKKysgICAgUHlD RnVuY3Rpb24gbWV0aCA9IGYtPm1fbWwtPm1sX21ldGg7CisrICAgIFB5X3NzaXplX3Qgc2l6ZTsK KysgICAgc3dpdGNoIChmLT5tX21sLT5tbF9mbGFncyAmIChNRVRIX1ZBUkFSR1MgfCBNRVRIX0tF WVdPUkRTIHwgTUVUSF9OT0FSR1MgfCBNRVRIX08pKSB7CisrICAgIGNhc2UgTUVUSF9WQVJBUkdT OgorKyAgICAgICAgaWYgKGxpa2VseShrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAw KSkKKysgICAgICAgICAgICByZXR1cm4gKCptZXRoKShzZWxmLCBhcmcpOworKyAgICAgICAgYnJl YWs7CisrICAgIGNhc2UgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUzoKKysgICAgICAgIHJl dHVybiAoKihQeUNGdW5jdGlvbldpdGhLZXl3b3Jkcykodm9pZCopbWV0aCkoc2VsZiwgYXJnLCBr dyk7CisrICAgIGNhc2UgTUVUSF9OT0FSR1M6CisrICAgICAgICBpZiAobGlrZWx5KGt3ID09IE5V TEwgfHwgUHlEaWN0X1NpemUoa3cpID09IDApKSB7CisrICAgICAgICAgICAgc2l6ZSA9IFB5VHVw bGVfR0VUX1NJWkUoYXJnKTsKKysgICAgICAgICAgICBpZiAobGlrZWx5KHNpemUgPT0gMCkpCisr ICAgICAgICAgICAgICAgIHJldHVybiAoKm1ldGgpKHNlbGYsIE5VTEwpOworKyAgICAgICAgICAg IFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisrICAgICAgICAgICAgICAgICIlLjIwMHMo KSB0YWtlcyBubyBhcmd1bWVudHMgKCUiIENZVEhPTl9GT1JNQVRfU1NJWkVfVCAiZCBnaXZlbiki LAorKyAgICAgICAgICAgICAgICBmLT5tX21sLT5tbF9uYW1lLCBzaXplKTsKKysgICAgICAgICAg ICByZXR1cm4gTlVMTDsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIE1F VEhfTzoKKysgICAgICAgIGlmIChsaWtlbHkoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6ZShrdykg PT0gMCkpIHsKKysgICAgICAgICAgICBzaXplID0gUHlUdXBsZV9HRVRfU0laRShhcmcpOworKyAg ICAgICAgICAgIGlmIChsaWtlbHkoc2l6ZSA9PSAxKSkgeworKyAgICAgICAgICAgICAgICBQeU9i amVjdCAqcmVzdWx0LCAqYXJnMDsKKysgICAgICAgICAgICAgICAgI2lmIENZVEhPTl9BU1NVTUVf U0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCisrICAgICAgICAgICAg ICAgIGFyZzAgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZywgMCk7CisrICAgICAgICAgICAgICAgICNl bHNlCisrICAgICAgICAgICAgICAgIGFyZzAgPSBQeVNlcXVlbmNlX0lURU0oYXJnLCAwKTsgaWYg KHVubGlrZWx5KCFhcmcwKSkgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgICNlbmRpZgor KyAgICAgICAgICAgICAgICByZXN1bHQgPSAoKm1ldGgpKHNlbGYsIGFyZzApOworKyAgICAgICAg ICAgICAgICAjaWYgIShDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFDWVRIT05fQVZPSURf Qk9SUk9XRURfUkVGUykKKysgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFyZzApOworKyAgICAg ICAgICAgICAgICAjZW5kaWYKKysgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKysgICAg ICAgICAgICB9CisrICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKysg ICAgICAgICAgICAgICAgIiUuMjAwcygpIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50ICglIiBD WVRIT05fRk9STUFUX1NTSVpFX1QgImQgZ2l2ZW4pIiwKKysgICAgICAgICAgICAgICAgZi0+bV9t bC0+bWxfbmFtZSwgc2l6ZSk7CisrICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICB9 CisrICAgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICAgIFB5RXJyX1NldFN0cmlu ZyhQeUV4Y19TeXN0ZW1FcnJvciwgIkJhZCBjYWxsIGZsYWdzIGluICIKKysgICAgICAgICAgICAg ICAgICAgICAgICAiX19QeXhfQ3lGdW5jdGlvbl9DYWxsLiBNRVRIX09MREFSR1MgaXMgbm8gIgor KyAgICAgICAgICAgICAgICAgICAgICAgICJsb25nZXIgc3VwcG9ydGVkISIpOworKyAgICAgICAg cmV0dXJuIE5VTEw7CisgICAgIH0KKy0jaWZkZWYgV0lUSF9USFJFQUQKKy0gICAgaWYgKG5vZ2ls KQorLSAgICAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKHN0YXRlKTsKKy0jZW5kaWYKKy19CistCist LyogU3dhcEV4Y2VwdGlvbiAqLworLSNpZiBDWVRIT05fRkFTVF9USFJFQURfU1RBVEUKKy1zdGF0 aWMgQ1lUSE9OX0lOTElORSB2b2lkIF9fUHl4X19FeGNlcHRpb25Td2FwKFB5VGhyZWFkU3RhdGUg KnRzdGF0ZSwgUHlPYmplY3QgKip0eXBlLCBQeU9iamVjdCAqKnZhbHVlLCBQeU9iamVjdCAqKnRi KSB7CistICAgIFB5T2JqZWN0ICp0bXBfdHlwZSwgKnRtcF92YWx1ZSwgKnRtcF90YjsKKy0gICAg I2lmIENZVEhPTl9VU0VfRVhDX0lORk9fU1RBQ0sKKy0gICAgX1B5RXJyX1N0YWNrSXRlbSAqZXhj X2luZm8gPSB0c3RhdGUtPmV4Y19pbmZvOworLSAgICB0bXBfdHlwZSA9IGV4Y19pbmZvLT5leGNf dHlwZTsKKy0gICAgdG1wX3ZhbHVlID0gZXhjX2luZm8tPmV4Y192YWx1ZTsKKy0gICAgdG1wX3Ri ID0gZXhjX2luZm8tPmV4Y190cmFjZWJhY2s7CistICAgIGV4Y19pbmZvLT5leGNfdHlwZSA9ICp0 eXBlOworLSAgICBleGNfaW5mby0+ZXhjX3ZhbHVlID0gKnZhbHVlOworLSAgICBleGNfaW5mby0+ ZXhjX3RyYWNlYmFjayA9ICp0YjsKKy0gICAgI2Vsc2UKKy0gICAgdG1wX3R5cGUgPSB0c3RhdGUt PmV4Y190eXBlOworLSAgICB0bXBfdmFsdWUgPSB0c3RhdGUtPmV4Y192YWx1ZTsKKy0gICAgdG1w X3RiID0gdHN0YXRlLT5leGNfdHJhY2ViYWNrOworLSAgICB0c3RhdGUtPmV4Y190eXBlID0gKnR5 cGU7CistICAgIHRzdGF0ZS0+ZXhjX3ZhbHVlID0gKnZhbHVlOworLSAgICB0c3RhdGUtPmV4Y190 cmFjZWJhY2sgPSAqdGI7CistICAgICNlbmRpZgorLSAgICAqdHlwZSA9IHRtcF90eXBlOworLSAg ICAqdmFsdWUgPSB0bXBfdmFsdWU7CistICAgICp0YiA9IHRtcF90YjsKKy19CistI2Vsc2UKKy1z dGF0aWMgQ1lUSE9OX0lOTElORSB2b2lkIF9fUHl4X0V4Y2VwdGlvblN3YXAoUHlPYmplY3QgKip0 eXBlLCBQeU9iamVjdCAqKnZhbHVlLCBQeU9iamVjdCAqKnRiKSB7CistICAgIFB5T2JqZWN0ICp0 bXBfdHlwZSwgKnRtcF92YWx1ZSwgKnRtcF90YjsKKy0gICAgUHlFcnJfR2V0RXhjSW5mbygmdG1w X3R5cGUsICZ0bXBfdmFsdWUsICZ0bXBfdGIpOworLSAgICBQeUVycl9TZXRFeGNJbmZvKCp0eXBl LCAqdmFsdWUsICp0Yik7CistICAgICp0eXBlID0gdG1wX3R5cGU7CistICAgICp2YWx1ZSA9IHRt cF92YWx1ZTsKKy0gICAgKnRiID0gdG1wX3RiOworKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlw ZUVycm9yLCAiJS4yMDBzKCkgdGFrZXMgbm8ga2V5d29yZCBhcmd1bWVudHMiLAorKyAgICAgICAg ICAgICAgICAgZi0+bV9tbC0+bWxfbmFtZSk7CisrICAgIHJldHVybiBOVUxMOworIH0KKy0jZW5k aWYKKy0KKy0vKiBTZXRJdGVtSW50ICovCistc3RhdGljIGludCBfX1B5eF9TZXRJdGVtSW50X0dl bmVyaWMoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpqLCBQeU9iamVjdCAqdikgeworLSAgICBpbnQg cjsKKy0gICAgaWYgKCFqKSByZXR1cm4gLTE7CistICAgIHIgPSBQeU9iamVjdF9TZXRJdGVtKG8s IGosIHYpOworLSAgICBQeV9ERUNSRUYoaik7CistICAgIHJldHVybiByOworK3N0YXRpYyBDWVRI T05fSU5MSU5FIFB5T2JqZWN0ICpfX1B5eF9DeUZ1bmN0aW9uX0NhbGwoUHlPYmplY3QgKmZ1bmMs IFB5T2JqZWN0ICphcmcsIFB5T2JqZWN0ICprdykgeworKyAgICByZXR1cm4gX19QeXhfQ3lGdW5j dGlvbl9DYWxsTWV0aG9kKGZ1bmMsICgoUHlDRnVuY3Rpb25PYmplY3QqKWZ1bmMpLT5tX3NlbGYs IGFyZywga3cpOworIH0KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfU2V0SXRlbUlu dF9GYXN0KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGksIFB5T2JqZWN0ICp2LCBpbnQgaXNfbGlz dCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENZVEhP Tl9OQ1BfVU5VU0VEIGludCB3cmFwYXJvdW5kLCBDWVRIT05fTkNQX1VOVVNFRCBpbnQgYm91bmRz Y2hlY2spIHsKKy0jaWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lE X0JPUlJPV0VEX1JFRlMgJiYgQ1lUSE9OX1VTRV9UWVBFX1NMT1RTCistICAgIGlmIChpc19saXN0 IHx8IFB5TGlzdF9DaGVja0V4YWN0KG8pKSB7CistICAgICAgICBQeV9zc2l6ZV90IG4gPSAoIXdy YXBhcm91bmQpID8gaSA6ICgobGlrZWx5KGkgPj0gMCkpID8gaSA6IGkgKyBQeUxpc3RfR0VUX1NJ WkUobykpOworLSAgICAgICAgaWYgKCghYm91bmRzY2hlY2spIHx8IGxpa2VseShfX1B5eF9pc192 YWxpZF9pbmRleChuLCBQeUxpc3RfR0VUX1NJWkUobykpKSkgeworLSAgICAgICAgICAgIFB5T2Jq ZWN0KiBvbGQgPSBQeUxpc3RfR0VUX0lURU0obywgbik7CistICAgICAgICAgICAgUHlfSU5DUkVG KHYpOworLSAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShvLCBuLCB2KTsKKy0gICAgICAgICAg ICBQeV9ERUNSRUYob2xkKTsKKy0gICAgICAgICAgICByZXR1cm4gMTsKKytzdGF0aWMgUHlPYmpl Y3QgKl9fUHl4X0N5RnVuY3Rpb25fQ2FsbEFzTWV0aG9kKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVj dCAqYXJncywgUHlPYmplY3QgKmt3KSB7CisrICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisrICAgIF9f cHl4X0N5RnVuY3Rpb25PYmplY3QgKmN5ZnVuYyA9IChfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICop IGZ1bmM7CisrICAgIGlmICgoY3lmdW5jLT5mbGFncyAmIF9fUHl4X0NZRlVOQ1RJT05fQ0NMQVNT KSAmJiAhKGN5ZnVuYy0+ZmxhZ3MgJiBfX1B5eF9DWUZVTkNUSU9OX1NUQVRJQ01FVEhPRCkpIHsK KysgICAgICAgIFB5X3NzaXplX3QgYXJnYzsKKysgICAgICAgIFB5T2JqZWN0ICpuZXdfYXJnczsK KysgICAgICAgIFB5T2JqZWN0ICpzZWxmOworKyAgICAgICAgYXJnYyA9IFB5VHVwbGVfR0VUX1NJ WkUoYXJncyk7CisrICAgICAgICBuZXdfYXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoYXJncywgMSwg YXJnYyk7CisrICAgICAgICBpZiAodW5saWtlbHkoIW5ld19hcmdzKSkKKysgICAgICAgICAgICBy ZXR1cm4gTlVMTDsKKysgICAgICAgIHNlbGYgPSBQeVR1cGxlX0dldEl0ZW0oYXJncywgMCk7Cisr ICAgICAgICBpZiAodW5saWtlbHkoIXNlbGYpKSB7CisrICAgICAgICAgICAgUHlfREVDUkVGKG5l d19hcmdzKTsKKysgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgIH0KKysgICAgICAg IHJlc3VsdCA9IF9fUHl4X0N5RnVuY3Rpb25fQ2FsbE1ldGhvZChmdW5jLCBzZWxmLCBuZXdfYXJn cywga3cpOworKyAgICAgICAgUHlfREVDUkVGKG5ld19hcmdzKTsKKyAgICAgfSBlbHNlIHsKKy0g ICAgICAgIFB5U2VxdWVuY2VNZXRob2RzICptID0gUHlfVFlQRShvKS0+dHBfYXNfc2VxdWVuY2U7 CistICAgICAgICBpZiAobGlrZWx5KG0gJiYgbS0+c3FfYXNzX2l0ZW0pKSB7CistICAgICAgICAg ICAgaWYgKHdyYXBhcm91bmQgJiYgdW5saWtlbHkoaSA8IDApICYmIGxpa2VseShtLT5zcV9sZW5n dGgpKSB7CistICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbCA9IG0tPnNxX2xlbmd0aChvKTsK Ky0gICAgICAgICAgICAgICAgaWYgKGxpa2VseShsID49IDApKSB7CistICAgICAgICAgICAgICAg ICAgICBpICs9IGw7CistICAgICAgICAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgICAg ICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCist ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworLSAgICAgICAgICAgICAgICAgICAg UHlFcnJfQ2xlYXIoKTsKKy0gICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIH0KKy0gICAg ICAgICAgICByZXR1cm4gbS0+c3FfYXNzX2l0ZW0obywgaSwgdik7CistICAgICAgICB9CisrICAg ICAgICByZXN1bHQgPSBfX1B5eF9DeUZ1bmN0aW9uX0NhbGwoZnVuYywgYXJncywga3cpOworICAg ICB9CisrICAgIHJldHVybiByZXN1bHQ7CisrfQorK3N0YXRpYyBQeVR5cGVPYmplY3QgX19weXhf Q3lGdW5jdGlvblR5cGVfdHlwZSA9IHsKKysgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKDAsIDAp CisrICAgICJjeXRob25fZnVuY3Rpb25fb3JfbWV0aG9kIiwKKysgICAgc2l6ZW9mKF9fcHl4X0N5 RnVuY3Rpb25PYmplY3QpLAorKyAgICAwLAorKyAgICAoZGVzdHJ1Y3RvcikgX19QeXhfQ3lGdW5j dGlvbl9kZWFsbG9jLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyNpZiBQWV9NQUpPUl9W RVJTSU9OIDwgMworKyAgICAwLAorICNlbHNlCistI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fUFlQ WQorLSAgICBpZiAoaXNfbGlzdCB8fCAoUHlTZXF1ZW5jZV9DaGVjayhvKSAmJiAhUHlEaWN0X0No ZWNrKG8pKSkKKysgICAgMCwKKysjZW5kaWYKKysgICAgKHJlcHJmdW5jKSBfX1B5eF9DeUZ1bmN0 aW9uX3JlcHIsCisrICAgIDAsCisrICAgIDAsCisrICAgIDAsCisrICAgIDAsCisrICAgIF9fUHl4 X0N5RnVuY3Rpb25fQ2FsbEFzTWV0aG9kLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAg ICAwLAorKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsCisrICAg IDAsCisrICAgICh0cmF2ZXJzZXByb2MpIF9fUHl4X0N5RnVuY3Rpb25fdHJhdmVyc2UsCisrICAg IChpbnF1aXJ5KSBfX1B5eF9DeUZ1bmN0aW9uX2NsZWFyLAorKyAgICAwLAorKyNpZiBQWV9WRVJT SU9OX0hFWCA8IDB4MDMwNTAwQTAKKysgICAgb2Zmc2V0b2YoX19weXhfQ3lGdW5jdGlvbk9iamVj dCwgZnVuY193ZWFrcmVmbGlzdCksCisgI2Vsc2UKKy0gICAgaWYgKGlzX2xpc3QgfHwgUHlTZXF1 ZW5jZV9DaGVjayhvKSkKKysgICAgb2Zmc2V0b2YoUHlDRnVuY3Rpb25PYmplY3QsIG1fd2Vha3Jl Zmxpc3QpLAorICNlbmRpZgorLSAgICB7CistICAgICAgICByZXR1cm4gUHlTZXF1ZW5jZV9TZXRJ dGVtKG8sIGksIHYpOworLSAgICB9CisrICAgIDAsCisrICAgIDAsCisrICAgIF9fcHl4X0N5RnVu Y3Rpb25fbWV0aG9kcywKKysgICAgX19weXhfQ3lGdW5jdGlvbl9tZW1iZXJzLAorKyAgICBfX3B5 eF9DeUZ1bmN0aW9uX2dldHNldHMsCisrICAgIDAsCisrICAgIDAsCisrICAgIF9fUHl4X0N5RnVu Y3Rpb25fZGVzY3JfZ2V0LAorKyAgICAwLAorKyAgICBvZmZzZXRvZihfX3B5eF9DeUZ1bmN0aW9u T2JqZWN0LCBmdW5jX2RpY3QpLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAor KyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAg ICAwLAorKyAgICAwLAorKyNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDQwMGExCisrICAgIDAs CisgI2VuZGlmCistICAgIHJldHVybiBfX1B5eF9TZXRJdGVtSW50X0dlbmVyaWMobywgUHlJbnRf RnJvbVNzaXplX3QoaSksIHYpOworLX0KKy0KKy0vKiBGYXN0VHlwZUNoZWNrcyAqLworLSNpZiBD WVRIT05fQ09NUElMSU5HX0lOX0NQWVRIT04KKy1zdGF0aWMgaW50IF9fUHl4X0luQmFzZXMoUHlU eXBlT2JqZWN0ICphLCBQeVR5cGVPYmplY3QgKmIpIHsKKy0gICAgd2hpbGUgKGEpIHsKKy0gICAg ICAgIGEgPSBhLT50cF9iYXNlOworLSAgICAgICAgaWYgKGEgPT0gYikKKy0gICAgICAgICAgICBy ZXR1cm4gMTsKKysjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMzA4MDBiMSAmJiAoIUNZVEhPTl9D T01QSUxJTkdfSU5fUFlQWSB8fCBQWVBZX1ZFUlNJT05fTlVNID49IDB4MDcwMzA4MDApCisrICAg IDAsCisrI2VuZGlmCisrI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwODAwYjQgJiYgUFlfVkVS U0lPTl9IRVggPCAweDAzMDkwMDAwCisrICAgIDAsCisrI2VuZGlmCisrI2lmIENZVEhPTl9DT01Q SUxJTkdfSU5fUFlQWSAmJiBQWV9WRVJTSU9OX0hFWCA+PSAweDAzMDkwMDAwCisrICAgIDAsCisr I2VuZGlmCisrfTsKKytzdGF0aWMgaW50IF9fcHl4X0N5RnVuY3Rpb25faW5pdCh2b2lkKSB7Cisr ICAgIF9fcHl4X0N5RnVuY3Rpb25UeXBlID0gX19QeXhfRmV0Y2hDb21tb25UeXBlKCZfX3B5eF9D eUZ1bmN0aW9uVHlwZV90eXBlKTsKKysgICAgaWYgKHVubGlrZWx5KF9fcHl4X0N5RnVuY3Rpb25U eXBlID09IE5VTEwpKSB7CisrICAgICAgICByZXR1cm4gLTE7CisgICAgIH0KKy0gICAgcmV0dXJu IGIgPT0gJlB5QmFzZU9iamVjdF9UeXBlOworKyAgICByZXR1cm4gMDsKKyB9Cistc3RhdGljIENZ VEhPTl9JTkxJTkUgaW50IF9fUHl4X0lzU3VidHlwZShQeVR5cGVPYmplY3QgKmEsIFB5VHlwZU9i amVjdCAqYikgeworLSAgICBQeU9iamVjdCAqbXJvOworLSAgICBpZiAoYSA9PSBiKSByZXR1cm4g MTsKKy0gICAgbXJvID0gYS0+dHBfbXJvOworLSAgICBpZiAobGlrZWx5KG1ybykpIHsKKy0gICAg ICAgIFB5X3NzaXplX3QgaSwgbjsKKy0gICAgICAgIG4gPSBQeVR1cGxlX0dFVF9TSVpFKG1ybyk7 CistICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CistICAgICAgICAgICAgaWYgKFB5 VHVwbGVfR0VUX0lURU0obXJvLCBpKSA9PSAoUHlPYmplY3QgKiliKQorLSAgICAgICAgICAgICAg ICByZXR1cm4gMTsKKy0gICAgICAgIH0KKy0gICAgICAgIHJldHVybiAwOworK3N0YXRpYyBDWVRI T05fSU5MSU5FIHZvaWQgKl9fUHl4X0N5RnVuY3Rpb25fSW5pdERlZmF1bHRzKFB5T2JqZWN0ICpm dW5jLCBzaXplX3Qgc2l6ZSwgaW50IHB5b2JqZWN0cykgeworKyAgICBfX3B5eF9DeUZ1bmN0aW9u T2JqZWN0ICptID0gKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKikgZnVuYzsKKysgICAgbS0+ZGVm YXVsdHMgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZSk7CisrICAgIGlmICh1bmxpa2VseSghbS0+ZGVm YXVsdHMpKQorKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisrICAgIG1lbXNldCht LT5kZWZhdWx0cywgMCwgc2l6ZSk7CisrICAgIG0tPmRlZmF1bHRzX3B5b2JqZWN0cyA9IHB5b2Jq ZWN0czsKKysgICAgbS0+ZGVmYXVsdHNfc2l6ZSA9IHNpemU7CisrICAgIHJldHVybiBtLT5kZWZh dWx0czsKKyt9Cisrc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9DeUZ1bmN0aW9uX1Nl dERlZmF1bHRzVHVwbGUoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICp0dXBsZSkgeworKyAgICBf X3B5eF9DeUZ1bmN0aW9uT2JqZWN0ICptID0gKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKikgZnVu YzsKKysgICAgbS0+ZGVmYXVsdHNfdHVwbGUgPSB0dXBsZTsKKysgICAgUHlfSU5DUkVGKHR1cGxl KTsKKyt9Cisrc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9DeUZ1bmN0aW9uX1NldERl ZmF1bHRzS3dEaWN0KFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqZGljdCkgeworKyAgICBfX3B5 eF9DeUZ1bmN0aW9uT2JqZWN0ICptID0gKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKikgZnVuYzsK KysgICAgbS0+ZGVmYXVsdHNfa3dkaWN0ID0gZGljdDsKKysgICAgUHlfSU5DUkVGKGRpY3QpOwor K30KKytzdGF0aWMgQ1lUSE9OX0lOTElORSB2b2lkIF9fUHl4X0N5RnVuY3Rpb25fU2V0QW5ub3Rh dGlvbnNEaWN0KFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqZGljdCkgeworKyAgICBfX3B5eF9D eUZ1bmN0aW9uT2JqZWN0ICptID0gKF9fcHl4X0N5RnVuY3Rpb25PYmplY3QgKikgZnVuYzsKKysg ICAgbS0+ZnVuY19hbm5vdGF0aW9ucyA9IGRpY3Q7CisrICAgIFB5X0lOQ1JFRihkaWN0KTsKKyt9 CisrCisrLyogQ3l0aG9uRnVuY3Rpb24gKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fUHl4X0N5RnVu Y3Rpb25fTmV3KFB5TWV0aG9kRGVmICptbCwgaW50IGZsYWdzLCBQeU9iamVjdCogcXVhbG5hbWUs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqY2xvc3Vy ZSwgUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QqIGdsb2JhbHMsIFB5T2JqZWN0KiBjb2RlKSB7 CisrICAgIFB5T2JqZWN0ICpvcCA9IF9fUHl4X0N5RnVuY3Rpb25fSW5pdCgKKysgICAgICAgIFB5 T2JqZWN0X0dDX05ldyhfX3B5eF9DeUZ1bmN0aW9uT2JqZWN0LCBfX3B5eF9DeUZ1bmN0aW9uVHlw ZSksCisrICAgICAgICBtbCwgZmxhZ3MsIHF1YWxuYW1lLCBjbG9zdXJlLCBtb2R1bGUsIGdsb2Jh bHMsIGNvZGUKKysgICAgKTsKKysgICAgaWYgKGxpa2VseShvcCkpIHsKKysgICAgICAgIFB5T2Jq ZWN0X0dDX1RyYWNrKG9wKTsKKyAgICAgfQorLSAgICByZXR1cm4gX19QeXhfSW5CYXNlcyhhLCBi KTsKKysgICAgcmV0dXJuIG9wOworIH0KKy0jaWYgUFlfTUFKT1JfVkVSU0lPTiA9PSAyCistc3Rh dGljIGludCBfX1B5eF9pbm5lcl9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMyKFB5T2JqZWN0 ICplcnIsIFB5T2JqZWN0KiBleGNfdHlwZTEsIFB5T2JqZWN0KiBleGNfdHlwZTIpIHsKKy0gICAg UHlPYmplY3QgKmV4Y2VwdGlvbiwgKnZhbHVlLCAqdGI7CistICAgIGludCByZXM7CistICAgIF9f UHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQorLSAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2ln bgorLSAgICBfX1B5eF9FcnJGZXRjaCgmZXhjZXB0aW9uLCAmdmFsdWUsICZ0Yik7CistICAgIHJl cyA9IGV4Y190eXBlMSA/IFB5T2JqZWN0X0lzU3ViY2xhc3MoZXJyLCBleGNfdHlwZTEpIDogMDsK Ky0gICAgaWYgKHVubGlrZWx5KHJlcyA9PSAtMSkpIHsKKy0gICAgICAgIFB5RXJyX1dyaXRlVW5y YWlzYWJsZShlcnIpOworLSAgICAgICAgcmVzID0gMDsKKysKKysvKiBSYWlzZUFyZ1R1cGxlSW52 YWxpZCAqLworK3N0YXRpYyB2b2lkIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKAorKyAgICBj b25zdCBjaGFyKiBmdW5jX25hbWUsCisrICAgIGludCBleGFjdCwKKysgICAgUHlfc3NpemVfdCBu dW1fbWluLAorKyAgICBQeV9zc2l6ZV90IG51bV9tYXgsCisrICAgIFB5X3NzaXplX3QgbnVtX2Zv dW5kKQorK3sKKysgICAgUHlfc3NpemVfdCBudW1fZXhwZWN0ZWQ7CisrICAgIGNvbnN0IGNoYXIg Km1vcmVfb3JfbGVzczsKKysgICAgaWYgKG51bV9mb3VuZCA8IG51bV9taW4pIHsKKysgICAgICAg IG51bV9leHBlY3RlZCA9IG51bV9taW47CisrICAgICAgICBtb3JlX29yX2xlc3MgPSAiYXQgbGVh c3QiOworKyAgICB9IGVsc2UgeworKyAgICAgICAgbnVtX2V4cGVjdGVkID0gbnVtX21heDsKKysg ICAgICAgIG1vcmVfb3JfbGVzcyA9ICJhdCBtb3N0IjsKKyAgICAgfQorLSAgICBpZiAoIXJlcykg eworLSAgICAgICAgcmVzID0gUHlPYmplY3RfSXNTdWJjbGFzcyhlcnIsIGV4Y190eXBlMik7Cist ICAgICAgICBpZiAodW5saWtlbHkocmVzID09IC0xKSkgeworLSAgICAgICAgICAgIFB5RXJyX1dy aXRlVW5yYWlzYWJsZShlcnIpOworLSAgICAgICAgICAgIHJlcyA9IDA7CistICAgICAgICB9Cisr ICAgIGlmIChleGFjdCkgeworKyAgICAgICAgbW9yZV9vcl9sZXNzID0gImV4YWN0bHkiOworICAg ICB9CistICAgIF9fUHl4X0VyclJlc3RvcmUoZXhjZXB0aW9uLCB2YWx1ZSwgdGIpOworLSAgICBy ZXR1cm4gcmVzOworKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorKyAgICAgICAg ICAgICAgICAgIiUuMjAwcygpIHRha2VzICUuOHMgJSIgQ1lUSE9OX0ZPUk1BVF9TU0laRV9UICJk IHBvc2l0aW9uYWwgYXJndW1lbnQlLjFzICglIiBDWVRIT05fRk9STUFUX1NTSVpFX1QgImQgZ2l2 ZW4pIiwKKysgICAgICAgICAgICAgICAgIGZ1bmNfbmFtZSwgbW9yZV9vcl9sZXNzLCBudW1fZXhw ZWN0ZWQsCisrICAgICAgICAgICAgICAgICAobnVtX2V4cGVjdGVkID09IDEpID8gIiIgOiAicyIs IG51bV9mb3VuZCk7CisgfQorLSNlbHNlCistc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4 X2lubmVyX1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlczIoUHlPYmplY3QgKmVyciwgUHlPYmpl Y3QqIGV4Y190eXBlMSwgUHlPYmplY3QgKmV4Y190eXBlMikgeworLSAgICBpbnQgcmVzID0gZXhj X3R5cGUxID8gX19QeXhfSXNTdWJ0eXBlKChQeVR5cGVPYmplY3QqKWVyciwgKFB5VHlwZU9iamVj dCopZXhjX3R5cGUxKSA6IDA7CistICAgIGlmICghcmVzKSB7CistICAgICAgICByZXMgPSBfX1B5 eF9Jc1N1YnR5cGUoKFB5VHlwZU9iamVjdCopZXJyLCAoUHlUeXBlT2JqZWN0KilleGNfdHlwZTIp OworLSAgICB9CistICAgIHJldHVybiByZXM7CisrCisrLyogUmFpc2VEb3VibGVLZXl3b3JkcyAq LworK3N0YXRpYyB2b2lkIF9fUHl4X1JhaXNlRG91YmxlS2V5d29yZHNFcnJvcigKKysgICAgY29u c3QgY2hhciogZnVuY19uYW1lLAorKyAgICBQeU9iamVjdCoga3dfbmFtZSkKKyt7CisrICAgIFB5 RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisrICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lP TiA+PSAzCisrICAgICAgICAiJXMoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFy Z3VtZW50ICclVSciLCBmdW5jX25hbWUsIGt3X25hbWUpOworKyAgICAgICAgI2Vsc2UKKysgICAg ICAgICIlcygpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgJyVzJyIs IGZ1bmNfbmFtZSwKKysgICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nKGt3X25hbWUpKTsKKysgICAg ICAgICNlbmRpZgorIH0KKy0jZW5kaWYKKy1zdGF0aWMgaW50IF9fUHl4X1B5RXJyX0dpdmVuRXhj ZXB0aW9uTWF0Y2hlc1R1cGxlKFB5T2JqZWN0ICpleGNfdHlwZSwgUHlPYmplY3QgKnR1cGxlKSB7 CistICAgIFB5X3NzaXplX3QgaSwgbjsKKy0gICAgYXNzZXJ0KFB5RXhjZXB0aW9uQ2xhc3NfQ2hl Y2soZXhjX3R5cGUpKTsKKy0gICAgbiA9IFB5VHVwbGVfR0VUX1NJWkUodHVwbGUpOworLSNpZiBQ WV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgZm9yIChpPTA7IGk8bjsgaSsrKSB7CistICAgICAg ICBpZiAoZXhjX3R5cGUgPT0gUHlUdXBsZV9HRVRfSVRFTSh0dXBsZSwgaSkpIHJldHVybiAxOwor LSAgICB9CistI2VuZGlmCistICAgIGZvciAoaT0wOyBpPG47IGkrKykgeworLSAgICAgICAgUHlP YmplY3QgKnQgPSBQeVR1cGxlX0dFVF9JVEVNKHR1cGxlLCBpKTsKKysKKysvKiBQYXJzZUtleXdv cmRzICovCisrc3RhdGljIGludCBfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoCisrICAgIFB5 T2JqZWN0ICprd2RzLAorKyAgICBQeU9iamVjdCAqKmFyZ25hbWVzW10sCisrICAgIFB5T2JqZWN0 ICprd2RzMiwKKysgICAgUHlPYmplY3QgKnZhbHVlc1tdLAorKyAgICBQeV9zc2l6ZV90IG51bV9w b3NfYXJncywKKysgICAgY29uc3QgY2hhciogZnVuY3Rpb25fbmFtZSkKKyt7CisrICAgIFB5T2Jq ZWN0ICprZXkgPSAwLCAqdmFsdWUgPSAwOworKyAgICBQeV9zc2l6ZV90IHBvcyA9IDA7CisrICAg IFB5T2JqZWN0KioqIG5hbWU7CisrICAgIFB5T2JqZWN0KioqIGZpcnN0X2t3X2FyZyA9IGFyZ25h bWVzICsgbnVtX3Bvc19hcmdzOworKyAgICB3aGlsZSAoUHlEaWN0X05leHQoa3dkcywgJnBvcywg JmtleSwgJnZhbHVlKSkgeworKyAgICAgICAgbmFtZSA9IGZpcnN0X2t3X2FyZzsKKysgICAgICAg IHdoaWxlICgqbmFtZSAmJiAoKipuYW1lICE9IGtleSkpIG5hbWUrKzsKKysgICAgICAgIGlmICgq bmFtZSkgeworKyAgICAgICAgICAgIHZhbHVlc1tuYW1lLWFyZ25hbWVzXSA9IHZhbHVlOworKyAg ICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAgICAgbmFtZSA9IGZpcnN0X2t3 X2FyZzsKKyAgICAgICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLSAgICAgICAgaWYgKGxp a2VseShleGNfdHlwZSA9PSB0KSkgcmV0dXJuIDE7CisrICAgICAgICBpZiAobGlrZWx5KFB5U3Ry aW5nX0NoZWNrKGtleSkpKSB7CisrICAgICAgICAgICAgd2hpbGUgKCpuYW1lKSB7CisrICAgICAg ICAgICAgICAgIGlmICgoQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZIHx8IFB5U3RyaW5nX0dFVF9T SVpFKCoqbmFtZSkgPT0gUHlTdHJpbmdfR0VUX1NJWkUoa2V5KSkKKysgICAgICAgICAgICAgICAg ICAgICAgICAmJiBfUHlTdHJpbmdfRXEoKipuYW1lLCBrZXkpKSB7CisrICAgICAgICAgICAgICAg ICAgICB2YWx1ZXNbbmFtZS1hcmduYW1lc10gPSB2YWx1ZTsKKysgICAgICAgICAgICAgICAgICAg IGJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIG5hbWUrKzsKKysg ICAgICAgICAgICB9CisrICAgICAgICAgICAgaWYgKCpuYW1lKSBjb250aW51ZTsKKysgICAgICAg ICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgUHlPYmplY3QqKiogYXJnbmFtZSA9IGFyZ25h bWVzOworKyAgICAgICAgICAgICAgICB3aGlsZSAoYXJnbmFtZSAhPSBmaXJzdF9rd19hcmcpIHsK KysgICAgICAgICAgICAgICAgICAgIGlmICgoKiphcmduYW1lID09IGtleSkgfHwgKAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZIHx8IFB5U3Ry aW5nX0dFVF9TSVpFKCoqYXJnbmFtZSkgPT0gUHlTdHJpbmdfR0VUX1NJWkUoa2V5KSkKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICYmIF9QeVN0cmluZ19FcSgqKmFyZ25hbWUsIGtleSkp KSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgZ290byBhcmdfcGFzc2VkX3R3aWNlOworKyAg ICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgYXJnbmFtZSsrOworKyAg ICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgfSBlbHNlCisgICAgICAg ICAjZW5kaWYKKy0gICAgICAgIGlmIChsaWtlbHkoUHlFeGNlcHRpb25DbGFzc19DaGVjayh0KSkp IHsKKy0gICAgICAgICAgICBpZiAoX19QeXhfaW5uZXJfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRj aGVzMihleGNfdHlwZSwgTlVMTCwgdCkpIHJldHVybiAxOworKyAgICAgICAgaWYgKGxpa2VseShQ eVVuaWNvZGVfQ2hlY2soa2V5KSkpIHsKKysgICAgICAgICAgICB3aGlsZSAoKm5hbWUpIHsKKysg ICAgICAgICAgICAgICAgaW50IGNtcCA9ICgqKm5hbWUgPT0ga2V5KSA/IDAgOgorKyAgICAgICAg ICAgICAgICAjaWYgIUNZVEhPTl9DT01QSUxJTkdfSU5fUFlQWSAmJiBQWV9NQUpPUl9WRVJTSU9O ID49IDMKKysgICAgICAgICAgICAgICAgICAgIChfX1B5eF9QeVVuaWNvZGVfR0VUX0xFTkdUSCgq Km5hbWUpICE9IF9fUHl4X1B5VW5pY29kZV9HRVRfTEVOR1RIKGtleSkpID8gMSA6CisrICAgICAg ICAgICAgICAgICNlbmRpZgorKyAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmUo KipuYW1lLCBrZXkpOworKyAgICAgICAgICAgICAgICBpZiAoY21wIDwgMCAmJiB1bmxpa2VseShQ eUVycl9PY2N1cnJlZCgpKSkgZ290byBiYWQ7CisrICAgICAgICAgICAgICAgIGlmIChjbXAgPT0g MCkgeworKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzW25hbWUtYXJnbmFtZXNdID0gdmFsdWU7 CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgfQorKyAgICAg ICAgICAgICAgICBuYW1lKys7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGlmICgqbmFt ZSkgY29udGludWU7CisrICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgIFB5T2Jq ZWN0KioqIGFyZ25hbWUgPSBhcmduYW1lczsKKysgICAgICAgICAgICAgICAgd2hpbGUgKGFyZ25h bWUgIT0gZmlyc3Rfa3dfYXJnKSB7CisrICAgICAgICAgICAgICAgICAgICBpbnQgY21wID0gKCoq YXJnbmFtZSA9PSBrZXkpID8gMCA6CisrICAgICAgICAgICAgICAgICAgICAjaWYgIUNZVEhPTl9D T01QSUxJTkdfSU5fUFlQWSAmJiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgICAgICAgICAgICAg ICAgICAgICAgICAoX19QeXhfUHlVbmljb2RlX0dFVF9MRU5HVEgoKiphcmduYW1lKSAhPSBfX1B5 eF9QeVVuaWNvZGVfR0VUX0xFTkdUSChrZXkpKSA/IDEgOgorKyAgICAgICAgICAgICAgICAgICAg I2VuZGlmCisrICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmUoKiphcmdu YW1lLCBrZXkpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKGNtcCA8IDAgJiYgdW5saWtlbHko UHlFcnJfT2NjdXJyZWQoKSkpIGdvdG8gYmFkOworKyAgICAgICAgICAgICAgICAgICAgaWYgKGNt cCA9PSAwKSBnb3RvIGFyZ19wYXNzZWRfdHdpY2U7CisrICAgICAgICAgICAgICAgICAgICBhcmdu YW1lKys7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrICAgICAgICB9IGVs c2UKKysgICAgICAgICAgICBnb3RvIGludmFsaWRfa2V5d29yZF90eXBlOworKyAgICAgICAgaWYg KGt3ZHMyKSB7CisrICAgICAgICAgICAgaWYgKHVubGlrZWx5KFB5RGljdF9TZXRJdGVtKGt3ZHMy LCBrZXksIHZhbHVlKSkpIGdvdG8gYmFkOworICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAg ICBnb3RvIGludmFsaWRfa2V5d29yZDsKKyAgICAgICAgIH0KKyAgICAgfQorICAgICByZXR1cm4g MDsKKythcmdfcGFzc2VkX3R3aWNlOgorKyAgICBfX1B5eF9SYWlzZURvdWJsZUtleXdvcmRzRXJy b3IoZnVuY3Rpb25fbmFtZSwga2V5KTsKKysgICAgZ290byBiYWQ7CisraW52YWxpZF9rZXl3b3Jk X3R5cGU6CisrICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisrICAgICAgICAiJS4y MDBzKCkga2V5d29yZHMgbXVzdCBiZSBzdHJpbmdzIiwgZnVuY3Rpb25fbmFtZSk7CisrICAgIGdv dG8gYmFkOworK2ludmFsaWRfa2V5d29yZDoKKysgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVF cnJvciwKKysgICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAgICAgICAiJS4yMDBzKCkg Z290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudCAnJS4yMDBzJyIsCisrICAgICAgICBm dW5jdGlvbl9uYW1lLCBQeVN0cmluZ19Bc1N0cmluZyhrZXkpKTsKKysgICAgI2Vsc2UKKysgICAg ICAgICIlcygpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQgJyVVJyIsCisrICAg ICAgICBmdW5jdGlvbl9uYW1lLCBrZXkpOworKyAgICAjZW5kaWYKKytiYWQ6CisrICAgIHJldHVy biAtMTsKKyB9Cistc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X1B5RXJyX0dpdmVuRXhj ZXB0aW9uTWF0Y2hlcyhQeU9iamVjdCAqZXJyLCBQeU9iamVjdCogZXhjX3R5cGUpIHsKKy0gICAg aWYgKGxpa2VseShlcnIgPT0gZXhjX3R5cGUpKSByZXR1cm4gMTsKKy0gICAgaWYgKGxpa2VseShQ eUV4Y2VwdGlvbkNsYXNzX0NoZWNrKGVycikpKSB7CistICAgICAgICBpZiAobGlrZWx5KFB5RXhj ZXB0aW9uQ2xhc3NfQ2hlY2soZXhjX3R5cGUpKSkgeworLSAgICAgICAgICAgIHJldHVybiBfX1B5 eF9pbm5lcl9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMyKGVyciwgTlVMTCwgZXhjX3R5cGUp OworLSAgICAgICAgfSBlbHNlIGlmIChsaWtlbHkoUHlUdXBsZV9DaGVjayhleGNfdHlwZSkpKSB7 CistICAgICAgICAgICAgcmV0dXJuIF9fUHl4X1B5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlc1R1 cGxlKGVyciwgZXhjX3R5cGUpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgIH0KKy0gICAg fQorLSAgICByZXR1cm4gUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGVyciwgZXhjX3R5cGUp OworKworKy8qIFB5T2JqZWN0U2V0QXR0clN0ciAqLworKyNpZiBDWVRIT05fVVNFX1RZUEVfU0xP VFMKKytzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihQ eU9iamVjdCogb2JqLCBQeU9iamVjdCogYXR0cl9uYW1lLCBQeU9iamVjdCogdmFsdWUpIHsKKysg ICAgUHlUeXBlT2JqZWN0KiB0cCA9IFB5X1RZUEUob2JqKTsKKysgICAgaWYgKGxpa2VseSh0cC0+ dHBfc2V0YXR0cm8pKQorKyAgICAgICAgcmV0dXJuIHRwLT50cF9zZXRhdHRybyhvYmosIGF0dHJf bmFtZSwgdmFsdWUpOworKyNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworKyAgICBpZiAobGlrZWx5 KHRwLT50cF9zZXRhdHRyKSkKKysgICAgICAgIHJldHVybiB0cC0+dHBfc2V0YXR0cihvYmosIFB5 U3RyaW5nX0FTX1NUUklORyhhdHRyX25hbWUpLCB2YWx1ZSk7CisrI2VuZGlmCisrICAgIHJldHVy biBQeU9iamVjdF9TZXRBdHRyKG9iaiwgYXR0cl9uYW1lLCB2YWx1ZSk7CisgfQorLXN0YXRpYyBD WVRIT05fSU5MSU5FIGludCBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMyKFB5T2Jq ZWN0ICplcnIsIFB5T2JqZWN0ICpleGNfdHlwZTEsIFB5T2JqZWN0ICpleGNfdHlwZTIpIHsKKy0g ICAgYXNzZXJ0KFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2soZXhjX3R5cGUxKSk7CistICAgIGFzc2Vy dChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKGV4Y190eXBlMikpOworLSAgICBpZiAobGlrZWx5KGVy ciA9PSBleGNfdHlwZTEgfHwgZXJyID09IGV4Y190eXBlMikpIHJldHVybiAxOworLSAgICBpZiAo bGlrZWx5KFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2soZXJyKSkpIHsKKy0gICAgICAgIHJldHVybiBf X1B5eF9pbm5lcl9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMyKGVyciwgZXhjX3R5cGUxLCBl eGNfdHlwZTIpOworKyNlbmRpZgorKworKy8qIFB5SW50Qmlub3AgKi8KKysjaWYgIUNZVEhPTl9D T01QSUxJTkdfSU5fUFlQWQorK3N0YXRpYyBQeU9iamVjdCogX19QeXhfUHlJbnRfQWRkT2JqQyhQ eU9iamVjdCAqb3AxLCBQeU9iamVjdCAqb3AyLCBDWVRIT05fVU5VU0VEIGxvbmcgaW50dmFsLCBp bnQgaW5wbGFjZSwgaW50IHplcm9kaXZpc2lvbl9jaGVjaykgeworKyAgICAodm9pZClpbnBsYWNl OworKyAgICAodm9pZCl6ZXJvZGl2aXNpb25fY2hlY2s7CisrICAgICNpZiBQWV9NQUpPUl9WRVJT SU9OIDwgMworKyAgICBpZiAobGlrZWx5KFB5SW50X0NoZWNrRXhhY3Qob3AxKSkpIHsKKysgICAg ICAgIGNvbnN0IGxvbmcgYiA9IGludHZhbDsKKysgICAgICAgIGxvbmcgeDsKKysgICAgICAgIGxv bmcgYSA9IFB5SW50X0FTX0xPTkcob3AxKTsKKysgICAgICAgICAgICB4ID0gKGxvbmcpKCh1bnNp Z25lZCBsb25nKWEgKyBiKTsKKysgICAgICAgICAgICBpZiAobGlrZWx5KCh4XmEpID49IDAgfHwg KHheYikgPj0gMCkpCisrICAgICAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyh4KTsK KysgICAgICAgICAgICByZXR1cm4gUHlMb25nX1R5cGUudHBfYXNfbnVtYmVyLT5uYl9hZGQob3Ax LCBvcDIpOworICAgICB9CistICAgIHJldHVybiAoUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVz KGVyciwgZXhjX3R5cGUxKSB8fCBQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoZXJyLCBleGNf dHlwZTIpKTsKKy19CisrICAgICNlbmRpZgorKyAgICAjaWYgQ1lUSE9OX1VTRV9QWUxPTkdfSU5U RVJOQUxTCisrICAgIGlmIChsaWtlbHkoUHlMb25nX0NoZWNrRXhhY3Qob3AxKSkpIHsKKysgICAg ICAgIGNvbnN0IGxvbmcgYiA9IGludHZhbDsKKysgICAgICAgIGxvbmcgYSwgeDsKKysjaWZkZWYg SEFWRV9MT05HX0xPTkcKKysgICAgICAgIGNvbnN0IFBZX0xPTkdfTE9ORyBsbGIgPSBpbnR2YWw7 CisrICAgICAgICBQWV9MT05HX0xPTkcgbGxhLCBsbHg7CisrI2VuZGlmCisrICAgICAgICBjb25z dCBkaWdpdCogZGlnaXRzID0gKChQeUxvbmdPYmplY3QqKW9wMSktPm9iX2RpZ2l0OworKyAgICAg ICAgY29uc3QgUHlfc3NpemVfdCBzaXplID0gUHlfU0laRShvcDEpOworKyAgICAgICAgaWYgKGxp a2VseShfX1B5eF9zc3RfYWJzKHNpemUpIDw9IDEpKSB7CisrICAgICAgICAgICAgYSA9IGxpa2Vs eShzaXplKSA/IGRpZ2l0c1swXSA6IDA7CisrICAgICAgICAgICAgaWYgKHNpemUgPT0gLTEpIGEg PSAtYTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgc3dpdGNoIChzaXplKSB7Cisr ICAgICAgICAgICAgICAgIGNhc2UgLTI6CisrICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNp emVvZihsb25nKSAtIDEgPiAyICogUHlMb25nX1NISUZUKSB7CisrICAgICAgICAgICAgICAgICAg ICAgICAgYSA9IC0obG9uZykgKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwgUHlMb25n X1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOworKyAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgICAgICAgICAg ICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gMiAqIFB5TG9uZ19T SElGVCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IC0oUFlfTE9OR19MT05HKSAo KCgoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAo dW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1swXSkpOworKyAgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gbG9uZ19sb25nOworKyNlbmRpZgorKyAgICAgICAgICAgICAgICAgICAgfQorKyAg ICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgICAgICAgICBj YXNlIDI6CisrICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAtIDEgPiAy ICogUHlMb25nX1NISUZUKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChsb25nKSAo KCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVk IGxvbmcpZGlnaXRzWzBdKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrI2lm ZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBz aXplb2YoUFlfTE9OR19MT05HKSAtIDEgPiAyICogUHlMb25nX1NISUZUKSB7CisrICAgICAgICAg ICAgICAgICAgICAgICAgbGxhID0gKFBZX0xPTkdfTE9ORykgKCgoKCh1bnNpZ25lZCBQWV9MT05H X0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9O RylkaWdpdHNbMF0pKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGxvbmdfbG9uZzsK KysjZW5kaWYKKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIENZ VEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgICAgICAgICAgY2FzZSAtMzoKKysgICAgICAgICAg ICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+IDMgKiBQeUxvbmdfU0hJRlQpIHsK KysgICAgICAgICAgICAgICAgICAgICAgICBhID0gLShsb25nKSAoKCgoKCgodW5zaWduZWQgbG9u ZylkaWdpdHNbMl0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMV0p IDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKKysgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICAg ICAgICAgICAgICAgIH0gZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDMg KiBQeUxvbmdfU0hJRlQpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAtKFBZX0xP TkdfTE9ORykgKCgoKCgoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMl0pIDw8IFB5TG9u Z19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NI SUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7CisrICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBsb25nX2xvbmc7CisrI2VuZGlmCisrICAgICAgICAgICAgICAgICAg ICB9CisrICAgICAgICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICAg ICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcp IC0gMSA+IDMgKiBQeUxvbmdfU0hJRlQpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBhID0g KGxvbmcpICgoKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8 ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBs b25nKWRpZ2l0c1swXSkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyNpZmRl ZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICg4ICogc2l6 ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gMyAqIFB5TG9uZ19TSElGVCkgeworKyAgICAgICAgICAg ICAgICAgICAgICAgIGxsYSA9IChQWV9MT05HX0xPTkcpICgoKCgoKCh1bnNpZ25lZCBQWV9MT05H X0xPTkcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9O RylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRp Z2l0c1swXSkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOworKyNl bmRpZgorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOworKyAgICAgICAgICAgICAgICBjYXNlIC00OgorKyAgICAgICAgICAgICAg ICAgICAgaWYgKDggKiBzaXplb2YobG9uZykgLSAxID4gNCAqIFB5TG9uZ19TSElGVCkgeworKyAg ICAgICAgICAgICAgICAgICAgICAgIGEgPSAtKGxvbmcpICgoKCgoKCgoKHVuc2lnbmVkIGxvbmcp ZGlnaXRzWzNdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8 PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJ RlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzBdKSk7CisrICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKDggKiBzaXplb2YoUFlfTE9OR19MT05HKSAtIDEgPiA0ICogUHlMb25nX1NISUZU KSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgbGxhID0gLShQWV9MT05HX0xPTkcpICgoKCgo KCgoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbM10pIDw8IFB5TG9uZ19TSElGVCkgfCAo dW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNp Z25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVk IFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IGxvbmdfbG9uZzsKKyAjZW5kaWYKKy0KKy0vKiBFeHRUeXBlVGVzdCAqLworLXN0YXRpYyBDWVRI T05fSU5MSU5FIGludCBfX1B5eF9UeXBlVGVzdChQeU9iamVjdCAqb2JqLCBQeVR5cGVPYmplY3Qg KnR5cGUpIHsKKy0gICAgaWYgKHVubGlrZWx5KCF0eXBlKSkgeworLSAgICAgICAgUHlFcnJfU2V0 U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiTWlzc2luZyB0eXBlIG9iamVjdCIpOworLSAgICAg ICAgcmV0dXJuIDA7CistICAgIH0KKy0gICAgaWYgKGxpa2VseShfX1B5eF9UeXBlQ2hlY2sob2Jq LCB0eXBlKSkpCistICAgICAgICByZXR1cm4gMTsKKy0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5 cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0ICUuMjAwcyB0byAlLjIwMHMiLAorLSAgICAgICAgICAg ICAgICAgUHlfVFlQRShvYmopLT50cF9uYW1lLCB0eXBlLT50cF9uYW1lKTsKKy0gICAgcmV0dXJu IDA7CistfQorLQorLS8qIERpY3RHZXRJdGVtICovCistI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0g MyAmJiAhQ1lUSE9OX0NPTVBJTElOR19JTl9QWVBZCistc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9Q eURpY3RfR2V0SXRlbShQeU9iamVjdCAqZCwgUHlPYmplY3QqIGtleSkgeworLSAgICBQeU9iamVj dCAqdmFsdWU7CistICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoZCwga2V5KTsK Ky0gICAgaWYgKHVubGlrZWx5KCF2YWx1ZSkpIHsKKy0gICAgICAgIGlmICghUHlFcnJfT2NjdXJy ZWQoKSkgeworLSAgICAgICAgICAgIGlmICh1bmxpa2VseShQeVR1cGxlX0NoZWNrKGtleSkpKSB7 CistICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBhcmdzID0gUHlUdXBsZV9QYWNrKDEsIGtleSk7 CistICAgICAgICAgICAgICAgIGlmIChsaWtlbHkoYXJncykpIHsKKy0gICAgICAgICAgICAgICAg ICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwgYXJncyk7CistICAgICAgICAgICAg ICAgICAgICBQeV9ERUNSRUYoYXJncyk7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAg ICB9IGVsc2UgeworLSAgICAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJy b3IsIGtleSk7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBD WVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAg ICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+IDQgKiBQeUxvbmdfU0hJRlQpIHsK KysgICAgICAgICAgICAgICAgICAgICAgICBhID0gKGxvbmcpICgoKCgoKCgoKHVuc2lnbmVkIGxv bmcpZGlnaXRzWzNdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJd KSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdf U0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzBdKSk7CisrICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKDggKiBzaXplb2YoUFlfTE9OR19MT05HKSAtIDEgPiA0ICogUHlMb25nX1NI SUZUKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgbGxhID0gKFBZX0xPTkdfTE9ORykgKCgo KCgoKCgodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8 ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVu c2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWdu ZWQgUFlfTE9OR19MT05HKWRpZ2l0c1swXSkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gbG9uZ19sb25nOworKyNlbmRpZgorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAg ICAgICAgICAgICAgQ1lUSE9OX0ZBTExUSFJPVUdIOworKyAgICAgICAgICAgICAgICBkZWZhdWx0 OiByZXR1cm4gUHlMb25nX1R5cGUudHBfYXNfbnVtYmVyLT5uYl9hZGQob3AxLCBvcDIpOworICAg ICAgICAgICAgIH0KKyAgICAgICAgIH0KKy0gICAgICAgIHJldHVybiBOVUxMOworLSAgICB9Cist ICAgIFB5X0lOQ1JFRih2YWx1ZSk7CistICAgIHJldHVybiB2YWx1ZTsKKy19CisrICAgICAgICAg ICAgICAgIHggPSBhICsgYjsKKysgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHgp OworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgbG9uZ19sb25nOgorKyAgICAgICAg ICAgICAgICBsbHggPSBsbGEgKyBsbGI7CisrICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9t TG9uZ0xvbmcobGx4KTsKKyAjZW5kaWYKKy0KKy0vKiBSYWlzZVRvb01hbnlWYWx1ZXNUb1VucGFj ayAqLworLXN0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgX19QeXhfUmFpc2VUb29NYW55VmFsdWVz RXJyb3IoUHlfc3NpemVfdCBleHBlY3RlZCkgeworLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFs dWVFcnJvciwKKy0gICAgICAgICAgICAgICAgICJ0b28gbWFueSB2YWx1ZXMgdG8gdW5wYWNrIChl eHBlY3RlZCAlIiBDWVRIT05fRk9STUFUX1NTSVpFX1QgImQpIiwgZXhwZWN0ZWQpOworLX0KKy0K Ky0vKiBSYWlzZU5lZWRNb3JlVmFsdWVzVG9VbnBhY2sgKi8KKy1zdGF0aWMgQ1lUSE9OX0lOTElO RSB2b2lkIF9fUHl4X1JhaXNlTmVlZE1vcmVWYWx1ZXNFcnJvcihQeV9zc2l6ZV90IGluZGV4KSB7 CistICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorLSAgICAgICAgICAgICAgICAg Im5lZWQgbW9yZSB0aGFuICUiIENZVEhPTl9GT1JNQVRfU1NJWkVfVCAiZCB2YWx1ZSUuMXMgdG8g dW5wYWNrIiwKKy0gICAgICAgICAgICAgICAgIGluZGV4LCAoaW5kZXggPT0gMSkgPyAiIiA6ICJz Iik7CistfQorLQorLS8qIEl0ZXJGaW5pc2ggKi8KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQg X19QeXhfSXRlckZpbmlzaCh2b2lkKSB7CistI2lmIENZVEhPTl9GQVNUX1RIUkVBRF9TVEFURQor LSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBfX1B5eF9QeVRocmVhZFN0YXRlX0N1cnJlbnQ7 CistICAgIFB5T2JqZWN0KiBleGNfdHlwZSA9IHRzdGF0ZS0+Y3VyZXhjX3R5cGU7CistICAgIGlm ICh1bmxpa2VseShleGNfdHlwZSkpIHsKKy0gICAgICAgIGlmIChsaWtlbHkoX19QeXhfUHlFcnJf R2l2ZW5FeGNlcHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19TdG9wSXRlcmF0aW9uKSkpIHsK Ky0gICAgICAgICAgICBQeU9iamVjdCAqZXhjX3ZhbHVlLCAqZXhjX3RiOworLSAgICAgICAgICAg IGV4Y192YWx1ZSA9IHRzdGF0ZS0+Y3VyZXhjX3ZhbHVlOworLSAgICAgICAgICAgIGV4Y190YiA9 IHRzdGF0ZS0+Y3VyZXhjX3RyYWNlYmFjazsKKy0gICAgICAgICAgICB0c3RhdGUtPmN1cmV4Y190 eXBlID0gMDsKKy0gICAgICAgICAgICB0c3RhdGUtPmN1cmV4Y192YWx1ZSA9IDA7CistICAgICAg ICAgICAgdHN0YXRlLT5jdXJleGNfdHJhY2ViYWNrID0gMDsKKy0gICAgICAgICAgICBQeV9ERUNS RUYoZXhjX3R5cGUpOworLSAgICAgICAgICAgIFB5X1hERUNSRUYoZXhjX3ZhbHVlKTsKKy0gICAg ICAgICAgICBQeV9YREVDUkVGKGV4Y190Yik7CistICAgICAgICAgICAgcmV0dXJuIDA7CistICAg ICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHJldHVybiAtMTsKKy0gICAgICAgIH0KKy0gICAg fQorLSAgICByZXR1cm4gMDsKKy0jZWxzZQorLSAgICBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJy ZWQoKSkpIHsKKy0gICAgICAgIGlmIChsaWtlbHkoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4 Y19TdG9wSXRlcmF0aW9uKSkpIHsKKy0gICAgICAgICAgICBQeUVycl9DbGVhcigpOworLSAgICAg ICAgICAgIHJldHVybiAwOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICByZXR1cm4g LTE7CistICAgICAgICB9CisrICAgICAgICAKKysgICAgICAgIAorICAgICB9CistICAgIHJldHVy biAwOworLSNlbmRpZgorLX0KKy0KKy0vKiBVbnBhY2tJdGVtRW5kQ2hlY2sgKi8KKy1zdGF0aWMg aW50IF9fUHl4X0l0ZXJuZXh0VW5wYWNrRW5kQ2hlY2soUHlPYmplY3QgKnJldHZhbCwgUHlfc3Np emVfdCBleHBlY3RlZCkgeworLSAgICBpZiAodW5saWtlbHkocmV0dmFsKSkgeworLSAgICAgICAg UHlfREVDUkVGKHJldHZhbCk7CistICAgICAgICBfX1B5eF9SYWlzZVRvb01hbnlWYWx1ZXNFcnJv cihleHBlY3RlZCk7CistICAgICAgICByZXR1cm4gLTE7CistICAgIH0gZWxzZSB7CistICAgICAg ICByZXR1cm4gX19QeXhfSXRlckZpbmlzaCgpOworKyAgICAjZW5kaWYKKysgICAgaWYgKFB5Rmxv YXRfQ2hlY2tFeGFjdChvcDEpKSB7CisrICAgICAgICBjb25zdCBsb25nIGIgPSBpbnR2YWw7Cisr ICAgICAgICBkb3VibGUgYSA9IFB5RmxvYXRfQVNfRE9VQkxFKG9wMSk7CisrICAgICAgICAgICAg ZG91YmxlIHJlc3VsdDsKKysgICAgICAgICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJhZGQiLCBy ZXR1cm4gTlVMTCkKKysgICAgICAgICAgICByZXN1bHQgPSAoKGRvdWJsZSlhKSArIChkb3VibGUp YjsKKysgICAgICAgICAgICBQeUZQRV9FTkRfUFJPVEVDVChyZXN1bHQpCisrICAgICAgICAgICAg cmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShyZXN1bHQpOworICAgICB9CistICAgIHJldHVybiAw OworKyAgICByZXR1cm4gKGlucGxhY2UgPyBQeU51bWJlcl9JblBsYWNlQWRkIDogUHlOdW1iZXJf QWRkKShvcDEsIG9wMik7CisgfQorKyNlbmRpZgorIAorLS8qIEltcG9ydCAqLworLXN0YXRpYyBQ eU9iamVjdCAqX19QeXhfSW1wb3J0KFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqZnJvbV9saXN0 LCBpbnQgbGV2ZWwpIHsKKy0gICAgUHlPYmplY3QgKmVtcHR5X2xpc3QgPSAwOworLSAgICBQeU9i amVjdCAqbW9kdWxlID0gMDsKKy0gICAgUHlPYmplY3QgKmdsb2JhbF9kaWN0ID0gMDsKKy0gICAg UHlPYmplY3QgKmVtcHR5X2RpY3QgPSAwOworLSAgICBQeU9iamVjdCAqbGlzdDsKKysvKiBQeUlu dEJpbm9wICovCisrI2lmICFDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkKKytzdGF0aWMgUHlPYmpl Y3QqIF9fUHl4X1B5SW50X1N1YnRyYWN0T2JqQyhQeU9iamVjdCAqb3AxLCBQeU9iamVjdCAqb3Ay LCBDWVRIT05fVU5VU0VEIGxvbmcgaW50dmFsLCBpbnQgaW5wbGFjZSwgaW50IHplcm9kaXZpc2lv bl9jaGVjaykgeworKyAgICAodm9pZClpbnBsYWNlOworKyAgICAodm9pZCl6ZXJvZGl2aXNpb25f Y2hlY2s7CisgICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLSAgICBQeU9iamVjdCAqcHlf aW1wb3J0OworLSAgICBweV9pbXBvcnQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4 X2IsIF9fcHl4X25fc19pbXBvcnQpOworLSAgICBpZiAoIXB5X2ltcG9ydCkKKy0gICAgICAgIGdv dG8gYmFkOworLSAgICAjZW5kaWYKKy0gICAgaWYgKGZyb21fbGlzdCkKKy0gICAgICAgIGxpc3Qg PSBmcm9tX2xpc3Q7CistICAgIGVsc2UgeworLSAgICAgICAgZW1wdHlfbGlzdCA9IFB5TGlzdF9O ZXcoMCk7CistICAgICAgICBpZiAoIWVtcHR5X2xpc3QpCistICAgICAgICAgICAgZ290byBiYWQ7 CistICAgICAgICBsaXN0ID0gZW1wdHlfbGlzdDsKKysgICAgaWYgKGxpa2VseShQeUludF9DaGVj a0V4YWN0KG9wMSkpKSB7CisrICAgICAgICBjb25zdCBsb25nIGIgPSBpbnR2YWw7CisrICAgICAg ICBsb25nIHg7CisrICAgICAgICBsb25nIGEgPSBQeUludF9BU19MT05HKG9wMSk7CisrICAgICAg ICAgICAgeCA9IChsb25nKSgodW5zaWduZWQgbG9uZylhIC0gYik7CisrICAgICAgICAgICAgaWYg KGxpa2VseSgoeF5hKSA+PSAwIHx8ICh4Xn5iKSA+PSAwKSkKKysgICAgICAgICAgICAgICAgcmV0 dXJuIFB5SW50X0Zyb21Mb25nKHgpOworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfVHlwZS50 cF9hc19udW1iZXItPm5iX3N1YnRyYWN0KG9wMSwgb3AyKTsKKyAgICAgfQorLSAgICBnbG9iYWxf ZGljdCA9IFB5TW9kdWxlX0dldERpY3QoX19weXhfbSk7CistICAgIGlmICghZ2xvYmFsX2RpY3Qp CistICAgICAgICBnb3RvIGJhZDsKKy0gICAgZW1wdHlfZGljdCA9IFB5RGljdF9OZXcoKTsKKy0g ICAgaWYgKCFlbXB0eV9kaWN0KQorLSAgICAgICAgZ290byBiYWQ7CistICAgIHsKKy0gICAgICAg ICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKy0gICAgICAgIGlmIChsZXZlbCA9PSAtMSkgewor LSAgICAgICAgICAgIGlmICgoMSkgJiYgKHN0cmNocihfX1B5eF9NT0RVTEVfTkFNRSwgJy4nKSkp IHsKKy0gICAgICAgICAgICAgICAgbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWxP YmplY3QoCistICAgICAgICAgICAgICAgICAgICBuYW1lLCBnbG9iYWxfZGljdCwgZW1wdHlfZGlj dCwgbGlzdCwgMSk7CistICAgICAgICAgICAgICAgIGlmICghbW9kdWxlKSB7CistICAgICAgICAg ICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfSW1wb3J0RXJyb3Ip KQorLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFkOworLSAgICAgICAgICAgICAgICAg ICAgUHlFcnJfQ2xlYXIoKTsKKy0gICAgICAgICAgICAgICAgfQorKyAgICAjZW5kaWYKKysgICAg I2lmIENZVEhPTl9VU0VfUFlMT05HX0lOVEVSTkFMUworKyAgICBpZiAobGlrZWx5KFB5TG9uZ19D aGVja0V4YWN0KG9wMSkpKSB7CisrICAgICAgICBjb25zdCBsb25nIGIgPSBpbnR2YWw7CisrICAg ICAgICBsb25nIGEsIHg7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgICBjb25zdCBQ WV9MT05HX0xPTkcgbGxiID0gaW50dmFsOworKyAgICAgICAgUFlfTE9OR19MT05HIGxsYSwgbGx4 OworKyNlbmRpZgorKyAgICAgICAgY29uc3QgZGlnaXQqIGRpZ2l0cyA9ICgoUHlMb25nT2JqZWN0 KilvcDEpLT5vYl9kaWdpdDsKKysgICAgICAgIGNvbnN0IFB5X3NzaXplX3Qgc2l6ZSA9IFB5X1NJ WkUob3AxKTsKKysgICAgICAgIGlmIChsaWtlbHkoX19QeXhfc3N0X2FicyhzaXplKSA8PSAxKSkg eworKyAgICAgICAgICAgIGEgPSBsaWtlbHkoc2l6ZSkgPyBkaWdpdHNbMF0gOiAwOworKyAgICAg ICAgICAgIGlmIChzaXplID09IC0xKSBhID0gLWE7CisrICAgICAgICB9IGVsc2UgeworKyAgICAg ICAgICAgIHN3aXRjaCAoc2l6ZSkgeworKyAgICAgICAgICAgICAgICBjYXNlIC0yOgorKyAgICAg ICAgICAgICAgICAgICAgaWYgKDggKiBzaXplb2YobG9uZykgLSAxID4gMiAqIFB5TG9uZ19TSElG VCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGEgPSAtKGxvbmcpICgoKCgodW5zaWduZWQg bG9uZylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNb MF0pKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysjaWZkZWYgSEFWRV9MT05H X0xPTkcKKysgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05H X0xPTkcpIC0gMSA+IDIgKiBQeUxvbmdfU0hJRlQpIHsKKysgICAgICAgICAgICAgICAgICAgICAg ICBsbGEgPSAtKFBZX0xPTkdfTE9ORykgKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRz WzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMF0p KTsKKysgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGxvbmdfbG9uZzsKKysjZW5kaWYKKysg ICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIENZVEhPTl9GQUxMVEhS T1VHSDsKKysgICAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgICAgICAgICAgaWYg KDggKiBzaXplb2YobG9uZykgLSAxID4gMiAqIFB5TG9uZ19TSElGVCkgeworKyAgICAgICAgICAg ICAgICAgICAgICAgIGEgPSAobG9uZykgKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1sxXSkgPDwg UHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkpOworKyAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9ORykgLSAxID4gMiAqIFB5 TG9uZ19TSElGVCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGxsYSA9IChQWV9MT05HX0xP TkcpICgoKCgodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZU KSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7CisrICAgICAgICAgICAgICAg ICAgICAgICAgZ290byBsb25nX2xvbmc7CisrI2VuZGlmCisrICAgICAgICAgICAgICAgICAgICB9 CisrICAgICAgICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7CisrICAgICAgICAgICAg ICAgIGNhc2UgLTM6CisrICAgICAgICAgICAgICAgICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAt IDEgPiAzICogUHlMb25nX1NISUZUKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYSA9IC0o bG9uZykgKCgoKCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwg KHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxv bmcpZGlnaXRzWzBdKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrI2lmZGVm IEhBVkVfTE9OR19MT05HCisrICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXpl b2YoUFlfTE9OR19MT05HKSAtIDEgPiAzICogUHlMb25nX1NISUZUKSB7CisrICAgICAgICAgICAg ICAgICAgICAgICAgbGxhID0gLShQWV9MT05HX0xPTkcpICgoKCgoKCh1bnNpZ25lZCBQWV9MT05H X0xPTkcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9O RylkaWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRp Z2l0c1swXSkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOworKyNl bmRpZgorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgQ1lUSE9O X0ZBTExUSFJPVUdIOworKyAgICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgICAg ICAgICBpZiAoOCAqIHNpemVvZihsb25nKSAtIDEgPiAzICogUHlMb25nX1NISUZUKSB7CisrICAg ICAgICAgICAgICAgICAgICAgICAgYSA9IChsb25nKSAoKCgoKCgodW5zaWduZWQgbG9uZylkaWdp dHNbMl0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMV0pIDw8IFB5 TG9uZ19TSElGVCkgfCAodW5zaWduZWQgbG9uZylkaWdpdHNbMF0pKTsKKysgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSBpZiAoOCAqIHNpemVvZihQWV9MT05HX0xPTkcpIC0gMSA+IDMgKiBQeUxv bmdfU0hJRlQpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBsbGEgPSAoUFlfTE9OR19MT05H KSAoKCgoKCgodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZU KSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwg KHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMF0pKTsKKysgICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIGxvbmdfbG9uZzsKKysjZW5kaWYKKysgICAgICAgICAgICAgICAgICAgIH0KKysg ICAgICAgICAgICAgICAgICAgIENZVEhPTl9GQUxMVEhST1VHSDsKKysgICAgICAgICAgICAgICAg Y2FzZSAtNDoKKysgICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6ZW9mKGxvbmcpIC0gMSA+ IDQgKiBQeUxvbmdfU0hJRlQpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBhID0gLShsb25n KSAoKCgoKCgoKCh1bnNpZ25lZCBsb25nKWRpZ2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1 bnNpZ25lZCBsb25nKWRpZ2l0c1syXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25n KWRpZ2l0c1sxXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBsb25nKWRpZ2l0c1swXSkp OworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9O RworKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICg4ICogc2l6ZW9mKFBZX0xPTkdfTE9O RykgLSAxID4gNCAqIFB5TG9uZ19TSElGVCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGxs YSA9IC0oUFlfTE9OR19MT05HKSAoKCgoKCgoKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRz WzNdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylkaWdpdHNbMl0p IDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0c1sxXSkgPDwg UHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpZGlnaXRzWzBdKSk7CisrICAg ICAgICAgICAgICAgICAgICAgICAgZ290byBsb25nX2xvbmc7CisrI2VuZGlmCisrICAgICAgICAg ICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBDWVRIT05fRkFMTFRIUk9VR0g7Cisr ICAgICAgICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICAgICAgICAgIGlmICg4ICogc2l6 ZW9mKGxvbmcpIC0gMSA+IDQgKiBQeUxvbmdfU0hJRlQpIHsKKysgICAgICAgICAgICAgICAgICAg ICAgICBhID0gKGxvbmcpICgoKCgoKCgoKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzNdKSA8PCBQeUxv bmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxvbmcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwg KHVuc2lnbmVkIGxvbmcpZGlnaXRzWzFdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIGxv bmcpZGlnaXRzWzBdKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrI2lmZGVm IEhBVkVfTE9OR19MT05HCisrICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDggKiBzaXpl b2YoUFlfTE9OR19MT05HKSAtIDEgPiA0ICogUHlMb25nX1NISUZUKSB7CisrICAgICAgICAgICAg ICAgICAgICAgICAgbGxhID0gKFBZX0xPTkdfTE9ORykgKCgoKCgoKCgodW5zaWduZWQgUFlfTE9O R19MT05HKWRpZ2l0c1szXSkgPDwgUHlMb25nX1NISUZUKSB8ICh1bnNpZ25lZCBQWV9MT05HX0xP TkcpZGlnaXRzWzJdKSA8PCBQeUxvbmdfU0hJRlQpIHwgKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylk aWdpdHNbMV0pIDw8IFB5TG9uZ19TSElGVCkgfCAodW5zaWduZWQgUFlfTE9OR19MT05HKWRpZ2l0 c1swXSkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbG9uZ19sb25nOworKyNlbmRp ZgorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgQ1lUSE9OX0ZB TExUSFJPVUdIOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gUHlMb25nX1R5cGUu dHBfYXNfbnVtYmVyLT5uYl9zdWJ0cmFjdChvcDEsIG9wMik7CisgICAgICAgICAgICAgfQorLSAg ICAgICAgICAgIGxldmVsID0gMDsKKy0gICAgICAgIH0KKy0gICAgICAgICNlbmRpZgorLSAgICAg ICAgaWYgKCFtb2R1bGUpIHsKKy0gICAgICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMK Ky0gICAgICAgICAgICBQeU9iamVjdCAqcHlfbGV2ZWwgPSBQeUludF9Gcm9tTG9uZyhsZXZlbCk7 CistICAgICAgICAgICAgaWYgKCFweV9sZXZlbCkKKy0gICAgICAgICAgICAgICAgZ290byBiYWQ7 CistICAgICAgICAgICAgbW9kdWxlID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhweV9p bXBvcnQsCistICAgICAgICAgICAgICAgIG5hbWUsIGdsb2JhbF9kaWN0LCBlbXB0eV9kaWN0LCBs aXN0LCBweV9sZXZlbCwgKFB5T2JqZWN0ICopTlVMTCk7CistICAgICAgICAgICAgUHlfREVDUkVG KHB5X2xldmVsKTsKKy0gICAgICAgICAgICAjZWxzZQorLSAgICAgICAgICAgIG1vZHVsZSA9IFB5 SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsT2JqZWN0KAorLSAgICAgICAgICAgICAgICBuYW1lLCBn bG9iYWxfZGljdCwgZW1wdHlfZGljdCwgbGlzdCwgbGV2ZWwpOworLSAgICAgICAgICAgICNlbmRp ZgorICAgICAgICAgfQorLSAgICB9CistYmFkOgorLSAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8 IDMKKy0gICAgUHlfWERFQ1JFRihweV9pbXBvcnQpOworLSAgICAjZW5kaWYKKy0gICAgUHlfWERF Q1JFRihlbXB0eV9saXN0KTsKKy0gICAgUHlfWERFQ1JFRihlbXB0eV9kaWN0KTsKKy0gICAgcmV0 dXJuIG1vZHVsZTsKKy19CistCistLyogSW1wb3J0RnJvbSAqLworLXN0YXRpYyBQeU9iamVjdCog X19QeXhfSW1wb3J0RnJvbShQeU9iamVjdCogbW9kdWxlLCBQeU9iamVjdCogbmFtZSkgeworLSAg ICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG1vZHVsZSwgbmFt ZSk7CistICAgIGlmICh1bmxpa2VseSghdmFsdWUpICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMo UHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CistICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW1w b3J0RXJyb3IsCistICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKy0gICAgICAgICAg ICAiY2Fubm90IGltcG9ydCBuYW1lICUuMjMwcyIsIFB5U3RyaW5nX0FTX1NUUklORyhuYW1lKSk7 CistICAgICAgICAjZWxzZQorLSAgICAgICAgICAgICJjYW5ub3QgaW1wb3J0IG5hbWUgJVMiLCBu YW1lKTsKKy0gICAgICAgICNlbmRpZgorLSAgICB9CistICAgIHJldHVybiB2YWx1ZTsKKy19Cist CistLyogSGFzQXR0ciAqLworLXN0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9IYXNBdHRy KFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqbikgeworLSAgICBQeU9iamVjdCAqcjsKKy0gICAgaWYg KHVubGlrZWx5KCFfX1B5eF9QeUJhc2VTdHJpbmdfQ2hlY2sobikpKSB7CistICAgICAgICBQeUVy cl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorLSAgICAgICAgICAgICAgICAgICAgICAgICJo YXNhdHRyKCk6IGF0dHJpYnV0ZSBuYW1lIG11c3QgYmUgc3RyaW5nIik7CistICAgICAgICByZXR1 cm4gLTE7CistICAgIH0KKy0gICAgciA9IF9fUHl4X0dldEF0dHIobywgbik7CistICAgIGlmICh1 bmxpa2VseSghcikpIHsKKy0gICAgICAgIFB5RXJyX0NsZWFyKCk7CistICAgICAgICByZXR1cm4g MDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIFB5X0RFQ1JFRihyKTsKKy0gICAgICAgIHJldHVy biAxOworLSAgICB9CistfQorLQorLS8qIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyTm9EaWN0ICov CistI2lmIENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09LVVAg JiYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDcwMDAwCistc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9S YWlzZUdlbmVyaWNHZXRBdHRyaWJ1dGVFcnJvcihQeVR5cGVPYmplY3QgKnRwLCBQeU9iamVjdCAq YXR0cl9uYW1lKSB7CistICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKKy0j aWYgUFlfTUFKT1JfVkVSU0lPTiA+PSAzCistICAgICAgICAgICAgICAgICAiJyUuNTBzJyBvYmpl Y3QgaGFzIG5vIGF0dHJpYnV0ZSAnJVUnIiwKKy0gICAgICAgICAgICAgICAgIHRwLT50cF9uYW1l LCBhdHRyX25hbWUpOworLSNlbHNlCistICAgICAgICAgICAgICAgICAiJyUuNTBzJyBvYmplY3Qg aGFzIG5vIGF0dHJpYnV0ZSAnJS40MDBzJyIsCistICAgICAgICAgICAgICAgICB0cC0+dHBfbmFt ZSwgUHlTdHJpbmdfQVNfU1RSSU5HKGF0dHJfbmFtZSkpOworKyAgICAgICAgICAgICAgICB4ID0g YSAtIGI7CisrICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh4KTsKKysjaWZkZWYg SEFWRV9MT05HX0xPTkcKKysgICAgICAgIGxvbmdfbG9uZzoKKysgICAgICAgICAgICAgICAgbGx4 ID0gbGxhIC0gbGxiOworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKGxs eCk7CisgI2VuZGlmCistICAgIHJldHVybiBOVUxMOworLX0KKy1zdGF0aWMgQ1lUSE9OX0lOTElO RSBQeU9iamVjdCogX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHJOb0RpY3QoUHlPYmplY3Qq IG9iaiwgUHlPYmplY3QqIGF0dHJfbmFtZSkgeworLSAgICBQeU9iamVjdCAqZGVzY3I7CistICAg IFB5VHlwZU9iamVjdCAqdHAgPSBQeV9UWVBFKG9iaik7CistICAgIGlmICh1bmxpa2VseSghUHlT dHJpbmdfQ2hlY2soYXR0cl9uYW1lKSkpIHsKKy0gICAgICAgIHJldHVybiBQeU9iamVjdF9HZW5l cmljR2V0QXR0cihvYmosIGF0dHJfbmFtZSk7CistICAgIH0KKy0gICAgYXNzZXJ0KCF0cC0+dHBf ZGljdG9mZnNldCk7CistICAgIGRlc2NyID0gX1B5VHlwZV9Mb29rdXAodHAsIGF0dHJfbmFtZSk7 CistICAgIGlmICh1bmxpa2VseSghZGVzY3IpKSB7CistICAgICAgICByZXR1cm4gX19QeXhfUmFp c2VHZW5lcmljR2V0QXR0cmlidXRlRXJyb3IodHAsIGF0dHJfbmFtZSk7CisrICAgICAgICAKKysg ICAgICAgIAorICAgICB9CistICAgIFB5X0lOQ1JFRihkZXNjcik7CistICAgICNpZiBQWV9NQUpP Ul9WRVJTSU9OIDwgMworLSAgICBpZiAobGlrZWx5KFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUo ZGVzY3IpLCBQeV9UUEZMQUdTX0hBVkVfQ0xBU1MpKSkKKyAgICAgI2VuZGlmCistICAgIHsKKy0g ICAgICAgIGRlc2NyZ2V0ZnVuYyBmID0gUHlfVFlQRShkZXNjciktPnRwX2Rlc2NyX2dldDsKKy0g ICAgICAgIGlmICh1bmxpa2VseShmKSkgeworLSAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBm KGRlc2NyLCBvYmosIChQeU9iamVjdCAqKXRwKTsKKy0gICAgICAgICAgICBQeV9ERUNSRUYoZGVz Y3IpOworLSAgICAgICAgICAgIHJldHVybiByZXM7CistICAgICAgICB9CisrICAgIGlmIChQeUZs b2F0X0NoZWNrRXhhY3Qob3AxKSkgeworKyAgICAgICAgY29uc3QgbG9uZyBiID0gaW50dmFsOwor KyAgICAgICAgZG91YmxlIGEgPSBQeUZsb2F0X0FTX0RPVUJMRShvcDEpOworKyAgICAgICAgICAg IGRvdWJsZSByZXN1bHQ7CisrICAgICAgICAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgic3VidHJh Y3QiLCByZXR1cm4gTlVMTCkKKysgICAgICAgICAgICByZXN1bHQgPSAoKGRvdWJsZSlhKSAtIChk b3VibGUpYjsKKysgICAgICAgICAgICBQeUZQRV9FTkRfUFJPVEVDVChyZXN1bHQpCisrICAgICAg ICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShyZXN1bHQpOworICAgICB9CistICAgIHJl dHVybiBkZXNjcjsKKysgICAgcmV0dXJuIChpbnBsYWNlID8gUHlOdW1iZXJfSW5QbGFjZVN1YnRy YWN0IDogUHlOdW1iZXJfU3VidHJhY3QpKG9wMSwgb3AyKTsKKyB9CisgI2VuZGlmCisgCistLyog UHlPYmplY3RfR2VuZXJpY0dldEF0dHIgKi8KKy0jaWYgQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYm IENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwNzAwMDAK Ky1zdGF0aWMgUHlPYmplY3QqIF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKFB5T2JqZWN0 KiBvYmosIFB5T2JqZWN0KiBhdHRyX25hbWUpIHsKKy0gICAgaWYgKHVubGlrZWx5KFB5X1RZUEUo b2JqKS0+dHBfZGljdG9mZnNldCkpIHsKKy0gICAgICAgIHJldHVybiBQeU9iamVjdF9HZW5lcmlj R2V0QXR0cihvYmosIGF0dHJfbmFtZSk7CistICAgIH0KKy0gICAgcmV0dXJuIF9fUHl4X1B5T2Jq ZWN0X0dlbmVyaWNHZXRBdHRyTm9EaWN0KG9iaiwgYXR0cl9uYW1lKTsKKy19CisrLyogV3JpdGVV bnJhaXNhYmxlRXhjZXB0aW9uICovCisrc3RhdGljIHZvaWQgX19QeXhfV3JpdGVVbnJhaXNhYmxl KGNvbnN0IGNoYXIgKm5hbWUsIENZVEhPTl9VTlVTRUQgaW50IGNsaW5lbm8sCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENZVEhPTl9VTlVTRUQgaW50IGxpbmVubywgQ1lUSE9O X1VOVVNFRCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGZ1bGxfdHJhY2ViYWNrLCBDWVRIT05fVU5VU0VEIGludCBub2dpbCkgewor KyAgICBQeU9iamVjdCAqb2xkX2V4YywgKm9sZF92YWwsICpvbGRfdGI7CisrICAgIFB5T2JqZWN0 ICpjdHg7CisrICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQorKyNpZmRlZiBXSVRIX1RI UkVBRAorKyAgICBQeUdJTFN0YXRlX1NUQVRFIHN0YXRlOworKyAgICBpZiAobm9naWwpCisrICAg ICAgICBzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisrI2lmZGVmIF9NU0NfVkVSCisrICAg IGVsc2Ugc3RhdGUgPSAoUHlHSUxTdGF0ZV9TVEFURSktMTsKKyAjZW5kaWYKKy0KKy0vKiBTZXRW VGFibGUgKi8KKy1zdGF0aWMgaW50IF9fUHl4X1NldFZ0YWJsZShQeU9iamVjdCAqZGljdCwgdm9p ZCAqdnRhYmxlKSB7CistI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDIwNzAwMDAKKy0gICAgUHlP YmplY3QgKm9iID0gUHlDYXBzdWxlX05ldyh2dGFibGUsIDAsIDApOworLSNlbHNlCistICAgIFB5 T2JqZWN0ICpvYiA9IFB5Q09iamVjdF9Gcm9tVm9pZFB0cih2dGFibGUsIDApOworICNlbmRpZgor LSAgICBpZiAoIW9iKQorLSAgICAgICAgZ290byBiYWQ7CistICAgIGlmIChQeURpY3RfU2V0SXRl bShkaWN0LCBfX3B5eF9uX3NfcHl4X3Z0YWJsZSwgb2IpIDwgMCkKKy0gICAgICAgIGdvdG8gYmFk OworLSAgICBQeV9ERUNSRUYob2IpOworLSAgICByZXR1cm4gMDsKKy1iYWQ6CistICAgIFB5X1hE RUNSRUYob2IpOworLSAgICByZXR1cm4gLTE7CistfQorLQorLS8qIFB5T2JqZWN0R2V0QXR0clN0 ck5vRXJyb3IgKi8KKy1zdGF0aWMgdm9pZCBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyX0NsZWFy QXR0cmlidXRlRXJyb3Iodm9pZCkgeworLSAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUK KyAgICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KKy0gICAgaWYgKGxpa2VseShfX1B5eF9Q eUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkpCistICAgICAgICBf X1B5eF9QeUVycl9DbGVhcigpOworLX0KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCog X19QeXhfUHlPYmplY3RfR2V0QXR0clN0ck5vRXJyb3IoUHlPYmplY3QqIG9iaiwgUHlPYmplY3Qq IGF0dHJfbmFtZSkgeworLSAgICBQeU9iamVjdCAqcmVzdWx0OworLSNpZiBDWVRIT05fQ09NUElM SU5HX0lOX0NQWVRIT04gJiYgQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIFBZX1ZFUlNJT05fSEVY ID49IDB4MDMwNzAwQjEKKy0gICAgUHlUeXBlT2JqZWN0KiB0cCA9IFB5X1RZUEUob2JqKTsKKy0g ICAgaWYgKGxpa2VseSh0cC0+dHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIp KSB7CistICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyV2l0aERpY3Qob2Jq LCBhdHRyX25hbWUsIE5VTEwsIDEpOworKyAgICBfX1B5eF9FcnJGZXRjaCgmb2xkX2V4YywgJm9s ZF92YWwsICZvbGRfdGIpOworKyAgICBpZiAoZnVsbF90cmFjZWJhY2spIHsKKysgICAgICAgIFB5 X1hJTkNSRUYob2xkX2V4Yyk7CisrICAgICAgICBQeV9YSU5DUkVGKG9sZF92YWwpOworKyAgICAg ICAgUHlfWElOQ1JFRihvbGRfdGIpOworKyAgICAgICAgX19QeXhfRXJyUmVzdG9yZShvbGRfZXhj LCBvbGRfdmFsLCBvbGRfdGIpOworKyAgICAgICAgUHlFcnJfUHJpbnRFeCgxKTsKKyAgICAgfQor LSNlbmRpZgorLSAgICByZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG9iaiwgYXR0 cl9uYW1lKTsKKy0gICAgaWYgKHVubGlrZWx5KCFyZXN1bHQpKSB7CistICAgICAgICBfX1B5eF9Q eU9iamVjdF9HZXRBdHRyU3RyX0NsZWFyQXR0cmlidXRlRXJyb3IoKTsKKysgICAgI2lmIFBZX01B Sk9SX1ZFUlNJT04gPCAzCisrICAgIGN0eCA9IFB5U3RyaW5nX0Zyb21TdHJpbmcobmFtZSk7Cisr ICAgICNlbHNlCisrICAgIGN0eCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG5hbWUpOworKyAgICAj ZW5kaWYKKysgICAgX19QeXhfRXJyUmVzdG9yZShvbGRfZXhjLCBvbGRfdmFsLCBvbGRfdGIpOwor KyAgICBpZiAoIWN0eCkgeworKyAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKFB5X05vbmUp OworKyAgICB9IGVsc2UgeworKyAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGN0eCk7Cisr ICAgICAgICBQeV9ERUNSRUYoY3R4KTsKKyAgICAgfQorLSAgICByZXR1cm4gcmVzdWx0OworKyNp ZmRlZiBXSVRIX1RIUkVBRAorKyAgICBpZiAobm9naWwpCisrICAgICAgICBQeUdJTFN0YXRlX1Jl bGVhc2Uoc3RhdGUpOworKyNlbmRpZgorIH0KKyAKKy0vKiBTZXR1cFJlZHVjZSAqLworLXN0YXRp YyBpbnQgX19QeXhfc2V0dXBfcmVkdWNlX2lzX25hbWVkKFB5T2JqZWN0KiBtZXRoLCBQeU9iamVj dCogbmFtZSkgeworLSAgaW50IHJldDsKKy0gIFB5T2JqZWN0ICpuYW1lX2F0dHI7CistICBuYW1l X2F0dHIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG1ldGgsIF9fcHl4X25fc19uYW1lKTsK Ky0gIGlmIChsaWtlbHkobmFtZV9hdHRyKSkgeworLSAgICAgIHJldCA9IFB5T2JqZWN0X1JpY2hD b21wYXJlQm9vbChuYW1lX2F0dHIsIG5hbWUsIFB5X0VRKTsKKy0gIH0gZWxzZSB7CistICAgICAg cmV0ID0gLTE7CistICB9CistICBpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKy0gICAgICBQeUVy cl9DbGVhcigpOworLSAgICAgIHJldCA9IDA7CistICB9CistICBQeV9YREVDUkVGKG5hbWVfYXR0 cik7CistICByZXR1cm4gcmV0OworKy8qIFN3YXBFeGNlcHRpb24gKi8KKysjaWYgQ1lUSE9OX0ZB U1RfVEhSRUFEX1NUQVRFCisrc3RhdGljIENZVEhPTl9JTkxJTkUgdm9pZCBfX1B5eF9fRXhjZXB0 aW9uU3dhcChQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5T2JqZWN0ICoqdHlwZSwgUHlPYmplY3Qg Kip2YWx1ZSwgUHlPYmplY3QgKip0YikgeworKyAgICBQeU9iamVjdCAqdG1wX3R5cGUsICp0bXBf dmFsdWUsICp0bXBfdGI7CisrICAgICNpZiBDWVRIT05fVVNFX0VYQ19JTkZPX1NUQUNLCisrICAg IF9QeUVycl9TdGFja0l0ZW0gKmV4Y19pbmZvID0gdHN0YXRlLT5leGNfaW5mbzsKKysgICAgdG1w X3R5cGUgPSBleGNfaW5mby0+ZXhjX3R5cGU7CisrICAgIHRtcF92YWx1ZSA9IGV4Y19pbmZvLT5l eGNfdmFsdWU7CisrICAgIHRtcF90YiA9IGV4Y19pbmZvLT5leGNfdHJhY2ViYWNrOworKyAgICBl eGNfaW5mby0+ZXhjX3R5cGUgPSAqdHlwZTsKKysgICAgZXhjX2luZm8tPmV4Y192YWx1ZSA9ICp2 YWx1ZTsKKysgICAgZXhjX2luZm8tPmV4Y190cmFjZWJhY2sgPSAqdGI7CisrICAgICNlbHNlCisr ICAgIHRtcF90eXBlID0gdHN0YXRlLT5leGNfdHlwZTsKKysgICAgdG1wX3ZhbHVlID0gdHN0YXRl LT5leGNfdmFsdWU7CisrICAgIHRtcF90YiA9IHRzdGF0ZS0+ZXhjX3RyYWNlYmFjazsKKysgICAg dHN0YXRlLT5leGNfdHlwZSA9ICp0eXBlOworKyAgICB0c3RhdGUtPmV4Y192YWx1ZSA9ICp2YWx1 ZTsKKysgICAgdHN0YXRlLT5leGNfdHJhY2ViYWNrID0gKnRiOworKyAgICAjZW5kaWYKKysgICAg KnR5cGUgPSB0bXBfdHlwZTsKKysgICAgKnZhbHVlID0gdG1wX3ZhbHVlOworKyAgICAqdGIgPSB0 bXBfdGI7CisgfQorLXN0YXRpYyBpbnQgX19QeXhfc2V0dXBfcmVkdWNlKFB5T2JqZWN0KiB0eXBl X29iaikgeworLSAgICBpbnQgcmV0ID0gMDsKKy0gICAgUHlPYmplY3QgKm9iamVjdF9yZWR1Y2Ug PSBOVUxMOworLSAgICBQeU9iamVjdCAqb2JqZWN0X3JlZHVjZV9leCA9IE5VTEw7CistICAgIFB5 T2JqZWN0ICpyZWR1Y2UgPSBOVUxMOworLSAgICBQeU9iamVjdCAqcmVkdWNlX2V4ID0gTlVMTDsK Ky0gICAgUHlPYmplY3QgKnJlZHVjZV9jeXRob24gPSBOVUxMOworLSAgICBQeU9iamVjdCAqc2V0 c3RhdGUgPSBOVUxMOworLSAgICBQeU9iamVjdCAqc2V0c3RhdGVfY3l0aG9uID0gTlVMTDsKKy0j aWYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQCistICAgIGlmIChfUHlUeXBlX0xvb2t1cCgoUHlU eXBlT2JqZWN0Kil0eXBlX29iaiwgX19weXhfbl9zX2dldHN0YXRlKSkgZ290byBfX1BZWF9HT09E OworLSNlbHNlCistICAgIGlmIChQeU9iamVjdF9IYXNBdHRyKHR5cGVfb2JqLCBfX3B5eF9uX3Nf Z2V0c3RhdGUpKSBnb3RvIF9fUFlYX0dPT0Q7CistI2VuZGlmCistI2lmIENZVEhPTl9VU0VfUFlU WVBFX0xPT0tVUAorLSAgICBvYmplY3RfcmVkdWNlX2V4ID0gX1B5VHlwZV9Mb29rdXAoJlB5QmFz ZU9iamVjdF9UeXBlLCBfX3B5eF9uX3NfcmVkdWNlX2V4KTsgaWYgKCFvYmplY3RfcmVkdWNlX2V4 KSBnb3RvIF9fUFlYX0JBRDsKKy0jZWxzZQorLSAgICBvYmplY3RfcmVkdWNlX2V4ID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cigoUHlPYmplY3QqKSZQeUJhc2VPYmplY3RfVHlwZSwgX19weXhf bl9zX3JlZHVjZV9leCk7IGlmICghb2JqZWN0X3JlZHVjZV9leCkgZ290byBfX1BZWF9CQUQ7Cist I2VuZGlmCistICAgIHJlZHVjZV9leCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIodHlwZV9v YmosIF9fcHl4X25fc19yZWR1Y2VfZXgpOyBpZiAodW5saWtlbHkoIXJlZHVjZV9leCkpIGdvdG8g X19QWVhfQkFEOworLSAgICBpZiAocmVkdWNlX2V4ID09IG9iamVjdF9yZWR1Y2VfZXgpIHsKKy0j aWYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQCistICAgICAgICBvYmplY3RfcmVkdWNlID0gX1B5 VHlwZV9Mb29rdXAoJlB5QmFzZU9iamVjdF9UeXBlLCBfX3B5eF9uX3NfcmVkdWNlKTsgaWYgKCFv YmplY3RfcmVkdWNlKSBnb3RvIF9fUFlYX0JBRDsKKyAjZWxzZQorLSAgICAgICAgb2JqZWN0X3Jl ZHVjZSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKFB5T2JqZWN0KikmUHlCYXNlT2JqZWN0 X1R5cGUsIF9fcHl4X25fc19yZWR1Y2UpOyBpZiAoIW9iamVjdF9yZWR1Y2UpIGdvdG8gX19QWVhf QkFEOworK3N0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgX19QeXhfRXhjZXB0aW9uU3dhcChQeU9i amVjdCAqKnR5cGUsIFB5T2JqZWN0ICoqdmFsdWUsIFB5T2JqZWN0ICoqdGIpIHsKKysgICAgUHlP YmplY3QgKnRtcF90eXBlLCAqdG1wX3ZhbHVlLCAqdG1wX3RiOworKyAgICBQeUVycl9HZXRFeGNJ bmZvKCZ0bXBfdHlwZSwgJnRtcF92YWx1ZSwgJnRtcF90Yik7CisrICAgIFB5RXJyX1NldEV4Y0lu Zm8oKnR5cGUsICp2YWx1ZSwgKnRiKTsKKysgICAgKnR5cGUgPSB0bXBfdHlwZTsKKysgICAgKnZh bHVlID0gdG1wX3ZhbHVlOworKyAgICAqdGIgPSB0bXBfdGI7CisrfQorICNlbmRpZgorLSAgICAg ICAgcmVkdWNlID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cih0eXBlX29iaiwgX19weXhfbl9z X3JlZHVjZSk7IGlmICh1bmxpa2VseSghcmVkdWNlKSkgZ290byBfX1BZWF9CQUQ7CistICAgICAg ICBpZiAocmVkdWNlID09IG9iamVjdF9yZWR1Y2UgfHwgX19QeXhfc2V0dXBfcmVkdWNlX2lzX25h bWVkKHJlZHVjZSwgX19weXhfbl9zX3JlZHVjZV9jeXRob24pKSB7CistICAgICAgICAgICAgcmVk dWNlX2N5dGhvbiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHJOb0Vycm9yKHR5cGVfb2JqLCBf X3B5eF9uX3NfcmVkdWNlX2N5dGhvbik7CistICAgICAgICAgICAgaWYgKGxpa2VseShyZWR1Y2Vf Y3l0aG9uKSkgeworLSAgICAgICAgICAgICAgICByZXQgPSBQeURpY3RfU2V0SXRlbSgoKFB5VHlw ZU9iamVjdCopdHlwZV9vYmopLT50cF9kaWN0LCBfX3B5eF9uX3NfcmVkdWNlLCByZWR1Y2VfY3l0 aG9uKTsgaWYgKHVubGlrZWx5KHJldCA8IDApKSBnb3RvIF9fUFlYX0JBRDsKKy0gICAgICAgICAg ICAgICAgcmV0ID0gUHlEaWN0X0RlbEl0ZW0oKChQeVR5cGVPYmplY3QqKXR5cGVfb2JqKS0+dHBf ZGljdCwgX19weXhfbl9zX3JlZHVjZV9jeXRob24pOyBpZiAodW5saWtlbHkocmV0IDwgMCkpIGdv dG8gX19QWVhfQkFEOworLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmVkdWNlID09IG9iamVjdF9y ZWR1Y2UgfHwgUHlFcnJfT2NjdXJyZWQoKSkgeworLSAgICAgICAgICAgICAgICBnb3RvIF9fUFlY X0JBRDsKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAgc2V0c3RhdGUgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKHR5cGVfb2JqLCBfX3B5eF9uX3Nfc2V0c3RhdGUpOworLSAgICAgICAg ICAgIGlmICghc2V0c3RhdGUpIFB5RXJyX0NsZWFyKCk7CistICAgICAgICAgICAgaWYgKCFzZXRz dGF0ZSB8fCBfX1B5eF9zZXR1cF9yZWR1Y2VfaXNfbmFtZWQoc2V0c3RhdGUsIF9fcHl4X25fc19z ZXRzdGF0ZV9jeXRob24pKSB7CistICAgICAgICAgICAgICAgIHNldHN0YXRlX2N5dGhvbiA9IF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHJOb0Vycm9yKHR5cGVfb2JqLCBfX3B5eF9uX3Nfc2V0c3Rh dGVfY3l0aG9uKTsKKy0gICAgICAgICAgICAgICAgaWYgKGxpa2VseShzZXRzdGF0ZV9jeXRob24p KSB7CistICAgICAgICAgICAgICAgICAgICByZXQgPSBQeURpY3RfU2V0SXRlbSgoKFB5VHlwZU9i amVjdCopdHlwZV9vYmopLT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0c3RhdGUsIHNldHN0YXRlX2N5 dGhvbik7IGlmICh1bmxpa2VseShyZXQgPCAwKSkgZ290byBfX1BZWF9CQUQ7CistICAgICAgICAg ICAgICAgICAgICByZXQgPSBQeURpY3RfRGVsSXRlbSgoKFB5VHlwZU9iamVjdCopdHlwZV9vYmop LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0c3RhdGVfY3l0aG9uKTsgaWYgKHVubGlrZWx5KHJldCA8 IDApKSBnb3RvIF9fUFlYX0JBRDsKKy0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2V0c3Rh dGUgfHwgUHlFcnJfT2NjdXJyZWQoKSkgeworLSAgICAgICAgICAgICAgICAgICAgZ290byBfX1BZ WF9CQUQ7CisrCisrLyogU2V0SXRlbUludCAqLworK3N0YXRpYyBpbnQgX19QeXhfU2V0SXRlbUlu dF9HZW5lcmljKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqaiwgUHlPYmplY3QgKnYpIHsKKysgICAg aW50IHI7CisrICAgIGlmICghaikgcmV0dXJuIC0xOworKyAgICByID0gUHlPYmplY3RfU2V0SXRl bShvLCBqLCB2KTsKKysgICAgUHlfREVDUkVGKGopOworKyAgICByZXR1cm4gcjsKKyt9Cisrc3Rh dGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X1NldEl0ZW1JbnRfRmFzdChQeU9iamVjdCAqbywg UHlfc3NpemVfdCBpLCBQeU9iamVjdCAqdiwgaW50IGlzX2xpc3QsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDWVRIT05fTkNQX1VOVVNFRCBpbnQgd3Jh cGFyb3VuZCwgQ1lUSE9OX05DUF9VTlVTRUQgaW50IGJvdW5kc2NoZWNrKSB7CisrI2lmIENZVEhP Tl9BU1NVTUVfU0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTICYmIENZ VEhPTl9VU0VfVFlQRV9TTE9UUworKyAgICBpZiAoaXNfbGlzdCB8fCBQeUxpc3RfQ2hlY2tFeGFj dChvKSkgeworKyAgICAgICAgUHlfc3NpemVfdCBuID0gKCF3cmFwYXJvdW5kKSA/IGkgOiAoKGxp a2VseShpID49IDApKSA/IGkgOiBpICsgUHlMaXN0X0dFVF9TSVpFKG8pKTsKKysgICAgICAgIGlm ICgoIWJvdW5kc2NoZWNrKSB8fCBsaWtlbHkoX19QeXhfaXNfdmFsaWRfaW5kZXgobiwgUHlMaXN0 X0dFVF9TSVpFKG8pKSkpIHsKKysgICAgICAgICAgICBQeU9iamVjdCogb2xkID0gUHlMaXN0X0dF VF9JVEVNKG8sIG4pOworKyAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKKysgICAgICAgICAgICBQ eUxpc3RfU0VUX0lURU0obywgbiwgdik7CisrICAgICAgICAgICAgUHlfREVDUkVGKG9sZCk7Cisr ICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAg ICBQeVNlcXVlbmNlTWV0aG9kcyAqbSA9IFB5X1RZUEUobyktPnRwX2FzX3NlcXVlbmNlOworKyAg ICAgICAgaWYgKGxpa2VseShtICYmIG0tPnNxX2Fzc19pdGVtKSkgeworKyAgICAgICAgICAgIGlm ICh3cmFwYXJvdW5kICYmIHVubGlrZWx5KGkgPCAwKSAmJiBsaWtlbHkobS0+c3FfbGVuZ3RoKSkg eworKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGwgPSBtLT5zcV9sZW5ndGgobyk7CisrICAg ICAgICAgICAgICAgIGlmIChsaWtlbHkobCA+PSAwKSkgeworKyAgICAgICAgICAgICAgICAgICAg aSArPSBsOworKyAgICAgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAgICAgICAg aWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorKyAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgICAgICAgICAgICAgIFB5RXJy X0NsZWFyKCk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CistICAgICAgICAg ICAgUHlUeXBlX01vZGlmaWVkKChQeVR5cGVPYmplY3QqKXR5cGVfb2JqKTsKKysgICAgICAgICAg ICByZXR1cm4gbS0+c3FfYXNzX2l0ZW0obywgaSwgdik7CisgICAgICAgICB9CisgICAgIH0KKy0g ICAgZ290byBfX1BZWF9HT09EOworLV9fUFlYX0JBRDoKKy0gICAgaWYgKCFQeUVycl9PY2N1cnJl ZCgpKQorLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwgIlVuYWJsZSB0 byBpbml0aWFsaXplIHBpY2tsaW5nIGZvciAlcyIsICgoUHlUeXBlT2JqZWN0Kil0eXBlX29iaikt PnRwX25hbWUpOworLSAgICByZXQgPSAtMTsKKy1fX1BZWF9HT09EOgorLSNpZiAhQ1lUSE9OX1VT RV9QWVRZUEVfTE9PS1VQCistICAgIFB5X1hERUNSRUYob2JqZWN0X3JlZHVjZSk7CistICAgIFB5 X1hERUNSRUYob2JqZWN0X3JlZHVjZV9leCk7CisrI2Vsc2UKKysjaWYgQ1lUSE9OX0NPTVBJTElO R19JTl9QWVBZCisrICAgIGlmIChpc19saXN0IHx8IChQeVNlcXVlbmNlX0NoZWNrKG8pICYmICFQ eURpY3RfQ2hlY2sobykpKQorKyNlbHNlCisrICAgIGlmIChpc19saXN0IHx8IFB5U2VxdWVuY2Vf Q2hlY2sobykpCisgI2VuZGlmCistICAgIFB5X1hERUNSRUYocmVkdWNlKTsKKy0gICAgUHlfWERF Q1JFRihyZWR1Y2VfZXgpOworLSAgICBQeV9YREVDUkVGKHJlZHVjZV9jeXRob24pOworLSAgICBQ eV9YREVDUkVGKHNldHN0YXRlKTsKKy0gICAgUHlfWERFQ1JFRihzZXRzdGF0ZV9jeXRob24pOwor LSAgICByZXR1cm4gcmV0OworKyAgICB7CisrICAgICAgICByZXR1cm4gUHlTZXF1ZW5jZV9TZXRJ dGVtKG8sIGksIHYpOworKyAgICB9CisrI2VuZGlmCisrICAgIHJldHVybiBfX1B5eF9TZXRJdGVt SW50X0dlbmVyaWMobywgUHlJbnRfRnJvbVNzaXplX3QoaSksIHYpOworIH0KKyAKKy0vKiBDYWxj dWxhdGVNZXRhY2xhc3MgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fUHl4X0NhbGN1bGF0ZU1ldGFj bGFzcyhQeVR5cGVPYmplY3QgKm1ldGFjbGFzcywgUHlPYmplY3QgKmJhc2VzKSB7CistICAgIFB5 X3NzaXplX3QgaSwgbmJhc2VzID0gUHlUdXBsZV9HRVRfU0laRShiYXNlcyk7CistICAgIGZvciAo aT0wOyBpIDwgbmJhc2VzOyBpKyspIHsKKy0gICAgICAgIFB5VHlwZU9iamVjdCAqdG1wdHlwZTsK Ky0gICAgICAgIFB5T2JqZWN0ICp0bXAgPSBQeVR1cGxlX0dFVF9JVEVNKGJhc2VzLCBpKTsKKy0g ICAgICAgIHRtcHR5cGUgPSBQeV9UWVBFKHRtcCk7CistI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAz CistICAgICAgICBpZiAodG1wdHlwZSA9PSAmUHlDbGFzc19UeXBlKQorLSAgICAgICAgICAgIGNv bnRpbnVlOworLSNlbmRpZgorLSAgICAgICAgaWYgKCFtZXRhY2xhc3MpIHsKKy0gICAgICAgICAg ICBtZXRhY2xhc3MgPSB0bXB0eXBlOworLSAgICAgICAgICAgIGNvbnRpbnVlOworKy8qIEZhc3RU eXBlQ2hlY2tzICovCisrI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZVEhPTgorK3N0YXRpYyBp bnQgX19QeXhfSW5CYXNlcyhQeVR5cGVPYmplY3QgKmEsIFB5VHlwZU9iamVjdCAqYikgeworKyAg ICB3aGlsZSAoYSkgeworKyAgICAgICAgYSA9IGEtPnRwX2Jhc2U7CisrICAgICAgICBpZiAoYSA9 PSBiKQorKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICB9CisrICAgIHJldHVybiBiID09ICZQ eUJhc2VPYmplY3RfVHlwZTsKKyt9Cisrc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X0lz U3VidHlwZShQeVR5cGVPYmplY3QgKmEsIFB5VHlwZU9iamVjdCAqYikgeworKyAgICBQeU9iamVj dCAqbXJvOworKyAgICBpZiAoYSA9PSBiKSByZXR1cm4gMTsKKysgICAgbXJvID0gYS0+dHBfbXJv OworKyAgICBpZiAobGlrZWx5KG1ybykpIHsKKysgICAgICAgIFB5X3NzaXplX3QgaSwgbjsKKysg ICAgICAgIG4gPSBQeVR1cGxlX0dFVF9TSVpFKG1ybyk7CisrICAgICAgICBmb3IgKGkgPSAwOyBp IDwgbjsgaSsrKSB7CisrICAgICAgICAgICAgaWYgKFB5VHVwbGVfR0VUX0lURU0obXJvLCBpKSA9 PSAoUHlPYmplY3QgKiliKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgIH0K Ky0gICAgICAgIGlmIChQeVR5cGVfSXNTdWJ0eXBlKG1ldGFjbGFzcywgdG1wdHlwZSkpCistICAg ICAgICAgICAgY29udGludWU7CistICAgICAgICBpZiAoUHlUeXBlX0lzU3VidHlwZSh0bXB0eXBl LCBtZXRhY2xhc3MpKSB7CistICAgICAgICAgICAgbWV0YWNsYXNzID0gdG1wdHlwZTsKKy0gICAg ICAgICAgICBjb250aW51ZTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIHJldHVy biBfX1B5eF9JbkJhc2VzKGEsIGIpOworK30KKysjaWYgUFlfTUFKT1JfVkVSU0lPTiA9PSAyCisr c3RhdGljIGludCBfX1B5eF9pbm5lcl9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMyKFB5T2Jq ZWN0ICplcnIsIFB5T2JqZWN0KiBleGNfdHlwZTEsIFB5T2JqZWN0KiBleGNfdHlwZTIpIHsKKysg ICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwgKnZhbHVlLCAqdGI7CisrICAgIGludCByZXM7CisrICAg IF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQorKyAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fz c2lnbgorKyAgICBfX1B5eF9FcnJGZXRjaCgmZXhjZXB0aW9uLCAmdmFsdWUsICZ0Yik7CisrICAg IHJlcyA9IGV4Y190eXBlMSA/IFB5T2JqZWN0X0lzU3ViY2xhc3MoZXJyLCBleGNfdHlwZTEpIDog MDsKKysgICAgaWYgKHVubGlrZWx5KHJlcyA9PSAtMSkpIHsKKysgICAgICAgIFB5RXJyX1dyaXRl VW5yYWlzYWJsZShlcnIpOworKyAgICAgICAgcmVzID0gMDsKKysgICAgfQorKyAgICBpZiAoIXJl cykgeworKyAgICAgICAgcmVzID0gUHlPYmplY3RfSXNTdWJjbGFzcyhlcnIsIGV4Y190eXBlMik7 CisrICAgICAgICBpZiAodW5saWtlbHkocmVzID09IC0xKSkgeworKyAgICAgICAgICAgIFB5RXJy X1dyaXRlVW5yYWlzYWJsZShlcnIpOworKyAgICAgICAgICAgIHJlcyA9IDA7CisgICAgICAgICB9 CistICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorLSAgICAgICAgICAg ICAgICAgICAgICAgICJtZXRhY2xhc3MgY29uZmxpY3Q6ICIKKy0gICAgICAgICAgICAgICAgICAg ICAgICAidGhlIG1ldGFjbGFzcyBvZiBhIGRlcml2ZWQgY2xhc3MgIgorLSAgICAgICAgICAgICAg ICAgICAgICAgICJtdXN0IGJlIGEgKG5vbi1zdHJpY3QpIHN1YmNsYXNzICIKKy0gICAgICAgICAg ICAgICAgICAgICAgICAib2YgdGhlIG1ldGFjbGFzc2VzIG9mIGFsbCBpdHMgYmFzZXMiKTsKKy0g ICAgICAgIHJldHVybiBOVUxMOworICAgICB9CistICAgIGlmICghbWV0YWNsYXNzKSB7CistI2lm IFBZX01BSk9SX1ZFUlNJT04gPCAzCistICAgICAgICBtZXRhY2xhc3MgPSAmUHlDbGFzc19UeXBl OworKyAgICBfX1B5eF9FcnJSZXN0b3JlKGV4Y2VwdGlvbiwgdmFsdWUsIHRiKTsKKysgICAgcmV0 dXJuIHJlczsKKyt9CisgI2Vsc2UKKy0gICAgICAgIG1ldGFjbGFzcyA9ICZQeVR5cGVfVHlwZTsK Ky0jZW5kaWYKKytzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQgX19QeXhfaW5uZXJfUHlFcnJfR2l2 ZW5FeGNlcHRpb25NYXRjaGVzMihQeU9iamVjdCAqZXJyLCBQeU9iamVjdCogZXhjX3R5cGUxLCBQ eU9iamVjdCAqZXhjX3R5cGUyKSB7CisrICAgIGludCByZXMgPSBleGNfdHlwZTEgPyBfX1B5eF9J c1N1YnR5cGUoKFB5VHlwZU9iamVjdCopZXJyLCAoUHlUeXBlT2JqZWN0KilleGNfdHlwZTEpIDog MDsKKysgICAgaWYgKCFyZXMpIHsKKysgICAgICAgIHJlcyA9IF9fUHl4X0lzU3VidHlwZSgoUHlU eXBlT2JqZWN0KillcnIsIChQeVR5cGVPYmplY3QqKWV4Y190eXBlMik7CisgICAgIH0KKy0gICAg UHlfSU5DUkVGKChQeU9iamVjdCopIG1ldGFjbGFzcyk7CistICAgIHJldHVybiAoUHlPYmplY3Qq KSBtZXRhY2xhc3M7CisrICAgIHJldHVybiByZXM7CisgfQorLQorLS8qIFB5M0NsYXNzQ3JlYXRl ICovCistc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9QeTNNZXRhY2xhc3NQcmVwYXJlKFB5T2JqZWN0 ICptZXRhY2xhc3MsIFB5T2JqZWN0ICpiYXNlcywgUHlPYmplY3QgKm5hbWUsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpxdWFsbmFtZSwgUHlP YmplY3QgKm1rdywgUHlPYmplY3QgKm1vZG5hbWUsIFB5T2JqZWN0ICpkb2MpIHsKKy0gICAgUHlP YmplY3QgKm5zOworLSAgICBpZiAobWV0YWNsYXNzKSB7CistICAgICAgICBQeU9iamVjdCAqcHJl cCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIobWV0YWNsYXNzLCBfX3B5eF9uX3NfcHJlcGFy ZSk7CistICAgICAgICBpZiAocHJlcCkgeworLSAgICAgICAgICAgIFB5T2JqZWN0ICpwYXJncyA9 IFB5VHVwbGVfUGFjaygyLCBuYW1lLCBiYXNlcyk7CistICAgICAgICAgICAgaWYgKHVubGlrZWx5 KCFwYXJncykpIHsKKy0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHByZXApOworLSAgICAgICAg ICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgICAgICAgICB9CistICAgICAgICAgICAgbnMgPSBQ eU9iamVjdF9DYWxsKHByZXAsIHBhcmdzLCBta3cpOworLSAgICAgICAgICAgIFB5X0RFQ1JFRihw cmVwKTsKKy0gICAgICAgICAgICBQeV9ERUNSRUYocGFyZ3MpOworKyNlbmRpZgorK3N0YXRpYyBp bnQgX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzVHVwbGUoUHlPYmplY3QgKmV4Y190 eXBlLCBQeU9iamVjdCAqdHVwbGUpIHsKKysgICAgUHlfc3NpemVfdCBpLCBuOworKyAgICBhc3Nl cnQoUHlFeGNlcHRpb25DbGFzc19DaGVjayhleGNfdHlwZSkpOworKyAgICBuID0gUHlUdXBsZV9H RVRfU0laRSh0dXBsZSk7CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMworKyAgICBmb3IgKGk9 MDsgaTxuOyBpKyspIHsKKysgICAgICAgIGlmIChleGNfdHlwZSA9PSBQeVR1cGxlX0dFVF9JVEVN KHR1cGxlLCBpKSkgcmV0dXJuIDE7CisrICAgIH0KKysjZW5kaWYKKysgICAgZm9yIChpPTA7IGk8 bjsgaSsrKSB7CisrICAgICAgICBQeU9iamVjdCAqdCA9IFB5VHVwbGVfR0VUX0lURU0odHVwbGUs IGkpOworKyAgICAgICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAgICAgICBpZiAobGlr ZWx5KGV4Y190eXBlID09IHQpKSByZXR1cm4gMTsKKysgICAgICAgICNlbmRpZgorKyAgICAgICAg aWYgKGxpa2VseShQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHQpKSkgeworKyAgICAgICAgICAgIGlm IChfX1B5eF9pbm5lcl9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMyKGV4Y190eXBlLCBOVUxM LCB0KSkgcmV0dXJuIDE7CisgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIGlmICh1bmxp a2VseSghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpKQorLSAg ICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwor LSAgICAgICAgICAgIG5zID0gUHlEaWN0X05ldygpOworICAgICAgICAgfQorLSAgICB9IGVsc2Ug eworLSAgICAgICAgbnMgPSBQeURpY3RfTmV3KCk7CisgICAgIH0KKy0gICAgaWYgKHVubGlrZWx5 KCFucykpCistICAgICAgICByZXR1cm4gTlVMTDsKKy0gICAgaWYgKHVubGlrZWx5KFB5T2JqZWN0 X1NldEl0ZW0obnMsIF9fcHl4X25fc19tb2R1bGUsIG1vZG5hbWUpIDwgMCkpIGdvdG8gYmFkOwor LSAgICBpZiAodW5saWtlbHkoUHlPYmplY3RfU2V0SXRlbShucywgX19weXhfbl9zX3F1YWxuYW1l LCBxdWFsbmFtZSkgPCAwKSkgZ290byBiYWQ7CistICAgIGlmICh1bmxpa2VseShkb2MgJiYgUHlP YmplY3RfU2V0SXRlbShucywgX19weXhfbl9zX2RvYywgZG9jKSA8IDApKSBnb3RvIGJhZDsKKy0g ICAgcmV0dXJuIG5zOworLWJhZDoKKy0gICAgUHlfREVDUkVGKG5zKTsKKy0gICAgcmV0dXJuIE5V TEw7CisrICAgIHJldHVybiAwOworIH0KKy1zdGF0aWMgUHlPYmplY3QgKl9fUHl4X1B5M0NsYXNz Q3JlYXRlKFB5T2JqZWN0ICptZXRhY2xhc3MsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqYmFz ZXMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGlj dCwgUHlPYmplY3QgKm1rdywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBjYWxjdWxhdGVfbWV0YWNsYXNzLCBpbnQgYWxsb3dfcHkyX21ldGFjbGFzcykgeworLSAg ICBQeU9iamVjdCAqcmVzdWx0LCAqbWFyZ3M7CistICAgIFB5T2JqZWN0ICpvd25lZF9tZXRhY2xh c3MgPSBOVUxMOworLSAgICBpZiAoYWxsb3dfcHkyX21ldGFjbGFzcykgeworLSAgICAgICAgb3du ZWRfbWV0YWNsYXNzID0gUHlPYmplY3RfR2V0SXRlbShkaWN0LCBfX3B5eF9uX3NfbWV0YWNsYXNz KTsKKy0gICAgICAgIGlmIChvd25lZF9tZXRhY2xhc3MpIHsKKy0gICAgICAgICAgICBtZXRhY2xh c3MgPSBvd25lZF9tZXRhY2xhc3M7CistICAgICAgICB9IGVsc2UgaWYgKGxpa2VseShQeUVycl9F eGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkpIHsKKy0gICAgICAgICAgICBQeUVycl9D bGVhcigpOworK3N0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9QeUVycl9HaXZlbkV4Y2Vw dGlvbk1hdGNoZXMoUHlPYmplY3QgKmVyciwgUHlPYmplY3QqIGV4Y190eXBlKSB7CisrICAgIGlm IChsaWtlbHkoZXJyID09IGV4Y190eXBlKSkgcmV0dXJuIDE7CisrICAgIGlmIChsaWtlbHkoUHlF eGNlcHRpb25DbGFzc19DaGVjayhlcnIpKSkgeworKyAgICAgICAgaWYgKGxpa2VseShQeUV4Y2Vw dGlvbkNsYXNzX0NoZWNrKGV4Y190eXBlKSkpIHsKKysgICAgICAgICAgICByZXR1cm4gX19QeXhf aW5uZXJfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzMihlcnIsIE5VTEwsIGV4Y190eXBlKTsK KysgICAgICAgIH0gZWxzZSBpZiAobGlrZWx5KFB5VHVwbGVfQ2hlY2soZXhjX3R5cGUpKSkgewor KyAgICAgICAgICAgIHJldHVybiBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXNUdXBs ZShlcnIsIGV4Y190eXBlKTsKKyAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgcmV0dXJu IE5VTEw7CisgICAgICAgICB9CisgICAgIH0KKy0gICAgaWYgKGNhbGN1bGF0ZV9tZXRhY2xhc3Mg JiYgKCFtZXRhY2xhc3MgfHwgUHlUeXBlX0NoZWNrKG1ldGFjbGFzcykpKSB7CistICAgICAgICBt ZXRhY2xhc3MgPSBfX1B5eF9DYWxjdWxhdGVNZXRhY2xhc3MoKFB5VHlwZU9iamVjdCopIG1ldGFj bGFzcywgYmFzZXMpOworLSAgICAgICAgUHlfWERFQ1JFRihvd25lZF9tZXRhY2xhc3MpOworLSAg ICAgICAgaWYgKHVubGlrZWx5KCFtZXRhY2xhc3MpKQorLSAgICAgICAgICAgIHJldHVybiBOVUxM OworLSAgICAgICAgb3duZWRfbWV0YWNsYXNzID0gbWV0YWNsYXNzOworLSAgICB9CistICAgIG1h cmdzID0gUHlUdXBsZV9QYWNrKDMsIG5hbWUsIGJhc2VzLCBkaWN0KTsKKy0gICAgaWYgKHVubGlr ZWx5KCFtYXJncykpIHsKKy0gICAgICAgIHJlc3VsdCA9IE5VTEw7CistICAgIH0gZWxzZSB7Cist ICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsKG1ldGFjbGFzcywgbWFyZ3MsIG1rdyk7Cist ICAgICAgICBQeV9ERUNSRUYobWFyZ3MpOworKyAgICByZXR1cm4gUHlFcnJfR2l2ZW5FeGNlcHRp b25NYXRjaGVzKGVyciwgZXhjX3R5cGUpOworK30KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQg X19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzMihQeU9iamVjdCAqZXJyLCBQeU9iamVj dCAqZXhjX3R5cGUxLCBQeU9iamVjdCAqZXhjX3R5cGUyKSB7CisrICAgIGFzc2VydChQeUV4Y2Vw dGlvbkNsYXNzX0NoZWNrKGV4Y190eXBlMSkpOworKyAgICBhc3NlcnQoUHlFeGNlcHRpb25DbGFz c19DaGVjayhleGNfdHlwZTIpKTsKKysgICAgaWYgKGxpa2VseShlcnIgPT0gZXhjX3R5cGUxIHx8 IGVyciA9PSBleGNfdHlwZTIpKSByZXR1cm4gMTsKKysgICAgaWYgKGxpa2VseShQeUV4Y2VwdGlv bkNsYXNzX0NoZWNrKGVycikpKSB7CisrICAgICAgICByZXR1cm4gX19QeXhfaW5uZXJfUHlFcnJf R2l2ZW5FeGNlcHRpb25NYXRjaGVzMihlcnIsIGV4Y190eXBlMSwgZXhjX3R5cGUyKTsKKyAgICAg fQorLSAgICBQeV9YREVDUkVGKG93bmVkX21ldGFjbGFzcyk7CistICAgIHJldHVybiByZXN1bHQ7 CisrICAgIHJldHVybiAoUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGVyciwgZXhjX3R5cGUx KSB8fCBQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoZXJyLCBleGNfdHlwZTIpKTsKKyB9Cisr I2VuZGlmCisgCistLyogR2V0TmFtZUluQ2xhc3MgKi8KKy1zdGF0aWMgUHlPYmplY3QgKl9fUHl4 X0dldEdsb2JhbE5hbWVBZnRlckF0dHJpYnV0ZUxvb2t1cChQeU9iamVjdCAqbmFtZSkgeworLSAg ICBQeU9iamVjdCAqcmVzdWx0OworLSAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2RlY2xhcmUKKy0g ICAgX19QeXhfUHlUaHJlYWRTdGF0ZV9hc3NpZ24KKy0gICAgaWYgKHVubGlrZWx5KCFfX1B5eF9Q eUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkpCistICAgICAgICBy ZXR1cm4gTlVMTDsKKy0gICAgX19QeXhfUHlFcnJfQ2xlYXIoKTsKKy0gICAgX19QeXhfR2V0TW9k dWxlR2xvYmFsTmFtZVVuY2FjaGVkKHJlc3VsdCwgbmFtZSk7CistICAgIHJldHVybiByZXN1bHQ7 CistfQorLXN0YXRpYyBQeU9iamVjdCAqX19QeXhfX0dldE5hbWVJbkNsYXNzKFB5T2JqZWN0ICpu bXNwYWNlLCBQeU9iamVjdCAqbmFtZSkgeworLSAgICBQeU9iamVjdCAqcmVzdWx0OworLSAgICBy ZXN1bHQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKG5tc3BhY2UsIG5hbWUpOworLSAgICBp ZiAoIXJlc3VsdCkgeworLSAgICAgICAgcmVzdWx0ID0gX19QeXhfR2V0R2xvYmFsTmFtZUFmdGVy QXR0cmlidXRlTG9va3VwKG5hbWUpOworKy8qIEV4dFR5cGVUZXN0ICovCisrc3RhdGljIENZVEhP Tl9JTkxJTkUgaW50IF9fUHl4X1R5cGVUZXN0KFB5T2JqZWN0ICpvYmosIFB5VHlwZU9iamVjdCAq dHlwZSkgeworKyAgICBpZiAodW5saWtlbHkoIXR5cGUpKSB7CisrICAgICAgICBQeUVycl9TZXRT dHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJNaXNzaW5nIHR5cGUgb2JqZWN0Iik7CisrICAgICAg ICByZXR1cm4gMDsKKyAgICAgfQorLSAgICByZXR1cm4gcmVzdWx0OworKyAgICBpZiAobGlrZWx5 KF9fUHl4X1R5cGVDaGVjayhvYmosIHR5cGUpKSkKKysgICAgICAgIHJldHVybiAxOworKyAgICBQ eUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgJS4yMDBzIHRvICUu MjAwcyIsCisrICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUsIHR5cGUtPnRw X25hbWUpOworKyAgICByZXR1cm4gMDsKKyB9CisgCistLyogQ0xpbmVJblRyYWNlYmFjayAqLwor LSNpZm5kZWYgQ1lUSE9OX0NMSU5FX0lOX1RSQUNFQkFDSworLXN0YXRpYyBpbnQgX19QeXhfQ0xp bmVGb3JUcmFjZWJhY2soQ1lUSE9OX05DUF9VTlVTRUQgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBp bnQgY19saW5lKSB7CistICAgIFB5T2JqZWN0ICp1c2VfY2xpbmU7CistICAgIFB5T2JqZWN0ICpw dHlwZSwgKnB2YWx1ZSwgKnB0cmFjZWJhY2s7CistI2lmIENZVEhPTl9DT01QSUxJTkdfSU5fQ1BZ VEhPTgorLSAgICBQeU9iamVjdCAqKmN5dGhvbl9ydW50aW1lX2RpY3Q7CistI2VuZGlmCistICAg IGlmICh1bmxpa2VseSghX19weXhfY3l0aG9uX3J1bnRpbWUpKSB7CistICAgICAgICByZXR1cm4g Y19saW5lOworLSAgICB9CistICAgIF9fUHl4X0VyckZldGNoSW5TdGF0ZSh0c3RhdGUsICZwdHlw ZSwgJnB2YWx1ZSwgJnB0cmFjZWJhY2spOworLSNpZiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRI T04KKy0gICAgY3l0aG9uX3J1bnRpbWVfZGljdCA9IF9QeU9iamVjdF9HZXREaWN0UHRyKF9fcHl4 X2N5dGhvbl9ydW50aW1lKTsKKy0gICAgaWYgKGxpa2VseShjeXRob25fcnVudGltZV9kaWN0KSkg eworLSAgICAgICAgX19QWVhfUFlfRElDVF9MT09LVVBfSUZfTU9ESUZJRUQoCistICAgICAgICAg ICAgdXNlX2NsaW5lLCAqY3l0aG9uX3J1bnRpbWVfZGljdCwKKy0gICAgICAgICAgICBfX1B5eF9Q eURpY3RfR2V0SXRlbVN0cigqY3l0aG9uX3J1bnRpbWVfZGljdCwgX19weXhfbl9zX2NsaW5lX2lu X3RyYWNlYmFjaykpCistICAgIH0gZWxzZQorLSNlbmRpZgorLSAgICB7CistICAgICAgUHlPYmpl Y3QgKnVzZV9jbGluZV9vYmogPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X2N5dGhv bl9ydW50aW1lLCBfX3B5eF9uX3NfY2xpbmVfaW5fdHJhY2ViYWNrKTsKKy0gICAgICBpZiAodXNl X2NsaW5lX29iaikgeworLSAgICAgICAgdXNlX2NsaW5lID0gUHlPYmplY3RfTm90KHVzZV9jbGlu ZV9vYmopID8gUHlfRmFsc2UgOiBQeV9UcnVlOworLSAgICAgICAgUHlfREVDUkVGKHVzZV9jbGlu ZV9vYmopOworLSAgICAgIH0gZWxzZSB7CistICAgICAgICBQeUVycl9DbGVhcigpOworLSAgICAg ICAgdXNlX2NsaW5lID0gTlVMTDsKKy0gICAgICB9CistICAgIH0KKy0gICAgaWYgKCF1c2VfY2xp bmUpIHsKKy0gICAgICAgIGNfbGluZSA9IDA7CistICAgICAgICBQeU9iamVjdF9TZXRBdHRyKF9f cHl4X2N5dGhvbl9ydW50aW1lLCBfX3B5eF9uX3NfY2xpbmVfaW5fdHJhY2ViYWNrLCBQeV9GYWxz ZSk7CistICAgIH0KKy0gICAgZWxzZSBpZiAodXNlX2NsaW5lID09IFB5X0ZhbHNlIHx8ICh1c2Vf Y2xpbmUgIT0gUHlfVHJ1ZSAmJiBQeU9iamVjdF9Ob3QodXNlX2NsaW5lKSAhPSAwKSkgeworLSAg ICAgICAgY19saW5lID0gMDsKKysvKiBEaWN0R2V0SXRlbSAqLworKyNpZiBQWV9NQUpPUl9WRVJT SU9OID49IDMgJiYgIUNZVEhPTl9DT01QSUxJTkdfSU5fUFlQWQorK3N0YXRpYyBQeU9iamVjdCAq X19QeXhfUHlEaWN0X0dldEl0ZW0oUHlPYmplY3QgKmQsIFB5T2JqZWN0KiBrZXkpIHsKKysgICAg UHlPYmplY3QgKnZhbHVlOworKyAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKGQs IGtleSk7CisrICAgIGlmICh1bmxpa2VseSghdmFsdWUpKSB7CisrICAgICAgICBpZiAoIVB5RXJy X09jY3VycmVkKCkpIHsKKysgICAgICAgICAgICBpZiAodW5saWtlbHkoUHlUdXBsZV9DaGVjayhr ZXkpKSkgeworKyAgICAgICAgICAgICAgICBQeU9iamVjdCogYXJncyA9IFB5VHVwbGVfUGFjaygx LCBrZXkpOworKyAgICAgICAgICAgICAgICBpZiAobGlrZWx5KGFyZ3MpKSB7CisrICAgICAgICAg ICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIGFyZ3MpOworKyAgICAg ICAgICAgICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworKyAgICAgICAgICAgICAgICB9CisrICAg ICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhj X0tleUVycm9yLCBrZXkpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIHJl dHVybiBOVUxMOworICAgICB9CistICAgIF9fUHl4X0VyclJlc3RvcmVJblN0YXRlKHRzdGF0ZSwg cHR5cGUsIHB2YWx1ZSwgcHRyYWNlYmFjayk7CistICAgIHJldHVybiBjX2xpbmU7CisrICAgIFB5 X0lOQ1JFRih2YWx1ZSk7CisrICAgIHJldHVybiB2YWx1ZTsKKyB9CisgI2VuZGlmCisgCistLyog Q29kZU9iamVjdENhY2hlICovCistc3RhdGljIGludCBfX3B5eF9iaXNlY3RfY29kZV9vYmplY3Rz KF9fUHl4X0NvZGVPYmplY3RDYWNoZUVudHJ5KiBlbnRyaWVzLCBpbnQgY291bnQsIGludCBjb2Rl X2xpbmUpIHsKKy0gICAgaW50IHN0YXJ0ID0gMCwgbWlkID0gMCwgZW5kID0gY291bnQgLSAxOwor LSAgICBpZiAoZW5kID49IDAgJiYgY29kZV9saW5lID4gZW50cmllc1tlbmRdLmNvZGVfbGluZSkg eworLSAgICAgICAgcmV0dXJuIGNvdW50OworLSAgICB9CistICAgIHdoaWxlIChzdGFydCA8IGVu ZCkgeworLSAgICAgICAgbWlkID0gc3RhcnQgKyAoZW5kIC0gc3RhcnQpIC8gMjsKKy0gICAgICAg IGlmIChjb2RlX2xpbmUgPCBlbnRyaWVzW21pZF0uY29kZV9saW5lKSB7CistICAgICAgICAgICAg ZW5kID0gbWlkOworLSAgICAgICAgfSBlbHNlIGlmIChjb2RlX2xpbmUgPiBlbnRyaWVzW21pZF0u Y29kZV9saW5lKSB7CistICAgICAgICAgICAgIHN0YXJ0ID0gbWlkICsgMTsKKysvKiBSYWlzZVRv b01hbnlWYWx1ZXNUb1VucGFjayAqLworK3N0YXRpYyBDWVRIT05fSU5MSU5FIHZvaWQgX19QeXhf UmFpc2VUb29NYW55VmFsdWVzRXJyb3IoUHlfc3NpemVfdCBleHBlY3RlZCkgeworKyAgICBQeUVy cl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKysgICAgICAgICAgICAgICAgICJ0b28gbWFueSB2 YWx1ZXMgdG8gdW5wYWNrIChleHBlY3RlZCAlIiBDWVRIT05fRk9STUFUX1NTSVpFX1QgImQpIiwg ZXhwZWN0ZWQpOworK30KKysKKysvKiBSYWlzZU5lZWRNb3JlVmFsdWVzVG9VbnBhY2sgKi8KKytz dGF0aWMgQ1lUSE9OX0lOTElORSB2b2lkIF9fUHl4X1JhaXNlTmVlZE1vcmVWYWx1ZXNFcnJvcihQ eV9zc2l6ZV90IGluZGV4KSB7CisrICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAor KyAgICAgICAgICAgICAgICAgIm5lZWQgbW9yZSB0aGFuICUiIENZVEhPTl9GT1JNQVRfU1NJWkVf VCAiZCB2YWx1ZSUuMXMgdG8gdW5wYWNrIiwKKysgICAgICAgICAgICAgICAgIGluZGV4LCAoaW5k ZXggPT0gMSkgPyAiIiA6ICJzIik7CisrfQorKworKy8qIEl0ZXJGaW5pc2ggKi8KKytzdGF0aWMg Q1lUSE9OX0lOTElORSBpbnQgX19QeXhfSXRlckZpbmlzaCh2b2lkKSB7CisrI2lmIENZVEhPTl9G QVNUX1RIUkVBRF9TVEFURQorKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBfX1B5eF9QeVRo cmVhZFN0YXRlX0N1cnJlbnQ7CisrICAgIFB5T2JqZWN0KiBleGNfdHlwZSA9IHRzdGF0ZS0+Y3Vy ZXhjX3R5cGU7CisrICAgIGlmICh1bmxpa2VseShleGNfdHlwZSkpIHsKKysgICAgICAgIGlmIChs aWtlbHkoX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19T dG9wSXRlcmF0aW9uKSkpIHsKKysgICAgICAgICAgICBQeU9iamVjdCAqZXhjX3ZhbHVlLCAqZXhj X3RiOworKyAgICAgICAgICAgIGV4Y192YWx1ZSA9IHRzdGF0ZS0+Y3VyZXhjX3ZhbHVlOworKyAg ICAgICAgICAgIGV4Y190YiA9IHRzdGF0ZS0+Y3VyZXhjX3RyYWNlYmFjazsKKysgICAgICAgICAg ICB0c3RhdGUtPmN1cmV4Y190eXBlID0gMDsKKysgICAgICAgICAgICB0c3RhdGUtPmN1cmV4Y192 YWx1ZSA9IDA7CisrICAgICAgICAgICAgdHN0YXRlLT5jdXJleGNfdHJhY2ViYWNrID0gMDsKKysg ICAgICAgICAgICBQeV9ERUNSRUYoZXhjX3R5cGUpOworKyAgICAgICAgICAgIFB5X1hERUNSRUYo ZXhjX3ZhbHVlKTsKKysgICAgICAgICAgICBQeV9YREVDUkVGKGV4Y190Yik7CisrICAgICAgICAg ICAgcmV0dXJuIDA7CisgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHJldHVybiBtaWQ7 CisrICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgfQorICAgICB9CistICAgIGlmIChj b2RlX2xpbmUgPD0gZW50cmllc1ttaWRdLmNvZGVfbGluZSkgeworLSAgICAgICAgcmV0dXJuIG1p ZDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHJldHVybiBtaWQgKyAxOworKyAgICByZXR1cm4g MDsKKysjZWxzZQorKyAgICBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIHsKKysgICAg ICAgIGlmIChsaWtlbHkoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19TdG9wSXRlcmF0aW9u KSkpIHsKKysgICAgICAgICAgICBQeUVycl9DbGVhcigpOworKyAgICAgICAgICAgIHJldHVybiAw OworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9 CisgICAgIH0KKysgICAgcmV0dXJuIDA7CisrI2VuZGlmCisgfQorLXN0YXRpYyBQeUNvZGVPYmpl Y3QgKl9fcHl4X2ZpbmRfY29kZV9vYmplY3QoaW50IGNvZGVfbGluZSkgeworLSAgICBQeUNvZGVP YmplY3QqIGNvZGVfb2JqZWN0OworLSAgICBpbnQgcG9zOworLSAgICBpZiAodW5saWtlbHkoIWNv ZGVfbGluZSkgfHwgdW5saWtlbHkoIV9fcHl4X2NvZGVfY2FjaGUuZW50cmllcykpIHsKKy0gICAg ICAgIHJldHVybiBOVUxMOworLSAgICB9CistICAgIHBvcyA9IF9fcHl4X2Jpc2VjdF9jb2RlX29i amVjdHMoX19weXhfY29kZV9jYWNoZS5lbnRyaWVzLCBfX3B5eF9jb2RlX2NhY2hlLmNvdW50LCBj b2RlX2xpbmUpOworLSAgICBpZiAodW5saWtlbHkocG9zID49IF9fcHl4X2NvZGVfY2FjaGUuY291 bnQpIHx8IHVubGlrZWx5KF9fcHl4X2NvZGVfY2FjaGUuZW50cmllc1twb3NdLmNvZGVfbGluZSAh PSBjb2RlX2xpbmUpKSB7CistICAgICAgICByZXR1cm4gTlVMTDsKKysKKysvKiBVbnBhY2tJdGVt RW5kQ2hlY2sgKi8KKytzdGF0aWMgaW50IF9fUHl4X0l0ZXJuZXh0VW5wYWNrRW5kQ2hlY2soUHlP YmplY3QgKnJldHZhbCwgUHlfc3NpemVfdCBleHBlY3RlZCkgeworKyAgICBpZiAodW5saWtlbHko cmV0dmFsKSkgeworKyAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7CisrICAgICAgICBfX1B5eF9S YWlzZVRvb01hbnlWYWx1ZXNFcnJvcihleHBlY3RlZCk7CisrICAgICAgICByZXR1cm4gLTE7Cisr ICAgIH0gZWxzZSB7CisrICAgICAgICByZXR1cm4gX19QeXhfSXRlckZpbmlzaCgpOworICAgICB9 CistICAgIGNvZGVfb2JqZWN0ID0gX19weXhfY29kZV9jYWNoZS5lbnRyaWVzW3Bvc10uY29kZV9v YmplY3Q7CistICAgIFB5X0lOQ1JFRihjb2RlX29iamVjdCk7CistICAgIHJldHVybiBjb2RlX29i amVjdDsKKysgICAgcmV0dXJuIDA7CisgfQorLXN0YXRpYyB2b2lkIF9fcHl4X2luc2VydF9jb2Rl X29iamVjdChpbnQgY29kZV9saW5lLCBQeUNvZGVPYmplY3QqIGNvZGVfb2JqZWN0KSB7CistICAg IGludCBwb3MsIGk7CistICAgIF9fUHl4X0NvZGVPYmplY3RDYWNoZUVudHJ5KiBlbnRyaWVzID0g X19weXhfY29kZV9jYWNoZS5lbnRyaWVzOworLSAgICBpZiAodW5saWtlbHkoIWNvZGVfbGluZSkp IHsKKy0gICAgICAgIHJldHVybjsKKysKKysvKiBJbXBvcnQgKi8KKytzdGF0aWMgUHlPYmplY3Qg Kl9fUHl4X0ltcG9ydChQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKmZyb21fbGlzdCwgaW50IGxl dmVsKSB7CisrICAgIFB5T2JqZWN0ICplbXB0eV9saXN0ID0gMDsKKysgICAgUHlPYmplY3QgKm1v ZHVsZSA9IDA7CisrICAgIFB5T2JqZWN0ICpnbG9iYWxfZGljdCA9IDA7CisrICAgIFB5T2JqZWN0 ICplbXB0eV9kaWN0ID0gMDsKKysgICAgUHlPYmplY3QgKmxpc3Q7CisrICAgICNpZiBQWV9NQUpP Ul9WRVJTSU9OIDwgMworKyAgICBQeU9iamVjdCAqcHlfaW1wb3J0OworKyAgICBweV9pbXBvcnQg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X2IsIF9fcHl4X25fc19pbXBvcnQpOwor KyAgICBpZiAoIXB5X2ltcG9ydCkKKysgICAgICAgIGdvdG8gYmFkOworKyAgICAjZW5kaWYKKysg ICAgaWYgKGZyb21fbGlzdCkKKysgICAgICAgIGxpc3QgPSBmcm9tX2xpc3Q7CisrICAgIGVsc2Ug eworKyAgICAgICAgZW1wdHlfbGlzdCA9IFB5TGlzdF9OZXcoMCk7CisrICAgICAgICBpZiAoIWVt cHR5X2xpc3QpCisrICAgICAgICAgICAgZ290byBiYWQ7CisrICAgICAgICBsaXN0ID0gZW1wdHlf bGlzdDsKKyAgICAgfQorLSAgICBpZiAodW5saWtlbHkoIWVudHJpZXMpKSB7CistICAgICAgICBl bnRyaWVzID0gKF9fUHl4X0NvZGVPYmplY3RDYWNoZUVudHJ5KilQeU1lbV9NYWxsb2MoNjQqc2l6 ZW9mKF9fUHl4X0NvZGVPYmplY3RDYWNoZUVudHJ5KSk7CistICAgICAgICBpZiAobGlrZWx5KGVu dHJpZXMpKSB7CistICAgICAgICAgICAgX19weXhfY29kZV9jYWNoZS5lbnRyaWVzID0gZW50cmll czsKKy0gICAgICAgICAgICBfX3B5eF9jb2RlX2NhY2hlLm1heF9jb3VudCA9IDY0OworLSAgICAg ICAgICAgIF9fcHl4X2NvZGVfY2FjaGUuY291bnQgPSAxOworLSAgICAgICAgICAgIGVudHJpZXNb MF0uY29kZV9saW5lID0gY29kZV9saW5lOworLSAgICAgICAgICAgIGVudHJpZXNbMF0uY29kZV9v YmplY3QgPSBjb2RlX29iamVjdDsKKy0gICAgICAgICAgICBQeV9JTkNSRUYoY29kZV9vYmplY3Qp OworKyAgICBnbG9iYWxfZGljdCA9IFB5TW9kdWxlX0dldERpY3QoX19weXhfbSk7CisrICAgIGlm ICghZ2xvYmFsX2RpY3QpCisrICAgICAgICBnb3RvIGJhZDsKKysgICAgZW1wdHlfZGljdCA9IFB5 RGljdF9OZXcoKTsKKysgICAgaWYgKCFlbXB0eV9kaWN0KQorKyAgICAgICAgZ290byBiYWQ7Cisr ICAgIHsKKysgICAgICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OID49IDMKKysgICAgICAgIGlmIChs ZXZlbCA9PSAtMSkgeworKyAgICAgICAgICAgIGlmICgoMSkgJiYgKHN0cmNocihfX1B5eF9NT0RV TEVfTkFNRSwgJy4nKSkpIHsKKysgICAgICAgICAgICAgICAgbW9kdWxlID0gUHlJbXBvcnRfSW1w b3J0TW9kdWxlTGV2ZWxPYmplY3QoCisrICAgICAgICAgICAgICAgICAgICBuYW1lLCBnbG9iYWxf ZGljdCwgZW1wdHlfZGljdCwgbGlzdCwgMSk7CisrICAgICAgICAgICAgICAgIGlmICghbW9kdWxl KSB7CisrICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlF eGNfSW1wb3J0RXJyb3IpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFkOworKyAg ICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKysgICAgICAgICAgICAgICAgfQorKyAg ICAgICAgICAgIH0KKysgICAgICAgICAgICBsZXZlbCA9IDA7CisgICAgICAgICB9CistICAgICAg ICByZXR1cm47CistICAgIH0KKy0gICAgcG9zID0gX19weXhfYmlzZWN0X2NvZGVfb2JqZWN0cyhf X3B5eF9jb2RlX2NhY2hlLmVudHJpZXMsIF9fcHl4X2NvZGVfY2FjaGUuY291bnQsIGNvZGVfbGlu ZSk7CistICAgIGlmICgocG9zIDwgX19weXhfY29kZV9jYWNoZS5jb3VudCkgJiYgdW5saWtlbHko X19weXhfY29kZV9jYWNoZS5lbnRyaWVzW3Bvc10uY29kZV9saW5lID09IGNvZGVfbGluZSkpIHsK Ky0gICAgICAgIFB5Q29kZU9iamVjdCogdG1wID0gZW50cmllc1twb3NdLmNvZGVfb2JqZWN0Owor LSAgICAgICAgZW50cmllc1twb3NdLmNvZGVfb2JqZWN0ID0gY29kZV9vYmplY3Q7CistICAgICAg ICBQeV9ERUNSRUYodG1wKTsKKy0gICAgICAgIHJldHVybjsKKy0gICAgfQorLSAgICBpZiAoX19w eXhfY29kZV9jYWNoZS5jb3VudCA9PSBfX3B5eF9jb2RlX2NhY2hlLm1heF9jb3VudCkgeworLSAg ICAgICAgaW50IG5ld19tYXggPSBfX3B5eF9jb2RlX2NhY2hlLm1heF9jb3VudCArIDY0OworLSAg ICAgICAgZW50cmllcyA9IChfX1B5eF9Db2RlT2JqZWN0Q2FjaGVFbnRyeSopUHlNZW1fUmVhbGxv YygKKy0gICAgICAgICAgICBfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXMsICgoc2l6ZV90KW5ld19t YXgpICogc2l6ZW9mKF9fUHl4X0NvZGVPYmplY3RDYWNoZUVudHJ5KSk7CistICAgICAgICBpZiAo dW5saWtlbHkoIWVudHJpZXMpKSB7CistICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgI2Vu ZGlmCisrICAgICAgICBpZiAoIW1vZHVsZSkgeworKyAgICAgICAgICAgICNpZiBQWV9NQUpPUl9W RVJTSU9OIDwgMworKyAgICAgICAgICAgIFB5T2JqZWN0ICpweV9sZXZlbCA9IFB5SW50X0Zyb21M b25nKGxldmVsKTsKKysgICAgICAgICAgICBpZiAoIXB5X2xldmVsKQorKyAgICAgICAgICAgICAg ICBnb3RvIGJhZDsKKysgICAgICAgICAgICBtb2R1bGUgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25P YmpBcmdzKHB5X2ltcG9ydCwKKysgICAgICAgICAgICAgICAgbmFtZSwgZ2xvYmFsX2RpY3QsIGVt cHR5X2RpY3QsIGxpc3QsIHB5X2xldmVsLCAoUHlPYmplY3QgKilOVUxMKTsKKysgICAgICAgICAg ICBQeV9ERUNSRUYocHlfbGV2ZWwpOworKyAgICAgICAgICAgICNlbHNlCisrICAgICAgICAgICAg bW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWxPYmplY3QoCisrICAgICAgICAgICAg ICAgIG5hbWUsIGdsb2JhbF9kaWN0LCBlbXB0eV9kaWN0LCBsaXN0LCBsZXZlbCk7CisrICAgICAg ICAgICAgI2VuZGlmCisgICAgICAgICB9CistICAgICAgICBfX3B5eF9jb2RlX2NhY2hlLmVudHJp ZXMgPSBlbnRyaWVzOworLSAgICAgICAgX19weXhfY29kZV9jYWNoZS5tYXhfY291bnQgPSBuZXdf bWF4OworLSAgICB9CistICAgIGZvciAoaT1fX3B5eF9jb2RlX2NhY2hlLmNvdW50OyBpPnBvczsg aS0tKSB7CistICAgICAgICBlbnRyaWVzW2ldID0gZW50cmllc1tpLTFdOworICAgICB9CistICAg IGVudHJpZXNbcG9zXS5jb2RlX2xpbmUgPSBjb2RlX2xpbmU7CistICAgIGVudHJpZXNbcG9zXS5j b2RlX29iamVjdCA9IGNvZGVfb2JqZWN0OworLSAgICBfX3B5eF9jb2RlX2NhY2hlLmNvdW50Kys7 CistICAgIFB5X0lOQ1JFRihjb2RlX29iamVjdCk7CistfQorLQorLS8qIEFkZFRyYWNlYmFjayAq LworLSNpbmNsdWRlICJjb21waWxlLmgiCistI2luY2x1ZGUgImZyYW1lb2JqZWN0LmgiCistI2lu Y2x1ZGUgInRyYWNlYmFjay5oIgorLXN0YXRpYyBQeUNvZGVPYmplY3QqIF9fUHl4X0NyZWF0ZUNv ZGVPYmplY3RGb3JUcmFjZWJhY2soCistICAgICAgICAgICAgY29uc3QgY2hhciAqZnVuY25hbWUs IGludCBjX2xpbmUsCistICAgICAgICAgICAgaW50IHB5X2xpbmUsIGNvbnN0IGNoYXIgKmZpbGVu YW1lKSB7CistICAgIFB5Q29kZU9iamVjdCAqcHlfY29kZSA9IDA7CistICAgIFB5T2JqZWN0ICpw eV9zcmNmaWxlID0gMDsKKy0gICAgUHlPYmplY3QgKnB5X2Z1bmNuYW1lID0gMDsKKytiYWQ6Cisg ICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLSAgICBweV9zcmNmaWxlID0gUHlTdHJpbmdf RnJvbVN0cmluZyhmaWxlbmFtZSk7CistICAgICNlbHNlCistICAgIHB5X3NyY2ZpbGUgPSBQeVVu aWNvZGVfRnJvbVN0cmluZyhmaWxlbmFtZSk7CisrICAgIFB5X1hERUNSRUYocHlfaW1wb3J0KTsK KyAgICAgI2VuZGlmCistICAgIGlmICghcHlfc3JjZmlsZSkgZ290byBiYWQ7CistICAgIGlmIChj X2xpbmUpIHsKKy0gICAgICAgICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworLSAgICAgICAgcHlf ZnVuY25hbWUgPSBQeVN0cmluZ19Gcm9tRm9ybWF0KCAiJXMgKCVzOiVkKSIsIGZ1bmNuYW1lLCBf X3B5eF9jZmlsZW5tLCBjX2xpbmUpOworLSAgICAgICAgI2Vsc2UKKy0gICAgICAgIHB5X2Z1bmNu YW1lID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoICIlcyAoJXM6JWQpIiwgZnVuY25hbWUsIF9fcHl4 X2NmaWxlbm0sIGNfbGluZSk7CistICAgICAgICAjZW5kaWYKKy0gICAgfQorLSAgICBlbHNlIHsK KysgICAgUHlfWERFQ1JFRihlbXB0eV9saXN0KTsKKysgICAgUHlfWERFQ1JFRihlbXB0eV9kaWN0 KTsKKysgICAgcmV0dXJuIG1vZHVsZTsKKyt9CisrCisrLyogSW1wb3J0RnJvbSAqLworK3N0YXRp YyBQeU9iamVjdCogX19QeXhfSW1wb3J0RnJvbShQeU9iamVjdCogbW9kdWxlLCBQeU9iamVjdCog bmFtZSkgeworKyAgICBQeU9iamVjdCogdmFsdWUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry KG1vZHVsZSwgbmFtZSk7CisrICAgIGlmICh1bmxpa2VseSghdmFsdWUpICYmIFB5RXJyX0V4Y2Vw dGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CisrICAgICAgICBQeUVycl9Gb3Jt YXQoUHlFeGNfSW1wb3J0RXJyb3IsCisgICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMK Ky0gICAgICAgIHB5X2Z1bmNuYW1lID0gUHlTdHJpbmdfRnJvbVN0cmluZyhmdW5jbmFtZSk7Cisr ICAgICAgICAgICAgImNhbm5vdCBpbXBvcnQgbmFtZSAlLjIzMHMiLCBQeVN0cmluZ19BU19TVFJJ TkcobmFtZSkpOworICAgICAgICAgI2Vsc2UKKy0gICAgICAgIHB5X2Z1bmNuYW1lID0gUHlVbmlj b2RlX0Zyb21TdHJpbmcoZnVuY25hbWUpOworKyAgICAgICAgICAgICJjYW5ub3QgaW1wb3J0IG5h bWUgJVMiLCBuYW1lKTsKKyAgICAgICAgICNlbmRpZgorICAgICB9CistICAgIGlmICghcHlfZnVu Y25hbWUpIGdvdG8gYmFkOworLSAgICBweV9jb2RlID0gX19QeXhfUHlDb2RlX05ldygKKy0gICAg ICAgIDAsCistICAgICAgICAwLAorLSAgICAgICAgMCwKKy0gICAgICAgIDAsCistICAgICAgICAw LAorLSAgICAgICAgX19weXhfZW1wdHlfYnl0ZXMsIC8qUHlPYmplY3QgKmNvZGUsKi8KKy0gICAg ICAgIF9fcHl4X2VtcHR5X3R1cGxlLCAvKlB5T2JqZWN0ICpjb25zdHMsKi8KKy0gICAgICAgIF9f cHl4X2VtcHR5X3R1cGxlLCAvKlB5T2JqZWN0ICpuYW1lcywqLworLSAgICAgICAgX19weXhfZW1w dHlfdHVwbGUsIC8qUHlPYmplY3QgKnZhcm5hbWVzLCovCistICAgICAgICBfX3B5eF9lbXB0eV90 dXBsZSwgLypQeU9iamVjdCAqZnJlZXZhcnMsKi8KKy0gICAgICAgIF9fcHl4X2VtcHR5X3R1cGxl LCAvKlB5T2JqZWN0ICpjZWxsdmFycywqLworLSAgICAgICAgcHlfc3JjZmlsZSwgICAvKlB5T2Jq ZWN0ICpmaWxlbmFtZSwqLworLSAgICAgICAgcHlfZnVuY25hbWUsICAvKlB5T2JqZWN0ICpuYW1l LCovCistICAgICAgICBweV9saW5lLAorLSAgICAgICAgX19weXhfZW1wdHlfYnl0ZXMgIC8qUHlP YmplY3QgKmxub3RhYiovCistICAgICk7CistICAgIFB5X0RFQ1JFRihweV9zcmNmaWxlKTsKKy0g ICAgUHlfREVDUkVGKHB5X2Z1bmNuYW1lKTsKKy0gICAgcmV0dXJuIHB5X2NvZGU7CistYmFkOgor LSAgICBQeV9YREVDUkVGKHB5X3NyY2ZpbGUpOworLSAgICBQeV9YREVDUkVGKHB5X2Z1bmNuYW1l KTsKKy0gICAgcmV0dXJuIE5VTEw7CisrICAgIHJldHVybiB2YWx1ZTsKKyB9Cistc3RhdGljIHZv aWQgX19QeXhfQWRkVHJhY2ViYWNrKGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBpbnQgY19saW5lLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHlfbGluZSwgY29uc3QgY2hhciAq ZmlsZW5hbWUpIHsKKy0gICAgUHlDb2RlT2JqZWN0ICpweV9jb2RlID0gMDsKKy0gICAgUHlGcmFt ZU9iamVjdCAqcHlfZnJhbWUgPSAwOworLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBfX1B5 eF9QeVRocmVhZFN0YXRlX0N1cnJlbnQ7CistICAgIGlmIChjX2xpbmUpIHsKKy0gICAgICAgIGNf bGluZSA9IF9fUHl4X0NMaW5lRm9yVHJhY2ViYWNrKHRzdGF0ZSwgY19saW5lKTsKKysKKysvKiBI YXNBdHRyICovCisrc3RhdGljIENZVEhPTl9JTkxJTkUgaW50IF9fUHl4X0hhc0F0dHIoUHlPYmpl Y3QgKm8sIFB5T2JqZWN0ICpuKSB7CisrICAgIFB5T2JqZWN0ICpyOworKyAgICBpZiAodW5saWtl bHkoIV9fUHl4X1B5QmFzZVN0cmluZ19DaGVjayhuKSkpIHsKKysgICAgICAgIFB5RXJyX1NldFN0 cmluZyhQeUV4Y19UeXBlRXJyb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgImhhc2F0dHIo KTogYXR0cmlidXRlIG5hbWUgbXVzdCBiZSBzdHJpbmciKTsKKysgICAgICAgIHJldHVybiAtMTsK KyAgICAgfQorLSAgICBweV9jb2RlID0gX19weXhfZmluZF9jb2RlX29iamVjdChjX2xpbmUgPyAt Y19saW5lIDogcHlfbGluZSk7CistICAgIGlmICghcHlfY29kZSkgeworLSAgICAgICAgcHlfY29k ZSA9IF9fUHl4X0NyZWF0ZUNvZGVPYmplY3RGb3JUcmFjZWJhY2soCistICAgICAgICAgICAgZnVu Y25hbWUsIGNfbGluZSwgcHlfbGluZSwgZmlsZW5hbWUpOworLSAgICAgICAgaWYgKCFweV9jb2Rl KSBnb3RvIGJhZDsKKy0gICAgICAgIF9fcHl4X2luc2VydF9jb2RlX29iamVjdChjX2xpbmUgPyAt Y19saW5lIDogcHlfbGluZSwgcHlfY29kZSk7CisrICAgIHIgPSBfX1B5eF9HZXRBdHRyKG8sIG4p OworKyAgICBpZiAodW5saWtlbHkoIXIpKSB7CisrICAgICAgICBQeUVycl9DbGVhcigpOworKyAg ICAgICAgcmV0dXJuIDA7CisrICAgIH0gZWxzZSB7CisrICAgICAgICBQeV9ERUNSRUYocik7Cisr ICAgICAgICByZXR1cm4gMTsKKyAgICAgfQorLSAgICBweV9mcmFtZSA9IFB5RnJhbWVfTmV3KAor LSAgICAgICAgdHN0YXRlLCAgICAgICAgICAgIC8qUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCovCist ICAgICAgICBweV9jb2RlLCAgICAgICAgICAgLypQeUNvZGVPYmplY3QgKmNvZGUsKi8KKy0gICAg ICAgIF9fcHl4X2QsICAgIC8qUHlPYmplY3QgKmdsb2JhbHMsKi8KKy0gICAgICAgIDAgICAgICAg ICAgICAgICAgICAvKlB5T2JqZWN0ICpsb2NhbHMqLworLSAgICApOworLSAgICBpZiAoIXB5X2Zy YW1lKSBnb3RvIGJhZDsKKy0gICAgX19QeXhfUHlGcmFtZV9TZXRMaW5lTnVtYmVyKHB5X2ZyYW1l LCBweV9saW5lKTsKKy0gICAgUHlUcmFjZUJhY2tfSGVyZShweV9mcmFtZSk7CistYmFkOgorLSAg ICBQeV9YREVDUkVGKHB5X2NvZGUpOworLSAgICBQeV9YREVDUkVGKHB5X2ZyYW1lKTsKKyB9Cisg CistLyogQ0ludFRvUHkgKi8KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhf UHlJbnRfRnJvbV9pbnQoaW50IHZhbHVlKSB7CistICAgIGNvbnN0IGludCBuZWdfb25lID0gKGlu dCkgKChpbnQpIDAgLSAoaW50KSAxKSwgY29uc3RfemVybyA9IChpbnQpIDA7CistICAgIGNvbnN0 IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOworLSAgICBpZiAoaXNfdW5z aWduZWQpIHsKKy0gICAgICAgIGlmIChzaXplb2YoaW50KSA8IHNpemVvZihsb25nKSkgeworLSAg ICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworLSAgICAgICAg fSBlbHNlIGlmIChzaXplb2YoaW50KSA8PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKKy0gICAg ICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZh bHVlKTsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9m KGludCkgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKKy0gICAgICAgICAgICBy ZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcp IHZhbHVlKTsKKy0jZW5kaWYKKy0gICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIGlm IChzaXplb2YoaW50KSA8PSBzaXplb2YobG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlJ bnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAg ICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGludCkgPD0gc2l6ZW9mKFBZX0xPTkdfTE9ORykpIHsKKy0g ICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05HKSB2YWx1 ZSk7CisrLyogUHlPYmplY3RfR2VuZXJpY0dldEF0dHJOb0RpY3QgKi8KKysjaWYgQ1lUSE9OX1VT RV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCAmJiBQWV9WRVJTSU9OX0hF WCA8IDB4MDMwNzAwMDAKKytzdGF0aWMgUHlPYmplY3QgKl9fUHl4X1JhaXNlR2VuZXJpY0dldEF0 dHJpYnV0ZUVycm9yKFB5VHlwZU9iamVjdCAqdHAsIFB5T2JqZWN0ICphdHRyX25hbWUpIHsKKysg ICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorKyNpZiBQWV9NQUpPUl9WRVJT SU9OID49IDMKKysgICAgICAgICAgICAgICAgICInJS41MHMnIG9iamVjdCBoYXMgbm8gYXR0cmli dXRlICclVSciLAorKyAgICAgICAgICAgICAgICAgdHAtPnRwX25hbWUsIGF0dHJfbmFtZSk7Cisr I2Vsc2UKKysgICAgICAgICAgICAgICAgICInJS41MHMnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRl ICclLjQwMHMnIiwKKysgICAgICAgICAgICAgICAgIHRwLT50cF9uYW1lLCBQeVN0cmluZ19BU19T VFJJTkcoYXR0cl9uYW1lKSk7CisgI2VuZGlmCistICAgICAgICB9CisrICAgIHJldHVybiBOVUxM OworK30KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlPYmplY3RfR2Vu ZXJpY0dldEF0dHJOb0RpY3QoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqIGF0dHJfbmFtZSkgewor KyAgICBQeU9iamVjdCAqZGVzY3I7CisrICAgIFB5VHlwZU9iamVjdCAqdHAgPSBQeV9UWVBFKG9i aik7CisrICAgIGlmICh1bmxpa2VseSghUHlTdHJpbmdfQ2hlY2soYXR0cl9uYW1lKSkpIHsKKysg ICAgICAgIHJldHVybiBQeU9iamVjdF9HZW5lcmljR2V0QXR0cihvYmosIGF0dHJfbmFtZSk7Cisr ICAgIH0KKysgICAgYXNzZXJ0KCF0cC0+dHBfZGljdG9mZnNldCk7CisrICAgIGRlc2NyID0gX1B5 VHlwZV9Mb29rdXAodHAsIGF0dHJfbmFtZSk7CisrICAgIGlmICh1bmxpa2VseSghZGVzY3IpKSB7 CisrICAgICAgICByZXR1cm4gX19QeXhfUmFpc2VHZW5lcmljR2V0QXR0cmlidXRlRXJyb3IodHAs IGF0dHJfbmFtZSk7CisgICAgIH0KKysgICAgUHlfSU5DUkVGKGRlc2NyKTsKKysgICAgI2lmIFBZ X01BSk9SX1ZFUlNJT04gPCAzCisrICAgIGlmIChsaWtlbHkoUHlUeXBlX0hhc0ZlYXR1cmUoUHlf VFlQRShkZXNjciksIFB5X1RQRkxBR1NfSEFWRV9DTEFTUykpKQorKyAgICAjZW5kaWYKKyAgICAg eworLSAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0bGUgPSAoaW50KSoodW5zaWduZWQgY2hh ciAqKSZvbmU7CistICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFy ICopJnZhbHVlOworLSAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShieXRlcywg c2l6ZW9mKGludCksCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRs ZSwgIWlzX3Vuc2lnbmVkKTsKKysgICAgICAgIGRlc2NyZ2V0ZnVuYyBmID0gUHlfVFlQRShkZXNj ciktPnRwX2Rlc2NyX2dldDsKKysgICAgICAgIGlmICh1bmxpa2VseShmKSkgeworKyAgICAgICAg ICAgIFB5T2JqZWN0ICpyZXMgPSBmKGRlc2NyLCBvYmosIChQeU9iamVjdCAqKXRwKTsKKysgICAg ICAgICAgICBQeV9ERUNSRUYoZGVzY3IpOworKyAgICAgICAgICAgIHJldHVybiByZXM7CisrICAg ICAgICB9CisgICAgIH0KKysgICAgcmV0dXJuIGRlc2NyOworIH0KKysjZW5kaWYKKyAKKy0vKiBD SW50RnJvbVB5VmVyaWZ5ICovCistI2RlZmluZSBfX1BZWF9WRVJJRllfUkVUVVJOX0lOVCh0YXJn ZXRfdHlwZSwgZnVuY190eXBlLCBmdW5jX3ZhbHVlKVwKKy0gICAgX19QWVhfX1ZFUklGWV9SRVRV Uk5fSU5UKHRhcmdldF90eXBlLCBmdW5jX3R5cGUsIGZ1bmNfdmFsdWUsIDApCistI2RlZmluZSBf X1BZWF9WRVJJRllfUkVUVVJOX0lOVF9FWEModGFyZ2V0X3R5cGUsIGZ1bmNfdHlwZSwgZnVuY192 YWx1ZSlcCistICAgIF9fUFlYX19WRVJJRllfUkVUVVJOX0lOVCh0YXJnZXRfdHlwZSwgZnVuY190 eXBlLCBmdW5jX3ZhbHVlLCAxKQorLSNkZWZpbmUgX19QWVhfX1ZFUklGWV9SRVRVUk5fSU5UKHRh cmdldF90eXBlLCBmdW5jX3R5cGUsIGZ1bmNfdmFsdWUsIGV4YylcCistICAgIHtcCistICAgICAg ICBmdW5jX3R5cGUgdmFsdWUgPSBmdW5jX3ZhbHVlO1wKKy0gICAgICAgIGlmIChzaXplb2YodGFy Z2V0X3R5cGUpIDwgc2l6ZW9mKGZ1bmNfdHlwZSkpIHtcCistICAgICAgICAgICAgaWYgKHVubGlr ZWx5KHZhbHVlICE9IChmdW5jX3R5cGUpICh0YXJnZXRfdHlwZSkgdmFsdWUpKSB7XAorLSAgICAg ICAgICAgICAgICBmdW5jX3R5cGUgemVybyA9IDA7XAorLSAgICAgICAgICAgICAgICBpZiAoZXhj ICYmIHVubGlrZWx5KHZhbHVlID09IChmdW5jX3R5cGUpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkp XAorLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0YXJnZXRfdHlwZSkgLTE7XAorLSAgICAg ICAgICAgICAgICBpZiAoaXNfdW5zaWduZWQgJiYgdW5saWtlbHkodmFsdWUgPCB6ZXJvKSlcCist ICAgICAgICAgICAgICAgICAgICBnb3RvIHJhaXNlX25lZ19vdmVyZmxvdztcCistICAgICAgICAg ICAgICAgIGVsc2VcCistICAgICAgICAgICAgICAgICAgICBnb3RvIHJhaXNlX292ZXJmbG93O1wK Ky0gICAgICAgICAgICB9XAorLSAgICAgICAgfVwKKy0gICAgICAgIHJldHVybiAodGFyZ2V0X3R5 cGUpIHZhbHVlO1wKKysvKiBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciAqLworKyNpZiBDWVRIT05f VVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQICYmIFBZX1ZFUlNJT05f SEVYIDwgMHgwMzA3MDAwMAorK3N0YXRpYyBQeU9iamVjdCogX19QeXhfUHlPYmplY3RfR2VuZXJp Y0dldEF0dHIoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqIGF0dHJfbmFtZSkgeworKyAgICBpZiAo dW5saWtlbHkoUHlfVFlQRShvYmopLT50cF9kaWN0b2Zmc2V0KSkgeworKyAgICAgICAgcmV0dXJu IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKG9iaiwgYXR0cl9uYW1lKTsKKyAgICAgfQorKyAgICBy ZXR1cm4gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHJOb0RpY3Qob2JqLCBhdHRyX25hbWUp OworK30KKysjZW5kaWYKKyAKKy0vKiBDSW50VG9QeSAqLworLXN0YXRpYyBDWVRIT05fSU5MSU5F IFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChlbnVtIG1wdl9l dmVudF9pZCB2YWx1ZSkgeworLSAgICBjb25zdCBlbnVtIG1wdl9ldmVudF9pZCBuZWdfb25lID0g KGVudW0gbXB2X2V2ZW50X2lkKSAoKGVudW0gbXB2X2V2ZW50X2lkKSAwIC0gKGVudW0gbXB2X2V2 ZW50X2lkKSAxKSwgY29uc3RfemVybyA9IChlbnVtIG1wdl9ldmVudF9pZCkgMDsKKy0gICAgY29u c3QgaW50IGlzX3Vuc2lnbmVkID0gbmVnX29uZSA+IGNvbnN0X3plcm87CistICAgIGlmIChpc191 bnNpZ25lZCkgeworLSAgICAgICAgaWYgKHNpemVvZihlbnVtIG1wdl9ldmVudF9pZCkgPCBzaXpl b2YobG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZh bHVlKTsKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2V2ZW50X2lkKSA8PSBz aXplb2YodW5zaWduZWQgbG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21V bnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKTsKKy0jaWZkZWYgSEFWRV9MT05HX0xP TkcKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2V2ZW50X2lkKSA8PSBzaXpl b2YodW5zaWduZWQgUFlfTE9OR19MT05HKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdf RnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykgdmFsdWUpOworKy8q IFNldFZUYWJsZSAqLworK3N0YXRpYyBpbnQgX19QeXhfU2V0VnRhYmxlKFB5T2JqZWN0ICpkaWN0 LCB2b2lkICp2dGFibGUpIHsKKysjaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMjA3MDAwMAorKyAg ICBQeU9iamVjdCAqb2IgPSBQeUNhcHN1bGVfTmV3KHZ0YWJsZSwgMCwgMCk7CisrI2Vsc2UKKysg ICAgUHlPYmplY3QgKm9iID0gUHlDT2JqZWN0X0Zyb21Wb2lkUHRyKHZ0YWJsZSwgMCk7CisrI2Vu ZGlmCisrICAgIGlmICghb2IpCisrICAgICAgICBnb3RvIGJhZDsKKysgICAgaWYgKFB5RGljdF9T ZXRJdGVtKGRpY3QsIF9fcHl4X25fc19weXhfdnRhYmxlLCBvYikgPCAwKQorKyAgICAgICAgZ290 byBiYWQ7CisrICAgIFB5X0RFQ1JFRihvYik7CisrICAgIHJldHVybiAwOworK2JhZDoKKysgICAg UHlfWERFQ1JFRihvYik7CisrICAgIHJldHVybiAtMTsKKyt9CisrCisrLyogUHlPYmplY3RHZXRB dHRyU3RyTm9FcnJvciAqLworK3N0YXRpYyB2b2lkIF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHJf Q2xlYXJBdHRyaWJ1dGVFcnJvcih2b2lkKSB7CisrICAgIF9fUHl4X1B5VGhyZWFkU3RhdGVfZGVj bGFyZQorKyAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2lnbgorKyAgICBpZiAobGlrZWx5KF9f UHl4X1B5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSkKKysgICAg ICAgIF9fUHl4X1B5RXJyX0NsZWFyKCk7CisrfQorK3N0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2Jq ZWN0KiBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyTm9FcnJvcihQeU9iamVjdCogb2JqLCBQeU9i amVjdCogYXR0cl9uYW1lKSB7CisrICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisrI2lmIENZVEhPTl9D T01QSUxJTkdfSU5fQ1BZVEhPTiAmJiBDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgUFlfVkVSU0lP Tl9IRVggPj0gMHgwMzA3MDBCMQorKyAgICBQeVR5cGVPYmplY3QqIHRwID0gUHlfVFlQRShvYmop OworKyAgICBpZiAobGlrZWx5KHRwLT50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0 QXR0cikpIHsKKysgICAgICAgIHJldHVybiBfUHlPYmplY3RfR2VuZXJpY0dldEF0dHJXaXRoRGlj dChvYmosIGF0dHJfbmFtZSwgTlVMTCwgMSk7CisrICAgIH0KKysjZW5kaWYKKysgICAgcmVzdWx0 ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihvYmosIGF0dHJfbmFtZSk7CisrICAgIGlmICh1 bmxpa2VseSghcmVzdWx0KSkgeworKyAgICAgICAgX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cl9D bGVhckF0dHJpYnV0ZUVycm9yKCk7CisrICAgIH0KKysgICAgcmV0dXJuIHJlc3VsdDsKKyt9Cisr CisrLyogU2V0dXBSZWR1Y2UgKi8KKytzdGF0aWMgaW50IF9fUHl4X3NldHVwX3JlZHVjZV9pc19u YW1lZChQeU9iamVjdCogbWV0aCwgUHlPYmplY3QqIG5hbWUpIHsKKysgIGludCByZXQ7CisrICBQ eU9iamVjdCAqbmFtZV9hdHRyOworKyAgbmFtZV9hdHRyID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihtZXRoLCBfX3B5eF9uX3NfbmFtZSk7CisrICBpZiAobGlrZWx5KG5hbWVfYXR0cikpIHsK KysgICAgICByZXQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wobmFtZV9hdHRyLCBuYW1lLCBQ eV9FUSk7CisrICB9IGVsc2UgeworKyAgICAgIHJldCA9IC0xOworKyAgfQorKyAgaWYgKHVubGlr ZWx5KHJldCA8IDApKSB7CisrICAgICAgUHlFcnJfQ2xlYXIoKTsKKysgICAgICByZXQgPSAwOwor KyAgfQorKyAgUHlfWERFQ1JFRihuYW1lX2F0dHIpOworKyAgcmV0dXJuIHJldDsKKyt9Cisrc3Rh dGljIGludCBfX1B5eF9zZXR1cF9yZWR1Y2UoUHlPYmplY3QqIHR5cGVfb2JqKSB7CisrICAgIGlu dCByZXQgPSAwOworKyAgICBQeU9iamVjdCAqb2JqZWN0X3JlZHVjZSA9IE5VTEw7CisrICAgIFB5 T2JqZWN0ICpvYmplY3RfcmVkdWNlX2V4ID0gTlVMTDsKKysgICAgUHlPYmplY3QgKnJlZHVjZSA9 IE5VTEw7CisrICAgIFB5T2JqZWN0ICpyZWR1Y2VfZXggPSBOVUxMOworKyAgICBQeU9iamVjdCAq cmVkdWNlX2N5dGhvbiA9IE5VTEw7CisrICAgIFB5T2JqZWN0ICpzZXRzdGF0ZSA9IE5VTEw7Cisr ICAgIFB5T2JqZWN0ICpzZXRzdGF0ZV9jeXRob24gPSBOVUxMOworKyNpZiBDWVRIT05fVVNFX1BZ VFlQRV9MT09LVVAKKysgICAgaWYgKF9QeVR5cGVfTG9va3VwKChQeVR5cGVPYmplY3QqKXR5cGVf b2JqLCBfX3B5eF9uX3NfZ2V0c3RhdGUpKSBnb3RvIF9fUFlYX0dPT0Q7CisrI2Vsc2UKKysgICAg aWYgKFB5T2JqZWN0X0hhc0F0dHIodHlwZV9vYmosIF9fcHl4X25fc19nZXRzdGF0ZSkpIGdvdG8g X19QWVhfR09PRDsKKyAjZW5kaWYKKy0gICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKy0gICAgICAg IGlmIChzaXplb2YoZW51bSBtcHZfZXZlbnRfaWQpIDw9IHNpemVvZihsb25nKSkgeworLSAgICAg ICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworLSNpZmRlZiBIQVZF X0xPTkdfTE9ORworLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZXZlbnRfaWQp IDw9IHNpemVvZihQWV9MT05HX0xPTkcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19G cm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORykgdmFsdWUpOworKyNpZiBDWVRIT05fVVNFX1BZVFlQ RV9MT09LVVAKKysgICAgb2JqZWN0X3JlZHVjZV9leCA9IF9QeVR5cGVfTG9va3VwKCZQeUJhc2VP YmplY3RfVHlwZSwgX19weXhfbl9zX3JlZHVjZV9leCk7IGlmICghb2JqZWN0X3JlZHVjZV9leCkg Z290byBfX1BZWF9CQUQ7CisrI2Vsc2UKKysgICAgb2JqZWN0X3JlZHVjZV9leCA9IF9fUHl4X1B5 T2JqZWN0X0dldEF0dHJTdHIoKFB5T2JqZWN0KikmUHlCYXNlT2JqZWN0X1R5cGUsIF9fcHl4X25f c19yZWR1Y2VfZXgpOyBpZiAoIW9iamVjdF9yZWR1Y2VfZXgpIGdvdG8gX19QWVhfQkFEOworKyNl bmRpZgorKyAgICByZWR1Y2VfZXggPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKHR5cGVfb2Jq LCBfX3B5eF9uX3NfcmVkdWNlX2V4KTsgaWYgKHVubGlrZWx5KCFyZWR1Y2VfZXgpKSBnb3RvIF9f UFlYX0JBRDsKKysgICAgaWYgKHJlZHVjZV9leCA9PSBvYmplY3RfcmVkdWNlX2V4KSB7CisrI2lm IENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUAorKyAgICAgICAgb2JqZWN0X3JlZHVjZSA9IF9QeVR5 cGVfTG9va3VwKCZQeUJhc2VPYmplY3RfVHlwZSwgX19weXhfbl9zX3JlZHVjZSk7IGlmICghb2Jq ZWN0X3JlZHVjZSkgZ290byBfX1BZWF9CQUQ7CisrI2Vsc2UKKysgICAgICAgIG9iamVjdF9yZWR1 Y2UgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKChQeU9iamVjdCopJlB5QmFzZU9iamVjdF9U eXBlLCBfX3B5eF9uX3NfcmVkdWNlKTsgaWYgKCFvYmplY3RfcmVkdWNlKSBnb3RvIF9fUFlYX0JB RDsKKyAjZW5kaWYKKysgICAgICAgIHJlZHVjZSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIo dHlwZV9vYmosIF9fcHl4X25fc19yZWR1Y2UpOyBpZiAodW5saWtlbHkoIXJlZHVjZSkpIGdvdG8g X19QWVhfQkFEOworKyAgICAgICAgaWYgKHJlZHVjZSA9PSBvYmplY3RfcmVkdWNlIHx8IF9fUHl4 X3NldHVwX3JlZHVjZV9pc19uYW1lZChyZWR1Y2UsIF9fcHl4X25fc19yZWR1Y2VfY3l0aG9uKSkg eworKyAgICAgICAgICAgIHJlZHVjZV9jeXRob24gPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3Ry Tm9FcnJvcih0eXBlX29iaiwgX19weXhfbl9zX3JlZHVjZV9jeXRob24pOworKyAgICAgICAgICAg IGlmIChsaWtlbHkocmVkdWNlX2N5dGhvbikpIHsKKysgICAgICAgICAgICAgICAgcmV0ID0gUHlE aWN0X1NldEl0ZW0oKChQeVR5cGVPYmplY3QqKXR5cGVfb2JqKS0+dHBfZGljdCwgX19weXhfbl9z X3JlZHVjZSwgcmVkdWNlX2N5dGhvbik7IGlmICh1bmxpa2VseShyZXQgPCAwKSkgZ290byBfX1BZ WF9CQUQ7CisrICAgICAgICAgICAgICAgIHJldCA9IFB5RGljdF9EZWxJdGVtKCgoUHlUeXBlT2Jq ZWN0Kil0eXBlX29iaiktPnRwX2RpY3QsIF9fcHl4X25fc19yZWR1Y2VfY3l0aG9uKTsgaWYgKHVu bGlrZWx5KHJldCA8IDApKSBnb3RvIF9fUFlYX0JBRDsKKysgICAgICAgICAgICB9IGVsc2UgaWYg KHJlZHVjZSA9PSBvYmplY3RfcmVkdWNlIHx8IFB5RXJyX09jY3VycmVkKCkpIHsKKysgICAgICAg ICAgICAgICAgZ290byBfX1BZWF9CQUQ7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHNl dHN0YXRlID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cih0eXBlX29iaiwgX19weXhfbl9zX3Nl dHN0YXRlKTsKKysgICAgICAgICAgICBpZiAoIXNldHN0YXRlKSBQeUVycl9DbGVhcigpOworKyAg ICAgICAgICAgIGlmICghc2V0c3RhdGUgfHwgX19QeXhfc2V0dXBfcmVkdWNlX2lzX25hbWVkKHNl dHN0YXRlLCBfX3B5eF9uX3Nfc2V0c3RhdGVfY3l0aG9uKSkgeworKyAgICAgICAgICAgICAgICBz ZXRzdGF0ZV9jeXRob24gPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyTm9FcnJvcih0eXBlX29i aiwgX19weXhfbl9zX3NldHN0YXRlX2N5dGhvbik7CisrICAgICAgICAgICAgICAgIGlmIChsaWtl bHkoc2V0c3RhdGVfY3l0aG9uKSkgeworKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gUHlEaWN0 X1NldEl0ZW0oKChQeVR5cGVPYmplY3QqKXR5cGVfb2JqKS0+dHBfZGljdCwgX19weXhfbl9zX3Nl dHN0YXRlLCBzZXRzdGF0ZV9jeXRob24pOyBpZiAodW5saWtlbHkocmV0IDwgMCkpIGdvdG8gX19Q WVhfQkFEOworKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gUHlEaWN0X0RlbEl0ZW0oKChQeVR5 cGVPYmplY3QqKXR5cGVfb2JqKS0+dHBfZGljdCwgX19weXhfbl9zX3NldHN0YXRlX2N5dGhvbik7 IGlmICh1bmxpa2VseShyZXQgPCAwKSkgZ290byBfX1BZWF9CQUQ7CisrICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoIXNldHN0YXRlIHx8IFB5RXJyX09jY3VycmVkKCkpIHsKKysgICAgICAgICAg ICAgICAgICAgIGdvdG8gX19QWVhfQkFEOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAg ICAgfQorKyAgICAgICAgICAgIFB5VHlwZV9Nb2RpZmllZCgoUHlUeXBlT2JqZWN0Kil0eXBlX29i aik7CisgICAgICAgICB9CisgICAgIH0KKy0gICAgeworLSAgICAgICAgaW50IG9uZSA9IDE7IGlu dCBsaXR0bGUgPSAoaW50KSoodW5zaWduZWQgY2hhciAqKSZvbmU7CistICAgICAgICB1bnNpZ25l ZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOworLSAgICAgICAgcmV0dXJu IF9QeUxvbmdfRnJvbUJ5dGVBcnJheShieXRlcywgc2l6ZW9mKGVudW0gbXB2X2V2ZW50X2lkKSwK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0dGxlLCAhaXNfdW5zaWdu ZWQpOworLSAgICB9CisrICAgIGdvdG8gX19QWVhfR09PRDsKKytfX1BZWF9CQUQ6CisrICAgIGlm ICghUHlFcnJfT2NjdXJyZWQoKSkKKysgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1l RXJyb3IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBwaWNrbGluZyBmb3IgJXMiLCAoKFB5VHlwZU9i amVjdCopdHlwZV9vYmopLT50cF9uYW1lKTsKKysgICAgcmV0ID0gLTE7CisrX19QWVhfR09PRDoK KysjaWYgIUNZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUAorKyAgICBQeV9YREVDUkVGKG9iamVjdF9y ZWR1Y2UpOworKyAgICBQeV9YREVDUkVGKG9iamVjdF9yZWR1Y2VfZXgpOworKyNlbmRpZgorKyAg ICBQeV9YREVDUkVGKHJlZHVjZSk7CisrICAgIFB5X1hERUNSRUYocmVkdWNlX2V4KTsKKysgICAg UHlfWERFQ1JFRihyZWR1Y2VfY3l0aG9uKTsKKysgICAgUHlfWERFQ1JFRihzZXRzdGF0ZSk7Cisr ICAgIFB5X1hERUNSRUYoc2V0c3RhdGVfY3l0aG9uKTsKKysgICAgcmV0dXJuIHJldDsKKyB9Cisg CistLyogQ0ludFRvUHkgKi8KKy1zdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhf UHlJbnRfRnJvbV91bnNpZ25lZF9sb25nKHVuc2lnbmVkIGxvbmcgdmFsdWUpIHsKKy0gICAgY29u c3QgdW5zaWduZWQgbG9uZyBuZWdfb25lID0gKHVuc2lnbmVkIGxvbmcpICgodW5zaWduZWQgbG9u ZykgMCAtICh1bnNpZ25lZCBsb25nKSAxKSwgY29uc3RfemVybyA9ICh1bnNpZ25lZCBsb25nKSAw OworLSAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsKKy0g ICAgaWYgKGlzX3Vuc2lnbmVkKSB7CistICAgICAgICBpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcp IDwgc2l6ZW9mKGxvbmcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChs b25nKSB2YWx1ZSk7CistICAgICAgICB9IGVsc2UgaWYgKHNpemVvZih1bnNpZ25lZCBsb25nKSA8 PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zy b21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKTsKKy0jaWZkZWYgSEFWRV9MT05H X0xPTkcKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIDw9IHNpemVv Zih1bnNpZ25lZCBQWV9MT05HX0xPTkcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19G cm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKSB2YWx1ZSk7CisrLyog Q2FsY3VsYXRlTWV0YWNsYXNzICovCisrc3RhdGljIFB5T2JqZWN0ICpfX1B5eF9DYWxjdWxhdGVN ZXRhY2xhc3MoUHlUeXBlT2JqZWN0ICptZXRhY2xhc3MsIFB5T2JqZWN0ICpiYXNlcykgeworKyAg ICBQeV9zc2l6ZV90IGksIG5iYXNlcyA9IFB5VHVwbGVfR0VUX1NJWkUoYmFzZXMpOworKyAgICBm b3IgKGk9MDsgaSA8IG5iYXNlczsgaSsrKSB7CisrICAgICAgICBQeVR5cGVPYmplY3QgKnRtcHR5 cGU7CisrICAgICAgICBQeU9iamVjdCAqdG1wID0gUHlUdXBsZV9HRVRfSVRFTShiYXNlcywgaSk7 CisrICAgICAgICB0bXB0eXBlID0gUHlfVFlQRSh0bXApOworKyNpZiBQWV9NQUpPUl9WRVJTSU9O IDwgMworKyAgICAgICAgaWYgKHRtcHR5cGUgPT0gJlB5Q2xhc3NfVHlwZSkKKysgICAgICAgICAg ICBjb250aW51ZTsKKyAjZW5kaWYKKysgICAgICAgIGlmICghbWV0YWNsYXNzKSB7CisrICAgICAg ICAgICAgbWV0YWNsYXNzID0gdG1wdHlwZTsKKysgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg ICAgIH0KKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIGlmIChzaXplb2YodW5zaWduZWQgbG9uZykg PD0gc2l6ZW9mKGxvbmcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChs b25nKSB2YWx1ZSk7CistI2lmZGVmIEhBVkVfTE9OR19MT05HCistICAgICAgICB9IGVsc2UgaWYg KHNpemVvZih1bnNpZ25lZCBsb25nKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworLSAgICAg ICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsK Ky0jZW5kaWYKKysgICAgICAgIGlmIChQeVR5cGVfSXNTdWJ0eXBlKG1ldGFjbGFzcywgdG1wdHlw ZSkpCisrICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICBpZiAoUHlUeXBlX0lzU3VidHlw ZSh0bXB0eXBlLCBtZXRhY2xhc3MpKSB7CisrICAgICAgICAgICAgbWV0YWNsYXNzID0gdG1wdHlw ZTsKKysgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgIH0KKysgICAgICAgIFB5RXJyX1Nl dFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGFj bGFzcyBjb25mbGljdDogIgorKyAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgbWV0YWNsYXNz IG9mIGEgZGVyaXZlZCBjbGFzcyAiCisrICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUg YSAobm9uLXN0cmljdCkgc3ViY2xhc3MgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICJvZiB0 aGUgbWV0YWNsYXNzZXMgb2YgYWxsIGl0cyBiYXNlcyIpOworKyAgICAgICAgcmV0dXJuIE5VTEw7 CisgICAgIH0KKy0gICAgeworLSAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0bGUgPSAoaW50 KSoodW5zaWduZWQgY2hhciAqKSZvbmU7CistICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcyA9 ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOworLSAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5 dGVBcnJheShieXRlcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7CisrICAgIGlmICghbWV0 YWNsYXNzKSB7CisrI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAgICAgICBtZXRhY2xhc3Mg PSAmUHlDbGFzc19UeXBlOworKyNlbHNlCisrICAgICAgICBtZXRhY2xhc3MgPSAmUHlUeXBlX1R5 cGU7CisrI2VuZGlmCisgICAgIH0KKysgICAgUHlfSU5DUkVGKChQeU9iamVjdCopIG1ldGFjbGFz cyk7CisrICAgIHJldHVybiAoUHlPYmplY3QqKSBtZXRhY2xhc3M7CisgfQorIAorLS8qIENJbnRU b1B5ICovCistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2Vycm9yKGVudW0gbXB2X2Vycm9yIHZhbHVlKSB7CistICAgIGNvbnN0IGVudW0g bXB2X2Vycm9yIG5lZ19vbmUgPSAoZW51bSBtcHZfZXJyb3IpICgoZW51bSBtcHZfZXJyb3IpIDAg LSAoZW51bSBtcHZfZXJyb3IpIDEpLCBjb25zdF96ZXJvID0gKGVudW0gbXB2X2Vycm9yKSAwOwor LSAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsKKy0gICAg aWYgKGlzX3Vuc2lnbmVkKSB7CistICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X2Vycm9yKSA8 IHNpemVvZihsb25nKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9u ZykgdmFsdWUpOworLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZXJyb3IpIDw9 IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJv bVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUpOworLSNpZmRlZiBIQVZFX0xPTkdf TE9ORworLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZXJyb3IpIDw9IHNpemVv Zih1bnNpZ25lZCBQWV9MT05HX0xPTkcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19G cm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKSB2YWx1ZSk7CistI2Vu ZGlmCisrLyogUHkzQ2xhc3NDcmVhdGUgKi8KKytzdGF0aWMgUHlPYmplY3QgKl9fUHl4X1B5M01l dGFjbGFzc1ByZXBhcmUoUHlPYmplY3QgKm1ldGFjbGFzcywgUHlPYmplY3QgKmJhc2VzLCBQeU9i amVjdCAqbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHlPYmplY3QgKnF1YWxuYW1lLCBQeU9iamVjdCAqbWt3LCBQeU9iamVjdCAqbW9kbmFtZSwgUHlP YmplY3QgKmRvYykgeworKyAgICBQeU9iamVjdCAqbnM7CisrICAgIGlmIChtZXRhY2xhc3MpIHsK KysgICAgICAgIFB5T2JqZWN0ICpwcmVwID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihtZXRh Y2xhc3MsIF9fcHl4X25fc19wcmVwYXJlKTsKKysgICAgICAgIGlmIChwcmVwKSB7CisrICAgICAg ICAgICAgUHlPYmplY3QgKnBhcmdzID0gUHlUdXBsZV9QYWNrKDIsIG5hbWUsIGJhc2VzKTsKKysg ICAgICAgICAgICBpZiAodW5saWtlbHkoIXBhcmdzKSkgeworKyAgICAgICAgICAgICAgICBQeV9E RUNSRUYocHJlcCk7CisrICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgICAg IH0KKysgICAgICAgICAgICBucyA9IFB5T2JqZWN0X0NhbGwocHJlcCwgcGFyZ3MsIG1rdyk7Cisr ICAgICAgICAgICAgUHlfREVDUkVGKHByZXApOworKyAgICAgICAgICAgIFB5X0RFQ1JFRihwYXJn cyk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGlmICh1bmxpa2VseSghUHlFcnJf RXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpKQorKyAgICAgICAgICAgICAg ICByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICBQeUVycl9DbGVhcigpOworKyAgICAgICAgICAg IG5zID0gUHlEaWN0X05ldygpOworICAgICAgICAgfQorICAgICB9IGVsc2UgeworLSAgICAgICAg aWYgKHNpemVvZihlbnVtIG1wdl9lcnJvcikgPD0gc2l6ZW9mKGxvbmcpKSB7CistICAgICAgICAg ICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CistI2lmZGVmIEhBVkVfTE9O R19MT05HCistICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihlbnVtIG1wdl9lcnJvcikgPD0gc2l6 ZW9mKFBZX0xPTkdfTE9ORykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25n TG9uZygoUFlfTE9OR19MT05HKSB2YWx1ZSk7CistI2VuZGlmCistICAgICAgICB9CistICAgIH0K Ky0gICAgeworLSAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0bGUgPSAoaW50KSoodW5zaWdu ZWQgY2hhciAqKSZvbmU7CistICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25l ZCBjaGFyICopJnZhbHVlOworLSAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShi eXRlcywgc2l6ZW9mKGVudW0gbXB2X2Vycm9yKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGl0dGxlLCAhaXNfdW5zaWduZWQpOworKyAgICAgICAgbnMgPSBQeURpY3Rf TmV3KCk7CisgICAgIH0KKysgICAgaWYgKHVubGlrZWx5KCFucykpCisrICAgICAgICByZXR1cm4g TlVMTDsKKysgICAgaWYgKHVubGlrZWx5KFB5T2JqZWN0X1NldEl0ZW0obnMsIF9fcHl4X25fc19t b2R1bGUsIG1vZG5hbWUpIDwgMCkpIGdvdG8gYmFkOworKyAgICBpZiAodW5saWtlbHkoUHlPYmpl Y3RfU2V0SXRlbShucywgX19weXhfbl9zX3F1YWxuYW1lLCBxdWFsbmFtZSkgPCAwKSkgZ290byBi YWQ7CisrICAgIGlmICh1bmxpa2VseShkb2MgJiYgUHlPYmplY3RfU2V0SXRlbShucywgX19weXhf bl9zX2RvYywgZG9jKSA8IDApKSBnb3RvIGJhZDsKKysgICAgcmV0dXJuIG5zOworK2JhZDoKKysg ICAgUHlfREVDUkVGKG5zKTsKKysgICAgcmV0dXJuIE5VTEw7CisgfQorLQorLS8qIENJbnRUb1B5 ICovCistc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fZW51 bV9fbXB2X2xvZ19sZXZlbChlbnVtIG1wdl9sb2dfbGV2ZWwgdmFsdWUpIHsKKy0gICAgY29uc3Qg ZW51bSBtcHZfbG9nX2xldmVsIG5lZ19vbmUgPSAoZW51bSBtcHZfbG9nX2xldmVsKSAoKGVudW0g bXB2X2xvZ19sZXZlbCkgMCAtIChlbnVtIG1wdl9sb2dfbGV2ZWwpIDEpLCBjb25zdF96ZXJvID0g KGVudW0gbXB2X2xvZ19sZXZlbCkgMDsKKy0gICAgY29uc3QgaW50IGlzX3Vuc2lnbmVkID0gbmVn X29uZSA+IGNvbnN0X3plcm87CistICAgIGlmIChpc191bnNpZ25lZCkgeworLSAgICAgICAgaWYg KHNpemVvZihlbnVtIG1wdl9sb2dfbGV2ZWwpIDwgc2l6ZW9mKGxvbmcpKSB7CistICAgICAgICAg ICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CistICAgICAgICB9IGVsc2Ug aWYgKHNpemVvZihlbnVtIG1wdl9sb2dfbGV2ZWwpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkg eworLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQg bG9uZykgdmFsdWUpOworLSNpZmRlZiBIQVZFX0xPTkdfTE9ORworLSAgICAgICAgfSBlbHNlIGlm IChzaXplb2YoZW51bSBtcHZfbG9nX2xldmVsKSA8PSBzaXplb2YodW5zaWduZWQgUFlfTE9OR19M T05HKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmco KHVuc2lnbmVkIFBZX0xPTkdfTE9ORykgdmFsdWUpOworLSNlbmRpZgorK3N0YXRpYyBQeU9iamVj dCAqX19QeXhfUHkzQ2xhc3NDcmVhdGUoUHlPYmplY3QgKm1ldGFjbGFzcywgUHlPYmplY3QgKm5h bWUsIFB5T2JqZWN0ICpiYXNlcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB5T2JqZWN0ICpkaWN0LCBQeU9iamVjdCAqbWt3LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGNhbGN1bGF0ZV9tZXRhY2xhc3MsIGludCBhbGxvd19weTJf bWV0YWNsYXNzKSB7CisrICAgIFB5T2JqZWN0ICpyZXN1bHQsICptYXJnczsKKysgICAgUHlPYmpl Y3QgKm93bmVkX21ldGFjbGFzcyA9IE5VTEw7CisrICAgIGlmIChhbGxvd19weTJfbWV0YWNsYXNz KSB7CisrICAgICAgICBvd25lZF9tZXRhY2xhc3MgPSBQeU9iamVjdF9HZXRJdGVtKGRpY3QsIF9f cHl4X25fc19tZXRhY2xhc3MpOworKyAgICAgICAgaWYgKG93bmVkX21ldGFjbGFzcykgeworKyAg ICAgICAgICAgIG1ldGFjbGFzcyA9IG93bmVkX21ldGFjbGFzczsKKysgICAgICAgIH0gZWxzZSBp ZiAobGlrZWx5KFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKSkgeworKyAg ICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAg IHJldHVybiBOVUxMOworICAgICAgICAgfQorKyAgICB9CisrICAgIGlmIChjYWxjdWxhdGVfbWV0 YWNsYXNzICYmICghbWV0YWNsYXNzIHx8IFB5VHlwZV9DaGVjayhtZXRhY2xhc3MpKSkgeworKyAg ICAgICAgbWV0YWNsYXNzID0gX19QeXhfQ2FsY3VsYXRlTWV0YWNsYXNzKChQeVR5cGVPYmplY3Qq KSBtZXRhY2xhc3MsIGJhc2VzKTsKKysgICAgICAgIFB5X1hERUNSRUYob3duZWRfbWV0YWNsYXNz KTsKKysgICAgICAgIGlmICh1bmxpa2VseSghbWV0YWNsYXNzKSkKKysgICAgICAgICAgICByZXR1 cm4gTlVMTDsKKysgICAgICAgIG93bmVkX21ldGFjbGFzcyA9IG1ldGFjbGFzczsKKysgICAgfQor KyAgICBtYXJncyA9IFB5VHVwbGVfUGFjaygzLCBuYW1lLCBiYXNlcywgZGljdCk7CisrICAgIGlm ICh1bmxpa2VseSghbWFyZ3MpKSB7CisrICAgICAgICByZXN1bHQgPSBOVUxMOworICAgICB9IGVs c2UgeworLSAgICAgICAgaWYgKHNpemVvZihlbnVtIG1wdl9sb2dfbGV2ZWwpIDw9IHNpemVvZihs b25nKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUp OworLSNpZmRlZiBIQVZFX0xPTkdfTE9ORworLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51 bSBtcHZfbG9nX2xldmVsKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworLSAgICAgICAgICAg IHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsKKy0jZW5k aWYKKy0gICAgICAgIH0KKysgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGwobWV0YWNsYXNz LCBtYXJncywgbWt3KTsKKysgICAgICAgIFB5X0RFQ1JFRihtYXJncyk7CisgICAgIH0KKy0gICAg eworLSAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0bGUgPSAoaW50KSoodW5zaWduZWQgY2hh ciAqKSZvbmU7CistICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFy ICopJnZhbHVlOworLSAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShieXRlcywg c2l6ZW9mKGVudW0gbXB2X2xvZ19sZXZlbCksCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2lnbmVkKTsKKysgICAgUHlfWERFQ1JFRihvd25lZF9t ZXRhY2xhc3MpOworKyAgICByZXR1cm4gcmVzdWx0OworK30KKysKKysvKiBHZXROYW1lSW5DbGFz cyAqLworK3N0YXRpYyBQeU9iamVjdCAqX19QeXhfR2V0R2xvYmFsTmFtZUFmdGVyQXR0cmlidXRl TG9va3VwKFB5T2JqZWN0ICpuYW1lKSB7CisrICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisrICAgIF9f UHl4X1B5VGhyZWFkU3RhdGVfZGVjbGFyZQorKyAgICBfX1B5eF9QeVRocmVhZFN0YXRlX2Fzc2ln bgorKyAgICBpZiAodW5saWtlbHkoIV9fUHl4X1B5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNf QXR0cmlidXRlRXJyb3IpKSkKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICBfX1B5eF9QeUVy cl9DbGVhcigpOworKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lVW5jYWNoZWQocmVzdWx0 LCBuYW1lKTsKKysgICAgcmV0dXJuIHJlc3VsdDsKKyt9Cisrc3RhdGljIFB5T2JqZWN0ICpfX1B5 eF9fR2V0TmFtZUluQ2xhc3MoUHlPYmplY3QgKm5tc3BhY2UsIFB5T2JqZWN0ICpuYW1lKSB7Cisr ICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisrICAgIHJlc3VsdCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0 dHJTdHIobm1zcGFjZSwgbmFtZSk7CisrICAgIGlmICghcmVzdWx0KSB7CisrICAgICAgICByZXN1 bHQgPSBfX1B5eF9HZXRHbG9iYWxOYW1lQWZ0ZXJBdHRyaWJ1dGVMb29rdXAobmFtZSk7CisgICAg IH0KKysgICAgcmV0dXJuIHJlc3VsdDsKKyB9CisgCistLyogQ0ludFRvUHkgKi8KKy1zdGF0aWMg Q1lUSE9OX0lOTElORSBQeU9iamVjdCogX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5kX2Zp bGVfcmVhc29uKGVudW0gbXB2X2VuZF9maWxlX3JlYXNvbiB2YWx1ZSkgeworLSAgICBjb25zdCBl bnVtIG1wdl9lbmRfZmlsZV9yZWFzb24gbmVnX29uZSA9IChlbnVtIG1wdl9lbmRfZmlsZV9yZWFz b24pICgoZW51bSBtcHZfZW5kX2ZpbGVfcmVhc29uKSAwIC0gKGVudW0gbXB2X2VuZF9maWxlX3Jl YXNvbikgMSksIGNvbnN0X3plcm8gPSAoZW51bSBtcHZfZW5kX2ZpbGVfcmVhc29uKSAwOworLSAg ICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsKKy0gICAgaWYg KGlzX3Vuc2lnbmVkKSB7CistICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X2VuZF9maWxlX3Jl YXNvbikgPCBzaXplb2YobG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxv bmcoKGxvbmcpIHZhbHVlKTsKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2Vu ZF9maWxlX3JlYXNvbikgPD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7CistICAgICAgICAgICAg cmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKSB2YWx1ZSk7Cist I2lmZGVmIEhBVkVfTE9OR19MT05HCistICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihlbnVtIG1w dl9lbmRfZmlsZV9yZWFzb24pIDw9IHNpemVvZih1bnNpZ25lZCBQWV9MT05HX0xPTkcpKSB7Cist ICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQg UFlfTE9OR19MT05HKSB2YWx1ZSk7CistI2VuZGlmCistICAgICAgICB9CistICAgIH0gZWxzZSB7 CistICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X2VuZF9maWxlX3JlYXNvbikgPD0gc2l6ZW9m KGxvbmcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1 ZSk7CistI2lmZGVmIEhBVkVfTE9OR19MT05HCistICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihl bnVtIG1wdl9lbmRfZmlsZV9yZWFzb24pIDw9IHNpemVvZihQWV9MT05HX0xPTkcpKSB7CistICAg ICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORykgdmFsdWUp OworKy8qIENMaW5lSW5UcmFjZWJhY2sgKi8KKysjaWZuZGVmIENZVEhPTl9DTElORV9JTl9UUkFD RUJBQ0sKKytzdGF0aWMgaW50IF9fUHl4X0NMaW5lRm9yVHJhY2ViYWNrKENZVEhPTl9OQ1BfVU5V U0VEIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgaW50IGNfbGluZSkgeworKyAgICBQeU9iamVjdCAq dXNlX2NsaW5lOworKyAgICBQeU9iamVjdCAqcHR5cGUsICpwdmFsdWUsICpwdHJhY2ViYWNrOwor KyNpZiBDWVRIT05fQ09NUElMSU5HX0lOX0NQWVRIT04KKysgICAgUHlPYmplY3QgKipjeXRob25f cnVudGltZV9kaWN0OworICNlbmRpZgorLSAgICAgICAgfQorKyAgICBpZiAodW5saWtlbHkoIV9f cHl4X2N5dGhvbl9ydW50aW1lKSkgeworKyAgICAgICAgcmV0dXJuIGNfbGluZTsKKyAgICAgfQor KyAgICBfX1B5eF9FcnJGZXRjaEluU3RhdGUodHN0YXRlLCAmcHR5cGUsICZwdmFsdWUsICZwdHJh Y2ViYWNrKTsKKysjaWYgQ1lUSE9OX0NPTVBJTElOR19JTl9DUFlUSE9OCisrICAgIGN5dGhvbl9y dW50aW1lX2RpY3QgPSBfUHlPYmplY3RfR2V0RGljdFB0cihfX3B5eF9jeXRob25fcnVudGltZSk7 CisrICAgIGlmIChsaWtlbHkoY3l0aG9uX3J1bnRpbWVfZGljdCkpIHsKKysgICAgICAgIF9fUFlY X1BZX0RJQ1RfTE9PS1VQX0lGX01PRElGSUVEKAorKyAgICAgICAgICAgIHVzZV9jbGluZSwgKmN5 dGhvbl9ydW50aW1lX2RpY3QsCisrICAgICAgICAgICAgX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIo KmN5dGhvbl9ydW50aW1lX2RpY3QsIF9fcHl4X25fc19jbGluZV9pbl90cmFjZWJhY2spKQorKyAg ICB9IGVsc2UKKysjZW5kaWYKKyAgICAgeworLSAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0 bGUgPSAoaW50KSoodW5zaWduZWQgY2hhciAqKSZvbmU7CistICAgICAgICB1bnNpZ25lZCBjaGFy ICpieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOworLSAgICAgICAgcmV0dXJuIF9QeUxv bmdfRnJvbUJ5dGVBcnJheShieXRlcywgc2l6ZW9mKGVudW0gbXB2X2VuZF9maWxlX3JlYXNvbiks CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2ln bmVkKTsKKysgICAgICBQeU9iamVjdCAqdXNlX2NsaW5lX29iaiA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoX19weXhfY3l0aG9uX3J1bnRpbWUsIF9fcHl4X25fc19jbGluZV9pbl90cmFjZWJh Y2spOworKyAgICAgIGlmICh1c2VfY2xpbmVfb2JqKSB7CisrICAgICAgICB1c2VfY2xpbmUgPSBQ eU9iamVjdF9Ob3QodXNlX2NsaW5lX29iaikgPyBQeV9GYWxzZSA6IFB5X1RydWU7CisrICAgICAg ICBQeV9ERUNSRUYodXNlX2NsaW5lX29iaik7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIFB5 RXJyX0NsZWFyKCk7CisrICAgICAgICB1c2VfY2xpbmUgPSBOVUxMOworKyAgICAgIH0KKysgICAg fQorKyAgICBpZiAoIXVzZV9jbGluZSkgeworKyAgICAgICAgY19saW5lID0gMDsKKysgICAgICAg ICh2b2lkKSBQeU9iamVjdF9TZXRBdHRyKF9fcHl4X2N5dGhvbl9ydW50aW1lLCBfX3B5eF9uX3Nf Y2xpbmVfaW5fdHJhY2ViYWNrLCBQeV9GYWxzZSk7CisrICAgIH0KKysgICAgZWxzZSBpZiAodXNl X2NsaW5lID09IFB5X0ZhbHNlIHx8ICh1c2VfY2xpbmUgIT0gUHlfVHJ1ZSAmJiBQeU9iamVjdF9O b3QodXNlX2NsaW5lKSAhPSAwKSkgeworKyAgICAgICAgY19saW5lID0gMDsKKyAgICAgfQorKyAg ICBfX1B5eF9FcnJSZXN0b3JlSW5TdGF0ZSh0c3RhdGUsIHB0eXBlLCBwdmFsdWUsIHB0cmFjZWJh Y2spOworKyAgICByZXR1cm4gY19saW5lOworIH0KKy0KKy0vKiBDSW50VG9QeSAqLworLXN0YXRp YyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9yZW5k ZXJfdXBkYXRlX2ZsYWcoZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnIHZhbHVlKSB7CistICAg IGNvbnN0IGVudW0gbXB2X3JlbmRlcl91cGRhdGVfZmxhZyBuZWdfb25lID0gKGVudW0gbXB2X3Jl bmRlcl91cGRhdGVfZmxhZykgKChlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2ZsYWcpIDAgLSAoZW51 bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSAxKSwgY29uc3RfemVybyA9IChlbnVtIG1wdl9yZW5k ZXJfdXBkYXRlX2ZsYWcpIDA7CistICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUg PiBjb25zdF96ZXJvOworLSAgICBpZiAoaXNfdW5zaWduZWQpIHsKKy0gICAgICAgIGlmIChzaXpl b2YoZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSA8IHNpemVvZihsb25nKSkgeworLSAgICAg ICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworLSAgICAgICAgfSBl bHNlIGlmIChzaXplb2YoZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSA8PSBzaXplb2YodW5z aWduZWQgbG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExv bmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKTsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAg ICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X3JlbmRlcl91cGRhdGVfZmxhZykgPD0gc2l6 ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlMb25n X0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKKyAj ZW5kaWYKKysKKysvKiBDb2RlT2JqZWN0Q2FjaGUgKi8KKytzdGF0aWMgaW50IF9fcHl4X2Jpc2Vj dF9jb2RlX29iamVjdHMoX19QeXhfQ29kZU9iamVjdENhY2hlRW50cnkqIGVudHJpZXMsIGludCBj b3VudCwgaW50IGNvZGVfbGluZSkgeworKyAgICBpbnQgc3RhcnQgPSAwLCBtaWQgPSAwLCBlbmQg PSBjb3VudCAtIDE7CisrICAgIGlmIChlbmQgPj0gMCAmJiBjb2RlX2xpbmUgPiBlbnRyaWVzW2Vu ZF0uY29kZV9saW5lKSB7CisrICAgICAgICByZXR1cm4gY291bnQ7CisrICAgIH0KKysgICAgd2hp bGUgKHN0YXJ0IDwgZW5kKSB7CisrICAgICAgICBtaWQgPSBzdGFydCArIChlbmQgLSBzdGFydCkg LyAyOworKyAgICAgICAgaWYgKGNvZGVfbGluZSA8IGVudHJpZXNbbWlkXS5jb2RlX2xpbmUpIHsK KysgICAgICAgICAgICBlbmQgPSBtaWQ7CisrICAgICAgICB9IGVsc2UgaWYgKGNvZGVfbGluZSA+ IGVudHJpZXNbbWlkXS5jb2RlX2xpbmUpIHsKKysgICAgICAgICAgICAgc3RhcnQgPSBtaWQgKyAx OworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICByZXR1cm4gbWlkOworICAgICAgICAg fQorKyAgICB9CisrICAgIGlmIChjb2RlX2xpbmUgPD0gZW50cmllc1ttaWRdLmNvZGVfbGluZSkg eworKyAgICAgICAgcmV0dXJuIG1pZDsKKyAgICAgfSBlbHNlIHsKKy0gICAgICAgIGlmIChzaXpl b2YoZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSA8PSBzaXplb2YobG9uZykpIHsKKy0gICAg ICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKKy0jaWZkZWYgSEFW RV9MT05HX0xPTkcKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X3JlbmRlcl91 cGRhdGVfZmxhZykgPD0gc2l6ZW9mKFBZX0xPTkdfTE9ORykpIHsKKy0gICAgICAgICAgICByZXR1 cm4gUHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05HKSB2YWx1ZSk7CistI2VuZGlmCist ICAgICAgICB9CisrICAgICAgICByZXR1cm4gbWlkICsgMTsKKyAgICAgfQorLSAgICB7CistICAg ICAgICBpbnQgb25lID0gMTsgaW50IGxpdHRsZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9u ZTsKKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFs dWU7CistICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2Yo ZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGl0dGxlLCAhaXNfdW5zaWduZWQpOworK30KKytzdGF0aWMgUHlDb2RlT2Jq ZWN0ICpfX3B5eF9maW5kX2NvZGVfb2JqZWN0KGludCBjb2RlX2xpbmUpIHsKKysgICAgUHlDb2Rl T2JqZWN0KiBjb2RlX29iamVjdDsKKysgICAgaW50IHBvczsKKysgICAgaWYgKHVubGlrZWx5KCFj b2RlX2xpbmUpIHx8IHVubGlrZWx5KCFfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXMpKSB7CisrICAg ICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKyAgICBwb3MgPSBfX3B5eF9iaXNlY3RfY29kZV9v YmplY3RzKF9fcHl4X2NvZGVfY2FjaGUuZW50cmllcywgX19weXhfY29kZV9jYWNoZS5jb3VudCwg Y29kZV9saW5lKTsKKysgICAgaWYgKHVubGlrZWx5KHBvcyA+PSBfX3B5eF9jb2RlX2NhY2hlLmNv dW50KSB8fCB1bmxpa2VseShfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXNbcG9zXS5jb2RlX2xpbmUg IT0gY29kZV9saW5lKSkgeworKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgIH0KKysgICAgY29k ZV9vYmplY3QgPSBfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXNbcG9zXS5jb2RlX29iamVjdDsKKysg ICAgUHlfSU5DUkVGKGNvZGVfb2JqZWN0KTsKKysgICAgcmV0dXJuIGNvZGVfb2JqZWN0OworIH0K Ky0KKy0vKiBDSW50VG9QeSAqLworLXN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5 eF9QeUludF9Gcm9tX2ludDY0X3QoaW50NjRfdCB2YWx1ZSkgeworLSAgICBjb25zdCBpbnQ2NF90 IG5lZ19vbmUgPSAoaW50NjRfdCkgKChpbnQ2NF90KSAwIC0gKGludDY0X3QpIDEpLCBjb25zdF96 ZXJvID0gKGludDY0X3QpIDA7CistICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUg PiBjb25zdF96ZXJvOworLSAgICBpZiAoaXNfdW5zaWduZWQpIHsKKy0gICAgICAgIGlmIChzaXpl b2YoaW50NjRfdCkgPCBzaXplb2YobG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlJbnRf RnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGludDY0 X3QpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUxv bmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUpOworLSNpZmRlZiBIQVZF X0xPTkdfTE9ORworLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoaW50NjRfdCkgPD0gc2l6ZW9m KHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zy b21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKKy0jZW5k aWYKKytzdGF0aWMgdm9pZCBfX3B5eF9pbnNlcnRfY29kZV9vYmplY3QoaW50IGNvZGVfbGluZSwg UHlDb2RlT2JqZWN0KiBjb2RlX29iamVjdCkgeworKyAgICBpbnQgcG9zLCBpOworKyAgICBfX1B5 eF9Db2RlT2JqZWN0Q2FjaGVFbnRyeSogZW50cmllcyA9IF9fcHl4X2NvZGVfY2FjaGUuZW50cmll czsKKysgICAgaWYgKHVubGlrZWx5KCFjb2RlX2xpbmUpKSB7CisrICAgICAgICByZXR1cm47Cisr ICAgIH0KKysgICAgaWYgKHVubGlrZWx5KCFlbnRyaWVzKSkgeworKyAgICAgICAgZW50cmllcyA9 IChfX1B5eF9Db2RlT2JqZWN0Q2FjaGVFbnRyeSopUHlNZW1fTWFsbG9jKDY0KnNpemVvZihfX1B5 eF9Db2RlT2JqZWN0Q2FjaGVFbnRyeSkpOworKyAgICAgICAgaWYgKGxpa2VseShlbnRyaWVzKSkg eworKyAgICAgICAgICAgIF9fcHl4X2NvZGVfY2FjaGUuZW50cmllcyA9IGVudHJpZXM7CisrICAg ICAgICAgICAgX19weXhfY29kZV9jYWNoZS5tYXhfY291bnQgPSA2NDsKKysgICAgICAgICAgICBf X3B5eF9jb2RlX2NhY2hlLmNvdW50ID0gMTsKKysgICAgICAgICAgICBlbnRyaWVzWzBdLmNvZGVf bGluZSA9IGNvZGVfbGluZTsKKysgICAgICAgICAgICBlbnRyaWVzWzBdLmNvZGVfb2JqZWN0ID0g Y29kZV9vYmplY3Q7CisrICAgICAgICAgICAgUHlfSU5DUkVGKGNvZGVfb2JqZWN0KTsKKyAgICAg ICAgIH0KKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIGlmIChzaXplb2YoaW50NjRfdCkgPD0gc2l6 ZW9mKGxvbmcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2 YWx1ZSk7CistI2lmZGVmIEhBVkVfTE9OR19MT05HCistICAgICAgICB9IGVsc2UgaWYgKHNpemVv ZihpbnQ2NF90KSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworLSAgICAgICAgICAgIHJldHVy biBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsKKy0jZW5kaWYKKysg ICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBwb3MgPSBfX3B5eF9iaXNlY3RfY29kZV9vYmpl Y3RzKF9fcHl4X2NvZGVfY2FjaGUuZW50cmllcywgX19weXhfY29kZV9jYWNoZS5jb3VudCwgY29k ZV9saW5lKTsKKysgICAgaWYgKChwb3MgPCBfX3B5eF9jb2RlX2NhY2hlLmNvdW50KSAmJiB1bmxp a2VseShfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXNbcG9zXS5jb2RlX2xpbmUgPT0gY29kZV9saW5l KSkgeworKyAgICAgICAgUHlDb2RlT2JqZWN0KiB0bXAgPSBlbnRyaWVzW3Bvc10uY29kZV9vYmpl Y3Q7CisrICAgICAgICBlbnRyaWVzW3Bvc10uY29kZV9vYmplY3QgPSBjb2RlX29iamVjdDsKKysg ICAgICAgIFB5X0RFQ1JFRih0bXApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGlm IChfX3B5eF9jb2RlX2NhY2hlLmNvdW50ID09IF9fcHl4X2NvZGVfY2FjaGUubWF4X2NvdW50KSB7 CisrICAgICAgICBpbnQgbmV3X21heCA9IF9fcHl4X2NvZGVfY2FjaGUubWF4X2NvdW50ICsgNjQ7 CisrICAgICAgICBlbnRyaWVzID0gKF9fUHl4X0NvZGVPYmplY3RDYWNoZUVudHJ5KilQeU1lbV9S ZWFsbG9jKAorKyAgICAgICAgICAgIF9fcHl4X2NvZGVfY2FjaGUuZW50cmllcywgKChzaXplX3Qp bmV3X21heCkgKiBzaXplb2YoX19QeXhfQ29kZU9iamVjdENhY2hlRW50cnkpKTsKKysgICAgICAg IGlmICh1bmxpa2VseSghZW50cmllcykpIHsKKysgICAgICAgICAgICByZXR1cm47CisgICAgICAg ICB9CisrICAgICAgICBfX3B5eF9jb2RlX2NhY2hlLmVudHJpZXMgPSBlbnRyaWVzOworKyAgICAg ICAgX19weXhfY29kZV9jYWNoZS5tYXhfY291bnQgPSBuZXdfbWF4OworICAgICB9CistICAgIHsK Ky0gICAgICAgIGludCBvbmUgPSAxOyBpbnQgbGl0dGxlID0gKGludCkqKHVuc2lnbmVkIGNoYXIg Kikmb25lOworLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAodW5zaWduZWQgY2hhciAq KSZ2YWx1ZTsKKy0gICAgICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnl0ZXMsIHNp emVvZihpbnQ2NF90KSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0 dGxlLCAhaXNfdW5zaWduZWQpOworKyAgICBmb3IgKGk9X19weXhfY29kZV9jYWNoZS5jb3VudDsg aT5wb3M7IGktLSkgeworKyAgICAgICAgZW50cmllc1tpXSA9IGVudHJpZXNbaS0xXTsKKyAgICAg fQorKyAgICBlbnRyaWVzW3Bvc10uY29kZV9saW5lID0gY29kZV9saW5lOworKyAgICBlbnRyaWVz W3Bvc10uY29kZV9vYmplY3QgPSBjb2RlX29iamVjdDsKKysgICAgX19weXhfY29kZV9jYWNoZS5j b3VudCsrOworKyAgICBQeV9JTkNSRUYoY29kZV9vYmplY3QpOworIH0KKyAKKy0vKiBDSW50VG9Q eSAqLworLXN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX3Vp bnQ2NF90KHVpbnQ2NF90IHZhbHVlKSB7CistICAgIGNvbnN0IHVpbnQ2NF90IG5lZ19vbmUgPSAo dWludDY0X3QpICgodWludDY0X3QpIDAgLSAodWludDY0X3QpIDEpLCBjb25zdF96ZXJvID0gKHVp bnQ2NF90KSAwOworLSAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3Rf emVybzsKKy0gICAgaWYgKGlzX3Vuc2lnbmVkKSB7CistICAgICAgICBpZiAoc2l6ZW9mKHVpbnQ2 NF90KSA8IHNpemVvZihsb25nKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9u ZygobG9uZykgdmFsdWUpOworLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YodWludDY0X3QpIDw9 IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJv bVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUpOworLSNpZmRlZiBIQVZFX0xPTkdf TE9ORworLSAgICAgICAgfSBlbHNlIGlmIChzaXplb2YodWludDY0X3QpIDw9IHNpemVvZih1bnNp Z25lZCBQWV9MT05HX0xPTkcpKSB7CistICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5z aWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKSB2YWx1ZSk7CistI2VuZGlmCist ICAgICAgICB9CistICAgIH0gZWxzZSB7CistICAgICAgICBpZiAoc2l6ZW9mKHVpbnQ2NF90KSA8 PSBzaXplb2YobG9uZykpIHsKKy0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxv bmcpIHZhbHVlKTsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgIH0gZWxzZSBpZiAo c2l6ZW9mKHVpbnQ2NF90KSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworLSAgICAgICAgICAg IHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsKKy0jZW5k aWYKKy0gICAgICAgIH0KKysvKiBBZGRUcmFjZWJhY2sgKi8KKysjaW5jbHVkZSAiY29tcGlsZS5o IgorKyNpbmNsdWRlICJmcmFtZW9iamVjdC5oIgorKyNpbmNsdWRlICJ0cmFjZWJhY2suaCIKKytz dGF0aWMgUHlDb2RlT2JqZWN0KiBfX1B5eF9DcmVhdGVDb2RlT2JqZWN0Rm9yVHJhY2ViYWNrKAor KyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBpbnQgY19saW5lLAorKyAgICAgICAg ICAgIGludCBweV9saW5lLCBjb25zdCBjaGFyICpmaWxlbmFtZSkgeworKyAgICBQeUNvZGVPYmpl Y3QgKnB5X2NvZGUgPSBOVUxMOworKyAgICBQeU9iamVjdCAqcHlfZnVuY25hbWUgPSBOVUxMOwor KyAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKysgICAgUHlPYmplY3QgKnB5X3NyY2ZpbGUg PSBOVUxMOworKyAgICBweV9zcmNmaWxlID0gUHlTdHJpbmdfRnJvbVN0cmluZyhmaWxlbmFtZSk7 CisrICAgIGlmICghcHlfc3JjZmlsZSkgZ290byBiYWQ7CisrICAgICNlbmRpZgorKyAgICBpZiAo Y19saW5lKSB7CisrICAgICAgICAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKysgICAgICAgIHB5 X2Z1bmNuYW1lID0gUHlTdHJpbmdfRnJvbUZvcm1hdCggIiVzICglczolZCkiLCBmdW5jbmFtZSwg X19weXhfY2ZpbGVubSwgY19saW5lKTsKKysgICAgICAgIGlmICghcHlfZnVuY25hbWUpIGdvdG8g YmFkOworKyAgICAgICAgI2Vsc2UKKysgICAgICAgIHB5X2Z1bmNuYW1lID0gUHlVbmljb2RlX0Zy b21Gb3JtYXQoICIlcyAoJXM6JWQpIiwgZnVuY25hbWUsIF9fcHl4X2NmaWxlbm0sIGNfbGluZSk7 CisrICAgICAgICBpZiAoIXB5X2Z1bmNuYW1lKSBnb3RvIGJhZDsKKysgICAgICAgIGZ1bmNuYW1l ID0gUHlVbmljb2RlX0FzVVRGOChweV9mdW5jbmFtZSk7CisrICAgICAgICBpZiAoIWZ1bmNuYW1l KSBnb3RvIGJhZDsKKysgICAgICAgICNlbmRpZgorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAg ICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisrICAgICAgICBweV9mdW5jbmFtZSA9IFB5U3Ry aW5nX0Zyb21TdHJpbmcoZnVuY25hbWUpOworKyAgICAgICAgaWYgKCFweV9mdW5jbmFtZSkgZ290 byBiYWQ7CisrICAgICAgICAjZW5kaWYKKysgICAgfQorKyAgICAjaWYgUFlfTUFKT1JfVkVSU0lP TiA8IDMKKysgICAgcHlfY29kZSA9IF9fUHl4X1B5Q29kZV9OZXcoCisrICAgICAgICAwLAorKyAg ICAgICAgMCwKKysgICAgICAgIDAsCisrICAgICAgICAwLAorKyAgICAgICAgMCwKKysgICAgICAg IF9fcHl4X2VtcHR5X2J5dGVzLCAvKlB5T2JqZWN0ICpjb2RlLCovCisrICAgICAgICBfX3B5eF9l bXB0eV90dXBsZSwgLypQeU9iamVjdCAqY29uc3RzLCovCisrICAgICAgICBfX3B5eF9lbXB0eV90 dXBsZSwgLypQeU9iamVjdCAqbmFtZXMsKi8KKysgICAgICAgIF9fcHl4X2VtcHR5X3R1cGxlLCAv KlB5T2JqZWN0ICp2YXJuYW1lcywqLworKyAgICAgICAgX19weXhfZW1wdHlfdHVwbGUsIC8qUHlP YmplY3QgKmZyZWV2YXJzLCovCisrICAgICAgICBfX3B5eF9lbXB0eV90dXBsZSwgLypQeU9iamVj dCAqY2VsbHZhcnMsKi8KKysgICAgICAgIHB5X3NyY2ZpbGUsICAgLypQeU9iamVjdCAqZmlsZW5h bWUsKi8KKysgICAgICAgIHB5X2Z1bmNuYW1lLCAgLypQeU9iamVjdCAqbmFtZSwqLworKyAgICAg ICAgcHlfbGluZSwKKysgICAgICAgIF9fcHl4X2VtcHR5X2J5dGVzICAvKlB5T2JqZWN0ICpsbm90 YWIqLworKyAgICApOworKyAgICBQeV9ERUNSRUYocHlfc3JjZmlsZSk7CisrICAgICNlbHNlCisr ICAgIHB5X2NvZGUgPSBQeUNvZGVfTmV3RW1wdHkoZmlsZW5hbWUsIGZ1bmNuYW1lLCBweV9saW5l KTsKKysgICAgI2VuZGlmCisrICAgIFB5X1hERUNSRUYocHlfZnVuY25hbWUpOyAgLy8gWERFQ1JF RiBzaW5jZSBpdCdzIG9ubHkgc2V0IG9uIFB5MyBpZiBjbGluZQorKyAgICByZXR1cm4gcHlfY29k ZTsKKytiYWQ6CisrICAgIFB5X1hERUNSRUYocHlfZnVuY25hbWUpOworKyAgICAjaWYgUFlfTUFK T1JfVkVSU0lPTiA8IDMKKysgICAgUHlfWERFQ1JFRihweV9zcmNmaWxlKTsKKysgICAgI2VuZGlm CisrICAgIHJldHVybiBOVUxMOworK30KKytzdGF0aWMgdm9pZCBfX1B5eF9BZGRUcmFjZWJhY2so Y29uc3QgY2hhciAqZnVuY25hbWUsIGludCBjX2xpbmUsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBweV9saW5lLCBjb25zdCBjaGFyICpmaWxlbmFtZSkgeworKyAgICBQeUNv ZGVPYmplY3QgKnB5X2NvZGUgPSAwOworKyAgICBQeUZyYW1lT2JqZWN0ICpweV9mcmFtZSA9IDA7 CisrICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IF9fUHl4X1B5VGhyZWFkU3RhdGVfQ3VycmVu dDsKKysgICAgaWYgKGNfbGluZSkgeworKyAgICAgICAgY19saW5lID0gX19QeXhfQ0xpbmVGb3JU cmFjZWJhY2sodHN0YXRlLCBjX2xpbmUpOworICAgICB9CistICAgIHsKKy0gICAgICAgIGludCBv bmUgPSAxOyBpbnQgbGl0dGxlID0gKGludCkqKHVuc2lnbmVkIGNoYXIgKikmb25lOworLSAgICAg ICAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAodW5zaWduZWQgY2hhciAqKSZ2YWx1ZTsKKy0gICAg ICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnl0ZXMsIHNpemVvZih1aW50NjRfdCks CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2ln bmVkKTsKKysgICAgcHlfY29kZSA9IF9fcHl4X2ZpbmRfY29kZV9vYmplY3QoY19saW5lID8gLWNf bGluZSA6IHB5X2xpbmUpOworKyAgICBpZiAoIXB5X2NvZGUpIHsKKysgICAgICAgIHB5X2NvZGUg PSBfX1B5eF9DcmVhdGVDb2RlT2JqZWN0Rm9yVHJhY2ViYWNrKAorKyAgICAgICAgICAgIGZ1bmNu YW1lLCBjX2xpbmUsIHB5X2xpbmUsIGZpbGVuYW1lKTsKKysgICAgICAgIGlmICghcHlfY29kZSkg Z290byBiYWQ7CisrICAgICAgICBfX3B5eF9pbnNlcnRfY29kZV9vYmplY3QoY19saW5lID8gLWNf bGluZSA6IHB5X2xpbmUsIHB5X2NvZGUpOworICAgICB9CisrICAgIHB5X2ZyYW1lID0gUHlGcmFt ZV9OZXcoCisrICAgICAgICB0c3RhdGUsICAgICAgICAgICAgLypQeVRocmVhZFN0YXRlICp0c3Rh dGUsKi8KKysgICAgICAgIHB5X2NvZGUsICAgICAgICAgICAvKlB5Q29kZU9iamVjdCAqY29kZSwq LworKyAgICAgICAgX19weXhfZCwgICAgLypQeU9iamVjdCAqZ2xvYmFscywqLworKyAgICAgICAg MCAgICAgICAgICAgICAgICAgIC8qUHlPYmplY3QgKmxvY2FscyovCisrICAgICk7CisrICAgIGlm ICghcHlfZnJhbWUpIGdvdG8gYmFkOworKyAgICBfX1B5eF9QeUZyYW1lX1NldExpbmVOdW1iZXIo cHlfZnJhbWUsIHB5X2xpbmUpOworKyAgICBQeVRyYWNlQmFja19IZXJlKHB5X2ZyYW1lKTsKKyti YWQ6CisrICAgIFB5X1hERUNSRUYocHlfY29kZSk7CisrICAgIFB5X1hERUNSRUYocHlfZnJhbWUp OworIH0KKyAKKy0vKiBDSW50VG9QeSAqLworLXN0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0 KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoZW51bSBtcHZfZm9ybWF0IHZhbHVl KSB7CistICAgIGNvbnN0IGVudW0gbXB2X2Zvcm1hdCBuZWdfb25lID0gKGVudW0gbXB2X2Zvcm1h dCkgKChlbnVtIG1wdl9mb3JtYXQpIDAgLSAoZW51bSBtcHZfZm9ybWF0KSAxKSwgY29uc3RfemVy byA9IChlbnVtIG1wdl9mb3JtYXQpIDA7CistICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5l Z19vbmUgPiBjb25zdF96ZXJvOworLSAgICBpZiAoaXNfdW5zaWduZWQpIHsKKy0gICAgICAgIGlm IChzaXplb2YoZW51bSBtcHZfZm9ybWF0KSA8IHNpemVvZihsb25nKSkgeworLSAgICAgICAgICAg IHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworLSAgICAgICAgfSBlbHNlIGlm IChzaXplb2YoZW51bSBtcHZfZm9ybWF0KSA8PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKKy0g ICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcp IHZhbHVlKTsKKy0jaWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6 ZW9mKGVudW0gbXB2X2Zvcm1hdCkgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsK Ky0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25l ZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKKy0jZW5kaWYKKy0gICAgICAgIH0KKy0gICAgfSBlbHNl IHsKKy0gICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfZm9ybWF0KSA8PSBzaXplb2YobG9uZykp IHsKKy0gICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKKy0j aWZkZWYgSEFWRV9MT05HX0xPTkcKKy0gICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2 X2Zvcm1hdCkgPD0gc2l6ZW9mKFBZX0xPTkdfTE9ORykpIHsKKy0gICAgICAgICAgICByZXR1cm4g UHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05HKSB2YWx1ZSk7CistI2VuZGlmCistICAg ICAgICB9CistICAgIH0KKy0gICAgeworLSAgICAgICAgaW50IG9uZSA9IDE7IGludCBsaXR0bGUg PSAoaW50KSoodW5zaWduZWQgY2hhciAqKSZvbmU7CistICAgICAgICB1bnNpZ25lZCBjaGFyICpi eXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOworLSAgICAgICAgcmV0dXJuIF9QeUxvbmdf RnJvbUJ5dGVBcnJheShieXRlcywgc2l6ZW9mKGVudW0gbXB2X2Zvcm1hdCksCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2lnbmVkKTsKKysvKiBD SW50RnJvbVB5VmVyaWZ5ICovCisrI2RlZmluZSBfX1BZWF9WRVJJRllfUkVUVVJOX0lOVCh0YXJn ZXRfdHlwZSwgZnVuY190eXBlLCBmdW5jX3ZhbHVlKVwKKysgICAgX19QWVhfX1ZFUklGWV9SRVRV Uk5fSU5UKHRhcmdldF90eXBlLCBmdW5jX3R5cGUsIGZ1bmNfdmFsdWUsIDApCisrI2RlZmluZSBf X1BZWF9WRVJJRllfUkVUVVJOX0lOVF9FWEModGFyZ2V0X3R5cGUsIGZ1bmNfdHlwZSwgZnVuY192 YWx1ZSlcCisrICAgIF9fUFlYX19WRVJJRllfUkVUVVJOX0lOVCh0YXJnZXRfdHlwZSwgZnVuY190 eXBlLCBmdW5jX3ZhbHVlLCAxKQorKyNkZWZpbmUgX19QWVhfX1ZFUklGWV9SRVRVUk5fSU5UKHRh cmdldF90eXBlLCBmdW5jX3R5cGUsIGZ1bmNfdmFsdWUsIGV4YylcCisrICAgIHtcCisrICAgICAg ICBmdW5jX3R5cGUgdmFsdWUgPSBmdW5jX3ZhbHVlO1wKKysgICAgICAgIGlmIChzaXplb2YodGFy Z2V0X3R5cGUpIDwgc2l6ZW9mKGZ1bmNfdHlwZSkpIHtcCisrICAgICAgICAgICAgaWYgKHVubGlr ZWx5KHZhbHVlICE9IChmdW5jX3R5cGUpICh0YXJnZXRfdHlwZSkgdmFsdWUpKSB7XAorKyAgICAg ICAgICAgICAgICBmdW5jX3R5cGUgemVybyA9IDA7XAorKyAgICAgICAgICAgICAgICBpZiAoZXhj ICYmIHVubGlrZWx5KHZhbHVlID09IChmdW5jX3R5cGUpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkp XAorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0YXJnZXRfdHlwZSkgLTE7XAorKyAgICAg ICAgICAgICAgICBpZiAoaXNfdW5zaWduZWQgJiYgdW5saWtlbHkodmFsdWUgPCB6ZXJvKSlcCisr ICAgICAgICAgICAgICAgICAgICBnb3RvIHJhaXNlX25lZ19vdmVyZmxvdztcCisrICAgICAgICAg ICAgICAgIGVsc2VcCisrICAgICAgICAgICAgICAgICAgICBnb3RvIHJhaXNlX292ZXJmbG93O1wK KysgICAgICAgICAgICB9XAorKyAgICAgICAgfVwKKysgICAgICAgIHJldHVybiAodGFyZ2V0X3R5 cGUpIHZhbHVlO1wKKyAgICAgfQorLX0KKyAKKyAvKiBDSW50VG9QeSAqLworLXN0YXRpYyBDWVRI T05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2xvbmcobG9uZyB2YWx1ZSkgewor LSAgICBjb25zdCBsb25nIG5lZ19vbmUgPSAobG9uZykgKChsb25nKSAwIC0gKGxvbmcpIDEpLCBj b25zdF96ZXJvID0gKGxvbmcpIDA7Cisrc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9f UHl4X1B5SW50X0Zyb21faW50KGludCB2YWx1ZSkgeworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJ QUdOT1NUSUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFn bm9zdGljIGlnbm9yZWQgIi1XY29udmVyc2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgaW50IG5l Z19vbmUgPSAoaW50KSAtMSwgY29uc3RfemVybyA9IChpbnQpIDA7CisrI2lmZGVmIF9fUHl4X0hB U19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisrI2VuZGlmCisg ICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOworICAgICBp ZiAoaXNfdW5zaWduZWQpIHsKKy0gICAgICAgIGlmIChzaXplb2YobG9uZykgPCBzaXplb2YobG9u ZykpIHsKKysgICAgICAgIGlmIChzaXplb2YoaW50KSA8IHNpemVvZihsb25nKSkgeworICAgICAg ICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworLSAgICAgICAgfSBl bHNlIGlmIChzaXplb2YobG9uZykgPD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7CisrICAgICAg ICB9IGVsc2UgaWYgKHNpemVvZihpbnQpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworICAg ICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykg dmFsdWUpOworICNpZmRlZiBIQVZFX0xPTkdfTE9ORworLSAgICAgICAgfSBlbHNlIGlmIChzaXpl b2YobG9uZykgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKKysgICAgICAgIH0g ZWxzZSBpZiAoc2l6ZW9mKGludCkgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsK KyAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25l ZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKKyAjZW5kaWYKKyAgICAgICAgIH0KKyAgICAgfSBlbHNl IHsKKy0gICAgICAgIGlmIChzaXplb2YobG9uZykgPD0gc2l6ZW9mKGxvbmcpKSB7CisrICAgICAg ICBpZiAoc2l6ZW9mKGludCkgPD0gc2l6ZW9mKGxvbmcpKSB7CisgICAgICAgICAgICAgcmV0dXJu IFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CisgI2lmZGVmIEhBVkVfTE9OR19MT05HCist ICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihsb25nKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkg eworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoaW50KSA8PSBzaXplb2YoUFlfTE9OR19MT05H KSkgeworICAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xP TkcpIHZhbHVlKTsKKyAjZW5kaWYKKyAgICAgICAgIH0KK0BAIC0zMzYxNywxNCArMzAyMTIsMjEg QEAgc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21fbG9uZyhs b25nIHZhbHVlKSB7CisgICAgIHsKKyAgICAgICAgIGludCBvbmUgPSAxOyBpbnQgbGl0dGxlID0g KGludCkqKHVuc2lnbmVkIGNoYXIgKikmb25lOworICAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0 ZXMgPSAodW5zaWduZWQgY2hhciAqKSZ2YWx1ZTsKKy0gICAgICAgIHJldHVybiBfUHlMb25nX0Zy b21CeXRlQXJyYXkoYnl0ZXMsIHNpemVvZihsb25nKSwKKysgICAgICAgIHJldHVybiBfUHlMb25n X0Zyb21CeXRlQXJyYXkoYnl0ZXMsIHNpemVvZihpbnQpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7CisgICAgIH0KKyB9CisgCisg LyogQ0ludEZyb21QeSAqLworIHN0YXRpYyBDWVRIT05fSU5MSU5FIGludCBfX1B5eF9QeUludF9B c19pbnQoUHlPYmplY3QgKngpIHsKKy0gICAgY29uc3QgaW50IG5lZ19vbmUgPSAoaW50KSAoKGlu dCkgMCAtIChpbnQpIDEpLCBjb25zdF96ZXJvID0gKGludCkgMDsKKysjaWZkZWYgX19QeXhfSEFT X0dDQ19ESUFHTk9TVElDCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBH Q0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCisrI2VuZGlmCisrICAgIGNvbnN0 IGludCBuZWdfb25lID0gKGludCkgLTEsIGNvbnN0X3plcm8gPSAoaW50KSAwOworKyNpZmRlZiBf X1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorKyNl bmRpZgorICAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsK KyAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKyAgICAgaWYgKGxpa2VseShQeUludF9DaGVjayh4 KSkpIHsKK0BAIC0zMzgxMSw5ICszMDQxMyw1NCBAQCBzdGF0aWMgQ1lUSE9OX0lOTElORSBpbnQg X19QeXhfUHlJbnRfQXNfaW50KFB5T2JqZWN0ICp4KSB7CisgICAgIHJldHVybiAoaW50KSAtMTsK KyB9CisgCisrLyogQ0ludFRvUHkgKi8KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVjdCog X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoZW51bSBtcHZfZXZlbnRfaWQgdmFs dWUpIHsKKysjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCisrI3ByYWdtYSBHQ0MgZGlh Z25vc3RpYyBwdXNoCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNp b24iCisrI2VuZGlmCisrICAgIGNvbnN0IGVudW0gbXB2X2V2ZW50X2lkIG5lZ19vbmUgPSAoZW51 bSBtcHZfZXZlbnRfaWQpIC0xLCBjb25zdF96ZXJvID0gKGVudW0gbXB2X2V2ZW50X2lkKSAwOwor KyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGlj IHBvcAorKyNlbmRpZgorKyAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29u c3RfemVybzsKKysgICAgaWYgKGlzX3Vuc2lnbmVkKSB7CisrICAgICAgICBpZiAoc2l6ZW9mKGVu dW0gbXB2X2V2ZW50X2lkKSA8IHNpemVvZihsb25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQ eUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2Yo ZW51bSBtcHZfZXZlbnRfaWQpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworKyAgICAgICAg ICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUp OworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51 bSBtcHZfZXZlbnRfaWQpIDw9IHNpemVvZih1bnNpZ25lZCBQWV9MT05HX0xPTkcpKSB7CisrICAg ICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgUFlf TE9OR19MT05HKSB2YWx1ZSk7CisrI2VuZGlmCisrICAgICAgICB9CisrICAgIH0gZWxzZSB7Cisr ICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X2V2ZW50X2lkKSA8PSBzaXplb2YobG9uZykpIHsK KysgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKKysjaWZk ZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2X2V2 ZW50X2lkKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworKyAgICAgICAgICAgIHJldHVybiBQ eUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsKKysjZW5kaWYKKysgICAg ICAgIH0KKysgICAgfQorKyAgICB7CisrICAgICAgICBpbnQgb25lID0gMTsgaW50IGxpdHRsZSA9 IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKKysgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5 dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7CisrICAgICAgICByZXR1cm4gX1B5TG9uZ19G cm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YoZW51bSBtcHZfZXZlbnRfaWQpLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7CisrICAg IH0KKyt9CisrCisgLyogQ0ludEZyb21QeSAqLworIHN0YXRpYyBDWVRIT05fSU5MSU5FIGVudW0g bXB2X2V2ZW50X2lkIF9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9ldmVudF9pZChQeU9iamVjdCAq eCkgeworLSAgICBjb25zdCBlbnVtIG1wdl9ldmVudF9pZCBuZWdfb25lID0gKGVudW0gbXB2X2V2 ZW50X2lkKSAoKGVudW0gbXB2X2V2ZW50X2lkKSAwIC0gKGVudW0gbXB2X2V2ZW50X2lkKSAxKSwg Y29uc3RfemVybyA9IChlbnVtIG1wdl9ldmVudF9pZCkgMDsKKysjaWZkZWYgX19QeXhfSEFTX0dD Q19ESUFHTk9TVElDCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBHQ0Mg ZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvbnZlcnNpb24iCisrI2VuZGlmCisrICAgIGNvbnN0IGVu dW0gbXB2X2V2ZW50X2lkIG5lZ19vbmUgPSAoZW51bSBtcHZfZXZlbnRfaWQpIC0xLCBjb25zdF96 ZXJvID0gKGVudW0gbXB2X2V2ZW50X2lkKSAwOworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdO T1NUSUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgorICAgICBjb25zdCBp bnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVybzsKKyAjaWYgUFlfTUFKT1JfVkVS U0lPTiA8IDMKKyAgICAgaWYgKGxpa2VseShQeUludF9DaGVjayh4KSkpIHsKK0BAIC0zMzk0Nyw2 MiArMzA1OTQsMjU5IEBAIHN0YXRpYyBDWVRIT05fSU5MSU5FIGVudW0gbXB2X2V2ZW50X2lkIF9f UHl4X1B5SW50X0FzX2VudW1fX21wdl9ldmVudF9pZChQeU9iamVjCisgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgI2VuZGlmCistICAgICAgICAgICAgaWYgKHNp emVvZihlbnVtIG1wdl9ldmVudF9pZCkgPD0gc2l6ZW9mKGxvbmcpKSB7CistICAgICAgICAgICAg ICAgIF9fUFlYX1ZFUklGWV9SRVRVUk5fSU5UX0VYQyhlbnVtIG1wdl9ldmVudF9pZCwgbG9uZywg UHlMb25nX0FzTG9uZyh4KSkKKysgICAgICAgICAgICBpZiAoc2l6ZW9mKGVudW0gbXB2X2V2ZW50 X2lkKSA8PSBzaXplb2YobG9uZykpIHsKKysgICAgICAgICAgICAgICAgX19QWVhfVkVSSUZZX1JF VFVSTl9JTlRfRVhDKGVudW0gbXB2X2V2ZW50X2lkLCBsb25nLCBQeUxvbmdfQXNMb25nKHgpKQor KyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVu dW0gbXB2X2V2ZW50X2lkKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworKyAgICAgICAgICAg ICAgICBfX1BZWF9WRVJJRllfUkVUVVJOX0lOVF9FWEMoZW51bSBtcHZfZXZlbnRfaWQsIFBZX0xP TkdfTE9ORywgUHlMb25nX0FzTG9uZ0xvbmcoeCkpCisrI2VuZGlmCisrICAgICAgICAgICAgfQor KyAgICAgICAgfQorKyAgICAgICAgeworKyNpZiBDWVRIT05fQ09NUElMSU5HX0lOX1BZUFkgJiYg IWRlZmluZWQoX1B5TG9uZ19Bc0J5dGVBcnJheSkKKysgICAgICAgICAgICBQeUVycl9TZXRTdHJp bmcoUHlFeGNfUnVudGltZUVycm9yLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1B5 TG9uZ19Bc0J5dGVBcnJheSgpIG5vdCBhdmFpbGFibGUgaW4gUHlQeSwgY2Fubm90IGNvbnZlcnQg bGFyZ2UgbnVtYmVycyIpOworKyNlbHNlCisrICAgICAgICAgICAgZW51bSBtcHZfZXZlbnRfaWQg dmFsOworKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gX19QeXhfUHlOdW1iZXJfSW50T3JMb25n KHgpOworKyAjaWYgUFlfTUFKT1JfVkVSU0lPTiA8IDMKKysgICAgICAgICAgICBpZiAobGlrZWx5 KHYpICYmICFQeUxvbmdfQ2hlY2sodikpIHsKKysgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRt cCA9IHY7CisrICAgICAgICAgICAgICAgIHYgPSBQeU51bWJlcl9Mb25nKHRtcCk7CisrICAgICAg ICAgICAgICAgIFB5X0RFQ1JFRih0bXApOworKyAgICAgICAgICAgIH0KKysgI2VuZGlmCisrICAg ICAgICAgICAgaWYgKGxpa2VseSh2KSkgeworKyAgICAgICAgICAgICAgICBpbnQgb25lID0gMTsg aW50IGlzX2xpdHRsZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKKysgICAgICAgICAg ICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAodW5zaWduZWQgY2hhciAqKSZ2YWw7CisrICAg ICAgICAgICAgICAgIGludCByZXQgPSBfUHlMb25nX0FzQnl0ZUFycmF5KChQeUxvbmdPYmplY3Qg Kil2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRl cywgc2l6ZW9mKHZhbCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlzX2xpdHRsZSwgIWlzX3Vuc2lnbmVkKTsKKysgICAgICAgICAgICAgICAgUHlfREVD UkVGKHYpOworKyAgICAgICAgICAgICAgICBpZiAobGlrZWx5KCFyZXQpKQorKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHZhbDsKKysgICAgICAgICAgICB9CisrI2VuZGlmCisrICAgICAgICAg ICAgcmV0dXJuIChlbnVtIG1wdl9ldmVudF9pZCkgLTE7CisrICAgICAgICB9CisrICAgIH0gZWxz ZSB7CisrICAgICAgICBlbnVtIG1wdl9ldmVudF9pZCB2YWw7CisrICAgICAgICBQeU9iamVjdCAq dG1wID0gX19QeXhfUHlOdW1iZXJfSW50T3JMb25nKHgpOworKyAgICAgICAgaWYgKCF0bXApIHJl dHVybiAoZW51bSBtcHZfZXZlbnRfaWQpIC0xOworKyAgICAgICAgdmFsID0gX19QeXhfUHlJbnRf QXNfZW51bV9fbXB2X2V2ZW50X2lkKHRtcCk7CisrICAgICAgICBQeV9ERUNSRUYodG1wKTsKKysg ICAgICAgIHJldHVybiB2YWw7CisrICAgIH0KKytyYWlzZV9vdmVyZmxvdzoKKysgICAgUHlFcnJf U2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisrICAgICAgICAidmFsdWUgdG9vIGxhcmdl IHRvIGNvbnZlcnQgdG8gZW51bSBtcHZfZXZlbnRfaWQiKTsKKysgICAgcmV0dXJuIChlbnVtIG1w dl9ldmVudF9pZCkgLTE7CisrcmFpc2VfbmVnX292ZXJmbG93OgorKyAgICBQeUVycl9TZXRTdHJp bmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKysgICAgICAgICJjYW4ndCBjb252ZXJ0IG5lZ2F0aXZl IHZhbHVlIHRvIGVudW0gbXB2X2V2ZW50X2lkIik7CisrICAgIHJldHVybiAoZW51bSBtcHZfZXZl bnRfaWQpIC0xOworK30KKysKKysvKiBDSW50VG9QeSAqLworK3N0YXRpYyBDWVRIT05fSU5MSU5F IFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX3Vuc2lnbmVkX2xvbmcodW5zaWduZWQgbG9uZyB2 YWx1ZSkgeworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKKysjcHJhZ21hIEdDQyBk aWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XY29udmVy c2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgdW5zaWduZWQgbG9uZyBuZWdfb25lID0gKHVuc2ln bmVkIGxvbmcpIC0xLCBjb25zdF96ZXJvID0gKHVuc2lnbmVkIGxvbmcpIDA7CisrI2lmZGVmIF9f UHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisrI2Vu ZGlmCisrICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOwor KyAgICBpZiAoaXNfdW5zaWduZWQpIHsKKysgICAgICAgIGlmIChzaXplb2YodW5zaWduZWQgbG9u ZykgPCBzaXplb2YobG9uZykpIHsKKysgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmco KGxvbmcpIHZhbHVlKTsKKysgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcp IDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdf RnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUpOworKyNpZmRlZiBIQVZFX0xP TkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YodW5zaWduZWQgbG9uZykgPD0gc2l6 ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKKysgICAgICAgICAgICByZXR1cm4gUHlMb25n X0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKKysj ZW5kaWYKKysgICAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICAgIGlmIChzaXplb2YodW5z aWduZWQgbG9uZykgPD0gc2l6ZW9mKGxvbmcpKSB7CisrICAgICAgICAgICAgcmV0dXJuIFB5SW50 X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAg ICB9IGVsc2UgaWYgKHNpemVvZih1bnNpZ25lZCBsb25nKSA8PSBzaXplb2YoUFlfTE9OR19MT05H KSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xP TkcpIHZhbHVlKTsKKysjZW5kaWYKKysgICAgICAgIH0KKysgICAgfQorKyAgICB7CisrICAgICAg ICBpbnQgb25lID0gMTsgaW50IGxpdHRsZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsK KysgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7 CisrICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YodW5z aWduZWQgbG9uZyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRs ZSwgIWlzX3Vuc2lnbmVkKTsKKysgICAgfQorK30KKysKKysvKiBDSW50VG9QeSAqLworK3N0YXRp YyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJv cihlbnVtIG1wdl9lcnJvciB2YWx1ZSkgeworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NU SUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGlj IGlnbm9yZWQgIi1XY29udmVyc2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgZW51bSBtcHZfZXJy b3IgbmVnX29uZSA9IChlbnVtIG1wdl9lcnJvcikgLTEsIGNvbnN0X3plcm8gPSAoZW51bSBtcHZf ZXJyb3IpIDA7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0ND IGRpYWdub3N0aWMgcG9wCisrI2VuZGlmCisrICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5l Z19vbmUgPiBjb25zdF96ZXJvOworKyAgICBpZiAoaXNfdW5zaWduZWQpIHsKKysgICAgICAgIGlm IChzaXplb2YoZW51bSBtcHZfZXJyb3IpIDwgc2l6ZW9mKGxvbmcpKSB7CisrICAgICAgICAgICAg cmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CisrICAgICAgICB9IGVsc2UgaWYg KHNpemVvZihlbnVtIG1wdl9lcnJvcikgPD0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7CisrICAg ICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKSB2 YWx1ZSk7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgICB9IGVsc2UgaWYgKHNpemVv ZihlbnVtIG1wdl9lcnJvcikgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKKysg ICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQ WV9MT05HX0xPTkcpIHZhbHVlKTsKKysjZW5kaWYKKysgICAgICAgIH0KKysgICAgfSBlbHNlIHsK KysgICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfZXJyb3IpIDw9IHNpemVvZihsb25nKSkgewor KyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworKyNpZmRl ZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZXJy b3IpIDw9IHNpemVvZihQWV9MT05HX0xPTkcpKSB7CisrICAgICAgICAgICAgcmV0dXJuIFB5TG9u Z19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORykgdmFsdWUpOworKyNlbmRpZgorKyAgICAgICAg fQorKyAgICB9CisrICAgIHsKKysgICAgICAgIGludCBvbmUgPSAxOyBpbnQgbGl0dGxlID0gKGlu dCkqKHVuc2lnbmVkIGNoYXIgKikmb25lOworKyAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMg PSAodW5zaWduZWQgY2hhciAqKSZ2YWx1ZTsKKysgICAgICAgIHJldHVybiBfUHlMb25nX0Zyb21C eXRlQXJyYXkoYnl0ZXMsIHNpemVvZihlbnVtIG1wdl9lcnJvciksCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZSwgIWlzX3Vuc2lnbmVkKTsKKysgICAgfQorK30K KysKKysvKiBDSW50VG9QeSAqLworK3N0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoZW51bSBtcHZfbG9nX2xldmVsIHZhbHVl KSB7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdu b3N0aWMgcHVzaAorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9u IgorKyNlbmRpZgorKyAgICBjb25zdCBlbnVtIG1wdl9sb2dfbGV2ZWwgbmVnX29uZSA9IChlbnVt IG1wdl9sb2dfbGV2ZWwpIC0xLCBjb25zdF96ZXJvID0gKGVudW0gbXB2X2xvZ19sZXZlbCkgMDsK KysjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3Rp YyBwb3AKKysjZW5kaWYKKysgICAgY29uc3QgaW50IGlzX3Vuc2lnbmVkID0gbmVnX29uZSA+IGNv bnN0X3plcm87CisrICAgIGlmIChpc191bnNpZ25lZCkgeworKyAgICAgICAgaWYgKHNpemVvZihl bnVtIG1wdl9sb2dfbGV2ZWwpIDwgc2l6ZW9mKGxvbmcpKSB7CisrICAgICAgICAgICAgcmV0dXJu IFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CisrICAgICAgICB9IGVsc2UgaWYgKHNpemVv ZihlbnVtIG1wdl9sb2dfbGV2ZWwpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworKyAgICAg ICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFs dWUpOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2Yo ZW51bSBtcHZfbG9nX2xldmVsKSA8PSBzaXplb2YodW5zaWduZWQgUFlfTE9OR19MT05HKSkgewor KyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVk IFBZX0xPTkdfTE9ORykgdmFsdWUpOworKyNlbmRpZgorKyAgICAgICAgfQorKyAgICB9IGVsc2Ug eworKyAgICAgICAgaWYgKHNpemVvZihlbnVtIG1wdl9sb2dfbGV2ZWwpIDw9IHNpemVvZihsb25n KSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOwor ICNpZmRlZiBIQVZFX0xPTkdfTE9ORworLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVu dW0gbXB2X2V2ZW50X2lkKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworLSAgICAgICAgICAg ICAgICBfX1BZWF9WRVJJRllfUkVUVVJOX0lOVF9FWEMoZW51bSBtcHZfZXZlbnRfaWQsIFBZX0xP TkdfTE9ORywgUHlMb25nX0FzTG9uZ0xvbmcoeCkpCisrICAgICAgICB9IGVsc2UgaWYgKHNpemVv ZihlbnVtIG1wdl9sb2dfbGV2ZWwpIDw9IHNpemVvZihQWV9MT05HX0xPTkcpKSB7CisrICAgICAg ICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORykgdmFsdWUpOwor ICNlbmRpZgorLSAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKy0gICAgICAgIHsKKy0jaWYgQ1lU SE9OX0NPTVBJTElOR19JTl9QWVBZICYmICFkZWZpbmVkKF9QeUxvbmdfQXNCeXRlQXJyYXkpCist ICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIl9QeUxvbmdfQXNCeXRlQXJyYXkoKSBub3QgYXZhaWxhYmxl IGluIFB5UHksIGNhbm5vdCBjb252ZXJ0IGxhcmdlIG51bWJlcnMiKTsKKy0jZWxzZQorLSAgICAg ICAgICAgIGVudW0gbXB2X2V2ZW50X2lkIHZhbDsKKy0gICAgICAgICAgICBQeU9iamVjdCAqdiA9 IF9fUHl4X1B5TnVtYmVyX0ludE9yTG9uZyh4KTsKKy0gI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAz CistICAgICAgICAgICAgaWYgKGxpa2VseSh2KSAmJiAhUHlMb25nX0NoZWNrKHYpKSB7CistICAg ICAgICAgICAgICAgIFB5T2JqZWN0ICp0bXAgPSB2OworLSAgICAgICAgICAgICAgICB2ID0gUHlO dW1iZXJfTG9uZyh0bXApOworLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKKy0gICAg ICAgICAgICB9CistICNlbmRpZgorLSAgICAgICAgICAgIGlmIChsaWtlbHkodikpIHsKKy0gICAg ICAgICAgICAgICAgaW50IG9uZSA9IDE7IGludCBpc19saXR0bGUgPSAoaW50KSoodW5zaWduZWQg Y2hhciAqKSZvbmU7CistICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVu c2lnbmVkIGNoYXIgKikmdmFsOworLSAgICAgICAgICAgICAgICBpbnQgcmV0ID0gX1B5TG9uZ19B c0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnl0ZXMsIHNpemVvZih2YWwpLAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19saXR0bGUsICFpc191bnNpZ25lZCk7 CistICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKy0gICAgICAgICAgICAgICAgaWYgKGxp a2VseSghcmV0KSkKKy0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7CistICAgICAgICAg ICAgfQorKyAgICB9CisrICAgIHsKKysgICAgICAgIGludCBvbmUgPSAxOyBpbnQgbGl0dGxlID0g KGludCkqKHVuc2lnbmVkIGNoYXIgKikmb25lOworKyAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0 ZXMgPSAodW5zaWduZWQgY2hhciAqKSZ2YWx1ZTsKKysgICAgICAgIHJldHVybiBfUHlMb25nX0Zy b21CeXRlQXJyYXkoYnl0ZXMsIHNpemVvZihlbnVtIG1wdl9sb2dfbGV2ZWwpLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7CisrICAg IH0KKyt9CisrCisrLyogQ0ludFRvUHkgKi8KKytzdGF0aWMgQ1lUSE9OX0lOTElORSBQeU9iamVj dCogX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5kX2ZpbGVfcmVhc29uKGVudW0gbXB2X2Vu ZF9maWxlX3JlYXNvbiB2YWx1ZSkgeworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMK KysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGln bm9yZWQgIi1XY29udmVyc2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgZW51bSBtcHZfZW5kX2Zp bGVfcmVhc29uIG5lZ19vbmUgPSAoZW51bSBtcHZfZW5kX2ZpbGVfcmVhc29uKSAtMSwgY29uc3Rf emVybyA9IChlbnVtIG1wdl9lbmRfZmlsZV9yZWFzb24pIDA7CisrI2lmZGVmIF9fUHl4X0hBU19H Q0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisrI2VuZGlmCisrICAg IGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOworKyAgICBpZiAo aXNfdW5zaWduZWQpIHsKKysgICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfZW5kX2ZpbGVfcmVh c29uKSA8IHNpemVvZihsb25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9u ZygobG9uZykgdmFsdWUpOworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZW5k X2ZpbGVfcmVhc29uKSA8PSBzaXplb2YodW5zaWduZWQgbG9uZykpIHsKKysgICAgICAgICAgICBy ZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHZhbHVlKTsKKysj aWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGVudW0gbXB2 X2VuZF9maWxlX3JlYXNvbikgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpIHsKKysg ICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQ WV9MT05HX0xPTkcpIHZhbHVlKTsKKyAjZW5kaWYKKy0gICAgICAgICAgICByZXR1cm4gKGVudW0g bXB2X2V2ZW50X2lkKSAtMTsKKyAgICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKy0gICAgICAgIGVu dW0gbXB2X2V2ZW50X2lkIHZhbDsKKy0gICAgICAgIFB5T2JqZWN0ICp0bXAgPSBfX1B5eF9QeU51 bWJlcl9JbnRPckxvbmcoeCk7CistICAgICAgICBpZiAoIXRtcCkgcmV0dXJuIChlbnVtIG1wdl9l dmVudF9pZCkgLTE7CistICAgICAgICB2YWwgPSBfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZXZl bnRfaWQodG1wKTsKKy0gICAgICAgIFB5X0RFQ1JFRih0bXApOworLSAgICAgICAgcmV0dXJuIHZh bDsKKysgICAgICAgIGlmIChzaXplb2YoZW51bSBtcHZfZW5kX2ZpbGVfcmVhc29uKSA8PSBzaXpl b2YobG9uZykpIHsKKysgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZh bHVlKTsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9m KGVudW0gbXB2X2VuZF9maWxlX3JlYXNvbikgPD0gc2l6ZW9mKFBZX0xPTkdfTE9ORykpIHsKKysg ICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZygoUFlfTE9OR19MT05HKSB2YWx1 ZSk7CisrI2VuZGlmCisrICAgICAgICB9CisrICAgIH0KKysgICAgeworKyAgICAgICAgaW50IG9u ZSA9IDE7IGludCBsaXR0bGUgPSAoaW50KSoodW5zaWduZWQgY2hhciAqKSZvbmU7CisrICAgICAg ICB1bnNpZ25lZCBjaGFyICpieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopJnZhbHVlOworKyAgICAg ICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShieXRlcywgc2l6ZW9mKGVudW0gbXB2X2Vu ZF9maWxlX3JlYXNvbiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp dHRsZSwgIWlzX3Vuc2lnbmVkKTsKKysgICAgfQorK30KKysKKysvKiBDSW50VG9QeSAqLworK3N0 YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9y ZW5kZXJfdXBkYXRlX2ZsYWcoZW51bSBtcHZfcmVuZGVyX3VwZGF0ZV9mbGFnIHZhbHVlKSB7Cisr I2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMg cHVzaAorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgorKyNl bmRpZgorKyAgICBjb25zdCBlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2ZsYWcgbmVnX29uZSA9IChl bnVtIG1wdl9yZW5kZXJfdXBkYXRlX2ZsYWcpIC0xLCBjb25zdF96ZXJvID0gKGVudW0gbXB2X3Jl bmRlcl91cGRhdGVfZmxhZykgMDsKKysjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCisr I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKysjZW5kaWYKKysgICAgY29uc3QgaW50IGlzX3Vu c2lnbmVkID0gbmVnX29uZSA+IGNvbnN0X3plcm87CisrICAgIGlmIChpc191bnNpZ25lZCkgewor KyAgICAgICAgaWYgKHNpemVvZihlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2ZsYWcpIDwgc2l6ZW9m KGxvbmcpKSB7CisrICAgICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1 ZSk7CisrICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2Zs YWcpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxv bmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUpOworKyNpZmRlZiBIQVZF X0xPTkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfcmVuZGVyX3Vw ZGF0ZV9mbGFnKSA8PSBzaXplb2YodW5zaWduZWQgUFlfTE9OR19MT05HKSkgeworKyAgICAgICAg ICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIFBZX0xPTkdf TE9ORykgdmFsdWUpOworKyNlbmRpZgorKyAgICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAg ICAgaWYgKHNpemVvZihlbnVtIG1wdl9yZW5kZXJfdXBkYXRlX2ZsYWcpIDw9IHNpemVvZihsb25n KSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOwor KyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBt cHZfcmVuZGVyX3VwZGF0ZV9mbGFnKSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworKyAgICAg ICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsK KysjZW5kaWYKKysgICAgICAgIH0KKysgICAgfQorKyAgICB7CisrICAgICAgICBpbnQgb25lID0g MTsgaW50IGxpdHRsZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKKysgICAgICAgIHVu c2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7CisrICAgICAgICBy ZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YoZW51bSBtcHZfcmVuZGVy X3VwZGF0ZV9mbGFnKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0 dGxlLCAhaXNfdW5zaWduZWQpOworICAgICB9CistcmFpc2Vfb3ZlcmZsb3c6CistICAgIFB5RXJy X1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorLSAgICAgICAgInZhbHVlIHRvbyBsYXJn ZSB0byBjb252ZXJ0IHRvIGVudW0gbXB2X2V2ZW50X2lkIik7CistICAgIHJldHVybiAoZW51bSBt cHZfZXZlbnRfaWQpIC0xOworLXJhaXNlX25lZ19vdmVyZmxvdzoKKy0gICAgUHlFcnJfU2V0U3Ry aW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCistICAgICAgICAiY2FuJ3QgY29udmVydCBuZWdhdGl2 ZSB2YWx1ZSB0byBlbnVtIG1wdl9ldmVudF9pZCIpOworLSAgICByZXR1cm4gKGVudW0gbXB2X2V2 ZW50X2lkKSAtMTsKKyB9CisgCisgLyogQ0ludEZyb21QeSAqLworIHN0YXRpYyBDWVRIT05fSU5M SU5FIGxvbmcgX19QeXhfUHlJbnRfQXNfbG9uZyhQeU9iamVjdCAqeCkgeworLSAgICBjb25zdCBs b25nIG5lZ19vbmUgPSAobG9uZykgKChsb25nKSAwIC0gKGxvbmcpIDEpLCBjb25zdF96ZXJvID0g KGxvbmcpIDA7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0ND IGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb252 ZXJzaW9uIgorKyNlbmRpZgorKyAgICBjb25zdCBsb25nIG5lZ19vbmUgPSAobG9uZykgLTEsIGNv bnN0X3plcm8gPSAobG9uZykgMDsKKysjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCisr I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKysjZW5kaWYKKyAgICAgY29uc3QgaW50IGlzX3Vu c2lnbmVkID0gbmVnX29uZSA+IGNvbnN0X3plcm87CisgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAz CisgICAgIGlmIChsaWtlbHkoUHlJbnRfQ2hlY2soeCkpKSB7CitAQCAtMzQxODksOSArMzEwMzMs OTIgQEAgc3RhdGljIENZVEhPTl9JTkxJTkUgbG9uZyBfX1B5eF9QeUludF9Bc19sb25nKFB5T2Jq ZWN0ICp4KSB7CisgICAgIHJldHVybiAobG9uZykgLTE7CisgfQorIAorKy8qIENJbnRUb1B5ICov Cisrc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21faW50NjRf dChpbnQ2NF90IHZhbHVlKSB7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNw cmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3Jl ZCAiLVdjb252ZXJzaW9uIgorKyNlbmRpZgorKyAgICBjb25zdCBpbnQ2NF90IG5lZ19vbmUgPSAo aW50NjRfdCkgLTEsIGNvbnN0X3plcm8gPSAoaW50NjRfdCkgMDsKKysjaWZkZWYgX19QeXhfSEFT X0dDQ19ESUFHTk9TVElDCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKysjZW5kaWYKKysg ICAgY29uc3QgaW50IGlzX3Vuc2lnbmVkID0gbmVnX29uZSA+IGNvbnN0X3plcm87CisrICAgIGlm IChpc191bnNpZ25lZCkgeworKyAgICAgICAgaWYgKHNpemVvZihpbnQ2NF90KSA8IHNpemVvZihs b25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUp OworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoaW50NjRfdCkgPD0gc2l6ZW9mKHVuc2lnbmVk IGxvbmcpKSB7CisrICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1 bnNpZ25lZCBsb25nKSB2YWx1ZSk7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgICB9 IGVsc2UgaWYgKHNpemVvZihpbnQ2NF90KSA8PSBzaXplb2YodW5zaWduZWQgUFlfTE9OR19MT05H KSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVu c2lnbmVkIFBZX0xPTkdfTE9ORykgdmFsdWUpOworKyNlbmRpZgorKyAgICAgICAgfQorKyAgICB9 IGVsc2UgeworKyAgICAgICAgaWYgKHNpemVvZihpbnQ2NF90KSA8PSBzaXplb2YobG9uZykpIHsK KysgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsKKysjaWZk ZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGludDY0X3QpIDw9 IHNpemVvZihQWV9MT05HX0xPTkcpKSB7CisrICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9t TG9uZ0xvbmcoKFBZX0xPTkdfTE9ORykgdmFsdWUpOworKyNlbmRpZgorKyAgICAgICAgfQorKyAg ICB9CisrICAgIHsKKysgICAgICAgIGludCBvbmUgPSAxOyBpbnQgbGl0dGxlID0gKGludCkqKHVu c2lnbmVkIGNoYXIgKikmb25lOworKyAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXMgPSAodW5z aWduZWQgY2hhciAqKSZ2YWx1ZTsKKysgICAgICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJy YXkoYnl0ZXMsIHNpemVvZihpbnQ2NF90KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGl0dGxlLCAhaXNfdW5zaWduZWQpOworKyAgICB9CisrfQorKworKy8qIENJbnRU b1B5ICovCisrc3RhdGljIENZVEhPTl9JTkxJTkUgUHlPYmplY3QqIF9fUHl4X1B5SW50X0Zyb21f dWludDY0X3QodWludDY0X3QgdmFsdWUpIHsKKysjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9T VElDCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3Rp YyBpZ25vcmVkICItV2NvbnZlcnNpb24iCisrI2VuZGlmCisrICAgIGNvbnN0IHVpbnQ2NF90IG5l Z19vbmUgPSAodWludDY0X3QpIC0xLCBjb25zdF96ZXJvID0gKHVpbnQ2NF90KSAwOworKyNpZmRl ZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAor KyNlbmRpZgorKyAgICBjb25zdCBpbnQgaXNfdW5zaWduZWQgPSBuZWdfb25lID4gY29uc3RfemVy bzsKKysgICAgaWYgKGlzX3Vuc2lnbmVkKSB7CisrICAgICAgICBpZiAoc2l6ZW9mKHVpbnQ2NF90 KSA8IHNpemVvZihsb25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygo bG9uZykgdmFsdWUpOworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YodWludDY0X3QpIDw9IHNp emVvZih1bnNpZ25lZCBsb25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVu c2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFsdWUpOworKyNpZmRlZiBIQVZFX0xPTkdfTE9O RworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YodWludDY0X3QpIDw9IHNpemVvZih1bnNpZ25l ZCBQWV9MT05HX0xPTkcpKSB7CisrICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWdu ZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKSB2YWx1ZSk7CisrI2VuZGlmCisrICAg ICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgICBpZiAoc2l6ZW9mKHVpbnQ2NF90KSA8PSBz aXplb2YobG9uZykpIHsKKysgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcp IHZhbHVlKTsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgICAgIH0gZWxzZSBpZiAoc2l6 ZW9mKHVpbnQ2NF90KSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworKyAgICAgICAgICAgIHJl dHVybiBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsKKysjZW5kaWYK KysgICAgICAgIH0KKysgICAgfQorKyAgICB7CisrICAgICAgICBpbnQgb25lID0gMTsgaW50IGxp dHRsZSA9IChpbnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKKysgICAgICAgIHVuc2lnbmVkIGNo YXIgKmJ5dGVzID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7CisrICAgICAgICByZXR1cm4gX1B5 TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YodWludDY0X3QpLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaXR0bGUsICFpc191bnNpZ25lZCk7CisrICAgIH0K Kyt9CisrCisgLyogQ0ludEZyb21QeSAqLworIHN0YXRpYyBDWVRIT05fSU5MSU5FIHVpbnQ2NF90 IF9fUHl4X1B5SW50X0FzX3VpbnQ2NF90KFB5T2JqZWN0ICp4KSB7CistICAgIGNvbnN0IHVpbnQ2 NF90IG5lZ19vbmUgPSAodWludDY0X3QpICgodWludDY0X3QpIDAgLSAodWludDY0X3QpIDEpLCBj b25zdF96ZXJvID0gKHVpbnQ2NF90KSAwOworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NU SUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGlj IGlnbm9yZWQgIi1XY29udmVyc2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgdWludDY0X3QgbmVn X29uZSA9ICh1aW50NjRfdCkgLTEsIGNvbnN0X3plcm8gPSAodWludDY0X3QpIDA7CisrI2lmZGVm IF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisr I2VuZGlmCisgICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJv OworICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworICAgICBpZiAobGlrZWx5KFB5SW50X0NoZWNr KHgpKSkgeworQEAgLTM0Mzc4LDkgKzMxMzA1LDU0IEBAIHN0YXRpYyBDWVRIT05fSU5MSU5FIHVp bnQ2NF90IF9fUHl4X1B5SW50X0FzX3VpbnQ2NF90KFB5T2JqZWN0ICp4KSB7CisgICAgIHJldHVy biAodWludDY0X3QpIC0xOworIH0KKyAKKysvKiBDSW50VG9QeSAqLworK3N0YXRpYyBDWVRIT05f SU5MSU5FIFB5T2JqZWN0KiBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoZW51bSBt cHZfZm9ybWF0IHZhbHVlKSB7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNw cmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3Jl ZCAiLVdjb252ZXJzaW9uIgorKyNlbmRpZgorKyAgICBjb25zdCBlbnVtIG1wdl9mb3JtYXQgbmVn X29uZSA9IChlbnVtIG1wdl9mb3JtYXQpIC0xLCBjb25zdF96ZXJvID0gKGVudW0gbXB2X2Zvcm1h dCkgMDsKKysjaWZkZWYgX19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCisrI3ByYWdtYSBHQ0MgZGlh Z25vc3RpYyBwb3AKKysjZW5kaWYKKysgICAgY29uc3QgaW50IGlzX3Vuc2lnbmVkID0gbmVnX29u ZSA+IGNvbnN0X3plcm87CisrICAgIGlmIChpc191bnNpZ25lZCkgeworKyAgICAgICAgaWYgKHNp emVvZihlbnVtIG1wdl9mb3JtYXQpIDwgc2l6ZW9mKGxvbmcpKSB7CisrICAgICAgICAgICAgcmV0 dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CisrICAgICAgICB9IGVsc2UgaWYgKHNp emVvZihlbnVtIG1wdl9mb3JtYXQpIDw9IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeworKyAgICAg ICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZykgdmFs dWUpOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2Yo ZW51bSBtcHZfZm9ybWF0KSA8PSBzaXplb2YodW5zaWduZWQgUFlfTE9OR19MT05HKSkgeworKyAg ICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmcoKHVuc2lnbmVkIFBZ X0xPTkdfTE9ORykgdmFsdWUpOworKyNlbmRpZgorKyAgICAgICAgfQorKyAgICB9IGVsc2Ugewor KyAgICAgICAgaWYgKHNpemVvZihlbnVtIG1wdl9mb3JtYXQpIDw9IHNpemVvZihsb25nKSkgewor KyAgICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZykgdmFsdWUpOworKyNpZmRl ZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAgfSBlbHNlIGlmIChzaXplb2YoZW51bSBtcHZfZm9y bWF0KSA8PSBzaXplb2YoUFlfTE9OR19MT05HKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxv bmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIHZhbHVlKTsKKysjZW5kaWYKKysgICAgICAg IH0KKysgICAgfQorKyAgICB7CisrICAgICAgICBpbnQgb25lID0gMTsgaW50IGxpdHRsZSA9IChp bnQpKih1bnNpZ25lZCBjaGFyICopJm9uZTsKKysgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVz ID0gKHVuc2lnbmVkIGNoYXIgKikmdmFsdWU7CisrICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9t Qnl0ZUFycmF5KGJ5dGVzLCBzaXplb2YoZW51bSBtcHZfZm9ybWF0KSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGl0dGxlLCAhaXNfdW5zaWduZWQpOworKyAgICB9Cisr fQorKworIC8qIENJbnRGcm9tUHkgKi8KKyBzdGF0aWMgQ1lUSE9OX0lOTElORSBlbnVtIG1wdl9m b3JtYXQgX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2Zvcm1hdChQeU9iamVjdCAqeCkgeworLSAg ICBjb25zdCBlbnVtIG1wdl9mb3JtYXQgbmVnX29uZSA9IChlbnVtIG1wdl9mb3JtYXQpICgoZW51 bSBtcHZfZm9ybWF0KSAwIC0gKGVudW0gbXB2X2Zvcm1hdCkgMSksIGNvbnN0X3plcm8gPSAoZW51 bSBtcHZfZm9ybWF0KSAwOworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKKysjcHJh Z21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQg Ii1XY29udmVyc2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgZW51bSBtcHZfZm9ybWF0IG5lZ19v bmUgPSAoZW51bSBtcHZfZm9ybWF0KSAtMSwgY29uc3RfemVybyA9IChlbnVtIG1wdl9mb3JtYXQp IDA7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdu b3N0aWMgcG9wCisrI2VuZGlmCisgICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUg PiBjb25zdF96ZXJvOworICNpZiBQWV9NQUpPUl9WRVJTSU9OIDwgMworICAgICBpZiAobGlrZWx5 KFB5SW50X0NoZWNrKHgpKSkgeworQEAgLTM0NTY5LDcgKzMxNTQxLDE0IEBAIHN0YXRpYyBDWVRI T05fSU5MSU5FIGVudW0gbXB2X2Zvcm1hdCBfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9ybWF0 KFB5T2JqZWN0ICp4CisgCisgLyogQ0ludEZyb21QeSAqLworIHN0YXRpYyBDWVRIT05fSU5MSU5F IGludDY0X3QgX19QeXhfUHlJbnRfQXNfaW50NjRfdChQeU9iamVjdCAqeCkgeworLSAgICBjb25z dCBpbnQ2NF90IG5lZ19vbmUgPSAoaW50NjRfdCkgKChpbnQ2NF90KSAwIC0gKGludDY0X3QpIDEp LCBjb25zdF96ZXJvID0gKGludDY0X3QpIDA7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElBR05P U1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgR0NDIGRpYWdub3N0 aWMgaWdub3JlZCAiLVdjb252ZXJzaW9uIgorKyNlbmRpZgorKyAgICBjb25zdCBpbnQ2NF90IG5l Z19vbmUgPSAoaW50NjRfdCkgLTEsIGNvbnN0X3plcm8gPSAoaW50NjRfdCkgMDsKKysjaWZkZWYg X19QeXhfSEFTX0dDQ19ESUFHTk9TVElDCisrI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKysj ZW5kaWYKKyAgICAgY29uc3QgaW50IGlzX3Vuc2lnbmVkID0gbmVnX29uZSA+IGNvbnN0X3plcm87 CisgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisgICAgIGlmIChsaWtlbHkoUHlJbnRfQ2hlY2so eCkpKSB7CitAQCAtMzQ3NTgsNyArMzE3MzcsMTQgQEAgc3RhdGljIENZVEhPTl9JTkxJTkUgaW50 NjRfdCBfX1B5eF9QeUludF9Bc19pbnQ2NF90KFB5T2JqZWN0ICp4KSB7CisgCisgLyogQ0ludEZy b21QeSAqLworIHN0YXRpYyBDWVRIT05fSU5MSU5FIGludHB0cl90IF9fUHl4X1B5SW50X0FzX2lu dHB0cl90KFB5T2JqZWN0ICp4KSB7CistICAgIGNvbnN0IGludHB0cl90IG5lZ19vbmUgPSAoaW50 cHRyX3QpICgoaW50cHRyX3QpIDAgLSAoaW50cHRyX3QpIDEpLCBjb25zdF96ZXJvID0gKGludHB0 cl90KSAwOworKyNpZmRlZiBfX1B5eF9IQVNfR0NDX0RJQUdOT1NUSUMKKysjcHJhZ21hIEdDQyBk aWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XY29udmVy c2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgaW50cHRyX3QgbmVnX29uZSA9IChpbnRwdHJfdCkg LTEsIGNvbnN0X3plcm8gPSAoaW50cHRyX3QpIDA7CisrI2lmZGVmIF9fUHl4X0hBU19HQ0NfRElB R05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisrI2VuZGlmCisgICAgIGNvbnN0 IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOworICNpZiBQWV9NQUpPUl9W RVJTSU9OIDwgMworICAgICBpZiAobGlrZWx5KFB5SW50X0NoZWNrKHgpKSkgeworQEAgLTM0OTQ1 LDYgKzMxOTMxLDQ0IEBAIHN0YXRpYyBDWVRIT05fSU5MSU5FIGludHB0cl90IF9fUHl4X1B5SW50 X0FzX2ludHB0cl90KFB5T2JqZWN0ICp4KSB7CisgICAgIHJldHVybiAoaW50cHRyX3QpIC0xOwor IH0KKyAKKysvKiBDSW50VG9QeSAqLworK3N0YXRpYyBDWVRIT05fSU5MSU5FIFB5T2JqZWN0KiBf X1B5eF9QeUludF9Gcm9tX2xvbmcobG9uZyB2YWx1ZSkgeworKyNpZmRlZiBfX1B5eF9IQVNfR0ND X0RJQUdOT1NUSUMKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIEdDQyBk aWFnbm9zdGljIGlnbm9yZWQgIi1XY29udmVyc2lvbiIKKysjZW5kaWYKKysgICAgY29uc3QgbG9u ZyBuZWdfb25lID0gKGxvbmcpIC0xLCBjb25zdF96ZXJvID0gKGxvbmcpIDA7CisrI2lmZGVmIF9f UHl4X0hBU19HQ0NfRElBR05PU1RJQworKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisrI2Vu ZGlmCisrICAgIGNvbnN0IGludCBpc191bnNpZ25lZCA9IG5lZ19vbmUgPiBjb25zdF96ZXJvOwor KyAgICBpZiAoaXNfdW5zaWduZWQpIHsKKysgICAgICAgIGlmIChzaXplb2YobG9uZykgPCBzaXpl b2YobG9uZykpIHsKKysgICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpIHZh bHVlKTsKKysgICAgICAgIH0gZWxzZSBpZiAoc2l6ZW9mKGxvbmcpIDw9IHNpemVvZih1bnNpZ25l ZCBsb25nKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygo dW5zaWduZWQgbG9uZykgdmFsdWUpOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgICAg fSBlbHNlIGlmIChzaXplb2YobG9uZykgPD0gc2l6ZW9mKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykp IHsKKysgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNp Z25lZCBQWV9MT05HX0xPTkcpIHZhbHVlKTsKKysjZW5kaWYKKysgICAgICAgIH0KKysgICAgfSBl bHNlIHsKKysgICAgICAgIGlmIChzaXplb2YobG9uZykgPD0gc2l6ZW9mKGxvbmcpKSB7CisrICAg ICAgICAgICAgcmV0dXJuIFB5SW50X0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7CisrI2lmZGVmIEhB VkVfTE9OR19MT05HCisrICAgICAgICB9IGVsc2UgaWYgKHNpemVvZihsb25nKSA8PSBzaXplb2Yo UFlfTE9OR19MT05HKSkgeworKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmdMb25n KChQWV9MT05HX0xPTkcpIHZhbHVlKTsKKysjZW5kaWYKKysgICAgICAgIH0KKysgICAgfQorKyAg ICB7CisrICAgICAgICBpbnQgb25lID0gMTsgaW50IGxpdHRsZSA9IChpbnQpKih1bnNpZ25lZCBj aGFyICopJm9uZTsKKysgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gKHVuc2lnbmVkIGNo YXIgKikmdmFsdWU7CisrICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVz LCBzaXplb2YobG9uZyksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp dHRsZSwgIWlzX3Vuc2lnbmVkKTsKKysgICAgfQorK30KKysKKyAvKiBDaGVja0JpbmFyeVZlcnNp b24gKi8KKyBzdGF0aWMgaW50IF9fUHl4X2NoZWNrX2JpbmFyeV92ZXJzaW9uKHZvaWQpIHsKKyAg ICAgY2hhciBjdHZlcnNpb25bNF0sIHJ0dmVyc2lvbls0XTsKK0BAIC0zNTIxMSw3ICszMjIzNSw3 IEBAIHN0YXRpYyBDWVRIT05fSU5MSU5FIFB5X3NzaXplX3QgX19QeXhfUHlJbmRleF9Bc1NzaXpl X3QoUHlPYmplY3QqIGIpIHsKKyB9Cisgc3RhdGljIENZVEhPTl9JTkxJTkUgUHlfaGFzaF90IF9f UHl4X1B5SW5kZXhfQXNIYXNoX3QoUHlPYmplY3QqIG8pIHsKKyAgIGlmIChzaXplb2YoUHlfaGFz aF90KSA9PSBzaXplb2YoUHlfc3NpemVfdCkpIHsKKy0gICAgcmV0dXJuIF9fUHl4X1B5SW5kZXhf QXNTc2l6ZV90KG8pOworKyAgICByZXR1cm4gKFB5X2hhc2hfdCkgX19QeXhfUHlJbmRleF9Bc1Nz aXplX3Qobyk7CisgI2lmIFBZX01BSk9SX1ZFUlNJT04gPCAzCisgICB9IGVsc2UgaWYgKGxpa2Vs eShQeUludF9DaGVja0V4YWN0KG8pKSkgeworICAgICByZXR1cm4gUHlJbnRfQVNfTE9ORyhvKTsK K2RpZmYgLS1naXQgYS92aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IGIvdmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eAoraW5kZXggNTQwZWE2NDkuLjhhZjJkY2M3IDEwMDY0NAorLS0tIGEv dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eAorKysrIGIvdmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eAorQEAgLTMwLDggKzMwLDggQEAgZnJvbSBjbGllbnQgY2ltcG9ydCAqCisgX192ZXJz aW9uX18gPSAiMC4zLjAiCisgX19hdXRob3JfXyA9ICJBbmRyZSBEIgorIAorLV9SRVFVSVJFRF9D QVBJX01BSk9SID0gMQorLV9NSU5fQ0FQSV9NSU5PUiA9IDkKKytfUkVRVUlSRURfQ0FQSV9NQUpP UiA9IDIKKytfTUlOX0NBUElfTUlOT1IgPSAwCisgCisgY2RlZiB1bnNpZ25lZCBsb25nIF9DQVBJ X1ZFUlNJT04KKyB3aXRoIG5vZ2lsOgorQEAgLTQ3LDcgKzQ3LDcgQEAgaWYgX0NBUElfTUFKT1Ig IT0gX1JFUVVJUkVEX0NBUElfTUFKT1Igb3IgX0NBUElfTUlOT1IgPCBfTUlOX0NBUElfTUlOT1I6 CisgICAgICkKKyAKKyBjZGVmIGV4dGVybiBmcm9tICJQeXRob24uaCI6CistICAgIHZvaWQgUHlF dmFsX0luaXRUaHJlYWRzKCkKKysgICAgdm9pZCBQeV9Jbml0aWFsaXplKCkKKyAKKyBfaXNfcHkz ID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywpCisgX3N0cmRlY19lcnIgPSAic3Vycm9nYXRlZXNj YXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIKK0BAIC02Nyw3ICs2Nyw3IEBAIGRlZiBfc3Ry ZW5jKHMpOgorICAgICAgICAgIyBJbiBweXRob24yLCBhc3N1bWUgYnl0ZXMgYW5kIHdhbGsgcmln aHQgdGhyb3VnaAorICAgICAgICAgcmV0dXJuIHMKKyAKKy1QeUV2YWxfSW5pdFRocmVhZHMoKQor K1B5X0luaXRpYWxpemUoKQorIAorIGNsYXNzIEVycm9yczoKKyAgICAgIiIiU2V0IG9mIGtub3du IGVycm9yIGNvZGVzIGZyb20gTXB2RXJyb3IgYW5kIEV2ZW50IHJlc3BvbnNlcy4KK0BAIC0xMTQs MjEgKzExNCwyMSBAQCBjbGFzcyBFdmVudHM6CisgICAgIHN0YXJ0X2ZpbGUgPSBNUFZfRVZFTlRf U1RBUlRfRklMRQorICAgICBlbmRfZmlsZSA9IE1QVl9FVkVOVF9FTkRfRklMRQorICAgICBmaWxl X2xvYWRlZCA9IE1QVl9FVkVOVF9GSUxFX0xPQURFRAorLSAgICB0cmFja3NfY2hhbmdlZCA9IE1Q Vl9FVkVOVF9UUkFDS1NfQ0hBTkdFRAorLSAgICB0cmFja3Nfc3dpdGNoZWQgPSBNUFZfRVZFTlRf VFJBQ0tfU1dJVENIRUQKKysgICAgIyB0cmFja3NfY2hhbmdlZCA9IE1QVl9FVkVOVF9UUkFDS1Nf Q0hBTkdFRAorKyAgICAjIHRyYWNrc19zd2l0Y2hlZCA9IE1QVl9FVkVOVF9UUkFDS19TV0lUQ0hF RAorICAgICBpZGxlID0gTVBWX0VWRU5UX0lETEUKKy0gICAgcGF1c2UgPSBNUFZfRVZFTlRfUEFV U0UKKy0gICAgdW5wYXVzZSA9IE1QVl9FVkVOVF9VTlBBVVNFCisrICAgICMgcGF1c2UgPSBNUFZf RVZFTlRfUEFVU0UKKysgICAgIyB1bnBhdXNlID0gTVBWX0VWRU5UX1VOUEFVU0UKKyAgICAgdGlj ayA9IE1QVl9FVkVOVF9USUNLCistICAgIHNjcmlwdF9pbnB1dF9kaXNwYXRjaCA9IE1QVl9FVkVO VF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0gKKysgICAgIyBzY3JpcHRfaW5wdXRfZGlzcGF0Y2ggPSBN UFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BBVENICisgICAgIGNsaWVudF9tZXNzYWdlID0gTVBW X0VWRU5UX0NMSUVOVF9NRVNTQUdFCisgICAgIHZpZGVvX3JlY29uZmlnID0gTVBWX0VWRU5UX1ZJ REVPX1JFQ09ORklHCisgICAgIGF1ZGlvX3JlY29uZmlnID0gTVBWX0VWRU5UX0FVRElPX1JFQ09O RklHCistICAgIG1ldGFkYXRhX3VwZGF0ZSA9IE1QVl9FVkVOVF9NRVRBREFUQV9VUERBVEUKKysg ICAgIyBtZXRhZGF0YV91cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFfVVBEQVRFCisgICAgIHNl ZWsgPSBNUFZfRVZFTlRfU0VFSworICAgICBwbGF5YmFja19yZXN0YXJ0ID0gTVBWX0VWRU5UX1BM QVlCQUNLX1JFU1RBUlQKKyAgICAgcHJvcGVydHlfY2hhbmdlID0gTVBWX0VWRU5UX1BST1BFUlRZ X0NIQU5HRQorLSAgICBjaGFwdGVyX2NoYW5nZSA9IE1QVl9FVkVOVF9DSEFQVEVSX0NIQU5HRQor KyAgICAjIGNoYXB0ZXJfY2hhbmdlID0gTVBWX0VWRU5UX0NIQVBURVJfQ0hBTkdFCisgCisgCisg Y2xhc3MgTG9nTGV2ZWxzOgorQEAgLTE2NiwxNyArMTY2LDE3IEBAIGNkZWYgY2xhc3MgRW5kT2ZG aWxlUmVhY2hlZChvYmplY3QpOgorICAgICAgICAgcmV0dXJuIHNlbGYKKyAKKyAKKy1jZGVmIGNs YXNzIElucHV0RGlzcGF0Y2gob2JqZWN0KToKKy0gICAgIiIiRGF0YSBmaWVsZCBmb3IgTVBWX0VW RU5UX1NDUklQVF9JTlBVVF9ESVNQQVRDSCBldmVudHMuCisrIyBjZGVmIGNsYXNzIElucHV0RGlz cGF0Y2gob2JqZWN0KToKKysjICAgICAiIiJEYXRhIGZpZWxkIGZvciBNUFZfRVZFTlRfU0NSSVBU X0lOUFVUX0RJU1BBVENIIGV2ZW50cy4KKyAKKy0gICAgV3JhcHM6IG1wdl9ldmVudF9zY3JpcHRf aW5wdXRfZGlzcGF0Y2gKKy0gICAgIiIiCistICAgIGNkZWYgcHVibGljIG9iamVjdCBhcmcwLCB0 eXBlCisrIyAgICAgV3JhcHM6IG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2gKKysjICAg ICAiIiIKKysjICAgICBjZGVmIHB1YmxpYyBvYmplY3QgYXJnMCwgdHlwZQorIAorLSAgICBjZGVm IF9pbml0KHNlbGYsIG1wdl9ldmVudF9zY3JpcHRfaW5wdXRfZGlzcGF0Y2gqIGlucHV0KToKKy0g ICAgICAgIHNlbGYuYXJnMCA9IGlucHV0LmFyZzAKKy0gICAgICAgIHNlbGYudHlwZSA9IF9zdHJk ZWMoaW5wdXQudHlwZSkKKy0gICAgICAgIHJldHVybiBzZWxmCisrIyAgICAgY2RlZiBfaW5pdChz ZWxmLCBtcHZfZXZlbnRfc2NyaXB0X2lucHV0X2Rpc3BhdGNoKiBpbnB1dCk6CisrIyAgICAgICAg IHNlbGYuYXJnMCA9IGlucHV0LmFyZzAKKysjICAgICAgICAgc2VsZi50eXBlID0gX3N0cmRlYyhp bnB1dC50eXBlKQorKyMgICAgICAgICByZXR1cm4gc2VsZgorIAorIAorIGNkZWYgY2xhc3MgTG9n TWVzc2FnZShvYmplY3QpOgorQEAgLTI3Niw4ICsyNzYsOCBAQCBjZGVmIGNsYXNzIEV2ZW50KG9i amVjdCk6CisgICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9w cm9wZXJ0eSo+ZGF0YSkKKyAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfTE9HX01F U1NBR0U6CisgICAgICAgICAgICAgcmV0dXJuIExvZ01lc3NhZ2UoKS5faW5pdCg8bXB2X2V2ZW50 X2xvZ19tZXNzYWdlKj5kYXRhKQorLSAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9T Q1JJUFRfSU5QVVRfRElTUEFUQ0g6CistICAgICAgICAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2go KS5faW5pdCg8bXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkKKysgICAgICAg ICMgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0g6CisrICAg ICAgICAjICAgICByZXR1cm4gSW5wdXREaXNwYXRjaCgpLl9pbml0KDxtcHZfZXZlbnRfc2NyaXB0 X2lucHV0X2Rpc3BhdGNoKj5kYXRhKQorICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVO VF9DTElFTlRfTUVTU0FHRToKKyAgICAgICAgICAgICBjbGltc2cgPSA8bXB2X2V2ZW50X2NsaWVu dF9tZXNzYWdlKj5kYXRhCisgICAgICAgICAgICAgYXJncyA9IFtdCitAQCAtMzk2LDE3ICszOTYs MTcgQEAgY2RlZiBjbGFzcyBDb250ZXh0KG9iamVjdCk6CisgICAgICAgICAgICAgdGltZSA9IG1w dl9nZXRfdGltZV91cyhzZWxmLl9jdHgpCisgICAgICAgICByZXR1cm4gdGltZQorIAorLSAgICBk ZWYgc3VzcGVuZChzZWxmKToKKy0gICAgICAgICIiIldyYXBzOiBtcHZfc3VzcGVuZCIiIgorLSAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorLSAgICAgICAgd2l0aCBub2dpbDoKKy0gICAgICAgICAg ICBtcHZfc3VzcGVuZChzZWxmLl9jdHgpCisrICAgICMgZGVmIHN1c3BlbmQoc2VsZik6CisrICAg ICMgICAgICIiIldyYXBzOiBtcHZfc3VzcGVuZCIiIgorKyAgICAjICAgICBhc3NlcnQgc2VsZi5f Y3R4CisrICAgICMgICAgIHdpdGggbm9naWw6CisrICAgICMgICAgICAgICBtcHZfc3VzcGVuZChz ZWxmLl9jdHgpCisgCistICAgIGRlZiByZXN1bWUoc2VsZik6CistICAgICAgICAiIiJXcmFwczog bXB2X3Jlc3VtZSIiIgorLSAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorLSAgICAgICAgd2l0aCBu b2dpbDoKKy0gICAgICAgICAgICBtcHZfcmVzdW1lKHNlbGYuX2N0eCkKKysgICAgIyBkZWYgcmVz dW1lKHNlbGYpOgorKyAgICAjICAgICAiIiJXcmFwczogbXB2X3Jlc3VtZSIiIgorKyAgICAjICAg ICBhc3NlcnQgc2VsZi5fY3R4CisrICAgICMgICAgIHdpdGggbm9naWw6CisrICAgICMgICAgICAg ICBtcHZfcmVzdW1lKHNlbGYuX2N0eCkKKyAKKyAgICAgQF9lcnJvcnMKKyAgICAgZGVmIHJlcXVl c3RfZXZlbnQoc2VsZiwgZXZlbnQsIGVuYWJsZSk6CitAQCAtNzk4LDE3ICs3OTgsMTcgQEAgY2Rl ZiBjbGFzcyBDb250ZXh0KG9iamVjdCk6CisgICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0g Tm9uZQorICAgICAgICAgc2VsZi5fY3R4ID0gTlVMTAorIAorLSAgICBkZWYgb3BlbmdsX2NiX2Fw aShzZWxmKToKKy0gICAgICAgIGNkZWYgdm9pZCAqY2IKKysgICAgIyBkZWYgb3BlbmdsX2NiX2Fw aShzZWxmKToKKysgICAgIyAgICAgY2RlZiB2b2lkICpjYgorIAorLSAgICAgICAgX2N0eCA9IG1w dl9nZXRfc3ViX2FwaShzZWxmLl9jdHgsIE1QVl9TVUJfQVBJX09QRU5HTF9DQikKKy0gICAgICAg IGlmIG5vdCBfY3R4OgorLSAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJPcGVuR0wgQVBJIG5v dCBhdmFpbGFibGUiKQorKyAgICAjICAgICBfY3R4ID0gbXB2X2dldF9zdWJfYXBpKHNlbGYuX2N0 eCwgTVBWX1NVQl9BUElfT1BFTkdMX0NCKQorKyAgICAjICAgICBpZiBub3QgX2N0eDoKKysgICAg IyAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJPcGVuR0wgQVBJIG5vdCBhdmFpbGFibGUiKQorIAor LSAgICAgICAgY3R4ID0gT3BlbkdMQ29udGV4dCgpCistICAgICAgICBjdHguX2N0eCA9IDxtcHZf b3BlbmdsX2NiX2NvbnRleHQqPl9jdHgKKysgICAgIyAgICAgY3R4ID0gT3BlbkdMQ29udGV4dCgp CisrICAgICMgICAgIGN0eC5fY3R4ID0gPG1wdl9vcGVuZ2xfY2JfY29udGV4dCo+X2N0eAorIAor LSAgICAgICAgcmV0dXJuIGN0eAorKyAgICAjICAgICByZXR1cm4gY3R4CisgCisgICAgIGRlZiBf X2RlYWxsb2NfXyhzZWxmKToKKyAgICAgICAgIHNlbGYuc2h1dGRvd24oKQorQEAgLTgxOSw2MiAr ODE5LDYyIEBAIGNkZWYgdm9pZCAqX2NfZ2V0cHJvY2FkZHJlc3Modm9pZCAqY3R4LCBjb25zdCBj aGFyICpuYW1lKSB3aXRoIGdpbDoKKyBjZGVmIHZvaWQgX2NfdXBkYXRlY2Iodm9pZCAqY3R4KSB3 aXRoIGdpbDoKKyAgICAgKDxvYmplY3Q+Y3R4KSgpCisgCistY2RlZiBjbGFzcyBPcGVuR0xDb250 ZXh0KG9iamVjdCk6CistICAgIGNkZWY6CistICAgICAgICBtcHZfb3BlbmdsX2NiX2NvbnRleHQg Kl9jdHgKKy0gICAgICAgIGJpbnQgaW5pdGVkCistICAgICAgICBvYmplY3QgdXBkYXRlX2NiCist CistICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKy0gICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UK Ky0gICAgICAgIHdhcm5pbmdzLndhcm4oIk9wZW5HTENvbnRleHQgaXMgZGVwcmVjYXRlZCwgcGxl YXNlIHN3aXRjaCB0byBSZW5kZXJDb250ZXh0IiwgRGVwcmVjYXRpb25XYXJuaW5nKQorLQorLSAg ICBkZWYgaW5pdF9nbChzZWxmLCBleHRzLCBnZXRfcHJvY19hZGRyZXNzKToKKy0gICAgICAgIGV4 dHMgPSBfc3RyZW5jKGV4dHMpIGlmIGV4dHMgaXMgbm90IE5vbmUgZWxzZSBOb25lCistICAgICAg ICBjZGVmIGNoYXIqIGV4dHNjID0gTlVMTAorLSAgICAgICAgaWYgZXh0cyBpcyBub3QgTm9uZToK Ky0gICAgICAgICAgICBleHRzYyA9IGV4dHMKKy0gICAgICAgIHdpdGggbm9naWw6CistICAgICAg ICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9pbml0X2dsKHNlbGYuX2N0eCwgZXh0c2MsICZfY19n ZXRwcm9jYWRkcmVzcywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PHZvaWQgKj5nZXRfcHJvY19hZGRyZXNzKQorLSAgICAgICAgaWYgZXJyIDwgMDoKKy0gICAgICAg ICAgICByYWlzZSBNUFZFcnJvcihlcnIpCistCistICAgICAgICBzZWxmLmluaXRlZCA9IFRydWUK Ky0KKy0gICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwgY2IpOgorLSAgICAgICAgc2Vs Zi51cGRhdGVfY2IgPSBjYgorLSAgICAgICAgd2l0aCBub2dpbDoKKy0gICAgICAgICAgICBtcHZf b3BlbmdsX2NiX3NldF91cGRhdGVfY2FsbGJhY2soc2VsZi5fY3R4LCAmX2NfdXBkYXRlY2IsIDx2 b2lkICo+Y2IpCistCistICAgIGRlZiBkcmF3KHNlbGYsIGZibywgdywgaCk6CistICAgICAgICBj ZGVmOgorLSAgICAgICAgICAgIGludCBmYm9jID0gZmJvCistICAgICAgICAgICAgaW50IHdjID0g dworLSAgICAgICAgICAgIGludCBoYyA9IGgKKy0gICAgICAgIHdpdGggbm9naWw6CistICAgICAg ICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9kcmF3KHNlbGYuX2N0eCwgZmJvYywgd2MsIGhjKQor LSAgICAgICAgaWYgZXJyIDwgMDoKKy0gICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCist CistICAgIGRlZiByZXBvcnRfZmxpcChzZWxmLCB0aW1lKToKKy0gICAgICAgIGNkZWYgaW50NjRf dCBjdGltZSA9IHRpbWUKKy0gICAgICAgIHdpdGggbm9naWw6CistICAgICAgICAgICAgZXJyID0g bXB2X29wZW5nbF9jYl9yZXBvcnRfZmxpcChzZWxmLl9jdHgsIGN0aW1lKQorLSAgICAgICAgaWYg ZXJyIDwgMDoKKy0gICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCistCistICAgIGRlZiB1 bmluaXRfZ2woc2VsZik6CistICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6CistICAgICAgICAg ICAgcmV0dXJuCistICAgICAgICB3aXRoIG5vZ2lsOgorLSAgICAgICAgICAgIGVyciA9IG1wdl9v cGVuZ2xfY2JfdW5pbml0X2dsKHNlbGYuX2N0eCkKKy0gICAgICAgIGlmIGVyciA8IDA6CistICAg ICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorLSAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxz ZQorLQorLSAgICBkZWYgX19kZWFsbG9jX18oc2VsZik6CistICAgICAgICBzZWxmLnVuaW5pdF9n bCgpCisrIyBjZGVmIGNsYXNzIE9wZW5HTENvbnRleHQob2JqZWN0KToKKysjICAgICBjZGVmOgor KyMgICAgICAgICBtcHZfb3BlbmdsX2NiX2NvbnRleHQgKl9jdHgKKysjICAgICAgICAgYmludCBp bml0ZWQKKysjICAgICAgICAgb2JqZWN0IHVwZGF0ZV9jYgorKworKyMgICAgIGRlZiBfX2luaXRf XyhzZWxmKToKKysjICAgICAgICAgc2VsZi5pbml0ZWQgPSBGYWxzZQorKyMgICAgICAgICB3YXJu aW5ncy53YXJuKCJPcGVuR0xDb250ZXh0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBzd2l0Y2ggdG8g UmVuZGVyQ29udGV4dCIsIERlcHJlY2F0aW9uV2FybmluZykKKysKKysjICAgICBkZWYgaW5pdF9n bChzZWxmLCBleHRzLCBnZXRfcHJvY19hZGRyZXNzKToKKysjICAgICAgICAgZXh0cyA9IF9zdHJl bmMoZXh0cykgaWYgZXh0cyBpcyBub3QgTm9uZSBlbHNlIE5vbmUKKysjICAgICAgICAgY2RlZiBj aGFyKiBleHRzYyA9IE5VTEwKKysjICAgICAgICAgaWYgZXh0cyBpcyBub3QgTm9uZToKKysjICAg ICAgICAgICAgIGV4dHNjID0gZXh0cworKyMgICAgICAgICB3aXRoIG5vZ2lsOgorKyMgICAgICAg ICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9pbml0X2dsKHNlbGYuX2N0eCwgZXh0c2MsICZfY19n ZXRwcm9jYWRkcmVzcywKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA8dm9pZCAqPmdldF9wcm9jX2FkZHJlc3MpCisrIyAgICAgICAgIGlmIGVyciA8IDA6CisrIyAg ICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpCisrCisrIyAgICAgICAgIHNlbGYuaW5pdGVk ID0gVHJ1ZQorKworKyMgICAgIGRlZiBzZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKToKKysj ICAgICAgICAgc2VsZi51cGRhdGVfY2IgPSBjYgorKyMgICAgICAgICB3aXRoIG5vZ2lsOgorKyMg ICAgICAgICAgICAgbXB2X29wZW5nbF9jYl9zZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwg Jl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKQorKworKyMgICAgIGRlZiBkcmF3KHNlbGYsIGZibywg dywgaCk6CisrIyAgICAgICAgIGNkZWY6CisrIyAgICAgICAgICAgICBpbnQgZmJvYyA9IGZibwor KyMgICAgICAgICAgICAgaW50IHdjID0gdworKyMgICAgICAgICAgICAgaW50IGhjID0gaAorKyMg ICAgICAgICB3aXRoIG5vZ2lsOgorKyMgICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9k cmF3KHNlbGYuX2N0eCwgZmJvYywgd2MsIGhjKQorKyMgICAgICAgICBpZiBlcnIgPCAwOgorKyMg ICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorKworKyMgICAgIGRlZiByZXBvcnRfZmxp cChzZWxmLCB0aW1lKToKKysjICAgICAgICAgY2RlZiBpbnQ2NF90IGN0aW1lID0gdGltZQorKyMg ICAgICAgICB3aXRoIG5vZ2lsOgorKyMgICAgICAgICAgICAgZXJyID0gbXB2X29wZW5nbF9jYl9y ZXBvcnRfZmxpcChzZWxmLl9jdHgsIGN0aW1lKQorKyMgICAgICAgICBpZiBlcnIgPCAwOgorKyMg ICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorKworKyMgICAgIGRlZiB1bmluaXRfZ2wo c2VsZik6CisrIyAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKysjICAgICAgICAgICAgIHJl dHVybgorKyMgICAgICAgICB3aXRoIG5vZ2lsOgorKyMgICAgICAgICAgICAgZXJyID0gbXB2X29w ZW5nbF9jYl91bmluaXRfZ2woc2VsZi5fY3R4KQorKyMgICAgICAgICBpZiBlcnIgPCAwOgorKyMg ICAgICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorKyMgICAgICAgICBzZWxmLmluaXRlZCA9 IEZhbHNlCisrCisrIyAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOgorKyMgICAgICAgICBzZWxm LnVuaW5pdF9nbCgpCisgCisgREVGIE1BWF9SRU5ERVJfUEFSQU1TID0gMzIKKyAKZGlmZiAtLWdp dCBhL3NyY3BrZ3MvdmlkY3V0dGVyL3BhdGNoZXMvbXB2LTAuMzUtMi5wYXRjaCBiL3NyY3BrZ3Mv dmlkY3V0dGVyL3BhdGNoZXMvbXB2LTAuMzUtMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmM5ODJkZWQ4NDc1YQotLS0gL2Rldi9udWxsCisrKyBiL3NyY3Br Z3MvdmlkY3V0dGVyL3BhdGNoZXMvbXB2LTAuMzUtMi5wYXRjaApAQCAtMCwwICsxLDI0IEBACito dHRwczovL2dpdGh1Yi5jb20vb3ptYXJ0aWFuL3ZpZGN1dHRlci9jb21taXQvODAxMGY1YzY0ZWZl NjhkODEzMGEwMzZmOTc2ZDJkMmZmMWM4NjhhZC5wYXRjaAorCitGcm9tIDgwMTBmNWM2NGVmZTY4 ZDgxMzBhMDM2Zjk3NmQyZDJmZjFjODY4YWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9t OiBQZXRlIEFsZXhhbmRyb3UgPHBldGVAb3ptYXJ0aWFucy5jb20+CitEYXRlOiBUdWUsIDIyIEZl YiAyMDIyIDE2OjA4OjI0ICsxMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBsaWJtcHYgdmVyc2lv biBudW1iZXIgZm9ybWF0CisKKy0tLQorIHZpZGN1dHRlci9saWJzL21wdndpZGdldC5weSB8IDIg Ky0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlm ZiAtLWdpdCBhL3ZpZGN1dHRlci9saWJzL21wdndpZGdldC5weSBiL3ZpZGN1dHRlci9saWJzL21w dndpZGdldC5weQoraW5kZXggMjM5YjZjOWMuLjY2NjFhZDg1IDEwMDY0NAorLS0tIGEvdmlkY3V0 dGVyL2xpYnMvbXB2d2lkZ2V0LnB5CisrKysgYi92aWRjdXR0ZXIvbGlicy9tcHZ3aWRnZXQucHkK K0BAIC0yNDcsNyArMjQ3LDcgQEAgZGVmIGZvcm1hdChzZWxmLCBzdHJlYW06IHN0cj0ndmlkZW8n KSAtPiBzdHI6CisgCisgICAgIGRlZiB2ZXJzaW9uKHNlbGYpIC0+IHN0cjoKKyAgICAgICAgIHZl ciA9IHNlbGYubXB2LmFwaV92ZXJzaW9uCistICAgICAgICByZXR1cm4gJ3swfS57MX0nLmZvcm1h dCh2ZXJbMF0sIHZlclsxXSkKKysgICAgICAgIHJldHVybiAnezB9LnsxfScuZm9ybWF0KHZlclsx XSwgdmVyWzBdKQorIAorICAgICBkZWYgb3B0aW9uKHNlbGYsIG9wdGlvbjogc3RyLCB2YWwpOgor ICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWwsIGJvb2wpOgpkaWZmIC0tZ2l0IGEvc3JjcGtncy92 aWRjdXR0ZXIvcGF0Y2hlcy9tcHYtMC4zNS0zLnBhdGNoIGIvc3JjcGtncy92aWRjdXR0ZXIvcGF0 Y2hlcy9tcHYtMC4zNS0zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uN2ExYjI5MDliNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjcGtncy92aWRjdXR0ZXIv cGF0Y2hlcy9tcHYtMC4zNS0zLnBhdGNoCkBAIC0wLDAgKzEsMTMyODkgQEAKK2h0dHBzOi8vZ2l0 aHViLmNvbS9vem1hcnRpYW4vdmlkY3V0dGVyL2NvbW1pdC80Y2YxNDU4ZDgzMmU2YWM3YTgyNGQ3 OTYzYzZkYzNhMGU1YzE3NTc0LnBhdGNoCisKK0Zyb20gNGNmMTQ1OGQ4MzJlNmFjN2E4MjRkNzk2 M2M2ZGMzYTBlNWMxNzU3NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBldGUgQWxl eGFuZHJvdSA8cGV0ZUBvem1hcnRpYW5zLmNvbT4KK0RhdGU6IFNhdCwgMzAgQXByIDIwMjIgMTU6 NDk6MTcgKzEwMDAKK1N1YmplY3Q6IFtQQVRDSF0gcHltcHYgdXBkYXRlcworCistLS0KKyB2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYuYyAgIHwgMzc5MiArKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0tLS0tLS0tCisgdmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCB8ICAgIDYgKy0KKyAyIGZp bGVzIGNoYW5nZWQsIDE5MDAgaW5zZXJ0aW9ucygrKSwgMTg5OCBkZWxldGlvbnMoLSkKKworZGlm ZiAtLWdpdCBhL3ZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5jIGIvdmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LmMKK2luZGV4IGEzNTIyZWY1Li4yNjgzOGEwMyAxMDA2NDQKKy0tLSBhL3ZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5jCisrKysgYi92aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYuYworQEAg LTk0NCw3ICs5NDQsNyBAQCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9P cGVuR0xSZW5kZXJDb250ZXh0OworIHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18z bXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9yczsKKyBzdHJ1Y3QgX19weXhfb3B0X2FyZ3Nf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfdm9pZHA7CisgCistLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5MAorKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4OTIKKyAgKiAgICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUgPSBNUFZf UkVOREVSX1BBUkFNX0lOVkFMSUQKKyAgKiAKKyAgKiAgICAgY2RlZiBhZGRfdm9pZHAoc2VsZiwg bXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTU2LDcgKzk1Niw3IEBAIHN0cnVjdCBfX3B5 eF9vcHRfYXJnc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF92b2lk cCB7CisgICBpbnQgb3duZWQ7CisgfTsKKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTU2CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE1OAorICAqIAor ICAqIAorICAqIGNkZWYgY2xhc3MgRW5kT2ZGaWxlUmVhY2hlZChvYmplY3QpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTcxLDcgKzk3MSw3IEBAIHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgeworIH07CisgCisgCistLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE4MgorKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxODQKKyAgKiAKKyAgKiAKKyAgKiBjZGVmIGNsYXNzIExvZ01lc3NhZ2Uo b2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTk4OCw3ICs5ODgsNyBA QCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlIHsKKyB9 OworIAorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDMKKysvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQ1CisgICogCisgICogCisgICogY2RlZiBjbGFz cyBQcm9wZXJ0eShvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTAw Myw3ICsxMDAzLDcgQEAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJv cGVydHkgeworIH07CisgCisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1 NgorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTgKKyAgKiAKKyAgKiAKKyAg KiBjZGVmIGNsYXNzIEV2ZW50KG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK K0BAIC0xMDIwLDcgKzEwMjAsNyBAQCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudCB7CisgfTsKKyAKKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzU5CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM2MQorICAqIAorICAq IAorICAqIGNkZWYgY2xhc3MgQ29udGV4dChvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTAzNyw3ICsxMDM3LDcgQEAgc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCB7CisgfTsKKyAKKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODgxCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4Mwor ICAqIERFRiBNQVhfUkVOREVSX1BBUkFNUyA9IDMyCisgICogCisgICogY2RlZiBjbGFzcyBfUmVu ZGVyUGFyYW1zKG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMDUy LDcgKzEwNTIsNyBAQCBzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVu ZGVyUGFyYW1zIHsKKyB9OworIAorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5MjgKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTMwCisgICogCisgICog QGN5dGhvbi5pbnRlcm5hbAorICAqIGNkZWYgY2xhc3MgUmVuZGVyRnJhbWVJbmZvKG9iamVjdCk6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMDY1LDcgKzEwNjUsNyBAQCBzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8geworIH07 CisgCisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzNworKy8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzkKKyAgKiAgICAgICAgIHJldHVybiBzZWxmCisg ICogCisgICogY2RlZiBjbGFzcyBSZW5kZXJDb250ZXh0KG9iamVjdCk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xMDg0LDcgKzEwODQsNyBAQCBzdHJ1Y3QgX19weXhfb2JqXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0IHsKKyB9OworIAorIAorLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIyCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMjQKKyAgKiAgICAgICAgIHNlbGYuY2xvc2UoKQorICAqIAorICAqIGNkZWYg Y2xhc3MgT3BlbkdMUmVuZGVyQ29udGV4dChSZW5kZXJDb250ZXh0KTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTEwOTYsNyArMTA5Niw3IEBAIHN0cnVjdCBfX3B5eF9vYmpfOXZp ZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQgeworIH07CisgCisgCistLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOAorKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozMjAKKyAgKiAKKyAgKiAKKyAgKiBkZWYgX2Vycm9ycyhmbik6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTEwLDcgKzExMTAsNyBAQCBzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fX3B5eF9zY29wZV9zdHJ1Y3RfX19lcnJvcnMg eworIAorIAorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNTYKKysvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTU4CisgICogCisgICogCisgICogY2RlZiBj bGFzcyBFbmRPZkZpbGVSZWFjaGVkKG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xMTI0LDcgKzExMjQsNyBAQCBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCB7Cisgc3RhdGljIHN0cnVjdCBfX3B5eF92 dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkICpfX3B5eF92 dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkOworIAorIAorLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxODIKKysvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTg0CisgICogCisgICogCisgICogY2RlZiBjbGFzcyBMb2dNZXNzYWdl KG9iamVjdCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTM4LDcgKzExMzgs NyBAQCBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVz c2FnZSB7Cisgc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Mb2dNZXNzYWdlICpfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlOworIAorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDMKKysv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQ1CisgICogCisgICogCisgICogY2Rl ZiBjbGFzcyBQcm9wZXJ0eShvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMTE1Miw3ICsxMTUyLDcgQEAgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80 bGlic18zbXB2X1Byb3BlcnR5IHsKKyBzdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZp ZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICpfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Qcm9wZXJ0eTsKKyAKKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjU2CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1OAorICAqIAorICAq IAorICAqIGNkZWYgY2xhc3MgRXZlbnQob2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTExNjcsNyArMTE2Nyw3IEBAIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9FdmVudCB7Cisgc3RhdGljIHN0cnVjdCBfX3B5eF92dGFic3RydWN0 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRXZlbnQ7CisgCisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjM1OQorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNjEKKyAgKiAKKyAgKiAK KyAgKiBjZGVmIGNsYXNzIENvbnRleHQob2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTExODQsNyArMTE4NCw3IEBAIHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0IHsKKyBzdGF0aWMgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1 Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKl9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRl cl80bGlic18zbXB2X0NvbnRleHQ7CisgCisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjg4MQorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODMKKyAgKiBE RUYgTUFYX1JFTkRFUl9QQVJBTVMgPSAzMgorICAqIAorICAqIGNkZWYgY2xhc3MgX1JlbmRlclBh cmFtcyhvYmplY3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTIwMCw3ICsx MjAwLDcgQEAgc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19S ZW5kZXJQYXJhbXMgeworIHN0YXRpYyBzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX1JlbmRlclBhcmFtczsKKyAKKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTI4CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMAorICAqIAor ICAqIEBjeXRob24uaW50ZXJuYWwKKyAgKiBjZGVmIGNsYXNzIFJlbmRlckZyYW1lSW5mbyhvYmpl Y3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjUyMiw5ICsyNTIyLDkgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF90cF9uZXdfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5H TFJlbmRlckNvbnRleHQoUHlUeXBlT2IKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3RwX25ld185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzKFB5VHlwZU9i amVjdCAqdCwgUHlPYmplY3QgKmEsIFB5T2JqZWN0ICprKTsgLypwcm90byovCisgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9pbnRfMDsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8xOworLXN0 YXRpYyBQeU9iamVjdCAqX19weXhfaW50XzI7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9pbnRf MzsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ludF8zMjsKKytzdGF0aWMgUHlPYmplY3QgKl9f cHl4X2ludF8xMDk7Cisgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9pbnRfNTcxMzE2OTsKKyBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X2ludF85MDk1ODI2MjsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2ludF8xNDIwMzY5MTA7CitAQCAtMjU4OCw3ICsyNTg4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9jb2Rlb2JqX181MzsKKyBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2NvZGVvYmpfXzU1Owor IC8qIExhdGUgaW5jbHVkZXMgKi8KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTUKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcKKyAgKiBfc3RyZGVj X2VyciA9ICJzdXJyb2dhdGVlc2NhcGUiIGlmIF9pc19weTMgZWxzZSAic3RyaWN0IgorICAqICMg bXB2IC0+IFB5dGhvbgorICAqIGRlZiBfc3RyZGVjKHMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMjYyNyw3ICsyNjI3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICoKKyAg IGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf c3RyZGVjIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTYK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OAorICAqICMgbXB2IC0+IFB5 dGhvbgorICAqIGRlZiBfc3RyZGVjKHMpOgorICAqICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC0yNjQzLDcgKzI2NDMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fc3RyZGVjKENZVEhPTl9VTlVTRUQgUHlPYmplY3Qg KgorICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7CisgICAgIC8qdHJ5OiovIHsKKyAKKy0g ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcKKysgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTkKKyAgKiBkZWYgX3N0cmRlYyhzKToKKyAgKiAg ICAgdHJ5OgorICAqICAgICAgICAgcmV0dXJuIHMuZGVjb2RlKCJ1dGYtOCIsIF9zdHJkZWNfZXJy KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjY1MSw5ICsyNjUxLDkgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICoKKyAgKiAgICAgICAgICMgSW4gcHl0aG9uMiwgYmFpbCB0byBi eXRlcyBvbiBmYWlsdXJlCisgICovCisgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0g ICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfcywgX19w eXhfbl9zX2RlY29kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDU3 LCBfX3B5eF9MM19lcnJvcikKKysgICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3ZfcywgX19weXhfbl9zX2RlY29kZSk7IGlmICh1bmxpa2VseSghX19weXhf dF81KSkgX19QWVhfRVJSKDAsIDU5LCBfX3B5eF9MM19lcnJvcikKKyAgICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF81KTsKKy0gICAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf NiwgX19weXhfbl9zX3N0cmRlY19lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCA1NywgX19weXhfTDNfZXJyb3IpCisrICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFs TmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19zdHJkZWNfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgNTksIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzYpOworICAgICAgIF9fcHl4X3RfNyA9IE5VTEw7CisgICAgICAgX19weXhf dF84ID0gMDsKK0BAIC0yNjcwLDcgKzI2NzAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fc3RyZGVjKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKgor ICAgICAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKyAgICAgICBpZiAoUHlGdW5jdGlvbl9DaGVj ayhfX3B5eF90XzUpKSB7CisgICAgICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5 eF90XzcsIF9fcHl4X2twX3NfdXRmXzgsIF9fcHl4X3RfNn07CistICAgICAgICBfX3B5eF90XzQg PSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4 X3RfOCwgMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigw LCA1NywgX19weXhfTDNfZXJyb3IpCisrICAgICAgICBfX3B5eF90XzQgPSBfX1B5eF9QeUZ1bmN0 aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4X3RfOCwgMitfX3B5eF90 XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA1OSwgX19weXhfTDNf ZXJyb3IpCisgICAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7 CisgICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgICAgICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworQEAgLTI2NzksMTQgKzI2NzksMTQgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRI T05fVU5VU0VEIFB5T2JqZWN0ICoKKyAgICAgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAorICAg ICAgIGlmIChfX1B5eF9QeUZhc3RDRnVuY3Rpb25fQ2hlY2soX19weXhfdF81KSkgeworICAgICAg ICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF83LCBfX3B5eF9rcF9zX3V0Zl84 LCBfX3B5eF90XzZ9OworLSAgICAgICAgX19weXhfdF80ID0gX19QeXhfUHlDRnVuY3Rpb25fRmFz dENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAyK19fcHl4X3RfOCk7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDU3LCBfX3B5eF9MM19lcnJvcikK KysgICAgICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3Rf NSwgX19weXhfdGVtcCsxLV9fcHl4X3RfOCwgMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNCkpIF9fUFlYX0VSUigwLCA1OSwgX19weXhfTDNfZXJyb3IpCisgICAgICAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgICAgICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF80KTsKKyAgICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOworICAgICAgIH0gZWxzZQorICAgICAgICNlbmRpZgorICAgICAgIHsKKy0gICAgICAg IF9fcHl4X3RfOSA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF84KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzkpKSBfX1BZWF9FUlIoMCwgNTcsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgX19weXhf dF85ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOSkp IF9fUFlYX0VSUigwLCA1OSwgX19weXhfTDNfZXJyb3IpCisgICAgICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF85KTsKKyAgICAgICAgIGlmIChfX3B5eF90XzcpIHsKKyAgICAgICAgICAgX19QeXhf R0lWRVJFRihfX3B5eF90XzcpOyBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3RfOSwgMCwgX19weXhf dF83KTsgX19weXhfdF83ID0gTlVMTDsKK0BAIC0yNjk3LDcgKzI2OTcsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fc3RyZGVjKENZVEhPTl9VTlVT RUQgUHlPYmplY3QgKgorICAgICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzYpOworICAgICAg ICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzksIDErX19weXhfdF84LCBfX3B5eF90XzYpOwor ICAgICAgICAgX19weXhfdF82ID0gMDsKKy0gICAgICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2Jq ZWN0X0NhbGwoX19weXhfdF81LCBfX3B5eF90XzksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNCkpIF9fUFlYX0VSUigwLCA1NywgX19weXhfTDNfZXJyb3IpCisrICAgICAgICBfX3B5eF90 XzQgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfNSwgX19weXhfdF85LCBOVUxMKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNTksIF9fcHl4X0wzX2Vycm9yKQor ICAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICAgICAgICBfX1B5eF9ERUNSRUYo X19weXhfdF85KTsgX19weXhfdF85ID0gMDsKKyAgICAgICB9CitAQCAtMjcwNiw3ICsyNzA2LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRl YyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICoKKyAgICAgICBfX3B5eF90XzQgPSAwOworICAgICAg IGdvdG8gX19weXhfTDdfdHJ5X3JldHVybjsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTYKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NTgKKyAgKiAjIG1wdiAtPiBQeXRob24KKyAgKiBkZWYgX3N0cmRlYyhzKToKKyAgKiAgICAg dHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjcyMSw3ICsyNzIxLDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhD WVRIT05fVU5VU0VEIFB5T2JqZWN0ICoKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBf X3B5eF90XzcgPSAwOworICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9 IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OAorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjAKKyAgKiAgICAgdHJ5OgorICAqICAg ICAgICAgcmV0dXJuIHMuZGVjb2RlKCJ1dGYtOCIsIF9zdHJkZWNfZXJyKQorICAqICAgICBleGNl cHQgVW5pY29kZURlY29kZUVycm9yOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MjczMSwxMiArMjczMSwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fc3RyZGVjKENZVEhPTl9VTlVTRUQgUHlPYmplY3QgKgorICAgICBfX3B5eF90 XzggPSBfX1B5eF9QeUVycl9FeGNlcHRpb25NYXRjaGVzKF9fcHl4X2J1aWx0aW5fVW5pY29kZURl Y29kZUVycm9yKTsKKyAgICAgaWYgKF9fcHl4X3RfOCkgeworICAgICAgIF9fUHl4X0FkZFRyYWNl YmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9zdHJkZWMiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9s aW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKy0gICAgICBpZiAoX19QeXhfR2V0RXhjZXB0aW9uKCZf X3B5eF90XzQsICZfX3B5eF90XzUsICZfX3B5eF90XzkpIDwgMCkgX19QWVhfRVJSKDAsIDU4LCBf X3B5eF9MNV9leGNlcHRfZXJyb3IpCisrICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlvbigmX19w eXhfdF80LCAmX19weXhfdF81LCAmX19weXhfdF85KSA8IDApIF9fUFlYX0VSUigwLCA2MCwgX19w eXhfTDVfZXhjZXB0X2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzkpOworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MAorKyAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MgorICAqICAgICBleGNlcHQg VW5pY29kZURlY29kZUVycm9yOgorICAqICAgICAgICAgIyBJbiBweXRob24yLCBiYWlsIHRvIGJ5 dGVzIG9uIGZhaWx1cmUKKyAgKiAgICAgICAgIHJldHVybiBieXRlcyhzKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMjc0NCw3ICsyNzQ0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05fVU5VU0VEIFB5T2Jq ZWN0ICoKKyAgKiAjIFB5dGhvbiAtPiBtcHYKKyAgKi8KKyAgICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOworLSAgICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoKChQ eU9iamVjdCAqKSgmUHlCeXRlc19UeXBlKSksIF9fcHl4X3Zfcyk7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDYwLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCisrICAgICAg X19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZygoKFB5T2JqZWN0ICopKCZQeUJ5 dGVzX1R5cGUpKSwgX19weXhfdl9zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgNjIsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF82KTsKKyAgICAgICBfX3B5eF9yID0gX19weXhfdF82OworICAgICAgIF9fcHl4X3RfNiA9 IDA7CitAQCAtMjc1Niw3ICsyNzU2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICoKKyAgICAg Z290byBfX3B5eF9MNV9leGNlcHRfZXJyb3I7CisgICAgIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcjo7 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NgorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTgKKyAgKiAjIG1wdiAtPiBQeXRob24KKyAg KiBkZWYgX3N0cmRlYyhzKToKKyAgKiAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtMjc4Miw3ICsyNzgyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX3N0cmRlYyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0ICoKKyAgICAg Z290byBfX3B5eF9MMDsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1NQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU3CisgICogX3N0 cmRlY19lcnIgPSAic3Vycm9nYXRlZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIKKyAg KiAjIG1wdiAtPiBQeXRob24KKyAgKiBkZWYgX3N0cmRlYyhzKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTI4MDUsNyArMjgwNSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2X19zdHJkZWMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdCAq CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYzCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1CisgICogCisg ICogIyBQeXRob24gLT4gbXB2CisgICogZGVmIF9zdHJlbmMocyk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC0yODQ0LDcgKzI4NDQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8yX3N0cmVuYyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0 CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4 dCgiX3N0cmVuYyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjY0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYKKyAgKiAjIFB5dGhv biAtPiBtcHYKKyAgKiBkZWYgX3N0cmVuYyhzKToKKyAgKiAgICAgdHJ5OiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMjg2MCw3ICsyODYwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMl9zdHJlbmMoQ1lUSE9OX1VOVVNFRCBQeU9i amVjdAorICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7CisgICAgIC8qdHJ5OiovIHsKKyAK Ky0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjUKKysgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjcKKyAgKiBkZWYgX3N0cmVuYyhzKToKKyAg KiAgICAgdHJ5OgorICAqICAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJ1dGYtOCIsIF9zdHJkZWNf ZXJyKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjg2OCw5ICsyODY4LDkgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMl9zdHJlbmMo Q1lUSE9OX1VOVVNFRCBQeU9iamVjdAorICAqICAgICAgICAgIyBJbiBweXRob24yLCBhc3N1bWUg Ynl0ZXMgYW5kIHdhbGsgcmlnaHQgdGhyb3VnaAorICAqLworICAgICAgIF9fUHl4X1hERUNSRUYo X19weXhfcik7CistICAgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X3MsIF9fcHl4X25fc19lbmNvZGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9f UFlYX0VSUigwLCA2NSwgX19weXhfTDNfZXJyb3IpCisrICAgICAgX19weXhfdF81ID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3MsIF9fcHl4X25fc19lbmNvZGUpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA2NywgX19weXhfTDNfZXJyb3IpCisgICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CistICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFs TmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19zdHJkZWNfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgNjUsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgIF9fUHl4X0dl dE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3Nfc3RyZGVjX2Vycik7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDY3LCBfX3B5eF9MM19lcnJvcikKKyAg ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAgICAgICBfX3B5eF90XzcgPSBOVUxMOwor ICAgICAgIF9fcHl4X3RfOCA9IDA7CitAQCAtMjg4Nyw3ICsyODg3LDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMl9zdHJlbmMoQ1lUSE9OX1VOVVNF RCBQeU9iamVjdAorICAgICAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKyAgICAgICBpZiAoUHlG dW5jdGlvbl9DaGVjayhfX3B5eF90XzUpKSB7CisgICAgICAgICBQeU9iamVjdCAqX19weXhfdGVt cFszXSA9IHtfX3B5eF90XzcsIF9fcHl4X2twX3NfdXRmXzgsIF9fcHl4X3RfNn07CistICAgICAg ICBfX3B5eF90XzQgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhf dGVtcCsxLV9fcHl4X3RfOCwgMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCA2NSwgX19weXhfTDNfZXJyb3IpCisrICAgICAgICBfX3B5eF90XzQgPSBf X1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4X3Rf OCwgMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2 NywgX19weXhfTDNfZXJyb3IpCisgICAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9f cHl4X3RfNyA9IDA7CisgICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgICAgICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworQEAgLTI4OTYsMTQgKzI4 OTYsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Ml9zdHJlbmMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAorICAgICAgICNpZiBDWVRIT05fRkFTVF9Q WUNDQUxMCisgICAgICAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzUp KSB7CisgICAgICAgICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzcsIF9fcHl4 X2twX3NfdXRmXzgsIF9fcHl4X3RfNn07CistICAgICAgICBfX3B5eF90XzQgPSBfX1B5eF9QeUNG dW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzUsIF9fcHl4X3RlbXArMS1fX3B5eF90XzgsIDIrX19w eXhfdF84KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjUsIF9fcHl4 X0wzX2Vycm9yKQorKyAgICAgICAgX19weXhfdF80ID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENh bGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAyK19fcHl4X3RfOCk7IGlmICh1 bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDY3LCBfX3B5eF9MM19lcnJvcikKKyAg ICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAgICAgICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Nik7IF9fcHl4X3RfNiA9IDA7CisgICAgICAgfSBlbHNlCisgICAgICAgI2VuZGlmCisgICAgICAg eworLSAgICAgICAgX19weXhfdF85ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzgpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlYX0VSUigwLCA2NSwgX19weXhfTDNfZXJyb3IpCisrICAg ICAgICBfX3B5eF90XzkgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfOCk7IGlmICh1bmxpa2VseSgh X19weXhfdF85KSkgX19QWVhfRVJSKDAsIDY3LCBfX3B5eF9MM19lcnJvcikKKyAgICAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzkpOworICAgICAgICAgaWYgKF9fcHl4X3RfNykgeworICAgICAg ICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNyk7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF85 LCAwLCBfX3B5eF90XzcpOyBfX3B5eF90XzcgPSBOVUxMOworQEAgLTI5MTQsNyArMjkxNCw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzJfc3RyZW5j KENZVEhPTl9VTlVTRUQgUHlPYmplY3QKKyAgICAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF82 KTsKKyAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF85LCAxK19fcHl4X3RfOCwgX19w eXhfdF82KTsKKyAgICAgICAgIF9fcHl4X3RfNiA9IDA7CistICAgICAgICBfX3B5eF90XzQgPSBf X1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfNSwgX19weXhfdF85LCBOVUxMKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjUsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAg ICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzUsIF9fcHl4X3RfOSwg TlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDY3LCBfX3B5eF9M M19lcnJvcikKKyAgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgICAgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7CisgICAgICAgfQorQEAgLTI5MjMs NyArMjkyMyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzJfc3RyZW5jKENZVEhPTl9VTlVTRUQgUHlPYmplY3QKKyAgICAgICBfX3B5eF90XzQgPSAw OworICAgICAgIGdvdG8gX19weXhfTDdfdHJ5X3JldHVybjsKKyAKKy0gICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjQKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NjYKKyAgKiAjIFB5dGhvbiAtPiBtcHYKKyAgKiBkZWYgX3N0cmVuYyhzKToK KyAgKiAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjkzOCw3ICsy OTM4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Ml9zdHJlbmMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAorICAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19w eXhfdF85ID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2 CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2OAorICAqICAgICB0cnk6 CisgICogICAgICAgICByZXR1cm4gcy5lbmNvZGUoInV0Zi04IiwgX3N0cmRlY19lcnIpCisgICog ICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0yOTQ4LDEyICsyOTQ4LDEyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzJfc3RyZW5jKENZVEhPTl9VTlVTRUQgUHlPYmplY3QKKyAgICAg X19weXhfdF84ID0gX19QeXhfUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhfX3B5eF9idWlsdGluX1Vu aWNvZGVFbmNvZGVFcnJvcik7CisgICAgIGlmIChfX3B5eF90XzgpIHsKKyAgICAgICBfX1B5eF9B ZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5fc3RyZW5jIiwgX19weXhfY2xpbmVubywg X19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICAgICAgaWYgKF9fUHl4X0dldEV4Y2Vw dGlvbigmX19weXhfdF80LCAmX19weXhfdF81LCAmX19weXhfdF85KSA8IDApIF9fUFlYX0VSUigw LCA2NiwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorKyAgICAgIGlmIChfX1B5eF9HZXRFeGNlcHRp b24oJl9fcHl4X3RfNCwgJl9fcHl4X3RfNSwgJl9fcHl4X3RfOSkgPCAwKSBfX1BZWF9FUlIoMCwg NjgsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKyAgICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF85KTsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NjgKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAKKyAgKiAgICAg ZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgKiAgICAgICAgICMgSW4gcHl0aG9uMiwgYXNz dW1lIGJ5dGVzIGFuZCB3YWxrIHJpZ2h0IHRocm91Z2gKKyAgKiAgICAgICAgIHJldHVybiBzICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0yOTcxLDcgKzI5NzEsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8yX3N0cmVuYyhDWVRIT05f VU5VU0VEIFB5T2JqZWN0CisgICAgIGdvdG8gX19weXhfTDVfZXhjZXB0X2Vycm9yOworICAgICBf X3B5eF9MNV9leGNlcHRfZXJyb3I6OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjQKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2Cisg ICogIyBQeXRob24gLT4gbXB2CisgICogZGVmIF9zdHJlbmMocyk6CisgICogICAgIHRyeTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTI5OTcsNyArMjk5Nyw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzJfc3RyZW5jKENZVEhPTl9V TlVTRUQgUHlPYmplY3QKKyAgICAgZ290byBfX3B5eF9MMDsKKyAgIH0KKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjY1CisgICogCisgICogIyBQeXRob24gLT4gbXB2CisgICogZGVmIF9zdHJlbmMo cyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0zMDIwLDcgKzMwMjAsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8yX3N0cmVuYyhD WVRIT05fVU5VU0VEIFB5T2JqZWN0CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE2MworKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxNjUKKyAgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHJlYXNvbiwgZXJyb3IK KyAgKiAKKyAgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfZW5kX2ZpbGUqIGVvZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0zMDM3LDE0ICszMDM3LDE0IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTZFbmRPZkZpbGVS ZWFjaGVkX19pbml0KHN0cnVjdCBfCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2luaXQiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxNjQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxNjYKKyAgKiAKKyAgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfZW5kX2Zp bGUqIGVvZik6CisgICogICAgICAgICBzZWxmLnJlYXNvbiA9IGVvZi5yZWFzb24gICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5lcnJvciA9IGVvZi5lcnJvcgor ICAqICAgICAgICAgcmV0dXJuIHNlbGYKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50 X0Zyb21faW50KF9fcHl4X3ZfZW9mLT5yZWFzb24pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxNjQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhf UHlJbnRfRnJvbV9pbnQoX19weXhfdl9lb2YtPnJlYXNvbik7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDE2NiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKyAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0dPVFJF RihfX3B5eF92X3NlbGYtPnJlYXNvbik7CitAQCAtMzA1MiwxNCArMzA1MiwxNCBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hl ZF9faW5pdChzdHJ1Y3QgXworICAgX19weXhfdl9zZWxmLT5yZWFzb24gPSBfX3B5eF90XzE7Cisg ICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjE2NQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE2NworICAqICAgICBj ZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9lbmRfZmlsZSogZW9mKToKKyAgKiAgICAgICAgIHNl bGYucmVhc29uID0gZW9mLnJlYXNvbgorICAqICAgICAgICAgc2VsZi5lcnJvciA9IGVvZi5lcnJv ciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICByZXR1cm4gc2VsZgor ICAqIAorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9l b2YtPmVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTY1LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4 X3ZfZW9mLT5lcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE2 NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4 X0dJVkVSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmVycm9y KTsKK0BAIC0zMDY3LDcgKzMwNjcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9faW5pdChzdHJ1Y3QgXworICAgX19w eXhfdl9zZWxmLT5lcnJvciA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTY2CisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTY4CisgICogICAgICAgICBzZWxmLnJlYXNvbiA9IGVvZi5yZWFz b24KKyAgKiAgICAgICAgIHNlbGYuZXJyb3IgPSBlb2YuZXJyb3IKKyAgKiAgICAgICAgIHJldHVy biBzZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0zMDc5LDcgKzMwNzksNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZG aWxlUmVhY2hlZF9faW5pdChzdHJ1Y3QgXworICAgX19weXhfciA9ICgoUHlPYmplY3QgKilfX3B5 eF92X3NlbGYpOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxNjMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox NjUKKyAgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHJlYXNvbiwgZXJyb3IKKyAgKiAKKyAgKiAg ICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfZW5kX2ZpbGUqIGVvZik6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0zMDk4LDcgKzMwOTgsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE2RW5kT2ZGaWxlUmVhY2hlZF9faW5pdChz dHJ1Y3QgXworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxNjEKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTYz CisgICogICAgIFdyYXBzOiBtcHZfZXZlbnRfZW5kX2ZpbGUKKyAgKiAgICAgIiIiCisgICogICAg IGNkZWYgcHVibGljIG9iamVjdCByZWFzb24sIGVycm9yICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0zNTg3LDcgKzM1ODcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJlYWNoZWRfMl9fc2V0c3RhdGVfYworICAg cmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxODkKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTkxCisgICogICAgIGNk ZWYgcHVibGljIG9iamVjdCBwcmVmaXgsIGxldmVsLCB0ZXh0LCBsb2dfbGV2ZWwKKyAgKiAKKyAg KiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfbG9nX21lc3NhZ2UqIG1zZyk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0zNjA3LDE2ICszNjA3LDE2IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX19pbml0 KHN0cnVjdCBfX3B5eF9vCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX2luaXQiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxOTAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox OTIKKyAgKiAKKyAgKiAgICAgY2RlZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfbG9nX21lc3NhZ2Uq IG1zZyk6CisgICogICAgICAgICBzZWxmLmxldmVsID0gX3N0cmRlYyhtc2cubGV2ZWwpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0cmRl Yyhtc2cucHJlZml4KQorICAqICAgICAgICAgc2VsZi50ZXh0ID0gX3N0cmRlYyhtc2cudGV4dCkK KyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nf c3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTkwLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5 eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTky LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhf dF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbXNnLT5sZXZlbCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDE5MCwgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9tc2ctPmxldmVs KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTkyLCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgX19weXhfdF80ID0gTlVMTDsK KyAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF8yKSkpIHsKK0BAIC0zNjMxLDcgKzM2MzEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9faW5pdChzdHJ1Y3QgX19w eXhfbworICAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFy Z3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMg PSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTkwLCBfX3B5 eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5 MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfR0lWRVJFRihfX3B5 eF90XzEpOworQEAgLTM2NDAsMTYgKzM2NDAsMTYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfX2luaXQoc3RydWN0IF9fcHl4X28K KyAgIF9fcHl4X3Zfc2VsZi0+bGV2ZWwgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5MQorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5MworICAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1w dl9ldmVudF9sb2dfbWVzc2FnZSogbXNnKToKKyAgKiAgICAgICAgIHNlbGYubGV2ZWwgPSBfc3Ry ZGVjKG1zZy5sZXZlbCkKKyAgKiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0cmRlYyhtc2cucHJl Zml4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBzZWxmLnRleHQg PSBfc3RyZGVjKG1zZy50ZXh0KQorICAqICAgICAgICAgc2VsZi5sb2dfbGV2ZWwgPSBtc2cubG9n X2xldmVsCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19w eXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDE5 MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf MiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDE5MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0g IF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X21zZy0+cHJlZml4 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTkxLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X21z Zy0+cHJlZml4KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTkzLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgX19weXhfdF80 ID0gTlVMTDsKKyAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRo b2RfQ2hlY2soX19weXhfdF8yKSkpIHsKK0BAIC0zNjY0LDcgKzM2NjQsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9faW5pdChz dHJ1Y3QgX19weXhfbworICAgX19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVj dF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9i amVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNSRUYo X19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBf X3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MTkxLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDE5MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK KyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfR0lW RVJFRihfX3B5eF90XzEpOworQEAgLTM2NzMsMTYgKzM2NzMsMTYgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xMExvZ01lc3NhZ2VfX2luaXQoc3RydWN0 IF9fcHl4X28KKyAgIF9fcHl4X3Zfc2VsZi0+cHJlZml4ID0gX19weXhfdF8xOworICAgX19weXhf dF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTIKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTQKKyAgKiAgICAgICAgIHNlbGYu bGV2ZWwgPSBfc3RyZGVjKG1zZy5sZXZlbCkKKyAgKiAgICAgICAgIHNlbGYucHJlZml4ID0gX3N0 cmRlYyhtc2cucHJlZml4KQorICAqICAgICAgICAgc2VsZi50ZXh0ID0gX3N0cmRlYyhtc2cudGV4 dCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5sb2dfbGV2 ZWwgPSBtc2cubG9nX2xldmVsCisgICogICAgICAgICByZXR1cm4gc2VsZgorICAqLworLSAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxOTIsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxOTQsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX3B5eF90XzMgPSBfX1B5eF9Q eUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9tc2ctPnRleHQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCAxOTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8zID0g X19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbXNnLT50ZXh0KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTk0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzMpOworICAgX19weXhfdF80ID0gTlVMTDsKKyAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsK K0BAIC0zNjk3LDcgKzM2OTcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEwTG9nTWVzc2FnZV9faW5pdChzdHJ1Y3QgX19weXhfbworICAgX19weXhf dF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBf X3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3Rf MiwgX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTkyLCBfX3B5eF9MMV9lcnJvcikKKysg IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5NCwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworQEAgLTM3 MDYsMTQgKzM3MDYsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xMExvZ01lc3NhZ2VfX2luaXQoc3RydWN0IF9fcHl4X28KKyAgIF9fcHl4X3Zfc2Vs Zi0+dGV4dCA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTkzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTk1CisgICogICAgICAgICBzZWxmLnByZWZpeCA9IF9zdHJkZWMobXNnLnByZWZp eCkKKyAgKiAgICAgICAgIHNlbGYudGV4dCA9IF9zdHJkZWMobXNnLnRleHQpCisgICogICAgICAg ICBzZWxmLmxvZ19sZXZlbCA9IG1zZy5sb2dfbGV2ZWwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorICAqICAgICAgICAgcmV0dXJuIHNlbGYKKyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfMSA9 IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfbXNnLT5sb2dfbGV2ZWwpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxOTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9tc2ctPmxvZ19sZXZlbCk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDE5NSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8x KTsKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmxvZ19sZXZlbCk7CitAQCAtMzcyMSw3 ICszNzIxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xMExvZ01lc3NhZ2VfX2luaXQoc3RydWN0IF9fcHl4X28KKyAgIF9fcHl4X3Zfc2VsZi0+bG9n X2xldmVsID0gX19weXhfdF8xOworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxOTYKKyAgKiAgICAgICAgIHNlbGYudGV4dCA9IF9zdHJkZWMobXNnLnRleHQpCisg ICogICAgICAgICBzZWxmLmxvZ19sZXZlbCA9IG1zZy5sb2dfbGV2ZWwKKyAgKiAgICAgICAgIHJl dHVybiBzZWxmICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0zNzMzLDcgKzM3MzMs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEwTG9n TWVzc2FnZV9faW5pdChzdHJ1Y3QgX19weXhfbworICAgX19weXhfciA9ICgoUHlPYmplY3QgKilf X3B5eF92X3NlbGYpOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxODkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxOTEKKyAgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHByZWZpeCwgbGV2ZWwsIHRleHQsIGxv Z19sZXZlbAorICAqIAorICAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9sb2dfbWVz c2FnZSogbXNnKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTM3NTUsNyArMzc1 NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBM b2dNZXNzYWdlX19pbml0KHN0cnVjdCBfX3B5eF9vCisgICByZXR1cm4gX19weXhfcjsKKyB9Cisg CistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE4NworKy8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxODkKKyAgKiAgICAgV3JhcHM6IG1wdl9ldmVudF9sb2dfbWVz c2FnZQorICAqICAgICAiIiIKKyAgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IHByZWZpeCwgbGV2 ZWwsIHRleHQsIGxvZ19sZXZlbCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNDQz OCw3ICs0NDM4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTBMb2dNZXNzYWdlXzJfX3NldHN0YXRlX2N5dGhvbl8KKyAgIHJldHVybiBfX3B5eF9y OworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTk3CisrLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE5OQorICAqIAorICAqIAorICAqIGNkZWYgX2Nv bnZlcnRfbm9kZV92YWx1ZShtcHZfbm9kZSBub2RlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTQ0NTksNyArNDQ1OSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShzdHJ1Y3QgbXB2X25vCisgICBp bnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2Nv bnZlcnRfbm9kZV92YWx1ZSIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjE5OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMAorICAq IAorICAqIGNkZWYgX2NvbnZlcnRfbm9kZV92YWx1ZShtcHZfbm9kZSBub2RlKToKKyAgKiAgICAg aWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC00NDY5LDcgKzQ0NjksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ubwor ICAgc3dpdGNoIChfX3B5eF92X25vZGUuZm9ybWF0KSB7CisgICAgIGNhc2UgTVBWX0ZPUk1BVF9T VFJJTkc6CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTkKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMQorICAqIGNkZWYgX2NvbnZl cnRfbm9kZV92YWx1ZShtcHZfbm9kZSBub2RlKToKKyAgKiAgICAgaWYgbm9kZS5mb3JtYXQgPT0g TVBWX0ZPUk1BVF9TVFJJTkc6CisgICogICAgICAgICByZXR1cm4gX3N0cmRlYyhub2RlLnUuc3Ry aW5nKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNDQ3Nyw5ICs0NDc3LDkgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9u b2RlX3ZhbHVlKHN0cnVjdCBtcHZfbm8KKyAgKiAgICAgICAgIHJldHVybiBub3Qgbm90IGludChu b2RlLnUuZmxhZykKKyAgKi8KKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxOTksIF9fcHl4X0wxX2Vycm9yKQor KyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRl Yyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDIwMSwgX19weXhfTDFf ZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX3B5eF90XzMgPSBf X1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9ub2RlLnUuc3RyaW5nKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTk5LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19weXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3Zfbm9kZS51LnN0cmlu Zyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDIwMSwgX19weXhfTDFf ZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgICBfX3B5eF90XzQgPSBO VUxMOworICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9k X0NoZWNrKF9fcHl4X3RfMikpKSB7CitAQCAtNDQ5NCwxNCArNDQ5NCwxNCBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUo c3RydWN0IG1wdl9ubworICAgICBfX3B5eF90XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNCwgX19weXhfdF8zKSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpOworICAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAxOTksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAyMDEsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 CisgICAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisgICAgIF9fcHl4X3RfMSA9IDA7CisgICAgIGdv dG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox OTgKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMAorICAqIAorICAq IGNkZWYgX2NvbnZlcnRfbm9kZV92YWx1ZShtcHZfbm9kZSBub2RlKToKKyAgKiAgICAgaWYgbm9k ZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC00NTExLDcgKzQ1MTEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ubworICAgICBi cmVhazsKKyAgICAgY2FzZSBNUFZfRk9STUFUX0ZMQUc6CisgCistICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyMDEKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjIwMworICAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMobm9kZS51LnN0cmluZykKKyAg KiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CisgICogICAgICAgICBy ZXR1cm4gbm90IG5vdCBpbnQobm9kZS51LmZsYWcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC00NTE5LDIwICs0NTE5LDIwIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShzdHJ1Y3QgbXB2X25vCisgICog ICAgICAgICByZXR1cm4gaW50KG5vZGUudS5pbnQ2NCkKKyAgKi8KKyAgICAgX19QeXhfWERFQ1JF RihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhf dl9ub2RlLnUuZmxhZyk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIw MSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50 KF9fcHl4X3Zfbm9kZS51LmZsYWcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAyMDMsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZygoKFB5T2JqZWN0ICop KCZQeUludF9UeXBlKSksIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDIwMSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoKChQeU9iamVjdCAqKSgmUHlJbnRfVHlwZSkpLCBfX3B5eF90XzEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyMDMsIF9fcHl4X0wxX2Vy cm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0 X0lzVHJ1ZShfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF81IDwgMCkpIF9fUFlYX0VS UigwLCAyMDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVj dF9Jc1RydWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNSA8IDApKSBfX1BZWF9F UlIoMCwgMjAzLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygo ISgoIV9fcHl4X3RfNSkgIT0gMCkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgMjAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlCb29s X0Zyb21Mb25nKCghKCghX19weXhfdF81KSAhPSAwKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCAyMDMsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8yKTsKKyAgICAgX19weXhfciA9IF9fcHl4X3RfMjsKKyAgICAgX19weXhfdF8yID0g MDsKKyAgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjIwMAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjAy CisgICogICAgIGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgorICAqICAgICAg ICAgcmV0dXJuIF9zdHJkZWMobm9kZS51LnN0cmluZykKKyAgKiAgICAgZWxpZiBub2RlLmZvcm1h dCA9PSBNUFZfRk9STUFUX0ZMQUc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC00 NTQyLDcgKzQ1NDIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ubworICAgICBicmVhazsKKyAg ICAgY2FzZSBNUFZfRk9STUFUX0lOVDY0OgorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjAzCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy MDUKKyAgKiAgICAgICAgIHJldHVybiBub3Qgbm90IGludChub2RlLnUuZmxhZykKKyAgKiAgICAg ZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorICAqICAgICAgICAgcmV0dXJu IGludChub2RlLnUuaW50NjQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC00NTUw LDE2ICs0NTUwLDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShzdHJ1Y3QgbXB2X25vCisgICogICAgICAgICByZXR1 cm4gZmxvYXQobm9kZS51LmRvdWJsZV8pCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19weXhf cik7CistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRfdChfX3B5eF92X25v ZGUudS5pbnQ2NCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDIwMywg X19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRf dChfX3B5eF92X25vZGUudS5pbnQ2NCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDAsIDIwNSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIp OworLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKCgoUHlPYmplY3Qg KikoJlB5SW50X1R5cGUpKSwgX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMjAzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xID0gX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZygoKFB5T2JqZWN0ICopKCZQeUludF9UeXBlKSksIF9fcHl4X3Rf Mik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIwNSwgX19weXhfTDFf ZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9ERUNSRUYo X19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgICAgX19weXhfciA9IF9fcHl4X3RfMTsKKyAg ICAgX19weXhfdF8xID0gMDsKKyAgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwMgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjA0CisgICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9G TEFHOgorICAqICAgICAgICAgcmV0dXJuIG5vdCBub3QgaW50KG5vZGUudS5mbGFnKQorICAqICAg ICBlbGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC00NTY5LDcgKzQ1NjksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9u bworICAgICBicmVhazsKKyAgICAgY2FzZSBNUFZfRk9STUFUX0RPVUJMRToKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwNQorKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjA3CisgICogICAgICAgICByZXR1cm4gaW50KG5vZGUudS5pbnQ2 NCkKKyAgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKyAgKiAg ICAgICAgIHJldHVybiBmbG9hdChub2RlLnUuZG91YmxlXykgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTQ1NzcsMTMgKzQ1NzcsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBtcHZfbm8K KyAgKiAgICAgICAgIHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3Jt YXQpCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9fcHl4X3RfMSA9 IFB5RmxvYXRfRnJvbURvdWJsZShfX3B5eF92X25vZGUudS5kb3VibGVfKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjA1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19w eXhfdF8xID0gUHlGbG9hdF9Gcm9tRG91YmxlKF9fcHl4X3Zfbm9kZS51LmRvdWJsZV8pOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMDcsIF9fcHl4X0wxX2Vycm9yKQor ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgX19weXhfciA9IF9fcHl4X3RfMTsK KyAgICAgX19weXhfdF8xID0gMDsKKyAgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwNAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MjA2CisgICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1B VF9JTlQ2NDoKKyAgKiAgICAgICAgIHJldHVybiBpbnQobm9kZS51LmludDY0KQorICAqICAgICBl bGlmIG5vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CitAQCAtNDU5Myw3ICs0NTkzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBtcHZfbm8K KyAgICAgYnJlYWs7CisgICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX01BUDoKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIwNworKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjA5CisgICogICAgICAgICByZXR1cm4gZmxvYXQobm9kZS51LmRv dWJsZV8pCisgICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoK KyAgKiAgICAgICAgIHJldHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3Jt YXQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC00NjAxLDEzICs0NjAxLDEzIEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRf bm9kZV92YWx1ZShzdHJ1Y3QgbXB2X25vCisgICogICAgICAgICByZXR1cm4gX2NvbnZlcnRfdmFs dWUobm9kZS51Lmxpc3QsIG5vZGUuZm9ybWF0KQorICAqLworICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOworLSAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Y29udmVydF92YWx1ZShfX3B5eF92X25vZGUudS5saXN0LCBfX3B5eF92X25vZGUuZm9ybWF0KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjA3LCBfX3B5eF9MMV9lcnJv cikKKysgICAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZl cnRfdmFsdWUoX19weXhfdl9ub2RlLnUubGlzdCwgX19weXhfdl9ub2RlLmZvcm1hdCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIwOSwgX19weXhfTDFfZXJyb3IpCisg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX3B5eF9yID0gX19weXhfdF8xOwor ICAgICBfX3B5eF90XzEgPSAwOworICAgICBnb3RvIF9fcHl4X0wwOworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjA2CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyMDgKKyAgKiAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFU X0RPVUJMRToKKyAgKiAgICAgICAgIHJldHVybiBmbG9hdChub2RlLnUuZG91YmxlXykKKyAgKiAg ICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtNDYxNyw3ICs0NjE3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBt cHZfbm8KKyAgICAgYnJlYWs7CisgICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorIAor LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjA5CisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTEKKyAgKiAgICAgICAgIHJldHVybiBfY29udmVy dF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCisgICogICAgIGVsaWYgbm9kZS5mb3Jt YXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorICAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0 X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZvcm1hdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTQ2MjUsMTMgKzQ2MjUsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBtcHZfbm8KKyAg KiAKKyAgKi8KKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8xID0g X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUoX19weXhfdl9ub2Rl LnUubGlzdCwgX19weXhfdl9ub2RlLmZvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDIwOSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKF9fcHl4X3Zfbm9kZS51Lmxp c3QsIF9fcHl4X3Zfbm9kZS5mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAyMTEsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKyAgICAgX19weXhfciA9IF9fcHl4X3RfMTsKKyAgICAgX19weXhfdF8xID0gMDsKKyAgICAg Z290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjIwOAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjEwCisgICogICAg IGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKyAgKiAgICAgICAgIHJl dHVybiBfY29udmVydF92YWx1ZShub2RlLnUubGlzdCwgbm9kZS5mb3JtYXQpCisgICogICAgIGVs aWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtNDY0Miw3ICs0NjQyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF9ub2RlX3ZhbHVlKHN0cnVjdCBtcHZf bm8KKyAgICAgZGVmYXVsdDogYnJlYWs7CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MjEwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MjEyCisgICogICAgIGVsaWYgbm9kZS5mb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgor ICAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X3ZhbHVlKG5vZGUudS5saXN0LCBub2RlLmZvcm1h dCkKKyAgKiAgICAgcmV0dXJuIE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTQ2NTMsNyArNDY1Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShzdHJ1Y3QgbXB2X25vCisgICBfX3B5eF9yID0g UHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxOTcKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxOTkKKyAgKiAKKyAgKiAKKyAgKiBjZGVmIF9jb252ZXJ0X25v ZGVfdmFsdWUobXB2X25vZGUgbm9kZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC00Njc1LDcgKzQ2NzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoc3RydWN0IG1wdl9ubworICAgcmV0dXJuIF9f cHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTMKKysv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjE1CisgICogCisgICogCisgICogY2Rl ZiBfY29udmVydF92YWx1ZSh2b2lkKiBkYXRhLCBtcHZfZm9ybWF0IGZvcm1hdCk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC00NzA0LDcgKzQ3MDQsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKHZvaWQgKl9f cHl4X3ZfZGF0YQorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9jb252ZXJ0X3ZhbHVlIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MjE2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjE4CisgICogICAgIGNkZWYgbXB2X25vZGUgbm9kZQorICAqICAgICBjZGVmIG1wdl9ub2Rl X2xpc3Qgbm9kZWxpc3QKKyAgKiAgICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ3MTQsNyArNDcxNCw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9p ZCAqX19weXhfdl9kYXRhCisgICBzd2l0Y2ggKF9fcHl4X3ZfZm9ybWF0KSB7CisgICAgIGNhc2Ug TVBWX0ZPUk1BVF9OT0RFOgorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjE3CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTkKKyAgKiAg ICAgY2RlZiBtcHZfbm9kZV9saXN0IG5vZGVsaXN0CisgICogICAgIGlmIGZvcm1hdCA9PSBNUFZf Rk9STUFUX05PREU6CisgICogICAgICAgICBub2RlID0gKDxtcHZfbm9kZSo+ZGF0YSlbMF0gICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ3MjMsNyArNDcyMyw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9p ZCAqX19weXhfdl9kYXRhCisgICovCisgICAgIF9fcHl4X3Zfbm9kZSA9ICgoKHN0cnVjdCBtcHZf bm9kZSAqKV9fcHl4X3ZfZGF0YSlbMF0pOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjE4CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy MjAKKyAgKiAgICAgaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERToKKyAgKiAgICAgICAgIG5v ZGUgPSAoPG1wdl9ub2RlKj5kYXRhKVswXQorICAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25v ZGVfdmFsdWUobm9kZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ3MzEsMTMg KzQ3MzEsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKKyAgKiAgICAgICAgIG5vZGVsaXN0 ID0gKDxtcHZfbm9kZV9saXN0Kj5kYXRhKVswXQorICAqLworICAgICBfX1B5eF9YREVDUkVGKF9f cHl4X3IpOworLSAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Y29udmVydF9ub2RlX3ZhbHVlKF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDIxOCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUoX19weXhfdl9u b2RlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjIwLCBfX3B5eF9M MV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAgIF9fcHl4X3IgPSBf X3B5eF90XzE7CisgICAgIF9fcHl4X3RfMSA9IDA7CisgICAgIGdvdG8gX19weXhfTDA7CisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTYKKysgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIxOAorICAqICAgICBjZGVmIG1wdl9ub2RlIG5vZGUK KyAgKiAgICAgY2RlZiBtcHZfbm9kZV9saXN0IG5vZGVsaXN0CisgICogICAgIGlmIGZvcm1hdCA9 PSBNUFZfRk9STUFUX05PREU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC00NzQ3 LDcgKzQ3NDcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2X19jb252ZXJ0X3ZhbHVlKHZvaWQgKl9fcHl4X3ZfZGF0YQorICAgICBicmVhazsKKyAgICAg Y2FzZSBNUFZfRk9STUFUX05PREVfQVJSQVk6CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyMjAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjIyMgorICAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZSkKKyAgKiAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorICAqICAgICAgICAgbm9k ZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC00NzU2LDE5ICs0NzU2LDE5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19weXhfdl9kYXRhCisg ICovCisgICAgIF9fcHl4X3Zfbm9kZWxpc3QgPSAoKChzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqKV9f cHl4X3ZfZGF0YSlbMF0pOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjIxCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjMKKyAgKiAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorICAqICAgICAgICAgbm9k ZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCisgICogICAgICAgICB2YWx1ZXMgPSBb XSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBmb3IgaSBpbiByYW5n ZShub2RlbGlzdC5udW0pOgorICAqICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoX2NvbnZlcnRf bm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pKQorICAqLworLSAgICBfX3B5eF90XzEgPSBQ eUxpc3RfTmV3KDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjEs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzEgPSBQeUxpc3RfTmV3KDApOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjMsIF9fcHl4X0wxX2Vycm9yKQorICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgX19weXhfdl92YWx1ZXMgPSBfX3B5eF90 XzE7CisgICAgIF9fcHl4X3RfMSA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyMjIKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIy NAorICAqICAgICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCisgICog ICAgICAgICB2YWx1ZXMgPSBbXQorICAqICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3Qu bnVtKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ3ODAsMjAgKzQ3ODAsMjAg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVy dF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKKyAgICAgZm9yIChfX3B5eF90XzQgPSAwOyBfX3B5 eF90XzQgPCBfX3B5eF90XzM7IF9fcHl4X3RfNCs9MSkgeworICAgICAgIF9fcHl4X3ZfaSA9IF9f cHl4X3RfNDsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjIz CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNQorICAqICAgICAg ICAgdmFsdWVzID0gW10KKyAgKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51bSk6 CisgICogICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVs aXN0LnZhbHVlc1tpXSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAg IHJldHVybiB2YWx1ZXMKKyAgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01B UDoKKyAgKi8KKy0gICAgICBfX3B5eF90XzEgPSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fY29udmVydF9ub2RlX3ZhbHVlKChfX3B5eF92X25vZGVsaXN0LnZhbHVlc1tfX3B5eF92X2ld KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIyMywgX19weXhfTDFf ZXJyb3IpCisrICAgICAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X2NvbnZlcnRfbm9kZV92YWx1ZSgoX19weXhfdl9ub2RlbGlzdC52YWx1ZXNbX19weXhfdl9pXSkp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjUsIF9fcHl4X0wxX2Vy cm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICAgIF9fcHl4X3RfNSA9 IF9fUHl4X1B5T2JqZWN0X0FwcGVuZChfX3B5eF92X3ZhbHVlcywgX19weXhfdF8xKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfNSA9PSAoKGludCktMSkpKSBfX1BZWF9FUlIoMCwgMjIzLCBfX3B5eF9M MV9lcnJvcikKKysgICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9BcHBlbmQoX19weXhf dl92YWx1ZXMsIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzUgPT0gKChpbnQpLTEp KSkgX19QWVhfRVJSKDAsIDIyNSwgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICAgIH0KKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjIyNAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjI2CisgICogICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlbGlzdC5udW0pOgor ICAqICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlz dC52YWx1ZXNbaV0pKQorICAqICAgICAgICAgcmV0dXJuIHZhbHVlcyAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtNDgwNSw3ICs0ODA1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2Rh dGEKKyAgICAgX19weXhfciA9IF9fcHl4X3ZfdmFsdWVzOworICAgICBnb3RvIF9fcHl4X0wwOwor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjE5CisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjEKKyAgKiAgICAgICAgIG5vZGUgPSAoPG1w dl9ub2RlKj5kYXRhKVswXQorICAqICAgICAgICAgcmV0dXJuIF9jb252ZXJ0X25vZGVfdmFsdWUo bm9kZSkKKyAgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNDgxNSw3ICs0ODE1LDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2b2lk ICpfX3B5eF92X2RhdGEKKyAgICAgYnJlYWs7CisgICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RFX01B UDoKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNgorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjI4CisgICogICAgICAgICByZXR1cm4g dmFsdWVzCisgICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVA6CisgICog ICAgICAgICBub2RlbGlzdCA9ICg8bXB2X25vZGVfbGlzdCo+ZGF0YSlbMF0gICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ4MjQsMTkgKzQ4MjQsMTkgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5 eF92X2RhdGEKKyAgKi8KKyAgICAgX19weXhfdl9ub2RlbGlzdCA9ICgoKHN0cnVjdCBtcHZfbm9k ZV9saXN0ICopX19weXhfdl9kYXRhKVswXSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyMjcKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjIyOQorICAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorICAqICAg ICAgICAgbm9kZWxpc3QgPSAoPG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCisgICogICAgICAgICB2 YWx1ZXMgPSB7fSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBmb3Ig aSBpbiByYW5nZShub2RlbGlzdC5udW0pOgorICAqICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZl cnRfbm9kZV92YWx1ZShub2RlbGlzdC52YWx1ZXNbaV0pCisgICovCistICAgIF9fcHl4X3RfMSA9 IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMjI3LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xID0gX19QeXhf UHlEaWN0X05ld1ByZXNpemVkKDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAyMjksIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK KyAgICAgX19weXhfdl92YWx1ZXMgPSBfX3B5eF90XzE7CisgICAgIF9fcHl4X3RfMSA9IDA7Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMjgKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzMAorICAqICAgICAgICAgbm9kZWxpc3QgPSAo PG1wdl9ub2RlX2xpc3QqPmRhdGEpWzBdCisgICogICAgICAgICB2YWx1ZXMgPSB7fQorICAqICAg ICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZWxpc3QubnVtKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTQ4NDgsMjggKzQ4NDgsMjggQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEK KyAgICAgZm9yIChfX3B5eF90XzQgPSAwOyBfX3B5eF90XzQgPCBfX3B5eF90XzM7IF9fcHl4X3Rf NCs9MSkgeworICAgICAgIF9fcHl4X3ZfaSA9IF9fcHl4X3RfNDsKKyAKKy0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjI5CisrICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjIzMQorICAqICAgICAgICAgdmFsdWVzID0ge30KKyAgKiAgICAgICAg IGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51bSk6CisgICogICAgICAgICAgICAgdmFsdWUgPSBf Y29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIHZhbHVlc1tfc3RyZGVjKG5vZGVsaXN0LmtleXNb aV0pXSA9IHZhbHVlCisgICogICAgICAgICByZXR1cm4gdmFsdWVzCisgICovCistICAgICAgX19w eXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1 ZSgoX19weXhfdl9ub2RlbGlzdC52YWx1ZXNbX19weXhfdl9pXSkpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fcHl4 X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25vZGVfdmFsdWUo KF9fcHl4X3Zfbm9kZWxpc3QudmFsdWVzW19fcHl4X3ZfaV0pKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgMjMxLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKyAgICAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X3ZhbHVl LCBfX3B5eF90XzEpOworICAgICAgIF9fcHl4X3RfMSA9IDA7CisgCistICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzMAorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyMzIKKyAgKiAgICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGVsaXN0Lm51 bSk6CisgICogICAgICAgICAgICAgdmFsdWUgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0 LnZhbHVlc1tpXSkKKyAgKiAgICAgICAgICAgICB2YWx1ZXNbX3N0cmRlYyhub2RlbGlzdC5rZXlz W2ldKV0gPSB2YWx1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBy ZXR1cm4gdmFsdWVzCisgICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgor ICAqLworLSAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9u X3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMjMwLCBf X3B5eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf NiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDIzMiwgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7 CistICAgICAgX19weXhfdF83ID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKChfX3B5eF92X25v ZGVsaXN0LmtleXNbX19weXhfdl9pXSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlY X0VSUigwLCAyMzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5 Qnl0ZXNfRnJvbVN0cmluZygoX19weXhfdl9ub2RlbGlzdC5rZXlzW19fcHl4X3ZfaV0pKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMjMyLCBfX3B5eF9MMV9lcnJvcikK KyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAgICAgICBfX3B5eF90XzggPSBOVUxM OworICAgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2Rf Q2hlY2soX19weXhfdF82KSkpIHsKK0BAIC00ODg0LDE0ICs0ODg0LDE0IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAq X19weXhfdl9kYXRhCisgICAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfOCkgPyBfX1B5eF9QeU9i amVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzgsIF9fcHl4X3RfNykgOiBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF83KTsKKyAgICAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7CisgICAgICAgX19QeXhfREVDUkVGKF9f cHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgMjMwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyMzIsIF9fcHl4X0wxX2Vycm9yKQorICAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOworLSAgICAgIGlmICh1bmxpa2VseShQeU9iamVjdF9TZXRJdGVtKF9fcHl4 X3ZfdmFsdWVzLCBfX3B5eF90XzEsIF9fcHl4X3ZfdmFsdWUpIDwgMCkpIF9fUFlYX0VSUigwLCAy MzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIGlmICh1bmxpa2VseShQeU9iamVjdF9TZXRJdGVt KF9fcHl4X3ZfdmFsdWVzLCBfX3B5eF90XzEsIF9fcHl4X3ZfdmFsdWUpIDwgMCkpIF9fUFlYX0VS UigwLCAyMzIsIF9fcHl4X0wxX2Vycm9yKQorICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEp OyBfX3B5eF90XzEgPSAwOworICAgICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyMzEKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIz MworICAqICAgICAgICAgICAgIHZhbHVlID0gX2NvbnZlcnRfbm9kZV92YWx1ZShub2RlbGlzdC52 YWx1ZXNbaV0pCisgICogICAgICAgICAgICAgdmFsdWVzW19zdHJkZWMobm9kZWxpc3Qua2V5c1tp XSldID0gdmFsdWUKKyAgKiAgICAgICAgIHJldHVybiB2YWx1ZXMgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTQ5MDMsNyArNDkwMyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19weXhfdl9kYXRh CisgICAgIF9fcHl4X3IgPSBfX3B5eF92X3ZhbHVlczsKKyAgICAgZ290byBfX3B5eF9MMDsKKyAK Ky0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIyNQorKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjI3CisgICogICAgICAgICAgICAgdmFsdWVzLmFw cGVuZChfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVsaXN0LnZhbHVlc1tpXSkpCisgICogICAgICAg ICByZXR1cm4gdmFsdWVzCisgICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9N QVA6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC00OTEzLDcgKzQ5MTMsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3Zh bHVlKHZvaWQgKl9fcHl4X3ZfZGF0YQorICAgICBicmVhazsKKyAgICAgY2FzZSBNUFZfRk9STUFU X1NUUklORzoKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzMwor KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM1CisgICogICAgICAgICBy ZXR1cm4gdmFsdWVzCisgICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgor ICAqICAgICAgICAgcmV0dXJuIF9zdHJkZWMoKCg8Y2hhcioqPmRhdGEpWzBdKSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ5MjEsOSArNDkyMSw5IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19w eXhfdl9kYXRhCisgICogICAgICAgICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5kYXRhKVsw XQorICAqLworICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSgh X19weXhfdF82KSkgX19QWVhfRVJSKDAsIDIzMywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMjM1LCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5Qnl0 ZXNfRnJvbVN0cmluZygoKChjaGFyICoqKV9fcHl4X3ZfZGF0YSlbMF0pKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19w eXhfdF83ID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKCgoKGNoYXIgKiopX19weXhfdl9kYXRh KVswXSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAyMzUsIF9fcHl4 X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAgICAgX19weXhfdF84 ID0gTlVMTDsKKyAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzYpKSkgeworQEAgLTQ5MzgsMTQgKzQ5MzgsMTQgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVydF92YWx1ZSh2 b2lkICpfX3B5eF92X2RhdGEKKyAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfOCkgPyBfX1B5eF9Q eU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzgsIF9fcHl4X3RfNykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF83KTsKKyAgICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworICAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMjMzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgMjM1LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYg PSAwOworICAgICBfX3B5eF9yID0gX19weXhfdF8xOworICAgICBfX3B5eF90XzEgPSAwOworICAg ICBnb3RvIF9fcHl4X0wwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjMyCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMzQKKyAgKiAg ICAgICAgICAgICB2YWx1ZXNbX3N0cmRlYyhub2RlbGlzdC5rZXlzW2ldKV0gPSB2YWx1ZQorICAq ICAgICAgICAgcmV0dXJuIHZhbHVlcworICAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFU X1NUUklORzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ5NTUsNyArNDk1NSw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZl cnRfdmFsdWUodm9pZCAqX19weXhfdl9kYXRhCisgICAgIGJyZWFrOworICAgICBjYXNlIE1QVl9G T1JNQVRfRkxBRzoKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIz NQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM3CisgICogICAgICAg ICByZXR1cm4gX3N0cmRlYygoKDxjaGFyKio+ZGF0YSlbMF0pKQorICAqICAgICBlbGlmIGZvcm1h dCA9PSBNUFZfRk9STUFUX0ZMQUc6CisgICogICAgICAgICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2 NF90Kj5kYXRhKVswXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNDk2MywxMyAr NDk2MywxMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2 X19jb252ZXJ0X3ZhbHVlKHZvaWQgKl9fcHl4X3ZfZGF0YQorICAqICAgICAgICAgcmV0dXJuIGlu dCgoPHVpbnQ2NF90Kj5kYXRhKVswXSkKKyAgKi8KKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKCghKCghKCgoKHVpbnQ2 NF90ICopX19weXhfdl9kYXRhKVswXSkgIT0gMCkpICE9IDApKSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDIzNSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISgoISgoKCh1aW50NjRfdCAqKV9fcHl4X3ZfZGF0 YSlbMF0pICE9IDApKSAhPSAwKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAyMzcsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK KyAgICAgX19weXhfciA9IF9fcHl4X3RfMTsKKyAgICAgX19weXhfdF8xID0gMDsKKyAgICAgZ290 byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIz NAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM2CisgICogICAgIGVs aWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfU1RSSU5HOgorICAqICAgICAgICAgcmV0dXJuIF9zdHJk ZWMoKCg8Y2hhcioqPmRhdGEpWzBdKSkKKyAgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1B VF9GTEFHOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNDk3OSw3ICs0OTc5LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY29udmVy dF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKKyAgICAgYnJlYWs7CisgICAgIGNhc2UgTVBWX0ZP Uk1BVF9JTlQ2NDoKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIz NworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM5CisgICogICAgICAg ICByZXR1cm4gbm90IG5vdCAoPHVpbnQ2NF90Kj5kYXRhKVswXQorICAqICAgICBlbGlmIGZvcm1h dCA9PSBNUFZfRk9STUFUX0lOVDY0OgorICAqICAgICAgICAgcmV0dXJuIGludCgoPHVpbnQ2NF90 Kj5kYXRhKVswXSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTQ5ODcsMTYgKzQ5 ODcsMTYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Y29udmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKKyAgKiAgICAgICAgIHJldHVybiBmbG9h dCgoPGRvdWJsZSo+ZGF0YSlbMF0pCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CistICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKCgodWludDY0X3Qg KilfX3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDIzNywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zy b21fdWludDY0X3QoKCgodWludDY0X3QgKilfX3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDIzOSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9D YWxsT25lQXJnKCgoUHlPYmplY3QgKikoJlB5SW50X1R5cGUpKSwgX19weXhfdF8xKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMjM3LCBfX3B5eF9MMV9lcnJvcikKKysg ICAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZygoKFB5T2JqZWN0ICopKCZQ eUludF9UeXBlKSksIF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDIzOSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgICAgX19w eXhfciA9IF9fcHl4X3RfNjsKKyAgICAgX19weXhfdF82ID0gMDsKKyAgICAgZ290byBfX3B5eF9M MDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzNgorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjM4CisgICogICAgIGVsaWYgZm9ybWF0 ID09IE1QVl9GT1JNQVRfRkxBRzoKKyAgKiAgICAgICAgIHJldHVybiBub3Qgbm90ICg8dWludDY0 X3QqPmRhdGEpWzBdCisgICogICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfSU5UNjQ6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC01MDA2LDcgKzUwMDYsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X3ZhbHVlKHZv aWQgKl9fcHl4X3ZfZGF0YQorICAgICBicmVhazsKKyAgICAgY2FzZSBNUFZfRk9STUFUX0RPVUJM RToKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjIzOQorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQxCisgICogICAgICAgICByZXR1cm4g aW50KCg8dWludDY0X3QqPmRhdGEpWzBdKQorICAqICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX0RPVUJMRToKKyAgKiAgICAgICAgIHJldHVybiBmbG9hdCgoPGRvdWJsZSo+ZGF0YSlbMF0p ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC01MDE0LDEzICs1MDE0LDEzIEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFs dWUodm9pZCAqX19weXhfdl9kYXRhCisgICogCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19w eXhfcik7CistICAgIF9fcHl4X3RfNiA9IFB5RmxvYXRfRnJvbURvdWJsZSgoKChkb3VibGUgKilf X3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDIzOSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNiA9IFB5RmxvYXRfRnJvbURvdWJs ZSgoKChkb3VibGUgKilfX3B5eF92X2RhdGEpWzBdKSk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDI0MSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzYpOworICAgICBfX3B5eF9yID0gX19weXhfdF82OworICAgICBfX3B5eF90XzYgPSAw OworICAgICBnb3RvIF9fcHl4X0wwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjM4CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDAK KyAgKiAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKyAgKiAgICAgICAgIHJl dHVybiBpbnQoKDx1aW50NjRfdCo+ZGF0YSlbMF0pCisgICogICAgIGVsaWYgZm9ybWF0ID09IE1Q Vl9GT1JNQVRfRE9VQkxFOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNTAzMSw3 ICs1MDMxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fY29udmVydF92YWx1ZSh2b2lkICpfX3B5eF92X2RhdGEKKyAgICAgZGVmYXVsdDogYnJlYWs7 CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQwCisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjQyCisgICogICAgIGVsaWYgZm9ybWF0 ID09IE1QVl9GT1JNQVRfRE9VQkxFOgorICAqICAgICAgICAgcmV0dXJuIGZsb2F0KCg8ZG91Ymxl Kj5kYXRhKVswXSkKKyAgKiAgICAgcmV0dXJuIE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTUwNDIsNyArNTA0Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19weXhfdl9kYXRhCisgICBf X3B5eF9yID0gUHlfTm9uZTsgX19QeXhfSU5DUkVGKFB5X05vbmUpOworICAgZ290byBfX3B5eF9M MDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTMKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyMTUKKyAgKiAKKyAgKiAKKyAgKiBjZGVmIF9j b252ZXJ0X3ZhbHVlKHZvaWQqIGRhdGEsIG1wdl9mb3JtYXQgZm9ybWF0KTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTUwNjYsNyArNTA2Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfdmFsdWUodm9pZCAqX19weXhf dl9kYXRhCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjI1MAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTIK KyAgKiAgICAgY2RlZiBwdWJsaWMgb2JqZWN0IG5hbWUsIGRhdGEKKyAgKiAKKyAgKiAgICAgY2Rl ZiBfaW5pdChzZWxmLCBtcHZfZXZlbnRfcHJvcGVydHkqIHByb3ApOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtNTA4NiwxNiArNTA4NiwxNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9faW5pdChzdHJ1Y3QgX19weXhf b2JqXworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoIl9pbml0IiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MjUxCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUzCisgICogCisg ICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X3Byb3BlcnR5KiBwcm9wKToKKyAgKiAg ICAgICAgIHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5uYW1lKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICBzZWxmLmRhdGEgPSBfY29udmVydF92YWx1ZShwcm9wLmRh dGEsIHByb3AuZm9ybWF0KQorICAqICAgICAgICAgcmV0dXJuIHNlbGYKKyAgKi8KKy0gIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjUxLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjUzLCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gX19QeXhfUHlC eXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfcHJvcC0+bmFtZSk7IGlmICh1bmxpa2VseSghX19weXhf dF8zKSkgX19QWVhfRVJSKDAsIDI1MSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBf X1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9wcm9wLT5uYW1lKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjUzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzMpOworICAgX19weXhfdF80ID0gTlVMTDsKKyAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsK K0BAIC01MTEwLDcgKzUxMTAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2XzhQcm9wZXJ0eV9faW5pdChzdHJ1Y3QgX19weXhfb2JqXworICAgX19weXhf dF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8yLCBf X3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3Rf MiwgX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjUxLCBfX3B5eF9MMV9lcnJvcikKKysg IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI1MywgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworQEAgLTUx MTksMTQgKzUxMTksMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl84UHJvcGVydHlfX2luaXQoc3RydWN0IF9fcHl4X29ial8KKyAgIF9fcHl4X3Zfc2Vs Zi0+bmFtZSA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjUyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjU0CisgICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50X3Byb3BlcnR5 KiBwcm9wKToKKyAgKiAgICAgICAgIHNlbGYubmFtZSA9IF9zdHJkZWMocHJvcC5uYW1lKQorICAq ICAgICAgICAgc2VsZi5kYXRhID0gX2NvbnZlcnRfdmFsdWUocHJvcC5kYXRhLCBwcm9wLmZvcm1h dCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgcmV0dXJuIHNlbGYK KyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2 X19jb252ZXJ0X3ZhbHVlKF9fcHl4X3ZfcHJvcC0+ZGF0YSwgX19weXhfdl9wcm9wLT5mb3JtYXQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyNTIsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF8xID0gX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZl cnRfdmFsdWUoX19weXhfdl9wcm9wLT5kYXRhLCBfX3B5eF92X3Byb3AtPmZvcm1hdCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI1NCwgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsK KyAgIF9fUHl4X0dPVFJFRihfX3B5eF92X3NlbGYtPmRhdGEpOworQEAgLTUxMzQsNyArNTEzNCw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOFByb3Bl cnR5X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfCisgICBfX3B5eF92X3NlbGYtPmRhdGEgPSBfX3B5 eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjI1MworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1NQor ICAqICAgICAgICAgc2VsZi5uYW1lID0gX3N0cmRlYyhwcm9wLm5hbWUpCisgICogICAgICAgICBz ZWxmLmRhdGEgPSBfY29udmVydF92YWx1ZShwcm9wLmRhdGEsIHByb3AuZm9ybWF0KQorICAqICAg ICAgICAgcmV0dXJuIHNlbGYgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTUxNDYs NyArNTE0Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfOFByb3BlcnR5X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfCisgICBfX3B5eF9yID0gKChQeU9i amVjdCAqKV9fcHl4X3Zfc2VsZik7CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI1MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjI1MgorICAqICAgICBjZGVmIHB1YmxpYyBvYmplY3QgbmFtZSwgZGF0YQorICAq IAorICAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudF9wcm9wZXJ0eSogcHJvcCk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC01MTY4LDcgKzUxNjgsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhQcm9wZXJ0eV9faW5pdChz dHJ1Y3QgX19weXhfb2JqXworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNDgKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MjUwCisgICogICAgIFdyYXBzOiBtcHZfZXZlbnRfcHJvcGVydHkKKyAgKiAgICAgIiIi CisgICogICAgIGNkZWYgcHVibGljIG9iamVjdCBuYW1lLCBkYXRhICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC01NjU3LDcgKzU2NTcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84UHJvcGVydHlfMl9fc2V0c3RhdGVfY3l0aG9uX18o cworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyNjMKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjY1CisgICog CisgICogICAgIEBwcm9wZXJ0eQorICAqICAgICBkZWYgZXJyb3Jfc3RyKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNTY5MSw3ICs1NjkxLDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzllcnJvcl9zdHJfX19n ZXRfXyhzdHJ1Y3QKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJfX2dldF9fIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MjY2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjY4 CisgICogICAgICAgICAiIiJtcHZfZXJyb3Jfc3RyaW5nIG9mIHRoZSBlcnJvciBwcm9lcHJ0eSIi IgorICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworICAqICAgICAgICAgd2l0aCBu b2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTU3MDYsNyArNTcwNiw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF85 ZXJyb3Jfc3RyX19fZ2V0X18oc3RydWN0CisgICAgICAgI2VuZGlmCisgICAgICAgLyp0cnk6Ki8g eworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI2NworKyAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI2OQorICAqICAgICAgICAg Y2RlZiBjb25zdCBjaGFyKiBlcnJfYworICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAg ICAgICAgICBlcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmcoc2VsZi5lcnJvcikgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTU3MTYsNyArNTcxNiw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF85ZXJyb3Jfc3RyX19fZ2V0X18o c3RydWN0CisgICAgICAgICBfX3B5eF92X2Vycl9jID0gbXB2X2Vycm9yX3N0cmluZyhfX3B5eF92 X3NlbGYtPmVycm9yKTsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjI2NgorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyNjgKKyAgKiAgICAgICAgICIiIm1wdl9lcnJvcl9zdHJpbmcgb2YgdGhlIGVycm9yIHByb2Vw cnR5IiIiCisgICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGVycl9jCisgICogICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNTczNSw3ICs1NzM1 LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2 ZW50XzllcnJvcl9zdHJfX19nZXRfXyhzdHJ1Y3QKKyAgICAgICB9CisgICB9CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjY4CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MjcwCisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAg ICAgIGVycl9jID0gbXB2X2Vycm9yX3N0cmluZyhzZWxmLmVycm9yKQorICAqICAgICAgICAgcmV0 dXJuIF9zdHJkZWMoZXJyX2MpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC01NzQz LDkgKzU3NDMsOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl81RXZlbnRfOWVycm9yX3N0cl9fX2dldF9fKHN0cnVjdAorICAqICAgICBjZGVmIF9kYXRh KHNlbGYsIG1wdl9ldmVudCogZXZlbnQpOgorICAqLworICAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3Ry ZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjY4LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9u X3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjcwLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8z ID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfZXJyX2MpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyNjgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf dF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfZXJyX2MpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyNzAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMyk7CisgICBfX3B5eF90XzQgPSBOVUxMOworICAgaWYgKENZVEhP Tl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkg eworQEAgLTU3NjAsMTQgKzU3NjAsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzllcnJvcl9zdHJfX19nZXRfXyhzdHJ1Y3QKKyAgIF9f cHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf MiwgX19weXhfdF80LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzIsIF9fcHl4X3RfMyk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3Rf NCA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI2OCwgX19weXhfTDFfZXJyb3Ip CisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAyNzAsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisgICBfX3B5 eF90XzEgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoyNjMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy NjUKKyAgKiAKKyAgKiAgICAgQHByb3BlcnR5CisgICogICAgIGRlZiBlcnJvcl9zdHIoc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC01Nzg5LDcgKzU3ODksNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfOWVycm9y X3N0cl9fX2dldF9fKHN0cnVjdAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzAKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MjcyCisgICogICAgICAgICByZXR1cm4gX3N0cmRlYyhlcnJfYykKKyAgKiAKKyAg KiAgICAgY2RlZiBfZGF0YShzZWxmLCBtcHZfZXZlbnQqIGV2ZW50KTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTU4MTksNyArNTgxOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19kYXRhKHN0cnVjdCBfX3B5eF9vYmpf OXZpCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX2RhdGEiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyNzEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzMKKyAgKiAKKyAg KiAgICAgY2RlZiBfZGF0YShzZWxmLCBtcHZfZXZlbnQqIGV2ZW50KToKKyAgKiAgICAgICAgIGNk ZWYgdm9pZCogZGF0YSA9IGV2ZW50LmRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTU4MjksNyArNTgyOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50X19kYXRhKHN0cnVjdCBfX3B5eF9vYmpfOXZpCisgICBfX3B5eF90 XzEgPSBfX3B5eF92X2V2ZW50LT5kYXRhOworICAgX19weXhfdl9kYXRhID0gX19weXhfdF8xOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3MworKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3NQorICAqICAgICAgICAgY2RlZiB2b2lkKiBkYXRh ID0gZXZlbnQuZGF0YQorICAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2Uq IGNsaW1zZworICAqICAgICAgICAgaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZ X1JFUExZOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNTgzOSw3ICs1ODM5LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf X2RhdGEoc3RydWN0IF9fcHl4X29ial85dmkKKyAgIHN3aXRjaCAoX19weXhfdl9zZWxmLT5pZCkg eworICAgICBjYXNlIE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFk6CisgCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzQKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjI3NgorICAqICAgICAgICAgY2RlZiBtcHZfZXZlbnRfY2xpZW50X21l c3NhZ2UqIGNsaW1zZworICAqICAgICAgICAgaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BS T1BFUlRZX1JFUExZOgorICAqICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eSgpLl9pbml0KDxt cHZfZXZlbnRfcHJvcGVydHkqPmRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC01ODQ3LDE2ICs1ODQ3LDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50X19kYXRhKHN0cnVjdCBfX3B5eF9vYmpfOXZpCisgICogICAgICAg ICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkK KyAgKi8KKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8yID0gX19Q eXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUHJvcGVydHkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgMjc0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmpl Y3RfQ2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUHJvcGVydHkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMjc2 LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9f cHl4X3RfMyA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2 X1Byb3BlcnR5ICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9w ZXJ0eSAqKV9fcHl4X3RfMiktPl9fcHl4X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdF8yKSwgKChzdHJ1Y3QgbXB2 X2V2ZW50X3Byb3BlcnR5ICopX19weXhfdl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8z KSkgX19QWVhfRVJSKDAsIDI3NCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9ICgo c3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ICop KChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4 X3RfMiktPl9fcHl4X3Z0YWIpLT5faW5pdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80 bGlic18zbXB2X1Byb3BlcnR5ICopX19weXhfdF8yKSwgKChzdHJ1Y3QgbXB2X2V2ZW50X3Byb3Bl cnR5ICopX19weXhfdl9kYXRhKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDAsIDI3NiwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOwor ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgICAgX19weXhf ciA9IF9fcHl4X3RfMzsKKyAgICAgX19weXhfdF8zID0gMDsKKyAgICAgZ290byBfX3B5eF9MMDsK KyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3MworKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjc1CisgICogICAgICAgICBjZGVmIHZvaWQq IGRhdGEgPSBldmVudC5kYXRhCisgICogICAgICAgICBjZGVmIG1wdl9ldmVudF9jbGllbnRfbWVz c2FnZSogY2xpbXNnCisgICogICAgICAgICBpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9HRVRfUFJP UEVSVFlfUkVQTFk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC01ODY2LDcgKzU4 NjYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAgICBicmVhazsKKyAgICAgY2FzZSBN UFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6Mjc2CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy NzgKKyAgKiAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHkoKS5faW5pdCg8bXB2X2V2ZW50X3By b3BlcnR5Kj5kYXRhKQorICAqICAgICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9QUk9Q RVJUWV9DSEFOR0U6CisgICogICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1w dl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTU4NzQsMTYgKzU4NzQsMTYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl81RXZlbnRfX2RhdGEoc3RydWN0IF9fcHl4X29ial85dmkKKyAgKiAgICAgICAg ICAgICByZXR1cm4gTG9nTWVzc2FnZSgpLl9pbml0KDxtcHZfZXZlbnRfbG9nX21lc3NhZ2UqPmRh dGEpCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9fcHl4X3RfMyA9 IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDI3NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5 T2JqZWN0X0NhbGxOb0FyZygoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1Byb3BlcnR5KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDI3OCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAg ICBfX3B5eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eSAqKSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UHJvcGVydHkgKilfX3B5eF90XzMpLT5fX3B5eF92dGFiKS0+X2luaXQoKChzdHJ1Y3QgX19weXhf b2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3RfMyksICgoc3RydWN0 IG1wdl9ldmVudF9wcm9wZXJ0eSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCAyNzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzIg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eSAqKSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkgKilf X3B5eF90XzMpLT5fX3B5eF92dGFiKS0+X2luaXQoKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSAqKV9fcHl4X3RfMyksICgoc3RydWN0IG1wdl9ldmVudF9w cm9wZXJ0eSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCAyNzgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgICAgIF9f cHl4X3IgPSBfX3B5eF90XzI7CisgICAgIF9fcHl4X3RfMiA9IDA7CisgICAgIGdvdG8gX19weXhf TDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzUKKysgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3NworICAqICAgICAgICAgaWYgc2Vs Zi5pZCA9PSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZOgorICAqICAgICAgICAgICAgIHJl dHVybiBQcm9wZXJ0eSgpLl9pbml0KDxtcHZfZXZlbnRfcHJvcGVydHkqPmRhdGEpCisgICogICAg ICAgICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTU4OTMsNyArNTg5Myw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19kYXRhKHN0cnVjdCBfX3B5 eF9vYmpfOXZpCisgICAgIGJyZWFrOworICAgICBjYXNlIE1QVl9FVkVOVF9MT0dfTUVTU0FHRToK KyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3OAorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjgwCisgICogICAgICAgICAgICAgcmV0dXJu IFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0YSkKKyAgKiAgICAgICAg IGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfTE9HX01FU1NBR0U6CisgICogICAgICAgICAgICAg cmV0dXJuIExvZ01lc3NhZ2UoKS5faW5pdCg8bXB2X2V2ZW50X2xvZ19tZXNzYWdlKj5kYXRhKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNTkwMSwxNiArNTkwMSwxNiBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YShz dHJ1Y3QgX19weXhfb2JqXzl2aQorICAqICAgICAgICAgIyAgICAgcmV0dXJuIElucHV0RGlzcGF0 Y2goKS5faW5pdCg8bXB2X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkKKyAgKi8K KyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8yID0gX19QeXhfUHlP YmplY3RfQ2FsbE5vQXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfTG9nTWVzc2FnZSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigw LCAyNzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9D YWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDI4MCwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX3B5 eF90XzMgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9M b2dNZXNzYWdlICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlICopX19weXhfdF8yKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3RfMiksICgoc3RydWN0 IG1wdl9ldmVudF9sb2dfbWVzc2FnZSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMykpIF9fUFlYX0VSUigwLCAyNzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90 XzMgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlICopX19weXhfdF8yKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2FnZSAqKV9fcHl4X3RfMiksICgoc3RydWN0IG1w dl9ldmVudF9sb2dfbWVzc2FnZSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCAyODAsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8zKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9 IDA7CisgICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7CisgICAgIF9fcHl4X3RfMyA9IDA7CisgICAg IGdvdG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoyNzcKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI3OQorICAqICAg ICAgICAgZWxpZiBzZWxmLmlkID09IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6CisgICogICAg ICAgICAgICAgcmV0dXJuIFByb3BlcnR5KCkuX2luaXQoPG1wdl9ldmVudF9wcm9wZXJ0eSo+ZGF0 YSkKKyAgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfTE9HX01FU1NBR0U6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC01OTIwLDcgKzU5MjAsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YShzdHJ1 Y3QgX19weXhfb2JqXzl2aQorICAgICBicmVhazsKKyAgICAgY2FzZSBNUFZfRVZFTlRfQ0xJRU5U X01FU1NBR0U6CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODIK KysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NAorICAqICAgICAgICAg IyAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2goKS5faW5pdCg8bXB2X2V2ZW50X3NjcmlwdF9pbnB1 dF9kaXNwYXRjaCo+ZGF0YSkKKyAgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRf Q0xJRU5UX01FU1NBR0U6CisgICogICAgICAgICAgICAgY2xpbXNnID0gPG1wdl9ldmVudF9jbGll bnRfbWVzc2FnZSo+ZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNTkyOSwx OSArNTkyOSwxOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2XzVFdmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAqLworICAgICBfX3B5eF92 X2NsaW1zZyA9ICgoc3RydWN0IG1wdl9ldmVudF9jbGllbnRfbWVzc2FnZSAqKV9fcHl4X3ZfZGF0 YSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyODMKKysgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NQorICAqICAgICAgICAgZWxpZiBz ZWxmLmlkID09IE1QVl9FVkVOVF9DTElFTlRfTUVTU0FHRToKKyAgKiAgICAgICAgICAgICBjbGlt c2cgPSA8bXB2X2V2ZW50X2NsaWVudF9tZXNzYWdlKj5kYXRhCisgICogICAgICAgICAgICAgYXJn cyA9IFtdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBudW1f YXJncyA9IGNsaW1zZy5udW1fYXJncworICAqICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG51 bV9hcmdzKToKKyAgKi8KKy0gICAgX19weXhfdF8zID0gUHlMaXN0X05ldygwKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjgzLCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19weXhfdF8zID0gUHlMaXN0X05ldygwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZ WF9FUlIoMCwgMjg1LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Myk7CisgICAgIF9fcHl4X3ZfYXJncyA9ICgoUHlPYmplY3QqKV9fcHl4X3RfMyk7CisgICAgIF9f cHl4X3RfMyA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoy ODQKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI4NgorICAqICAgICAg ICAgICAgIGNsaW1zZyA9IDxtcHZfZXZlbnRfY2xpZW50X21lc3NhZ2UqPmRhdGEKKyAgKiAgICAg ICAgICAgICBhcmdzID0gW10KKyAgKiAgICAgICAgICAgICBudW1fYXJncyA9IGNsaW1zZy5udW1f YXJncyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNTk1MSw3ICs1OTUxLDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2Rh dGEoc3RydWN0IF9fcHl4X29ial85dmkKKyAgICAgX19weXhfdF80ID0gX19weXhfdl9jbGltc2ct Pm51bV9hcmdzOworICAgICBfX3B5eF92X251bV9hcmdzID0gX19weXhfdF80OworIAorLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg1CisrICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyODcKKyAgKiAgICAgICAgICAgICBhcmdzID0gW10KKyAgKiAg ICAgICAgICAgICBudW1fYXJncyA9IGNsaW1zZy5udW1fYXJncworICAqICAgICAgICAgICAgIGZv ciBpIGluIHJhbmdlKG51bV9hcmdzKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTU5NjMsMjYgKzU5NjMsMjYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl81RXZlbnRfX2RhdGEoc3RydWN0IF9fcHl4X29ial85dmkKKyAgICAgZm9yIChf X3B5eF90XzYgPSAwOyBfX3B5eF90XzYgPCBfX3B5eF90XzU7IF9fcHl4X3RfNis9MSkgeworICAg ICAgIF9fcHl4X3ZfaSA9IF9fcHl4X3RfNjsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6Mjg2CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjI4OAorICAqICAgICAgICAgICAgIG51bV9hcmdzID0gY2xpbXNnLm51bV9hcmdzCisgICog ICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtX2FyZ3MpOgorICAqICAgICAgICAgICAgICAg ICBhcmcgPSA8Y2hhcio+Y2xpbXNnLmFyZ3NbaV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICAgICAgICAgICAgICBhcmcgPSBfc3RyZGVjKGFyZykKKyAgKiAgICAgICAgICAg ICAgICAgYXJncy5hcHBlbmQoYXJnKQorICAqLworLSAgICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5 Qnl0ZXNfRnJvbVN0cmluZygoKGNoYXIgKikoX19weXhfdl9jbGltc2ctPmFyZ3NbX19weXhfdl9p XSkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjg2LCBfX3B5eF9M MV9lcnJvcikKKysgICAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoKChj aGFyICopKF9fcHl4X3ZfY2xpbXNnLT5hcmdzW19fcHl4X3ZfaV0pKSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI4OCwgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMyk7CisgICAgICAgX19QeXhfWERFQ1JFRl9TRVQoX19weXhfdl9h cmcsIF9fcHl4X3RfMyk7CisgICAgICAgX19weXhfdF8zID0gMDsKKyAKKy0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg3CisrICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjI4OQorICAqICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG51bV9h cmdzKToKKyAgKiAgICAgICAgICAgICAgICAgYXJnID0gPGNoYXIqPmNsaW1zZy5hcmdzW2ldCisg ICogICAgICAgICAgICAgICAgIGFyZyA9IF9zdHJkZWMoYXJnKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykKKyAgKiAgICAg ICAgICAgICByZXR1cm4gYXJncworICAqLworLSAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZGVjKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIp KSBfX1BZWF9FUlIoMCwgMjg3LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDI4OSwgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMik7CisgICAgICAgX19weXhfdF83ID0gTlVMTDsKKyAgICAgICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfMikpKSB7CitAQCAtNTk5NiwyMyArNTk5NiwyMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2 aQorICAgICAgIH0KKyAgICAgICBfX3B5eF90XzMgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2Jq ZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfNywgX19weXhfdl9hcmcpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfYXJnKTsKKyAgICAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICAgICAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMjg3LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyODksIF9fcHl4X0wxX2Vycm9y KQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhf dl9hcmcsIF9fcHl4X3RfMyk7CisgICAgICAgX19weXhfdF8zID0gMDsKKyAKKy0gICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg4CisrICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjI5MAorICAqICAgICAgICAgICAgICAgICBhcmcgPSA8Y2hhcio+ Y2xpbXNnLmFyZ3NbaV0KKyAgKiAgICAgICAgICAgICAgICAgYXJnID0gX3N0cmRlYyhhcmcpCisg ICogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgICAgIHJldHVybiBhcmdzCisgICogICAgICAgICBlbGlmIHNl bGYuaWQgPT0gTVBWX0VWRU5UX0VORF9GSUxFOgorICAqLworLSAgICAgIF9fcHl4X3RfOCA9IF9f UHl4X1B5TGlzdF9BcHBlbmQoX19weXhfdl9hcmdzLCBfX3B5eF92X2FyZyk7IGlmICh1bmxpa2Vs eShfX3B5eF90XzggPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDAsIDI4OCwgX19weXhfTDFfZXJy b3IpCisrICAgICAgX19weXhfdF84ID0gX19QeXhfUHlMaXN0X0FwcGVuZChfX3B5eF92X2FyZ3Ms IF9fcHl4X3ZfYXJnKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfOCA9PSAoKGludCktMSkpKSBfX1BZ WF9FUlIoMCwgMjkwLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgfQorIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mjg5CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoyOTEKKyAgKiAgICAgICAgICAgICAgICAgYXJnID0gX3N0cmRlYyhhcmcpCisg ICogICAgICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGFyZykKKyAgKiAgICAgICAgICAgICByZXR1 cm4gYXJncyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNjAyNCw3ICs2MDI0LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf X2RhdGEoc3RydWN0IF9fcHl4X29ial85dmkKKyAgICAgX19weXhfciA9IF9fcHl4X3ZfYXJnczsK KyAgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjI4MQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjgzCisg ICogICAgICAgICAjIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZFTlRfU0NSSVBUX0lOUFVUX0RJU1BB VENIOgorICAqICAgICAgICAgIyAgICAgcmV0dXJuIElucHV0RGlzcGF0Y2goKS5faW5pdCg8bXB2 X2V2ZW50X3NjcmlwdF9pbnB1dF9kaXNwYXRjaCo+ZGF0YSkKKyAgKiAgICAgICAgIGVsaWYgc2Vs Zi5pZCA9PSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC02MDM0LDcgKzYwMzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAg ICBicmVhazsKKyAgICAgY2FzZSBNUFZfRVZFTlRfRU5EX0ZJTEU6CisgCistICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTEKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjI5MworICAqICAgICAgICAgICAgIHJldHVybiBhcmdzCisgICogICAgICAg ICBlbGlmIHNlbGYuaWQgPT0gTVBWX0VWRU5UX0VORF9GSUxFOgorICAqICAgICAgICAgICAgIHJl dHVybiBFbmRPZkZpbGVSZWFjaGVkKCkuX2luaXQoPG1wdl9ldmVudF9lbmRfZmlsZSo+ZGF0YSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTYwNDIsMTYgKzYwNDIsMTYgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGEo c3RydWN0IF9fcHl4X29ial85dmkKKyAgKiAKKyAgKi8KKyAgICAgX19QeXhfWERFQ1JFRihfX3B5 eF9yKTsKKy0gICAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlPYmpl Y3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCkp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAyOTEsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVj dCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSk7 IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDI5MywgX19weXhfTDFfZXJy b3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgICBfX3B5eF90XzIgPSAoKHN0 cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFj aGVkICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVS ZWFjaGVkICopX19weXhfdF8zKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqKV9fcHl4X3RfMyksICgo c3RydWN0IG1wdl9ldmVudF9lbmRfZmlsZSAqKV9fcHl4X3ZfZGF0YSkpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyOTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5 eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F bmRPZkZpbGVSZWFjaGVkICopKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9FbmRPZkZpbGVSZWFjaGVkICopX19weXhfdF8zKS0+X19weXhfdnRhYiktPl9pbml0KCgoc3Ry dWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCAqKV9f cHl4X3RfMyksICgoc3RydWN0IG1wdl9ldmVudF9lbmRfZmlsZSAqKV9fcHl4X3ZfZGF0YSkpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAyOTMsIF9fcHl4X0wxX2Vycm9y KQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgICAgIF9fcHl4X3IgPSBfX3B5eF90XzI7CisgICAgIF9f cHl4X3RfMiA9IDA7CisgICAgIGdvdG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoyOTAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjI5MgorICAqICAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChhcmcpCisgICogICAg ICAgICAgICAgcmV0dXJuIGFyZ3MKKyAgKiAgICAgICAgIGVsaWYgc2VsZi5pZCA9PSBNUFZfRVZF TlRfRU5EX0ZJTEU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC02MDYyLDcgKzYw NjIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF9fZGF0YShzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAgICBkZWZhdWx0OiBicmVhazsKKyAg IH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTIKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTQKKyAgKiAgICAgICAgIGVsaWYgc2VsZi5p ZCA9PSBNUFZfRVZFTlRfRU5EX0ZJTEU6CisgICogICAgICAgICAgICAgcmV0dXJuIEVuZE9mRmls ZVJlYWNoZWQoKS5faW5pdCg8bXB2X2V2ZW50X2VuZF9maWxlKj5kYXRhKQorICAqICAgICAgICAg cmV0dXJuIE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTYwNzMsNyArNjA3 Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2 ZW50X19kYXRhKHN0cnVjdCBfX3B5eF9vYmpfOXZpCisgICBfX3B5eF9yID0gUHlfTm9uZTsgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNzAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyNzIKKyAgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKGVycl9jKQorICAqIAorICAq ICAgICBjZGVmIF9kYXRhKHNlbGYsIG1wdl9ldmVudCogZXZlbnQpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtNjA5Niw3ICs2MDk2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2RhdGEoc3RydWN0IF9fcHl4X29ial85 dmkKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Mjk1CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5NworICAq IAorICAqICAgICBAcHJvcGVydHkKKyAgKiAgICAgZGVmIG5hbWUoc2VsZik6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC02MTMwLDcgKzYxMzAsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfX19nZXRfXyhzdHJ1 Y3QgX19weQorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1 cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoyOTgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDAKKyAg KiAgICAgICAgICIiIm1wdl9ldmVudF9uYW1lIG9mIHRoZSBldmVudCBpZCIiIgorICAqICAgICAg ICAgY2RlZiBjb25zdCBjaGFyKiBuYW1lX2MKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC02MTQ1LDcgKzYxNDUsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfX19nZXRf XyhzdHJ1Y3QgX19weQorICAgICAgICNlbmRpZgorICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTkKKysgICAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDEKKyAgKiAgICAgICAgIGNkZWYgY29uc3Qg Y2hhciogbmFtZV9jCisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIG5h bWVfYyA9IG1wdl9ldmVudF9uYW1lKHNlbGYuaWQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC02MTU1LDcgKzYxNTUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfX19nZXRfXyhzdHJ1Y3QgX19weQorICAgICAg ICAgX19weXhfdl9uYW1lX2MgPSBtcHZfZXZlbnRfbmFtZShfX3B5eF92X3NlbGYtPmlkKTsKKyAg ICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjI5OAor KyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDAKKyAgKiAgICAgICAg ICIiIm1wdl9ldmVudF9uYW1lIG9mIHRoZSBldmVudCBpZCIiIgorICAqICAgICAgICAgY2RlZiBj b25zdCBjaGFyKiBuYW1lX2MKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC02MTc0LDcgKzYxNzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfNG5hbWVfX19nZXRfXyhzdHJ1Y3Qg X19weQorICAgICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMDAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDIKKyAgKiAg ICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgbmFtZV9jID0gbXB2X2V2ZW50X25h bWUoc2VsZi5pZCkKKyAgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5hbWVfYykgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTYxODIsOSArNjE4Miw5IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF80bmFtZV9fX2dldF9fKHN0 cnVjdCBfX3B5CisgICogICAgIGNkZWYgX2luaXQoc2VsZiwgbXB2X2V2ZW50KiBldmVudCwgY3R4 KToKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDMwMCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRN b2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDMwMiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0 cmluZyhfX3B5eF92X25hbWVfYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDAsIDMwMCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeUJ5dGVzX0Zy b21TdHJpbmcoX19weXhfdl9uYW1lX2MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigwLCAzMDIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7 CisgICBfX3B5eF90XzQgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1 bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAgLTYxOTksMTQgKzYxOTks MTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2 ZW50XzRuYW1lX19fZ2V0X18oc3RydWN0IF9fcHkKKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF90 XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7Cisg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgICBfX1B5eF9ERUNS RUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDMwMCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKKyAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworICAgZ290byBf X3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTUKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyOTcKKyAgKiAKKyAgKiAgICAgQHBy b3BlcnR5CisgICogICAgIGRlZiBuYW1lKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtNjIyOCw3ICs2MjI4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzRuYW1lX19fZ2V0X18oc3RydWN0IF9fcHkKKyAgIHJl dHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzAyCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNAorICAqICAgICAgICAg cmV0dXJuIF9zdHJkZWMobmFtZV9jKQorICAqIAorICAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1w dl9ldmVudCogZXZlbnQsIGN0eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC02 MjU3LDIwICs2MjU3LDIwIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfNUV2ZW50X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfOXZpCisgICBpbnQgX19weXhf Y2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2luaXQiLCAwKTsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDMKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDUKKyAgKiAKKyAgKiAgICAgY2RlZiBfaW5pdChz ZWxmLCBtcHZfZXZlbnQqIGV2ZW50LCBjdHgpOgorICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBj dHhpZCA9IDx1aW50NjRfdD5pZChjdHgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAg KiAgICAgICAgIHNlbGYuaWQgPSBldmVudC5ldmVudF9pZAorICAqICAgICAgICAgc2VsZi5kYXRh ID0gc2VsZi5fZGF0YShldmVudCkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0 X0NhbGxPbmVBcmcoX19weXhfYnVpbHRpbl9pZCwgX19weXhfdl9jdHgpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf dF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF9idWlsdGluX2lkLCBfX3B5eF92 X2N0eCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwNSwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMiA9IF9f UHl4X1B5SW50X0FzX3VpbnQ2NF90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8y ID09ICgodWludDY0X3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDMw MywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Bc191aW50NjRf dChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2NF90KS0xKSkg JiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAzMDUsIF9fcHl4X0wxX2Vycm9yKQor ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX3B5eF92X2N0 eGlkID0gKCh1aW50NjRfdClfX3B5eF90XzIpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjMwNAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMw NgorICAqICAgICBjZGVmIF9pbml0KHNlbGYsIG1wdl9ldmVudCogZXZlbnQsIGN0eCk6CisgICog ICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKGN0eCkKKyAgKiAgICAg ICAgIHNlbGYuaWQgPSBldmVudC5ldmVudF9pZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtNjI4MCwxNCArNjI4MCwxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAgX19w eXhfdF8zID0gX19weXhfdl9ldmVudC0+ZXZlbnRfaWQ7CisgICBfX3B5eF92X3NlbGYtPmlkID0g X19weXhfdF8zOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNQor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNworICAqICAgICAgICAgY2Rl ZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChjdHgpCisgICogICAgICAgICBzZWxmLmlk ID0gZXZlbnQuZXZlbnRfaWQKKyAgKiAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuX2RhdGEoZXZl bnQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHVzZXJkYXRhID0g X3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJkYXRhLCBOb25lKQor ICAqICAgICAgICAgaWYgdXNlcmRhdGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VW RU5UX1BST1BFUlRZX0NIQU5HRToKKyAgKi8KKy0gIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdl9zZWxmLT5f X3B5eF92dGFiKS0+X2RhdGEoX19weXhfdl9zZWxmLCBfX3B5eF92X2V2ZW50KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2 X0V2ZW50ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2RhdGEoX19weXhfdl9zZWxmLCBf X3B5eF92X2V2ZW50KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzA3 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhf R0lWRVJFRihfX3B5eF90XzEpOworICAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+ZGF0YSk7 CitAQCAtNjI5NSwxOSArNjI5NSwxOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAgX19w eXhfdl9zZWxmLT5kYXRhID0gX19weXhfdF8xOworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDYKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjozMDgKKyAgKiAgICAgICAgIHNlbGYuaWQgPSBldmVudC5ldmVudF9p ZAorICAqICAgICAgICAgc2VsZi5kYXRhID0gc2VsZi5fZGF0YShldmVudCkKKyAgKiAgICAgICAg IHVzZXJkYXRhID0gX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJk YXRhLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBpZiB1 c2VyZGF0YSBpcyBub3QgTm9uZSBhbmQgc2VsZi5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hB TkdFOgorICAqICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCisgICovCistICBfX3B5eF90 XzQgPSBfX1B5eF9HZXRJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19yZXBs eV91c2VyZGF0YXMsIF9fcHl4X3ZfY3R4aWQsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9t X3VpbnQ2NF90LCAwLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIo MCwgMzA2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNCA9IF9fUHl4X0dldEl0ZW1JbnQo X19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywgX19weXhfdl9j dHhpZCwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9y KQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBfX3B5eF90XzUgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNCwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSgh X19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90 XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNCwgX19weXhfbl9zX2dldCk7 IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMwOCwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworLSAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV91aW50 NjRfdChfX3B5eF92X2V2ZW50LT5yZXBseV91c2VyZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhf dF80KSkgX19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBf X1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfZXZlbnQtPnJlcGx5X3VzZXJkYXRhKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzA4LCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgX19weXhfdF82ID0gTlVMTDsKKyAg IF9fcHl4X3RfNyA9IDA7CitAQCAtNjMyNCw3ICs2MzI0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQoc3RydWN0IF9fcHl4X29i al85dmkKKyAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKyAgIGlmIChQeUZ1bmN0aW9uX0NoZWNr KF9fcHl4X3RfNSkpIHsKKyAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF82 LCBfX3B5eF90XzQsIFB5X05vbmV9OworLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9u X0Zhc3RDYWxsKF9fcHl4X3RfNSwgX19weXhfdGVtcCsxLV9fcHl4X3RfNywgMitfX3B5eF90Xzcp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDYsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3Rf NSwgX19weXhfdGVtcCsxLV9fcHl4X3RfNywgMitfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKK0BA IC02MzMzLDE0ICs2MzMzLDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfOXZpCisgICAjaWYgQ1lU SE9OX0ZBU1RfUFlDQ0FMTAorICAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5 eF90XzUpKSB7CisgICAgIFB5T2JqZWN0ICpfX3B5eF90ZW1wWzNdID0ge19fcHl4X3RfNiwgX19w eXhfdF80LCBQeV9Ob25lfTsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFz dENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF83LCAyK19fcHl4X3RfNyk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3Ip CisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfNSwg X19weXhfdGVtcCsxLV9fcHl4X3RfNywgMitfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgIH0g ZWxzZQorICAgI2VuZGlmCisgICB7CistICAgIF9fcHl4X3RfOCA9IFB5VHVwbGVfTmV3KDIrX19w eXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMCwgMzA2LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19weXhfdF84ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzcpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfOCkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9y KQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF84KTsKKyAgICAgaWYgKF9fcHl4X3RfNikgewor ICAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF82KTsgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90 XzgsIDAsIF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IE5VTEw7CitAQCAtNjM1MSw3ICs2MzUxLDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf X2luaXQoc3RydWN0IF9fcHl4X29ial85dmkKKyAgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsK KyAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzgsIDErX19weXhfdF83LCBQeV9Ob25lKTsK KyAgICAgX19weXhfdF80ID0gMDsKKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2Fs bChfX3B5eF90XzUsIF9fcHl4X3RfOCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDMwNiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5T2JqZWN0X0NhbGwoX19weXhfdF81LCBfX3B5eF90XzgsIE5VTEwpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4 X3RfOCA9IDA7CisgICB9CitAQCAtNjM1OSw3ICs2MzU5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQoc3RydWN0IF9fcHl4X29i al85dmkKKyAgIF9fcHl4X3ZfdXNlcmRhdGEgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNworKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwOQorICAqICAgICAgICAgc2VsZi5kYXRhID0g c2VsZi5fZGF0YShldmVudCkKKyAgKiAgICAgICAgIHVzZXJkYXRhID0gX3JlcGx5X3VzZXJkYXRh c1tjdHhpZF0uZ2V0KGV2ZW50LnJlcGx5X3VzZXJkYXRhLCBOb25lKQorICAqICAgICAgICAgaWYg dXNlcmRhdGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NI QU5HRTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTYzNzgsMTQgKzYzNzgsMTQg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRf X2luaXQoc3RydWN0IF9fcHl4X29ial85dmkKKyAgIF9fcHl4X0w0X2Jvb2xfYmlub3BfZG9uZTo7 CisgICBpZiAoX19weXhfdF85KSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozMDgKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMAor ICAqICAgICAgICAgdXNlcmRhdGEgPSBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXS5nZXQoZXZlbnQu cmVwbHlfdXNlcmRhdGEsIE5vbmUpCisgICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9u ZSBhbmQgc2VsZi5pZCAhPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFOgorICAqICAgICAgICAg ICAgIHVzZXJkYXRhLnJlbW92ZSgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgICAgICAgICBpZiBub3QgdXNlcmRhdGEub2JzZXJ2ZWQgYW5kIHVzZXJkYXRhLmNvdW50ZXIg PD0gMDoKKyAgKiAgICAgICAgICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdW2V2 ZW50LnJlcGx5X3VzZXJkYXRhXQorICAqLworLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19yZW1vdmUpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMDgsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEs IF9fcHl4X25fc19yZW1vdmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigw LCAzMTAsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKyAg ICAgX19weXhfdF84ID0gTlVMTDsKKyAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBs aWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsKK0BAIC02Mzk5LDIxICs2Mzk5LDIx IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 X19pbml0KHN0cnVjdCBfX3B5eF9vYmpfOXZpCisgICAgIH0KKyAgICAgX19weXhfdF8xID0gKF9f cHl4X3RfOCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwgX19weXhfdF84 KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzUpOworICAgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDMwOCwgX19weXhfTDFfZXJyb3IpCisrICAgIGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMxMCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19w eXhfdF81ID0gMDsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDkKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMQorICAqICAgICAgICAgaWYgdXNlcmRh dGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToK KyAgKiAgICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKQorICAqICAgICAgICAgICAgIGlmIG5v dCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRh dGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0KKyAgKiAgICAgICAgIGlmIHVzZXJkYXRh IGlzIG5vdCBOb25lOgorICAqLworLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19vYnNlcnZlZCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9f cHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YSwgX19w eXhfbl9zX29ic2VydmVkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MzExLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAg IF9fcHl4X3RfMTEgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlr ZWx5KF9fcHl4X3RfMTEgPCAwKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCisr ICAgIF9fcHl4X3RfMTEgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfMTEgPCAwKSkgX19QWVhfRVJSKDAsIDMxMSwgX19weXhfTDFfZXJyb3Ip CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworICAgICBfX3B5 eF90XzEwID0gKCghX19weXhfdF8xMSkgIT0gMCk7CisgICAgIGlmIChfX3B5eF90XzEwKSB7CitA QCAtNjQyMSwyOSArNjQyMSwyOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAgICAgIF9f cHl4X3RfOSA9IF9fcHl4X3RfMTA7CisgICAgICAgZ290byBfX3B5eF9MN19ib29sX2Jpbm9wX2Rv bmU7CisgICAgIH0KKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X3VzZXJkYXRhLCBfX3B5eF9uX3NfY291bnRlcik7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9 IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YSwgX19weXhfbl9zX2Nv dW50ZXIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMTEsIF9fcHl4 X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19weXhfdF81 ID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdF8xLCBfX3B5eF9pbnRfMCwgUHlfTEUpOyBf X1B5eF9YR09UUkVGKF9fcHl4X3RfNSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhf RVJSKDAsIDMwOSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNSA9IFB5T2JqZWN0X1Jp Y2hDb21wYXJlKF9fcHl4X3RfMSwgX19weXhfaW50XzAsIFB5X0xFKTsgX19QeXhfWEdPVFJFRihf X3B5eF90XzUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMTEsIF9f cHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKy0gICAgX19weXhfdF8xMCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzUpOyBp ZiAodW5saWtlbHkoX19weXhfdF8xMCA8IDApKSBfX1BZWF9FUlIoMCwgMzA5LCBfX3B5eF9MMV9l cnJvcikKKysgICAgX19weXhfdF8xMCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzUp OyBpZiAodW5saWtlbHkoX19weXhfdF8xMCA8IDApKSBfX1BZWF9FUlIoMCwgMzExLCBfX3B5eF9M MV9lcnJvcikKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Cisg ICAgIF9fcHl4X3RfOSA9IF9fcHl4X3RfMTA7CisgICAgIF9fcHl4X0w3X2Jvb2xfYmlub3BfZG9u ZTo7CisgICAgIGlmIChfX3B5eF90XzkpIHsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzEwCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMxMgorICAqICAgICAgICAgICAgIHVzZXJkYXRhLnJlbW92ZSgpCisgICogICAgICAgICAg ICAgaWYgbm90IHVzZXJkYXRhLm9ic2VydmVkIGFuZCB1c2VyZGF0YS5jb3VudGVyIDw9IDA6Cisg ICogICAgICAgICAgICAgICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBs eV91c2VyZGF0YV0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgaWYg dXNlcmRhdGEgaXMgbm90IE5vbmU6CisgICogICAgICAgICAgICAgdXNlcmRhdGEgPSB1c2VyZGF0 YS5kYXRhCisgICovCistICAgICAgX19weXhfdF81ID0gX19QeXhfR2V0SXRlbUludChfX3B5eF92 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1 aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSk7IGlmICh1bmxp a2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMxMCwgX19weXhfTDFfZXJyb3IpCisrICAg ICAgX19weXhfdF81ID0gX19QeXhfR2V0SXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRfdCwgMCwgX19QeXhf UHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkg X19QWVhfRVJSKDAsIDMxMiwgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNSk7CistICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X0RlbEl0ZW1JbnQoX19weXhfdF81 LCBfX3B5eF92X2V2ZW50LT5yZXBseV91c2VyZGF0YSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50 X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCAzMTAsIF9fcHl4X0wx X2Vycm9yKQorKyAgICAgIGlmICh1bmxpa2VseShfX1B5eF9EZWxJdGVtSW50KF9fcHl4X3RfNSwg X19weXhfdl9ldmVudC0+cmVwbHlfdXNlcmRhdGEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9G cm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgMzEyLCBfX3B5eF9MMV9l cnJvcikKKyAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKyAK Ky0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzA5CisrICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMQorICAqICAgICAgICAgaWYgdXNlcmRh dGEgaXMgbm90IE5vbmUgYW5kIHNlbGYuaWQgIT0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRToK KyAgKiAgICAgICAgICAgICB1c2VyZGF0YS5yZW1vdmUoKQorICAqICAgICAgICAgICAgIGlmIG5v dCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNjQ1Miw3ICs2NDUyLDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQoc3RydWN0IF9fcHl4 X29ial85dmkKKyAgKi8KKyAgICAgfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzA3CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMDkK KyAgKiAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuX2RhdGEoZXZlbnQpCisgICogICAgICAgICB1 c2VyZGF0YSA9IF9yZXBseV91c2VyZGF0YXNbY3R4aWRdLmdldChldmVudC5yZXBseV91c2VyZGF0 YSwgTm9uZSkKKyAgKiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lIGFuZCBzZWxmLmlk ICE9IE1QVl9FVkVOVF9QUk9QRVJUWV9DSEFOR0U6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC02NDYxLDcgKzY0NjEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAqLwor ICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMQorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMworICAqICAgICAgICAgICAgIGlmIG5v dCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOgorICAqICAgICAg ICAgICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF1bZXZlbnQucmVwbHlfdXNlcmRh dGFdCisgICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTY0NzIsMTkgKzY0NzIsMTkgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2luaXQoc3RydWN0IF9fcHl4X29i al85dmkKKyAgIF9fcHl4X3RfMTAgPSAoX19weXhfdF85ICE9IDApOworICAgaWYgKF9fcHl4X3Rf MTApIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMgorKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE0CisgICogICAgICAgICAgICAg ICAgIGRlbCBfcmVwbHlfdXNlcmRhdGFzW2N0eGlkXVtldmVudC5yZXBseV91c2VyZGF0YV0KKyAg KiAgICAgICAgIGlmIHVzZXJkYXRhIGlzIG5vdCBOb25lOgorICAqICAgICAgICAgICAgIHVzZXJk YXRhID0gdXNlcmRhdGEuZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAg ICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gdXNlcmRhdGEKKyAgKiAgICAgICAgIHNlbGYuZXJy b3IgPSBldmVudC5lcnJvcgorICAqLworLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9H ZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X25fc19kYXRhKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMzEyLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19w eXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhLCBfX3B5 eF9uX3NfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMxNCwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworICAgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3ZfdXNlcmRhdGEsIF9fcHl4X3RfNSk7CisgICAgIF9fcHl4X3Rf NSA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTEKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxMworICAqICAgICAgICAgICAg IGlmIG5vdCB1c2VyZGF0YS5vYnNlcnZlZCBhbmQgdXNlcmRhdGEuY291bnRlciA8PSAwOgorICAq ICAgICAgICAgICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF1bZXZlbnQucmVwbHlf dXNlcmRhdGFdCisgICogICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTY0OTMsNyArNjQ5Myw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19pbml0KHN0cnVjdCBfX3B5 eF9vYmpfOXZpCisgICovCisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzEzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE1CisgICog ICAgICAgICBpZiB1c2VyZGF0YSBpcyBub3QgTm9uZToKKyAgKiAgICAgICAgICAgICB1c2VyZGF0 YSA9IHVzZXJkYXRhLmRhdGEKKyAgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSB1c2Vy ZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNjUwNiw3ICs2NTA2LDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfX2lu aXQoc3RydWN0IF9fcHl4X29ial85dmkKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPnJl cGx5X3VzZXJkYXRhKTsKKyAgIF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBfX3B5eF92 X3VzZXJkYXRhOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxNAor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxNgorICAqICAgICAgICAgICAg IHVzZXJkYXRhID0gdXNlcmRhdGEuZGF0YQorICAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YSA9IHVzZXJkYXRhCisgICogICAgICAgICBzZWxmLmVycm9yID0gZXZlbnQuZXJyb3IgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTY1MTYsNyArNjUxNiw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19pbml0KHN0cnVjdCBf X3B5eF9vYmpfOXZpCisgICBfX3B5eF90XzcgPSBfX3B5eF92X2V2ZW50LT5lcnJvcjsKKyAgIF9f cHl4X3Zfc2VsZi0+ZXJyb3IgPSBfX3B5eF90Xzc7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzE1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzE3CisgICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gdXNlcmRhdGEKKyAgKiAgICAg ICAgIHNlbGYuZXJyb3IgPSBldmVudC5lcnJvcgorICAqICAgICAgICAgcmV0dXJuIHNlbGYgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTY1MjgsNyArNjUyOCw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50X19pbml0KHN0cnVj dCBfX3B5eF9vYmpfOXZpCisgICBfX3B5eF9yID0gKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZik7 CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMwMgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMwNAorICAqICAg ICAgICAgcmV0dXJuIF9zdHJkZWMobmFtZV9jKQorICAqIAorICAqICAgICBjZGVmIF9pbml0KHNl bGYsIG1wdl9ldmVudCogZXZlbnQsIGN0eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK K0BAIC02NTUyLDcgKzY1NTIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2XzVFdmVudF9faW5pdChzdHJ1Y3QgX19weXhfb2JqXzl2aQorICAgcmV0dXJu IF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNTgK KysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjYwCisgICogY2RlZiBjbGFzcyBF dmVudChvYmplY3QpOgorICAqICAgICAiIiJXcmFwczogbXB2X2V2ZW50IiIiCisgICogICAgIGNk ZWYgcHVibGljIG1wdl9ldmVudF9pZCBpZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtNjU4Miw3ICs2NTgyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNUV2ZW50XzJpZF9fX2dldF9fKHN0cnVjdCBfX3B5eF8KKyAgIGludCBfX3B5 eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2dldF9fIiwg MCk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8xID0gX19QeXhfUHlJ bnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoX19weXhfdl9zZWxmLT5pZCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChfX3B5eF92X3NlbGYt PmlkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMjYwLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19weXhfciA9IF9fcHl4 X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CitAQCAtNjYyMCw3ICs2NjIwLDcgQEAgc3RhdGljIGlu dCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50XzJpZF8yX19zZXRfXyhzdHJ1 Y3QgX19weXhfb2JqXzkKKyAgIGNvbnN0IGNoYXIgKl9fcHl4X2ZpbGVuYW1lID0gTlVMTDsKKyAg IGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJf X3NldF9fIiwgMCk7CistICBfX3B5eF90XzEgPSAoKGVudW0gbXB2X2V2ZW50X2lkKV9fUHl4X1B5 SW50X0FzX2VudW1fX21wdl9ldmVudF9pZChfX3B5eF92X3ZhbHVlKSk7IGlmICh1bmxpa2VseShQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzEgPSAoKGVudW0gbXB2X2V2ZW50X2lkKV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9l dmVudF9pZChfX3B5eF92X3ZhbHVlKSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDAsIDI2MCwgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF92X3NlbGYtPmlkID0g X19weXhfdF8xOworIAorICAgLyogZnVuY3Rpb24gZXhpdCBjb2RlICovCitAQCAtNjYzNCw3ICs2 NjM0LDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfNUV2ZW50 XzJpZF8yX19zZXRfXyhzdHJ1Y3QgX19weXhfb2JqXzkKKyAgIHJldHVybiBfX3B5eF9yOworIH0K KyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjU5CisrLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjI2MQorICAqICAgICAiIiJXcmFwczogbXB2X2V2ZW50IiIi CisgICogICAgIGNkZWYgcHVibGljIG1wdl9ldmVudF9pZCBpZAorICAqICAgICBjZGVmIHB1Ymxp YyBpbnQgZXJyb3IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTY2NjQsNyArNjY2 NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVF dmVudF81ZXJyb3JfX19nZXRfXyhzdHJ1Y3QgX19wCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7 CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworICAgX19QeXhf WERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9f cHl4X3Zfc2VsZi0+ZXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCAyNTksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9p bnQoX19weXhfdl9zZWxmLT5lcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDI2MSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK KyAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworQEAgLTY3MDIsNyAr NjcwMiw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVu dF81ZXJyb3JfMl9fc2V0X18oc3RydWN0IF9fcHl4X29iCisgICBjb25zdCBjaGFyICpfX3B5eF9m aWxlbmFtZSA9IE5VTEw7CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19zZXRfXyIsIDApOworLSAgX19weXhfdF8xID0gX19QeXhfUHlJ bnRfQXNfaW50KF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMSA9PSAoaW50 KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDI1OSwgX19weXhfTDFfZXJy b3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl92YWx1ZSk7IGlm ICh1bmxpa2VseSgoX19weXhfdF8xID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBf X1BZWF9FUlIoMCwgMjYxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4X3Zfc2VsZi0+ZXJyb3Ig PSBfX3B5eF90XzE7CisgCisgICAvKiBmdW5jdGlvbiBleGl0IGNvZGUgKi8KK0BAIC02NzE2LDcg KzY3MTYsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81RXZl bnRfNWVycm9yXzJfX3NldF9fKHN0cnVjdCBfX3B5eF9vYgorICAgcmV0dXJuIF9fcHl4X3I7Cisg fQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoyNjAKKysvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MjYyCisgICogICAgIGNkZWYgcHVibGljIG1wdl9ldmVu dF9pZCBpZAorICAqICAgICBjZGVmIHB1YmxpYyBpbnQgZXJyb3IKKyAgKiAgICAgY2RlZiBwdWJs aWMgb2JqZWN0IGRhdGEsIHJlcGx5X3VzZXJkYXRhICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC03MjE1LDcgKzcyMTUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl81RXZlbnRfMl9fc2V0c3RhdGVfY3l0aG9uX18oc3RydQorICAgcmV0 dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz MTgKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIwCisgICogCisgICogCisg ICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNzIz Nyw3ICs3MjM3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJz XzNtcHZfNV9lcnJvcnMoUHlPYmplY3QgKl9fcHl4X3NlbGYsIFAKKyAgIHJldHVybiBfX3B5eF9y OworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE5CisrLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMQorICAqIAorICAqIGRlZiBfZXJyb3JzKGZu KToKKyAgKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtNzI4NSw0MiArNzI4NSw0MiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X2Vycm9yc193cmFwcGVkKFB5T2JqZWN0ICpfX3B5eAor ICAgX19weXhfb3V0ZXJfc2NvcGUgPSAoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJyb3JzICopIF9fUHl4X0N5RnVuY3Rpb25fR2V0 Q2xvc3VyZShfX3B5eF9zZWxmKTsKKyAgIF9fcHl4X2N1cl9zY29wZSA9IF9fcHl4X291dGVyX3Nj b3BlOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMAorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMgorICAqIGRlZiBfZXJyb3JzKGZuKToK KyAgKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgorICAqICAgICAgICAgdiA9IGZuKCprLCAq Kmt3KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBpZiB2IDwgMDoK KyAgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KQorICAqLworLSAgaWYgKHVubGlrZWx5 KCFfX3B5eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4pKSB7IF9fUHl4X1JhaXNlQ2xvc3VyZU5hbWVF cnJvcigiZm4iKTsgX19QWVhfRVJSKDAsIDMyMCwgX19weXhfTDFfZXJyb3IpIH0KKy0gIF9fcHl4 X3RfMSA9IFB5RGljdF9Db3B5KF9fcHl4X3Zfa3cpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5 eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4pKSB7IF9fUHl4X1JhaXNlQ2xvc3VyZU5hbWVFcnJvcigi Zm4iKTsgX19QWVhfRVJSKDAsIDMyMiwgX19weXhfTDFfZXJyb3IpIH0KKysgIF9fcHl4X3RfMSA9 IFB5RGljdF9Db3B5KF9fcHl4X3Zfa3cpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAzMjIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X2N1cl9zY29wZS0+X19w eXhfdl9mbiwgX19weXhfdl9rLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikp IF9fUFlYX0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhf UHlPYmplY3RfQ2FsbChfX3B5eF9jdXJfc2NvcGUtPl9fcHl4X3ZfZm4sIF9fcHl4X3ZfaywgX19w eXhfdF8xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMzIyLCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX3B5eF92X3YgPSBfX3B5eF90XzI7Cisg ICBfX3B5eF90XzIgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjMyMQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMworICAqICAgICBk ZWYgd3JhcHBlZCgqaywgKiprdyk6CisgICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCisgICog ICAgICAgICBpZiB2IDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAg ICAgICAgIHJhaXNlIE1QVkVycm9yKHYpCisgICogICAgIHJldHVybiB3cmFwcGVkCisgICovCist ICBfX3B5eF90XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X3YsIF9fcHl4X2ludF8w LCBQeV9MVCk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgMzIxLCBfX3B5eF9MMV9lcnJvcikKKy0gIF9fcHl4X3RfMyA9IF9f UHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwg MCkpIF9fUFlYX0VSUigwLCAzMjEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gUHlP YmplY3RfUmljaENvbXBhcmUoX19weXhfdl92LCBfX3B5eF9pbnRfMCwgUHlfTFQpOyBfX1B5eF9Y R09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDMyMywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1Ry dWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwg MzIzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworICAgaWYgKHVubGlrZWx5KF9fcHl4X3RfMykpIHsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MzI0CisgICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCisgICogICAgICAg ICBpZiB2IDwgMDoKKyAgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIHJldHVybiB3cmFwcGVkCisgICogCisgICovCist ICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfTVBWRXJy b3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMjIsIF9fcHl4X0wx X2Vycm9yKQorKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhf bl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzI0 LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAgIF9f cHl4X3RfNCA9IE5VTEw7CisgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtl bHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8xKSkpIHsKK0BAIC03MzM0LDE0ICs3MzM0LDE0IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdfZXJyb3Jz X3dyYXBwZWQoUHlPYmplY3QgKl9fcHl4CisgICAgIH0KKyAgICAgX19weXhfdF8yID0gKF9fcHl4 X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8xLCBfX3B5eF90XzQsIF9f cHl4X3ZfdikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMSwgX19weXhfdl92 KTsKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzMjIsIF9fcHl4X0wxX2Vycm9y KQorKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzMjQsIF9fcHl4 X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICAgIF9fUHl4X1JhaXNlKF9fcHl4X3Rf MiwgMCwgMCwgMCk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OworLSAgICBfX1BZWF9FUlIoMCwgMzIyLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QWVhfRVJS KDAsIDMyNCwgX19weXhfTDFfZXJyb3IpCisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozMjEKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMy MworICAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6CisgICogICAgICAgICB2ID0gZm4oKmss ICoqa3cpCisgICogICAgICAgICBpZiB2IDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTczNTAsNyArNzM1MCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdfZXJyb3JzX3dyYXBwZWQoUHlPYmplY3QgKl9fcHl4CisgICovCisg ICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzE5CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIxCisgICogCisgICogZGVmIF9lcnJvcnMo Zm4pOgorICAqICAgICBkZWYgd3JhcHBlZCgqaywgKiprdyk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC03Mzc0LDcgKzczNzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83X2Vycm9yc193cmFwcGVkKFB5T2JqZWN0ICpfX3B5eAor ICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozMTgKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIwCisgICogCisg ICogCisgICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtNzM5Niw3ICs3Mzk2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfNF9lcnJvcnMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAorICAgaWYgKHVubGlr ZWx5KCFfX3B5eF9jdXJfc2NvcGUpKSB7CisgICAgIF9fcHl4X2N1cl9zY29wZSA9ICgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX19weXhfc2NvcGVfc3RydWN0X19fZXJy b3JzICopUHlfTm9uZSk7CisgICAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKy0gICAgX19QWVhf RVJSKDAsIDMxOCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUFlYX0VSUigwLCAzMjAsIF9fcHl4 X0wxX2Vycm9yKQorICAgfSBlbHNlIHsKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X2N1cl9zY29w ZSk7CisgICB9CitAQCAtNzQwNCwxOSArNzQwNCwxOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl80X2Vycm9ycyhDWVRIT05fVU5VU0VEIFB5T2JqZWN0 CisgICBfX1B5eF9JTkNSRUYoX19weXhfY3VyX3Njb3BlLT5fX3B5eF92X2ZuKTsKKyAgIF9fUHl4 X0dJVkVSRUYoX19weXhfY3VyX3Njb3BlLT5fX3B5eF92X2ZuKTsKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozMjEKKyAgKiAKKyAgKiBkZWYgX2Vycm9ycyhmbik6CisgICogICAgIGRlZiB3cmFw cGVkKCprLCAqKmt3KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAg diA9IGZuKCprLCAqKmt3KQorICAqICAgICAgICAgaWYgdiA8IDA6CisgICovCistICBfX3B5eF90 XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN19lcnJvcnNfMXdyYXBwZWQsIDAsIF9fcHl4X25fc19lcnJvcnNfbG9jYWxzX3dyYXBwZWQs ICgoUHlPYmplY3QqKV9fcHl4X2N1cl9zY29wZSksIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19t cHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18yKSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMxOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN19lcnJvcnNfMXdyYXBwZWQsIDAsIF9fcHl4X25fc19lcnJvcnNfbG9jYWxzX3dyYXBw ZWQsICgoUHlPYmplY3QqKV9fcHl4X2N1cl9zY29wZSksIF9fcHl4X25fc192aWRjdXR0ZXJfbGli c19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18yKSk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMyMSwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fcHl4X3Zfd3JhcHBlZCA9IF9fcHl4X3RfMTsK KyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MzIzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI1CisgICogICAg ICAgICBpZiB2IDwgMDoKKyAgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcih2KQorICAqICAg ICByZXR1cm4gd3JhcHBlZCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNzQyOCw3 ICs3NDI4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfNF9lcnJvcnMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAorICAgX19weXhfciA9IF9fcHl4X3Zf d3JhcHBlZDsKKyAgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MzE4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzIw CisgICogCisgICogCisgICogZGVmIF9lcnJvcnMoZm4pOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtNzQ0OSw3ICs3NDQ5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfNF9lcnJvcnMoQ1lUSE9OX1VOVVNFRCBQeU9iamVjdAorICAg cmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozMjkKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMxCisgICogICAgIGNv ZGUgPSBOb25lCisgICogCisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTc0OTIsMTEgKzc0OTIsMTEgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yXzFfX2luaXRfXyhQ eU9iamVjdCAqX18KKyAgICAgICAgIGNhc2UgIDE6CisgICAgICAgICBpZiAobGlrZWx5KCh2YWx1 ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3NfZSkp ICE9IDApKSBrd19hcmdzLS07CisgICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgX19QeXhfUmFp c2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAz MjksIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxp ZCgiX19pbml0X18iLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDMzMSwgX19weXhfTDNfZXJy b3IpCisgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGlmICh1bmxpa2VseShrd19hcmdzID4g MCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMo X19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9faW5p dF9fIikgPCAwKSkgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDNfZXJyb3IpCisrICAgICAgICBp ZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4 X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJfX2luaXRfXyIpIDwgMCkpIF9fUFlY X0VSUigwLCAzMzEsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIH0KKyAgICAgfSBlbHNlIGlmIChQ eVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9IDIpIHsKKyAgICAgICBnb3RvIF9fcHl4X0w1 X2FyZ3R1cGxlX2Vycm9yOworQEAgLTc1MDksNyArNzUwOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl8xX19pbml0X18oUHlPYmpl Y3QgKl9fCisgICB9CisgICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19kb25lOwor ICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6OworLSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFs aWQoIl9faW5pdF9fIiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9f UFlYX0VSUigwLCAzMjksIF9fcHl4X0wzX2Vycm9yKQorKyAgX19QeXhfUmFpc2VBcmd0dXBsZUlu dmFsaWQoIl9faW5pdF9fIiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7 IF9fUFlYX0VSUigwLCAzMzEsIF9fcHl4X0wzX2Vycm9yKQorICAgX19weXhfTDNfZXJyb3I6Owor ICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuTVBWRXJyb3IuX19pbml0 X18iLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKKyAgIF9f UHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworQEAgLTc1NDAsMTYgKzc1NDAsMTYgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19f aW5pdF9fKENZVEhPTl9VTlVTRUQKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2lu aXRfXyIsIDApOworICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZSk7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzMyCisgICogCisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKToKKyAgKiAg ICAgICAgIHNlbGYuY29kZSA9IGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAg ICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworICAqICAgICAgICAgY2RlZiBpbnQgZV9pCisg ICovCistICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4 X25fc19jb2RlLCBfX3B5eF92X2UpIDwgMCkgX19QWVhfRVJSKDAsIDMzMCwgX19weXhfTDFfZXJy b3IpCisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4 X25fc19jb2RlLCBfX3B5eF92X2UpIDwgMCkgX19QWVhfRVJSKDAsIDMzMiwgX19weXhfTDFfZXJy b3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMzCisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzM1CisgICogICAgICAgICBjZGVmIGNvbnN0 IGNoYXIqIGVycl9jCisgICogICAgICAgICBjZGVmIGludCBlX2kKKyAgKiAgICAgICAgIGlmIG5v dCBpc2luc3RhbmNlKGUsIGJhc2VzdHJpbmcpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtNzU2MCwxNyArNzU2MCwxNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl84TVBWRXJyb3JfX19pbml0X18oQ1lUSE9OX1VOVVNFRAorICAgX19w eXhfdF8yID0gKCghKF9fcHl4X3RfMSAhPSAwKSkgIT0gMCk7CisgICBpZiAoX19weXhfdF8yKSB7 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzQKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzNgorICAqICAgICAgICAgY2RlZiBpbnQg ZV9pCisgICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBiYXNlc3RyaW5nKToKKyAgKiAg ICAgICAgICAgICBlX2kgPSBlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAg ICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgICAgICBlcnJfYyA9IG1wdl9lcnJv cl9zdHJpbmcoZV9pKQorICAqLworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Bc19pbnQo X19weXhfdl9lKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGludCktMSkgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAzMzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5 eF90XzMgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl9lKTsgaWYgKHVubGlrZWx5KChfX3B5 eF90XzMgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAzMzYs IF9fcHl4X0wxX2Vycm9yKQorICAgICBfX3B5eF92X2VfaSA9IF9fcHl4X3RfMzsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMzNQorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzM3CisgICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShl LCBiYXNlc3RyaW5nKToKKyAgKiAgICAgICAgICAgICBlX2kgPSBlCisgICogICAgICAgICAgICAg d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTc1ODUsNyArNzU4 NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhN UFZFcnJvcl9fX2luaXRfXyhDWVRIT05fVU5VU0VECisgICAgICAgICAjZW5kaWYKKyAgICAgICAg IC8qdHJ5OiovIHsKKyAKKy0gICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjMzNgorKyAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzM4 CisgICogICAgICAgICAgICAgZV9pID0gZQorICAqICAgICAgICAgICAgIHdpdGggbm9naWw6Cisg ICogICAgICAgICAgICAgICAgIGVycl9jID0gbXB2X2Vycm9yX3N0cmluZyhlX2kpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC03NTk1LDcgKzc1OTUsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl84TVBWRXJyb3JfX19pbml0X18oQ1lU SE9OX1VOVVNFRAorICAgICAgICAgICBfX3B5eF92X2Vycl9jID0gbXB2X2Vycm9yX3N0cmluZyhf X3B5eF92X2VfaSk7CisgICAgICAgICB9CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzM1CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzM3CisgICogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBiYXNlc3RyaW5nKToK KyAgKiAgICAgICAgICAgICBlX2kgPSBlCisgICogICAgICAgICAgICAgd2l0aCBub2dpbDogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTc2MTQsMTYgKzc2MTQsMTYgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19faW5p dF9fKENZVEhPTl9VTlVTRUQKKyAgICAgICAgIH0KKyAgICAgfQorIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzM3CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozMzkKKyAgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAg ICAgICAgICBlcnJfYyA9IG1wdl9lcnJvcl9zdHJpbmcoZV9pKQorICAqICAgICAgICAgICAgIGUg PSBfc3RyZGVjKGVycl9jKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAg ICBFeGNlcHRpb24uX19pbml0X18oc2VsZiwgZSkKKyAgKiAKKyAgKi8KKy0gICAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzUsIF9fcHl4X25fc19zdHJkZWMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAzMzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNSwgX19weXhfbl9zX3N0cmRlYyk7IGlm ICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMzOSwgX19weXhfTDFfZXJyb3Ip CisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworLSAgICBfX3B5eF90XzYgPSBfX1B5eF9Q eUJ5dGVzX0Zyb21TdHJpbmcoX19weXhfdl9lcnJfYyk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDMzNywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNiA9IF9f UHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X2Vycl9jKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgMzM5LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNik7CisgICAgIF9fcHl4X3RfNyA9IE5VTEw7CisgICAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsK K0BAIC03NjM4LDEzICs3NjM4LDEzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl9fX2luaXRfXyhDWVRIT05fVU5VU0VECisgICAgIF9f cHl4X3RfNCA9IChfX3B5eF90XzcpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf NSwgX19weXhfdF83LCBfX3B5eF90XzYpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5 eF90XzUsIF9fcHl4X3RfNik7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhf dF83ID0gMDsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cist ICAgIGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzNywgX19weXhfTDFf ZXJyb3IpCisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOSwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKyAgICAgX19QeXhfREVDUkVGX1NF VChfX3B5eF92X2UsIF9fcHl4X3RfNCk7CisgICAgIF9fcHl4X3RfNCA9IDA7CisgCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzMKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjMzNQorICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJf YworICAqICAgICAgICAgY2RlZiBpbnQgZV9pCisgICogICAgICAgICBpZiBub3QgaXNpbnN0YW5j ZShlLCBiYXNlc3RyaW5nKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTc2NTMs MTQgKzc2NTMsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfOE1QVkVycm9yX19faW5pdF9fKENZVEhPTl9VTlVTRUQKKyAgKi8KKyAgIH0KKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMzgKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjozNDAKKyAgKiAgICAgICAgICAgICAgICAgZXJyX2MgPSBtcHZf ZXJyb3Jfc3RyaW5nKGVfaSkKKyAgKiAgICAgICAgICAgICBlID0gX3N0cmRlYyhlcnJfYykKKyAg KiAgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBlKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogCisgICogY2xhc3MgUHlNUFZFcnJvcihFeGNlcHRpb24pOgorICAqLwor LSAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopKCYo KFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0aW9uKVswXSkpLCBfX3B5eF9uX3NfaW5pdCk7IGlm ICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKiko JigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSksIF9fcHl4X25fc19pbml0KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMzQwLCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworICAgX19weXhfdF82ID0gTlVMTDsKKyAg IF9fcHl4X3RfMyA9IDA7CitAQCAtNzY3Nyw3ICs3Njc3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19faW5pdF9fKENZVEhPTl9V TlVTRUQKKyAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKyAgIGlmIChQeUZ1bmN0aW9uX0NoZWNr KF9fcHl4X3RfNSkpIHsKKyAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF82 LCBfX3B5eF92X3NlbGYsIF9fcHl4X3ZfZX07CistICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5RnVu Y3Rpb25fRmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAyK19fcHl4 X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhf TDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5RnVuY3Rpb25fRmFzdENhbGwoX19w eXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAyK19fcHl4X3RfMyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9f UHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNCk7CisgICB9IGVsc2UKK0BAIC03Njg1LDEzICs3Njg1LDEzIEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl9fX2luaXRf XyhDWVRIT05fVU5VU0VECisgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAorICAgaWYgKF9fUHl4 X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzUpKSB7CisgICAgIFB5T2JqZWN0ICpfX3B5 eF90ZW1wWzNdID0ge19fcHl4X3RfNiwgX19weXhfdl9zZWxmLCBfX3B5eF92X2V9OworLSAgICBf X3B5eF90XzQgPSBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzUsIF9fcHl4X3Rl bXArMS1fX3B5eF90XzMsIDIrX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBf X1BZWF9FUlIoMCwgMzM4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF80ID0gX19QeXhf UHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF81LCBfX3B5eF90ZW1wKzEtX19weXhfdF8zLCAy K19fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDM0MCwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICB9IGVsc2UKKyAgICNlbmRp ZgorICAgeworLSAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfMyk7IGlmICh1 bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDMzOCwgX19weXhfTDFfZXJyb3IpCisr ICAgIF9fcHl4X3RfNyA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzQwLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNyk7CisgICAgIGlmIChfX3B5eF90XzYpIHsKKyAgICAgICBfX1B5eF9H SVZFUkVGKF9fcHl4X3RfNik7IFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCBfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSBOVUxMOworQEAgLTc3MDIsMTQgKzc3MDIsMTQgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfOE1QVkVycm9yX19faW5pdF9f KENZVEhPTl9VTlVTRUQKKyAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZSk7CisgICAgIF9fUHl4 X0dJVkVSRUYoX19weXhfdl9lKTsKKyAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDEr X19weXhfdF8zLCBfX3B5eF92X2UpOworLSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9D YWxsKF9fcHl4X3RfNSwgX19weXhfdF83LCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMzM4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF80ID0gX19Q eXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzUsIF9fcHl4X3RfNywgTlVMTCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19w eXhfdF83ID0gMDsKKyAgIH0KKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUg PSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI5CisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MzMxCisgICogICAgIGNvZGUgPSBOb25lCisgICogCisgICogICAg IGRlZiBfX2luaXRfXyhzZWxmLCBlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTc3MzQsNyArNzczNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzhNUFZFcnJvcl9fX2luaXRfXyhDWVRIT05fVU5VU0VECisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NworKy8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDkKKyAgKiAKKyAgKiBjbGFzcyBfUmVw bHlVc2VyRGF0YShvYmplY3QpOgorICAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC03Nzc3LDExICs3Nzc3LDExIEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRh dGFfMV9faW5pdF9fKFB5T2JqCisgICAgICAgICBjYXNlICAxOgorICAgICAgICAgaWYgKGxpa2Vs eSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhf bl9zX2RhdGEpKSAhPSAwKSkga3dfYXJncy0tOworICAgICAgICAgZWxzZSB7CistICAgICAgICAg IF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDEsIDIsIDIsIDEpOyBfX1BZ WF9FUlIoMCwgMzQ3LCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgICAgX19QeXhfUmFpc2VBcmd0 dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAzNDksIF9f cHl4X0wzX2Vycm9yKQorICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBpZiAodW5saWtlbHko a3dfYXJncyA+IDApKSB7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25h bEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2Fy Z3MsICJfX2luaXRfXyIpIDwgMCkpIF9fUFlYX0VSUigwLCAzNDcsIF9fcHl4X0wzX2Vycm9yKQor KyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9r d2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAiX19pbml0X18iKSA8 IDApKSBfX1BZWF9FUlIoMCwgMzQ5LCBfX3B5eF9MM19lcnJvcikKKyAgICAgICB9CisgICAgIH0g ZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7CisgICAgICAgZ290 byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKK0BAIC03Nzk0LDcgKzc3OTQsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRh XzFfX2luaXRfXyhQeU9iagorICAgfQorICAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tp bmdfZG9uZTsKKyAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJn dHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhf YXJncykpOyBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5eF9MM19lcnJvcikKKysgIF9fUHl4X1JhaXNl QXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19w eXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMzQ5LCBfX3B5eF9MM19lcnJvcikKKyAgIF9fcHl4X0wz X2Vycm9yOjsKKyAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2Ll9SZXBs eVVzZXJEYXRhLl9faW5pdF9fIiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9m aWxlbmFtZSk7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKK0BAIC03ODE1LDM0 ICs3ODE1LDM0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzE0X1JlcGx5VXNlckRhdGFfX19pbml0X18oQ1lUSE9OCisgICBpbnQgX19weXhfY2xpbmVu byA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18iLCAwKTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDgKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTAKKyAgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmpl Y3QpOgorICAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICogICAgICAgICBzZWxm LmNvdW50ZXIgPSAwICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNl bGYuZGF0YSA9IGRhdGEKKyAgKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZQorICAqLwor LSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3Nf Y291bnRlciwgX19weXhfaW50XzApIDwgMCkgX19QWVhfRVJSKDAsIDM0OCwgX19weXhfTDFfZXJy b3IpCisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4 X25fc19jb3VudGVyLCBfX3B5eF9pbnRfMCkgPCAwKSBfX1BZWF9FUlIoMCwgMzUwLCBfX3B5eF9M MV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDkKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTEKKyAgKiAgICAgZGVmIF9faW5p dF9fKHNlbGYsIGRhdGEpOgorICAqICAgICAgICAgc2VsZi5jb3VudGVyID0gMAorICAqICAgICAg ICAgc2VsZi5kYXRhID0gZGF0YSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAg ICAgICBzZWxmLm9ic2VydmVkID0gRmFsc2UKKyAgKiAKKyAgKi8KKy0gIGlmIChfX1B5eF9QeU9i amVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2RhdGEsIF9fcHl4X3ZfZGF0 YSkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ5LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9Q eU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2RhdGEsIF9fcHl4X3Zf ZGF0YSkgPCAwKSBfX1BZWF9FUlIoMCwgMzUxLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozNTIKKyAgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKyAgKiAgICAg ICAgIHNlbGYuZGF0YSA9IGRhdGEKKyAgKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogICAgIGRlZiBhZGQoc2VsZik6 CisgICovCistICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9f cHl4X25fc19vYnNlcnZlZCwgUHlfRmFsc2UpIDwgMCkgX19QWVhfRVJSKDAsIDM1MCwgX19weXhf TDFfZXJyb3IpCisrICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYs IF9fcHl4X25fc19vYnNlcnZlZCwgUHlfRmFsc2UpIDwgMCkgX19QWVhfRVJSKDAsIDM1MiwgX19w eXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ3 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ5CisgICogCisgICogY2xh c3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KToKKyAgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRh dGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtNzg2Miw3ICs3ODYyLDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlV c2VyRGF0YV9fX2luaXRfXyhDWVRIT04KKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzUyCisrLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjM1NAorICAqICAgICAgICAgc2VsZi5vYnNlcnZlZCA9IEZhbHNlCisgICog CisgICogICAgIGRlZiBhZGQoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC03ODk0LDIyICs3ODk0LDIyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfMmFkZChDWVRIT05fVU5VCisgICBpbnQgX19w eXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiYWRkIiwgMCk7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzUzCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzU1CisgICogCisgICogICAgIGRlZiBhZGQoc2Vs Zik6CisgICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisgICogCisgICogICAgIGRlZiByZW1vdmUoc2VsZik6CisgICovCistICBfX3B5eF90 XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2Nv dW50ZXIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzNTMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5 eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgMzU1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfQWRkT2JqQyhfX3B5eF90XzEsIF9fcHl4 X2ludF8xLCAxLCAxLCAwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MzUzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0FkZE9iakMo X19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMSwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDM1NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAg aWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY291 bnRlciwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigwLCAzNTMsIF9fcHl4X0wxX2Vycm9yKQor KyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3Nf Y291bnRlciwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigwLCAzNTUsIF9fcHl4X0wxX2Vycm9y KQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzUyCisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzU0CisgICogICAgICAgICBzZWxmLm9ic2VydmVkID0gRmFsc2UKKyAg KiAKKyAgKiAgICAgZGVmIGFkZChzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTc5MzEsNyArNzkzMSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfMmFkZChDWVRIT05fVU5VCisgICByZXR1cm4g X19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQor Ky8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTcKKyAgKiAgICAgICAgIHNlbGYu Y291bnRlciArPSAxCisgICogCisgICogICAgIGRlZiByZW1vdmUoc2VsZik6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC03OTYzLDIyICs3OTYzLDIyIEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNHJlbW92 ZShDWVRIT05fCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgicmVtb3ZlIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MzU2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzU4Cisg ICogCisgICogICAgIGRlZiByZW1vdmUoc2VsZik6CisgICogICAgICAgICBzZWxmLmNvdW50ZXIg LT0gMSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogCisgICovCistICBf X3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhf bl9zX2NvdW50ZXIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzNTYs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jb3VudGVyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMzU4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfU3VidHJhY3RPYmpDKF9fcHl4 X3RfMSwgX19weXhfaW50XzEsIDEsIDEsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9f UFlYX0VSUigwLCAzNTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlJ bnRfU3VidHJhY3RPYmpDKF9fcHl4X3RfMSwgX19weXhfaW50XzEsIDEsIDEsIDApOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAzNTgsIF9fcHl4X0wxX2Vycm9yKQorICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKKy0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2Vs ZiwgX19weXhfbl9zX2NvdW50ZXIsIF9fcHl4X3RfMikgPCAwKSBfX1BZWF9FUlIoMCwgMzU2LCBf X3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zf c2VsZiwgX19weXhfbl9zX2NvdW50ZXIsIF9fcHl4X3RfMikgPCAwKSBfX1BZWF9FUlIoMCwgMzU4 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIg PSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NworICAqICAgICAgICAgc2VsZi5jb3Vu dGVyICs9IDEKKyAgKiAKKyAgKiAgICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTgwMDAsNyArODAwMCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFfNHJlbW92ZShDWVRI T05fCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM3MAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNzIKKyAg KiAKKyAgKiAgICAgQHByb3BlcnR5CisgICogICAgIGRlZiBhcGlfdmVyc2lvbihzZWxmKTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTgwMzMsNyArODAzMyw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzExYXBpX3Zl cnNpb25fX19nZXRfXyhDCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjM3MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjM3MworICAqICAgICBAcHJvcGVydHkKKyAgKiAgICAgZGVmIGFwaV92ZXJzaW9uKHNlbGYpOgor ICAqICAgICAgICAgcmV0dXJuIF9DQVBJX01JTk9SLCBfQ0FQSV9NQUpPUiwgX0NBUElfVkVSU0lP TiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODA0MSwxMyArODA0MSwxMyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8x MWFwaV92ZXJzaW9uX19fZ2V0X18oQworICAqICAgICBAcHJvcGVydHkKKyAgKi8KKyAgIF9fUHl4 X1hERUNSRUYoX19weXhfcik7CistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf MSwgX19weXhfbl9zX0NBUElfTUlOT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAzNzEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzEsIF9fcHl4X25fc19DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMzczLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4 X25fc19DQVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MzcxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhf dF8yLCBfX3B5eF9uX3NfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDM3MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8y KTsKKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZyhfX3B5eF92 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fQ0FQSV9WRVJTSU9OKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzMpKSBfX1BZWF9FUlIoMCwgMzcxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9 IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZyhfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9fQ0FQSV9WRVJTSU9OKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIo MCwgMzczLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAg X19weXhfdF80ID0gUHlUdXBsZV9OZXcoMyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19Q WVhfRVJSKDAsIDM3MSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBQeVR1cGxlX05l dygzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzczLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgX19QeXhfR0lWRVJFRihf X3B5eF90XzEpOworICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzQsIDAsIF9fcHl4X3RfMSk7 CitAQCAtODA2Miw3ICs4MDYyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTFhcGlfdmVyc2lvbl9fX2dldF9fKEMKKyAgIF9fcHl4 X3RfNCA9IDA7CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjM3MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3 MgorICAqIAorICAqICAgICBAcHJvcGVydHkKKyAgKiAgICAgZGVmIGFwaV92ZXJzaW9uKHNlbGYp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODA4NCw3ICs4MDg0LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTFh cGlfdmVyc2lvbl9fX2dldF9fKEMKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzc0CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM3NgorICAqIAorICAqICAgICBAcHJvcGVydHkKKyAgKiAgICAgZGVmIG5hbWUo c2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04MTE4LDcgKzgxMTgsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF80bmFtZV9fX2dldF9fKHN0cnVjdCBfXworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAg X19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9fZ2V0X18iLCAwKTsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozODIKKyAgKiAgICAgICAgICIiIgorICAqICAgICAgICAgY2RlZiBjb25zdCBj aGFyKiBuYW1lCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC04MTI5LDEyICs4MTI5LDEyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lX19fZ2V0X18oc3RydWN0 IF9fCisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKyAgICAgaWYgKHVubGlr ZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworICAgICAgIFB5RXJyX1NldE5vbmUo UHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCAzODAsIF9fcHl4X0wx X2Vycm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCAzODIsIF9fcHl4X0wxX2Vycm9yKQorICAgICB9 CisgICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjozODEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODMKKyAgKiAgICAg ICAgIGNkZWYgY29uc3QgY2hhciogbmFtZQorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAor ICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTgxNDksNyArODE0OSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzRuYW1lX19fZ2V0X18oc3RydWN0IF9fCisgICAgICAgI2VuZGlm CisgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM4MgorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjM4NAorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgd2l0aCBub2dp bDoKKyAgKiAgICAgICAgICAgICBuYW1lID0gbXB2X2NsaWVudF9uYW1lKHNlbGYuX2N0eCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTgxNTksNyArODE1OSw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lX19f Z2V0X18oc3RydWN0IF9fCisgICAgICAgICBfX3B5eF92X25hbWUgPSBtcHZfY2xpZW50X25hbWUo X19weXhfdl9zZWxmLT5fY3R4KTsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjM4MQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozODMKKyAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbmFtZQorICAqICAgICAg ICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTgxNzgsNyArODE3OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRuYW1lX19fZ2V0X18oc3Ry dWN0IF9fCisgICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjM4MworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM4NQorICAq ICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICBuYW1lID0gbXB2X2NsaWVudF9u YW1lKHNlbGYuX2N0eCkKKyAgKiAgICAgICAgIHJldHVybiBfc3RyZGVjKG5hbWUpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04MTg2LDkgKzgxODYsOSBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFtZV9fX2dldF9f KHN0cnVjdCBfXworICAqICAgICBAcHJvcGVydHkKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19w eXhfcik7CistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9z X3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDM4MywgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19w eXhfbl9zX3N0cmRlYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDM4 NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIF9fcHl4 X3RfMyA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhfX3B5eF92X25hbWUpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAzODMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdF8zID0gX19QeXhfUHlCeXRlc19Gcm9tU3RyaW5nKF9fcHl4X3ZfbmFtZSk7IGlmICh1bmxp a2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDM4NSwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgIF9fcHl4X3RfNCA9IE5VTEw7CisgICBpZiAoQ1lU SE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikp KSB7CitAQCAtODIwMywxNCArODIwMywxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFtZV9fX2dldF9fKHN0cnVjdCBfXworICAg X19weXhfdF8xID0gKF9fcHl4X3RfNCkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhf dF8yLCBfX3B5eF90XzQsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9f cHl4X3RfMiwgX19weXhfdF8zKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhf dF80ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzgzLCBfX3B5eF9MMV9lcnJv cikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDM4NSwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19weXhfciA9IF9fcHl4X3RfMTsKKyAgIF9f cHl4X3RfMSA9IDA7CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjM3NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjM3NgorICAqIAorICAqICAgICBAcHJvcGVydHkKKyAgKiAgICAgZGVmIG5hbWUoc2VsZik6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04MjMyLDcgKzgyMzIsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80bmFtZV9f X2dldF9fKHN0cnVjdCBfXworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozODYKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6Mzg4CisgICogCisgICogICAgIEBwcm9wZXJ0eQorICAqICAgICBkZWYgdGltZShzZWxm KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTgyNjMsNyArODI2Myw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0 aW1lX19fZ2V0X18oc3RydWN0IF9fCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19nZXRfXyIsIDApOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjM5NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjM5NgorICAqICAgICAgICAgIiIiCisgICogICAgICAgICBjZGVmIGludDY0X3QgdGlt ZQorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtODI3NCwxMiArODI3NCwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF80dGltZV9fX2dldF9fKHN0cnVjdCBfXworICAg aWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CisgICAgIGlmICh1bmxpa2VseSghKF9f cHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKyAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fz c2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIoMCwgMzk0LCBfX3B5eF9MMV9lcnJvcikK KysgICAgICBfX1BZWF9FUlIoMCwgMzk2LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgfQorICAgfQor ICAgI2VuZGlmCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk1Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk3CisgICogICAgICAgICBjZGVm IGludDY0X3QgdGltZQorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAg d2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTgyOTQsNyArODI5 NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzR0aW1lX19fZ2V0X18oc3RydWN0IF9fCisgICAgICAgI2VuZGlmCisgICAgICAgLyp0 cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM5 NgorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM5OAorICAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAg ICAgICAgICB0aW1lID0gbXB2X2dldF90aW1lX3VzKHNlbGYuX2N0eCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTgzMDQsNyArODMwNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1lX19fZ2V0X18oc3RydWN0 IF9fCisgICAgICAgICBfX3B5eF92X3RpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoX19weXhfdl9zZWxm LT5fY3R4KTsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjM5NQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozOTcK KyAgKiAgICAgICAgIGNkZWYgaW50NjRfdCB0aW1lCisgICogICAgICAgICBhc3NlcnQgc2VsZi5f Y3R4CisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtODMyMyw3ICs4MzIzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNHRpbWVfX19nZXRfXyhzdHJ1Y3QgX18KKyAgICAgICB9 CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk3CisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Mzk5CisgICogICAgICAgICB3aXRoIG5v Z2lsOgorICAqICAgICAgICAgICAgIHRpbWUgPSBtcHZfZ2V0X3RpbWVfdXMoc2VsZi5fY3R4KQor ICAqICAgICAgICAgcmV0dXJuIHRpbWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTgzMzEsMTMgKzgzMzEsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfNHRpbWVfX19nZXRfXyhzdHJ1Y3QgX18KKyAgKiAgICAgIyBk ZWYgc3VzcGVuZChzZWxmKToKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBf X3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludDY0X3QoX19weXhfdl90aW1lKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMzk3LCBfX3B5eF9MMV9lcnJvcikKKysg IF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50NjRfdChfX3B5eF92X3RpbWUpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzOTksIF9fcHl4X0wxX2Vycm9yKQor ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX3B5eF9yID0gX19weXhfdF8xOworICAg X19weXhfdF8xID0gMDsKKyAgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6Mzg2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6Mzg4CisgICogCisgICogICAgIEBwcm9wZXJ0eQorICAqICAgICBkZWYgdGltZShzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTgzNTYsNyArODM1Niw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzR0aW1l X19fZ2V0X18oc3RydWN0IF9fCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQxMgorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0MTQKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAgICAgZGVmIHJlcXVlc3Rf ZXZlbnQoc2VsZiwgZXZlbnQsIGVuYWJsZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK K0BAIC04Mzk5LDExICs4Mzk5LDExIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzFyZXF1ZXN0X2V2ZW50KFB5T2JqZWN0CisgICAgICAg ICBjYXNlICAxOgorICAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19QeXhfUHlEaWN0 X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2VuYWJsZSkpICE9IDApKSBrd19hcmdz LS07CisgICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFs aWQoInJlcXVlc3RfZXZlbnQiLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJSKDAsIDQxMiwgX19weXhf TDNfZXJyb3IpCisrICAgICAgICAgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJyZXF1ZXN0 X2V2ZW50IiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCA0MTQsIF9fcHl4X0wzX2Vycm9yKQor ICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+IDApKSB7 CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4 X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJyZXF1ZXN0X2V2 ZW50IikgPCAwKSkgX19QWVhfRVJSKDAsIDQxMiwgX19weXhfTDNfZXJyb3IpCisrICAgICAgICBp ZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4 X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJyZXF1ZXN0X2V2ZW50IikgPCAwKSkg X19QWVhfRVJSKDAsIDQxNCwgX19weXhfTDNfZXJyb3IpCisgICAgICAgfQorICAgICB9IGVsc2Ug aWYgKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykgIT0gMikgeworICAgICAgIGdvdG8gX19w eXhfTDVfYXJndHVwbGVfZXJyb3I7CitAQCAtODQxNiw3ICs4NDE2LDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMXJlcXVlc3RfZXZl bnQoUHlPYmplY3QKKyAgIH0KKyAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2Rv bmU7CisgICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxl SW52YWxpZCgicmVxdWVzdF9ldmVudCIsIDEsIDIsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhf YXJncykpOyBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MM19lcnJvcikKKysgIF9fUHl4X1JhaXNl QXJndHVwbGVJbnZhbGlkKCJyZXF1ZXN0X2V2ZW50IiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0la RShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA0MTQsIF9fcHl4X0wzX2Vycm9yKQorICAgX19w eXhfTDNfZXJyb3I6OworICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYu Q29udGV4dC5yZXF1ZXN0X2V2ZW50IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5 eF9maWxlbmFtZSk7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKK0BAIC04NDQ0 LDcgKzg0NDQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF9yZXF1ZXN0X2V2ZW50KHN0cnVjdCBfXworICAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInJlcXVlc3RfZXZlbnQiLCAw KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjEKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjMKKyAgKiAgICAgICAgIFdyYXBzOiBtcHZf cmVxdWVzdF9ldmVudAorICAqICAgICAgICAgIiIiCisgICogICAgICAgICBhc3NlcnQgc2VsZi5f Y3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04NDU1LDE5ICs4NDU1LDE5IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 X3JlcXVlc3RfZXZlbnQoc3RydWN0IF9fCisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxh ZykpIHsKKyAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewor ICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlY X0VSUigwLCA0MjEsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA0MjMsIF9f cHl4X0wxX2Vycm9yKQorICAgICB9CisgICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0MjQKKyAgKiAgICAgICAgICIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAorICAqICAgICAgICAgY2RlZiBpbnQgZW5hYmxlX2kgPSAxIGlmIGVuYWJsZSBlbHNlIDAgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICog ICAgICAgICBjZGVmIG1wdl9ldmVudF9pZCBldmVudF9pZCA9IGV2ZW50CisgICovCistICBfX3B5 eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9lbmFibGUpOyBpZiAodW5saWtl bHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA0MjIsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfZW5hYmxlKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgNDI0LCBfX3B5eF9MMV9lcnJvcikK KyAgIGlmIChfX3B5eF90XzIpIHsKKyAgICAgX19weXhfdF8xID0gMTsKKyAgIH0gZWxzZSB7CitA QCAtODQ3NSwxNyArODQ3NSwxNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF9yZXF1ZXN0X2V2ZW50KHN0cnVjdCBfXworICAgfQorICAg X19weXhfdl9lbmFibGVfaSA9IF9fcHl4X3RfMTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0MjQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 MjYKKyAgKiAgICAgICAgIGNkZWYgaW50IGVuYWJsZV9pID0gMSBpZiBlbmFibGUgZWxzZSAwCisg ICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lkIGV2 ZW50X2lkID0gZXZlbnQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAg d2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9ldmVudChzZWxm Ll9jdHgsIGV2ZW50X2lkLCBlbmFibGVfaSkKKyAgKi8KKy0gIF9fcHl4X3RfMyA9ICgoZW51bSBt cHZfZXZlbnRfaWQpX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2V2ZW50X2lkKF9fcHl4X3ZfZXZl bnQpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDI0LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9ICgoZW51bSBtcHZfZXZlbnRfaWQpX19QeXhf UHlJbnRfQXNfZW51bV9fbXB2X2V2ZW50X2lkKF9fcHl4X3ZfZXZlbnQpKTsgaWYgKHVubGlrZWx5 KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDI2LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fcHl4X3ZfZXZlbnRfaWQgPSBfX3B5eF90XzM7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDI1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDI3CisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50 X2lkIGV2ZW50X2lkID0gZXZlbnQKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04NTAwLDcgKzg1MDAsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9yZXF1ZXN0X2V2ZW50KHN0 cnVjdCBfXworICAgICAgICNlbmRpZgorICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjYKKysgICAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MjgKKyAgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50X2lk IGV2ZW50X2lkID0gZXZlbnQKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAg ICAgZXJyID0gbXB2X3JlcXVlc3RfZXZlbnQoc2VsZi5fY3R4LCBldmVudF9pZCwgZW5hYmxlX2kp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04NTEwLDcgKzg1MTAsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9yZXF1 ZXN0X2V2ZW50KHN0cnVjdCBfXworICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfcmVxdWVzdF9l dmVudChfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfZXZlbnRfaWQsIF9fcHl4X3ZfZW5hYmxl X2kpOworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDI1CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyNworICAq ICAgICAgICAgY2RlZiBpbnQgZXJyCisgICogICAgICAgICBjZGVmIG1wdl9ldmVudF9pZCBldmVu dF9pZCA9IGV2ZW50CisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CitAQCAtODUyOSw3ICs4NTI5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfcmVxdWVzdF9ldmVudChzdHJ1Y3QgX18K KyAgICAgICB9CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDI3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDI5CisgICogICAgICAg ICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZXF1ZXN0X2V2ZW50KHNl bGYuX2N0eCwgZXZlbnRfaWQsIGVuYWJsZV9pKQorICAqICAgICAgICAgcmV0dXJuIGVyciAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODUzNywxMyArODUzNywxMyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9yZXF1ZXN0 X2V2ZW50KHN0cnVjdCBfXworICAqICAgICBAX2Vycm9ycworICAqLworICAgX19QeXhfWERFQ1JF RihfX3B5eF9yKTsKKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3Zf ZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDI3LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJy KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDI5LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgX19weXhfciA9IF9fcHl4X3Rf NDsKKyAgIF9fcHl4X3RfNCA9IDA7CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQxMgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQxNAorICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgcmVxdWVz dF9ldmVudChzZWxmLCBldmVudCwgZW5hYmxlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTg1NjIsNyArODU2Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0X3JlcXVlc3RfZXZlbnQoc3RydWN0IF9fCisgICByZXR1 cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQz MAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzIKKyAgKiAKKyAgKiAgICAg QF9lcnJvcnMKKyAgKiAgICAgZGVmIHNldF9sb2dfbGV2ZWwoc2VsZiwgbG9nbGV2ZWwpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODU5OSw3ICs4NTk5LDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMnNldF9sb2df bGV2ZWwoc3RydWN0IF8KKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfbG9nX2xl dmVsIiwgMCk7CisgICBfX1B5eF9JTkNSRUYoX19weXhfdl9sb2dsZXZlbCk7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMyCisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDM0CisgICogICAgIGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xl dmVsKToKKyAgKiAgICAgICAgICIiIldyYXBzOiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIK KyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTg2MTAsMTkgKzg2MTAsMTkgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMnNldF9sb2dfbGV2ZWwoc3RydWN0IF8KKyAgIGlm ICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworICAgICBpZiAodW5saWtlbHkoIShfX3B5 eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7CisgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3Nl cnRpb25FcnJvcik7CistICAgICAgX19QWVhfRVJSKDAsIDQzMiwgX19weXhfTDFfZXJyb3IpCisr ICAgICAgX19QWVhfRVJSKDAsIDQzNCwgX19weXhfTDFfZXJyb3IpCisgICAgIH0KKyAgIH0KKyAg ICNlbmRpZgorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzMworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzNQorICAqICAgICAgICAgIiIiV3Jh cHM6IG1wdl9yZXF1ZXN0X2xvZ19tZXNzYWdlcyIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYu X2N0eAorICAqICAgICAgICAgbG9nbGV2ZWwgPSBfc3RyZW5jKGxvZ2xldmVsKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIGxvZ2xldmVs X2MgPSBsb2dsZXZlbAorICAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICovCistICBfX1B5eF9H ZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQzMywgX19weXhfTDFfZXJyb3IpCisrICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQzNSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgIF9fcHl4X3RfMyA9IE5VTEw7CisgICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfMikpKSB7CitAQCAtODYzNiwyMyArODYzNiwyMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yc2V0X2xvZ19sZXZlbChzdHJ1Y3Qg XworICAgfQorICAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfbG9nbGV2ZWwpIDogX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfbG9nbGV2ZWwpOworICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNDMzLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQzNSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X2xvZ2xldmVsLCBfX3B5eF90XzEp OworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0MzQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzYKKyAgKiAg ICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKiAgICAgICAgIGxvZ2xldmVsID0gX3N0cmVuYyhs b2dsZXZlbCkKKyAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xl dmVsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGNkZWYgaW50IGVy cgorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5 T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfbG9nbGV2ZWwpOyBpZiAodW5saWtlbHkoKCFfX3B5eF90 XzQpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDM0LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfbG9nbGV2 ZWwpOyBpZiAodW5saWtlbHkoKCFfX3B5eF90XzQpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZ WF9FUlIoMCwgNDM2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4X3ZfbG9nbGV2ZWxfYyA9IF9f cHl4X3RfNDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzYKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzgKKyAgKiAgICAgICAgIGNkZWYg Y29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsCisgICogICAgICAgICBjZGVmIGludCBl cnIKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK K0BAIC04NjY3LDcgKzg2NjcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yc2V0X2xvZ19sZXZlbChzdHJ1Y3QgXworICAgICAgICNl bmRpZgorICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0MzcKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0MzkKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAqICAgICAgICAgd2l0aCBub2dp bDoKKyAgKiAgICAgICAgICAgICBlcnIgPSBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMoc2VsZi5f Y3R4LCBsb2dsZXZlbF9jKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODY3Nyw3 ICs4Njc3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMnNldF9sb2dfbGV2ZWwoc3RydWN0IF8KKyAgICAgICAgIF9fcHl4X3ZfZXJy ID0gbXB2X3JlcXVlc3RfbG9nX21lc3NhZ2VzKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9s b2dsZXZlbF9jKTsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQzNgorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 MzgKKyAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogbG9nbGV2ZWxfYyA9IGxvZ2xldmVsCisg ICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04Njk2LDcgKzg2OTYsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yc2V0X2xvZ19sZXZl bChzdHJ1Y3QgXworICAgICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0MzgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDAK KyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgZXJyID0gbXB2X3JlcXVl c3RfbG9nX21lc3NhZ2VzKHNlbGYuX2N0eCwgbG9nbGV2ZWxfYykKKyAgKiAgICAgICAgIHJldHVy biBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTg3MDQsMTMgKzg3MDQsMTMg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMnNldF9sb2dfbGV2ZWwoc3RydWN0IF8KKyAgKiAgICAgQF9lcnJvcnMKKyAgKi8KKyAgIF9f UHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2lu dChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQz OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChf X3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ0MCwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fcHl4X3Ig PSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MzAKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0MzIKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAgICAg ZGVmIHNldF9sb2dfbGV2ZWwoc2VsZiwgbG9nbGV2ZWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtODczMiw3ICs4NzMyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMnNldF9sb2dfbGV2ZWwoc3RydWN0IF8KKyAg IHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDQxCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0MworICAqIAorICAq ICAgICBAX2Vycm9ycworICAqICAgICBkZWYgbG9hZF9jb25maWcoc2VsZiwgZmlsZW5hbWUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODc2OSw3ICs4NzY5LDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNGxvYWRf Y29uZmlnKHN0cnVjdCBfX3AKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJsb2FkX2Nv bmZpZyIsIDApOworICAgX19QeXhfSU5DUkVGKF9fcHl4X3ZfZmlsZW5hbWUpOworIAorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0MworKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjQ0NQorICAqICAgICBkZWYgbG9hZF9jb25maWcoc2VsZiwgZmlsZW5h bWUpOgorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9sb2FkX2NvbmZpZ19maWxlIiIiCisgICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC04NzgwLDE5ICs4NzgwLDE5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19wCisgICBpZiAodW5s aWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKyAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9z ZWxmLT5fY3R4ICE9IDApKSkgeworICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9u RXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCA0NDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAg IF9fUFlYX0VSUigwLCA0NDUsIF9fcHl4X0wxX2Vycm9yKQorICAgICB9CisgICB9CisgICAjZW5k aWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDQKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDYKKyAgKiAgICAgICAgICIiIldyYXBzOiBt cHZfbG9hZF9jb25maWdfZmlsZSIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAq ICAgICAgICAgZmlsZW5hbWUgPSBfc3RyZW5jKGZpbGVuYW1lKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIF9maWxlbmFtZSA9IGZpbGVu YW1lCisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgNDQ0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDQ2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworICAgX19weXhfdF8zID0gTlVMTDsKKyAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsK K0BAIC04ODA2LDIzICs4ODA2LDIzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19wCisgICB9Cisg ICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5 eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9maWxlbmFtZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfMiwgX19weXhfdl9maWxlbmFtZSk7CisgICBfX1B5eF9YREVDUkVGKF9f cHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9f UFlYX0VSUigwLCA0NDQsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNDQ2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisg ICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfZmlsZW5hbWUsIF9fcHl4X3RfMSk7CisgICBfX3B5 eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0NQor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0NworICAqICAgICAgICAgYXNz ZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgZmlsZW5hbWUgPSBfc3RyZW5jKGZpbGVuYW1lKQor ICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBfZmlsZW5hbWUgPSBmaWxlbmFtZSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAgICAg ICAgIHdpdGggbm9naWw6CisgICovCistICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Bc1N0 cmluZyhfX3B5eF92X2ZpbGVuYW1lKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF80KSAmJiBQeUVy cl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ0NSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X2ZpbGVuYW1lKTsgaWYgKHVu bGlrZWx5KCghX19weXhfdF80KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ0 NywgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF92X19maWxlbmFtZSA9IF9fcHl4X3RfNDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDcKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDkKKyAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciog X2ZpbGVuYW1lID0gZmlsZW5hbWUKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAqICAgICAg ICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTg4MzcsNyAr ODgzNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19wCisgICAgICAgI2VuZGlmCisgICAgICAg Lyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ0OAorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1MAorICAq ICAgICAgICAgY2RlZiBpbnQgZXJyCisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAg ICAgICAgIGVyciA9IG1wdl9sb2FkX2NvbmZpZ19maWxlKHNlbGYuX2N0eCwgX2ZpbGVuYW1lKSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODg0Nyw3ICs4ODQ3LDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNGxvYWRf Y29uZmlnKHN0cnVjdCBfX3AKKyAgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2xvYWRfY29uZmln X2ZpbGUoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X19maWxlbmFtZSk7CisgICAgICAgfQor IAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDcKKysgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQ5CisgICogICAgICAgICBjZGVmIGNv bnN0IGNoYXIqIF9maWxlbmFtZSA9IGZpbGVuYW1lCisgICogICAgICAgICBjZGVmIGludCBlcnIK KyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC04ODY2LDcgKzg4NjYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF80bG9hZF9jb25maWcoc3RydWN0IF9fcAorICAgICAgIH0KKyAg IH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NDkKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTEKKyAgKiAgICAgICAgIHdpdGggbm9naWw6 CisgICogICAgICAgICAgICAgZXJyID0gbXB2X2xvYWRfY29uZmlnX2ZpbGUoc2VsZi5fY3R4LCBf ZmlsZW5hbWUpCisgICogICAgICAgICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC04ODc0LDEzICs4ODc0LDEzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzRsb2FkX2NvbmZpZyhzdHJ1Y3QgX19wCisg ICogICAgIGRlZiBfZm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6CisgICovCisgICBfX1B5eF9YREVD UkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhf dl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0NDksIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9l cnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0NTEsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX3B5eF9yID0gX19weXhf dF8xOworICAgX19weXhfdF8xID0gMDsKKyAgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDQxCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDQzCisgICogCisgICogICAgIEBfZXJyb3JzCisgICogICAgIGRlZiBsb2Fk X2NvbmZpZyhzZWxmLCBmaWxlbmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC04OTAyLDcgKzg5MDIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF80bG9hZF9jb25maWcoc3RydWN0IF9fcAorICAgcmV0dXJuIF9f cHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTEKKysv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUzCisgICogICAgICAgICByZXR1cm4g ZXJyCisgICogCisgICogICAgIGRlZiBfZm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04OTM1LDcgKzg5MzUsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3Io Q1lUSE9OX1VOVQorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9mb3JtYXRfZm9yIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NDUyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDU0CisgICogCisgICogICAgIGRlZiBfZm9ybWF0X2ZvcihzZWxmLCB2YWx1ZSk6CisgICogICAg ICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBiYXNlc3RyaW5nKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTg5NDYsNyArODk0Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0X2ZvcihDWVRIT05fVU5V CisgICBfX3B5eF90XzIgPSAoX19weXhfdF8xICE9IDApOworICAgaWYgKF9fcHl4X3RfMikgewor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUzCisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTUKKyAgKiAgICAgZGVmIF9mb3JtYXRfZm9y KHNlbGYsIHZhbHVlKToKKyAgKiAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJp bmcpOgorICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX1NUUklORyAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtODk1NCwxMyArODk1NCwxMyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3Io Q1lUSE9OX1VOVQorICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0ZMQUcKKyAgKi8K KyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgX19weXhfdF8zID0gX19QeXhfUHlJ bnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfU1RSSU5HKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDUzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19w eXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfU1RS SU5HKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDU1LCBfX3B5eF9M MV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisgICAgIF9fcHl4X3IgPSBf X3B5eF90XzM7CisgICAgIF9fcHl4X3RfMyA9IDA7CisgICAgIGdvdG8gX19weXhfTDA7CisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTIKKysgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1NAorICAqIAorICAqICAgICBkZWYgX2Zvcm1hdF9m b3Ioc2VsZiwgdmFsdWUpOgorICAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0 cmluZyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC04OTY5LDcgKzg5NjksNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVQorICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjQ1NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ1NgorICAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6 CisgICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5HCisgICogICAgICAgICBl bGlmIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtODk3OCwxMiArODk3OCwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVQorICAqLwor ICAgX19weXhfdF8zID0gKChQeU9iamVjdCopJlB5Qm9vbF9UeXBlKTsKKyAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzMpOworLSAgX19weXhfdF8yID0gUHlPYmplY3RfSXNJbnN0YW5jZShfX3B5eF92 X3ZhbHVlLCBfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoX19weXhfdF8yID09ICgoaW50KS0xKSkp IF9fUFlYX0VSUigwLCA0NTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gUHlPYmpl Y3RfSXNJbnN0YW5jZShfX3B5eF92X3ZhbHVlLCBfX3B5eF90XzMpOyBpZiAodW5saWtlbHkoX19w eXhfdF8yID09ICgoaW50KS0xKSkpIF9fUFlYX0VSUigwLCA0NTYsIF9fcHl4X0wxX2Vycm9yKQor ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgICBfX3B5eF90XzEg PSAoX19weXhfdF8yICE9IDApOworICAgaWYgKF9fcHl4X3RfMSkgeworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDU1CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0NTcKKyAgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9TVFJJ TkcKKyAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYm9vbCk6CisgICogICAgICAg ICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxBRyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtODk5MSwxMyArODk5MSwxMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVQorICAqICAg ICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0lOVDY0CisgICovCisgICAgIF9fUHl4X1hERUNS RUYoX19weXhfcik7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2Zvcm1hdChNUFZfRk9STUFUX0ZMQUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigwLCA0NTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9GTEFHKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDU3LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMyk7CisgICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7CisgICAgIF9fcHl4 X3RfMyA9IDA7CisgICAgIGdvdG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0NTQKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjQ1NgorICAqICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6Cisg ICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfU1RSSU5HCisgICogICAgICAgICBlbGlm IGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtOTAwNiw3ICs5MDA2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfNl9mb3JtYXRfZm9yKENZVEhPTl9VTlUKKyAgKi8KKyAgIH0K KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTYKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTgKKyAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5j ZSh2YWx1ZSwgYm9vbCk6CisgICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRkxBRwor ICAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtOTAxNyw3ICs5MDE3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfNl9mb3JtYXRfZm9yKENZVEhPTl9V TlUKKyAgIF9fcHl4X3RfMiA9IChfX3B5eF90XzEgIT0gMCk7CisgICBpZiAoX19weXhfdF8yKSB7 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTcKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OQorICAqICAgICAgICAgICAgIHJldHVy biBNUFZfRk9STUFUX0ZMQUcKKyAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50 KToKKyAgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NCAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtOTAyNSwxMyArOTAyNSwxMyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lU SE9OX1VOVQorICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQorICAqLwor ICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9JTlQ2NCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ1NywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4 X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX0lOVDY0 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDU5LCBfX3B5eF9MMV9l cnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisgICAgIF9fcHl4X3IgPSBfX3B5 eF90XzM7CisgICAgIF9fcHl4X3RfMyA9IDA7CisgICAgIGdvdG8gX19weXhfTDA7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTYKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OAorICAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZh bHVlLCBib29sKToKKyAgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9GTEFHCisgICog ICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC05MDQwLDcgKzkwNDAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVQor ICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ1OAor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2MAorICAqICAgICAgICAgZWxp ZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9S TUFUX0lOVDY0CisgICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTkwNTEsNyArOTA1MSw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0 X2ZvcihDWVRIT05fVU5VCisgICBfX3B5eF90XzEgPSAoX19weXhfdF8yICE9IDApOworICAgaWYg KF9fcHl4X3RfMSkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDU5CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjEKKyAgKiAgICAg ICAgICAgICByZXR1cm4gTVBWX0ZPUk1BVF9JTlQ2NAorICAqICAgICAgICAgZWxpZiBpc2luc3Rh bmNlKHZhbHVlLCBmbG9hdCk6CisgICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfRE9V QkxFICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05MDU5LDEzICs5MDU5LDEzIEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzZfZm9ybWF0X2ZvcihDWVRIT05fVU5VCisgICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JN QVRfTk9ERV9BUlJBWQorICAqLworICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICBf X3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9E T1VCTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NTksIF9fcHl4 X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9m b3JtYXQoTVBWX0ZPUk1BVF9ET1VCTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigwLCA0NjEsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8z KTsKKyAgICAgX19weXhfciA9IF9fcHl4X3RfMzsKKyAgICAgX19weXhfdF8zID0gMDsKKyAgICAg Z290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjQ1OAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYwCisgICogICAg ICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6CisgICogICAgICAgICAgICAgcmV0dXJu IE1QVl9GT1JNQVRfSU5UNjQKKyAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxv YXQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTA3NCw3ICs5MDc0LDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf Nl9mb3JtYXRfZm9yKENZVEhPTl9VTlUKKyAgKi8KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo0NjAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo0NjIKKyAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgorICAq ICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX0RPVUJMRQorICAqICAgICAgICAgZWxpZiBp c2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTkwOTUsNyArOTA5NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0X2ZvcihDWVRIT05fVU5VCisgICBf X3B5eF90XzIgPSAoX19weXhfdF8xICE9IDApOworICAgaWYgKF9fcHl4X3RfMikgeworIAorLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYxCisrICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjMKKyAgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZP Uk1BVF9ET1VCTEUKKyAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBs aXN0KSk6CisgICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9BUlJBWSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTEwMywxMyArOTEwMywxMyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1h dF9mb3IoQ1lUSE9OX1VOVQorICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVf TUFQCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICAgIF9fcHl4X3RfMyA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05PREVfQVJSQVkp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NjEsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQo TVBWX0ZPUk1BVF9OT0RFX0FSUkFZKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgNDYzLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7 CisgICAgIF9fcHl4X3IgPSBfX3B5eF90XzM7CisgICAgIF9fcHl4X3RfMyA9IDA7CisgICAgIGdv dG8gX19weXhfTDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 NjAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2MgorICAqICAgICAg ICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisgICogICAgICAgICAgICAgcmV0dXJu IE1QVl9GT1JNQVRfRE9VQkxFCisgICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0 dXBsZSwgbGlzdCkpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTExOCw3ICs5 MTE4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfNl9mb3JtYXRfZm9yKENZVEhPTl9VTlUKKyAgKi8KKyAgIH0KKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0NjQKKyAgKiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1 cGxlLCBsaXN0KSk6CisgICogICAgICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ERV9BUlJB WQorICAqICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTkxMjksNyArOTEyOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0X2ZvcihDWVRI T05fVU5VCisgICBfX3B5eF90XzEgPSAoX19weXhfdF8yICE9IDApOworICAgaWYgKF9fcHl4X3Rf MSkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDYzCisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjUKKyAgKiAgICAgICAgICAgICBy ZXR1cm4gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZCisgICogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo dmFsdWUsIGRpY3QpOgorICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfTUFQ ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05MTM3LDEzICs5MTM3LDEzIEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZf Zm9ybWF0X2ZvcihDWVRIT05fVU5VCisgICogCisgICovCisgICAgIF9fUHl4X1hERUNSRUYoX19w eXhfcik7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1h dChNUFZfRk9STUFUX05PREVfTUFQKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgNDYzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfTk9ERV9NQVApOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NjUsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgICAgX19weXhfciA9IF9fcHl4X3RfMzsKKyAgICAgX19w eXhfdF8zID0gMDsKKyAgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjQ2MgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NDY0CisgICogICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwgbGlz dCkpOgorICAqICAgICAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PREVfQVJSQVkKKyAgKiAg ICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC05MTUyLDcgKzkxNTIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9mb3IoQ1lUSE9OX1VOVQor ICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2NAor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ2NgorICAqICAgICAgICAgZWxp ZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKyAgKiAgICAgICAgICAgICByZXR1cm4gTVBWX0ZP Uk1BVF9OT0RFX01BUAorICAqICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ORSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTE2MCwxMyArOTE2MCwxMyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF82X2Zvcm1hdF9m b3IoQ1lUSE9OX1VOVQorICAqICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbGlz dChzZWxmLCB2YWx1ZXMpOgorICAqLworICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9f cHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05P TkUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0NjQsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0 KE1QVl9GT1JNQVRfTk9ORSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDQ2NiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgIF9f cHl4X3IgPSBfX3B5eF90XzM7CisgICBfX3B5eF90XzMgPSAwOworICAgZ290byBfX3B5eF9MMDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTEKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NTMKKyAgKiAgICAgICAgIHJldHVybiBlcnIKKyAg KiAKKyAgKiAgICAgZGVmIF9mb3JtYXRfZm9yKHNlbGYsIHZhbHVlKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTkxODUsNyArOTE4NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzZfZm9ybWF0X2ZvcihDWVRIT05f VU5VCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ2NgorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NjgKKyAg KiAgICAgICAgIHJldHVybiBNUFZfRk9STUFUX05PTkUKKyAgKiAKKyAgKiAgICAgY2RlZiBtcHZf bm9kZV9saXN0KiBfcHJlcF9ub2RlX2xpc3Qoc2VsZiwgdmFsdWVzKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTkyMTYsNyArOTIxNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25v ZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9k ZV9sCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29u dGV4dCgiX3ByZXBfbm9kZV9saXN0IiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDY5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDcx CisgICogICAgICAgICBjZGVmIG1wdl9ub2RlIG5vZGUKKyAgKiAgICAgICAgIGNkZWYgbXB2X2Zv cm1hdCBmb3JtYXQKKyAgKiAgICAgICAgIGNkZWYgbXB2X25vZGVfbGlzdCogbm9kZV9saXN0ID0g PG1wdl9ub2RlX2xpc3QqPm1hbGxvYyhzaXplb2YobXB2X25vZGVfbGlzdCkpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05MjI1LDE3ICs5MjI1LDE3IEBAIHN0YXRpYyBzdHJ1Y3Qg bXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3By ZXBfbm9kZV9sCisgICovCisgICBfX3B5eF92X25vZGVfbGlzdCA9ICgoc3RydWN0IG1wdl9ub2Rl X2xpc3QgKiltYWxsb2MoKHNpemVvZihzdHJ1Y3QgbXB2X25vZGVfbGlzdCkpKSk7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDcwCisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NDcyCisgICogICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0 CisgICogICAgICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIG5vZGVfbGlzdCA9IDxtcHZfbm9kZV9s aXN0Kj5tYWxsb2Moc2l6ZW9mKG1wdl9ub2RlX2xpc3QpKQorICAqICAgICAgICAgbm9kZV9saXN0 Lm51bSA9IGxlbih2YWx1ZXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAg ICAgIG5vZGVfbGlzdC52YWx1ZXMgPSBOVUxMCisgICogICAgICAgICBub2RlX2xpc3Qua2V5cyA9 IE5VTEwKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X3ZhbHVl cyk7IGlmICh1bmxpa2VseShfX3B5eF90XzEgPT0gKChQeV9zc2l6ZV90KS0xKSkpIF9fUFlYX0VS UigwLCA0NzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gUHlPYmplY3RfTGVuZ3Ro KF9fcHl4X3ZfdmFsdWVzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMSA9PSAoKFB5X3NzaXplX3Qp LTEpKSkgX19QWVhfRVJSKDAsIDQ3MiwgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF92X25vZGVf bGlzdC0+bnVtID0gX19weXhfdF8xOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ3MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3MworICAq ICAgICAgICAgY2RlZiBtcHZfbm9kZV9saXN0KiBub2RlX2xpc3QgPSA8bXB2X25vZGVfbGlzdCo+ bWFsbG9jKHNpemVvZihtcHZfbm9kZV9saXN0KSkKKyAgKiAgICAgICAgIG5vZGVfbGlzdC5udW0g PSBsZW4odmFsdWVzKQorICAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTkyNDQsNyArOTI0NCw3IEBAIHN0YXRpYyBzdHJ1 Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf X3ByZXBfbm9kZV9sCisgICovCisgICBfX3B5eF92X25vZGVfbGlzdC0+dmFsdWVzID0gTlVMTDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzIKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzQKKyAgKiAgICAgICAgIG5vZGVfbGlzdC5udW0g PSBsZW4odmFsdWVzKQorICAqICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKKyAgKiAg ICAgICAgIG5vZGVfbGlzdC5rZXlzID0gTlVMTCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtOTI1Myw3ICs5MjUzLDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5 eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX2wKKyAgKi8KKyAg IF9fcHl4X3Zfbm9kZV9saXN0LT5rZXlzID0gTlVMTDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0NzMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo0NzUKKyAgKiAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSBOVUxMCisgICogICAgICAgICBu b2RlX2xpc3Qua2V5cyA9IE5VTEwKKyAgKiAgICAgICAgIGlmIG5vZGVfbGlzdC5udW06ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05MjYzLDcgKzkyNjMsNyBAQCBzdGF0aWMgc3Ry dWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 X19wcmVwX25vZGVfbAorICAgX19weXhfdF8yID0gKF9fcHl4X3Zfbm9kZV9saXN0LT5udW0gIT0g MCk7CisgICBpZiAoX19weXhfdF8yKSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0NzQKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3 NgorICAqICAgICAgICAgbm9kZV9saXN0LmtleXMgPSBOVUxMCisgICogICAgICAgICBpZiBub2Rl X2xpc3QubnVtOgorICAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25vZGUq Pm1hbGxvYyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTkyNzIsNyArOTI3Miw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25v ZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9k ZV9sCisgICovCisgICAgIF9fcHl4X3Zfbm9kZV9saXN0LT52YWx1ZXMgPSAoKHN0cnVjdCBtcHZf bm9kZSAqKW1hbGxvYygoX19weXhfdl9ub2RlX2xpc3QtPm51bSAqIChzaXplb2Yoc3RydWN0IG1w dl9ub2RlKSkpKSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 NzMKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3NQorICAqICAgICAg ICAgbm9kZV9saXN0LnZhbHVlcyA9IE5VTEwKKyAgKiAgICAgICAgIG5vZGVfbGlzdC5rZXlzID0g TlVMTAorICAqICAgICAgICAgaWYgbm9kZV9saXN0Lm51bTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTkyODEsNyArOTI4MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlz dCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9sCisg ICovCisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc1Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc3CisgICogICAgICAgICBpZiBu b2RlX2xpc3QubnVtOgorICAqICAgICAgICAgICAgIG5vZGVfbGlzdC52YWx1ZXMgPSA8bXB2X25v ZGUqPm1hbGxvYyhub2RlX2xpc3QubnVtICogc2l6ZW9mKG1wdl9ub2RlKSkKKyAgKiAgICAgICAg IGZvciBpLCB2YWx1ZSBpbiBlbnVtZXJhdGUodmFsdWVzKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTkyOTQsMjYgKzkyOTQsMjYgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9s aXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX2wK KyAgICAgX19weXhfdF80ID0gX19weXhfdl92YWx1ZXM7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzQp OyBfX3B5eF90XzEgPSAwOworICAgICBfX3B5eF90XzUgPSBOVUxMOworICAgfSBlbHNlIHsKKy0g ICAgX19weXhfdF8xID0gLTE7IF9fcHl4X3RfNCA9IFB5T2JqZWN0X0dldEl0ZXIoX19weXhfdl92 YWx1ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4 X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzEgPSAtMTsgX19weXhfdF80ID0gUHlPYmplY3RfR2V0 SXRlcihfX3B5eF92X3ZhbHVlcyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDQ3NywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwor LSAgICBfX3B5eF90XzUgPSBQeV9UWVBFKF9fcHl4X3RfNCktPnRwX2l0ZXJuZXh0OyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX3B5eF90XzUgPSBQeV9UWVBFKF9fcHl4X3RfNCktPnRwX2l0ZXJuZXh0OyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA0NzcsIF9fcHl4X0wxX2Vycm9yKQorICAgfQor ICAgZm9yICg7OykgeworICAgICBpZiAobGlrZWx5KCFfX3B5eF90XzUpKSB7CisgICAgICAgaWYg KGxpa2VseShQeUxpc3RfQ2hlY2tFeGFjdChfX3B5eF90XzQpKSkgeworICAgICAgICAgaWYgKF9f cHl4X3RfMSA+PSBQeUxpc3RfR0VUX1NJWkUoX19weXhfdF80KSkgYnJlYWs7CisgICAgICAgICAj aWYgQ1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JF RlMKKy0gICAgICAgIF9fcHl4X3RfNiA9IFB5TGlzdF9HRVRfSVRFTShfX3B5eF90XzQsIF9fcHl4 X3RfMSk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5 KDAgPCAwKSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgICBfX3B5 eF90XzYgPSBQeUxpc3RfR0VUX0lURU0oX19weXhfdF80LCBfX3B5eF90XzEpOyBfX1B5eF9JTkNS RUYoX19weXhfdF82KTsgX19weXhfdF8xKys7IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VS UigwLCA0NzcsIF9fcHl4X0wxX2Vycm9yKQorICAgICAgICAgI2Vsc2UKKy0gICAgICAgIF9fcHl4 X3RfNiA9IFB5U2VxdWVuY2VfSVRFTShfX3B5eF90XzQsIF9fcHl4X3RfMSk7IF9fcHl4X3RfMSsr OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICAgICAgX19weXhfdF82ID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfNCwgX19w eXhfdF8xKTsgX19weXhfdF8xKys7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDQ3NywgX19weXhfTDFfZXJyb3IpCisgICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82 KTsKKyAgICAgICAgICNlbmRpZgorICAgICAgIH0gZWxzZSB7CisgICAgICAgICBpZiAoX19weXhf dF8xID49IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfdF80KSkgYnJlYWs7CisgICAgICAgICAjaWYg Q1lUSE9OX0FTU1VNRV9TQUZFX01BQ1JPUyAmJiAhQ1lUSE9OX0FWT0lEX0JPUlJPV0VEX1JFRlMK Ky0gICAgICAgIF9fcHl4X3RfNiA9IFB5VHVwbGVfR0VUX0lURU0oX19weXhfdF80LCBfX3B5eF90 XzEpOyBfX1B5eF9JTkNSRUYoX19weXhfdF82KTsgX19weXhfdF8xKys7IGlmICh1bmxpa2VseSgw IDwgMCkpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgICAgX19weXhf dF82ID0gUHlUdXBsZV9HRVRfSVRFTShfX3B5eF90XzQsIF9fcHl4X3RfMSk7IF9fUHl4X0lOQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJS KDAsIDQ3NywgX19weXhfTDFfZXJyb3IpCisgICAgICAgICAjZWxzZQorLSAgICAgICAgX19weXhf dF82ID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfNCwgX19weXhfdF8xKTsgX19weXhfdF8xKys7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ3NSwgX19weXhfTDFfZXJy b3IpCisrICAgICAgICBfX3B5eF90XzYgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF80LCBfX3B5 eF90XzEpOyBfX3B5eF90XzErKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgNDc3LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworICAgICAgICAgI2VuZGlmCisgICAgICAgfQorQEAgLTkzMjMsNyArOTMyMyw3IEBAIHN0YXRp YyBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfX3ByZXBfbm9kZV9sCisgICAgICAgICBQeU9iamVjdCogZXhjX3R5cGUgPSBQeUVycl9P Y2N1cnJlZCgpOworICAgICAgICAgaWYgKGV4Y190eXBlKSB7CisgICAgICAgICAgIGlmIChsaWtl bHkoX19QeXhfUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19TdG9w SXRlcmF0aW9uKSkpIFB5RXJyX0NsZWFyKCk7CistICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAs IDQ3NSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAsIDQ3Nywg X19weXhfTDFfZXJyb3IpCisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgICB9CitA QCAtOTMzMywyMCArOTMzMywyMCBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25vZGVfbAorICAgICBfX3B5 eF90XzYgPSAwOworICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8zKTsKKyAgICAgX19QeXhfWERF Q1JFRl9TRVQoX19weXhfdl9pLCBfX3B5eF90XzMpOworLSAgICBfX3B5eF90XzYgPSBfX1B5eF9Q eUludF9BZGRPYmpDKF9fcHl4X3RfMywgX19weXhfaW50XzEsIDEsIDAsIDApOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9BZGRPYmpDKF9fcHl4X3RfMywgX19weXhfaW50XzEsIDEs IDAsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzcsIF9fcHl4 X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMyk7CisgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNjsKKyAgICAgX19weXhf dF82ID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3Ngor KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc4CisgICogICAgICAgICAg ICAgbm9kZV9saXN0LnZhbHVlcyA9IDxtcHZfbm9kZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBz aXplb2YobXB2X25vZGUpKQorICAqICAgICAgICAgZm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2 YWx1ZXMpOgorICAqICAgICAgICAgICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBub2RlID0gc2Vs Zi5fcHJlcF9uYXRpdmVfdmFsdWUodmFsdWUsIGZvcm1hdCkKKyAgKiAgICAgICAgICAgICBub2Rl X2xpc3QudmFsdWVzW2ldID0gbm9kZQorICAqLworLSAgICBfX3B5eF90XzcgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9y bWF0X2Zvcik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ3NiwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIo KChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19mb3JtYXRfZm9yKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDc4LCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisgICAgIF9fcHl4X3RfOCA9IE5VTEw7CisgICAg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4 X3RfNykpKSB7CitAQCAtOTM2MCwzNiArOTM2MCwzNiBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2Rl X2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25vZGVf bAorICAgICB9CisgICAgIF9fcHl4X3RfNiA9IChfX3B5eF90XzgpID8gX19QeXhfUHlPYmplY3Rf Q2FsbDJBcmdzKF9fcHl4X3RfNywgX19weXhfdF84LCBfX3B5eF92X3ZhbHVlKSA6IF9fUHl4X1B5 T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF83LCBfX3B5eF92X3ZhbHVlKTsKKyAgICAgX19QeXhf WERFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA0NzgsIF9fcHl4X0wxX2Vycm9yKQorICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7 IF9fcHl4X3RfNyA9IDA7CistICAgIF9fcHl4X3RfOSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4 X1B5SW50X0FzX2VudW1fX21wdl9mb3JtYXQoX19weXhfdF82KSk7IGlmICh1bmxpa2VseShQeUVy cl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ3NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9f cHl4X3RfOSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9mb3Jt YXQoX19weXhfdF82KSk7IGlmICh1bmxpa2VseShQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJS KDAsIDQ3OCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOworICAgICBfX3B5eF92X2Zvcm1hdCA9IF9fcHl4X3RfOTsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3NworKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NDc5CisgICogICAgICAgICBmb3IgaSwgdmFsdWUgaW4gZW51 bWVyYXRlKHZhbHVlcyk6CisgICogICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zv cih2YWx1ZSkKKyAgKiAgICAgICAgICAgICBub2RlID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUo dmFsdWUsIGZvcm1hdCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAg ICAgIG5vZGVfbGlzdC52YWx1ZXNbaV0gPSBub2RlCisgICogICAgICAgICByZXR1cm4gbm9kZV9s aXN0CisgICovCistICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zv cm1hdChfX3B5eF92X2Zvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDQ3NywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Zvcm1hdChfX3B5eF92X2Zvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhf dF82KSkgX19QWVhfRVJSKDAsIDQ3OSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOworICAgICBfX3B5eF92X25vZGUgPSAoKHN0cnVjdCBfX3B5eF92dGFic3Ry dWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92 dGFiKS0+X3ByZXBfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSwgX19w eXhfdF82KTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzgKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4MAorICAqICAgICAgICAgICAgIGZvcm1hdCA9 IHNlbGYuX2Zvcm1hdF9mb3IodmFsdWUpCisgICogICAgICAgICAgICAgbm9kZSA9IHNlbGYuX3By ZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCisgICogICAgICAgICAgICAgbm9kZV9saXN0 LnZhbHVlc1tpXSA9IG5vZGUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAg ICAgcmV0dXJuIG5vZGVfbGlzdAorICAqIAorICAqLworLSAgICBfX3B5eF90XzEwID0gX19QeXhf UHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9pKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzEwID09 IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ3OCwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVf dChfX3B5eF92X2kpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMTAgPT0gKFB5X3NzaXplX3QpLTEp ICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDgwLCBfX3B5eF9MMV9lcnJvcikK KyAgICAgKF9fcHl4X3Zfbm9kZV9saXN0LT52YWx1ZXNbX19weXhfdF8xMF0pID0gX19weXhfdl9u b2RlOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDc1CisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NzcKKyAgKiAgICAgICAgIGlmIG5v ZGVfbGlzdC5udW06CisgICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlcyA9IDxtcHZfbm9k ZSo+bWFsbG9jKG5vZGVfbGlzdC5udW0gKiBzaXplb2YobXB2X25vZGUpKQorICAqICAgICAgICAg Zm9yIGksIHZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtOTQwMCw3ICs5NDAwLDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX2wKKyAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDc5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDgx CisgICogICAgICAgICAgICAgbm9kZSA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBm b3JtYXQpCisgICogICAgICAgICAgICAgbm9kZV9saXN0LnZhbHVlc1tpXSA9IG5vZGUKKyAgKiAg ICAgICAgIHJldHVybiBub2RlX2xpc3QgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTk0MTAsNyArOTQxMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9sCisgICBfX3B5eF9yID0g X19weXhfdl9ub2RlX2xpc3Q7CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjQ2NgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ2OAorICAqICAgICAgICAgcmV0dXJuIE1QVl9GT1JNQVRfTk9ORQorICAqIAorICAq ICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbGlzdChzZWxmLCB2YWx1ZXMpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTQzNCw3ICs5NDM0LDcgQEAgc3RhdGlj IHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF9fcHJlcF9ub2RlX2wKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDgxCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjQ4MworICAqICAgICAgICAgcmV0dXJuIG5vZGVfbGlzdAorICAqIAorICAqICAgICBj ZGVmIG1wdl9ub2RlX2xpc3QqIF9wcmVwX25vZGVfbWFwKHNlbGYsIG1hcCk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05NDY2LDE0ICs5NDY2LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qg bXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3By ZXBfbm9kZV9tCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNl dHVwQ29udGV4dCgiX3ByZXBfbm9kZV9tYXAiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0ODQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo0ODYKKyAgKiAgICAgICAgIGNkZWYgY2hhciogY2tleQorICAqICAgICAgICAgY2RlZiBtcHZf bm9kZV9saXN0KiBsaXN0CisgICogICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3Qo bWFwLnZhbHVlcygpKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBr ZXlzID0gbWFwLmtleXMoKQorICAqICAgICAgICAgaWYgbm90IGxlbihrZXlzKToKKyAgKi8KKy0g IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9tYXAsIF9fcHl4 X25fc192YWx1ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0ODQs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF92X21hcCwgX19weXhfbl9zX3ZhbHVlcyk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDQ4NiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8yKTsKKyAgIF9fcHl4X3RfMyA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRI T0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAgLTk0ODcsMjAg Kzk0ODcsMjAgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX20KKyAgIH0KKyAgIF9fcHl4X3RfMSA9 IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4 X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKyAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDQ4NCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0ODYsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8y ID0gMDsKKyAgIF9fcHl4X3ZfbGlzdCA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fcHJl cF9ub2RlX2xpc3QoX19weXhfdl9zZWxmLCBfX3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NDg1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg3Cisg ICogICAgICAgICBjZGVmIG1wdl9ub2RlX2xpc3QqIGxpc3QKKyAgKiAgICAgICAgIGxpc3QgPSBz ZWxmLl9wcmVwX25vZGVfbGlzdChtYXAudmFsdWVzKCkpCisgICogICAgICAgICBrZXlzID0gbWFw LmtleXMoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBpZiBub3Qg bGVuKGtleXMpOgorICAqICAgICAgICAgICAgIHJldHVybiBsaXN0CisgICovCistICBfX3B5eF90 XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfbWFwLCBfX3B5eF9uX3Nfa2V5 cyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQ4NSwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zf bWFwLCBfX3B5eF9uX3Nfa2V5cyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDQ4NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAg IF9fcHl4X3RfMyA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2Vs eShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAgLTk1MTQsMjQgKzk1MTQsMjQgQEAg c3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF9fcHJlcF9ub2RlX20KKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMp ID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5 eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF8yKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhf dF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDQ4NSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA0ODcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgIF9f cHl4X3Zfa2V5cyA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NDg4CisgICogICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3Qo bWFwLnZhbHVlcygpKQorICAqICAgICAgICAga2V5cyA9IG1hcC5rZXlzKCkKKyAgKiAgICAgICAg IGlmIG5vdCBsZW4oa2V5cyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAg ICAgICAgICByZXR1cm4gbGlzdAorICAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxs b2MobGlzdC5udW0pCisgICovCistICBfX3B5eF90XzQgPSBQeU9iamVjdF9MZW5ndGgoX19weXhf dl9rZXlzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19Q WVhfRVJSKDAsIDQ4NiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBQeU9iamVjdF9M ZW5ndGgoX19weXhfdl9rZXlzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA9PSAoKFB5X3NzaXpl X3QpLTEpKSkgX19QWVhfRVJSKDAsIDQ4OCwgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF90XzUg PSAoKCEoX19weXhfdF80ICE9IDApKSAhPSAwKTsKKyAgIGlmIChfX3B5eF90XzUpIHsKKyAKKy0g ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ4NworKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg5CisgICogICAgICAgICBrZXlzID0gbWFwLmtleXMo KQorICAqICAgICAgICAgaWYgbm90IGxlbihrZXlzKToKKyAgKiAgICAgICAgICAgICByZXR1cm4g bGlzdCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTU0MSw3ICs5NTQxLDcgQEAg c3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF9fcHJlcF9ub2RlX20KKyAgICAgX19weXhfciA9IF9fcHl4X3ZfbGlzdDsKKyAg ICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjQ4NgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDg4CisgICog ICAgICAgICBsaXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QobWFwLnZhbHVlcygpKQorICAqICAg ICAgICAga2V5cyA9IG1hcC5rZXlzKCkKKyAgKiAgICAgICAgIGlmIG5vdCBsZW4oa2V5cyk6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05NTUwLDcgKzk1NTAsNyBAQCBzdGF0aWMg c3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0X19wcmVwX25vZGVfbQorICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ4OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5 MAorICAqICAgICAgICAgaWYgbm90IGxlbihrZXlzKToKKyAgKiAgICAgICAgICAgICByZXR1cm4g bGlzdAorICAqICAgICAgICAgbGlzdC5rZXlzID0gPGNoYXIqKj5tYWxsb2MobGlzdC5udW0pICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05NTU5LDcgKzk1NTksNyBAQCBzdGF0aWMg c3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0X19wcmVwX25vZGVfbQorICAqLworICAgX19weXhfdl9saXN0LT5rZXlzID0gKChjaGFyICoq KW1hbGxvYyhfX3B5eF92X2xpc3QtPm51bSkpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ4OQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5 MQorICAqICAgICAgICAgICAgIHJldHVybiBsaXN0CisgICogICAgICAgICBsaXN0LmtleXMgPSA8 Y2hhcioqPm1hbGxvYyhsaXN0Lm51bSkKKyAgKiAgICAgICAgIGZvciBpLCBrZXkgaW4gZW51bWVy YXRlKGtleXMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTU3MiwyNiArOTU3 MiwyNiBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25vZGVfbQorICAgICBfX3B5eF90XzIgPSBfX3B5eF92 X2tleXM7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzQgPSAwOworICAgICBfX3B5 eF90XzYgPSBOVUxMOworICAgfSBlbHNlIHsKKy0gICAgX19weXhfdF80ID0gLTE7IF9fcHl4X3Rf MiA9IFB5T2JqZWN0X0dldEl0ZXIoX19weXhfdl9rZXlzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF80ID0g LTE7IF9fcHl4X3RfMiA9IFB5T2JqZWN0X0dldEl0ZXIoX19weXhfdl9rZXlzKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDkxLCBfX3B5eF9MMV9lcnJvcikKKyAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4X3RfNiA9IFB5X1RZUEUoX19weXhf dF8yKS0+dHBfaXRlcm5leHQ7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDQ4OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNiA9IFB5X1RZUEUoX19weXhfdF8y KS0+dHBfaXRlcm5leHQ7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDQ5 MSwgX19weXhfTDFfZXJyb3IpCisgICB9CisgICBmb3IgKDs7KSB7CisgICAgIGlmIChsaWtlbHko IV9fcHl4X3RfNikpIHsKKyAgICAgICBpZiAobGlrZWx5KFB5TGlzdF9DaGVja0V4YWN0KF9fcHl4 X3RfMikpKSB7CisgICAgICAgICBpZiAoX19weXhfdF80ID49IFB5TGlzdF9HRVRfU0laRShfX3B5 eF90XzIpKSBicmVhazsKKyAgICAgICAgICNpZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYm ICFDWVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworLSAgICAgICAgX19weXhfdF8zID0gUHlMaXN0 X0dFVF9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF80KTsgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7 IF9fcHl4X3RfNCsrOyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgICAgIF9fcHl4X3RfMyA9IFB5TGlzdF9HRVRfSVRFTShfX3B5eF90 XzIsIF9fcHl4X3RfNCk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzQrKzsgaWYg KHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAsIDQ5MSwgX19weXhfTDFfZXJyb3IpCisgICAg ICAgICAjZWxzZQorLSAgICAgICAgX19weXhfdF8zID0gUHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3Rf MiwgX19weXhfdF80KTsgX19weXhfdF80Kys7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19Q WVhfRVJSKDAsIDQ4OSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgICBfX3B5eF90XzMgPSBQeVNl cXVlbmNlX0lURU0oX19weXhfdF8yLCBfX3B5eF90XzQpOyBfX3B5eF90XzQrKzsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNDkxLCBfX3B5eF9MMV9lcnJvcikKKyAgICAg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgICAgICAgI2VuZGlmCisgICAgICAgfSBl bHNlIHsKKyAgICAgICAgIGlmIChfX3B5eF90XzQgPj0gUHlUdXBsZV9HRVRfU0laRShfX3B5eF90 XzIpKSBicmVhazsKKyAgICAgICAgICNpZiBDWVRIT05fQVNTVU1FX1NBRkVfTUFDUk9TICYmICFD WVRIT05fQVZPSURfQk9SUk9XRURfUkVGUworLSAgICAgICAgX19weXhfdF8zID0gUHlUdXBsZV9H RVRfSVRFTShfX3B5eF90XzIsIF9fcHl4X3RfNCk7IF9fUHl4X0lOQ1JFRihfX3B5eF90XzMpOyBf X3B5eF90XzQrKzsgaWYgKHVubGlrZWx5KDAgPCAwKSkgX19QWVhfRVJSKDAsIDQ4OSwgX19weXhf TDFfZXJyb3IpCisrICAgICAgICBfX3B5eF90XzMgPSBQeVR1cGxlX0dFVF9JVEVNKF9fcHl4X3Rf MiwgX19weXhfdF80KTsgX19QeXhfSU5DUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfNCsrOyBpZiAo dW5saWtlbHkoMCA8IDApKSBfX1BZWF9FUlIoMCwgNDkxLCBfX3B5eF9MMV9lcnJvcikKKyAgICAg ICAgICNlbHNlCistICAgICAgICBfX3B5eF90XzMgPSBQeVNlcXVlbmNlX0lURU0oX19weXhfdF8y LCBfX3B5eF90XzQpOyBfX3B5eF90XzQrKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZ WF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICAgIF9fcHl4X3RfMyA9IFB5U2Vx dWVuY2VfSVRFTShfX3B5eF90XzIsIF9fcHl4X3RfNCk7IF9fcHl4X3RfNCsrOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0OTEsIF9fcHl4X0wxX2Vycm9yKQorICAgICAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisgICAgICAgICAjZW5kaWYKKyAgICAgICB9CitA QCAtOTYwMSw3ICs5NjAxLDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX20KKyAgICAgICAgIFB5 T2JqZWN0KiBleGNfdHlwZSA9IFB5RXJyX09jY3VycmVkKCk7CisgICAgICAgICBpZiAoZXhjX3R5 cGUpIHsKKyAgICAgICAgICAgaWYgKGxpa2VseShfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1h dGNoZXMoZXhjX3R5cGUsIFB5RXhjX1N0b3BJdGVyYXRpb24pKSkgUHlFcnJfQ2xlYXIoKTsKKy0g ICAgICAgICAgZWxzZSBfX1BZWF9FUlIoMCwgNDg5LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICAg ICAgZWxzZSBfX1BZWF9FUlIoMCwgNDkxLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgICAgIH0KKyAg ICAgICAgIGJyZWFrOworICAgICAgIH0KK0BAIC05NjExLDIwICs5NjExLDIwIEBAIHN0YXRpYyBz dHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfX3ByZXBfbm9kZV9tCisgICAgIF9fcHl4X3RfMyA9IDA7CisgICAgIF9fUHl4X0lOQ1JFRihf X3B5eF90XzEpOworICAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X2ksIF9fcHl4X3RfMSk7 CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FkZE9iakMoX19weXhfdF8xLCBfX3B5eF9p bnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ4 OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FkZE9iakMo X19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8z KSkgX19QWVhfRVJSKDAsIDQ5MSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsKKyAgICAgX19weXhfdF8x ID0gX19weXhfdF8zOworICAgICBfX3B5eF90XzMgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NDkwCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0OTIKKyAgKiAgICAgICAgIGxpc3Qua2V5cyA9IDxjaGFyKio+bWFsbG9jKGxpc3Qu bnVtKQorICAqICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6CisgICogICAg ICAgICAgICAga2V5ID0gX3N0cmVuYyhrZXkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KyAgKiAgICAgICAgICAgICBja2V5ID0ga2V5CisgICogICAgICAgICAgICAgbGlzdC5rZXlzW2ld ID0gPGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCisgICovCistICAgIF9fUHl4X0dldE1vZHVs ZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDkwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzcsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA0OTIsIF9fcHl4X0wxX2Vycm9yKQorICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAgICAgX19weXhfdF84ID0gTlVMTDsKKyAgICAg aWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5 eF90XzcpKSkgeworQEAgLTk2MzgsNDQgKzk2MzgsNDQgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9k ZV9saXN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2Rl X20KKyAgICAgfQorICAgICBfX3B5eF90XzMgPSAoX19weXhfdF84KSA/IF9fUHl4X1B5T2JqZWN0 X0NhbGwyQXJncyhfX3B5eF90XzcsIF9fcHl4X3RfOCwgX19weXhfdl9rZXkpIDogX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzcsIF9fcHl4X3Zfa2V5KTsKKyAgICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMykpIF9fUFlYX0VSUigwLCA0OTAsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAodW5saWtl bHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA0OTIsIF9fcHl4X0wxX2Vycm9yKQorICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9f cHl4X3RfNyA9IDA7CisgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl9rZXksIF9fcHl4X3Rf Myk7CisgICAgIF9fcHl4X3RfMyA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo0OTEKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5 MworICAqICAgICAgICAgZm9yIGksIGtleSBpbiBlbnVtZXJhdGUoa2V5cyk6CisgICogICAgICAg ICAgICAga2V5ID0gX3N0cmVuYyhrZXkpCisgICogICAgICAgICAgICAgY2tleSA9IGtleSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgbGlzdC5rZXlzW2ldID0g PGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCisgICogICAgICAgICAgICAgc3RyY3B5KGxpc3Qu a2V5c1tpXSwgY2tleSkKKyAgKi8KKy0gICAgX19weXhfdF85ID0gX19QeXhfUHlPYmplY3RfQXNX cml0YWJsZVN0cmluZyhfX3B5eF92X2tleSk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfOSkgJiYg UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA0OTEsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX3B5eF90XzkgPSBfX1B5eF9QeU9iamVjdF9Bc1dyaXRhYmxlU3RyaW5nKF9fcHl4X3Zfa2V5 KTsgaWYgKHVubGlrZWx5KCghX19weXhfdF85KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDQ5MywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fcHl4X3ZfY2tleSA9IF9fcHl4X3Rf OTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5MgorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk0CisgICogICAgICAgICAgICAga2V5 ID0gX3N0cmVuYyhrZXkpCisgICogICAgICAgICAgICAgY2tleSA9IGtleQorICAqICAgICAgICAg ICAgIGxpc3Qua2V5c1tpXSA9IDxjaGFyKj5tYWxsb2MobGVuKGtleSkgKyAxKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwg Y2tleSkKKyAgKiAgICAgICAgIHJldHVybiBsaXN0CisgICovCistICAgIF9fcHl4X3RfMTAgPSBQ eU9iamVjdF9MZW5ndGgoX19weXhfdl9rZXkpOyBpZiAodW5saWtlbHkoX19weXhfdF8xMCA9PSAo KFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDQ5MiwgX19weXhfTDFfZXJyb3IpCistICAg IF9fcHl4X3RfMTEgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5eF92X2kpOyBpZiAodW5s aWtlbHkoKF9fcHl4X3RfMTEgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkp KSBfX1BZWF9FUlIoMCwgNDkyLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xMCA9IFB5 T2JqZWN0X0xlbmd0aChfX3B5eF92X2tleSk7IGlmICh1bmxpa2VseShfX3B5eF90XzEwID09ICgo UHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMCwgNDk0LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19weXhfdF8xMSA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3ZfaSk7IGlmICh1bmxp a2VseSgoX19weXhfdF8xMSA9PSAoUHlfc3NpemVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCA0OTQsIF9fcHl4X0wxX2Vycm9yKQorICAgICAoX19weXhfdl9saXN0LT5r ZXlzW19fcHl4X3RfMTFdKSA9ICgoY2hhciAqKW1hbGxvYygoX19weXhfdF8xMCArIDEpKSk7Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTMKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5NQorICAqICAgICAgICAgICAgIGNrZXkgPSBr ZXkKKyAgKiAgICAgICAgICAgICBsaXN0LmtleXNbaV0gPSA8Y2hhcio+bWFsbG9jKGxlbihrZXkp ICsgMSkKKyAgKiAgICAgICAgICAgICBzdHJjcHkobGlzdC5rZXlzW2ldLCBja2V5KSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICByZXR1cm4gbGlzdAorICAqIAorICAq LworLSAgICBfX3B5eF90XzEwID0gX19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9pKTsg aWYgKHVubGlrZWx5KChfX3B5eF90XzEwID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9PY2N1 cnJlZCgpKSkgX19QWVhfRVJSKDAsIDQ5MywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3Rf MTAgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVfdChfX3B5eF92X2kpOyBpZiAodW5saWtlbHkoKF9f cHl4X3RfMTAgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9F UlIoMCwgNDk1LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgKHZvaWQpKHN0cmNweSgoX19weXhfdl9s aXN0LT5rZXlzW19fcHl4X3RfMTBdKSwgX19weXhfdl9ja2V5KSk7CisgCistICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0ODkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjQ5MQorICAqICAgICAgICAgICAgIHJldHVybiBsaXN0CisgICogICAgICAg ICBsaXN0LmtleXMgPSA8Y2hhcioqPm1hbGxvYyhsaXN0Lm51bSkKKyAgKiAgICAgICAgIGZvciBp LCBrZXkgaW4gZW51bWVyYXRlKGtleXMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtOTY4Niw3ICs5Njg2LDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZV9saXN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9ub2RlX20KKyAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NDk0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk2CisgICogICAg ICAgICAgICAgbGlzdC5rZXlzW2ldID0gPGNoYXIqPm1hbGxvYyhsZW4oa2V5KSArIDEpCisgICog ICAgICAgICAgICAgc3RyY3B5KGxpc3Qua2V5c1tpXSwgY2tleSkKKyAgKiAgICAgICAgIHJldHVy biBsaXN0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC05Njk2LDcgKzk2OTYsNyBA QCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlX2xpc3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0X19wcmVwX25vZGVfbQorICAgX19weXhfciA9IF9fcHl4X3ZfbGlzdDsKKyAg IGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NDgxCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDgzCisgICogICAgICAg ICByZXR1cm4gbm9kZV9saXN0CisgICogCisgICogICAgIGNkZWYgbXB2X25vZGVfbGlzdCogX3By ZXBfbm9kZV9tYXAoc2VsZiwgbWFwKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTk3MjEsNyArOTcyMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGVfbGlzdCAqX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbm9kZV9tCisgICByZXR1cm4gX19w eXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5NgorKy8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTgKKyAgKiAgICAgICAgIHJldHVybiBs aXN0CisgICogCisgICogICAgIGNkZWYgbXB2X25vZGUgX3ByZXBfbmF0aXZlX3ZhbHVlKHNlbGYs IHZhbHVlLCBmb3JtYXQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTc0OSwz OSArOTc0OSwzOSBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQorICAgX19QeXhfUmVmTmFubnlT ZXR1cENvbnRleHQoIl9wcmVwX25hdGl2ZV92YWx1ZSIsIDApOworICAgX19QeXhfSU5DUkVGKF9f cHl4X3ZfdmFsdWUpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5 OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwMAorICAqICAgICBjZGVm IG1wdl9ub2RlIF9wcmVwX25hdGl2ZV92YWx1ZShzZWxmLCB2YWx1ZSwgZm9ybWF0KToKKyAgKiAg ICAgICAgIGNkZWYgbXB2X25vZGUgbm9kZQorICAqICAgICAgICAgbm9kZS5mb3JtYXQgPSBmb3Jt YXQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgaWYgZm9ybWF0ID09 IE1QVl9GT1JNQVRfU1RSSU5HOgorICAqICAgICAgICAgICAgIHZhbHVlID0gX3N0cmVuYyh2YWx1 ZSkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0Fz X2VudW1fX21wdl9mb3JtYXQoX19weXhfdl9mb3JtYXQpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09j Y3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNDk4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3Rf MSA9ICgoZW51bSBtcHZfZm9ybWF0KV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9mb3JtYXQoX19w eXhfdl9mb3JtYXQpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIo MCwgNTAwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4X3Zfbm9kZS5mb3JtYXQgPSBfX3B5eF90 XzE7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDk5CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTAxCisgICogICAgICAgICBjZGVmIG1wdl9u b2RlIG5vZGUKKyAgKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0CisgICogICAgICAgICBp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAgICAgICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCisgICogICAgICAgICAg ICAgbm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCisgICovCist ICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1B VF9TVFJJTkcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0OTksIF9f cHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZf Zm9ybWF0KE1QVl9GT1JNQVRfU1RSSU5HKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZ WF9FUlIoMCwgNTAxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIp OworLSAgX19weXhfdF8zID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9f cHl4X3RfMiwgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDQ5OSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90 XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X2Zvcm1hdCwgX19weXhfdF8yLCBQeV9F USk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBf X1BZWF9FUlIoMCwgNTAxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVl KF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDQ5 OSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUo X19weXhfdF8zKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTAx LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMg PSAwOworICAgaWYgKF9fcHl4X3RfNCkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTAwCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 MDIKKyAgKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0CisgICogICAgICAgICBpZiBmb3Jt YXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6CisgICogICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5j KHZhbHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgbm9k ZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpCisgICogICAgICAgICAg ICAgc3RyY3B5KG5vZGUudS5zdHJpbmcsIHZhbHVlKQorICAqLworLSAgICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUwMCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTAyLCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICAgIF9fcHl4X3RfNSA9IE5VTEw7CisgICAg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19w eXhfdF8yKSkpIHsKK0BAIC05Nzk1LDMzICs5Nzk1LDMzIEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25v ZGUgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3Zh bHVlCisgICAgIH0KKyAgICAgX19weXhfdF8zID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVj dF9DYWxsMkFyZ3MoX19weXhfdF8yLCBfX3B5eF90XzUsIF9fcHl4X3ZfdmFsdWUpIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfdmFsdWUpOworICAgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CistICAgIGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUwMCwgX19weXhfTDFfZXJyb3IpCisrICAgIGlmICh1 bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUwMiwgX19weXhfTDFfZXJyb3IpCisg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKKyAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3ZhbHVlLCBf X3B5eF90XzMpOworICAgICBfX3B5eF90XzMgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTAxCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1MDMKKyAgKiAgICAgICAgIGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKyAg KiAgICAgICAgICAgICB2YWx1ZSA9IF9zdHJlbmModmFsdWUpCisgICogICAgICAgICAgICAgbm9k ZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBzdHJjcHkobm9kZS51LnN0cmluZywgdmFs dWUpCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CisgICovCist ICAgIF9fcHl4X3RfNiA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlr ZWx5KF9fcHl4X3RfNiA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDUwMSwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNiA9IFB5T2JqZWN0X0xlbmd0aChfX3B5eF92X3Zh bHVlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA9PSAoKFB5X3NzaXplX3QpLTEpKSkgX19QWVhf RVJSKDAsIDUwMywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fcHl4X3Zfbm9kZS51LnN0cmluZyA9 ICgoY2hhciAqKW1hbGxvYygoX19weXhfdF82ICsgMSkpKTsKKyAKKy0gICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjUwMgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTA0CisgICogICAgICAgICAgICAgdmFsdWUgPSBfc3RyZW5jKHZhbHVlKQorICAq ICAgICAgICAgICAgIG5vZGUudS5zdHJpbmcgPSA8Y2hhcio+bWFsbG9jKGxlbih2YWx1ZSkgKyAx KQorICAqICAgICAgICAgICAgIHN0cmNweShub2RlLnUuc3RyaW5nLCB2YWx1ZSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1B VF9GTEFHOgorICAqICAgICAgICAgICAgIG5vZGUudS5mbGFnID0gMSBpZiB2YWx1ZSBlbHNlIDAK KyAgKi8KKy0gICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl92 YWx1ZSk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNykgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9f UFlYX0VSUigwLCA1MDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzcgPSBfX1B5eF9Q eU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF83 KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDUwNCwgX19weXhfTDFfZXJyb3Ip CisgICAgICh2b2lkKShzdHJjcHkoX19weXhfdl9ub2RlLnUuc3RyaW5nLCBfX3B5eF90XzcpKTsK KyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ5OQorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTAxCisgICogICAgICAgICBjZGVmIG1wdl9u b2RlIG5vZGUKKyAgKiAgICAgICAgIG5vZGUuZm9ybWF0ID0gZm9ybWF0CisgICogICAgICAgICBp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9TVFJJTkc6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC05ODMxLDI5ICs5ODMxLDI5IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUgX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVlCisgICAg IGdvdG8gX19weXhfTDM7CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTAzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA1CisgICog ICAgICAgICAgICAgbm9kZS51LnN0cmluZyA9IDxjaGFyKj5tYWxsb2MobGVuKHZhbHVlKSArIDEp CisgICogICAgICAgICAgICAgc3RyY3B5KG5vZGUudS5zdHJpbmcsIHZhbHVlKQorICAqICAgICAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisgICogICAgICAgICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVsc2UgMAor ICAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKyAgKi8KKy0gIF9f cHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX0ZM QUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA1MDMsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZm9ybWF0 KE1QVl9GT1JNQVRfRkxBRyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDUwNSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9f cHl4X3RfMiA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfZm9ybWF0LCBfX3B5eF90XzMs IFB5X0VRKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCA1MDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gUHlP YmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5 eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDUwNSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19w eXhfdF8zID0gMDsKKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90 XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF80IDwgMCkpIF9fUFlYX0VSUigwLCA1MDMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Rf Mik7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwNSwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAg IGlmIChfX3B5eF90XzQpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjUwNAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA2CisgICog ICAgICAgICAgICAgc3RyY3B5KG5vZGUudS5zdHJpbmcsIHZhbHVlKQorICAqICAgICAgICAgZWxp ZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9GTEFHOgorICAqICAgICAgICAgICAgIG5vZGUudS5mbGFn ID0gMSBpZiB2YWx1ZSBlbHNlIDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAg ICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKyAgKiAgICAgICAgICAgICBu b2RlLnUuaW50NjQgPSB2YWx1ZQorICAqLworLSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVj dF9Jc1RydWUoX19weXhfdl92YWx1ZSk7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19Q WVhfRVJSKDAsIDUwNCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5 T2JqZWN0X0lzVHJ1ZShfX3B5eF92X3ZhbHVlKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDAp KSBfX1BZWF9FUlIoMCwgNTA2LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgaWYgKF9fcHl4X3RfNCkg eworICAgICAgIF9fcHl4X3RfOCA9IDE7CisgICAgIH0gZWxzZSB7CitAQCAtOTg2MSw3ICs5ODYx LDcgQEAgc3RhdGljIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF9fcHJlcF9uYXRpdmVfdmFsdWUKKyAgICAgfQorICAgICBfX3B5eF92X25vZGUu dS5mbGFnID0gX19weXhfdF84OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTAzCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDUKKyAg KiAgICAgICAgICAgICBub2RlLnUuc3RyaW5nID0gPGNoYXIqPm1hbGxvYyhsZW4odmFsdWUpICsg MSkKKyAgKiAgICAgICAgICAgICBzdHJjcHkobm9kZS51LnN0cmluZywgdmFsdWUpCisgICogICAg ICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC05ODcxLDMyICs5ODcxLDMyIEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUg X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVl CisgICAgIGdvdG8gX19weXhfTDM7CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTA1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA3 CisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0ZMQUc6CisgICogICAgICAg ICAgICAgbm9kZS51LmZsYWcgPSAxIGlmIHZhbHVlIGVsc2UgMAorICAqICAgICAgICAgZWxpZiBm b3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor ICAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlCisgICogICAgICAgICBlbGlmIGZv cm1hdCA9PSBNUFZfRk9STUFUX0RPVUJMRToKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX0lOVDY0KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTA1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX0lOVDY0 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTA3LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gUHlPYmpl Y3RfUmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMiwgUHlfRVEpOyBfX1B5eF9Y R09UUkVGKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDUwNSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFy ZShfX3B5eF92X2Zvcm1hdCwgX19weXhfdF8yLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhf dF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTA3LCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAg X19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2Vs eShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwNSwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTA3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworICAgaWYgKF9fcHl4X3RfNCkg eworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA2CisrICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDgKKyAgKiAgICAgICAgICAgICBub2Rl LnUuZmxhZyA9IDEgaWYgdmFsdWUgZWxzZSAwCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX0lOVDY0OgorICAqICAgICAgICAgICAgIG5vZGUudS5pbnQ2NCA9IHZhbHVlICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1Q Vl9GT1JNQVRfRE9VQkxFOgorICAqICAgICAgICAgICAgIG5vZGUudS5kb3VibGVfID0gdmFsdWUK KyAgKi8KKy0gICAgX19weXhfdF85ID0gX19QeXhfUHlJbnRfQXNfaW50NjRfdChfX3B5eF92X3Zh bHVlKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzkgPT0gKChpbnQ2NF90KS0xKSkgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA1MDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5 eF90XzkgPSBfX1B5eF9QeUludF9Bc19pbnQ2NF90KF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfOSA9PSAoKGludDY0X3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19Q WVhfRVJSKDAsIDUwOCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fcHl4X3Zfbm9kZS51LmludDY0 ID0gX19weXhfdF85OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTA1CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDcKKyAgKiAgICAg ICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfRkxBRzoKKyAgKiAgICAgICAgICAgICBub2Rl LnUuZmxhZyA9IDEgaWYgdmFsdWUgZWxzZSAwCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBN UFZfRk9STUFUX0lOVDY0OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtOTkwNiwz MiArOTkwNiwzMiBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQorICAgICBnb3RvIF9fcHl4X0wz OworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwNworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwOQorICAqICAgICAgICAgZWxpZiBm b3JtYXQgPT0gTVBWX0ZPUk1BVF9JTlQ2NDoKKyAgKiAgICAgICAgICAgICBub2RlLnUuaW50NjQg PSB2YWx1ZQorICAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBub2RlLnUuZG91Ymxl XyA9IHZhbHVlCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJS QVk6CisgICovCistICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3Jt YXQoTVBWX0ZPUk1BVF9ET1VCTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigwLCA1MDcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfRE9VQkxFKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzMpKSBfX1BZWF9FUlIoMCwgNTA5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzMpOworLSAgX19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhf dl9mb3JtYXQsIF9fcHl4X3RfMywgUHlfRVEpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDUwNywgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF92X2Zvcm1hdCwgX19w eXhfdF8zLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTA5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgX19weXhfdF80ID0gX19QeXhfUHlP YmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19Q WVhfRVJSKDAsIDUwNywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBfX1B5eF9QeU9i amVjdF9Jc1RydWUoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZ WF9FUlIoMCwgNTA5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworICAgaWYgKF9fcHl4X3RfNCkgeworIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA4CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo1MTAKKyAgKiAgICAgICAgICAgICBub2RlLnUuaW50NjQgPSB2YWx1ZQorICAq ICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisgICogICAgICAgICAg ICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisg ICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfQVJSQVk6CisgICogICAg ICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbGlzdCh2YWx1ZSkKKyAgKi8K Ky0gICAgX19weXhfdF8xMCA9IF9fcHl4X1B5RmxvYXRfQXNEb3VibGUoX19weXhfdl92YWx1ZSk7 IGlmICh1bmxpa2VseSgoX19weXhfdF8xMCA9PSAoZG91YmxlKS0xKSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDUwOCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMTAg PSBfX3B5eF9QeUZsb2F0X0FzRG91YmxlKF9fcHl4X3ZfdmFsdWUpOyBpZiAodW5saWtlbHkoKF9f cHl4X3RfMTAgPT0gKGRvdWJsZSktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigw LCA1MTAsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX3B5eF92X25vZGUudS5kb3VibGVfID0gX19w eXhfdF8xMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUwNwor KyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTA5CisgICogICAgICAgICBl bGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0lOVDY0OgorICAqICAgICAgICAgICAgIG5vZGUudS5p bnQ2NCA9IHZhbHVlCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX0RPVUJM RTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTk5NDEsMjIgKzk5NDEsMjIgQEAg c3RhdGljIHN0cnVjdCBtcHZfbm9kZSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF9fcHJlcF9uYXRpdmVfdmFsdWUKKyAgICAgZ290byBfX3B5eF9MMzsKKyAgIH0KKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MDkKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1MTEKKyAgKiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9G T1JNQVRfRE9VQkxFOgorICAqICAgICAgICAgICAgIG5vZGUudS5kb3VibGVfID0gdmFsdWUKKyAg KiAgICAgICAgIGVsaWYgZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9BUlJBWTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5f cHJlcF9ub2RlX2xpc3QodmFsdWUpCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX05PREVfTUFQOgorICAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9lbnVt X19tcHZfZm9ybWF0KE1QVl9GT1JNQVRfTk9ERV9BUlJBWSk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDUwOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBf X1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gUHlPYmplY3Rf UmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMiwgUHlfRVEpOyBfX1B5eF9YR09U UkVGKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDUw OSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShf X3B5eF92X2Zvcm1hdCwgX19weXhfdF8yLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8z KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19w eXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShf X3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUwOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KF9f cHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworICAgaWYgKF9fcHl4X3RfNCkgewor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTEwCisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTIKKyAgKiAgICAgICAgICAgICBub2RlLnUu ZG91YmxlXyA9IHZhbHVlCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05P REVfQVJSQVk6CisgICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVf bGlzdCh2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTk5NjUsNyArOTk2 NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVlCisgICovCisgICAgIF9fcHl4X3Zfbm9kZS51 Lmxpc3QgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbm9kZV9saXN0KF9fcHl4 X3Zfc2VsZiwgX19weXhfdl92YWx1ZSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo1MDkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUx MQorICAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9ET1VCTEU6CisgICogICAg ICAgICAgICAgbm9kZS51LmRvdWJsZV8gPSB2YWx1ZQorICAqICAgICAgICAgZWxpZiBmb3JtYXQg PT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtOTk3NSwyMiArOTk3NSwyMiBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQorICAgICBnb3Rv IF9fcHl4X0wzOworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjUxMQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxMworICAqICAgICAg ICAgZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX0FSUkFZOgorICAqICAgICAgICAgICAg IG5vZGUudS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX2xpc3QodmFsdWUpCisgICogICAgICAgICBl bGlmIGZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisgICogICAgICAgICAgICAgbm9kZS51Lmxpc3QgPSBzZWxmLl9wcmVwX25vZGVfbWFw KHZhbHVlKQorICAqICAgICAgICAgZWxzZToKKyAgKi8KKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05PREVfTUFQKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTExLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChNUFZfRk9STUFUX05P REVfTUFQKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNTEzLCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworLSAgX19weXhfdF8yID0g UHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9mb3JtYXQsIF9fcHl4X3RfMywgUHlfRVEpOyBf X1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDAsIDUxMSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBQeU9iamVjdF9SaWNo Q29tcGFyZShfX3B5eF92X2Zvcm1hdCwgX19weXhfdF8zLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYo X19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTEzLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAw OworLSAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlmICh1 bmxpa2VseShfX3B5eF90XzQgPCAwKSkgX19QWVhfRVJSKDAsIDUxMSwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8yKTsgaWYgKHVu bGlrZWx5KF9fcHl4X3RfNCA8IDApKSBfX1BZWF9FUlIoMCwgNTEzLCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgaWYgKF9fcHl4 X3RfNCkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTEyCisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTQKKyAgKiAgICAgICAgICAg ICBub2RlLnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9saXN0KHZhbHVlKQorICAqICAgICAgICAg ZWxpZiBmb3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDoKKyAgKiAgICAgICAgICAgICBub2Rl LnUubGlzdCA9IHNlbGYuX3ByZXBfbm9kZV9tYXAodmFsdWUpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC05OTk5LDcgKzk5OTksNyBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9f cHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQor ICAqLworICAgICBfX3B5eF92X25vZGUudS5saXN0ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVj dF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRh YiktPl9wcmVwX25vZGVfbWFwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSk7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTEKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjUxMworICAqICAgICAgICAgZWxpZiBmb3JtYXQgPT0gTVBW X0ZPUk1BVF9OT0RFX0FSUkFZOgorICAqICAgICAgICAgICAgIG5vZGUudS5saXN0ID0gc2VsZi5f cHJlcF9ub2RlX2xpc3QodmFsdWUpCisgICogICAgICAgICBlbGlmIGZvcm1hdCA9PSBNUFZfRk9S TUFUX05PREVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTAwMDksNyAr MTAwMDksNyBAQCBzdGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQorICAgICBnb3RvIF9fcHl4X0wzOwor ICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxNAorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxNgorICAqICAgICAgICAgICAgIG5vZGUu dS5saXN0ID0gc2VsZi5fcHJlcF9ub2RlX21hcCh2YWx1ZSkKKyAgKiAgICAgICAgIGVsc2U6Cisg ICogICAgICAgICAgICAgbm9kZS5mb3JtYXQgPSBNUFZfRk9STUFUX05PTkUgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTEwMDIxLDcgKzEwMDIxLDcgQEAgc3RhdGljIHN0cnVjdCBt cHZfbm9kZSBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9uYXRp dmVfdmFsdWUKKyAgIH0KKyAgIF9fcHl4X0wzOjsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1MTUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 MTcKKyAgKiAgICAgICAgIGVsc2U6CisgICogICAgICAgICAgICAgbm9kZS5mb3JtYXQgPSBNUFZf Rk9STUFUX05PTkUKKyAgKiAgICAgICAgIHJldHVybiBub2RlICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC0xMDAzMSw3ICsxMDAzMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXB2X25vZGUg X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBfbmF0aXZlX3ZhbHVl CisgICBfX3B5eF9yID0gX19weXhfdl9ub2RlOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0OTYKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo0OTgKKyAgKiAgICAgICAgIHJldHVybiBsaXN0CisgICogCisgICog ICAgIGNkZWYgbXB2X25vZGUgX3ByZXBfbmF0aXZlX3ZhbHVlKHNlbGYsIHZhbHVlLCBmb3JtYXQp OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTAwNTIsNyArMTAwNTIsNyBAQCBz dGF0aWMgc3RydWN0IG1wdl9ub2RlIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0X19wcmVwX25hdGl2ZV92YWx1ZQorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MTcKKysvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTE5CisgICogICAgICAgICByZXR1cm4gbm9kZQorICAqIAorICAqICAgICBj ZGVmIF9mcmVlX25hdGl2ZV92YWx1ZShzZWxmLCBtcHZfbm9kZSBub2RlKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTEwMDc0LDcgKzEwMDc0LDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFs dWUoc3RydWMKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfZnJlZV9uYXRpdmVfdmFsdWUiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1MTgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1MjAKKyAgKiAKKyAgKiAgICAgY2RlZiBfZnJlZV9uYXRpdmVfdmFsdWUoc2VsZiwgbXB2 X25vZGUgbm9kZSk6CisgICogICAgICAgICBpZiBub2RlLmZvcm1hdCBpbiAoTVBWX0ZPUk1BVF9O T0RFX0FSUkFZLCBNUFZfRk9STUFUX05PREVfTUFQKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTEwMDg1LDcgKzEwMDg1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKKyAg ICAgY2FzZSBNUFZfRk9STUFUX05PREVfQVJSQVk6CisgICAgIGNhc2UgTVBWX0ZPUk1BVF9OT0RF X01BUDoKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxOQorKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTIxCisgICogICAgIGNkZWYgX2Zy ZWVfbmF0aXZlX3ZhbHVlKHNlbGYsIG1wdl9ub2RlIG5vZGUpOgorICAqICAgICAgICAgaWYgbm9k ZS5mb3JtYXQgaW4gKE1QVl9GT1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6 CisgICogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEwMDk3LDE5ICsxMDA5NywxOSBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19mcmVlX25h dGl2ZV92YWx1ZShzdHJ1YworICAgICBmb3IgKF9fcHl4X3RfMyA9IDA7IF9fcHl4X3RfMyA8IF9f cHl4X3RfMjsgX19weXhfdF8zKz0xKSB7CisgICAgICAgX19weXhfdl9pID0gX19weXhfdF8zOwor IAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjAKKysgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTIyCisgICogICAgICAgICBpZiBub2Rl LmZvcm1hdCBpbiAoTVBWX0ZPUk1BVF9OT0RFX0FSUkFZLCBNUFZfRk9STUFUX05PREVfTUFQKToK KyAgKiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOgorICAqICAg ICAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlLnUubGlzdC52YWx1ZXNb aV0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBmcmVlKG5v ZGUudS5saXN0LnZhbHVlcykKKyAgKiAgICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZf Rk9STUFUX05PREVfTUFQOgorICAqLworLSAgICAgIF9fcHl4X3RfNCA9ICgoc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYt Pl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCAoX19weXhfdl9u b2RlLnUubGlzdC0+dmFsdWVzW19fcHl4X3ZfaV0pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgNTIwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX3B5eF90XzQgPSAo KHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICop X19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2Vs ZiwgKF9fcHl4X3Zfbm9kZS51Lmxpc3QtPnZhbHVlc1tfX3B5eF92X2ldKSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDUyMiwgX19weXhfTDFfZXJyb3IpCisgICAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7 IF9fcHl4X3RfNCA9IDA7CisgICAgIH0KKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjUyMQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTIz CisgICogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobm9kZS51Lmxpc3QubnVtKToKKyAgKiAg ICAgICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUobm9kZS51Lmxpc3QudmFsdWVz W2ldKQorICAqICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3QudmFsdWVzKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTAxMTgsNyArMTAxMTgsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19mcmVlX25hdGl2ZV92 YWx1ZShzdHJ1YworICAqLworICAgICBmcmVlKF9fcHl4X3Zfbm9kZS51Lmxpc3QtPnZhbHVlcyk7 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjIKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyNAorICAqICAgICAgICAgICAgICAgICBz ZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlLnUubGlzdC52YWx1ZXNbaV0pCisgICogICAgICAg ICAgICAgZnJlZShub2RlLnUubGlzdC52YWx1ZXMpCisgICogICAgICAgICAgICAgaWYgbm9kZS5m b3JtYXQgPT0gTVBWX0ZPUk1BVF9OT0RFX01BUDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTEwMTI4LDcgKzEwMTI4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKKyAgICAg X19weXhfdF81ID0gKChfX3B5eF92X25vZGUuZm9ybWF0ID09IE1QVl9GT1JNQVRfTk9ERV9NQVAp ICE9IDApOworICAgICBpZiAoX19weXhfdF81KSB7CisgCistICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjUyMworKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1MjUKKyAgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LnZhbHVlcykKKyAg KiAgICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorICAq ICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTAxNDAsNyArMTAxNDAsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19mcmVlX25hdGl2 ZV92YWx1ZShzdHJ1YworICAgICAgIGZvciAoX19weXhfdF8zID0gMDsgX19weXhfdF8zIDwgX19w eXhfdF8yOyBfX3B5eF90XzMrPTEpIHsKKyAgICAgICAgIF9fcHl4X3ZfaSA9IF9fcHl4X3RfMzsK KyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjQKKysgICAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjYKKyAgKiAgICAgICAgICAg ICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05PREVfTUFQOgorICAqICAgICAgICAgICAg ICAgICBmb3IgaSBpbiByYW5nZShub2RlLnUubGlzdC5udW0pOgorICAqICAgICAgICAgICAgICAg ICAgICAgZnJlZShub2RlLnUubGlzdC5rZXlzW2ldKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtMTAxNTAsNyArMTAxNTAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0X19mcmVlX25hdGl2ZV92YWx1ZShzdHJ1YworICAg ICAgICAgZnJlZSgoX19weXhfdl9ub2RlLnUubGlzdC0+a2V5c1tfX3B5eF92X2ldKSk7CisgICAg ICAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjUKKysg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTI3CisgICogICAgICAgICAg ICAgICAgIGZvciBpIGluIHJhbmdlKG5vZGUudS5saXN0Lm51bSk6CisgICogICAgICAgICAgICAg ICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXNbaV0pCisgICogICAgICAgICAgICAgICAgIGZy ZWUobm9kZS51Lmxpc3Qua2V5cykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEw MTU5LDcgKzEwMTU5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKKyAgKi8KKyAgICAgICBm cmVlKF9fcHl4X3Zfbm9kZS51Lmxpc3QtPmtleXMpOworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1MjIKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTI0CisgICogICAgICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVl KG5vZGUudS5saXN0LnZhbHVlc1tpXSkKKyAgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0 LnZhbHVlcykKKyAgKiAgICAgICAgICAgICBpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX05P REVfTUFQOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTAxNjgsNyArMTAxNjgs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0X19mcmVlX25hdGl2ZV92YWx1ZShzdHJ1YworICAqLworICAgICB9CisgCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1MjYKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjUyOAorICAqICAgICAgICAgICAgICAgICAgICAgZnJlZShub2RlLnUu bGlzdC5rZXlzW2ldKQorICAqICAgICAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0LmtleXMp CisgICogICAgICAgICAgICAgZnJlZShub2RlLnUubGlzdCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTEwMTc3LDcgKzEwMTc3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMK KyAgKi8KKyAgICAgZnJlZShfX3B5eF92X25vZGUudS5saXN0KTsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUxOAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTIwCisgICogCisgICogICAgIGNkZWYgX2ZyZWVfbmF0aXZlX3ZhbHVlKHNl bGYsIG1wdl9ub2RlIG5vZGUpOgorICAqICAgICAgICAgaWYgbm9kZS5mb3JtYXQgaW4gKE1QVl9G T1JNQVRfTk9ERV9BUlJBWSwgTVBWX0ZPUk1BVF9OT0RFX01BUCk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC0xMDE4Nyw3ICsxMDE4Nyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX2ZyZWVfbmF0aXZlX3ZhbHVlKHN0 cnVjCisgICAgIGJyZWFrOworICAgICBjYXNlIE1QVl9GT1JNQVRfU1RSSU5HOgorIAorLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTI4CisrICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1MzAKKyAgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0 KQorICAqICAgICAgICAgZWxpZiBub2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzoKKyAg KiAgICAgICAgICAgICBmcmVlKG5vZGUudS5zdHJpbmcpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0xMDE5Niw3ICsxMDE5Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX2ZyZWVfbmF0aXZlX3ZhbHVlKHN0cnVjCisg ICovCisgICAgIGZyZWUoX19weXhfdl9ub2RlLnUuc3RyaW5nKTsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUyNworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NTI5CisgICogICAgICAgICAgICAgICAgIGZyZWUobm9kZS51Lmxpc3Qua2V5 cykKKyAgKiAgICAgICAgICAgICBmcmVlKG5vZGUudS5saXN0KQorICAqICAgICAgICAgZWxpZiBu b2RlLmZvcm1hdCA9PSBNUFZfRk9STUFUX1NUUklORzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTEwMjA3LDcgKzEwMjA3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKKyAg ICAgZGVmYXVsdDogYnJlYWs7CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTE3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTE5Cisg ICogICAgICAgICByZXR1cm4gbm9kZQorICAqIAorICAqICAgICBjZGVmIF9mcmVlX25hdGl2ZV92 YWx1ZShzZWxmLCBtcHZfbm9kZSBub2RlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTEwMjI4LDcgKzEwMjI4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fZnJlZV9uYXRpdmVfdmFsdWUoc3RydWMKKyAgIHJldHVy biBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTMw CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUzMgorICAqICAgICAgICAgICAg IGZyZWUobm9kZS51LnN0cmluZykKKyAgKiAKKyAgKiAgICAgZGVmIGNvbW1hbmQoc2VsZiwgKmNt ZGxpc3QsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTEwMjgwLDcgKzEwMjgwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOWNvbW1hbmQoUHlPYmplY3QgKl9f cHkKKyAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAw KSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3Jkcyhf X3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIDAsICJjb21tYW5kIikgPCAw KSkgX19QWVhfRVJSKDAsIDUzMCwgX19weXhfTDNfZXJyb3IpCisrICAgICAgICBpZiAodW5saWtl bHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFt ZXMsIDAsIHZhbHVlcywgMCwgImNvbW1hbmQiKSA8IDApKSBfX1BZWF9FUlIoMCwgNTMyLCBfX3B5 eF9MM19lcnJvcikKKyAgICAgICB9CisgICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShf X3B5eF9hcmdzKSA8IDApIHsKKyAgICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOwor QEAgLTEwMjkxLDcgKzEwMjkxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOWNvbW1hbmQoUHlPYmplY3QgKl9fcHkKKyAgIH0KKyAg IGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CisgICBfX3B5eF9MNV9hcmd0 dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiY29tbWFuZCIsIDAs IDAsIDAsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNTMwLCBf X3B5eF9MM19lcnJvcikKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJjb21tYW5kIiwg MCwgMCwgMCwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA1MzIs IF9fcHl4X0wzX2Vycm9yKQorICAgX19weXhfTDNfZXJyb3I6OworICAgX19QeXhfREVDUkVGKF9f cHl4X3ZfY21kbGlzdCk7IF9fcHl4X3ZfY21kbGlzdCA9IDA7CisgICBfX1B5eF9BZGRUcmFjZWJh Y2soInZpZGN1dHRlci5saWJzLm1wdi5Db250ZXh0LmNvbW1hbmQiLCBfX3B5eF9jbGluZW5vLCBf X3B5eF9saW5lbm8sIF9fcHl4X2ZpbGVuYW1lKTsKK0BAIC0xMDMzOCw3ICsxMDMzOCw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhj b21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5 eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiY29tbWFuZCIsIDApOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjU0NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU0NgorICAqICAgICAgICAgV3JhcHM6IG1wdl9jb21tYW5kX25vZGUgYW5kIG1wdl9j b21tYW5kX25vZGVfYXN5bmMKKyAgKiAgICAgICAgICIiIgorICAqICAgICAgICAgYXNzZXJ0IHNl bGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTAzNDksMTkgKzEwMzQ5 LDE5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICBpZiAodW5saWtlbHkoIVB5X09wdGlt aXplRmxhZykpIHsKKyAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDAp KSkgeworICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAg IF9fUFlYX0VSUigwLCA1NDQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA1 NDYsIF9fcHl4X0wxX2Vycm9yKQorICAgICB9CisgICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NDUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo1NDcKKyAgKiAgICAgICAgICIiIgorICAqICAgICAgICAgYXNzZXJ0IHNl bGYuX2N0eAorICAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlID0gc2VsZi5fcHJlcF9uYXRp dmVfdmFsdWUoY21kbGlzdCwgc2VsZi5fZm9ybWF0X2ZvcihjbWRsaXN0KSkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgY2RlZiBtcHZfbm9kZSBub2RlcmVzdWx0Cisg ICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19mb3Jt YXRfZm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTQ1LCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQ eU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19mb3JtYXRfZm9yKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTQ3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgX19weXhfdF8zID0gTlVMTDsKKyAgIGlmIChDWVRI T05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7 CitAQCAtMTAzNzUsMTMgKzEwMzc1LDEzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICB9 CisgICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhf X3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9jbWRsaXN0KSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X2NtZGxpc3QpOworICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgNTQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDU0NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor ICAgX19weXhfdl9ub2RlID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9wcmVwX25hdGl2 ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3ZfY21kbGlzdCwgX19weXhfdF8xKTsKKyAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjU0OQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU1MQorICAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICogICAgICAgICBjZGVmIHVp bnQ2NF90IGRhdGFfaWQKKyAgKiAgICAgICAgIHJlc3VsdCA9IE5vbmUgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTEwMzkxLDcgKzEwMzkxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9f cHl4X28KKyAgIF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKyAgIF9fcHl4X3ZfcmVzdWx0ID0gUHlf Tm9uZTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTAKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTIKKyAgKiAgICAgICAgIGNkZWYgdWlu dDY0X3QgZGF0YV9pZAorICAqICAgICAgICAgcmVzdWx0ID0gTm9uZQorICAqICAgICAgICAgdHJ5 OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA0MDAsMzEgKzEwNDAwLDMxIEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICovCisgICAvKnRyeToqLyB7CisgCistICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTEKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjU1MworICAqICAgICAgICAgcmVzdWx0ID0gTm9uZQorICAqICAg ICAgICAgdHJ5OgorICAqICAgICAgICAgICAgIGRhdGFfaWQgPSBpZChkYXRhKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgaWYgbm90IGFzeW5jaHJvbm91czoK KyAgKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gICAgX19weXhfdF8xID0g X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF9idWlsdGluX2lkLCBfX3B5eF92X2RhdGEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NTEsIF9fcHl4X0w0X2Vy cm9yKQorKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1 aWx0aW5faWQsIF9fcHl4X3ZfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDU1MywgX19weXhfTDRfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEp OworLSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBp ZiAodW5saWtlbHkoKF9fcHl4X3RfNCA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCA1NTEsIF9fcHl4X0w0X2Vycm9yKQorKyAgICBfX3B5eF90XzQg PSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4 X3RfNCA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigw LCA1NTMsIF9fcHl4X0w0X2Vycm9yKQorICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKKyAgICAgX19weXhfdl9kYXRhX2lkID0gX19weXhfdF80OworIAorLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTUyCisrICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo1NTQKKyAgKiAgICAgICAgIHRyeToKKyAgKiAgICAgICAgICAg ICBkYXRhX2lkID0gaWQoZGF0YSkKKyAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3Vz OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgICAgIHdpdGgg bm9naWw6CisgICogICAgICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlKHNl bGYuX2N0eCwgJm5vZGUsICZub2RlcmVzdWx0KQorICAqLworLSAgICBfX3B5eF90XzUgPSBfX1B5 eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9hc3luY2hyb25vdXMpOyBpZiAodW5saWtlbHkoX19w eXhfdF81IDwgMCkpIF9fUFlYX0VSUigwLCA1NTIsIF9fcHl4X0w0X2Vycm9yKQorKyAgICBfX3B5 eF90XzUgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9hc3luY2hyb25vdXMpOyBpZiAo dW5saWtlbHkoX19weXhfdF81IDwgMCkpIF9fUFlYX0VSUigwLCA1NTQsIF9fcHl4X0w0X2Vycm9y KQorICAgICBfX3B5eF90XzYgPSAoKCFfX3B5eF90XzUpICE9IDApOworICAgICBpZiAoX19weXhf dF82KSB7CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1Mwor KyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTUKKyAgKiAgICAgICAg ICAgICBkYXRhX2lkID0gaWQoZGF0YSkKKyAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9u b3VzOgorICAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CitAQCAtMTA0MzksNyArMTA0MzksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhf bworICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTQKKysgICAgICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU2CisgICogICAgICAgICAgICAgaWYg bm90IGFzeW5jaHJvbm91czoKKyAgKiAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAg ICAgICAgICAgICAgICAgICAgIGVyciA9IG1wdl9jb21tYW5kX25vZGUoc2VsZi5fY3R4LCAmbm9k ZSwgJm5vZGVyZXN1bHQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMDQ0OSw3 ICsxMDQ0OSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICAgICAgICAgICAgX19weXhf dl9lcnIgPSBtcHZfY29tbWFuZF9ub2RlKF9fcHl4X3Zfc2VsZi0+X2N0eCwgKCZfX3B5eF92X25v ZGUpLCAoJl9fcHl4X3Zfbm9kZXJlc3VsdCkpOworICAgICAgICAgICB9CisgCistICAgICAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTMKKysgICAgICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1NQorICAqICAgICAgICAgICAgIGRhdGFfaWQg PSBpZChkYXRhKQorICAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CisgICogICAg ICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xMDQ2OCw3ICsxMDQ2OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICAgICAgICAg IH0KKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjU1NQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTcKKyAgKiAg ICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICAgICAgICAgIGVyciA9 IG1wdl9jb21tYW5kX25vZGUoc2VsZi5fY3R4LCAmbm9kZSwgJm5vZGVyZXN1bHQpCisgICogICAg ICAgICAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEwNDc3 LDcgKzEwNDc3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4X28KKyAgKi8KKyAgICAgICAvKnRy eToqLyB7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU2 CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU4CisgICogICAg ICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlKHNlbGYuX2N0eCwgJm5vZGUs ICZub2RlcmVzdWx0KQorICAqICAgICAgICAgICAgICAgICB0cnk6CisgICogICAgICAgICAgICAg ICAgICAgICByZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQpIGlmIGVyciA+ PSAwIGVsc2UgTm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA0ODUsNyAr MTA0ODUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAqICAgICAgICAgICAgICAgICAg ICAgd2l0aCBub2dpbDoKKyAgKi8KKyAgICAgICAgIGlmICgoKF9fcHl4X3ZfZXJyID49IDApICE9 IDApKSB7CistICAgICAgICAgIF9fcHl4X3RfMiA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2X19jb252ZXJ0X25vZGVfdmFsdWUoX19weXhfdl9ub2RlcmVzdWx0KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTU2LCBfX3B5eF9MMTFfZXJyb3IpCisrICAgICAg ICAgIF9fcHl4X3RfMiA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252ZXJ0X25v ZGVfdmFsdWUoX19weXhfdl9ub2RlcmVzdWx0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgNTU4LCBfX3B5eF9MMTFfZXJyb3IpCisgICAgICAgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOworICAgICAgICAgICBfX3B5eF90XzEgPSBfX3B5eF90XzI7CisgICAgICAg ICAgIF9fcHl4X3RfMiA9IDA7CitAQCAtMTA0OTcsNyArMTA0OTcsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1 Y3QgX19weXhfbworICAgICAgICAgX19weXhfdF8xID0gMDsKKyAgICAgICB9CisgCistICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU1OAorKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjAKKyAgKiAgICAgICAgICAgICAgICAgICAgIHJlc3Vs dCA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZXJlc3VsdCkgaWYgZXJyID49IDAgZWxzZSBOb25l CisgICogICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICogICAgICAgICAgICAgICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA1MTQsNyArMTA1 MTQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAgICAgICAgICAgICAgI2VuZGlmCisg ICAgICAgICAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAgICAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NTkKKysgICAgICAgICAgICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjU2MQorICAqICAgICAgICAgICAgICAgICBmaW5hbGx5Ogor ICAqICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICAgICAg ICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2RlcmVzdWx0KSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMTA1MjQsNyArMTA1MjQsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3Qg X19weXhfbworICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCgmX19weXhf dl9ub2RlcmVzdWx0KSk7CisgICAgICAgICAgICAgICB9CisgCistICAgICAgICAgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU4CisrICAgICAgICAgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTYwCisgICogICAgICAgICAgICAgICAgICAgICBy ZXN1bHQgPSBfY29udmVydF9ub2RlX3ZhbHVlKG5vZGVyZXN1bHQpIGlmIGVyciA+PSAwIGVsc2Ug Tm9uZQorICAqICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAqICAgICAgICAgICAgICAgICAg ICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEwNTcwLDcg KzEwNTcwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4X28KKyAgICAgICAgICAgICAgICAgI2Vu ZGlmCisgICAgICAgICAgICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgICAgICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU5CisrICAgICAgICAgICAgICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2MQorICAqICAgICAgICAgICAgICAg ICBmaW5hbGx5OgorICAqICAgICAgICAgICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAg ICAgICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRlbnRzKCZub2RlcmVzdWx0KSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA1ODAsNyArMTA1ODAsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29t bWFuZChzdHJ1Y3QgX19weXhfbworICAgICAgICAgICAgICAgICAgIG1wdl9mcmVlX25vZGVfY29u dGVudHMoKCZfX3B5eF92X25vZGVyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgfQorIAorLSAg ICAgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTU4CisrICAg ICAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjAKKyAgKiAg ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jb252ZXJ0X25vZGVfdmFsdWUobm9kZXJlc3Vs dCkgaWYgZXJyID49IDAgZWxzZSBOb25lCisgICogICAgICAgICAgICAgICAgIGZpbmFsbHk6Cisg ICogICAgICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTA2MTYsNyArMTA2MTYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbwor ICAgICAgICAgX19weXhfTDEyOjsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjU1MgorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1NTQKKyAgKiAgICAgICAgIHRyeToKKyAgKiAgICAgICAgICAgICBkYXRhX2lkID0g aWQoZGF0YSkKKyAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9ub3VzOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA2MjYsNyArMTA2MjYsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1 Y3QgX19weXhfbworICAgICAgIGdvdG8gX19weXhfTDY7CisgICAgIH0KKyAKKy0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2MQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NTYzCisgICogICAgICAgICAgICAgICAgICAgICAgICAgbXB2X2ZyZWVf bm9kZV9jb250ZW50cygmbm9kZXJlc3VsdCkKKyAgKiAgICAgICAgICAgICBlbHNlOgorICAqICAg ICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lk LCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA2MzQsOSArMTA2MzQs OSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAqICAgICAgICAgICAgICAgICAgICAgX3Jl cGx5X3VzZXJkYXRhc1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEp CisgICovCisgICAgIC8qZWxzZSovIHsKKy0gICAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1NjEsIF9fcHl4X0w0X2Vy cm9yKQorKyAgICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhf dl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8yKSkgX19QWVhfRVJSKDAsIDU2MywgX19weXhfTDRfZXJyb3IpCisgICAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7CistICAgICAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV91 aW50NjRfdChfX3B5eF92X2RhdGFfaWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlY X0VSUigwLCA1NjEsIF9fcHl4X0w0X2Vycm9yKQorKyAgICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5 SW50X0Zyb21fdWludDY0X3QoX19weXhfdl9kYXRhX2lkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8zKTsKKyAgICAgICBfX3B5eF90XzE2ID0gTlVMTDsKKyAgICAgICBfX3B5eF90 XzggPSAwOworQEAgLTEwNjUzLDcgKzEwNjUzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4X28K KyAgICAgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCisgICAgICAgaWYgKFB5RnVuY3Rpb25fQ2hl Y2soX19weXhfdF8yKSkgeworICAgICAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19w eXhfdF8xNiwgX19weXhfdF8zLCBQeV9Ob25lfTsKKy0gICAgICAgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5RnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAy K19fcHl4X3RfOCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2MSwg X19weXhfTDRfZXJyb3IpCisrICAgICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zh c3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfOCwgMitfX3B5eF90XzgpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9y KQorICAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzE2KTsgX19weXhfdF8xNiA9IDA7Cisg ICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworQEAgLTEwNjYyLDE0ICsxMDY2MiwxNCBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29t bWFuZChzdHJ1Y3QgX19weXhfbworICAgICAgICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCisgICAg ICAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7CisgICAgICAg ICBQeU9iamVjdCAqX19weXhfdGVtcFszXSA9IHtfX3B5eF90XzE2LCBfX3B5eF90XzMsIFB5X05v bmV9OworLSAgICAgICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19w eXhfdF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF84LCAyK19fcHl4X3RfOCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU2MSwgX19weXhfTDRfZXJyb3IpCisrICAgICAg ICBfX3B5eF90XzEgPSBfX1B5eF9QeUNGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4 X3RlbXArMS1fX3B5eF90XzgsIDIrX19weXhfdF84KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJvcikKKyAgICAgICAgIF9fUHl4X1hERUNS RUYoX19weXhfdF8xNik7IF9fcHl4X3RfMTYgPSAwOworICAgICAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CisgICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKKyAgICAgICB9IGVsc2UKKyAgICAgICAjZW5kaWYKKyAgICAgICB7CistICAgICAgICBfX3B5 eF90XzE3ID0gUHlUdXBsZV9OZXcoMitfX3B5eF90XzgpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MTcpKSBfX1BZWF9FUlIoMCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKKysgICAgICAgIF9fcHl4X3Rf MTcgPSBQeVR1cGxlX05ldygyK19fcHl4X3RfOCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xNykp IF9fUFlYX0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9yKQorICAgICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMTcpOworICAgICAgICAgaWYgKF9fcHl4X3RfMTYpIHsKKyAgICAgICAgICAgX19Q eXhfR0lWRVJFRihfX3B5eF90XzE2KTsgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzE3LCAwLCBf X3B5eF90XzE2KTsgX19weXhfdF8xNiA9IE5VTEw7CitAQCAtMTA2ODAsNyArMTA2ODAsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84 Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAgICAgICAgX19QeXhfR0lWRVJFRihQeV9Ob25lKTsK KyAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF8xNywgMStfX3B5eF90XzgsIFB5X05v bmUpOworICAgICAgICAgX19weXhfdF8zID0gMDsKKy0gICAgICAgIF9fcHl4X3RfMSA9IF9fUHl4 X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90XzE3LCBOVUxMKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTYxLCBfX3B5eF9MNF9lcnJvcikKKysgICAgICAg IF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90XzE3LCBO VUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTYzLCBfX3B5eF9M NF9lcnJvcikKKyAgICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICAgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMTcpOyBfX3B5eF90XzE3ID0gMDsKKyAgICAgICB9CitAQCAtMTA2 ODgsNyArMTA2ODgsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAgICAgIF9fcHl4X3Zf dXNlcmRhdGFzID0gX19weXhfdF8xOworICAgICAgIF9fcHl4X3RfMSA9IDA7CisgCistICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2MgorKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjQKKyAgKiAgICAgICAgICAgICBlbHNlOgorICAqICAg ICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChkYXRhX2lk LCBOb25lKQorICAqICAgICAgICAgICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEwNjk5LDE0ICsxMDY5OSwxNCBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFu ZChzdHJ1Y3QgX19weXhfbworICAgICAgIF9fcHl4X3RfNSA9IChfX3B5eF90XzYgIT0gMCk7Cisg ICAgICAgaWYgKF9fcHl4X3RfNSkgeworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjU2MworKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjU2NQorICAqICAgICAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJk YXRhLmdldChkYXRhX2lkLCBOb25lKQorICAqICAgICAgICAgICAgICAgICBpZiB1c2VyZGF0YXMg aXMgTm9uZToKKyAgKiAgICAgICAgICAgICAgICAgICAgIF9yZXBseV91c2VyZGF0YXNbZGF0YV9p ZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorICAqICAgICAg ICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgICAgICAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19SZXBseVVzZXJEYXRhKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTYzLCBfX3B5eF9MNF9lcnJvcikKKysgICAgICAg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfUmVwbHlVc2Vy RGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU2NSwgX19weXhf TDRfZXJyb3IpCisgICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgICAgIF9f cHl4X3RfMTcgPSBOVUxMOworICAgICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1 bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAgLTEwNzIwLDE1ICsxMDcy MCwxNSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAgICAgICAgfQorICAgICAgICAgX19w eXhfdF8xID0gKF9fcHl4X3RfMTcpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf MiwgX19weXhfdF8xNywgX19weXhfdl9kYXRhKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmco X19weXhfdF8yLCBfX3B5eF92X2RhdGEpOworICAgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzE3KTsgX19weXhfdF8xNyA9IDA7CistICAgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9yKQorKyAgICAgICAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTY1LCBfX3B5eF9MNF9lcnJvcikKKyAgICAgICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Mik7IF9fcHl4X3RfMiA9IDA7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfU2V0SXRlbUlu dChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92 X2RhdGFfaWQsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0 X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA1NjMsIF9fcHl4X0w0X2Vycm9yKQorKyAg ICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywgX19weXhfdl9kYXRhX2lkLCBfX3B5eF90XzEsIHVp bnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZ WF9FUlIoMCwgNTY1LCBfX3B5eF9MNF9lcnJvcikKKyAgICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzEpOworICAgICAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3VzZXJkYXRhcywgX19w eXhfdF8xKTsKKyAgICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2MgorKyAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2NAorICAqICAgICAgICAg ICAgIGVsc2U6CisgICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNl cmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCisgICogICAgICAgICAgICAgICAgIGlmIHVzZXJkYXRh cyBpcyBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA3MzcsMTQgKzEw NzM3LDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICovCisgICAgICAgfQorIAorLSAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjQKKysgICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY2CisgICogICAgICAgICAgICAgICAgIGlmIHVz ZXJkYXRhcyBpcyBOb25lOgorICAqICAgICAgICAgICAgICAgICAgICAgX3JlcGx5X3VzZXJkYXRh c1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisgICogICAgICAg ICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisg ICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgICAgICAgICBl cnIgPSBtcHZfY29tbWFuZF9ub2RlX2FzeW5jKHNlbGYuX2N0eCwgZGF0YV9pZCwgJm5vZGUpCisg ICovCistICAgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92 X3VzZXJkYXRhcywgX19weXhfbl9zX2FkZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDU2NCwgX19weXhfTDRfZXJyb3IpCisrICAgICAgX19weXhfdF8yID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX2FkZCk7IGlm ICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU2NiwgX19weXhfTDRfZXJyb3Ip CisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICAgICAgX19weXhfdF8xNyA9IE5V TEw7CisgICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2Rf Q2hlY2soX19weXhfdF8yKSkpIHsKK0BAIC0xMDc1OCwxMiArMTA3NTgsMTIgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQo c3RydWN0IF9fcHl4X28KKyAgICAgICB9CisgICAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfMTcp ID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMTcpIDogX19Q eXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7CisgICAgICAgX19QeXhfWERFQ1JFRihf X3B5eF90XzE3KTsgX19weXhfdF8xNyA9IDA7CistICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNTY0LCBfX3B5eF9MNF9lcnJvcikKKysgICAgICBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NjYsIF9fcHl4X0w0X2Vycm9yKQorICAgICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjUK KysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY3CisgICogICAgICAg ICAgICAgICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2RhdGFfaWRdID0gdXNlcmRhdGFzID0gX1Jl cGx5VXNlckRhdGEoZGF0YSkKKyAgKiAgICAgICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCisg ICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xMDc3OCw3ICsxMDc3OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICAg ICAgICAgICNlbmRpZgorICAgICAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2NgorKyAgICAgICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjgKKyAgKiAgICAgICAgICAgICAgICAgdXNlcmRh dGFzLmFkZCgpCisgICogICAgICAgICAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAg ICAgICAgICAgICBlcnIgPSBtcHZfY29tbWFuZF9ub2RlX2FzeW5jKHNlbGYuX2N0eCwgZGF0YV9p ZCwgJm5vZGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMDc4OCw3ICsxMDc4 OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICAgICAgICAgICAgX19weXhfdl9lcnIg PSBtcHZfY29tbWFuZF9ub2RlX2FzeW5jKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9kYXRh X2lkLCAoJl9fcHl4X3Zfbm9kZSkpOworICAgICAgICAgICB9CisgCistICAgICAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NjUKKysgICAgICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjU2NworICAqICAgICAgICAgICAgICAgICAgICAgX3JlcGx5 X3VzZXJkYXRhc1tkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisg ICogICAgICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorICAqICAgICAgICAgICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA4MTAsNyArMTA4 MTAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAgICBfX3B5eF9MNjo7CisgICB9Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTY4CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcwCisgICogICAgICAgICAgICAgICAgICAgICBlcnIg PSBtcHZfY29tbWFuZF9ub2RlX2FzeW5jKHNlbGYuX2N0eCwgZGF0YV9pZCwgJm5vZGUpCisgICog ICAgICAgICBmaW5hbGx5OgorICAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVl KG5vZGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMDgxOSw3ICsxMDgxOSw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisgICovCisgICAvKmZpbmFsbHk6Ki8geworICAg ICAvKm5vcm1hbCBleGl0OioveworLSAgICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9f cHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X25vZGUp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NjgsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJl ZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5eF92X25vZGUpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1NzAsIF9fcHl4X0wxX2Vycm9yKQorICAgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworICAgICAgIGdvdG8gX19weXhfTDU7CitAQCAtMTA4NDQsNyArMTA4NDQs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAgICAgIF9fUHl4X1hHT1RSRUYoX19weXhf dF8xMCk7CisgICAgICAgX19weXhfdF84ID0gX19weXhfbGluZW5vOyBfX3B5eF90XzcgPSBfX3B5 eF9jbGluZW5vOyBfX3B5eF90XzE4ID0gX19weXhfZmlsZW5hbWU7CisgICAgICAgeworLSAgICAg ICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJz XzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92 YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDU2OCwgX19weXhfTDI2X2Vycm9yKQorKyAgICAgICAgX19weXhfdF8x ID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92 X3NlbGYsIF9fcHl4X3Zfbm9kZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDU3MCwgX19weXhfTDI2X2Vycm9yKQorICAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CisgICAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAg ICAgICB9CitAQCAtMTA4NzcsNyArMTA4NzcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84Y29tbWFuZChzdHJ1Y3QgX19weXhfbwor ICAgICBfX3B5eF9MNTo7CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTY5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcxCisgICog ICAgICAgICBmaW5hbGx5OgorICAqICAgICAgICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVl KG5vZGUpCisgICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtMTA4ODcsMTYgKzEwODg3LDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5eF9vCisg ICBfX3B5eF90XzUgPSAoKF9fcHl4X3ZfZXJyIDwgMCkgIT0gMCk7CisgICBpZiAodW5saWtlbHko X19weXhfdF81KSkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTcwCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzIKKyAgKiAgICAg ICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZShub2RlKQorICAqICAgICAgICAgaWYgZXJy IDwgMDoKKyAgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcihlcnIpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHJldHVybiByZXN1bHQKKyAgKiAKKyAgKi8KKy0g ICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19NUFZFcnJv cik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU3MCwgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9u X3NfTVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1NzIs IF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19w eXhfdF8xNyA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzE3KSkgX19QWVhfRVJSKDAsIDU3MCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9f cHl4X3RfMTcgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xNykpIF9fUFlYX0VSUigwLCA1NzIsIF9fcHl4X0wxX2Vycm9yKQorICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xNyk7CisgICAgIF9fcHl4X3RfMyA9IE5VTEw7CisgICAgIGlm IChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhf dF8yKSkpIHsKK0BAIC0xMDkxMSwxNCArMTA5MTEsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4 X28KKyAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFy Z3MoX19weXhfdF8yLCBfX3B5eF90XzMsIF9fcHl4X3RfMTcpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMTcpOworICAgICBfX1B5eF9YREVDUkVGKF9fcHl4 X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzE3KTsgX19w eXhfdF8xNyA9IDA7CistICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDU3MCwgX19weXhfTDFfZXJyb3IpCisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDU3MiwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgICAg X19QeXhfUmFpc2UoX19weXhfdF8xLCAwLCAwLCAwKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fUFlYX0VSUigwLCA1NzAsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX1BZWF9FUlIoMCwgNTcyLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU2OQorKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NTcxCisgICogICAgICAgICBmaW5hbGx5OgorICAqICAgICAgICAg ICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKG5vZGUpCisgICogICAgICAgICBpZiBlcnIgPCAw OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTA5MjcsNyArMTA5MjcsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF84 Y29tbWFuZChzdHJ1Y3QgX19weXhfbworICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjU3MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjU3MworICAqICAgICAgICAgaWYgZXJyIDwgMDoKKyAgKiAgICAgICAgICAgICByYWlzZSBN UFZFcnJvcihlcnIpCisgICogICAgICAgICByZXR1cm4gcmVzdWx0ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC0xMDkzOSw3ICsxMDkzOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0Xzhjb21tYW5kKHN0cnVjdCBfX3B5 eF9vCisgICBfX3B5eF9yID0gX19weXhfdl9yZXN1bHQ7CisgICBnb3RvIF9fcHl4X0wwOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjUzMAorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjUzMgorICAqICAgICAgICAgICAgIGZyZWUobm9kZS51LnN0 cmluZykKKyAgKiAKKyAgKiAgICAgZGVmIGNvbW1hbmQoc2VsZiwgKmNtZGxpc3QsIGFzeW5jaHJv bm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTEwOTY0LDcgKzEwOTY0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfOGNvbW1hbmQoc3RydWN0IF9fcHl4X28KKyAgIHJldHVybiBf X3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTc0Cisr LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU3NgorICAqIAorICAqICAgICBAX2Vy cm9ycworICAqICAgICBkZWYgZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9u ZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTAxMiw3ICsxMTAxMiw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzExZ2V0X3Byb3BlcnR5X2FzeW5jKFB5CisgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGlm ICh1bmxpa2VseShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9Q YXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFs dWVzLCBwb3NfYXJncywgImdldF9wcm9wZXJ0eV9hc3luYyIpIDwgMCkpIF9fUFlYX0VSUigwLCA1 NzQsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0 aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBv c19hcmdzLCAiZ2V0X3Byb3BlcnR5X2FzeW5jIikgPCAwKSkgX19QWVhfRVJSKDAsIDU3NiwgX19w eXhfTDNfZXJyb3IpCisgICAgICAgfQorICAgICB9IGVsc2UgeworICAgICAgIHN3aXRjaCAoUHlU dXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSkgeworQEAgLTExMDI4LDcgKzExMDI4LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTFn ZXRfcHJvcGVydHlfYXN5bmMoUHkKKyAgIH0KKyAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5w YWNraW5nX2RvbmU7CisgICBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlz ZUFyZ3R1cGxlSW52YWxpZCgiZ2V0X3Byb3BlcnR5X2FzeW5jIiwgMCwgMSwgMiwgUHlUdXBsZV9H RVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wzX2Vycm9yKQor KyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoImdldF9wcm9wZXJ0eV9hc3luYyIsIDAsIDEs IDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNTc2LCBfX3B5 eF9MM19lcnJvcikKKyAgIF9fcHl4X0wzX2Vycm9yOjsKKyAgIF9fUHl4X0FkZFRyYWNlYmFjaygi dmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuZ2V0X3Byb3BlcnR5X2FzeW5jIiwgX19weXhfY2xp bmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX1B5eF9SZWZOYW5ueUZp bmlzaENvbnRleHQoKTsKK0BAIC0xMTA2NCw3ICsxMTA2NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2Fz eW5jKHN0CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiZ2V0X3Byb3BlcnR5X2FzeW5j IiwgMCk7CisgICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1ODUKKyAgKiAgICAgICAgIGRhdGE6IFZhbHVlIHRvIGJlIHBhc3NlZCBpbnRvIHRo ZSByZXBseV91c2VyZGF0YSBvZiB0aGUgcmVzcG9uc2UgZXZlbnQuCisgICogICAgICAgICBXcmFw czogbXB2X2dldF9wcm9wZXJ0eV9hc3luYyIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTEwNzUsMTkgKzExMDc1LDE5IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0CisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxh ZykpIHsKKyAgICAgaWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgewor ICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlY X0VSUigwLCA1ODMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA1ODUsIF9f cHl4X0wxX2Vycm9yKQorICAgICB9CisgICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo1ODYKKyAgKiAgICAgICAgIFdyYXBzOiBtcHZfZ2V0X3Byb3BlcnR5X2FzeW5jIiIi CisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBwcm9wID0gX3N0cmVu Yyhwcm9wKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBjZGVmIHVp bnQ2NF90IGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorICAqICAgICAgICAgdXNlcmRh dGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKyAgKi8KKy0gIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTg0LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5j KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTg2LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgX19weXhfdF8zID0gTlVMTDsK KyAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2so X19weXhfdF8yKSkpIHsKK0BAIC0xMTEwMSwzMiArMTExMDEsMzIgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlf YXN5bmMoc3QKKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmpl Y3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3Byb3ApIDogX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfcHJvcCk7CisgICBfX1B5eF9Y REVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIF9fUFlYX0VSUigwLCA1ODQsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3Rf MiA9IDA7CisgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3ZfcHJvcCwgX19weXhfdF8xKTsKKyAg IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTg1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTg3CisgICogICAgICAg ICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKQorICAq ICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5y ZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKyAgKiAgICAgICAgIGlmIHVzZXJkYXRh cyBpcyBOb25lOgorICAqLworLSAgX19weXhfdF80ID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2Rh dGEpOyBpZiAodW5saWtlbHkoX19weXhfdF80ID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VS UigwLCA1ODUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF80ID0gUHlPYmplY3RfSGFzaChf X3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF80ID09ICgoUHlfaGFzaF90KS0xKSkp IF9fUFlYX0VSUigwLCA1ODcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfdl9pZF9kYXRhID0g KCh1aW50NjRfdClfX3B5eF90XzQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU4NgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4OAorICAq ICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKyAgKiAgICAgICAgIGNkZWYgdWludDY0X3Qg aWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisgICogICAgICAgICB1c2VyZGF0YXMgPSBz ZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKKyAgKiAgICAgICAg ICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNl ckRhdGEoZGF0YSkKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDU4NiwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlf dXNlcmRhdGEsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlY X0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7 CistICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfaWRfZGF0 YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDU4NiwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3Zf aWRfZGF0YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDU4OCwgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgIF9fcHl4X3RfNSA9 IE5VTEw7CisgICBfX3B5eF90XzYgPSAwOworQEAgLTExMTQzLDcgKzExMTQzLDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRf cHJvcGVydHlfYXN5bmMoc3QKKyAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKyAgIGlmIChQeUZ1 bmN0aW9uX0NoZWNrKF9fcHl4X3RfMikpIHsKKyAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10g PSB7X19weXhfdF81LCBfX3B5eF90XzMsIFB5X05vbmV9OworLSAgICBfX3B5eF90XzEgPSBfX1B5 eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwg MitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODYs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RD YWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQor ICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKK0BAIC0xMTE1MiwxNCArMTExNTIsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlfYXN5bmMo c3QKKyAgICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCisgICBpZiAoX19QeXhfUHlGYXN0Q0Z1bmN0 aW9uX0NoZWNrKF9fcHl4X3RfMikpIHsKKyAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7 X19weXhfdF81LCBfX3B5eF90XzMsIFB5X05vbmV9OworLSAgICBfX3B5eF90XzEgPSBfX1B5eF9Q eUNGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90XzYsIDIr X19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg2LCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENh bGwoX19weXhfdF8yLCBfX3B5eF90ZW1wKzEtX19weXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDU4OCwgX19weXhfTDFfZXJyb3IpCisg ICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKyAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90 XzMgPSAwOworICAgfSBlbHNlCisgICAjZW5kaWYKKyAgIHsKKy0gICAgX19weXhfdF83ID0gUHlU dXBsZV9OZXcoMitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VS UigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygy K19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDU4OCwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworICAgICBpZiAo X19weXhfdF81KSB7CisgICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzUpOyBQeVR1cGxlX1NF VF9JVEVNKF9fcHl4X3RfNywgMCwgX19weXhfdF81KTsgX19weXhfdF81ID0gTlVMTDsKK0BAIC0x MTE3MCw3ICsxMTE3MCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0CisgICAgIF9fUHl4X0dJ VkVSRUYoUHlfTm9uZSk7CisgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4 X3RfNiwgUHlfTm9uZSk7CisgICAgIF9fcHl4X3RfMyA9IDA7CistICAgIF9fcHl4X3RfMSA9IF9f UHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMiwgX19weXhfdF83LCBOVUxM KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg4LCBfX3B5eF9MMV9l cnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworICAgfQorQEAgLTExMTc4LDcgKzExMTc4LDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MTBnZXRfcHJvcGVydHlfYXN5bmMoc3QKKyAgIF9fcHl4X3ZfdXNlcmRhdGFzID0gX19weXhfdF8x OworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo1ODcKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODkKKyAgKiAg ICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisgICog ICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25l KQorICAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC0xMTE4OSwxNCArMTExODksMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTBnZXRfcHJvcGVydHlfYXN5bmMo c3QKKyAgIF9fcHl4X3RfOSA9IChfX3B5eF90XzggIT0gMCk7CisgICBpZiAoX19weXhfdF85KSB7 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1ODgKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MAorICAqICAgICAgICAgdXNlcmRhdGFz ID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKyAgKiAgICAgICAgIGlm IHVzZXJkYXRhcyBpcyBOb25lOgorICAqICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFb aWRfZGF0YV0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICB1c2VyZGF0YXMuYWRkKCkKKyAgKiAgICAgICAg IGNkZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAorICAqLworLSAgICBfX1B5eF9HZXRNb2R1 bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX1JlcGx5VXNlckRhdGEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQorKyAg ICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX1JlcGx5VXNl ckRhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA1OTAsIF9fcHl4 X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19weXhfdF83 ID0gTlVMTDsKKyAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAgLTExMjEwLDE1ICsxMTIxMCwxNSBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMGdl dF9wcm9wZXJ0eV9hc3luYyhzdAorICAgICB9CisgICAgIF9fcHl4X3RfMSA9IChfX3B5eF90Xzcp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF83LCBfX3B5eF92 X2RhdGEpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfZGF0 YSk7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gICAg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTg4LCBfX3B5eF9MMV9lcnJv cikKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTkwLCBfX3B5 eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBpZiAodW5saWtlbHkoX19QeXhf U2V0SXRlbUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2lkX2RhdGEs IF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAs IDEpIDwgMCkpIF9fUFlYX0VSUigwLCA1ODgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAodW5s aWtlbHkoX19QeXhfU2V0SXRlbUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5 eF92X2lkX2RhdGEsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21fdWlu dDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA1OTAsIF9fcHl4X0wxX2Vycm9yKQor ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKyAgICAgX19QeXhfREVDUkVGX1NFVChfX3B5 eF92X3VzZXJkYXRhcywgX19weXhfdF8xKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo1ODcKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4OQorICAqICAg ICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKyAgKiAg ICAgICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUp CisgICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTExMjI3LDE0ICsxMTIyNywxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xMGdldF9wcm9wZXJ0eV9hc3luYyhz dAorICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU4 OQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MQorICAqICAgICAgICAg aWYgdXNlcmRhdGFzIGlzIE5vbmU6CisgICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisgICogICAgICAg ICB1c2VyZGF0YXMuYWRkKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAg ICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wCisgICogICAgICAgICB3aXRoIG5vZ2ls OgorICAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92 X3VzZXJkYXRhcywgX19weXhfbl9zX2FkZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDU4OSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3NfYWRkKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNTkxLCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgX19weXhfdF83ID0gTlVMTDsKKyAgIGlmIChD WVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikp KSB7CitAQCAtMTEyNDgsMjIgKzExMjQ4LDIyIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0Cisg ICB9CisgICBfX3B5eF90XzEgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF8yLCBfX3B5eF90XzcpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4 X3RfMik7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA1ODksIF9fcHl4X0wxX2Vycm9y KQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNTkxLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OTAK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1OTIKKyAgKiAgICAgICAgICAg ICBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdID0gdXNlcmRhdGFzID0gX1JlcGx5VXNlckRh dGEoZGF0YSkKKyAgKiAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorICAqICAgICAgICAgY2RlZiBj b25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAg KiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9w ZXJ0eV9hc3luYygKKyAgKi8KKy0gIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmlu ZyhfX3B5eF92X3Byb3ApOyBpZiAodW5saWtlbHkoKCFfX3B5eF90XzEwKSAmJiBQeUVycl9PY2N1 cnJlZCgpKSkgX19QWVhfRVJSKDAsIDU5MCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEw ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCgh X19weXhfdF8xMCkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA1OTIsIF9fcHl4 X0wxX2Vycm9yKQorICAgX19weXhfdl9wcm9wX2MgPSBfX3B5eF90XzEwOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjU5MworICAqICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCisgICogICAgICAg ICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AKKyAgKiAgICAgICAgIHdpdGggbm9naWw6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTI3OCw3ICsxMTI3OCw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEw Z2V0X3Byb3BlcnR5X2FzeW5jKHN0CisgICAgICAgI2VuZGlmCisgICAgICAgLyp0cnk6Ki8gewor IAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5MgorKyAgICAg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5NAorICAqICAgICAgICAgY2Rl ZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBwcm9wCisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAq ICAgICAgICAgICAgIGVyciA9IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMoICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xMTI4OCw3ICsxMTI4OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2Fz eW5jKHN0CisgICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9nZXRfcHJvcGVydHlfYXN5bmMoX19w eXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2lkX2RhdGEsIF9fcHl4X3ZfcHJvcF9jLCBNUFZfRk9S TUFUX05PREUpOworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NTkxCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU5 MworICAqICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCisgICogICAgICAgICBjZGVmIGNvbnN0IGNo YXIqIHByb3BfYyA9IHByb3AKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xMTMwNyw3ICsxMTMwNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2Fz eW5jKHN0CisgICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjU5OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwMAorICAq ICAgICAgICAgICAgICAgICBNUFZfRk9STUFUX05PREUsCisgICogICAgICAgICAgICAgKQorICAq ICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTEz MTUsMTMgKzExMzE1LDEzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzEwZ2V0X3Byb3BlcnR5X2FzeW5jKHN0CisgICogICAgIGRlZiB0 cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25l KToKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzEgPSBfX1B5 eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDU5OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9Q eUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDYwMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKyAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworICAgZ290byBf X3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzQKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NzYKKyAgKiAKKyAgKiAgICAgQF9l cnJvcnMKKyAgKiAgICAgZGVmIGdldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBkYXRhPU5v bmUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTEzNDYsNyArMTEzNDYsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xMGdldF9wcm9wZXJ0eV9hc3luYyhzdAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDAKKysvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjAyCisgICogICAgICAgICByZXR1cm4gZXJyCisgICogCisgICogICAg IGRlZiB0cnlfZ2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVs dD1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTExNDAzLDcgKzExNDAz LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMTN0cnlfZ2V0X3Byb3BlcnR5X2FzeW4KKyAgICAgICAgIH0KKyAgICAgICB9CisgICAg ICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5KF9f UHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAw LCB2YWx1ZXMsIHBvc19hcmdzLCAidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIpIDwgMCkpIF9fUFlY X0VSUigwLCA2MDAsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4 X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2 YWx1ZXMsIHBvc19hcmdzLCAidHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIpIDwgMCkpIF9fUFlYX0VS UigwLCA2MDIsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKyAgICAg ICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpIHsKK0BAIC0xMTQyMiw3ICsx MTQyMiw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzEzdHJ5X2dldF9wcm9wZXJ0eV9hc3luCisgICB9CisgICBnb3RvIF9fcHl4X0w0 X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6Owor LSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInRyeV9nZXRfcHJvcGVydHlfYXN5bmMiLCAw LCAxLCAzLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDYwMCwg X19weXhfTDNfZXJyb3IpCisrICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgidHJ5X2dldF9w cm9wZXJ0eV9hc3luYyIsIDAsIDEsIDMsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBf X1BZWF9FUlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKKyAgIF9fcHl4X0wzX2Vycm9yOjsKKyAg IF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQudHJ5X2dldF9w cm9wZXJ0eV9hc3luYyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CitAQCAtMTE0NTEsNyArMTE0 NTEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8xMnRyeV9nZXRfcHJvcGVydHlfYXN5bgorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAw OworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInRyeV9nZXRfcHJvcGVydHlfYXN5bmMi LCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDEKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDMKKyAgKiAKKyAgKiAgICAgZGVmIHRy eV9nZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwgcHJvcCwgZGF0YT1Ob25lLCBkZWZhdWx0PU5vbmUp OgorICAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTE0 NjcsNyArMTE0NjcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8xMnRyeV9nZXRfcHJvcGVydHlfYXN5bgorICAgICBfX1B5eF9YR09U UkVGKF9fcHl4X3RfMyk7CisgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjAyCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjYwNAorICAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBw cm9wLCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CisgICogICAgICAgICB0cnk6CisgICogICAg ICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3Byb3BlcnR5X2FzeW5jKHByb3AsIGRhdGE9ZGF0YSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTExNDc1LDE3ICsxMTQ3NSwxNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8x MnRyeV9nZXRfcHJvcGVydHlfYXN5bgorICAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Cisg ICovCisgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gICAgICBfX3B5eF90XzQgPSBf X1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5 eF9uX3NfZ2V0X3Byb3BlcnR5X2FzeW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKKysgICAgICBfX3B5eF90XzQgPSBfX1B5eF9Q eU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3Nf Z2V0X3Byb3BlcnR5X2FzeW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIo MCwgNjA0LCBfX3B5eF9MM19lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsK Ky0gICAgICBfX3B5eF90XzUgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzUpKSBfX1BZWF9FUlIoMCwgNjAyLCBfX3B5eF9MM19lcnJvcikKKysgICAgICBfX3B5eF90XzUg PSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwg NjA0LCBfX3B5eF9MM19lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKyAg ICAgICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKKyAgICAgICBfX1B5eF9HSVZFUkVGKF9f cHl4X3ZfcHJvcCk7CisgICAgICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzUsIDAsIF9fcHl4 X3ZfcHJvcCk7CistICAgICAgX19weXhfdF82ID0gX19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA2MDIsIF9fcHl4X0wzX2Vy cm9yKQorKyAgICAgIF9fcHl4X3RfNiA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgxKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNjA0LCBfX3B5eF9MM19lcnJvcikK KyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gICAgICBpZiAoUHlEaWN0X1NldEl0 ZW0oX19weXhfdF82LCBfX3B5eF9uX3NfZGF0YSwgX19weXhfdl9kYXRhKSA8IDApIF9fUFlYX0VS UigwLCA2MDIsIF9fcHl4X0wzX2Vycm9yKQorLSAgICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5T2Jq ZWN0X0NhbGwoX19weXhfdF80LCBfX3B5eF90XzUsIF9fcHl4X3RfNik7IGlmICh1bmxpa2VseSgh X19weXhfdF83KSkgX19QWVhfRVJSKDAsIDYwMiwgX19weXhfTDNfZXJyb3IpCisrICAgICAgaWYg KFB5RGljdF9TZXRJdGVtKF9fcHl4X3RfNiwgX19weXhfbl9zX2RhdGEsIF9fcHl4X3ZfZGF0YSkg PCAwKSBfX1BZWF9FUlIoMCwgNjA0LCBfX3B5eF9MM19lcnJvcikKKysgICAgICBfX3B5eF90Xzcg PSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfNCwgX19weXhfdF81LCBfX3B5eF90XzYpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA2MDQsIF9fcHl4X0wzX2Vycm9y KQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworICAgICAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUp OyBfX3B5eF90XzUgPSAwOworQEAgLTExNDk0LDcgKzExNDk0LDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0cnlfZ2V0X3Byb3Bl cnR5X2FzeW4KKyAgICAgICBfX3B5eF90XzcgPSAwOworICAgICAgIGdvdG8gX19weXhfTDdfdHJ5 X3JldHVybjsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjAx CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwMworICAqIAorICAq ICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9wLCBkYXRhPU5vbmUsIGRl ZmF1bHQ9Tm9uZSk6CisgICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xMTUwOCw3ICsxMTUwOCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEydHJ5X2dldF9wcm9wZXJ0eV9hc3luCisgICAg IF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAgICAgX19QeXhfWERF Q1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NjAzCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo2MDUKKyAgKiAgICAgICAgIHRyeToKKyAgKiAgICAgICAgICAgICByZXR1cm4gc2VsZi5n ZXRfcHJvcGVydHlfYXN5bmMocHJvcCwgZGF0YT1kYXRhKQorICAqICAgICAgICAgZXhjZXB0IE1Q VkVycm9yOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTE1MTYsNyArMTE1MTYs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8xMnRyeV9nZXRfcHJvcGVydHlfYXN5bgorICAqIAorICAqLworICAgICBfX1B5eF9FcnJG ZXRjaCgmX19weXhfdF83LCAmX19weXhfdF82LCAmX19weXhfdF81KTsKKy0gICAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDYwMywgX19weXhfTDVfZXhjZXB0X2Vycm9y KQorKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX01Q VkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNjA1LCBfX3B5 eF9MNV9leGNlcHRfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgICBf X3B5eF90XzggPSBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoX19weXhfdF83LCBf X3B5eF90XzQpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsK K0BAIC0xMTUyNCwxMiArMTE1MjQsMTIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0cnlfZ2V0X3Byb3BlcnR5X2FzeW4KKyAgICAg X19weXhfdF83ID0gMDsgX19weXhfdF82ID0gMDsgX19weXhfdF81ID0gMDsKKyAgICAgaWYgKF9f cHl4X3RfOCkgeworICAgICAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2 LkNvbnRleHQudHJ5X2dldF9wcm9wZXJ0eV9hc3luYyIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xp bmVubywgX19weXhfZmlsZW5hbWUpOworLSAgICAgIGlmIChfX1B5eF9HZXRFeGNlcHRpb24oJl9f cHl4X3RfNSwgJl9fcHl4X3RfNiwgJl9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwgNjAzLCBf X3B5eF9MNV9leGNlcHRfZXJyb3IpCisrICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlvbigmX19w eXhfdF81LCAmX19weXhfdF82LCAmX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2MDUsIF9f cHl4X0w1X2V4Y2VwdF9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKyAg ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF83KTsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA0Cisr ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYwNgorICAqICAgICAgICAg ICAgIHJldHVybiBzZWxmLmdldF9wcm9wZXJ0eV9hc3luYyhwcm9wLCBkYXRhPWRhdGEpCisgICog ICAgICAgICBleGNlcHQgTVBWRXJyb3I6CisgICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTExNTQ3LDcgKzExNTQ3LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0 cnlfZ2V0X3Byb3BlcnR5X2FzeW4KKyAgICAgZ290byBfX3B5eF9MNV9leGNlcHRfZXJyb3I7Cisg ICAgIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcjo7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2MDEKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjYwMworICAqIAorICAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eV9hc3luYyhzZWxmLCBwcm9w LCBkYXRhPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CisgICogICAgICAgICB0cnk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTU3Myw3ICsxMTU3Myw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzEydHJ5X2dldF9wcm9w ZXJ0eV9hc3luCisgICAgIGdvdG8gX19weXhfTDA7CisgICB9CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjAwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NjAyCisgICogICAgICAgICByZXR1cm4gZXJyCisgICogCisgICogICAgIGRlZiB0cnlf Z2V0X3Byb3BlcnR5X2FzeW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSwgZGVmYXVsdD1Ob25lKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTExNTk1LDcgKzExNTk1LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTJ0 cnlfZ2V0X3Byb3BlcnR5X2FzeW4KKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA2CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjYwOAorICAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICogCisgICog ICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTY0Miw3ICsxMTY0Miw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE1dHJ5X2dl dF9wcm9wZXJ0eShQeU9iCisgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGlmICh1bmxpa2Vs eShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlv bmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3Nf YXJncywgInRyeV9nZXRfcHJvcGVydHkiKSA8IDApKSBfX1BZWF9FUlIoMCwgNjA2LCBfX3B5eF9M M19lcnJvcikKKysgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29y ZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInRy eV9nZXRfcHJvcGVydHkiKSA8IDApKSBfX1BZWF9FUlIoMCwgNjA4LCBfX3B5eF9MM19lcnJvcikK KyAgICAgICB9CisgICAgIH0gZWxzZSB7CisgICAgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpF KF9fcHl4X2FyZ3MpKSB7CitAQCAtMTE2NTgsNyArMTE2NTgsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNXRyeV9nZXRfcHJvcGVy dHkoUHlPYgorICAgfQorICAgZ290byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsK KyAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZh bGlkKCJ0cnlfZ2V0X3Byb3BlcnR5IiwgMCwgMSwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSk7IF9fUFlYX0VSUigwLCA2MDYsIF9fcHl4X0wzX2Vycm9yKQorKyAgX19QeXhfUmFpc2VB cmd0dXBsZUludmFsaWQoInRyeV9nZXRfcHJvcGVydHkiLCAwLCAxLCAyLCBQeVR1cGxlX0dFVF9T SVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDYwOCwgX19weXhfTDNfZXJyb3IpCisgICBf X3B5eF9MM19lcnJvcjo7CisgICBfX1B5eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1w di5Db250ZXh0LnRyeV9nZXRfcHJvcGVydHkiLCBfX3B5eF9jbGluZW5vLCBfX3B5eF9saW5lbm8s IF9fcHl4X2ZpbGVuYW1lKTsKKyAgIF9fUHl4X1JlZk5hbm55RmluaXNoQ29udGV4dCgpOworQEAg LTExNjg3LDcgKzExNjg3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0cnUKKyAgIGludCBfX3B5 eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJ0cnlfZ2V0X3By b3BlcnR5IiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA3 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA5CisgICogCisgICogICAg IGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9uZSk6CisgICogICAg ICAgICB0cnk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTcwMyw3ICsxMTcw Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzE0dHJ5X2dldF9wcm9wZXJ0eShzdHJ1CisgICAgIF9fUHl4X1hHT1RSRUYoX19weXhf dF8zKTsKKyAgICAgLyp0cnk6Ki8geworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo2MDgKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NjEwCisgICogICAgIGRlZiB0cnlfZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRlZmF1bHQ9Tm9u ZSk6CisgICogICAgICAgICB0cnk6CisgICogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3By b3BlcnR5KHByb3ApICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMTcxMSw3ICsx MTcxMSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzE0dHJ5X2dldF9wcm9wZXJ0eShzdHJ1CisgICogICAgICAgICAgICAgcmV0dXJu IGRlZmF1bHQKKyAgKi8KKyAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgICAgIF9f cHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zf c2VsZiksIF9fcHl4X25fc19nZXRfcHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkp IF9fUFlYX0VSUigwLCA2MDgsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgIF9fcHl4X3RfNSA9IF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4 X25fc19nZXRfcHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigw LCA2MTAsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOwor ICAgICAgIF9fcHl4X3RfNiA9IE5VTEw7CisgICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9E UyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF81KSkpIHsKK0BAIC0xMTcyNSwxNCAr MTE3MjUsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0cnUKKyAgICAgICB9CisgICAgICAgX19w eXhfdF80ID0gKF9fcHl4X3RfNikgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF81 LCBfX3B5eF90XzYsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9f cHl4X3RfNSwgX19weXhfdl9wcm9wKTsKKyAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNik7 IF9fcHl4X3RfNiA9IDA7CistICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9F UlIoMCwgNjA4LCBfX3B5eF9MM19lcnJvcikKKysgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCA2MTAsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzQpOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUg PSAwOworICAgICAgIF9fcHl4X3IgPSBfX3B5eF90XzQ7CisgICAgICAgX19weXhfdF80ID0gMDsK KyAgICAgICBnb3RvIF9fcHl4X0w3X3RyeV9yZXR1cm47CisgCistICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjYwNworKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo2MDkKKyAgKiAKKyAgKiAgICAgZGVmIHRyeV9nZXRfcHJvcGVydHkoc2VsZiwg cHJvcCwgZGVmYXVsdD1Ob25lKToKKyAgKiAgICAgICAgIHRyeTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTExNzQ1LDcgKzExNzQ1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0 cnUKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworICAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjYxMQorICAqICAgICAgICAgdHJ5OgorICAqICAgICAgICAgICAgIHJldHVy biBzZWxmLmdldF9wcm9wZXJ0eShwcm9wKQorICAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTE3NTMsNyArMTE3NTMsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNHRy eV9nZXRfcHJvcGVydHkoc3RydQorICAqIAorICAqLworICAgICBfX1B5eF9FcnJGZXRjaCgmX19w eXhfdF80LCAmX19weXhfdF81LCAmX19weXhfdF82KTsKKy0gICAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzcsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19w eXhfdF83KSkgX19QWVhfRVJSKDAsIDYwOSwgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorKyAgICBf X1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNywgX19weXhfbl9zX01QVkVycm9yKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNjExLCBfX3B5eF9MNV9leGNl cHRfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworICAgICBfX3B5eF90Xzgg PSBfX1B5eF9QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoX19weXhfdF80LCBfX3B5eF90Xzcp OworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKK0BAIC0xMTc2 MSwxMiArMTE3NjEsMTIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMTR0cnlfZ2V0X3Byb3BlcnR5KHN0cnUKKyAgICAgX19weXhfdF80 ID0gMDsgX19weXhfdF81ID0gMDsgX19weXhfdF82ID0gMDsKKyAgICAgaWYgKF9fcHl4X3RfOCkg eworICAgICAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQu dHJ5X2dldF9wcm9wZXJ0eSIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmls ZW5hbWUpOworLSAgICAgIGlmIChfX1B5eF9HZXRFeGNlcHRpb24oJl9fcHl4X3RfNiwgJl9fcHl4 X3RfNSwgJl9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgNjA5LCBfX3B5eF9MNV9leGNlcHRf ZXJyb3IpCisrICAgICAgaWYgKF9fUHl4X0dldEV4Y2VwdGlvbigmX19weXhfdF82LCAmX19weXhf dF81LCAmX19weXhfdF80KSA8IDApIF9fUFlYX0VSUigwLCA2MTEsIF9fcHl4X0w1X2V4Y2VwdF9l cnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAgICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF81KTsKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAKKy0gICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjEwCisrICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYxMgorICAqICAgICAgICAgICAgIHJldHVybiBzZWxm LmdldF9wcm9wZXJ0eShwcm9wKQorICAqICAgICAgICAgZXhjZXB0IE1QVkVycm9yOgorICAqICAg ICAgICAgICAgIHJldHVybiBkZWZhdWx0ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xMTc4NCw3ICsxMTc4NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzE0dHJ5X2dldF9wcm9wZXJ0eShzdHJ1CisgICAgIGdvdG8g X19weXhfTDVfZXhjZXB0X2Vycm9yOworICAgICBfX3B5eF9MNV9leGNlcHRfZXJyb3I6OworIAor LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjA3CisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDkKKyAgKiAKKyAgKiAgICAgZGVmIHRyeV9nZXRf cHJvcGVydHkoc2VsZiwgcHJvcCwgZGVmYXVsdD1Ob25lKToKKyAgKiAgICAgICAgIHRyeTogICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTExODEwLDcgKzExODEwLDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTR0cnlf Z2V0X3Byb3BlcnR5KHN0cnUKKyAgICAgZ290byBfX3B5eF9MMDsKKyAgIH0KKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MDYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2MDgKKyAgKiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAqIAor ICAqICAgICBkZWYgdHJ5X2dldF9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkZWZhdWx0PU5vbmUpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTE4MzIsNyArMTE4MzIsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNHRy eV9nZXRfcHJvcGVydHkoc3RydQorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MTIKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjE0CisgICogICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgKiAKKyAgKiAg ICAgZGVmIGdldF9wcm9wZXJ0eShzZWxmLCBwcm9wKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTExODgyLDcgKzExODgyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KKyAg IF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJnZXRfcHJvcGVydHkiLCAwKTsKKyAgIF9fUHl4 X0lOQ1JFRihfX3B5eF92X3Byb3ApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYxNAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYxNgorICAq ICAgICBkZWYgZ2V0X3Byb3BlcnR5KHNlbGYsIHByb3ApOgorICAqICAgICAgICAgIiIiV3JhcHM6 IG1wdl9nZXRfcHJvcGVydHkiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTExODkzLDE5ICsxMTg5MywxOSBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNmdldF9w cm9wZXJ0eShzdHJ1Y3QgXworICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Cisg ICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKyAgICAgICBQ eUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIoMCwg NjE0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1BZWF9FUlIoMCwgNjE2LCBfX3B5eF9MMV9l cnJvcikKKyAgICAgfQorICAgfQorICAgI2VuZGlmCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjE2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NjE4CisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBjZGVmIG1wdl9u b2RlIHJlc3VsdAorICAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MgPSBw cm9wCisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgNjE2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nfc3RyZW5jKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNjE4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzIpOworICAgX19weXhfdF8zID0gTlVMTDsKKyAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsK K0BAIC0xMTkxOSwyMyArMTE5MTksMjMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgIH0K KyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9f cHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3Byb3ApIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfcHJvcCk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Myk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA2MTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgNjE4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgICBfX1B5 eF9ERUNSRUZfU0VUKF9fcHl4X3ZfcHJvcCwgX19weXhfdF8xKTsKKyAgIF9fcHl4X3RfMSA9IDA7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjE3CisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjE5CisgICogICAgICAgICBjZGVmIG1wdl9ub2Rl IHJlc3VsdAorICAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKyAgKiAgICAgICAgIGNk ZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICov CistICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X3Byb3ApOyBp ZiAodW5saWtlbHkoKCFfX3B5eF90XzQpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIo MCwgNjE3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0Fz U3RyaW5nKF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNCkgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA2MTksIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhf dl9wcm9wX2MgPSBfX3B5eF90XzQ7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NjE5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjIxCisgICog ICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYyA9IHByb3AKKyAgKiAgICAgICAgIGNkZWYg aW50IGVycgorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTExOTUwLDcgKzExOTUwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KKyAg ICAgICAjZW5kaWYKKyAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjIwCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NjIyCisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAgICAgICAgIHdp dGggbm9naWw6CisgICogICAgICAgICAgICAgZXJyID0gbXB2X2dldF9wcm9wZXJ0eSggICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTExOTYwLDcgKzExOTYwLDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJv cGVydHkoc3RydWN0IF8KKyAgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X2dldF9wcm9wZXJ0eShf X3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcHJvcF9jLCBNUFZfRk9STUFUX05PREUsICgmX19w eXhfdl9yZXN1bHQpKTsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjYxOQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo2MjEKKyAgKiAgICAgICAgIGNkZWYgY29uc3QgY2hhciogcHJvcF9jID0gcHJvcAorICAqICAg ICAgICAgY2RlZiBpbnQgZXJyCisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMTE5NzksNyArMTE5NzksNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNmdldF9wcm9wZXJ0eShz dHJ1Y3QgXworICAgICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo2MjYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjgKKyAg KiAgICAgICAgICAgICAgICAgJnJlc3VsdCwKKyAgKiAgICAgICAgICAgICApCisgICogICAgICAg ICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTE5ODksMTYg KzExOTg5LDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICBfX3B5eF90XzUgPSAoKF9f cHl4X3ZfZXJyIDwgMCkgIT0gMCk7CisgICBpZiAodW5saWtlbHkoX19weXhfdF81KSkgeworIAor LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjI3CisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjkKKyAgKiAgICAgICAgICAgICApCisgICogICAg ICAgICBpZiBlcnIgPCAwOgorICAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgdHJ5OgorICAqICAgICAgICAg ICAgIHYgPSBfY29udmVydF9ub2RlX3ZhbHVlKHJlc3VsdCkKKyAgKi8KKy0gICAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDYyNywgX19weXhfTDFfZXJyb3IpCisrICAg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfTVBWRXJyb3Ip OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2MjksIF9fcHl4X0wxX2Vy cm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF8zID0gX19Q eXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykp IF9fUFlYX0VSUigwLCA2MjcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzMgPSBfX1B5 eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkg X19QWVhfRVJSKDAsIDYyOSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzMpOworICAgICBfX3B5eF90XzYgPSBOVUxMOworICAgICBpZiAoQ1lUSE9OX1VOUEFDS19N RVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CitAQCAtMTIw MTMsMTQgKzEyMDEzLDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICAgIF9fcHl4X3Rf MSA9IChfX3B5eF90XzYpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19w eXhfdF82LCBfX3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIs IF9fcHl4X3RfMyk7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICAgIGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYyNywgX19weXhfTDFfZXJyb3Ip CisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYyOSwgX19weXhf TDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9ERUNS RUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgICAgX19QeXhfUmFpc2UoX19weXhfdF8x LCAwLCAwLCAwKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7 CistICAgIF9fUFlYX0VSUigwLCA2MjcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1BZWF9FUlIo MCwgNjI5LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjYyNgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjI4 CisgICogICAgICAgICAgICAgICAgICZyZXN1bHQsCisgICogICAgICAgICAgICAgKQorICAqICAg ICAgICAgaWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEyMDI5 LDcgKzEyMDI5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgKi8KKyAgIH0KKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MjgKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MzAKKyAgKiAgICAgICAgIGlmIGVyciA8IDA6CisgICogICAg ICAgICAgICAgcmFpc2UgTVBWRXJyb3IoZXJyKQorICAqICAgICAgICAgdHJ5OiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTIwMzgsMjAgKzEyMDM4LDIwIEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE2Z2V0X3Byb3Bl cnR5KHN0cnVjdCBfCisgICovCisgICAvKnRyeToqLyB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2MjkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjYzMQorICAqICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKyAgKiAgICAg ICAgIHRyeToKKyAgKiAgICAgICAgICAgICB2ID0gX2NvbnZlcnRfbm9kZV92YWx1ZShyZXN1bHQp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGZpbmFsbHk6CisgICog ICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gICAgX19weXhfdF8xID0gX19weXhfZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NvbnZlcnRfbm9kZV92YWx1ZShfX3B5eF92X3Jlc3VsdCk7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDYyOSwgX19weXhfTDhfZXJy b3IpCisrICAgIF9fcHl4X3RfMSA9IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jb252 ZXJ0X25vZGVfdmFsdWUoX19weXhfdl9yZXN1bHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA2MzEsIF9fcHl4X0w4X2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF8xKTsKKyAgICAgX19weXhfdl92ID0gX19weXhfdF8xOworICAgICBfX3B5eF90XzEgPSAw OworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzMQorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzMworICAqICAgICAgICAgICAgIHYg PSBfY29udmVydF9ub2RlX3ZhbHVlKHJlc3VsdCkKKyAgKiAgICAgICAgIGZpbmFsbHk6CisgICog ICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTEyMDY4LDcgKzEyMDY4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgICAgICAgICAg I2VuZGlmCisgICAgICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMyCisrICAgICAgICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjYzNAorICAqICAgICAgICAgZmluYWxseToKKyAgKiAgICAgICAg ICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgICAgICBtcHZfZnJlZV9ub2RlX2NvbnRl bnRzKCZyZXN1bHQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMjA3OCw3ICsx MjA3OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICAgICAgICAgICAgbXB2X2ZyZWVf bm9kZV9jb250ZW50cygoJl9fcHl4X3ZfcmVzdWx0KSk7CisgICAgICAgICAgIH0KKyAKKy0gICAg ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzMQorKyAgICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMzCisgICogICAgICAgICAgICAgdiA9 IF9jb252ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQorICAqICAgICAgICAgZmluYWxseToKKyAgKiAg ICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MTIxMjUsNyArMTIxMjUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8xNmdldF9wcm9wZXJ0eShzdHJ1Y3QgXworICAgICAgICAgICAg ICNlbmRpZgorICAgICAgICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgICAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzIKKysgICAgICAgICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzQKKyAgKiAgICAgICAgIGZpbmFsbHk6CisgICog ICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVfbm9k ZV9jb250ZW50cygmcmVzdWx0KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTIx MzUsNyArMTIxMzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8xNmdldF9wcm9wZXJ0eShzdHJ1Y3QgXworICAgICAgICAgICAgICAg bXB2X2ZyZWVfbm9kZV9jb250ZW50cygoJl9fcHl4X3ZfcmVzdWx0KSk7CisgICAgICAgICAgICAg fQorIAorLSAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzEK KysgICAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjMzCisgICog ICAgICAgICAgICAgdiA9IF9jb252ZXJ0X25vZGVfdmFsdWUocmVzdWx0KQorICAqICAgICAgICAg ZmluYWxseToKKyAgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CitAQCAtMTIxNzEsNyArMTIxNzEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xNmdldF9wcm9wZXJ0eShzdHJ1Y3Qg XworICAgICBfX3B5eF9MOTo7CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NjMzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjM1Cisg ICogICAgICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICAgICAgbXB2X2ZyZWVf bm9kZV9jb250ZW50cygmcmVzdWx0KQorICAqICAgICAgICAgcmV0dXJuIHYgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTEyMTgzLDcgKzEyMTgzLDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTZnZXRfcHJvcGVydHko c3RydWN0IF8KKyAgIF9fcHl4X3IgPSBfX3B5eF92X3Y7CisgICBnb3RvIF9fcHl4X0wwOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYxMgorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjYxNAorICAqICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0 CisgICogCisgICogICAgIGRlZiBnZXRfcHJvcGVydHkoc2VsZiwgcHJvcCk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMjIwNyw3ICsxMjIwNyw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE2Z2V0X3Byb3BlcnR5 KHN0cnVjdCBfCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjYzNgorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 MzgKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAgICAgZGVmIHNldF9wcm9wZXJ0eShzZWxm LCBwcm9wLCB2YWx1ZT1UcnVlLCBhc3luY2hyb25vdXM9RmFsc2UsIGRhdGE9Tm9uZSk6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMjI3NSw3ICsxMjI3NSw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE5c2V0X3By b3BlcnR5KFB5T2JqZWN0CisgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGlmICh1bmxpa2Vs eShrd19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlv bmFsS2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3Nf YXJncywgInNldF9wcm9wZXJ0eSIpIDwgMCkpIF9fUFlYX0VSUigwLCA2MzYsIF9fcHl4X0wzX2Vy cm9yKQorKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3Jkcyhf X3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0X3By b3BlcnR5IikgPCAwKSkgX19QWVhfRVJSKDAsIDYzOCwgX19weXhfTDNfZXJyb3IpCisgICAgICAg fQorICAgICB9IGVsc2UgeworICAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSkgeworQEAgLTEyMjk3LDcgKzEyMjk3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w d185dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMTlzZXRfcHJvcGVydHkoUHlPYmplY3QK KyAgIH0KKyAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CisgICBfX3B5 eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgic2V0 X3Byb3BlcnR5IiwgMCwgMSwgNCwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlY X0VSUigwLCA2MzYsIF9fcHl4X0wzX2Vycm9yKQorKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFs aWQoInNldF9wcm9wZXJ0eSIsIDAsIDEsIDQsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykp OyBfX1BZWF9FUlIoMCwgNjM4LCBfX3B5eF9MM19lcnJvcikKKyAgIF9fcHl4X0wzX2Vycm9yOjsK KyAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRleHQuc2V0X3By b3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7Cisg ICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKK0BAIC0xMjM0NCw3ICsxMjM0NCw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgi c2V0X3Byb3BlcnR5IiwgMCk7CisgICBfX1B5eF9JTkNSRUYoX19weXhfdl9wcm9wKTsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2MzgKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2NDAKKyAgKiAgICAgZGVmIHNldF9wcm9wZXJ0eShzZWxmLCBw cm9wLCB2YWx1ZT1UcnVlLCBhc3luY2hyb25vdXM9RmFsc2UsIGRhdGE9Tm9uZSk6CisgICogICAg ICAgICAiIiJXcmFwczogbXB2X3NldF9wcm9wZXJ0eSBhbmQgbXB2X3NldF9wcm9wZXJ0eV9hc3lu YyIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTIzNTUsMTkgKzEyMzU1LDE5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBf CisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKyAgICAgaWYgKHVubGlrZWx5 KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworICAgICAgIFB5RXJyX1NldE5vbmUoUHlF eGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCA2MzgsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA2NDAsIF9fcHl4X0wxX2Vycm9yKQorICAgICB9Cisg ICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 MzkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDEKKyAgKiAgICAgICAg ICIiIldyYXBzOiBtcHZfc2V0X3Byb3BlcnR5IGFuZCBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jIiIi CisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBwcm9wID0gX3N0cmVu Yyhwcm9wKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBjZGVmIG1w dl9mb3JtYXQgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkKKyAgKiAgICAgICAgIGNk ZWYgbXB2X25vZGUgdiA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZhbHVlLCBmb3JtYXQpCisg ICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhfbl9zX3N0 cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDYzOSwgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMiwgX19weXhf bl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY0MSwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgIF9fcHl4X3Rf MyA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0 aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CitAQCAtMTIzODEsMjAgKzEyMzgxLDIwIEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0 X3Byb3BlcnR5KHN0cnVjdCBfCisgICB9CisgICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/IF9f UHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMywgX19weXhfdl9wcm9w KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X3Byb3ApOwor ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjM5LCBfX3B5eF9MMV9lcnJvcikKKysgIGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY0MSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3Byb3AsIF9fcHl4 X3RfMSk7CisgICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjY0MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0Mgor ICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMo cHJvcCkKKyAgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3JtYXQgPSBzZWxmLl9mb3JtYXRf Zm9yKHZhbHVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBjZGVm IG1wdl9ub2RlIHYgPSBzZWxmLl9wcmVwX25hdGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQorICAq ICAgICAgICAgY2RlZiBpbnQgZXJyCisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0 X2Zvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY0MCwgX19weXhf TDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlP YmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfZm9ybWF0X2Zvcik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY0MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgIF9fcHl4X3RfMyA9IE5VTEw7CisgICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgewor QEAgLTEyNDA4LDI2ICsxMjQwOCwyNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eShzdHJ1Y3QgXworICAgfQor ICAgX19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19w eXhfdF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfdmFsdWUpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzIsIF9fcHl4X3ZfdmFsdWUpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90 XzMpOyBfX3B5eF90XzMgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgNjQwLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDY0MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgX19w eXhfdF80ID0gKChlbnVtIG1wdl9mb3JtYXQpX19QeXhfUHlJbnRfQXNfZW51bV9fbXB2X2Zvcm1h dChfX3B5eF90XzEpKTsgaWYgKHVubGlrZWx5KFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIo MCwgNjQwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNCA9ICgoZW51bSBtcHZfZm9ybWF0 KV9fUHl4X1B5SW50X0FzX2VudW1fX21wdl9mb3JtYXQoX19weXhfdF8xKSk7IGlmICh1bmxpa2Vs eShQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDY0MiwgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgIF9fcHl4X3ZfZm9y bWF0ID0gX19weXhfdF80OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjY0MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0MworICAqICAgICAg ICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKyAgKiAgICAgICAgIGNkZWYgbXB2X2Zvcm1hdCBmb3Jt YXQgPSBzZWxmLl9mb3JtYXRfZm9yKHZhbHVlKQorICAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2 ID0gc2VsZi5fcHJlcF9uYXRpdmVfdmFsdWUodmFsdWUsIGZvcm1hdCkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICogICAgICAgICBjZGVm IHVpbnQ2NF90IGRhdGFfaWQKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21f ZW51bV9fbXB2X2Zvcm1hdChfX3B5eF92X2Zvcm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDY0MSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3JtYXQoX19weXhfdl9mb3JtYXQpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NDMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX3B5eF92X3YgPSAoKHN0cnVjdCBfX3B5eF92dGFi c3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5 eF92dGFiKS0+X3ByZXBfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSwg X19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0NQorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0NworICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBk YXRhX2lkCisgICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIqIHByb3BfYworICAqICAgICAgICAg dHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTI0MzYsMjggKzEyNDM2LDI4 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICovCisgICAvKnRyeToqLyB7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDYKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjY0OAorICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBw cm9wX2MKKyAgKiAgICAgICAgIHRyeToKKyAgKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNo cm9ub3VzOgorICAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgICBfX3B5 eF90XzUgPSBfX1B5eF9QeU9iamVjdF9Bc1N0cmluZyhfX3B5eF92X3Byb3ApOyBpZiAodW5saWtl bHkoKCFfX3B5eF90XzUpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNjQ2LCBf X3B5eF9MNF9lcnJvcikKKysgICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmco X19weXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF81KSAmJiBQeUVycl9PY2N1cnJl ZCgpKSkgX19QWVhfRVJSKDAsIDY0OCwgX19weXhfTDRfZXJyb3IpCisgICAgIF9fcHl4X3ZfcHJv cF9jID0gX19weXhfdF81OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NjQ3CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDkKKyAgKiAg ICAgICAgIHRyeToKKyAgKiAgICAgICAgICAgICBwcm9wX2MgPSBwcm9wCisgICogICAgICAgICAg ICAgaWYgbm90IGFzeW5jaHJvbm91czogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAq ICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgICAgICAgICAgZXJy ID0gbXB2X3NldF9wcm9wZXJ0eSgKKyAgKi8KKy0gICAgX19weXhfdF82ID0gX19QeXhfUHlPYmpl Y3RfSXNUcnVlKF9fcHl4X3ZfYXN5bmNocm9ub3VzKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8 IDApKSBfX1BZWF9FUlIoMCwgNjQ3LCBfX3B5eF9MNF9lcnJvcikKKysgICAgX19weXhfdF82ID0g X19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfYXN5bmNocm9ub3VzKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgNjQ5LCBfX3B5eF9MNF9lcnJvcikKKyAgICAg X19weXhfdF83ID0gKCghX19weXhfdF82KSAhPSAwKTsKKyAgICAgaWYgKF9fcHl4X3RfNykgewor IAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDgKKysgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjUwCisgICogICAgICAgICAgICAgcHJv cF9jID0gcHJvcAorICAqICAgICAgICAgICAgIGlmIG5vdCBhc3luY2hyb25vdXM6CisgICogICAg ICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xMjQ3Miw3ICsxMjQ3Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICAgICAgICAg ICNlbmRpZgorICAgICAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY0OQorKyAgICAgICAgICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2NTEKKyAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNocm9u b3VzOgorICAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgICAg ICAgICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0eSggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTEyNDgyLDcgKzEyNDgyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgICAg ICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9zZXRfcHJvcGVydHkoX19weXhfdl9zZWxmLT5fY3R4 LCBfX3B5eF92X3Byb3BfYywgTVBWX0ZPUk1BVF9OT0RFLCAoJl9fcHl4X3ZfdikpOworICAgICAg ICAgICB9CisgCistICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 NDgKKysgICAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1MAorICAq ICAgICAgICAgICAgIHByb3BfYyA9IHByb3AKKyAgKiAgICAgICAgICAgICBpZiBub3QgYXN5bmNo cm9ub3VzOgorICAqICAgICAgICAgICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtMTI1MDEsNyArMTI1MDEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eShzdHJ1 Y3QgXworICAgICAgICAgICB9CisgICAgICAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo2NTUKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NjU3CisgICogICAgICAgICAgICAgICAgICAgICAgICAgJnYKKyAgKiAgICAgICAgICAg ICAgICAgICAgICkKKyAgKiAgICAgICAgICAgICAgICAgcmV0dXJuIGVyciAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMTI1MDksMTMgKzEyNTA5LDEzIEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5 KHN0cnVjdCBfCisgICogICAgICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0 YS5nZXQoZGF0YV9pZCwgTm9uZSkKKyAgKi8KKyAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Ip OworLSAgICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjU1LCBfX3B5eF9MNF9lcnJv cikKKysgICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7 IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY1NywgX19weXhfTDRfZXJy b3IpCisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAgICAgX19weXhfciA9IF9f cHl4X3RfMTsKKyAgICAgICBfX3B5eF90XzEgPSAwOworICAgICAgIGdvdG8gX19weXhfTDNfcmV0 dXJuOworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NDcKKysg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjQ5CisgICogICAgICAgICB0 cnk6CisgICogICAgICAgICAgICAgcHJvcF9jID0gcHJvcAorICAqICAgICAgICAgICAgIGlmIG5v dCBhc3luY2hyb25vdXM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMjUyNCwy NiArMTI1MjQsMjYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgKi8KKyAgICAgfQorIAor LSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjU2CisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTgKKyAgKiAgICAgICAgICAgICAgICAgICAgICkK KyAgKiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycgorICAqICAgICAgICAgICAgIGRhdGFfaWQg PSA8dWludDY0X3Q+aGFzaChkYXRhKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICog ICAgICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoZGF0YV9pZCwg Tm9uZSkKKyAgKiAgICAgICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZToKKyAgKi8KKy0gICAg X19weXhfdF84ID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19w eXhfdF84ID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VSUigwLCA2NTYsIF9fcHl4X0w0X2Vy cm9yKQorKyAgICBfX3B5eF90XzggPSBQeU9iamVjdF9IYXNoKF9fcHl4X3ZfZGF0YSk7IGlmICh1 bmxpa2VseShfX3B5eF90XzggPT0gKChQeV9oYXNoX3QpLTEpKSkgX19QWVhfRVJSKDAsIDY1OCwg X19weXhfTDRfZXJyb3IpCisgICAgIF9fcHl4X3ZfZGF0YV9pZCA9ICgodWludDY0X3QpX19weXhf dF84KTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1NworKyAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjU5CisgICogICAgICAgICAgICAg ICAgIHJldHVybiBlcnIKKyAgKiAgICAgICAgICAgICBkYXRhX2lkID0gPHVpbnQ2NF90Pmhhc2go ZGF0YSkKKyAgKiAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdl dChkYXRhX2lkLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAg ICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6CisgICogICAgICAgICAgICAgICAgIHNlbGYucmVw bHlfdXNlcmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQor ICAqLworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zf c2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMikpIF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9yKQorKyAgICBfX3B5eF90XzIg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEs IF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2 NTksIF9fcHl4X0w0X2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAg X19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5eF92X2RhdGFfaWQpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA2NTcsIF9fcHl4X0w0X2Vycm9y KQorKyAgICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfZGF0 YV9pZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDY1OSwgX19weXhf TDRfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgICBfX3B5eF90Xzkg PSBOVUxMOworICAgICBfX3B5eF90XzEwID0gMDsKK0BAIC0xMjU2MCw3ICsxMjU2MCw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4 c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKyAgICAg aWYgKFB5RnVuY3Rpb25fQ2hlY2soX19weXhfdF8yKSkgeworICAgICAgIFB5T2JqZWN0ICpfX3B5 eF90ZW1wWzNdID0ge19fcHl4X3RfOSwgX19weXhfdF8zLCBQeV9Ob25lfTsKKy0gICAgICBfX3B5 eF90XzEgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMiwgX19weXhfdGVtcCsx LV9fcHl4X3RfMTAsIDIrX19weXhfdF8xMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDY1NywgX19weXhfTDRfZXJyb3IpCisrICAgICAgX19weXhfdF8xID0gX19QeXhf UHlGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzIsIF9fcHl4X3RlbXArMS1fX3B5eF90XzEwLCAy K19fcHl4X3RfMTApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NTks IF9fcHl4X0w0X2Vycm9yKQorICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19weXhf dF85ID0gMDsKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKK0BAIC0xMjU2OSwxNCArMTI1NjksMTQg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgICAgI2lmIENZVEhPTl9GQVNUX1BZQ0NBTEwK KyAgICAgaWYgKF9fUHl4X1B5RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzIpKSB7CisgICAg ICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhfdF85LCBfX3B5eF90XzMsIFB5X05v bmV9OworLSAgICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5Q0Z1bmN0aW9uX0Zhc3RDYWxsKF9fcHl4 X3RfMiwgX19weXhfdGVtcCsxLV9fcHl4X3RfMTAsIDIrX19weXhfdF8xMCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY1NywgX19weXhfTDRfZXJyb3IpCisrICAgICAg X19weXhfdF8xID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8yLCBfX3B5eF90 ZW1wKzEtX19weXhfdF8xMCwgMitfX3B5eF90XzEwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEp KSBfX1BZWF9FUlIoMCwgNjU5LCBfX3B5eF9MNF9lcnJvcikKKyAgICAgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfOSk7IF9fcHl4X3RfOSA9IDA7CisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CisgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgICAg IH0gZWxzZQorICAgICAjZW5kaWYKKyAgICAgeworLSAgICAgIF9fcHl4X3RfMTEgPSBQeVR1cGxl X05ldygyK19fcHl4X3RfMTApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMTEpKSBfX1BZWF9FUlIo MCwgNjU3LCBfX3B5eF9MNF9lcnJvcikKKysgICAgICBfX3B5eF90XzExID0gUHlUdXBsZV9OZXco MitfX3B5eF90XzEwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzExKSkgX19QWVhfRVJSKDAsIDY1 OSwgX19weXhfTDRfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMTEpOworICAg ICAgIGlmIChfX3B5eF90XzkpIHsKKyAgICAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF85KTsg UHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzExLCAwLCBfX3B5eF90XzkpOyBfX3B5eF90XzkgPSBO VUxMOworQEAgLTEyNTg3LDcgKzEyNTg3LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KKyAg ICAgICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOworICAgICAgIFB5VHVwbGVfU0VUX0lURU0oX19w eXhfdF8xMSwgMStfX3B5eF90XzEwLCBQeV9Ob25lKTsKKyAgICAgICBfX3B5eF90XzMgPSAwOwor LSAgICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90 XzExLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjU3LCBf X3B5eF9MNF9lcnJvcikKKysgICAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9f cHl4X3RfMiwgX19weXhfdF8xMSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDY1OSwgX19weXhfTDRfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CisgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzExID0gMDsK KyAgICAgfQorQEAgLTEyNTk1LDcgKzEyNTk1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8K KyAgICAgX19weXhfdl91c2VyZGF0YXMgPSBfX3B5eF90XzE7CisgICAgIF9fcHl4X3RfMSA9IDA7 CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTgKKysgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2MAorICAqICAgICAgICAgICAgIGRhdGFf aWQgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorICAqICAgICAgICAgICAgIHVzZXJkYXRhcyA9IHNl bGYucmVwbHlfdXNlcmRhdGEuZ2V0KGRhdGFfaWQsIE5vbmUpCisgICogICAgICAgICAgICAgaWYg dXNlcmRhdGFzIGlzIE5vbmU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMjYw NiwxNCArMTI2MDYsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgICAgX19weXhfdF82 ID0gKF9fcHl4X3RfNyAhPSAwKTsKKyAgICAgaWYgKF9fcHl4X3RfNikgeworIAorLSAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NTkKKysgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjYxCisgICogICAgICAgICAgICAgdXNlcmRhdGFzID0gc2Vs Zi5yZXBseV91c2VyZGF0YS5nZXQoZGF0YV9pZCwgTm9uZSkKKyAgKiAgICAgICAgICAgICBpZiB1 c2VyZGF0YXMgaXMgTm9uZToKKyAgKiAgICAgICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YVtkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICB1c2VyZGF0YXMuYWRkKCkKKyAgKiAg ICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAqLworLSAgICAgIF9fUHl4X0dldE1vZHVsZUdsb2Jh bE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDY1OSwgX19weXhfTDRfZXJyb3IpCisrICAgICAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19SZXBseVVzZXJEYXRh KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNjYxLCBfX3B5eF9MNF9l cnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgICBfX3B5eF90XzEx ID0gTlVMTDsKKyAgICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5 TWV0aG9kX0NoZWNrKF9fcHl4X3RfMikpKSB7CitAQCAtMTI2MjcsMTUgKzEyNjI3LDE1IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4 c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICAgICAgfQorICAgICAgIF9fcHl4X3RfMSA9IChfX3B5 eF90XzExKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzIsIF9fcHl4X3RfMTEs IF9fcHl4X3ZfZGF0YSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMiwgX19w eXhfdl9kYXRhKTsKKyAgICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMTEpOyBfX3B5eF90XzEx ID0gMDsKKy0gICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2NTks IF9fcHl4X0w0X2Vycm9yKQorKyAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhf RVJSKDAsIDY2MSwgX19weXhfTDRfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CisgICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAg ICAgaWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl9zZWxmLT5yZXBseV91c2Vy ZGF0YSwgX19weXhfdl9kYXRhX2lkLCBfX3B5eF90XzEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUlu dF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNjU5LCBfX3B5eF9M NF9lcnJvcikKKysgICAgICBpZiAodW5saWtlbHkoX19QeXhfU2V0SXRlbUludChfX3B5eF92X3Nl bGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2RhdGFfaWQsIF9fcHl4X3RfMSwgdWludDY0X3Qs IDAsIF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigw LCA2NjEsIF9fcHl4X0w0X2Vycm9yKQorICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzEpOwor ICAgICAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X3RfMSk7Cisg ICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1OAorKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NjAKKyAgKiAgICAgICAgICAgICBkYXRhX2lkID0gPHVp bnQ2NF90Pmhhc2goZGF0YSkKKyAgKiAgICAgICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5 X3VzZXJkYXRhLmdldChkYXRhX2lkLCBOb25lKQorICAqICAgICAgICAgICAgIGlmIHVzZXJkYXRh cyBpcyBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTI2NDQsMTQgKzEy NjQ0LDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICovCisgICAgIH0KKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY2MAorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NjYyCisgICogICAgICAgICAgICAgaWYgdXNlcmRhdGFzIGlz IE5vbmU6CisgICogICAgICAgICAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGFbZGF0YV9pZF0g PSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQorICAqICAgICAgICAgICAgIHVzZXJk YXRhcy5hZGQoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAg d2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICAgICAgZXJyID0gbXB2X3NldF9wcm9wZXJ0eV9h c3luYygKKyAgKi8KKy0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX2FkZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDY2MCwgX19weXhfTDRfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9IF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YXMsIF9fcHl4X25fc19hZGQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2NjIsIF9fcHl4X0w0X2Vy cm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19weXhfdF8xMSA9IE5V TEw7CisgICAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0No ZWNrKF9fcHl4X3RfMikpKSB7CitAQCAtMTI2NjUsMTIgKzEyNjY1LDEyIEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3Bl cnR5KHN0cnVjdCBfCisgICAgIH0KKyAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfMTEpID8gX19Q eXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMTEpIDogX19QeXhfUHlP YmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8x MSk7IF9fcHl4X3RfMTEgPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA2NjAsIF9fcHl4X0w0X2Vycm9yKQorKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA2NjIsIF9fcHl4X0w0X2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7 CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYxCisrICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2NjMKKyAgKiAgICAgICAgICAgICAgICAgc2VsZi5yZXBseV91 c2VyZGF0YVtkYXRhX2lkXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisgICog ICAgICAgICAgICAgdXNlcmRhdGFzLmFkZCgpCisgICogICAgICAgICAgICAgd2l0aCBub2dpbDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEyNjg1LDcgKzEyNjg1LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThz ZXRfcHJvcGVydHkoc3RydWN0IF8KKyAgICAgICAgICNlbmRpZgorICAgICAgICAgLyp0cnk6Ki8g eworIAorLSAgICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYyCisr ICAgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NjQKKyAgKiAgICAg ICAgICAgICB1c2VyZGF0YXMuYWRkKCkKKyAgKiAgICAgICAgICAgICB3aXRoIG5vZ2lsOgorICAq ICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfc2V0X3Byb3BlcnR5X2FzeW5jKCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTI2OTUsNyArMTI2OTUsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0 eShzdHJ1Y3QgXworICAgICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9zZXRfcHJvcGVydHlfYXN5 bmMoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X2RhdGFfaWQsIF9fcHl4X3ZfcHJvcF9jLCBN UFZfRk9STUFUX05PREUsICgmX19weXhfdl92KSk7CisgICAgICAgICB9CisgCistICAgICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYxCisrICAgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjYzCisgICogICAgICAgICAgICAgICAgIHNlbGYucmVw bHlfdXNlcmRhdGFbZGF0YV9pZF0gPSB1c2VyZGF0YXMgPSBfUmVwbHlVc2VyRGF0YShkYXRhKQor ICAqICAgICAgICAgICAgIHVzZXJkYXRhcy5hZGQoKQorICAqICAgICAgICAgICAgIHdpdGggbm9n aWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMjcxNSw3ICsxMjcxNSw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisgICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo2NzIKKyAgKiAgICAgICAgICAgICAgICAgKQorICAqICAgICAgICAgZmluYWxseToK KyAgKiAgICAgICAgICAgICBzZWxmLl9mcmVlX25hdGl2ZV92YWx1ZSh2KSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMTI3MjQsNyArMTI3MjQsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eShz dHJ1Y3QgXworICAqLworICAgLypmaW5hbGx5OiovIHsKKyAgICAgLypub3JtYWwgZXhpdDoqL3sK Ky0gICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0 aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNjcwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX3B5eF90XzEg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zf c2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg NjcyLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAg ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgICAgICBnb3Rv IF9fcHl4X0w1OworQEAgLTEyNzQ5LDcgKzEyNzQ5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0 IF8KKyAgICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMTkpOworICAgICAgIF9fcHl4X3RfMTAg PSBfX3B5eF9saW5lbm87IF9fcHl4X3RfMTIgPSBfX3B5eF9jbGluZW5vOyBfX3B5eF90XzEzID0g X19weXhfZmlsZW5hbWU7CisgICAgICAgeworLSAgICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3Qg X19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zf c2VsZi0+X19weXhfdnRhYiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4 X3Zfdik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3MCwgX19weXhf TDE1X2Vycm9yKQorKyAgICAgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVj dF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRh YiktPl9mcmVlX25hdGl2ZV92YWx1ZShfX3B5eF92X3NlbGYsIF9fcHl4X3Zfdik7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3MiwgX19weXhfTDE1X2Vycm9yKQorICAg ICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAgICAgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgICAgICB9CitAQCAtMTI3ODIsNyArMTI3ODIsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8xOHNldF9wcm9wZXJ0eShzdHJ1Y3QgXworICAgICBfX3B5eF9MM19yZXR1cm46IHsKKyAgICAg ICBfX3B5eF90XzE5ID0gX19weXhfcjsKKyAgICAgICBfX3B5eF9yID0gMDsKKy0gICAgICBfX3B5 eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9D b250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9f cHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgNjcwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBf X3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9z ZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhf dl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjcyLCBfX3B5eF9M MV9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgICAgICBfX3B5eF9yID0gX19weXhf dF8xOTsKK0BAIC0xMjc5Miw3ICsxMjc5Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzE4c2V0X3Byb3BlcnR5KHN0cnVjdCBfCisg ICAgIF9fcHl4X0w1OjsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo2NzEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzMKKyAgKiAg ICAgICAgIGZpbmFsbHk6CisgICogICAgICAgICAgICAgc2VsZi5fZnJlZV9uYXRpdmVfdmFsdWUo dikKKyAgKiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTEyODAwLDEzICsxMjgwMCwxMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8xOHNldF9wcm9wZXJ0eShzdHJ1Y3QgXworICAqICAg ICBAX2Vycm9ycworICAqLworICAgX19QeXhfWERFQ1JFRihfX3B5eF9yKTsKKy0gIF9fcHl4X3Rf MSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgNjcxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9 IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNjczLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzEpOworICAgX19weXhfciA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7Cisg ICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjYzNgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzOAorICAqIAorICAq ICAgICBAX2Vycm9ycworICAqICAgICBkZWYgc2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIHZhbHVl PVRydWUsIGFzeW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTEyODMxLDcgKzEyODMxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMThzZXRfcHJvcGVydHkoc3RydWN0 IF8KKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6Njc0CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3NgorICAq IAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBwcm9wLCB2 YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEyODc5LDcgKzEy ODc5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZf N0NvbnRleHRfMjFzZXRfb3B0aW9uKFB5T2JqZWN0ICoKKyAgICAgICAgIH0KKyAgICAgICB9Cisg ICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5 KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVz LCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0X29wdGlvbiIpIDwgMCkpIF9fUFlYX0VSUigwLCA2 NzQsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0 aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBv c19hcmdzLCAic2V0X29wdGlvbiIpIDwgMCkpIF9fUFlYX0VSUigwLCA2NzYsIF9fcHl4X0wzX2Vy cm9yKQorICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKyAgICAgICBzd2l0Y2ggKFB5VHVwbGVfR0VU X1NJWkUoX19weXhfYXJncykpIHsKK0BAIC0xMjg5NSw3ICsxMjg5NSw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIxc2V0X29wdGlv bihQeU9iamVjdCAqCisgICB9CisgICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50X3VucGFja2luZ19k b25lOworICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6OworLSAgX19QeXhfUmFpc2VBcmd0dXBs ZUludmFsaWQoInNldF9vcHRpb24iLCAwLCAxLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2Fy Z3MpKTsgX19QWVhfRVJSKDAsIDY3NCwgX19weXhfTDNfZXJyb3IpCisrICBfX1B5eF9SYWlzZUFy Z3R1cGxlSW52YWxpZCgic2V0X29wdGlvbiIsIDAsIDEsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19w eXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNjc2LCBfX3B5eF9MM19lcnJvcikKKyAgIF9fcHl4X0wz X2Vycm9yOjsKKyAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0dGVyLmxpYnMubXB2LkNvbnRl eHQuc2V0X29wdGlvbiIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5h bWUpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0KCk7CitAQCAtMTI5MzUsNyArMTI5 MzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8yMHNldF9vcHRpb24oc3RydWN0IF9fcAorICAgX19QeXhfUmVmTmFubnlTZXR1cENv bnRleHQoInNldF9vcHRpb24iLCAwKTsKKyAgIF9fUHl4X0lOQ1JFRihfX3B5eF92X3Byb3ApOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3NgorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3OAorICAqICAgICBkZWYgc2V0X29wdGlvbihzZWxm LCBwcm9wLCB2YWx1ZT1UcnVlKToKKyAgKiAgICAgICAgICIiIldyYXBzOiBtcHZfc2V0X29wdGlv biIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTI5NDYsMTkgKzEyOTQ2LDE5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3QgX19w CisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKyAgICAgaWYgKHVubGlrZWx5 KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworICAgICAgIFB5RXJyX1NldE5vbmUoUHlF eGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCA2NzYsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA2NzgsIF9fcHl4X0wxX2Vycm9yKQorICAgICB9Cisg ICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 NzcKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzkKKyAgKiAgICAgICAg ICIiIldyYXBzOiBtcHZfc2V0X29wdGlvbiIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0 eAorICAqICAgICAgICAgcHJvcCA9IF9zdHJlbmMocHJvcCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgY2RlZiBtcHZfZm9ybWF0IGZvcm1hdCA9IHNlbGYuX2Zvcm1h dF9mb3IodmFsdWUpCisgICogICAgICAgICBjZGVmIG1wdl9ub2RlIHYgPSBzZWxmLl9wcmVwX25h dGl2ZV92YWx1ZSh2YWx1ZSwgZm9ybWF0KQorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFs TmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCA2NzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19zdHJlbmMpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA2NzksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMik7CisgICBfX3B5eF90XzMgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBB Q0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAg LTEyOTcyLDIwICsxMjk3MiwyMCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMHNldF9vcHRpb24oc3RydWN0IF9fcAorICAgfQorICAg X19weXhfdF8xID0gKF9fcHl4X3RfMykgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhf dF8yLCBfX3B5eF90XzMsIF9fcHl4X3ZfcHJvcCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJn KF9fcHl4X3RfMiwgX19weXhfdl9wcm9wKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsg X19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDY3NywgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA2NzksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7 CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgIF9fUHl4X0RF Q1JFRl9TRVQoX19weXhfdl9wcm9wLCBfX3B5eF90XzEpOworICAgX19weXhfdF8xID0gMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzgKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2ODAKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgK KyAgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCisgICogICAgICAgICBjZGVmIG1wdl9m b3JtYXQgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgY2RlZiBtcHZfbm9kZSB2ID0gc2VsZi5fcHJlcF9uYXRp dmVfdmFsdWUodmFsdWUsIGZvcm1hdCkKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAqLwor LSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19w eXhfdl9zZWxmKSwgX19weXhfbl9zX2Zvcm1hdF9mb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MikpIF9fUFlYX0VSUigwLCA2NzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19Q eXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhf bl9zX2Zvcm1hdF9mb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA2 ODAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICBfX3B5 eF90XzMgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlN ZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKK0BAIC0xMjk5OSwyNiArMTI5OTksMjYgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjBz ZXRfb3B0aW9uKHN0cnVjdCBfX3AKKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8g X19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF8zLCBfX3B5eF92X3Zh bHVlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF92X3ZhbHVl KTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3OCwgX19weXhfTDFfZXJyb3IpCisr ICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2ODAsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKKy0gIF9fcHl4X3RfNCA9ICgoZW51bSBtcHZfZm9ybWF0KV9f UHl4X1B5SW50X0FzX2VudW1fX21wdl9mb3JtYXQoX19weXhfdF8xKSk7IGlmICh1bmxpa2VseShQ eUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDY3OCwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzQgPSAoKGVudW0gbXB2X2Zvcm1hdClfX1B5eF9QeUludF9Bc19lbnVtX19tcHZfZm9y bWF0KF9fcHl4X3RfMSkpOyBpZiAodW5saWtlbHkoUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VS UigwLCA2ODAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7CisgICBfX3B5eF92X2Zvcm1hdCA9IF9fcHl4X3RfNDsKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2NzkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2ODEKKyAgKiAgICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCisgICog ICAgICAgICBjZGVmIG1wdl9mb3JtYXQgZm9ybWF0ID0gc2VsZi5fZm9ybWF0X2Zvcih2YWx1ZSkK KyAgKiAgICAgICAgIGNkZWYgbXB2X25vZGUgdiA9IHNlbGYuX3ByZXBfbmF0aXZlX3ZhbHVlKHZh bHVlLCBmb3JtYXQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGNk ZWYgaW50IGVycgorICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MKKyAgKi8KKy0g IF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Zvcm1hdChfX3B5eF92X2Zv cm1hdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDY3OSwgX19weXhf TDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9mb3Jt YXQoX19weXhfdl9mb3JtYXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA2ODEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBf X3B5eF92X3YgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X3ByZXBfbmF0aXZlX3ZhbHVl KF9fcHl4X3Zfc2VsZiwgX19weXhfdl92YWx1ZSwgX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjY4MgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4 NAorICAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICogICAgICAgICBjZGVmIGNvbnN0IGNoYXIq IHByb3BfYworICAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMTMwMjcsMTcgKzEzMDI3LDE3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3QgX19wCisgICovCisg ICAvKnRyeToqLyB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 ODMKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4NQorICAqICAgICAg ICAgY2RlZiBjb25zdCBjaGFyKiBwcm9wX2MKKyAgKiAgICAgICAgIHRyeToKKyAgKiAgICAgICAg ICAgICBwcm9wX2MgPSBwcm9wICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAg ICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgICAgICBlcnIgPSBtcHZfc2V0X29w dGlvbigKKyAgKi8KKy0gICAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfQXNTdHJpbmcoX19w eXhfdl9wcm9wKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF81KSAmJiBQeUVycl9PY2N1cnJlZCgp KSkgX19QWVhfRVJSKDAsIDY4MywgX19weXhfTDRfZXJyb3IpCisrICAgIF9fcHl4X3RfNSA9IF9f UHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4 X3RfNSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA2ODUsIF9fcHl4X0w0X2Vy cm9yKQorICAgICBfX3B5eF92X3Byb3BfYyA9IF9fcHl4X3RfNTsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4NAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6Njg2CisgICogICAgICAgICB0cnk6CisgICogICAgICAgICAgICAgcHJvcF9j ID0gcHJvcAorICAqICAgICAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC0xMzA1Miw3ICsxMzA1Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3QgX19w CisgICAgICAgICAjZW5kaWYKKyAgICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY4NQorKyAgICAgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njg3CisgICogICAgICAgICAgICAgcHJvcF9jID0gcHJv cAorICAqICAgICAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgICAgIGVyciA9 IG1wdl9zZXRfb3B0aW9uKCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTMwNjIs NyArMTMwNjIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8yMHNldF9vcHRpb24oc3RydWN0IF9fcAorICAgICAgICAgICBfX3B5eF92 X2VyciA9IG1wdl9zZXRfb3B0aW9uKF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9wcm9wX2Ms IE1QVl9GT1JNQVRfTk9ERSwgKCZfX3B5eF92X3YpKTsKKyAgICAgICAgIH0KKyAKKy0gICAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2ODQKKysgICAgICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2ODYKKyAgKiAgICAgICAgIHRyeToKKyAgKiAgICAg ICAgICAgICBwcm9wX2MgPSBwcm9wCisgICogICAgICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEzMDgyLDcgKzEzMDgyLDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjBzZXRfb3B0 aW9uKHN0cnVjdCBfX3AKKyAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjY5MgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5 NAorICAqICAgICAgICAgICAgICAgICApCisgICogICAgICAgICBmaW5hbGx5OgorICAqICAgICAg ICAgICAgIHNlbGYuX2ZyZWVfbmF0aXZlX3ZhbHVlKHYpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0xMzA5MSw3ICsxMzA5MSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlvbihzdHJ1Y3QgX19wCisg ICovCisgICAvKmZpbmFsbHk6Ki8geworICAgICAvKm5vcm1hbCBleGl0OioveworLSAgICAgIF9f cHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQgKilfX3B5eF92X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUo X19weXhfdl9zZWxmLCBfX3B5eF92X3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA2OTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0 IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKilfX3B5eF92 X3NlbGYtPl9fcHl4X3Z0YWIpLT5fZnJlZV9uYXRpdmVfdmFsdWUoX19weXhfdl9zZWxmLCBfX3B5 eF92X3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA2OTQsIF9fcHl4 X0wxX2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworICAgICAgIGdvdG8gX19weXhfTDU7 CitAQCAtMTMxMTQsNyArMTMxMTQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMHNldF9vcHRpb24oc3RydWN0IF9fcAorICAgICAg IF9fUHl4X1hHT1RSRUYoX19weXhfdF8xNCk7CisgICAgICAgX19weXhfdF82ID0gX19weXhfbGlu ZW5vOyBfX3B5eF90XzcgPSBfX3B5eF9jbGluZW5vOyBfX3B5eF90XzggPSBfX3B5eF9maWxlbmFt ZTsKKyAgICAgICB7CistICAgICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3Ry dWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92 dGFiKS0+X2ZyZWVfbmF0aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjkyLCBfX3B5eF9MMTBfZXJyb3IpCisr ICAgICAgICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0ICopX19weXhfdl9zZWxmLT5fX3B5eF92dGFiKS0+X2ZyZWVfbmF0 aXZlX3ZhbHVlKF9fcHl4X3Zfc2VsZiwgX19weXhfdl92KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgNjk0LCBfX3B5eF9MMTBfZXJyb3IpCisgICAgICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8xKTsKKyAgICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworICAgICAgIH0KK0BAIC0xMzE0Nyw3ICsxMzE0Nyw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIwc2V0X29wdGlv bihzdHJ1Y3QgX19wCisgICAgIF9fcHl4X0w1OjsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo2OTMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo2OTUKKyAgKiAgICAgICAgIGZpbmFsbHk6CisgICogICAgICAgICAgICAgc2VsZi5fZnJl ZV9uYXRpdmVfdmFsdWUodikKKyAgKiAgICAgICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTEzMTU1LDEzICsxMzE1NSwxMyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yMHNldF9vcHRpb24oc3Ry dWN0IF9fcAorICAqICAgICBAX2Vycm9ycworICAqLworICAgX19QeXhfWERFQ1JFRihfX3B5eF9y KTsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjkzLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21faW50KF9fcHl4X3ZfZXJyKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNjk1LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19weXhfciA9IF9fcHl4X3RfMTsKKyAgIF9f cHl4X3RfMSA9IDA7CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjY3NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjY3NgorICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgc2V0X29wdGlvbihzZWxm LCBwcm9wLCB2YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEz MTgzLDcgKzEzMTgzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMjBzZXRfb3B0aW9uKHN0cnVjdCBfX3AKKyAgIHJldHVybiBfX3B5 eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk2CisrLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY5OAorICAqIAorICAqICAgICBAX2Vycm9y cworICAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTEzMjE1LDcgKzEzMjE1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjJpbml0aWFsaXplKHN0cnVjdCBfX3AKKyAg IGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJp bml0aWFsaXplIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Njk4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAwCisgICogICAgIGRl ZiBpbml0aWFsaXplKHNlbGYpOgorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9pbml0aWFsaXpl IiIiCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0xMzIyNiwxMiArMTMyMjYsMTIgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjJpbml0aWFsaXplKHN0cnVjdCBfX3AK KyAgIGlmICh1bmxpa2VseSghUHlfT3B0aW1pemVGbGFnKSkgeworICAgICBpZiAodW5saWtlbHko IShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkpKSB7CisgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4 Y19Bc3NlcnRpb25FcnJvcik7CistICAgICAgX19QWVhfRVJSKDAsIDY5OCwgX19weXhfTDFfZXJy b3IpCisrICAgICAgX19QWVhfRVJSKDAsIDcwMCwgX19weXhfTDFfZXJyb3IpCisgICAgIH0KKyAg IH0KKyAgICNlbmRpZgorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcw MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwMgorICAqICAgICAgICAg YXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgY2RlZiBpbnQgZXJyCisgICogICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTMyNDYsNyArMTMy NDYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83 Q29udGV4dF8yMmluaXRpYWxpemUoc3RydWN0IF9fcAorICAgICAgICNlbmRpZgorICAgICAgIC8q dHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MDEKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDMKKyAgKiAg ICAgICAgIGNkZWYgaW50IGVycgorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAg ICAgICBlcnIgPSBtcHZfaW5pdGlhbGl6ZShzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC0xMzI1Niw3ICsxMzI1Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIyaW5pdGlhbGl6ZShzdHJ1Y3QgX19w CisgICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9pbml0aWFsaXplKF9fcHl4X3Zfc2VsZi0+X2N0 eCk7CisgICAgICAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MDAKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzAyCisgICog ICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzI3 NSw3ICsxMzI3NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzIyaW5pdGlhbGl6ZShzdHJ1Y3QgX19wCisgICAgICAgfQorICAgfQor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwMgorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwNAorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAg KiAgICAgICAgICAgICBlcnIgPSBtcHZfaW5pdGlhbGl6ZShzZWxmLl9jdHgpCisgICogICAgICAg ICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzI4MywxMyAr MTMyODMsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMjJpbml0aWFsaXplKHN0cnVjdCBfX3AKKyAgKiAgICAgZGVmIHdhaXRfZXZl bnQoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7 CistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcwMiwgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcwNCwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fcHl4X3IgPSBfX3B5eF90XzE7CisgICBfX3B5 eF90XzEgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo2OTYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 OTgKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAgICAgZGVmIGluaXRpYWxpemUoc2VsZik6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzMwOCw3ICsxMzMwOCw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzIy aW5pdGlhbGl6ZShzdHJ1Y3QgX19wCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcwNAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3MDYKKyAgKiAgICAgICAgIHJldHVybiBlcnIKKyAgKiAKKyAgKiAgICAgZGVm IHdhaXRfZXZlbnQoc2VsZiwgdGltZW91dD1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTEzMzQ5LDcgKzEzMzQ5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjV3YWl0X2V2ZW50KFB5T2JqZWN0ICoKKyAg ICAgICAgIH0KKyAgICAgICB9CisgICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgewor LSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9r d2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAid2FpdF9ldmVudCIp IDwgMCkpIF9fUFlYX0VSUigwLCA3MDQsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYgKHVu bGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFy Z25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAid2FpdF9ldmVudCIpIDwgMCkpIF9fUFlYX0VS UigwLCA3MDYsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIH0KKyAgICAgfSBlbHNlIHsKKyAgICAg ICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpIHsKK0BAIC0xMzM2Myw3ICsx MzM2Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzI1d2FpdF9ldmVudChQeU9iamVjdCAqCisgICB9CisgICBnb3RvIF9fcHl4X0w0 X2FyZ3VtZW50X3VucGFja2luZ19kb25lOworICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6Owor LSAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIndhaXRfZXZlbnQiLCAwLCAwLCAxLCBQeVR1 cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDcwNCwgX19weXhfTDNfZXJy b3IpCisrICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgid2FpdF9ldmVudCIsIDAsIDAsIDEs IFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgNzA2LCBfX3B5eF9M M19lcnJvcikKKyAgIF9fcHl4X0wzX2Vycm9yOjsKKyAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlk Y3V0dGVyLmxpYnMubXB2LkNvbnRleHQud2FpdF9ldmVudCIsIF9fcHl4X2NsaW5lbm8sIF9fcHl4 X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hDb250ZXh0 KCk7CitAQCAtMTMzOTEsNyArMTMzOTEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHdhaXRfZXZlbnQoc3RydWN0IF9fcAorICAg aW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndh aXRfZXZlbnQiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MDYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDgKKyAgKiAgICAgZGVm IHdhaXRfZXZlbnQoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgKiAgICAgICAgICIiIldyYXBzOiBt cHZfd2FpdF9ldmVudCIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTM0MDIsMTIgKzEzNDAyLDEyIEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI0d2FpdF9ldmVu dChzdHJ1Y3QgX19wCisgICBpZiAodW5saWtlbHkoIVB5X09wdGltaXplRmxhZykpIHsKKyAgICAg aWYgKHVubGlrZWx5KCEoX19weXhfdl9zZWxmLT5fY3R4ICE9IDApKSkgeworICAgICAgIFB5RXJy X1NldE5vbmUoUHlFeGNfQXNzZXJ0aW9uRXJyb3IpOworLSAgICAgIF9fUFlYX0VSUigwLCA3MDYs IF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9fUFlYX0VSUigwLCA3MDgsIF9fcHl4X0wxX2Vycm9y KQorICAgICB9CisgICB9CisgICAjZW5kaWYKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3MDcKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MDkK KyAgKiAgICAgICAgICIiIldyYXBzOiBtcHZfd2FpdF9ldmVudCIiIgorICAqICAgICAgICAgYXNz ZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgY2RlZiBkb3VibGUgdGltZW91dF9kID0gdGltZW91 dCBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGVsc2UgLTEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTEzNDE2LDE0ICsxMzQxNiwxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNHdhaXRfZXZlbnQoc3RydWN0IF9fcAor ICAqLworICAgX19weXhfdF8yID0gKF9fcHl4X3ZfdGltZW91dCAhPSBQeV9Ob25lKTsKKyAgIGlm ICgoX19weXhfdF8yICE9IDApKSB7CistICAgIF9fcHl4X3RfMyA9IF9fcHl4X1B5RmxvYXRfQXNE b3VibGUoX19weXhfdl90aW1lb3V0KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGRvdWJs ZSktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3MDcsIF9fcHl4X0wxX2Vy cm9yKQorKyAgICBfX3B5eF90XzMgPSBfX3B5eF9QeUZsb2F0X0FzRG91YmxlKF9fcHl4X3ZfdGlt ZW91dCk7IGlmICh1bmxpa2VseSgoX19weXhfdF8zID09IChkb3VibGUpLTEpICYmIFB5RXJyX09j Y3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNzA5LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19weXhf dF8xID0gX19weXhfdF8zOworICAgfSBlbHNlIHsKKyAgICAgX19weXhfdF8xID0gLTEuMDsKKyAg IH0KKyAgIF9fcHl4X3ZfdGltZW91dF9kID0gX19weXhfdF8xOworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjcwOQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjcxMQorICAqICAgICAgICAgY2RlZiBkb3VibGUgdGltZW91dF9kID0gdGltZW91dCBp ZiB0aW1lb3V0IGlzIG5vdCBOb25lIGVsc2UgLTEKKyAgKiAgICAgICAgIGNkZWYgbXB2X2V2ZW50 KiBldmVudAorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTEzNDM4LDcgKzEzNDM4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjR3YWl0X2V2ZW50KHN0cnVjdCBfX3AKKyAg ICAgICAjZW5kaWYKKyAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzEwCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzEyCisgICogICAgICAgICBjZGVmIG1wdl9ldmVudCogZXZlbnQKKyAgKiAg ICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgZXZlbnQgPSBtcHZfd2FpdF9ldmVu dChzZWxmLl9jdHgsIHRpbWVvdXRfZCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTEzNDQ4LDcgKzEzNDQ4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMjR3YWl0X2V2ZW50KHN0cnVjdCBfX3AKKyAgICAgICAgIF9f cHl4X3ZfZXZlbnQgPSBtcHZfd2FpdF9ldmVudChfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3Zf dGltZW91dF9kKTsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjcwOQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MTEKKyAgKiAgICAgICAgIGNkZWYgZG91YmxlIHRpbWVvdXRfZCA9IHRpbWVvdXQgaWYgdGltZW91 dCBpcyBub3QgTm9uZSBlbHNlIC0xCisgICogICAgICAgICBjZGVmIG1wdl9ldmVudCogZXZlbnQK KyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xMzQ2Nyw3ICsxMzQ2Nyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzI0d2FpdF9ldmVudChzdHJ1Y3QgX19wCisgICAgICAgfQor ICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxMQorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxMworICAqICAgICAgICAgd2l0aCBub2dp bDoKKyAgKiAgICAgICAgICAgICBldmVudCA9IG1wdl93YWl0X2V2ZW50KHNlbGYuX2N0eCwgdGlt ZW91dF9kKQorICAqICAgICAgICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzQ3NSwxNiArMTM0NzUsMTYgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMjR3 YWl0X2V2ZW50KHN0cnVjdCBfX3AKKyAgKiAgICAgZGVmIHdha2V1cChzZWxmKToKKyAgKi8KKyAg IF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9D YWxsTm9BcmcoKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudCkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3MTEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlP YmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNzEzLCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgX19weXhfdF81ID0gKChzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKikoKHN0cnVjdCBfX3B5eF9v YmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50ICopX19weXhfdF80KS0+X19weXhfdnRhYikt Pl9pbml0KCgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgKilf X3B5eF90XzQpLCBfX3B5eF92X2V2ZW50LCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7IGlm ICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDcxMSwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzUgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9FdmVudCAqKSgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RXZlbnQgKilfX3B5eF90XzQpLT5fX3B5eF92dGFiKS0+X2luaXQoKChzdHJ1Y3QgX19weXhfb2Jq Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqKV9fcHl4X3RfNCksIF9fcHl4X3ZfZXZlbnQs ICgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUpKSBf X1BZWF9FUlIoMCwgNzEzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzUpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgICBfX3B5 eF9yID0gX19weXhfdF81OworICAgX19weXhfdF81ID0gMDsKKyAgIGdvdG8gX19weXhfTDA7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzA0CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzA2CisgICogICAgICAgICByZXR1cm4gZXJyCisgICog CisgICogICAgIGRlZiB3YWl0X2V2ZW50KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzUwNCw3ICsxMzUwNCw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI0d2FpdF9ldmVudChz dHJ1Y3QgX19wCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjcxMworKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MTUKKyAgKiAgICAgICAgIHJldHVybiBFdmVudCgpLl9pbml0KGV2ZW50LCBzZWxmKQorICAqIAor ICAqICAgICBkZWYgd2FrZXVwKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMTM1MzQsNyArMTM1MzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yNndha2V1cChzdHJ1Y3QgX19weXhfbworICAgaW50IF9f cHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIndha2V1cCIs IDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxNQorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcxNworICAqICAgICBkZWYgd2FrZXVwKHNl bGYpOgorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIKKyAgKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHggICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEzNTQ1LDEy ICsxMzU0NSwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8yNndha2V1cChzdHJ1Y3QgX19weXhfbworICAgaWYgKHVubGlrZWx5KCFQ eV9PcHRpbWl6ZUZsYWcpKSB7CisgICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0 eCAhPSAwKSkpIHsKKyAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsK Ky0gICAgICBfX1BZWF9FUlIoMCwgNzE1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1BZWF9F UlIoMCwgNzE3LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgfQorICAgfQorICAgI2VuZGlmCisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE2CisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzE4CisgICogICAgICAgICAiIiJXcmFwczogbXB2X3dha2V1 cCIiIgorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgd2l0aCBub2dp bDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEzNTY1LDcgKzEzNTY1LDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRf MjZ3YWtldXAoc3RydWN0IF9fcHl4X28KKyAgICAgICAjZW5kaWYKKyAgICAgICAvKnRyeToqLyB7 CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE3CisrICAg ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE5CisgICogICAgICAgICBh c3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAg IG1wdl93YWtldXAoc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MTM1NzUsNyArMTM1NzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl83Q29udGV4dF8yNndha2V1cChzdHJ1Y3QgX19weXhfbworICAgICAgICAgbXB2 X3dha2V1cChfX3B5eF92X3NlbGYtPl9jdHgpOworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE2CisrICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjcxOAorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl93YWtldXAiIiIK KyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzU5NCw3ICsxMzU5NCw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI2d2Fr ZXVwKHN0cnVjdCBfX3B5eF9vCisgICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjcxMworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjcxNQorICAqICAgICAgICAgcmV0dXJuIEV2ZW50KCkuX2luaXQoZXZlbnQsIHNlbGYpCisg ICogCisgICogICAgIGRlZiB3YWtldXAoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xMzYxNCw3ICsxMzYxNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI2d2FrZXVwKHN0cnVjdCBfX3B5eF9vCisgICBy ZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjcxOQorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjEKKyAgKiAgICAgICAg ICAgICBtcHZfd2FrZXVwKHNlbGYuX2N0eCkKKyAgKiAKKyAgKiAgICAgZGVmIHNldF93YWtldXBf Y2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMTM2NDksNyArMTM2NDksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8yOHNldF93YWtldXBfY2FsbGJhY2socworICAgaW50IF9f cHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldF93YWtl dXBfY2FsbGJhY2siLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3MjEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjMKKyAgKiAgICAg ZGVmIHNldF93YWtldXBfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgorICAqICAgICAgICAgIiIi V3JhcHM6IG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrIiIiCisgICogICAgICAgICBhc3NlcnQgc2Vs Zi5fY3R4ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzY2MCwyNSArMTM2NjAs MjUgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMjhzZXRfd2FrZXVwX2NhbGxiYWNrKHMKKyAgIGlmICh1bmxpa2VseSghUHlfT3B0aW1p emVGbGFnKSkgeworICAgICBpZiAodW5saWtlbHkoIShfX3B5eF92X3NlbGYtPl9jdHggIT0gMCkp KSB7CisgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19Bc3NlcnRpb25FcnJvcik7CistICAgICAg X19QWVhfRVJSKDAsIDcyMSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19QWVhfRVJSKDAsIDcy MywgX19weXhfTDFfZXJyb3IpCisgICAgIH0KKyAgIH0KKyAgICNlbmRpZgorIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyMgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjcyNAorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfd2FrZXVwX2Nh bGxiYWNrIiIiCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBjZGVm IHVpbnQ2NF90IG5hbWUgPSA8dWludDY0X3Q+aWQoc2VsZikgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisgICogICAgICAg ICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChjYWxsYmFjaykKKyAgKi8KKy0gIF9fcHl4X3RfMSA9 IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfYnVpbHRpbl9pZCwgKChQeU9iamVjdCAq KV9fcHl4X3Zfc2VsZikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3 MjIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF9idWlsdGluX2lkLCAoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcyNCwgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Fz X3VpbnQ2NF90KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09ICgodWludDY0 X3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDcyMiwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChfX3B5eF90XzEp OyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2NF90KS0xKSkgJiYgUHlFcnJfT2Nj dXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3MjQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX3B5eF92X25hbWUgPSAoKHVpbnQ2 NF90KV9fcHl4X3RfMik7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzIzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzI1CisgICogICAgICAg ICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBjZGVmIHVpbnQ2NF90IG5hbWUgPSA8dWlu dDY0X3Q+aWQoc2VsZikKKyAgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBjYWxsYmFjayAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTM2OTEsMTQgKzEzNjkxLDE0IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI4c2V0 X3dha2V1cF9jYWxsYmFjayhzCisgICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5jYWxsYmFj ayk7CisgICBfX3B5eF92X3NlbGYtPmNhbGxiYWNrID0gX19weXhfdl9jYWxsYmFjazsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjQKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo3MjYKKyAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgbmFtZSA9 IDx1aW50NjRfdD5pZChzZWxmKQorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNr CisgICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnNldChjYWxsYmFjaykgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAg ICAgICBtcHZfc2V0X3dha2V1cF9jYWxsYmFjayhzZWxmLl9jdHgsIF9jX2NhbGxiYWNrLCA8dm9p ZCo+bmFtZSkKKyAgKi8KKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIo X19weXhfdl9zZWxmLT5jYWxsYmFja3RocmVhZCwgX19weXhfbl9zX3NldCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDcyNCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF90XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0 aHJlYWQsIF9fcHl4X25fc19zZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigwLCA3MjYsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7Cisg ICBfX3B5eF90XzQgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtl bHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8zKSkpIHsKK0BAIC0xMzcxMiwxMiArMTM3MTIsMTIg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMjhzZXRfd2FrZXVwX2NhbGxiYWNrKHMKKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90 XzQpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF80LCBfX3B5 eF92X2NhbGxiYWNrKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5 eF92X2NhbGxiYWNrKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDcyNCwgX19weXhf TDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3MjYs IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9E RUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjcyNQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyNworICAqICAg ICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisgICogICAgICAgICBzZWxmLmNhbGxiYWNr dGhyZWFkLnNldChjYWxsYmFjaykKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzczMiw3ICsxMzczMiw3IEBAIHN0YXRpYyBQeU9iamVj dCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzI4c2V0X3dha2V1cF9j YWxsYmFjayhzCisgICAgICAgI2VuZGlmCisgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyNgorKyAgICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyOAorICAqICAgICAgICAgc2VsZi5jYWxsYmFja3Ro cmVhZC5zZXQoY2FsbGJhY2spCisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAg ICAgIG1wdl9zZXRfd2FrZXVwX2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lk Kj5uYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTM3NDIsNyArMTM3NDIs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8yOHNldF93YWtldXBfY2FsbGJhY2socworICAgICAgICAgbXB2X3NldF93YWtldXBfY2Fs bGJhY2soX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Y19jYWxsYmFjaywgKCh2b2lkICopX19weXhfdl9uYW1lKSk7CisgICAgICAgfQorIAorLSAgICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MjUKKysgICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzI3CisgICogICAgICAgICBzZWxmLmNhbGxiYWNrID0g Y2FsbGJhY2sKKyAgKiAgICAgICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2V0KGNhbGxiYWNrKQor ICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTEzNzYxLDcgKzEzNzYxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMjhzZXRfd2FrZXVwX2NhbGxiYWNrKHMKKyAgICAgICB9Cisg ICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzE5CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzIxCisgICogICAgICAgICAgICAgbXB2X3dh a2V1cChzZWxmLl9jdHgpCisgICogCisgICogICAgIGRlZiBzZXRfd2FrZXVwX2NhbGxiYWNrKHNl bGYsIGNhbGxiYWNrKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEzNzg0LDcg KzEzNzg0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMjhzZXRfd2FrZXVwX2NhbGxiYWNrKHMKKyAgIHJldHVybiBfX3B5eF9yOwor IH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzI4CisrLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczMAorICAqICAgICAgICAgICAgIG1wdl9zZXRfd2Fr ZXVwX2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1lKQorICAqIAor ICAqICAgICBkZWYgZ2V0X3dha2V1cF9waXBlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTM4MTYsNyArMTM4MTYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93YWtldXBfcGlwZShzdHJ1Ywor ICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo ImdldF93YWtldXBfcGlwZSIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjczMAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczMgorICAq ICAgICBkZWYgZ2V0X3dha2V1cF9waXBlKHNlbGYpOgorICAqICAgICAgICAgIiIiV3JhcHM6IG1w dl9nZXRfd2FrZXVwX3BpcGUiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEzODI3LDEyICsxMzgyNywxMiBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93 YWtldXBfcGlwZShzdHJ1YworICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7Cisg ICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKyAgICAgICBQ eUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIoMCwg NzMwLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1BZWF9FUlIoMCwgNzMyLCBfX3B5eF9MMV9l cnJvcikKKyAgICAgfQorICAgfQorICAgI2VuZGlmCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzMyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzM0CisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4CisgICogICAgICAgICBjZGVmIGludCBw aXBlCisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtMTM4NDcsNyArMTM4NDcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93YWtldXBfcGlwZShzdHJ1YworICAgICAg ICNlbmRpZgorICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3MzMKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3MzUKKyAgKiAgICAgICAgIGNkZWYgaW50IHBpcGUKKyAgKiAgICAgICAgIHdpdGgg bm9naWw6CisgICogICAgICAgICAgICAgcGlwZSA9IG1wdl9nZXRfd2FrZXVwX3BpcGUoc2VsZi5f Y3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTM4NTcsNyArMTM4NTcsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4 dF8zMGdldF93YWtldXBfcGlwZShzdHJ1YworICAgICAgICAgX19weXhfdl9waXBlID0gbXB2X2dl dF93YWtldXBfcGlwZShfX3B5eF92X3NlbGYtPl9jdHgpOworICAgICAgIH0KKyAKKy0gICAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzMyCisrICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjczNAorICAqICAgICAgICAgYXNzZXJ0IHNlbGYuX2N0eAor ICAqICAgICAgICAgY2RlZiBpbnQgcGlwZQorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEzODc2LDcgKzEzODc2LDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzBnZXRfd2Fr ZXVwX3BpcGUoc3RydWMKKyAgICAgICB9CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzM0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzM2CisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIHBpcGUgPSBtcHZf Z2V0X3dha2V1cF9waXBlKHNlbGYuX2N0eCkKKyAgKiAgICAgICAgIHJldHVybiBwaXBlICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xMzg4NCwxMyArMTM4ODQsMTMgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzBnZXRf d2FrZXVwX3BpcGUoc3RydWMKKyAgKiAgICAgZGVmIF9fY2luaXRfXyhzZWxmKToKKyAgKi8KKyAg IF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9t X2ludChfX3B5eF92X3BpcGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA3MzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9p bnQoX19weXhfdl9waXBlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg NzM2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19w eXhfciA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgICBnb3RvIF9fcHl4X0wwOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyOAorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczMAorICAqICAgICAgICAgICAgIG1wdl9zZXRfd2Fr ZXVwX2NhbGxiYWNrKHNlbGYuX2N0eCwgX2NfY2FsbGJhY2ssIDx2b2lkKj5uYW1lKQorICAqIAor ICAqICAgICBkZWYgZ2V0X3dha2V1cF9waXBlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTM5MDksNyArMTM5MDksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zMGdldF93YWtldXBfcGlwZShzdHJ1Ywor ICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3MzYKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzM4CisgICogICAg ICAgICByZXR1cm4gcGlwZQorICAqIAorICAqICAgICBkZWYgX19jaW5pdF9fKHNlbGYpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTM5NDcsMjAgKzEzOTQ3LDIwIEBAIHN0YXRp YyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyX19jaW5pdF9f KHN0cnVjdCBfX3B5eF9vYmpfCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9S ZWZOYW5ueVNldHVwQ29udGV4dCgiX19jaW5pdF9fIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzM3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NzM5CisgICogCisgICogICAgIGRlZiBfX2Npbml0X18oc2VsZik6CisgICogICAgICAg ICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAg c2VsZi5fY3R4ID0gbXB2X2NyZWF0ZSgpCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeU9i amVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5faWQsICgoUHlPYmplY3QgKilfX3B5eF92X3Nl bGYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNzM3LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhf YnVpbHRpbl9pZCwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3MzksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CistICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Bc191aW50NjRfdChf X3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoKHVpbnQ2NF90KS0xKSkgJiYg UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3MzcsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfdF8yID0gX19QeXhfUHlJbnRfQXNfdWludDY0X3QoX19weXhfdF8xKTsgaWYgKHVubGlr ZWx5KChfX3B5eF90XzIgPT0gKCh1aW50NjRfdCktMSkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBf X1BZWF9FUlIoMCwgNzM5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworICAgX19weXhfdl9jdHhpZCA9ICgodWludDY0X3QpX19weXhf dF8yKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3MzgKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDAKKyAgKiAgICAgZGVmIF9fY2luaXRf XyhzZWxmKToKKyAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQo c2VsZikKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xMzk3NSw3ICsxMzk3NSw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzMyX19jaW5pdF9fKHN0cnVjdCBfX3B5eF9vYmpfCisgICAg ICAgI2VuZGlmCisgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjczOQorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc0MQorICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRf dD5pZChzZWxmKQorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICBzZWxm Ll9jdHggPSBtcHZfY3JlYXRlKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTEz OTg1LDcgKzEzOTg1LDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfN0NvbnRleHRfMzJfX2Npbml0X18oc3RydWN0IF9fcHl4X29ial8KKyAgICAgICAgIF9fcHl4 X3Zfc2VsZi0+X2N0eCA9IG1wdl9jcmVhdGUoKTsKKyAgICAgICB9CisgCistICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjczOAorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3NDAKKyAgKiAgICAgZGVmIF9fY2luaXRfXyhzZWxmKToKKyAgKiAg ICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2VsZikKKyAgKiAgICAg ICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNDAwNCw3 ICsxNDAwNCw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdD b250ZXh0XzMyX19jaW5pdF9fKHN0cnVjdCBfX3B5eF9vYmpfCisgICAgICAgfQorICAgfQorIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0MAorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc0MgorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAg ICAgICAgICAgICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkKKyAgKiAgICAgICAgIGlmIG5vdCBz ZWxmLl9jdHg6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNDAxNCwxNCArMTQw MTQsMTQgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfMzJfX2Npbml0X18oc3RydWN0IF9fcHl4X29ial8KKyAgIF9fcHl4X3RfMyA9ICgoIShfX3B5 eF92X3NlbGYtPl9jdHggIT0gMCkpICE9IDApOworICAgaWYgKHVubGlrZWx5KF9fcHl4X3RfMykp IHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0MQorKyAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQzCisgICogICAgICAgICAgICAgc2Vs Zi5fY3R4ID0gbXB2X2NyZWF0ZSgpCisgICogICAgICAgICBpZiBub3Qgc2VsZi5fY3R4OgorICAq ICAgICAgICAgICAgIHJhaXNlIE1QVkVycm9yKCJDb250ZXh0IGNyZWF0aW9uIGVycm9yIikgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVh ZCA9IENhbGxiYWNrVGhyZWFkKCkKKyAgKiAgICAgICAgIF9jYWxsYmFja3NbY3R4aWRdID0gc2Vs Zi5jYWxsYmFja3RocmVhZAorICAqLworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9f cHl4X3RfNCwgX19weXhfbl9zX01QVkVycm9yKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBf X1BZWF9FUlIoMCwgNzQxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19w eXhfdF80KSkgX19QWVhfRVJSKDAsIDc0MywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzQpOworICAgICBfX3B5eF90XzUgPSBOVUxMOworICAgICBpZiAoQ1lUSE9O X1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkpKSB7 CitAQCAtMTQwMzUsMTQgKzE0MDM1LDE0IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzMyX19jaW5pdF9fKHN0cnVjdCBfX3B5eF9vYmpfCisgICAg IH0KKyAgICAgX19weXhfdF8xID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFy Z3MoX19weXhfdF80LCBfX3B5eF90XzUsIF9fcHl4X2twX3NfQ29udGV4dF9jcmVhdGlvbl9lcnJv cikgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNCwgX19weXhfa3Bfc19Db250 ZXh0X2NyZWF0aW9uX2Vycm9yKTsKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5 eF90XzUgPSAwOworLSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA3 NDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA3NDMsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8x KTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgICAgIF9f UHl4X1JhaXNlKF9fcHl4X3RfMSwgMCwgMCwgMCk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzEpOyBfX3B5eF90XzEgPSAwOworLSAgICBfX1BZWF9FUlIoMCwgNzQxLCBfX3B5eF9MMV9lcnJv cikKKysgICAgX19QWVhfRVJSKDAsIDc0MywgX19weXhfTDFfZXJyb3IpCisgCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDAKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc0MgorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAg ICAgICBzZWxmLl9jdHggPSBtcHZfY3JlYXRlKCkKKyAgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9j dHg6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNDA1MSwxNCArMTQwNTEsMTQg QEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJf X2Npbml0X18oc3RydWN0IF9fcHl4X29ial8KKyAgKi8KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo3NDQKKyAgKiAgICAgICAgIGlmIG5vdCBzZWxmLl9jdHg6CisgICogICAgICAgICAg ICAgcmFpc2UgTVBWRXJyb3IoIkNvbnRleHQgY3JlYXRpb24gZXJyb3IiKQorICAqICAgICAgICAg c2VsZi5jYWxsYmFja3RocmVhZCA9IENhbGxiYWNrVGhyZWFkKCkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgX2NhbGxiYWNrc1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNr dGhyZWFkCisgICogICAgICAgICBzZWxmLnJlcGx5X3VzZXJkYXRhID0gZGljdCgpCisgICovCist ICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNCwgX19weXhfbl9zX0NhbGxiYWNr VGhyZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNzQyLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5 eF9uX3NfQ2FsbGJhY2tUaHJlYWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VS UigwLCA3NDQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7Cisg ICBfX3B5eF90XzUgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxp a2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzQpKSkgeworQEAgLTE0MDcyLDcgKzE0MDcyLDcg QEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJf X2Npbml0X18oc3RydWN0IF9fcHl4X29ial8KKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90 XzUpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSkgOiBf X1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19weXhfdF80KTsKKyAgIF9fUHl4X1hERUNSRUYoX19w eXhfdF81KTsgX19weXhfdF81ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDc0MiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA3NDQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAg IF9fUHl4X0dJVkVSRUYoX19weXhfdF8xKTsKK0BAIC0xNDA4MSw3ICsxNDA4MSw3IEBAIHN0YXRp YyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzMyX19jaW5pdF9f KHN0cnVjdCBfX3B5eF9vYmpfCisgICBfX3B5eF92X3NlbGYtPmNhbGxiYWNrdGhyZWFkID0gX19w eXhfdF8xOworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo3NDMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDUK KyAgKiAgICAgICAgICAgICByYWlzZSBNUFZFcnJvcigiQ29udGV4dCBjcmVhdGlvbiBlcnJvciIp CisgICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkID0gQ2FsbGJhY2tUaHJlYWQoKQorICAq ICAgICAgICAgX2NhbGxiYWNrc1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNrdGhyZWFkICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNDA5MCwxNyArMTQwOTAsMTcgQEAgc3RhdGljIGlu dCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0X18oc3Ry dWN0IF9fcHl4X29ial8KKyAgKi8KKyAgIF9fcHl4X3RfMSA9IF9fcHl4X3Zfc2VsZi0+Y2FsbGJh Y2t0aHJlYWQ7CisgICBfX1B5eF9JTkNSRUYoX19weXhfdF8xKTsKKy0gIGlmICh1bmxpa2VseShf X1B5eF9TZXRJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3Ms IF9fcHl4X3ZfY3R4aWQsIF9fcHl4X3RfMSwgdWludDY0X3QsIDAsIF9fUHl4X1B5SW50X0Zyb21f dWludDY0X3QsIDAsIDAsIDEpIDwgMCkpIF9fUFlYX0VSUigwLCA3NDMsIF9fcHl4X0wxX2Vycm9y KQorKyAgaWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX2NhbGxiYWNrcywgX19weXhfdl9jdHhpZCwgX19weXhfdF8xLCB1aW50NjRfdCwg MCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAs IDc0NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDQKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDYKKyAgKiAgICAgICAgIHNlbGYu Y2FsbGJhY2t0aHJlYWQgPSBDYWxsYmFja1RocmVhZCgpCisgICogICAgICAgICBfY2FsbGJhY2tz W2N0eGlkXSA9IHNlbGYuY2FsbGJhY2t0aHJlYWQKKyAgKiAgICAgICAgIHNlbGYucmVwbHlfdXNl cmRhdGEgPSBkaWN0KCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAg X3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gPSBzZWxmLnJlcGx5X3VzZXJkYXRhCisgICogICAgICAg ICBzZWxmLmNhbGxiYWNrdGhyZWFkLnN0YXJ0KCkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4 X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgNzQ0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5RGljdF9O ZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgNzQ2 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhf R0lWRVJFRihfX3B5eF90XzEpOworICAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+cmVwbHlf dXNlcmRhdGEpOworQEAgLTE0MTA4LDcgKzE0MTA4LDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0X18oc3RydWN0IF9fcHl4X29i al8KKyAgIF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBfX3B5eF90XzE7CisgICBfX3B5 eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0NQor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0NworICAqICAgICAgICAgX2Nh bGxiYWNrc1tjdHhpZF0gPSBzZWxmLmNhbGxiYWNrdGhyZWFkCisgICogICAgICAgICBzZWxmLnJl cGx5X3VzZXJkYXRhID0gZGljdCgpCisgICogICAgICAgICBfcmVwbHlfdXNlcmRhdGFzW2N0eGlk XSA9IHNlbGYucmVwbHlfdXNlcmRhdGEgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTE0MTE3LDE3ICsxNDExNywxNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8zMl9fY2luaXRfXyhzdHJ1Y3QgX19weXhfb2JqXworICAqLworICAg X19weXhfdF8xID0gX19weXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YTsKKyAgIF9fUHl4X0lOQ1JF RihfX3B5eF90XzEpOworLSAgaWYgKHVubGlrZWx5KF9fUHl4X1NldEl0ZW1JbnQoX19weXhfdl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywgX19weXhfdl9jdHhpZCwgX19w eXhfdF8xLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkg PCAwKSkgX19QWVhfRVJSKDAsIDc0NSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHko X19QeXhfU2V0SXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNl cmRhdGFzLCBfX3B5eF92X2N0eGlkLCBfX3B5eF90XzEsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUlu dF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzQ3LCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0NgorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc0OAorICAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YSA9IGRpY3QoKQorICAqICAgICAgICAgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gPSBzZWxmLnJl cGx5X3VzZXJkYXRhCisgICogICAgICAgICBzZWxmLmNhbGxiYWNrdGhyZWFkLnN0YXJ0KCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorICAqICAgICBAX2Vycm9ycworICAqLwor LSAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPmNh bGxiYWNrdGhyZWFkLCBfX3B5eF9uX3Nfc3RhcnQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCA3NDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF80ID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYtPmNhbGxiYWNrdGhyZWFkLCBfX3B5eF9u X3Nfc3RhcnQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NDgsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICBfX3B5eF90XzUg PSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2Rf Q2hlY2soX19weXhfdF80KSkpIHsKK0BAIC0xNDE0MSwxMiArMTQxNDEsMTIgQEAgc3RhdGljIGlu dCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJfX2Npbml0X18oc3Ry dWN0IF9fcHl4X29ial8KKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzUpID8gX19QeXhf UHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X3RfNSkgOiBfX1B5eF9QeU9iamVj dF9DYWxsTm9BcmcoX19weXhfdF80KTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19w eXhfdF81ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDc0 NiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA3NDgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7Cisg ICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjczNgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcz OAorICAqICAgICAgICAgcmV0dXJuIHBpcGUKKyAgKiAKKyAgKiAgICAgZGVmIF9fY2luaXRfXyhz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE0MTY4LDcgKzE0MTY4LDcg QEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzJf X2Npbml0X18oc3RydWN0IF9fcHl4X29ial8KKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0v KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQ5CisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc1MQorICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYg b2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBwcm9wLCBkYXRhPU5vbmUpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtMTQyMTYsNyArMTQyMTYsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9f cHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNW9ic2VydmVfcHJvcGVydHko UHlPYgorICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBpZiAodW5saWtlbHkoa3dfYXJncyA+ IDApKSB7CistICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRz KF9fcHl4X2t3ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJvYnNl cnZlX3Byb3BlcnR5IikgPCAwKSkgX19QWVhfRVJSKDAsIDc0OSwgX19weXhfTDNfZXJyb3IpCisr ICAgICAgICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3 ZHMsIF9fcHl4X3B5YXJnbmFtZXMsIDAsIHZhbHVlcywgcG9zX2FyZ3MsICJvYnNlcnZlX3Byb3Bl cnR5IikgPCAwKSkgX19QWVhfRVJSKDAsIDc1MSwgX19weXhfTDNfZXJyb3IpCisgICAgICAgfQor ICAgICB9IGVsc2UgeworICAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdz KSkgeworQEAgLTE0MjMyLDcgKzE0MjMyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzVvYnNlcnZlX3Byb3BlcnR5KFB5T2IKKyAg IH0KKyAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CisgICBfX3B5eF9M NV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgib2JzZXJ2 ZV9wcm9wZXJ0eSIsIDAsIDEsIDIsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZ WF9FUlIoMCwgNzQ5LCBfX3B5eF9MM19lcnJvcikKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZh bGlkKCJvYnNlcnZlX3Byb3BlcnR5IiwgMCwgMSwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSk7IF9fUFlYX0VSUigwLCA3NTEsIF9fcHl4X0wzX2Vycm9yKQorICAgX19weXhfTDNfZXJy b3I6OworICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ29udGV4dC5v YnNlcnZlX3Byb3BlcnR5IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxl bmFtZSk7CisgICBfX1B5eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKK0BAIC0xNDI2OCw3ICsx NDI2OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1CisgICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgib2JzZXJ2ZV9wcm9wZXJ0eSIsIDApOworICAgX19QeXhfSU5DUkVGKF9fcHl4X3Zf cHJvcCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzUxCisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzUzCisgICogICAgIGRlZiBvYnNlcnZl X3Byb3BlcnR5KHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6CisgICogICAgICAgICAiIiJXcmFwczog bXB2X29ic2VydmVfcHJvcGVydHkiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE0Mjc5LDQxICsxNDI3OSw0MSBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNG9i c2VydmVfcHJvcGVydHkoc3RydQorICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7 CisgICAgIGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKyAgICAg ICBQeUVycl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIo MCwgNzUxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1BZWF9FUlIoMCwgNzUzLCBfX3B5eF9M MV9lcnJvcikKKyAgICAgfQorICAgfQorICAgI2VuZGlmCisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NzUyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NzU0CisgICogICAgICAgICAiIiJXcmFwczogbXB2X29ic2VydmVfcHJvcGVydHkiIiIKKyAg KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRf ZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KyAgKiAgICAgICAgIGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorICAqICAgICAgICAg dXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKyAgKi8K Ky0gIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMSA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwgNzUyLCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsgaWYg KHVubGlrZWx5KF9fcHl4X3RfMSA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwgNzU0 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4X3ZfaWRfZGF0YSA9ICgodWludDY0X3QpX19weXhf dF8xKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTMKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTUKKyAgKiAgICAgICAgIGFzc2VydCBz ZWxmLl9jdHgKKyAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5o YXNoKGRhdGEpCisgICogICAgICAgICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5y ZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkKKyAgKiAgICAgICAgIGlmIHVzZXJkYXRh cyBpcyBOb25lOgorICAqLworLSAgX19weXhfdF8xID0gUHlPYmplY3RfSGFzaChfX3B5eF92X2Rh dGEpOyBpZiAodW5saWtlbHkoX19weXhfdF8xID09ICgoUHlfaGFzaF90KS0xKSkpIF9fUFlYX0VS UigwLCA3NTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gUHlPYmplY3RfSGFzaChf X3B5eF92X2RhdGEpOyBpZiAodW5saWtlbHkoX19weXhfdF8xID09ICgoUHlfaGFzaF90KS0xKSkp IF9fUFlYX0VSUigwLCA3NTUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfdl9pZF9kYXRhID0g KCh1aW50NjRfdClfX3B5eF90XzEpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjc1NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NgorICAq ICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKyAg KiAgICAgICAgIGlkX2RhdGEgPSA8dWludDY0X3Q+aGFzaChkYXRhKQorICAqICAgICAgICAgdXNl cmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9uZSkgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5vbmU6Cisg ICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9 IF9SZXBseVVzZXJEYXRhKGRhdGEpCisgICovCistICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVj dF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X25fc19nZXQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCA3NTQsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3Nl bGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzMpKSBfX1BZWF9FUlIoMCwgNzU2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzMpOworLSAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChfX3B5 eF92X2lkX2RhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NTQs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRf dChfX3B5eF92X2lkX2RhdGEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigw LCA3NTYsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICBf X3B5eF90XzUgPSBOVUxMOworICAgX19weXhfdF82ID0gMDsKK0BAIC0xNDMzMCw3ICsxNDMzMCw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1CisgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQUxMCisg ICBpZiAoUHlGdW5jdGlvbl9DaGVjayhfX3B5eF90XzMpKSB7CisgICAgIFB5T2JqZWN0ICpfX3B5 eF90ZW1wWzNdID0ge19fcHl4X3RfNSwgX19weXhfdF80LCBQeV9Ob25lfTsKKy0gICAgX19weXhf dF8yID0gX19QeXhfUHlGdW5jdGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1f X3B5eF90XzYsIDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9F UlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlGdW5j dGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1fX3B5eF90XzYsIDIrX19weXhf dF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzU2LCBfX3B5eF9M MV9lcnJvcikKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwor ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf NCk7IF9fcHl4X3RfNCA9IDA7CitAQCAtMTQzMzksMTQgKzE0MzM5LDE0IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM0b2JzZXJ2ZV9w cm9wZXJ0eShzdHJ1CisgICAjaWYgQ1lUSE9OX0ZBU1RfUFlDQ0FMTAorICAgaWYgKF9fUHl4X1B5 RmFzdENGdW5jdGlvbl9DaGVjayhfX3B5eF90XzMpKSB7CisgICAgIFB5T2JqZWN0ICpfX3B5eF90 ZW1wWzNdID0ge19fcHl4X3RfNSwgX19weXhfdF80LCBQeV9Ob25lfTsKKy0gICAgX19weXhfdF8y ID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19weXhfdF8zLCBfX3B5eF90ZW1wKzEtX19w eXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDc1NCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Q0Z1bmN0 aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90 XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTYsIF9fcHl4X0wx X2Vycm9yKQorICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7Cisg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKKyAgIH0gZWxzZQorICAgI2VuZGlmCisgICB7CistICAgIF9fcHl4 X3RfNyA9IFB5VHVwbGVfTmV3KDIrX19weXhfdF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzcp KSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF83ID0gUHlU dXBsZV9OZXcoMitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VS UigwLCA3NTYsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsK KyAgICAgaWYgKF9fcHl4X3RfNSkgeworICAgICAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF81KTsg UHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzcsIDAsIF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IE5V TEw7CitAQCAtMTQzNTcsNyArMTQzNTcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNG9ic2VydmVfcHJvcGVydHkoc3RydQorICAg ICBfX1B5eF9HSVZFUkVGKFB5X05vbmUpOworICAgICBQeVR1cGxlX1NFVF9JVEVNKF9fcHl4X3Rf NywgMStfX3B5eF90XzYsIFB5X05vbmUpOworICAgICBfX3B5eF90XzQgPSAwOworLSAgICBfX3B5 eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMywgX19weXhfdF83LCBOVUxMKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzU0LCBfX3B5eF9MMV9lcnJv cikKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzMsIF9fcHl4 X3RfNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc1Niwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgICBfX1B5 eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAgIH0KK0BAIC0xNDM2NSw3ICsx NDM2NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzdDb250ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1CisgICBfX3B5eF92X3VzZXJkYXRhcyA9 IF9fcHl4X3RfMjsKKyAgIF9fcHl4X3RfMiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NzU1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzU3CisgICogICAgICAgICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKyAgKiAgICAg ICAgIHVzZXJkYXRhcyA9IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCisg ICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTE0Mzc2LDE0ICsxNDM3NiwxNCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNG9ic2VydmVfcHJvcGVydHkoc3RydQor ICAgX19weXhfdF85ID0gKF9fcHl4X3RfOCAhPSAwKTsKKyAgIGlmIChfX3B5eF90XzkpIHsKKyAK Ky0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NgorKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU4CisgICogICAgICAgICB1c2VyZGF0YXMgPSBz ZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorICAqICAgICAgICAgaWYgdXNl cmRhdGFzIGlzIE5vbmU6CisgICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9k YXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9IFRydWUKKyAgKiAg ICAgICAgIHByb3AgPSBfc3RyZW5jKHByb3ApCisgICovCistICAgIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF8zLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc1NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8zLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0 YSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc1OCwgX19weXhfTDFf ZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgICBfX3B5eF90XzcgPSBO VUxMOworICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9k X0NoZWNrKF9fcHl4X3RfMykpKSB7CitAQCAtMTQzOTcsMTUgKzE0Mzk3LDE1IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM0b2JzZXJ2 ZV9wcm9wZXJ0eShzdHJ1CisgICAgIH0KKyAgICAgX19weXhfdF8yID0gKF9fcHl4X3RfNykgPyBf X1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8zLCBfX3B5eF90XzcsIF9fcHl4X3ZfZGF0 YSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdl9kYXRhKTsK KyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAgICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTYsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NTgsIF9fcHl4X0wx X2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICAgIGlmICh1bmxpa2VseShfX1B5eF9TZXRJ dGVtSW50KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X3ZfaWRfZGF0YSwgX19w eXhfdF8yLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkg PCAwKSkgX19QWVhfRVJSKDAsIDc1NiwgX19weXhfTDFfZXJyb3IpCisrICAgIGlmICh1bmxpa2Vs eShfX1B5eF9TZXRJdGVtSW50KF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEsIF9fcHl4X3Zf aWRfZGF0YSwgX19weXhfdF8yLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRf dCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc1OCwgX19weXhfTDFfZXJyb3IpCisgICAg IF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOworICAgICBfX1B5eF9ERUNSRUZfU0VUKF9fcHl4X3Zf dXNlcmRhdGFzLCBfX3B5eF90XzIpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19w eXhfdF8yID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1 NQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzU3CisgICogICAgICAg ICBpZF9kYXRhID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkKKyAgKiAgICAgICAgIHVzZXJkYXRhcyA9 IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCisgICogICAgICAgICBpZiB1 c2VyZGF0YXMgaXMgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE0NDE0 LDIzICsxNDQxNCwyMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl83Q29udGV4dF8zNG9ic2VydmVfcHJvcGVydHkoc3RydQorICAqLworICAgfQorIAor LSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc1NworKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjc1OQorICAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIE5v bmU6CisgICogICAgICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJk YXRhcyA9IF9SZXBseVVzZXJEYXRhKGRhdGEpCisgICogICAgICAgICB1c2VyZGF0YXMub2JzZXJ2 ZWQgPSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHByb3Ag PSBfc3RyZW5jKHByb3ApCisgICogICAgICAgICBjZGVmIGNoYXIqIHByb3BjID0gcHJvcAorICAq LworLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl91c2VyZGF0YXMsIF9f cHl4X25fc19vYnNlcnZlZCwgUHlfVHJ1ZSkgPCAwKSBfX1BZWF9FUlIoMCwgNzU3LCBfX3B5eF9M MV9lcnJvcikKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3ZfdXNlcmRh dGFzLCBfX3B5eF9uX3Nfb2JzZXJ2ZWQsIFB5X1RydWUpIDwgMCkgX19QWVhfRVJSKDAsIDc1OSwg X19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzU4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzYwCisgICogICAgICAg ICAgICAgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXSA9IHVzZXJkYXRhcyA9IF9SZXBseVVz ZXJEYXRhKGRhdGEpCisgICogICAgICAgICB1c2VyZGF0YXMub2JzZXJ2ZWQgPSBUcnVlCisgICog ICAgICAgICBwcm9wID0gX3N0cmVuYyhwcm9wKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisgICogICAgICAgICBjZGVmIGNoYXIqIHByb3BjID0gcHJvcAorICAqICAgICAgICAgY2RlZiBp bnQgZXJyCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMywgX19w eXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc1 OCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3Rf MywgX19weXhfbl9zX3N0cmVuYyk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJS KDAsIDc2MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAg IF9fcHl4X3RfNyA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlr ZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfMykpKSB7CitAQCAtMTQ0NDQsMjMgKzE0NDQ0LDIz IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250 ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0eShzdHJ1CisgICB9CisgICBfX3B5eF90XzIgPSAoX19weXhf dF83KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNywgX19w eXhfdl9wcm9wKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF92 X3Byb3ApOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworLSAg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzU4LCBfX3B5eF9MMV9lcnJv cikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc2MCwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworICAgX19QeXhfREVDUkVGX1NFVChfX3B5eF92X3By b3AsIF9fcHl4X3RfMik7CisgICBfX3B5eF90XzIgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjc1OQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjc2MQorICAqICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gVHJ1ZQorICAqICAgICAg ICAgcHJvcCA9IF9zdHJlbmMocHJvcCkKKyAgKiAgICAgICAgIGNkZWYgY2hhciogcHJvcGMgPSBw cm9wICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGNkZWYgaW50IGVy cgorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gIF9fcHl4X3RfMTAgPSBfX1B5eF9Q eU9iamVjdF9Bc1dyaXRhYmxlU3RyaW5nKF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9f cHl4X3RfMTApICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgNzU5LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeU9iamVjdF9Bc1dyaXRhYmxlU3RyaW5n KF9fcHl4X3ZfcHJvcCk7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfMTApICYmIFB5RXJyX09jY3Vy cmVkKCkpKSBfX1BZWF9FUlIoMCwgNzYxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4X3ZfcHJv cGMgPSBfX3B5eF90XzEwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojc2MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2MworICAqICAgICAg ICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAq ICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE0 NDc1LDcgKzE0NDc1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfN0NvbnRleHRfMzRvYnNlcnZlX3Byb3BlcnR5KHN0cnUKKyAgICAgICAjZW5kaWYK KyAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6NzYyCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NzY0CisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKiAgICAgICAgIHdpdGggbm9naWw6Cisg ICogICAgICAgICAgICAgZXJyID0gbXB2X29ic2VydmVfcHJvcGVydHkoICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xNDQ4NSw3ICsxNDQ4NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM0b2JzZXJ2ZV9wcm9wZXJ0 eShzdHJ1CisgICAgICAgICBfX3B5eF92X2VyciA9IG1wdl9vYnNlcnZlX3Byb3BlcnR5KF9fcHl4 X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9pZF9kYXRhLCBfX3B5eF92X3Byb3BjLCBNUFZfRk9STUFU X05PREUpOworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NzYxCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc2Mwor ICAqICAgICAgICAgY2RlZiBjaGFyKiBwcm9wYyA9IHByb3AKKyAgKiAgICAgICAgIGNkZWYgaW50 IGVycgorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTE0NTA0LDcgKzE0NTA0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzRvYnNlcnZlX3Byb3BlcnR5KHN0cnUKKyAgICAg ICB9CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzY4Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzcwCisgICogICAgICAgICAgICAg ICAgIE1QVl9GT1JNQVRfTk9ERSwKKyAgKiAgICAgICAgICAgICApCisgICogICAgICAgICByZXR1 cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNDUxMiwxMyArMTQ1MTIs MTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMzRvYnNlcnZlX3Byb3BlcnR5KHN0cnUKKyAgKiAgICAgQF9lcnJvcnMKKyAgKi8KKyAg IF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9t X2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDc2OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2lu dChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc3 MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgIF9fcHl4 X3IgPSBfX3B5eF90XzI7CisgICBfX3B5eF90XzIgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NDkKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NTEKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAg ICAgZGVmIG9ic2VydmVfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGF0YT1Ob25lKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE0NTQzLDcgKzE0NTQzLDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzRvYnNlcnZlX3By b3BlcnR5KHN0cnUKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6NzcxCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojc3MworICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgdW5vYnNlcnZlX3Byb3Bl cnR5KHNlbGYsIGRhdGEpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTQ1ODUs NyArMTQ1ODUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0eShzdAorICAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVub2JzZXJ2ZV9wcm9wZXJ0 eSIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3MworKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3NQorICAqICAgICBkZWYgdW5vYnNl cnZlX3Byb3BlcnR5KHNlbGYsIGRhdGEpOgorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl91bm9i c2VydmVfcHJvcGVydHkiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHggICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE0NTk2LDMxICsxNDU5NiwzMSBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2 ZV9wcm9wZXJ0eShzdAorICAgaWYgKHVubGlrZWx5KCFQeV9PcHRpbWl6ZUZsYWcpKSB7CisgICAg IGlmICh1bmxpa2VseSghKF9fcHl4X3Zfc2VsZi0+X2N0eCAhPSAwKSkpIHsKKyAgICAgICBQeUVy cl9TZXROb25lKFB5RXhjX0Fzc2VydGlvbkVycm9yKTsKKy0gICAgICBfX1BZWF9FUlIoMCwgNzcz LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX1BZWF9FUlIoMCwgNzc1LCBfX3B5eF9MMV9lcnJv cikKKyAgICAgfQorICAgfQorICAgI2VuZGlmCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6Nzc0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc2 CisgICogICAgICAgICAiIiJXcmFwczogbXB2X3Vub2JzZXJ2ZV9wcm9wZXJ0eSIiIgorICAqICAg ICAgICAgYXNzZXJ0IHNlbGYuX2N0eAorICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBpZF9kYXRh ID0gPHVpbnQ2NF90Pmhhc2goZGF0YSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAq ICAgICAgICAgdXNlcmRhdGFzID0gc2VsZi5yZXBseV91c2VyZGF0YS5nZXQoaWRfZGF0YSwgTm9u ZSkKKyAgKiAgICAgICAgIGlmIHVzZXJkYXRhcyBpcyBub3QgTm9uZToKKyAgKi8KKy0gIF9fcHl4 X3RfMSA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf MSA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwgNzc0LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfMSA9IFB5T2JqZWN0X0hhc2goX19weXhfdl9kYXRhKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMSA9PSAoKFB5X2hhc2hfdCktMSkpKSBfX1BZWF9FUlIoMCwgNzc2LCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fcHl4X3ZfaWRfZGF0YSA9ICgodWludDY0X3QpX19weXhfdF8xKTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzUKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzcKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgK KyAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEp CisgICogICAgICAgICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRh LCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBpZiB1c2Vy ZGF0YXMgaXMgbm90IE5vbmU6CisgICogICAgICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0g RmFsc2UKKyAgKi8KKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19w eXhfdl9zZWxmLT5yZXBseV91c2VyZGF0YSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc3NSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90 XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRh dGEsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigw LCA3NzcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CistICBf X3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfaWRfZGF0YSk7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc3NSwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzQgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KF9fcHl4X3ZfaWRfZGF0 YSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc3NywgX19weXhfTDFf ZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgIF9fcHl4X3RfNSA9IE5VTEw7 CisgICBfX3B5eF90XzYgPSAwOworQEAgLTE0NjM3LDcgKzE0NjM3LDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVf cHJvcGVydHkoc3QKKyAgICNpZiBDWVRIT05fRkFTVF9QWUNBTEwKKyAgIGlmIChQeUZ1bmN0aW9u X0NoZWNrKF9fcHl4X3RfMykpIHsKKyAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19w eXhfdF81LCBfX3B5eF90XzQsIFB5X05vbmV9OworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUZ1 bmN0aW9uX0Zhc3RDYWxsKF9fcHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5 eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4 X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUZ1bmN0aW9uX0Zhc3RDYWxsKF9f cHl4X3RfMywgX19weXhfdGVtcCsxLV9fcHl4X3RfNiwgMitfX3B5eF90XzYpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzcsIF9fcHl4X0wxX2Vycm9yKQorICAgICBf X1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKK0BAIC0xNDY0NiwxNCArMTQ2NDYsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHkoc3QKKyAg ICNpZiBDWVRIT05fRkFTVF9QWUNDQUxMCisgICBpZiAoX19QeXhfUHlGYXN0Q0Z1bmN0aW9uX0No ZWNrKF9fcHl4X3RfMykpIHsKKyAgICAgUHlPYmplY3QgKl9fcHl4X3RlbXBbM10gPSB7X19weXhf dF81LCBfX3B5eF90XzQsIFB5X05vbmV9OworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeUNGdW5j dGlvbl9GYXN0Q2FsbChfX3B5eF90XzMsIF9fcHl4X3RlbXArMS1fX3B5eF90XzYsIDIrX19weXhf dF82KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzc1LCBfX3B5eF9M MV9lcnJvcikKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlDRnVuY3Rpb25fRmFzdENhbGwoX19w eXhfdF8zLCBfX3B5eF90ZW1wKzEtX19weXhfdF82LCAyK19fcHl4X3RfNik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc3NywgX19weXhfTDFfZXJyb3IpCisgICAgIF9f UHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKyAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAw OworICAgfSBlbHNlCisgICAjZW5kaWYKKyAgIHsKKy0gICAgX19weXhfdF83ID0gUHlUdXBsZV9O ZXcoMitfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA3 NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygyK19fcHl4 X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDc3NywgX19weXhf TDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworICAgICBpZiAoX19weXhf dF81KSB7CisgICAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzUpOyBQeVR1cGxlX1NFVF9JVEVN KF9fcHl4X3RfNywgMCwgX19weXhfdF81KTsgX19weXhfdF81ID0gTlVMTDsKK0BAIC0xNDY2NCw3 ICsxNDY2NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0XzM2dW5vYnNlcnZlX3Byb3BlcnR5KHN0CisgICAgIF9fUHl4X0dJVkVSRUYo UHlfTm9uZSk7CisgICAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAxK19fcHl4X3RfNiwg UHlfTm9uZSk7CisgICAgIF9fcHl4X3RfNCA9IDA7CistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5 T2JqZWN0X0NhbGwoX19weXhfdF8zLCBfX3B5eF90XzcsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90 XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMywgX19weXhfdF83LCBOVUxMKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzc3LCBfX3B5eF9MMV9lcnJvcikK KyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzcpOyBfX3B5eF90XzcgPSAwOworICAgfQorQEAgLTE0NjcyLDcgKzE0NjcyLDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9i c2VydmVfcHJvcGVydHkoc3QKKyAgIF9fcHl4X3ZfdXNlcmRhdGFzID0gX19weXhfdF8yOworICAg X19weXhfdF8yID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 NzYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzgKKyAgKiAgICAgICAg IGNkZWYgdWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisgICogICAgICAg ICB1c2VyZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorICAq ICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTQ2ODMsNDAgKzE0NjgzLDQwIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM2dW5vYnNlcnZlX3Byb3BlcnR5KHN0 CisgICBfX3B5eF90XzkgPSAoX19weXhfdF84ICE9IDApOworICAgaWYgKF9fcHl4X3RfOSkgewor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc3CisrICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzkKKyAgKiAgICAgICAgIHVzZXJkYXRhcyA9 IHNlbGYucmVwbHlfdXNlcmRhdGEuZ2V0KGlkX2RhdGEsIE5vbmUpCisgICogICAgICAgICBpZiB1 c2VyZGF0YXMgaXMgbm90IE5vbmU6CisgICogICAgICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVk ID0gRmFsc2UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIGlm IHVzZXJkYXRhcy5jb3VudGVyIDw9IDA6CisgICogICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJl cGx5X3VzZXJkYXRhW2lkX2RhdGFdCisgICovCistICAgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRB dHRyU3RyKF9fcHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3Nfb2JzZXJ2ZWQsIFB5X0ZhbHNlKSA8 IDApIF9fUFlYX0VSUigwLCA3NzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBpZiAoX19QeXhfUHlP YmplY3RfU2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX29ic2VydmVkLCBQ eV9GYWxzZSkgPCAwKSBfX1BZWF9FUlIoMCwgNzc5LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3OAorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzgwCisgICogICAgICAgICBpZiB1c2VyZGF0YXMgaXMgbm90 IE5vbmU6CisgICogICAgICAgICAgICAgdXNlcmRhdGFzLm9ic2VydmVkID0gRmFsc2UKKyAgKiAg ICAgICAgICAgICBpZiB1c2VyZGF0YXMuY291bnRlciA8PSAwOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJlcGx5X3VzZXJkYXRhW2lk X2RhdGFdCisgICogICAgICAgICBjZGVmIGludCBlcnIKKyAgKi8KKy0gICAgX19weXhfdF8yID0g X19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3VzZXJkYXRhcywgX19weXhfbl9zX2Nv dW50ZXIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3NzgsIF9fcHl4 X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3ZfdXNlcmRhdGFzLCBfX3B5eF9uX3NfY291bnRlcik7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDc4MCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOworLSAgICBfX3B5eF90XzMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5 eF90XzIsIF9fcHl4X2ludF8wLCBQeV9MRSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8zKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgNzc4LCBfX3B5eF9MMV9lcnJvcikK KysgICAgX19weXhfdF8zID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdF8yLCBfX3B5eF9p bnRfMCwgUHlfTEUpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseSghX19w eXhfdF8zKSkgX19QWVhfRVJSKDAsIDc4MCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0RF Q1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBfX3B5eF90XzkgPSBfX1B5eF9Q eU9iamVjdF9Jc1RydWUoX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfOSA8IDApKSBf X1BZWF9FUlIoMCwgNzc4LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF85ID0gX19QeXhf UHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMyk7IGlmICh1bmxpa2VseShfX3B5eF90XzkgPCAwKSkg X19QWVhfRVJSKDAsIDc4MCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzMpOyBfX3B5eF90XzMgPSAwOworICAgICBpZiAoX19weXhfdF85KSB7CisgCistICAgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc3OQorKyAgICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3ODEKKyAgKiAgICAgICAgICAgICB1c2VyZGF0YXMub2Jz ZXJ2ZWQgPSBGYWxzZQorICAqICAgICAgICAgICAgIGlmIHVzZXJkYXRhcy5jb3VudGVyIDw9IDA6 CisgICogICAgICAgICAgICAgICAgIGRlbCBzZWxmLnJlcGx5X3VzZXJkYXRhW2lkX2RhdGFdICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAq ICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gICAgICBpZiAodW5saWtlbHkoX19QeXhfRGVs SXRlbUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2lkX2RhdGEsIHVp bnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZ WF9FUlIoMCwgNzc5LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBpZiAodW5saWtlbHkoX19QeXhf RGVsSXRlbUludChfX3B5eF92X3NlbGYtPnJlcGx5X3VzZXJkYXRhLCBfX3B5eF92X2lkX2RhdGEs IHVpbnQ2NF90LCAwLCBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBf X1BZWF9FUlIoMCwgNzgxLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc4CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc4MAorICAqICAgICAgICAgaWYgdXNlcmRhdGFzIGlzIG5vdCBOb25lOgorICAq ICAgICAgICAgICAgIHVzZXJkYXRhcy5vYnNlcnZlZCA9IEZhbHNlCisgICogICAgICAgICAgICAg aWYgdXNlcmRhdGFzLmNvdW50ZXIgPD0gMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTE0NzI1LDcgKzE0NzI1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHkoc3QKKyAgKi8KKyAg ICAgfQorIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzc2CisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzgKKyAgKiAgICAgICAgIGNkZWYg dWludDY0X3QgaWRfZGF0YSA9IDx1aW50NjRfdD5oYXNoKGRhdGEpCisgICogICAgICAgICB1c2Vy ZGF0YXMgPSBzZWxmLnJlcGx5X3VzZXJkYXRhLmdldChpZF9kYXRhLCBOb25lKQorICAqICAgICAg ICAgaWYgdXNlcmRhdGFzIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtMTQ3MzQsNyArMTQ3MzQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0eShzdAorICAqLwor ICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4MQorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4MworICAqICAgICAgICAgICAgICAgICBk ZWwgc2VsZi5yZXBseV91c2VyZGF0YVtpZF9kYXRhXQorICAqICAgICAgICAgY2RlZiBpbnQgZXJy CisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMTQ3NDksNyArMTQ3NDksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2ZV9wcm9wZXJ0eShzdAorICAgICAgICNl bmRpZgorICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3ODIKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo3ODQKKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgorICAqICAgICAgICAgd2l0aCBub2dp bDoKKyAgKiAgICAgICAgICAgICBlcnIgPSBtcHZfdW5vYnNlcnZlX3Byb3BlcnR5KCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTQ3NTksNyArMTQ3NTksNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zNnVub2JzZXJ2 ZV9wcm9wZXJ0eShzdAorICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfdW5vYnNlcnZlX3Byb3Bl cnR5KF9fcHl4X3Zfc2VsZi0+X2N0eCwgX19weXhfdl9pZF9kYXRhKTsKKyAgICAgICB9CisgCist ICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc4MQorKyAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3ODMKKyAgKiAgICAgICAgICAgICAgICAgZGVs IHNlbGYucmVwbHlfdXNlcmRhdGFbaWRfZGF0YV0KKyAgKiAgICAgICAgIGNkZWYgaW50IGVycgor ICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTE0Nzc4LDcgKzE0Nzc4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHkoc3QKKyAgICAgICB9Cisg ICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg2CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg4CisgICogICAgICAgICAgICAgICAgIGlk X2RhdGEsCisgICogICAgICAgICAgICAgKQorICAqICAgICAgICAgcmV0dXJuIGVyciAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTQ3ODYsMTMgKzE0Nzg2LDEzIEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM2dW5vYnNl cnZlX3Byb3BlcnR5KHN0CisgICogICAgIGRlZiBzaHV0ZG93bihzZWxmKToKKyAgKi8KKyAgIF9f UHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2lu dChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc4 NiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Gcm9tX2ludChf X3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDc4OCwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgIF9fcHl4X3Ig PSBfX3B5eF90XzM7CisgICBfX3B5eF90XzMgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzEKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo3NzMKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAgICAg ZGVmIHVub2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTE0ODE2LDcgKzE0ODE2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzZ1bm9ic2VydmVfcHJvcGVydHkoc3QK KyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6Nzg4CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5MAorICAqICAg ICAgICAgcmV0dXJuIGVycgorICAqIAorICAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNDg1MSw3ICsxNDg1MSw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRv d24oc3RydWN0IF9fcHl4CisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZO YW5ueVNldHVwQ29udGV4dCgic2h1dGRvd24iLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo3ODkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3OTEKKyAgKiAKKyAgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOgorICAqICAgICAgICAgaWYg c2VsZi5fY3R4ID09IE5VTEw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNDg2 MSw3ICsxNDg2MSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4CisgICBfX3B5eF90XzEgPSAo KF9fcHl4X3Zfc2VsZi0+X2N0eCA9PSBOVUxMKSAhPSAwKTsKKyAgIGlmIChfX3B5eF90XzEpIHsK KyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5MAorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzkyCisgICogICAgIGRlZiBzaHV0ZG93bihz ZWxmKToKKyAgKiAgICAgICAgIGlmIHNlbGYuX2N0eCA9PSBOVUxMOgorICAqICAgICAgICAgICAg IHJldHVybiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTQ4NzIsNyArMTQ4NzIs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29u dGV4dF8zOHNodXRkb3duKHN0cnVjdCBfX3B5eAorICAgICBfX3B5eF9yID0gUHlfTm9uZTsgX19Q eXhfSU5DUkVGKFB5X05vbmUpOworICAgICBnb3RvIF9fcHl4X0wwOworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzg5CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo3OTEKKyAgKiAKKyAgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOgorICAq ICAgICAgICAgaWYgc2VsZi5fY3R4ID09IE5VTEw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xNDg4MSwyMCArMTQ4ODEsMjAgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzhzaHV0ZG93bihzdHJ1Y3QgX19weXgKKyAg Ki8KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTEKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTMKKyAgKiAgICAgICAgIGlmIHNl bGYuX2N0eCA9PSBOVUxMOgorICAqICAgICAgICAgICAgIHJldHVybgorICAqICAgICAgICAgY2Rl ZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5pZChzZWxmKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIG1wdl90 ZXJtaW5hdGVfZGVzdHJveShzZWxmLl9jdHgpCisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9Q eU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5faWQsICgoUHlPYmplY3QgKilfX3B5eF92 X3NlbGYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzkxLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19w eXhfYnVpbHRpbl9pZCwgKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZikpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA3OTMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7CistICBfX3B5eF90XzMgPSBfX1B5eF9QeUludF9Bc191aW50NjRf dChfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoKHVpbnQ2NF90KS0xKSkg JiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA3OTEsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfQXNfdWludDY0X3QoX19weXhfdF8yKTsgaWYgKHVu bGlrZWx5KChfX3B5eF90XzMgPT0gKCh1aW50NjRfdCktMSkpICYmIFB5RXJyX09jY3VycmVkKCkp KSBfX1BZWF9FUlIoMCwgNzkzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19weXhfdl9jdHhpZCA9ICgodWludDY0X3QpX19w eXhfdF8zKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTIKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTQKKyAgKiAgICAgICAgICAgICBy ZXR1cm4KKyAgKiAgICAgICAgIGNkZWYgdWludDY0X3QgY3R4aWQgPSA8dWludDY0X3Q+aWQoc2Vs ZikKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK K0BAIC0xNDkwOSw3ICsxNDkwOSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4CisgICAgICAg I2VuZGlmCisgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjc5MworKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjc5NQorICAqICAgICAgICAgY2RlZiB1aW50NjRfdCBjdHhpZCA9IDx1aW50NjRfdD5p ZChzZWxmKQorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICBtcHZfdGVy bWluYXRlX2Rlc3Ryb3koc2VsZi5fY3R4KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMTQ5MTksNyArMTQ5MTksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zOHNodXRkb3duKHN0cnVjdCBfX3B5eAorICAgICAgICAg bXB2X3Rlcm1pbmF0ZV9kZXN0cm95KF9fcHl4X3Zfc2VsZi0+X2N0eCk7CisgICAgICAgfQorIAor LSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTIKKysgICAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk0CisgICogICAgICAgICAgICAgcmV0dXJu CisgICogICAgICAgICBjZGVmIHVpbnQ2NF90IGN0eGlkID0gPHVpbnQ2NF90PmlkKHNlbGYpCisg ICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MTQ5MzgsMTQgKzE0OTM4LDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4CisgICAgICAgfQor ICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5NAorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5NgorICAqICAgICAgICAgd2l0aCBub2dp bDoKKyAgKiAgICAgICAgICAgICBtcHZfdGVybWluYXRlX2Rlc3Ryb3koc2VsZi5fY3R4KQorICAq ICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zaHV0ZG93bigpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGRlbCBfY2FsbGJhY2tzW2N0eGlkXQorICAqICAgICAg ICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdCisgICovCistICBfX3B5eF90XzQgPSBfX1B5 eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQsIF9fcHl4 X25fc19zaHV0ZG93bik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc5 NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRy U3RyKF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2t0aHJlYWQsIF9fcHl4X25fc19zaHV0ZG93bik7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDc5NiwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgIF9fcHl4X3RfNSA9IE5VTEw7CisgICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90 XzQpKSkgeworQEAgLTE0OTU5LDMwICsxNDk1OSwzMCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF8zOHNodXRkb3duKHN0cnVjdCBfX3B5 eAorICAgfQorICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxs T25lQXJnKF9fcHl4X3RfNCwgX19weXhfdF81KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhf X3B5eF90XzQpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwor LSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNzk0LCBfX3B5eF9MMV9l cnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDc5NiwgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 Nzk1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk3CisgICogICAgICAg ICAgICAgbXB2X3Rlcm1pbmF0ZV9kZXN0cm95KHNlbGYuX2N0eCkKKyAgKiAgICAgICAgIHNlbGYu Y2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQorICAqICAgICAgICAgZGVsIF9jYWxsYmFja3NbY3R4 aWRdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGRlbCBfcmVwbHlf dXNlcmRhdGFzW2N0eGlkXQorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKKyAgKi8K Ky0gIGlmICh1bmxpa2VseShfX1B5eF9EZWxJdGVtSW50KF9fcHl4X3ZfOXZpZGN1dHRlcl80bGli c18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3ZfY3R4aWQsIHVpbnQ2NF90LCAwLCBfX1B5eF9QeUlu dF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzk1LCBfX3B5eF9M MV9lcnJvcikKKysgIGlmICh1bmxpa2VseShfX1B5eF9EZWxJdGVtSW50KF9fcHl4X3ZfOXZpZGN1 dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3ZfY3R4aWQsIHVpbnQ2NF90LCAwLCBf X1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90LCAwLCAwLCAxKSA8IDApKSBfX1BZWF9FUlIoMCwgNzk3 LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo3OTYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3OTgKKyAgKiAgICAg ICAgIHNlbGYuY2FsbGJhY2t0aHJlYWQuc2h1dGRvd24oKQorICAqICAgICAgICAgZGVsIF9jYWxs YmFja3NbY3R4aWRdCisgICogICAgICAgICBkZWwgX3JlcGx5X3VzZXJkYXRhc1tjdHhpZF0gICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5v bmUKKyAgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBOb25lCisgICovCistICBpZiAo dW5saWtlbHkoX19QeXhfRGVsSXRlbUludChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f cmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRfdCwgMCwgX19QeXhfUHlJbnRf RnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAsIDc5NiwgX19weXhfTDFf ZXJyb3IpCisrICBpZiAodW5saWtlbHkoX19QeXhfRGVsSXRlbUludChfX3B5eF92Xzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fcmVwbHlfdXNlcmRhdGFzLCBfX3B5eF92X2N0eGlkLCB1aW50NjRfdCwg MCwgX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCwgMCwgMCwgMSkgPCAwKSkgX19QWVhfRVJSKDAs IDc5OCwgX19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6Nzk3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Nzk5CisgICog ICAgICAgICBkZWwgX2NhbGxiYWNrc1tjdHhpZF0KKyAgKiAgICAgICAgIGRlbCBfcmVwbHlfdXNl cmRhdGFzW2N0eGlkXQorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE0OTk1LDcgKzE0OTk1LDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfMzhzaHV0ZG93bihz dHJ1Y3QgX19weXgKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3NlbGYtPmNhbGxiYWNrKTsKKyAg IF9fcHl4X3Zfc2VsZi0+Y2FsbGJhY2sgPSBQeV9Ob25lOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjc5OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjgwMAorICAqICAgICAgICAgZGVsIF9yZXBseV91c2VyZGF0YXNbY3R4aWRdCisgICogICAg ICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorICAqICAgICAgICAgc2VsZi5yZXBseV91c2VyZGF0 YSA9IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1MDA4LDcgKzE1MDA4 LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0Nv bnRleHRfMzhzaHV0ZG93bihzdHJ1Y3QgX19weXgKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF92X3Nl bGYtPnJlcGx5X3VzZXJkYXRhKTsKKyAgIF9fcHl4X3Zfc2VsZi0+cmVwbHlfdXNlcmRhdGEgPSBQ eV9Ob25lOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5OQorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgwMQorICAqICAgICAgICAgc2VsZi5j YWxsYmFjayA9IE5vbmUKKyAgKiAgICAgICAgIHNlbGYucmVwbHlfdXNlcmRhdGEgPSBOb25lCisg ICogICAgICAgICBzZWxmLl9jdHggPSBOVUxMICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK K0BAIC0xNTAxNyw3ICsxNTAxNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4CisgICovCisg ICBfX3B5eF92X3NlbGYtPl9jdHggPSBOVUxMOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjc4OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5 MAorICAqICAgICAgICAgcmV0dXJuIGVycgorICAqIAorICAqICAgICBkZWYgc2h1dGRvd24oc2Vs Zik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNTA0MCw3ICsxNTA0MCw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0 XzM4c2h1dGRvd24oc3RydWN0IF9fcHl4CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxMworKy8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4MTUKKyAgKiAgICAgIyAgICAgcmV0dXJuIGN0eAorICAqIAorICAqICAg ICBkZWYgX19kZWFsbG9jX18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xNTA2OSwxNCArMTUwNjksMTQgQEAgc3RhdGljIHZvaWQgX19weXhfcGZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzdDb250ZXh0XzQwX19kZWFsbG9jX18oc3RydWN0IF9fcHl4X28KKyAgIGludCBf X3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfX2RlYWxs b2NfXyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNAor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNgorICAqIAorICAqICAgICBk ZWYgX19kZWFsbG9jX18oc2VsZik6CisgICogICAgICAgICBzZWxmLnNodXRkb3duKCkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorICAqIGNkZWYgdm9pZCAqX2NfZ2V0cHJvY2Fk ZHJlc3Modm9pZCAqY3R4LCBjb25zdCBjaGFyICpuYW1lKSB3aXRoIGdpbDoKKyAgKi8KKy0gIF9f cHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zf c2VsZiksIF9fcHl4X25fc19zaHV0ZG93bik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDgxNCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9i amVjdF9HZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3Nfc2h1 dGRvd24pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA4MTYsIF9fcHl4 X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICBfX3B5eF90XzMgPSBO VUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hl Y2soX19weXhfdF8yKSkpIHsKK0BAIC0xNTA5MCwxMiArMTUwOTAsMTIgQEAgc3RhdGljIHZvaWQg X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzdDb250ZXh0XzQwX19kZWFsbG9jX18oc3Ry dWN0IF9fcHl4X28KKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9D YWxsTm9BcmcoX19weXhfdF8yKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhf dF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDgxNCwg X19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA4MTYsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBf X1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjgxMworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxNQor ICAqICAgICAjICAgICByZXR1cm4gY3R4CisgICogCisgICogICAgIGRlZiBfX2RlYWxsb2NfXyhz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1MjI3LDcgKzE1MjI3LDcg QEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRl eHRfNDRfX3NldHN0YXRlX2N5dGhvbl9fKEMKKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0v KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODE2CisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjgxOAorICAqICAgICAgICAgc2VsZi5zaHV0ZG93bigpCisgICogCisg ICogY2RlZiB2b2lkICpfY19nZXRwcm9jYWRkcmVzcyh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm5h bWUpIHdpdGggZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTUyNTEsMTQg KzE1MjUxLDE0IEBAIHN0YXRpYyB2b2lkICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Y19nZXRwcm9jYWRkcmVzcyh2b2lkICpfX3B5eF92X2N0eCwKKyAgICNlbmRpZgorICAgX19QeXhf UmVmTmFubnlTZXR1cENvbnRleHQoIl9jX2dldHByb2NhZGRyZXNzIiwgMCk7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODE3CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODE5CisgICogCisgICogY2RlZiB2b2lkICpfY19nZXRwcm9jYWRkcmVz cyh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUpIHdpdGggZ2lsOgorICAqICAgICByZXR1cm4g PHZvaWQgKj48aW50cHRyX3Q+KDxvYmplY3Q+Y3R4KShuYW1lKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogCisgICogY2RlZiB2b2lkIF9jX3VwZGF0ZWNiKHZvaWQgKmN0eCkgd2l0 aCBnaWw6CisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeUJ5dGVzX0Zyb21TdHJpbmcoX19w eXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgODE3LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5Qnl0ZXNfRnJvbVN0cmluZyhf X3B5eF92X25hbWUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA4MTks IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICBfX1B5eF9J TkNSRUYoKChQeU9iamVjdCAqKV9fcHl4X3ZfY3R4KSk7CisgICBfX3B5eF90XzMgPSAoKFB5T2Jq ZWN0ICopX19weXhfdl9jdHgpOyBfX3B5eF90XzQgPSBOVUxMOworQEAgLTE1Mjc0LDE1ICsxNTI3 NCwxNSBAQCBzdGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfZ2V0 cHJvY2FkZHJlc3Modm9pZCAqX19weXhfdl9jdHgsCisgICBfX3B5eF90XzEgPSAoX19weXhfdF80 KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzMsIF9fcHl4X3RfNCwgX19weXhf dF8yKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF90XzIpOwor ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA4MTcsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgODE5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9 IDA7CistICBfX3B5eF90XzUgPSBfX1B5eF9QeUludF9Bc19pbnRwdHJfdChfX3B5eF90XzEpOyBp ZiAodW5saWtlbHkoKF9fcHl4X3RfNSA9PSAoKGludHB0cl90KS0xKSkgJiYgUHlFcnJfT2NjdXJy ZWQoKSkpIF9fUFlYX0VSUigwLCA4MTcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF81ID0g X19QeXhfUHlJbnRfQXNfaW50cHRyX3QoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90 XzUgPT0gKChpbnRwdHJfdCktMSkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwg ODE5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworICAgX19weXhfciA9ICgodm9pZCAqKSgoaW50cHRyX3QpX19weXhfdF81KSk7Cisg ICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjgxNgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgxOAorICAqICAgICAg ICAgc2VsZi5zaHV0ZG93bigpCisgICogCisgICogY2RlZiB2b2lkICpfY19nZXRwcm9jYWRkcmVz cyh2b2lkICpjdHgsIGNvbnN0IGNoYXIgKm5hbWUpIHdpdGggZ2lsOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtMTUzMDYsNyArMTUzMDYsNyBAQCBzdGF0aWMgdm9pZCAqX19weXhf Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfZ2V0cHJvY2FkZHJlc3Modm9pZCAqX19weXhfdl9j dHgsCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjgxOQorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MjEKKyAg KiAgICAgcmV0dXJuIDx2b2lkICo+PGludHB0cl90Pig8b2JqZWN0PmN0eCkobmFtZSkKKyAgKiAK KyAgKiBjZGVmIHZvaWQgX2NfdXBkYXRlY2Iodm9pZCAqY3R4KSB3aXRoIGdpbDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1MzI3LDcgKzE1MzI3LDcgQEAgc3RhdGljIHZvaWQg X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfdXBkYXRlY2Iodm9pZCAqX19weXhfdl9j dHgpIHsKKyAgICNlbmRpZgorICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9jX3VwZGF0 ZWNiIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODIwCisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODIyCisgICogCisgICogY2RlZiB2 b2lkIF9jX3VwZGF0ZWNiKHZvaWQgKmN0eCkgd2l0aCBnaWw6CisgICogICAgICg8b2JqZWN0PmN0 eCkoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTUzNDcsMTIgKzE1MzQ3LDEy IEBAIHN0YXRpYyB2b2lkIF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX3VwZGF0ZWNi KHZvaWQgKl9fcHl4X3ZfY3R4KSB7CisgICB9CisgICBfX3B5eF90XzEgPSAoX19weXhfdF8zKSA/ IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBfX3B5eF90XzMpIDogX19QeXhf UHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf Myk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA4MjAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBf X1BZWF9FUlIoMCwgODIyLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo4MTkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo4MjEKKyAgKiAgICAgcmV0dXJuIDx2b2lkICo+PGludHB0cl90Pig8b2JqZWN0PmN0eCko bmFtZSkKKyAgKiAKKyAgKiBjZGVmIHZvaWQgX2NfdXBkYXRlY2Iodm9pZCAqY3R4KSB3aXRoIGdp bDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1Mzc0LDcgKzE1Mzc0LDcgQEAg c3RhdGljIHZvaWQgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NfdXBkYXRlY2Iodm9p ZCAqX19weXhfdl9jdHgpIHsKKyAgICNlbmRpZgorIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODg2CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4 OAorICAqICAgICAgICAgb2JqZWN0IG93bmVkCisgICogCisgICogICAgIGRlZiBfX2luaXRfXyhz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1NDA3LDE0ICsxNTQwNywx NCBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQ YXJhbXNfX19pbml0X18oc3RydWN0IF9fcHl4XworICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwor ICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwgMCk7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODg3CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODg5CisgICogCisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAg KiAgICAgICAgIHNlbGYub3duZWQgPSBbXSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisg ICogICAgICAgICBzZWxmLnBhcmFtc1swXS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElE CisgICogCisgICovCistICBfX3B5eF90XzEgPSBQeUxpc3RfTmV3KDApOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4ODcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf dF8xID0gUHlMaXN0X05ldygwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgODg5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAg X19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworICAgX19QeXhfR09UUkVGKF9fcHl4X3Zfc2VsZi0+ b3duZWQpOworQEAgLTE1NDIyLDcgKzE1NDIyLDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX19faW5pdF9fKHN0cnVjdCBfX3B5eF8K KyAgIF9fcHl4X3Zfc2VsZi0+b3duZWQgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg4OAorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5MAorICAqICAgICBkZWYgX19pbml0X18oc2VsZik6 CisgICogICAgICAgICBzZWxmLm93bmVkID0gW10KKyAgKiAgICAgICAgIHNlbGYucGFyYW1zWzBd LnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTE1NDMxLDcgKzE1NDMxLDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX19faW5pdF9fKHN0cnVjdCBfX3B5eF8KKyAg Ki8KKyAgIChfX3B5eF92X3NlbGYtPnBhcmFtc1swXSkudHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1f SU5WQUxJRDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODYKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4ODgKKyAgKiAgICAgICAgIG9iamVj dCBvd25lZAorICAqIAorICAqICAgICBkZWYgX19pbml0X18oc2VsZik6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xNTQ1MSw3ICsxNTQ1MSw3IEBAIHN0YXRpYyBpbnQgX19weXhf cGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19fX2luaXRfXyhzdHJ1Y3Qg X19weXhfCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjg5MAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTIK KyAgKiAgICAgICAgIHNlbGYucGFyYW1zWzBdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFM SUQKKyAgKiAKKyAgKiAgICAgY2RlZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90 eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTU0ODAsNyArMTU0ODAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfdm9pZHAoc3RydWN0Cisg ICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTEK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTMKKyAgKiAKKyAgKiAgICAg Y2RlZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJp bnQgb3duZWQ9RmFsc2UpOgorICAqICAgICAgICAgY291bnQgPSBsZW4oc2VsZi5vd25lZCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1NDg5LDI2ICsxNTQ4OSwyNiBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFt c19hZGRfdm9pZHAoc3RydWN0CisgICovCisgICBfX3B5eF90XzEgPSBfX3B5eF92X3NlbGYtPm93 bmVkOworICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfMSk7CistICBfX3B5eF90XzIgPSBQeU9iamVj dF9MZW5ndGgoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA9PSAoKFB5X3NzaXpl X3QpLTEpKSkgX19QWVhfRVJSKDAsIDg5MSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIg PSBQeU9iamVjdF9MZW5ndGgoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA9PSAo KFB5X3NzaXplX3QpLTEpKSkgX19QWVhfRVJSKDAsIDg5MywgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3RfMSA9IFB5 SW50X0Zyb21Tc2l6ZV90KF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDg5MSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBQeUludF9Gcm9t U3NpemVfdChfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCA4OTMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBf X3B5eF92X2NvdW50ID0gX19weXhfdF8xOworICAgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4OTQKKyAgKiAgICAgY2RlZiBhZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRl cl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3duZWQ9RmFsc2UpOgorICAqICAgICAgICAg Y291bnQgPSBsZW4oc2VsZi5vd25lZCkKKyAgKiAgICAgICAgIGlmIGNvdW50ID49IE1BWF9SRU5E RVJfUEFSQU1TOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAg aWYgb3duZWQ6CisgICogICAgICAgICAgICAgICAgIGZyZWUocCkKKyAgKi8KKy0gIF9fcHl4X3Rf MSA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfY291bnQsIF9fcHl4X2ludF8zMiwgUHlf R0UpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDg5MiwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF90XzMgPSBfX1B5eF9Q eU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBf X1BZWF9FUlIoMCwgODkyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IFB5T2JqZWN0 X1JpY2hDb21wYXJlKF9fcHl4X3ZfY291bnQsIF9fcHl4X2ludF8zMiwgUHlfR0UpOyBfX1B5eF9Y R09UUkVGKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDg5NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1Ry dWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwg ODk0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworICAgaWYgKF9fcHl4X3RfMykgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6ODkzCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo4OTUKKyAgKiAgICAgICAgIGNvdW50ID0gbGVuKHNlbGYub3duZWQpCisgICogICAgICAgICBp ZiBjb3VudCA+PSBNQVhfUkVOREVSX1BBUkFNUzoKKyAgKiAgICAgICAgICAgICBpZiBvd25lZDog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1NTE4LDcgKzE1NTE4LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJh bXNfYWRkX3ZvaWRwKHN0cnVjdAorICAgICBfX3B5eF90XzMgPSAoX19weXhfdl9vd25lZCAhPSAw KTsKKyAgICAgaWYgKF9fcHl4X3RfMykgeworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo4OTQKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6ODk2CisgICogICAgICAgICBpZiBjb3VudCA+PSBNQVhfUkVOREVSX1BBUkFNUzoKKyAgKiAg ICAgICAgICAgICBpZiBvd25lZDoKKyAgKiAgICAgICAgICAgICAgICAgZnJlZShwKSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTU1MjcsNyArMTU1MjcsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRf dm9pZHAoc3RydWN0CisgICovCisgICAgICAgZnJlZShfX3B5eF92X3ApOworIAorLSAgICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTMKKysgICAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6ODk1CisgICogICAgICAgICBjb3VudCA9IGxlbihzZWxmLm93 bmVkKQorICAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJBTVM6CisgICogICAg ICAgICAgICAgaWYgb3duZWQ6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNTUz NiwxNCArMTU1MzYsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX3ZvaWRwKHN0cnVjdAorICAqLworICAgICB9Cisg CistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTUKKysgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5NworICAqICAgICAgICAgICAgIGlmIG93bmVk OgorICAqICAgICAgICAgICAgICAgICBmcmVlKHApCisgICogICAgICAgICAgICAgcmFpc2UgUHlN UFZFcnJvcigiUmVuZGVyUGFyYW1zIG92ZXJmbG93IikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorICAqIAorICAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLnR5cGUgPSB0CisgICov CistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3NfUHlN UFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDg5NSwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBf X3B5eF9uX3NfUHlNUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDg5NywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOwor ICAgICBfX3B5eF90XzUgPSBOVUxMOworICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNCkpKSB7CitAQCAtMTU1NTcsMTQgKzE1 NTU3LDE0IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf MTNfUmVuZGVyUGFyYW1zX2FkZF92b2lkcChzdHJ1Y3QKKyAgICAgfQorICAgICBfX3B5eF90XzEg PSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzQsIF9fcHl4 X3RfNSwgX19weXhfa3Bfc19SZW5kZXJQYXJhbXNfb3ZlcmZsb3cpIDogX19QeXhfUHlPYmplY3Rf Q2FsbE9uZUFyZyhfX3B5eF90XzQsIF9fcHl4X2twX3NfUmVuZGVyUGFyYW1zX292ZXJmbG93KTsK KyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworLSAgICBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4OTUsIF9fcHl4X0wxX2Vycm9yKQor KyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA4OTcsIF9fcHl4X0wx X2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgICAgIF9fUHl4X1JhaXNlKF9fcHl4X3RfMSwg MCwgMCwgMCk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwor LSAgICBfX1BZWF9FUlIoMCwgODk1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QWVhfRVJSKDAs IDg5NywgX19weXhfTDFfZXJyb3IpCisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo4OTIKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5NAor ICAqICAgICBjZGVmIGFkZF92b2lkcChzZWxmLCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgdm9p ZCAqcCwgYmludCBvd25lZD1GYWxzZSk6CisgICogICAgICAgICBjb3VudCA9IGxlbihzZWxmLm93 bmVkKQorICAqICAgICAgICAgaWYgY291bnQgPj0gTUFYX1JFTkRFUl9QQVJBTVM6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNTU3Myw1MiArMTU1NzMsNTIgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRk X3ZvaWRwKHN0cnVjdAorICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjg5NworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg5OQor ICAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlJlbmRlclBhcmFtcyBvdmVyZmxvdyIp CisgICogCisgICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0udHlwZSA9IHQgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEg PSBwCisgICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudCArIDFdLnR5cGUgPSBNUFZfUkVOREVS X1BBUkFNX0lOVkFMSUQKKyAgKi8KKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6 ZV90KF9fcHl4X3ZfY291bnQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoUHlfc3NpemVf dCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA4OTcsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9jb3Vu dCk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9P Y2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDg5OSwgX19weXhfTDFfZXJyb3IpCisgICAoX19weXhf dl9zZWxmLT5wYXJhbXNbX19weXhfdF8yXSkudHlwZSA9IF9fcHl4X3ZfdDsKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5MDAKKyAgKiAKKyAgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50XS50 eXBlID0gdAorICAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEgPSBwICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50ICsgMV0u dHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fSU5WQUxJRAorICAqICAgICAgICAgc2VsZi5vd25lZC5h cHBlbmQob3duZWQpCisgICovCistICBfX3B5eF90XzIgPSBfX1B5eF9QeUluZGV4X0FzU3NpemVf dChfX3B5eF92X2NvdW50KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzIgPT0gKFB5X3NzaXplX3Qp LTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgODk4LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3ZfY291bnQp OyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMiA9PSAoUHlfc3NpemVfdCktMSkgJiYgUHlFcnJfT2Nj dXJyZWQoKSkpIF9fUFlYX0VSUigwLCA5MDAsIF9fcHl4X0wxX2Vycm9yKQorICAgKF9fcHl4X3Zf c2VsZi0+cGFyYW1zW19fcHl4X3RfMl0pLmRhdGEgPSBfX3B5eF92X3A7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODk5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTAxCisgICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudF0udHlwZSA9IHQK KyAgKiAgICAgICAgIHNlbGYucGFyYW1zW2NvdW50XS5kYXRhID0gcAorICAqICAgICAgICAgc2Vs Zi5wYXJhbXNbY291bnQgKyAxXS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93 bmVkKQorICAqIAorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfQWRkT2JqQyhfX3B5 eF92X2NvdW50LCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDg5OSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5 eF9QeUludF9BZGRPYmpDKF9fcHl4X3ZfY291bnQsIF9fcHl4X2ludF8xLCAxLCAwLCAwKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTAxLCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbmRl eF9Bc1NzaXplX3QoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzIgPT0gKFB5X3Nz aXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgODk5LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW5kZXhfQXNTc2l6ZV90KF9fcHl4X3Rf MSk7IGlmICh1bmxpa2VseSgoX19weXhfdF8yID09IChQeV9zc2l6ZV90KS0xKSAmJiBQeUVycl9P Y2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDkwMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9E RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgIChfX3B5eF92X3NlbGYtPnBhcmFt c1tfX3B5eF90XzJdKS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JTlZBTElEOworIAorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwMAorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjkwMgorICAqICAgICAgICAgc2VsZi5wYXJhbXNbY291bnRdLmRhdGEg PSBwCisgICogICAgICAgICBzZWxmLnBhcmFtc1tjb3VudCArIDFdLnR5cGUgPSBNUFZfUkVOREVS X1BBUkFNX0lOVkFMSUQKKyAgKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogICAgIGNkZWYgYWRkX2ludChzZWxm LCBtcHZfcmVuZGVyX3BhcmFtX3R5cGUgdCwgaW50IHZhbCk6CisgICovCistICBfX3B5eF90XzEg PSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoX19weXhfdl9vd25lZCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDkwMCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEg PSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoX19weXhfdl9vd25lZCk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDkwMiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0FwcGVuZChfX3B5 eF92X3NlbGYtPm93bmVkLCBfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF82ID09ICgo aW50KS0xKSkpIF9fUFlYX0VSUigwLCA5MDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82 ID0gX19QeXhfUHlPYmplY3RfQXBwZW5kKF9fcHl4X3Zfc2VsZi0+b3duZWQsIF9fcHl4X3RfMSk7 IGlmICh1bmxpa2VseShfX3B5eF90XzYgPT0gKChpbnQpLTEpKSkgX19QWVhfRVJSKDAsIDkwMiwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTAKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OTIKKyAgKiAgICAgICAgIHNlbGYucGFyYW1z WzBdLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lOVkFMSUQKKyAgKiAKKyAgKiAgICAgY2RlZiBh ZGRfdm9pZHAoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIHZvaWQgKnAsIGJpbnQgb3du ZWQ9RmFsc2UpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTU2NDIsNyArMTU2 NDIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz X1JlbmRlclBhcmFtc19hZGRfdm9pZHAoc3RydWN0CisgICByZXR1cm4gX19weXhfcjsKKyB9Cisg CistLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkwMgorKy8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5MDQKKyAgKiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93 bmVkKQorICAqIAorICAqICAgICBjZGVmIGFkZF9pbnQoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90 eXBlIHQsIGludCB2YWwpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTU2NjAs NyArMTU2NjAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzX1JlbmRlclBhcmFtc19hZGRfaW50KHN0cnVjdCBfXworICAgaW50IF9fcHl4X2NsaW5l bm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImFkZF9pbnQiLCAwKTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDMKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDUKKyAgKiAKKyAgKiAgICAgY2RlZiBhZGRfaW50KHNl bGYsIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBpbnQgdmFsKToKKyAgKiAgICAgICAgIGNkZWYg aW50ICpwID0gPGludCAqPm1hbGxvYyhzaXplb2YoaW50KSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTE1NjY5LDcgKzE1NjY5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9m Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX2ludChzdHJ1Y3QgX18K KyAgKi8KKyAgIF9fcHl4X3ZfcCA9ICgoaW50ICopbWFsbG9jKChzaXplb2YoaW50KSkpKTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDQKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDYKKyAgKiAgICAgY2RlZiBhZGRfaW50KHNlbGYsIG1w dl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBpbnQgdmFsKToKKyAgKiAgICAgICAgIGNkZWYgaW50ICpw ID0gPGludCAqPm1hbGxvYyhzaXplb2YoaW50KSkKKyAgKiAgICAgICAgIHBbMF0gPSB2YWwgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1Njc4LDE4ICsxNTY3OCwxOCBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFt c19hZGRfaW50KHN0cnVjdCBfXworICAqLworICAgKF9fcHl4X3ZfcFswXSkgPSBfX3B5eF92X3Zh bDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDUKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDcKKyAgKiAgICAgICAgIGNkZWYgaW50ICpw ID0gPGludCAqPm1hbGxvYyhzaXplb2YoaW50KSkKKyAgKiAgICAgICAgIHBbMF0gPSB2YWwKKyAg KiAgICAgICAgIHNlbGYuYWRkX3ZvaWRwKHQsIHApICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAKKyAgKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1wdl9yZW5kZXJfcGFyYW1f dHlwZSB0LCBjaGFyICpzKToKKyAgKi8KKy0gIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3Nl bGYtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9zZWxmLCBfX3B5eF92X3QsIF9fcHl4 X3ZfcCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkwNSwg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0 Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmLT5fX3B5 eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl90LCBfX3B5eF92X3AsIE5V TEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MDcsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5MDIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDQKKyAg KiAgICAgICAgIHNlbGYub3duZWQuYXBwZW5kKG93bmVkKQorICAqIAorICAqICAgICBjZGVmIGFk ZF9pbnQoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGludCB2YWwpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTU3MTAsNyArMTU3MTAsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfaW50 KHN0cnVjdCBfXworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MDcKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTA5CisgICogICAgICAgICBzZWxmLmFkZF92b2lkcCh0LCBwKQorICAqIAorICAqICAgICBjZGVm IGFkZF9zdHJpbmcoc2VsZiwgbXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGNoYXIgKnMpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTU3MjgsNyArMTU3MjgsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19h ZGRfc3RyaW5nKHN0cnVjdAorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVm TmFubnlTZXR1cENvbnRleHQoImFkZF9zdHJpbmciLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5MDgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo5MTAKKyAgKiAKKyAgKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYsIG1wdl9yZW5kZXJf cGFyYW1fdHlwZSB0LCBjaGFyICpzKToKKyAgKiAgICAgICAgIGNkZWYgY2hhciAqcCA9IDxjaGFy ICo+bWFsbG9jKHN0cmxlbihzKSArIDEpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xNTczNyw3ICsxNTczNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF9zdHJpbmcoc3RydWN0CisgICovCisgICBf X3B5eF92X3AgPSAoKGNoYXIgKiltYWxsb2MoKHN0cmxlbihfX3B5eF92X3MpICsgMSkpKTsKKyAK Ky0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MDkKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTEKKyAgKiAgICAgY2RlZiBhZGRfc3RyaW5nKHNlbGYs IG1wdl9yZW5kZXJfcGFyYW1fdHlwZSB0LCBjaGFyICpzKToKKyAgKiAgICAgICAgIGNkZWYgY2hh ciAqcCA9IDxjaGFyICo+bWFsbG9jKHN0cmxlbihzKSArIDEpCisgICogICAgICAgICBzdHJjcHko cCwgcykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE1NzQ2LDE4ICsxNTc0Niwx OCBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1Jl bmRlclBhcmFtc19hZGRfc3RyaW5nKHN0cnVjdAorICAqLworICAgKHZvaWQpKHN0cmNweShfX3B5 eF92X3AsIF9fcHl4X3ZfcykpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjkxMAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxMgorICAqICAg ICAgICAgY2RlZiBjaGFyICpwID0gPGNoYXIgKj5tYWxsb2Moc3RybGVuKHMpICsgMSkKKyAgKiAg ICAgICAgIHN0cmNweShwLCBzKQorICAqICAgICAgICAgc2VsZi5hZGRfdm9pZHAodCwgcCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorICAqICAgICBkZWYgX19kZWFsbG9jX18o c2VsZik6CisgICovCistICBfX3B5eF90XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhfdl9zZWxmLT5fX3B5eF92 dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3Zfc2VsZiwgX19weXhfdl90LCBfX3B5eF92X3AsIE5VTEwp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MTAsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3Zfc2VsZi0+X19weXhfdnRhYiktPmFk ZF92b2lkcChfX3B5eF92X3NlbGYsIF9fcHl4X3ZfdCwgX19weXhfdl9wLCBOVUxMKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTEyLCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9f cHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA3 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTA5CisgICogICAgICAgICBz ZWxmLmFkZF92b2lkcCh0LCBwKQorICAqIAorICAqICAgICBjZGVmIGFkZF9zdHJpbmcoc2VsZiwg bXB2X3JlbmRlcl9wYXJhbV90eXBlIHQsIGNoYXIgKnMpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTU3NzgsNyArMTU3NzgsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X2Zf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzX1JlbmRlclBhcmFtc19hZGRfc3RyaW5nKHN0cnVjdAor ICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo5MTIKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE0CisgICogICAg ICAgICBzZWxmLmFkZF92b2lkcCh0LCBwKQorICAqIAorICAqICAgICBkZWYgX19kZWFsbG9jX18o c2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNTgxMyw3ICsxNTgxMyw3 IEBAIHN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQ YXJhbXNfMl9fZGVhbGxvY19fKHN0cnVjdCBfCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7Cisg ICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19kZWFsbG9jX18iLCAwKTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTMKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MTUKKyAgKiAKKyAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYp OgorICAqICAgICAgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTU4MjYsMjYgKzE1ODI2LDI2IEBAIHN0YXRpYyB2 b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMl9fZGVh bGxvY19fKHN0cnVjdCBfCisgICAgIF9fcHl4X3RfMiA9IF9fcHl4X3Zfc2VsZi0+b3duZWQ7IF9f UHl4X0lOQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzMgPSAwOworICAgICBfX3B5eF90XzQgPSBO VUxMOworICAgfSBlbHNlIHsKKy0gICAgX19weXhfdF8zID0gLTE7IF9fcHl4X3RfMiA9IFB5T2Jq ZWN0X0dldEl0ZXIoX19weXhfdl9zZWxmLT5vd25lZCk7IGlmICh1bmxpa2VseSghX19weXhfdF8y KSkgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9IC0x OyBfX3B5eF90XzIgPSBQeU9iamVjdF9HZXRJdGVyKF9fcHl4X3Zfc2VsZi0+b3duZWQpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5MTUsIF9fcHl4X0wxX2Vycm9yKQor ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19weXhfdF80ID0gUHlfVFlQRShf X3B5eF90XzIpLT50cF9pdGVybmV4dDsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9F UlIoMCwgOTEzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF80ID0gUHlfVFlQRShfX3B5 eF90XzIpLT50cF9pdGVybmV4dDsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIo MCwgOTE1LCBfX3B5eF9MMV9lcnJvcikKKyAgIH0KKyAgIGZvciAoOzspIHsKKyAgICAgaWYgKGxp a2VseSghX19weXhfdF80KSkgeworICAgICAgIGlmIChsaWtlbHkoUHlMaXN0X0NoZWNrRXhhY3Qo X19weXhfdF8yKSkpIHsKKyAgICAgICAgIGlmIChfX3B5eF90XzMgPj0gUHlMaXN0X0dFVF9TSVpF KF9fcHl4X3RfMikpIGJyZWFrOworICAgICAgICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNS T1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCistICAgICAgICBfX3B5eF90XzUgPSBQ eUxpc3RfR0VUX0lURU0oX19weXhfdF8yLCBfX3B5eF90XzMpOyBfX1B5eF9JTkNSRUYoX19weXhf dF81KTsgX19weXhfdF8zKys7IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA5MTMs IF9fcHl4X0wxX2Vycm9yKQorKyAgICAgICAgX19weXhfdF81ID0gUHlMaXN0X0dFVF9JVEVNKF9f cHl4X3RfMiwgX19weXhfdF8zKTsgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfMysr OyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZWF9FUlIoMCwgOTE1LCBfX3B5eF9MMV9lcnJvcikK KyAgICAgICAgICNlbHNlCistICAgICAgICBfX3B5eF90XzUgPSBQeVNlcXVlbmNlX0lURU0oX19w eXhfdF8yLCBfX3B5eF90XzMpOyBfX3B5eF90XzMrKzsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzUp KSBfX1BZWF9FUlIoMCwgOTEzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICAgIF9fcHl4X3RfNSA9 IFB5U2VxdWVuY2VfSVRFTShfX3B5eF90XzIsIF9fcHl4X3RfMyk7IF9fcHl4X3RfMysrOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCA5MTUsIF9fcHl4X0wxX2Vycm9yKQor ICAgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CisgICAgICAgICAjZW5kaWYKKyAgICAg ICB9IGVsc2UgeworICAgICAgICAgaWYgKF9fcHl4X3RfMyA+PSBQeVR1cGxlX0dFVF9TSVpFKF9f cHl4X3RfMikpIGJyZWFrOworICAgICAgICAgI2lmIENZVEhPTl9BU1NVTUVfU0FGRV9NQUNST1Mg JiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCistICAgICAgICBfX3B5eF90XzUgPSBQeVR1 cGxlX0dFVF9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF8zKTsgX19QeXhfSU5DUkVGKF9fcHl4X3Rf NSk7IF9fcHl4X3RfMysrOyBpZiAodW5saWtlbHkoMCA8IDApKSBfX1BZWF9FUlIoMCwgOTEzLCBf X3B5eF9MMV9lcnJvcikKKysgICAgICAgIF9fcHl4X3RfNSA9IFB5VHVwbGVfR0VUX0lURU0oX19w eXhfdF8yLCBfX3B5eF90XzMpOyBfX1B5eF9JTkNSRUYoX19weXhfdF81KTsgX19weXhfdF8zKys7 IGlmICh1bmxpa2VseSgwIDwgMCkpIF9fUFlYX0VSUigwLCA5MTUsIF9fcHl4X0wxX2Vycm9yKQor ICAgICAgICAgI2Vsc2UKKy0gICAgICAgIF9fcHl4X3RfNSA9IFB5U2VxdWVuY2VfSVRFTShfX3B5 eF90XzIsIF9fcHl4X3RfMyk7IF9fcHl4X3RfMysrOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkp IF9fUFlYX0VSUigwLCA5MTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgICAgX19weXhfdF81ID0g UHlTZXF1ZW5jZV9JVEVNKF9fcHl4X3RfMiwgX19weXhfdF8zKTsgX19weXhfdF8zKys7IGlmICh1 bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDkxNSwgX19weXhfTDFfZXJyb3IpCisg ICAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKyAgICAgICAgICNlbmRpZgorICAgICAg IH0KK0BAIC0xNTg1NSw3ICsxNTg1NSw3IEBAIHN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNfMl9fZGVhbGxvY19fKHN0cnVjdCBfCisgICAg ICAgICBQeU9iamVjdCogZXhjX3R5cGUgPSBQeUVycl9PY2N1cnJlZCgpOworICAgICAgICAgaWYg KGV4Y190eXBlKSB7CisgICAgICAgICAgIGlmIChsaWtlbHkoX19QeXhfUHlFcnJfR2l2ZW5FeGNl cHRpb25NYXRjaGVzKGV4Y190eXBlLCBQeUV4Y19TdG9wSXRlcmF0aW9uKSkpIFB5RXJyX0NsZWFy KCk7CistICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCisr ICAgICAgICAgIGVsc2UgX19QWVhfRVJSKDAsIDkxNSwgX19weXhfTDFfZXJyb3IpCisgICAgICAg ICB9CisgICAgICAgICBicmVhazsKKyAgICAgICB9CitAQCAtMTU4NjUsMzMgKzE1ODY1LDMzIEBA IHN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJh bXNfMl9fZGVhbGxvY19fKHN0cnVjdCBfCisgICAgIF9fcHl4X3RfNSA9IDA7CisgICAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9YREVDUkVGX1NFVChfX3B5eF92X2ksIF9f cHl4X3RfMSk7CistICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FkZE9iakMoX19weXhfdF8x LCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhf RVJSKDAsIDkxMywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50 X0FkZE9iakMoX19weXhfdF8xLCBfX3B5eF9pbnRfMSwgMSwgMCwgMCk7IGlmICh1bmxpa2VseSgh X19weXhfdF81KSkgX19QWVhfRVJSKDAsIDkxNSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzUpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsKKyAgICAg X19weXhfdF8xID0gX19weXhfdF81OworICAgICBfX3B5eF90XzUgPSAwOworIAorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE0CisrICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MTYKKyAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOgorICAq ICAgICAgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOgorICAqICAgICAgICAg ICAgIGlmIGo6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICAg ICAgZnJlZShzZWxmLnBhcmFtc1tpXS5kYXRhKQorICAqIAorICAqLworLSAgICBfX3B5eF90XzYg PSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9qKTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf NiA8IDApKSBfX1BZWF9FUlIoMCwgOTE0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF82 ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3Zfaik7IGlmICh1bmxpa2VseShfX3B5eF90 XzYgPCAwKSkgX19QWVhfRVJSKDAsIDkxNiwgX19weXhfTDFfZXJyb3IpCisgICAgIGlmIChfX3B5 eF90XzYpIHsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE1 CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxNworICAqICAgICAg ICAgZm9yIGksIGogaW4gZW51bWVyYXRlKHNlbGYub3duZWQpOgorICAqICAgICAgICAgICAgIGlm IGo6CisgICogICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorICAqIGNkZWYgdm9pZCAqZ2V0X3BvaW50ZXIo Y29uc3QgY2hhciAqbmFtZSwgb2JqZWN0IG9iaik6CisgICovCistICAgICAgX19weXhfdF83ID0g X19QeXhfUHlJbmRleF9Bc1NzaXplX3QoX19weXhfdl9pKTsgaWYgKHVubGlrZWx5KChfX3B5eF90 XzcgPT0gKFB5X3NzaXplX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwg OTE1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUluZGV4X0Fz U3NpemVfdChfX3B5eF92X2kpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoUHlfc3NpemVf dCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCA5MTcsIF9fcHl4X0wxX2Vy cm9yKQorICAgICAgIGZyZWUoKF9fcHl4X3Zfc2VsZi0+cGFyYW1zW19fcHl4X3RfN10pLmRhdGEp OworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTQKKysgICAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE2CisgICogICAgIGRlZiBfX2Rl YWxsb2NfXyhzZWxmKToKKyAgKiAgICAgICAgIGZvciBpLCBqIGluIGVudW1lcmF0ZShzZWxmLm93 bmVkKToKKyAgKiAgICAgICAgICAgICBpZiBqOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtMTU5MDAsNyArMTU5MDAsNyBAQCBzdGF0aWMgdm9pZCBfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zXzJfX2RlYWxsb2NfXyhzdHJ1Y3QgXworICAqLwor ICAgICB9CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTMKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxNQorICAqIAorICAqICAgICBk ZWYgX19kZWFsbG9jX18oc2VsZik6CisgICogICAgICAgICBmb3IgaSwgaiBpbiBlbnVtZXJhdGUo c2VsZi5vd25lZCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNTkxMSw3ICsx NTkxMSw3IEBAIHN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19S ZW5kZXJQYXJhbXNfMl9fZGVhbGxvY19fKHN0cnVjdCBfCisgICBfX1B5eF9ERUNSRUYoX19weXhf dF8yKTsgX19weXhfdF8yID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxMgorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkxNAorICAqICAgICAgICAgc2VsZi5h ZGRfdm9pZHAodCwgcCkKKyAgKiAKKyAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTYwNDUsNyArMTYwNDUsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM19SZW5kZXJQYXJhbXNf Nl9fc2V0c3RhdGVfY3l0aAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MTcKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTE5CisgICogICAgICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkK KyAgKiAKKyAgKiBjZGVmIHZvaWQgKmdldF9wb2ludGVyKGNvbnN0IGNoYXIgKm5hbWUsIG9iamVj dCBvYmopOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTYwNzEsNyArMTYwNzEs NyBAQCBzdGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3BvaW50 ZXIoY2hhciBjb25zdCAqX19weXhfdl9uYW1lLAorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOwor ICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoImdldF9wb2ludGVyIiwgMCk7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5CisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTIxCisgICogY2RlZiB2b2lkICpnZXRfcG9pbnRlcihjb25zdCBj aGFyICpuYW1lLCBvYmplY3Qgb2JqKToKKyAgKiAgICAgY2RlZiB2b2lkICpwCisgICogICAgIGlm IFB5Q2Fwc3VsZV9Jc1ZhbGlkKG9iaiwgbmFtZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xNjA4MSwxNyArMTYwODEsMTcgQEAgc3RhdGljIHZvaWQgKl9fcHl4X2ZfOXZpZGN1 dHRlcl80bGlic18zbXB2X2dldF9wb2ludGVyKGNoYXIgY29uc3QgKl9fcHl4X3ZfbmFtZSwKKyAg IF9fcHl4X3RfMSA9IChQeUNhcHN1bGVfSXNWYWxpZChfX3B5eF92X29iaiwgX19weXhfdl9uYW1l KSAhPSAwKTsKKyAgIGlmIChfX3B5eF90XzEpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjkyMAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTIyCisgICogICAgIGNkZWYgdm9pZCAqcAorICAqICAgICBpZiBQeUNhcHN1bGVfSXNWYWxp ZChvYmosIG5hbWUpOgorICAqICAgICAgICAgcCA9IFB5Q2Fwc3VsZV9HZXRQb2ludGVyKG9iaiwg bmFtZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBlbGlmIGlzaW5zdGFu Y2Uob2JqLCBpbnQpIG9yIGlzaW5zdGFuY2Uob2JqLCBsb25nKSBhbmQgb2JqOgorICAqICAgICAg ICAgcCA9IDx2b2lkICo+PGludHB0cl90Pm9iagorICAqLworLSAgICBfX3B5eF90XzIgPSBQeUNh cHN1bGVfR2V0UG9pbnRlcihfX3B5eF92X29iaiwgX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMiA9PSAoKHZvaWQgKilOVUxMKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhf RVJSKDAsIDkyMCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9IFB5Q2Fwc3VsZV9H ZXRQb2ludGVyKF9fcHl4X3Zfb2JqLCBfX3B5eF92X25hbWUpOyBpZiAodW5saWtlbHkoX19weXhf dF8yID09ICgodm9pZCAqKU5VTEwpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwg OTIyLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19weXhfdl9wID0gX19weXhfdF8yOworIAorLSAg ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5CisrICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjEKKyAgKiBjZGVmIHZvaWQgKmdldF9wb2ludGVyKGNv bnN0IGNoYXIgKm5hbWUsIG9iamVjdCBvYmopOgorICAqICAgICBjZGVmIHZvaWQgKnAKKyAgKiAg ICAgaWYgUHlDYXBzdWxlX0lzVmFsaWQob2JqLCBuYW1lKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTE2MTAxLDcgKzE2MTAxLDcgQEAgc3RhdGljIHZvaWQgKl9fcHl4X2ZfOXZp ZGN1dHRlcl80bGlic18zbXB2X2dldF9wb2ludGVyKGNoYXIgY29uc3QgKl9fcHl4X3ZfbmFtZSwK KyAgICAgZ290byBfX3B5eF9MMzsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MjEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjMK KyAgKiAgICAgaWYgUHlDYXBzdWxlX0lzVmFsaWQob2JqLCBuYW1lKToKKyAgKiAgICAgICAgIHAg PSBQeUNhcHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCisgICogICAgIGVsaWYgaXNpbnN0YW5j ZShvYmosIGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNjEyMiwyMiArMTYxMjIsMjIgQEAgc3RhdGljIHZvaWQg Kl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dldF9wb2ludGVyKGNoYXIgY29uc3QgKl9f cHl4X3ZfbmFtZSwKKyAgICAgX19weXhfdF8xID0gX19weXhfdF8zOworICAgICBnb3RvIF9fcHl4 X0w0X2Jvb2xfYmlub3BfZG9uZTsKKyAgIH0KKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0 X0lzVHJ1ZShfX3B5eF92X29iaik7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19QWVhf RVJSKDAsIDkyMSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVj dF9Jc1RydWUoX19weXhfdl9vYmopOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlY X0VSUigwLCA5MjMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfdF8xID0gX19weXhfdF8zOwor ICAgX19weXhfTDRfYm9vbF9iaW5vcF9kb25lOjsKKyAgIGlmIChsaWtlbHkoX19weXhfdF8xKSkg eworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTIyCisrICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjQKKyAgKiAgICAgICAgIHAgPSBQeUNh cHN1bGVfR2V0UG9pbnRlcihvYmosIG5hbWUpCisgICogICAgIGVsaWYgaXNpbnN0YW5jZShvYmos IGludCkgb3IgaXNpbnN0YW5jZShvYmosIGxvbmcpIGFuZCBvYmo6CisgICogICAgICAgICBwID0g PHZvaWQgKj48aW50cHRyX3Q+b2JqICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgZWxzZToKKyAgKiAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoIlVua25vd24gb3IgaW52YWxp ZCBwb2ludGVyIG9iamVjdDogJXIiICUgb2JqKQorICAqLworLSAgICBfX3B5eF90XzUgPSBfX1B5 eF9QeUludF9Bc19pbnRwdHJfdChfX3B5eF92X29iaik7IGlmICh1bmxpa2VseSgoX19weXhfdF81 ID09ICgoaW50cHRyX3QpLTEpKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDky MiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FzX2ludHB0 cl90KF9fcHl4X3Zfb2JqKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzUgPT0gKChpbnRwdHJfdCkt MSkpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTI0LCBfX3B5eF9MMV9lcnJv cikKKyAgICAgX19weXhfdl9wID0gKCh2b2lkICopKChpbnRwdHJfdClfX3B5eF90XzUpKTsKKyAK Ky0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyMQorKyAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTIzCisgICogICAgIGlmIFB5Q2Fwc3VsZV9Jc1Zh bGlkKG9iaiwgbmFtZSk6CisgICogICAgICAgICBwID0gUHlDYXBzdWxlX0dldFBvaW50ZXIob2Jq LCBuYW1lKQorICAqICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBpbnQpIG9yIGlzaW5zdGFuY2Uo b2JqLCBsb25nKSBhbmQgb2JqOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTYx NDcsNyArMTYxNDcsNyBAQCBzdGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfZ2V0X3BvaW50ZXIoY2hhciBjb25zdCAqX19weXhfdl9uYW1lLAorICAgICBnb3RvIF9fcHl4 X0wzOworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyNAor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkyNgorICAqICAgICAgICAgcCA9 IDx2b2lkICo+PGludHB0cl90Pm9iagorICAqICAgICBlbHNlOgorICAqICAgICAgICAgcmFpc2Ug UHlNUFZFcnJvcigiVW5rbm93biBvciBpbnZhbGlkIHBvaW50ZXIgb2JqZWN0OiAlciIgJSBvYmop ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNjE1NSw5ICsxNjE1NSw5IEBAIHN0 YXRpYyB2b2lkICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9nZXRfcG9pbnRlcihjaGFy IGNvbnN0ICpfX3B5eF92X25hbWUsCisgICogCisgICovCisgICAvKmVsc2UqLyB7CistICAgIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5eF9uX3NfUHlNUFZFcnJvcik7 IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDkyNCwgX19weXhfTDFfZXJy b3IpCisrICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5eF9uX3Nf UHlNUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDkyNiwg X19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgICBfX3B5 eF90XzggPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXRTYWZlKF9fcHl4X2twX3NfVW5rbm93bl9vcl9p bnZhbGlkX3BvaW50ZXJfb2JqZWMsIF9fcHl4X3Zfb2JqKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzgpKSBfX1BZWF9FUlIoMCwgOTI0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF84ID0g X19QeXhfUHlTdHJpbmdfRm9ybWF0U2FmZShfX3B5eF9rcF9zX1Vua25vd25fb3JfaW52YWxpZF9w b2ludGVyX29iamVjLCBfX3B5eF92X29iaik7IGlmICh1bmxpa2VseSghX19weXhfdF84KSkgX19Q WVhfRVJSKDAsIDkyNiwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzgpOworICAgICBfX3B5eF90XzkgPSBOVUxMOworICAgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRI T0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNykpKSB7CitAQCAtMTYxNzIs MTYgKzE2MTcyLDE2IEBAIHN0YXRpYyB2b2lkICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9nZXRfcG9pbnRlcihjaGFyIGNvbnN0ICpfX3B5eF92X25hbWUsCisgICAgIF9fcHl4X3RfNiA9 IChfX3B5eF90XzkpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNywgX19weXhf dF85LCBfX3B5eF90XzgpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzcsIF9f cHl4X3RfOCk7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85ID0gMDsK KyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfOCk7IF9fcHl4X3RfOCA9IDA7CistICAgIGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkyNCwgX19weXhfTDFfZXJyb3IpCisr ICAgIGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkyNiwgX19weXhfTDFf ZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworICAgICBfX1B5eF9ERUNSRUYo X19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAgICAgX19QeXhfUmFpc2UoX19weXhfdF82LCAw LCAwLCAwKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7Cist ICAgIF9fUFlYX0VSUigwLCA5MjQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1BZWF9FUlIoMCwg OTI2LCBfX3B5eF9MMV9lcnJvcikKKyAgIH0KKyAgIF9fcHl4X0wzOjsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MjUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5MjcKKyAgKiAgICAgZWxzZToKKyAgKiAgICAgICAgIHJhaXNlIFB5TVBWRXJy b3IoIlVua25vd24gb3IgaW52YWxpZCBwb2ludGVyIG9iamVjdDogJXIiICUgb2JqKQorICAqICAg ICByZXR1cm4gcCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTYxOTEsNyArMTYx OTEsNyBAQCBzdGF0aWMgdm9pZCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3Bv aW50ZXIoY2hhciBjb25zdCAqX19weXhfdl9uYW1lLAorICAgX19weXhfciA9IF9fcHl4X3ZfcDsK KyAgIGdvdG8gX19weXhfTDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTE3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTE5CisgICogICAg ICAgICAgICAgICAgIGZyZWUoc2VsZi5wYXJhbXNbaV0uZGF0YSkKKyAgKiAKKyAgKiBjZGVmIHZv aWQgKmdldF9wb2ludGVyKGNvbnN0IGNoYXIgKm5hbWUsIG9iamVjdCBvYmopOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTYyMTIsNyArMTYyMTIsNyBAQCBzdGF0aWMgdm9pZCAq X19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0X3BvaW50ZXIoY2hhciBjb25zdCAqX19w eXhfdl9uYW1lLAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MjkKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTMxCisgICogQGN5dGhvbi5pbnRlcm5hbAorICAqIGNkZWYgY2xhc3MgUmVuZGVyRnJhbWVJbmZv KG9iamVjdCk6CisgICogICAgIGNkZWYgX2Zyb21fc3RydWN0KHNlbGYsIG1wdl9yZW5kZXJfZnJh bWVfaW5mbyAqaW5mbyk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNjIzMCw4 MyArMTYyMzAsODMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNVJlbmRlckZyYW1lSW5mb19fZnJvbV9zdHJ1Y3Qoc3QKKyAgIGludCBfX3B5eF9jbGlu ZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJfZnJvbV9zdHJ1Y3QiLCAw KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzAKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzIKKyAgKiBjZGVmIGNsYXNzIFJlbmRlckZy YW1lSW5mbyhvYmplY3QpOgorICAqICAgICBjZGVmIF9mcm9tX3N0cnVjdChzZWxmLCBtcHZfcmVu ZGVyX2ZyYW1lX2luZm8gKmluZm8pOgorICAqICAgICAgICAgc2VsZi5wcmVzZW50ID0gYm9vbChp bmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBd LmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFRFJBVykKKyAgKiAgICAgICAgIHNlbGYu cmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVB VCkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKChfX3B5 eF92X2luZm9bMF0pLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMwLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKChfX3B5eF92X2luZm9b MF0pLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMyLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVl KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDkz MCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUo X19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgOTMy LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworLSAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKCghKCFfX3B5eF90XzIp KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkzMCwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3Rf MikpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMyLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgaWYgKF9fUHl4X1B5T2Jq ZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19wcmVz ZW50LCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDkzMCwgX19weXhfTDFfZXJyb3IpCisr ICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxm KSwgX19weXhfbl9zX3ByZXNlbnQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMyLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMQorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMworICAqICAgICBjZGVmIF9mcm9tX3N0cnVj dChzZWxmLCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKmluZm8pOgorICAqICAgICAgICAgc2VsZi5w cmVzZW50ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNF TlQpCisgICogICAgICAgICBzZWxmLnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9S RU5ERVJfRlJBTUVfSU5GT19SRURSQVcpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAg KiAgICAgICAgIHNlbGYucmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9G UkFNRV9JTkZPX1JFUEVBVCkKKyAgKiAgICAgICAgIHNlbGYuYmxvY2tfdnN5bmMgPSBib29sKGlu Zm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpCisgICovCist ICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2NF90KCgoX19weXhfdl9pbmZvWzBd KS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURSQVcpKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKChfX3B5eF92X2luZm9bMF0pLmZsYWdzICYg TVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFRFJBVykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBp ZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICBfX3B5 eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJvbUxvbmcoKCEoIV9fcHl4X3RfMikpKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISghX19weXhfdF8yKSkpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4X0wxX2Vycm9yKQorICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0 cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwgX19weXhfbl9zX3JlZHJhdywgX19weXhfdF8x KSA8IDApIF9fUFlYX0VSUigwLCA5MzEsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1B5 T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19y ZWRyYXcsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjkzNAorICAqICAgICAgICAgc2VsZi5wcmVzZW50ID0gYm9vbChpbmZvWzBd LmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1BSRVNFTlQpCisgICogICAgICAgICBzZWxm LnJlZHJhdyA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRURS QVcpCisgICogICAgICAgICBzZWxmLnJlcGVhdCA9IGJvb2woaW5mb1swXS5mbGFncyAmIE1QVl9S RU5ERVJfRlJBTUVfSU5GT19SRVBFQVQpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAg KiAgICAgICAgIHNlbGYuYmxvY2tfdnN5bmMgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVO REVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpCisgICogICAgICAgICBzZWxmLnRhcmdldF90aW1l ID0gaW5mb1swXS50YXJnZXRfdGltZQorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRf RnJvbV91aW50NjRfdCgoKF9fcHl4X3ZfaW5mb1swXSkuZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1F X0lORk9fUkVQRUFUKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkz MiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Gcm9tX3VpbnQ2 NF90KCgoX19weXhfdl9pbmZvWzBdKS5mbGFncyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19SRVBF QVQpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTM0LCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gX19Q eXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAw KSkgX19QWVhfRVJSKDAsIDkzMiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5 eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDAp KSBfX1BZWF9FUlIoMCwgOTM0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21M b25nKCghKCFfX3B5eF90XzIpKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDkzMiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeUJvb2xfRnJv bUxvbmcoKCEoIV9fcHl4X3RfMikpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9F UlIoMCwgOTM0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2Vs ZiksIF9fcHl4X25fc19yZXBlYXQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMyLCBf X3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKCgoUHlPYmpl Y3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfcmVwZWF0LCBfX3B5eF90XzEpIDwgMCkgX19Q WVhfRVJSKDAsIDkzNCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5MzMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MzUKKyAgKiAgICAg ICAgIHNlbGYucmVkcmF3ID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9J TkZPX1JFRFJBVykKKyAgKiAgICAgICAgIHNlbGYucmVwZWF0ID0gYm9vbChpbmZvWzBdLmZsYWdz ICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX1JFUEVBVCkKKyAgKiAgICAgICAgIHNlbGYuYmxvY2tf dnN5bmMgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tf VlNZTkMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNlbGYudGFy Z2V0X3RpbWUgPSBpbmZvWzBdLnRhcmdldF90aW1lCisgICogICAgICAgICByZXR1cm4gc2VsZgor ICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdCgoKF9fcHl4X3Zf aW5mb1swXSkuZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9fQkxPQ0tfVlNZTkMpKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21fdWludDY0X3QoKChfX3B5eF92X2luZm9b MF0pLmZsYWdzICYgTVBWX1JFTkRFUl9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKSk7IGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkzNSwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lz VHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigw LCA5MzMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNU cnVlKF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAs IDkzNSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhf dF8xID0gMDsKKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5Qm9vbF9Gcm9tTG9uZygoISghX19weXhf dF8yKSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlCb29sX0Zyb21Mb25nKCghKCFfX3B5 eF90XzIpKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDkzNSwgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIGlmIChfX1B5eF9Q eU9iamVjdF9TZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3Nf YmxvY2tfdnN5bmMsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgOTMzLCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5 eF92X3NlbGYpLCBfX3B5eF9uX3NfYmxvY2tfdnN5bmMsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9F UlIoMCwgOTM1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkz NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzNgorICAqICAgICAgICAg c2VsZi5yZXBlYXQgPSBib29sKGluZm9bMF0uZmxhZ3MgJiBNUFZfUkVOREVSX0ZSQU1FX0lORk9f UkVQRUFUKQorICAqICAgICAgICAgc2VsZi5ibG9ja192c3luYyA9IGJvb2woaW5mb1swXS5mbGFn cyAmIE1QVl9SRU5ERVJfRlJBTUVfSU5GT19CTE9DS19WU1lOQykKKyAgKiAgICAgICAgIHNlbGYu dGFyZ2V0X3RpbWUgPSBpbmZvWzBdLnRhcmdldF90aW1lICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKyAgKiAgICAgICAgIHJldHVybiBzZWxmCisgICogCisgICovCistICBfX3B5eF90XzEg PSBfX1B5eF9QeUludF9Gcm9tX2ludDY0X3QoKF9fcHl4X3ZfaW5mb1swXSkudGFyZ2V0X3RpbWUp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5MzQsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV9pbnQ2NF90KChfX3B5eF92X2lu Zm9bMF0pLnRhcmdldF90aW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgOTM2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAg aWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiks IF9fcHl4X25fc190YXJnZXRfdGltZSwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCA5MzQs IF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoKChQeU9i amVjdCAqKV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc190YXJnZXRfdGltZSwgX19weXhfdF8xKSA8 IDApIF9fUFlYX0VSUigwLCA5MzYsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTM1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTM3Cisg ICogICAgICAgICBzZWxmLmJsb2NrX3ZzeW5jID0gYm9vbChpbmZvWzBdLmZsYWdzICYgTVBWX1JF TkRFUl9GUkFNRV9JTkZPX0JMT0NLX1ZTWU5DKQorICAqICAgICAgICAgc2VsZi50YXJnZXRfdGlt ZSA9IGluZm9bMF0udGFyZ2V0X3RpbWUKKyAgKiAgICAgICAgIHJldHVybiBzZWxmICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNjMxOCw3ICsxNjMxOCw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX2Zy b21fc3RydWN0KHN0CisgICBfX3B5eF9yID0gKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZik7Cisg ICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjkyOQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjkzMQorICAqIEBjeXRo b24uaW50ZXJuYWwKKyAgKiBjZGVmIGNsYXNzIFJlbmRlckZyYW1lSW5mbyhvYmplY3QpOgorICAq ICAgICBjZGVmIF9mcm9tX3N0cnVjdChzZWxmLCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKmluZm8p OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTY2MjQsNyArMTY2MjQsNyBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNVJlbmRlckZy YW1lSW5mb18yX19zZXRzdGF0ZV9jeQorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NTAKKysvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTUyCisgICogICAgICAgICBiaW50IGluaXRlZAorICAqIAorICAqICAgICBk ZWYgX19pbml0X18oc2VsZiwgbXB2LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MTY2NTMsNyArMTY2NTMsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZWN0ICpfXworICAgICBzdGF0aWMg UHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7Jl9fcHl4X25fc19tcHYsJl9fcHl4X25f c19hcGlfdHlwZSwmX19weXhfbl9zX29wZW5nbF9pbml0X3BhcmFtcywmX19weXhfbl9zX2FkdmFu Y2VkX2NvbnRyb2wsJl9fcHl4X25fc194MTFfZGlzcGxheSwmX19weXhfbl9zX3dsX2Rpc3BsYXks Jl9fcHl4X25fc19kcm1fZGlzcGxheSwmX19weXhfbl9zX2RybV9vc2Rfc2l6ZSwwfTsKKyAgICAg UHlPYmplY3QqIHZhbHVlc1s4XSA9IHswLDAsMCwwLDAsMCwwLDB9OworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTUyCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5NTQKKyAgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1wdiwKKyAgKiAg ICAgICAgICAgICAgICAgIGFwaV90eXBlLAorICAqICAgICAgICAgICAgICAgICAgb3BlbmdsX2lu aXRfcGFyYW1zPU5vbmUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNjY2Miw3 ICsxNjY2Miw3IEBAIHN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEz UmVuZGVyQ29udGV4dF8xX19pbml0X18oUHlPYmplY3QgKl9fCisgICovCisgICAgIHZhbHVlc1sy XSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjk1MworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTU1CisgICogICAgICAgICAgICAgICAgICBhcGlfdHlwZSwKKyAgKiAgICAgICAgICAgICAgICAg IG9wZW5nbF9pbml0X3BhcmFtcz1Ob25lLAorICAqICAgICAgICAgICAgICAgICAgYWR2YW5jZWRf Y29udHJvbD1GYWxzZSwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE2NjcxLDcg KzE2NjcxLDcgQEAgc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNS ZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX18KKyAgKi8KKyAgICAgdmFsdWVzWzNd ID0gKChQeU9iamVjdCAqKVB5X0ZhbHNlKTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjk1NAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 OTU2CisgICogICAgICAgICAgICAgICAgICBvcGVuZ2xfaW5pdF9wYXJhbXM9Tm9uZSwKKyAgKiAg ICAgICAgICAgICAgICAgIGFkdmFuY2VkX2NvbnRyb2w9RmFsc2UsCisgICogICAgICAgICAgICAg ICAgICB4MTFfZGlzcGxheT1Ob25lLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MTY2ODAsNyArMTY2ODAsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZWN0ICpfXworICAqLworICAgICB2 YWx1ZXNbNF0gPSAoKFB5T2JqZWN0ICopUHlfTm9uZSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5NTUKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk1NworICAqICAgICAgICAgICAgICAgICAgYWR2YW5jZWRfY29udHJvbD1GYWxzZSwK KyAgKiAgICAgICAgICAgICAgICAgIHgxMV9kaXNwbGF5PU5vbmUsCisgICogICAgICAgICAgICAg ICAgICB3bF9kaXNwbGF5PU5vbmUsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0x NjY4OSw3ICsxNjY4OSw3IEBAIHN0YXRpYyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF8xX19pbml0X18oUHlPYmplY3QgKl9fCisgICovCisgICAgIHZh bHVlc1s1XSA9ICgoUHlPYmplY3QgKilQeV9Ob25lKTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjk1NgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTU4CisgICogICAgICAgICAgICAgICAgICB4MTFfZGlzcGxheT1Ob25lLAorICAqICAg ICAgICAgICAgICAgICAgd2xfZGlzcGxheT1Ob25lLAorICAqICAgICAgICAgICAgICAgICAgZHJt X2Rpc3BsYXk9Tm9uZSwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE2Njk4LDcg KzE2Njk4LDcgQEAgc3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNS ZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX18KKyAgKi8KKyAgICAgdmFsdWVzWzZd ID0gKChQeU9iamVjdCAqKVB5X05vbmUpOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTU3CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 NTkKKyAgKiAgICAgICAgICAgICAgICAgIHdsX2Rpc3BsYXk9Tm9uZSwKKyAgKiAgICAgICAgICAg ICAgICAgIGRybV9kaXNwbGF5PU5vbmUsCisgICogICAgICAgICAgICAgICAgICBkcm1fb3NkX3Np emU9Tm9uZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTY3MzgsNyArMTY3Mzgs NyBAQCBzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNv bnRleHRfMV9faW5pdF9fKFB5T2JqZWN0ICpfXworICAgICAgICAgY2FzZSAgMToKKyAgICAgICAg IGlmIChsaWtlbHkoKHZhbHVlc1sxXSA9IF9fUHl4X1B5RGljdF9HZXRJdGVtU3RyKF9fcHl4X2t3 ZHMsIF9fcHl4X25fc19hcGlfdHlwZSkpICE9IDApKSBrd19hcmdzLS07CisgICAgICAgICBlbHNl IHsKKy0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwg MiwgOCwgMSk7IF9fUFlYX0VSUigwLCA5NTAsIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgICBf X1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAwLCAyLCA4LCAxKTsgX19QWVhf RVJSKDAsIDk1MiwgX19weXhfTDNfZXJyb3IpCisgICAgICAgICB9CisgICAgICAgICBDWVRIT05f RkFMTFRIUk9VR0g7CisgICAgICAgICBjYXNlICAyOgorQEAgLTE2Nzc4LDcgKzE2Nzc4LDcgQEAg c3RhdGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 XzFfX2luaXRfXyhQeU9iamVjdCAqX18KKyAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgaWYg KHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1Bh cnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1 ZXMsIHBvc19hcmdzLCAiX19pbml0X18iKSA8IDApKSBfX1BZWF9FUlIoMCwgOTUwLCBfX3B5eF9M M19lcnJvcikKKysgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29y ZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIl9f aW5pdF9fIikgPCAwKSkgX19QWVhfRVJSKDAsIDk1MiwgX19weXhfTDNfZXJyb3IpCisgICAgICAg fQorICAgICB9IGVsc2UgeworICAgICAgIHN3aXRjaCAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9h cmdzKSkgeworQEAgLTE2ODExLDcgKzE2ODExLDcgQEAgc3RhdGljIGludCBfX3B5eF9wd185dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzFfX2luaXRfXyhQeU9iamVjdCAqX18K KyAgIH0KKyAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CisgICBfX3B5 eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19p bml0X18iLCAwLCAyLCA4LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJS KDAsIDk1MCwgX19weXhfTDNfZXJyb3IpCisrICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgi X19pbml0X18iLCAwLCAyLCA4LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhf RVJSKDAsIDk1MiwgX19weXhfTDNfZXJyb3IpCisgICBfX3B5eF9MM19lcnJvcjo7CisgICBfX1B5 eF9BZGRUcmFjZWJhY2soInZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0Ll9faW5pdF9f IiwgX19weXhfY2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX1B5 eF9SZWZOYW5ueUZpbmlzaENvbnRleHQoKTsKK0BAIC0xNjgxOSw3ICsxNjgxOSw3IEBAIHN0YXRp YyBpbnQgX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xX19p bml0X18oUHlPYmplY3QgKl9fCisgICBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTo7 CisgICBfX3B5eF9yID0gX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF9fX2luaXRfXygoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1Jl bmRlckNvbnRleHQgKilfX3B5eF92X3NlbGYpLCBfX3B5eF92X21wdiwgX19weXhfdl9hcGlfdHlw ZSwgX19weXhfdl9vcGVuZ2xfaW5pdF9wYXJhbXMsIF9fcHl4X3ZfYWR2YW5jZWRfY29udHJvbCwg X19weXhfdl94MTFfZGlzcGxheSwgX19weXhfdl93bF9kaXNwbGF5LCBfX3B5eF92X2RybV9kaXNw bGF5LCBfX3B5eF92X2RybV9vc2Rfc2l6ZSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTUwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTUy CisgICogICAgICAgICBiaW50IGluaXRlZAorICAqIAorICAqICAgICBkZWYgX19pbml0X18oc2Vs ZiwgbXB2LCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTY4NTYsMTQgKzE2ODU2 LDE0IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVy Q29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7 CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX19pbml0X18iLCAwKTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NjUKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5NjcKKyAgKiAgICAgICAgICAgICBtcHZfb3BlbmdsX2RybV9vc2Rf c2l6ZSBfZHJtX29zZF9zaXplCisgICogCisgICogICAgICAgICBzZWxmLl9tcHYgPSBtcHYgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorICAqICAgICAgICAgbWVtc2V0KCZnbF9w YXJhbXMsIDAsIHNpemVvZihnbF9wYXJhbXMpKQorICAqLworLSAgaWYgKCEobGlrZWx5KCgoX19w eXhfdl9tcHYpID09IFB5X05vbmUpIHx8IGxpa2VseShfX1B5eF9UeXBlVGVzdChfX3B5eF92X21w diwgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpKSkpKSBfX1BZWF9F UlIoMCwgOTY1LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICghKGxpa2VseSgoKF9fcHl4X3ZfbXB2 KSA9PSBQeV9Ob25lKSB8fCBsaWtlbHkoX19QeXhfVHlwZVRlc3QoX19weXhfdl9tcHYsIF9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KSkpKSkgX19QWVhfRVJSKDAsIDk2 NywgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF90XzEgPSBfX3B5eF92X21wdjsKKyAgIF9fUHl4 X0lOQ1JFRihfX3B5eF90XzEpOworICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzEpOworQEAgLTE2 ODcyLDcgKzE2ODcyLDcgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBfX3B5eF8KKyAgIF9fcHl4X3Zfc2Vs Zi0+X21wdiA9ICgoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4 dCAqKV9fcHl4X3RfMSk7CisgICBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjk2NworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjk2OQorICAqICAgICAgICAgc2VsZi5fbXB2ID0gbXB2CisgICogCisgICogICAgICAgICBt ZW1zZXQoJmdsX3BhcmFtcywgMCwgc2l6ZW9mKGdsX3BhcmFtcykpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC0xNjg4MSw3ICsxNjg4MSw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19w eXhfCisgICovCisgICAodm9pZCkobWVtc2V0KCgmX19weXhfdl9nbF9wYXJhbXMpLCAwLCAoc2l6 ZW9mKF9fcHl4X3ZfZ2xfcGFyYW1zKSkpKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5NjgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzAK KyAgKiAKKyAgKiAgICAgICAgIG1lbXNldCgmZ2xfcGFyYW1zLCAwLCBzaXplb2YoZ2xfcGFyYW1z KSkKKyAgKiAgICAgICAgIG1lbXNldCgmZHJtX3BhcmFtcywgMCwgc2l6ZW9mKGRybV9wYXJhbXMp KSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTY4OTAsNyArMTY4OTAsNyBAQCBz dGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRf X19pbml0X18oc3RydWN0IF9fcHl4XworICAqLworICAgKHZvaWQpKG1lbXNldCgoJl9fcHl4X3Zf ZHJtX3BhcmFtcyksIDAsIChzaXplb2YoX19weXhfdl9kcm1fcGFyYW1zKSkpKTsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NjkKKysgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5NzEKKyAgKiAgICAgICAgIG1lbXNldCgmZ2xfcGFyYW1zLCAwLCBz aXplb2YoZ2xfcGFyYW1zKSkKKyAgKiAgICAgICAgIG1lbXNldCgmZHJtX3BhcmFtcywgMCwgc2l6 ZW9mKGRybV9wYXJhbXMpKQorICAqICAgICAgICAgbWVtc2V0KCZfZHJtX29zZF9zaXplLCAwLCBz aXplb2YoX2RybV9vc2Rfc2l6ZSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0x Njg5OSw0NSArMTY4OTksNDUgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfMTNSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBfX3B5eF8KKyAgKi8KKyAgICh2 b2lkKShtZW1zZXQoKCZfX3B5eF92X19kcm1fb3NkX3NpemUpLCAwLCAoc2l6ZW9mKF9fcHl4X3Zf X2RybV9vc2Rfc2l6ZSkpKSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTcxCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTczCisgICogICAg ICAgICBtZW1zZXQoJl9kcm1fb3NkX3NpemUsIDAsIHNpemVvZihfZHJtX29zZF9zaXplKSkKKyAg KiAKKyAgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJhbXMoKSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisgICogCisgICogICAgICAgICBpZiBhcGlfdHlwZSA9PSBzZWxmLkFQSV9P UEVOR0w6CisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQ eU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk3MSwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoKChQeU9iamVj dCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKSk7IGlm ICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk3MywgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fcHl4X3ZfcGFyYW1zID0gKChzdHJ1 Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zICopX19weXhf dF8xKTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTczCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTc1Cisg ICogICAgICAgICBwYXJhbXMgPSBfUmVuZGVyUGFyYW1zKCkKKyAgKiAKKyAgKiAgICAgICAgIGlm IGFwaV90eXBlID09IHNlbGYuQVBJX09QRU5HTDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfc3RyaW5nKE1QVl9SRU5ERVJfUEFSQU1fQVBJ X1RZUEUsIE1QVl9SRU5ERVJfQVBJX1RZUEVfT1BFTkdMKQorICAqICAgICAgICAgZWxzZToKKyAg Ki8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAq KV9fcHl4X3Zfc2VsZiksIF9fcHl4X25fc19BUElfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzEpKSBfX1BZWF9FUlIoMCwgOTczLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9 IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoKChQeU9iamVjdCAqKV9fcHl4X3Zfc2VsZiksIF9f cHl4X25fc19BUElfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgOTc1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAg X19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhfdl9hcGlfdHlwZSwgX19weXhf dF8xLCBQeV9FUSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF8yKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgOTczLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9 IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3ZfYXBpX3R5cGUsIF9fcHl4X3RfMSwgUHlfRVEp OyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDk3NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8x KTsgX19weXhfdF8xID0gMDsKKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShf X3B5eF90XzIpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigwLCA5NzMs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9f cHl4X3RfMik7IGlmICh1bmxpa2VseShfX3B5eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDk3NSwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKKyAgIGlmIChsaWtlbHkoX19weXhfdF8zKSkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTc0CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo5NzYKKyAgKiAKKyAgKiAgICAgICAgIGlmIGFwaV90eXBlID09IHNlbGYuQVBJX09QRU5H TDoKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3N0cmluZyhNUFZfUkVOREVSX1BBUkFNX0FQ SV9UWVBFLCBNUFZfUkVOREVSX0FQSV9UWVBFX09QRU5HTCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgZWxzZToKKyAgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVy cm9yKCJVbmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90eXBlKQorICAqLworLSAgICBfX3B5eF90 XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVu ZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfc3RyaW5nKF9fcHl4 X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0FQSV9UWVBFLCBNUFZfUkVOREVSX0FQSV9UWVBF X09QRU5HTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk3NCwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3Rf OXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19w eXhfdnRhYiktPmFkZF9zdHJpbmcoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1fQVBJ X1RZUEUsIE1QVl9SRU5ERVJfQVBJX1RZUEVfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzIpKSBfX1BZWF9FUlIoMCwgOTc2LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfMik7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTczCisrICAgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NzUKKyAgKiAgICAgICAgIHBhcmFtcyA9 IF9SZW5kZXJQYXJhbXMoKQorICAqIAorICAqICAgICAgICAgaWYgYXBpX3R5cGUgPT0gc2VsZi5B UElfT1BFTkdMOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTY5NDcsNyArMTY5 NDcsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAgICBnb3RvIF9fcHl4X0wzOworICAg fQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3NgorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3OAorICAqICAgICAgICAgICAgIHBhcmFtcy5h ZGRfc3RyaW5nKE1QVl9SRU5ERVJfUEFSQU1fQVBJX1RZUEUsIE1QVl9SRU5ERVJfQVBJX1RZUEVf T1BFTkdMKQorICAqICAgICAgICAgZWxzZToKKyAgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVy cm9yKCJVbmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90eXBlKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CitAQCAtMTY5NTUsOSArMTY5NTUsOSBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4 XworICAqICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFyYW1zIGlzIG5vdCBOb25lOgorICAqLwor ICAgLyplbHNlKi8geworLSAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwg X19weXhfbl9zX1B5TVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCA5NzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1l KF9fcHl4X3RfMSwgX19weXhfbl9zX1B5TVBWRXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCA5NzgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKy0gICAgX19weXhfdF80ID0gX19QeXhfUHlTdHJpbmdfRm9ybWF0U2FmZShf X3B5eF9rcF9zX1Vua25vd25fYXBpX3R5cGVfciwgX19weXhfdl9hcGlfdHlwZSk7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDk3NiwgX19weXhfTDFfZXJyb3IpCisrICAg IF9fcHl4X3RfNCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1hdFNhZmUoX19weXhfa3Bfc19Vbmtub3du X2FwaV90eXBlX3IsIF9fcHl4X3ZfYXBpX3R5cGUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkp IF9fUFlYX0VSUigwLCA5NzgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19w eXhfdF80KTsKKyAgICAgX19weXhfdF81ID0gTlVMTDsKKyAgICAgaWYgKENZVEhPTl9VTlBBQ0tf TUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzEpKSkgeworQEAgLTE2 OTcyLDE2ICsxNjk3MiwxNiBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAgICBfX3B5eF90 XzIgPSAoX19weXhfdF81KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzEsIF9f cHl4X3RfNSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8x LCBfX3B5eF90XzQpOworICAgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9 IDA7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5NzYsIF9fcHl4X0wxX2Vycm9y KQorKyAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5NzgsIF9fcHl4 X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICAgIF9fUHl4X1JhaXNlKF9fcHl4X3Rf MiwgMCwgMCwgMCk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAw OworLSAgICBfX1BZWF9FUlIoMCwgOTc2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QWVhfRVJS KDAsIDk3OCwgX19weXhfTDFfZXJyb3IpCisgICB9CisgICBfX3B5eF9MMzo7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTc4CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6OTgwCisgICogICAgICAgICAgICAgcmFpc2UgUHlNUFZFcnJvcigiVW5r bm93biBhcGlfdHlwZSAlciIgJSBhcGlfdHlwZSkKKyAgKiAKKyAgKiAgICAgICAgIGlmIG9wZW5n bF9pbml0X3BhcmFtcyBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTE2OTkyLDE0ICsxNjk5MiwxNCBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAgX19w eXhfdF82ID0gKF9fcHl4X3RfMyAhPSAwKTsKKyAgIGlmIChfX3B5eF90XzYpIHsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk3OQorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTgxCisgICogCisgICogICAgICAgICBpZiBvcGVuZ2xfaW5p dF9wYXJhbXMgaXMgbm90IE5vbmU6CisgICogICAgICAgICAgICAgc2VsZi5fZ2V0X3Byb2NfYWRk cmVzcyA9IG9wZW5nbF9pbml0X3BhcmFtc1siZ2V0X3Byb2NfYWRkcmVzcyJdICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRk cmVzcyA9ICZfY19nZXRwcm9jYWRkcmVzcworICAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRf cHJvY19hZGRyZXNzX2N0eCA9IDx2b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcworICAqLwor LSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9EaWN0X0dldEl0ZW0oX19weXhfdl9vcGVu Z2xfaW5pdF9wYXJhbXMsIF9fcHl4X25fc19nZXRfcHJvY19hZGRyZXNzKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTc5LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfRGljdF9HZXRJdGVtKF9fcHl4X3Zfb3BlbmdsX2luaXRf cGFyYW1zLCBfX3B5eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcyk7IGlmICh1bmxpa2VseSghX19weXhf dF8yKSkgX19QWVhfRVJSKDAsIDk4MSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzIpOworICAgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfMik7CisgICAgIF9fUHl4 X0dPVFJFRihfX3B5eF92X3NlbGYtPl9nZXRfcHJvY19hZGRyZXNzKTsKK0BAIC0xNzAwNyw3ICsx NzAwNyw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVu ZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICAgIF9fcHl4X3Zfc2VsZi0+X2dl dF9wcm9jX2FkZHJlc3MgPSBfX3B5eF90XzI7CisgICAgIF9fcHl4X3RfMiA9IDA7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODAKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk4MgorICAqICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFy YW1zIGlzIG5vdCBOb25lOgorICAqICAgICAgICAgICAgIHNlbGYuX2dldF9wcm9jX2FkZHJlc3Mg PSBvcGVuZ2xfaW5pdF9wYXJhbXNbImdldF9wcm9jX2FkZHJlc3MiXQorICAqICAgICAgICAgICAg IGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzID0gJl9jX2dldHByb2NhZGRyZXNzICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNzAxNiw3ICsxNzAxNiw3IEBAIHN0YXRpYyBpbnQg X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhz dHJ1Y3QgX19weXhfCisgICovCisgICAgIF9fcHl4X3ZfZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJl c3MgPSAoJl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2dldHByb2NhZGRyZXNzKTsK KyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4MQorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTgzCisgICogICAgICAgICAgICAgc2VsZi5f Z2V0X3Byb2NfYWRkcmVzcyA9IG9wZW5nbF9pbml0X3BhcmFtc1siZ2V0X3Byb2NfYWRkcmVzcyJd CisgICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3MgPSAmX2NfZ2V0cHJv Y2FkZHJlc3MKKyAgKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVzc19jdHgg PSA8dm9pZCAqPnNlbGYuX2dldF9wcm9jX2FkZHJlc3MgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTE3MDI1LDE4ICsxNzAyNSwxOCBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4Xwor ICAqLworICAgICBfX3B5eF92X2dsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9ICgodm9p ZCAqKV9fcHl4X3Zfc2VsZi0+X2dldF9wcm9jX2FkZHJlc3MpOworIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTgyCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5ODQKKyAgKiAgICAgICAgICAgICBnbF9wYXJhbXMuZ2V0X3Byb2NfYWRkcmVz cyA9ICZfY19nZXRwcm9jYWRkcmVzcworICAqICAgICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJv Y19hZGRyZXNzX2N0eCA9IDx2b2lkICo+c2VsZi5fZ2V0X3Byb2NfYWRkcmVzcworICAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJB TVMsICZnbF9wYXJhbXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAg IGlmIGFkdmFuY2VkX2NvbnRyb2w6CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBW X1JFTkRFUl9QQVJBTV9BRFZBTkNFRF9DT05UUk9MLCAxKQorICAqLworLSAgICBfX3B5eF90XzIg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhfdl9w YXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0lOSVRfUEFSQU1TLCAoJl9fcHl4X3ZfZ2xf cGFyYW1zKSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk4 MiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0YWJz dHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFt cy0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJB TV9PUEVOR0xfSU5JVF9QQVJBTVMsICgmX19weXhfdl9nbF9wYXJhbXMpLCBOVUxMKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTg0LCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIp OyBfX3B5eF90XzIgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTc4CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODAKKyAgKiAg ICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJVbmtub3duIGFwaV90eXBlICVyIiAlIGFwaV90 eXBlKQorICAqIAorICAqICAgICAgICAgaWYgb3BlbmdsX2luaXRfcGFyYW1zIGlzIG5vdCBOb25l OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTcwNDUsMjggKzE3MDQ1LDI4IEBA IHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICovCisgICB9CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6OTgzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTg1CisgICogICAgICAgICAgICAgZ2xfcGFyYW1zLmdldF9wcm9jX2FkZHJlc3NfY3R4 ID0gPHZvaWQgKj5zZWxmLl9nZXRfcHJvY19hZGRyZXNzCisgICogICAgICAgICAgICAgcGFyYW1z LmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9JTklUX1BBUkFNUywgJmdsX3BhcmFt cykKKyAgKiAgICAgICAgIGlmIGFkdmFuY2VkX2NvbnRyb2w6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFN X0FEVkFOQ0VEX0NPTlRST0wsIDEpCisgICogICAgICAgICBpZiB4MTFfZGlzcGxheToKKyAgKi8K Ky0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X2FkdmFuY2VkX2Nv bnRyb2wpOyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlYX0VSUigwLCA5ODMsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4 X3ZfYWR2YW5jZWRfY29udHJvbCk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhf RVJSKDAsIDk4NSwgX19weXhfTDFfZXJyb3IpCisgICBpZiAoX19weXhfdF82KSB7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODQKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjk4NgorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9p ZHAoTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpCisgICog ICAgICAgICBpZiBhZHZhbmNlZF9jb250cm9sOgorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf aW50KE1QVl9SRU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgaWYgeDExX2Rpc3BsYXk6CisgICogICAgICAgICAg ICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFfZGlzcGxheQorICAqLworLSAgICBfX3B5eF90XzIg PSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4X3ZfcGFy YW1zLCBNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5ODQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5 eF90XzIgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f UmVuZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4 X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5ODYsIF9fcHl4X0wxX2Vycm9yKQorICAg ICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5ODMKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4NQorICAqICAg ICAgICAgICAgIGdsX3BhcmFtcy5nZXRfcHJvY19hZGRyZXNzX2N0eCA9IDx2b2lkICo+c2VsZi5f Z2V0X3Byb2NfYWRkcmVzcworICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JF TkRFUl9QQVJBTV9PUEVOR0xfSU5JVF9QQVJBTVMsICZnbF9wYXJhbXMpCisgICogICAgICAgICBp ZiBhZHZhbmNlZF9jb250cm9sOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTcw NzUsMTcgKzE3MDc1LDE3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICovCisgICB9Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTg1CisrICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTg3CisgICogICAgICAgICBpZiBhZHZhbmNlZF9jb250 cm9sOgorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fQURW QU5DRURfQ09OVFJPTCwgMSkKKyAgKiAgICAgICAgIGlmIHgxMV9kaXNwbGF5OiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4 MTFfZGlzcGxheQorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9Q QVJBTV9YMTFfRElTUExBWSwgZ2V0X3BvaW50ZXIoIkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpCisg ICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl94MTFfZGlz cGxheSk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk4NSwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhf dl94MTFfZGlzcGxheSk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAs IDk4NywgX19weXhfTDFfZXJyb3IpCisgICBpZiAoX19weXhfdF82KSB7CisgCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODYKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk4OAorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9S RU5ERVJfUEFSQU1fQURWQU5DRURfQ09OVFJPTCwgMSkKKyAgKiAgICAgICAgIGlmIHgxMV9kaXNw bGF5OgorICAqICAgICAgICAgICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3MDk4LDE4ICsxNzA5OCwxOCBAQCBzdGF0 aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19p bml0X18oc3RydWN0IF9fcHl4XworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdl9zZWxmLT5feDEx X2Rpc3BsYXkpOworICAgICBfX3B5eF92X3NlbGYtPl94MTFfZGlzcGxheSA9IF9fcHl4X3ZfeDEx X2Rpc3BsYXk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODcK KysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4OQorICAqICAgICAgICAg aWYgeDExX2Rpc3BsYXk6CisgICogICAgICAgICAgICAgc2VsZi5feDExX2Rpc3BsYXkgPSB4MTFf ZGlzcGxheQorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJB TV9YMTFfRElTUExBWSwgZ2V0X3BvaW50ZXIoIkRpc3BsYXkiLCB4MTFfZGlzcGxheSkpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGlmIHdsX2Rpc3BsYXk6CisgICog ICAgICAgICAgICAgc2VsZi5fd2xfZGlzcGxheSA9IHdsX2Rpc3BsYXkKKyAgKi8KKy0gICAgX19w eXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9f cHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX1gxMV9ESVNQTEFZLCBfX3B5eF9mXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9nZXRfcG9pbnRlcigoKGNoYXIgY29uc3QgKikiRGlzcGxheSIpLCBf X3B5eF92X3gxMV9kaXNwbGF5KSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDk4NywgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0 IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilf X3B5eF92X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBW X1JFTkRFUl9QQVJBTV9YMTFfRElTUExBWSwgX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Z2V0X3BvaW50ZXIoKChjaGFyIGNvbnN0ICopIkRpc3BsYXkiKSwgX19weXhfdl94MTFfZGlzcGxh eSksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5ODksIF9f cHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhf REVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5ODUKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk4NworICAqICAgICAgICAgaWYgYWR2YW5jZWRfY29udHJvbDoKKyAgKiAgICAgICAg ICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0FEVkFOQ0VEX0NPTlRST0wsIDEp CisgICogICAgICAgICBpZiB4MTFfZGlzcGxheTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTE3MTE4LDE3ICsxNzExOCwxNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAq LworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4OAorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MAorICAqICAgICAgICAgICAgIHNl bGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRk X3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5 IiwgeDExX2Rpc3BsYXkpKQorICAqICAgICAgICAgaWYgd2xfZGlzcGxheTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9k aXNwbGF5CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFN X1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCisgICov CistICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl93bF9kaXNwbGF5 KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgOTg4LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X3ds X2Rpc3BsYXkpOyBpZiAodW5saWtlbHkoX19weXhfdF82IDwgMCkpIF9fUFlYX0VSUigwLCA5OTAs IF9fcHl4X0wxX2Vycm9yKQorICAgaWYgKF9fcHl4X3RfNikgeworIAorLSAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTg5CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4Ijo5OTEKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5E RVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVyKCJEaXNwbGF5IiwgeDExX2Rpc3BsYXkp KQorICAqICAgICAgICAgaWYgd2xfZGlzcGxheToKKyAgKiAgICAgICAgICAgICBzZWxmLl93bF9k aXNwbGF5ID0gd2xfZGlzcGxheSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTcx NDEsMTggKzE3MTQxLDE4IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18z bXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICAgIF9fUHl4X0RF Q1JFRihfX3B5eF92X3NlbGYtPl93bF9kaXNwbGF5KTsKKyAgICAgX19weXhfdl9zZWxmLT5fd2xf ZGlzcGxheSA9IF9fcHl4X3Zfd2xfZGlzcGxheTsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjk5MAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6OTkyCisgICogICAgICAgICBpZiB3bF9kaXNwbGF5OgorICAqICAgICAgICAgICAgIHNlbGYu X3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lk cChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwg d2xfZGlzcGxheSkpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGlm IGRybV9kaXNwbGF5OgorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxh eS5nZXQoImZkIiwgLTEpCisgICovCistICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3Bh cmFtcy0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9Q QVJBTV9XTF9ESVNQTEFZLCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9nZXRfcG9pbnRl cigoKGNoYXIgY29uc3QgKikid2xfZGlzcGxheSIpLCBfX3B5eF92X3dsX2Rpc3BsYXkpLCBOVUxM KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTkwLCBfX3B5eF9MMV9l cnJvcikKKysgICAgX19weXhfdF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFi KS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVks IF9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X2dldF9wb2ludGVyKCgoY2hhciBjb25zdCAq KSJ3bF9kaXNwbGF5IiksIF9fcHl4X3Zfd2xfZGlzcGxheSksIE5VTEwpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA5OTIsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4 X3RfMiA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5ODgK KysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MAorICAqICAgICAgICAg ICAgIHNlbGYuX3gxMV9kaXNwbGF5ID0geDExX2Rpc3BsYXkKKyAgKiAgICAgICAgICAgICBwYXJh bXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fWDExX0RJU1BMQVksIGdldF9wb2ludGVyKCJE aXNwbGF5IiwgeDExX2Rpc3BsYXkpKQorICAqICAgICAgICAgaWYgd2xfZGlzcGxheTogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3MTYxLDgwICsxNzE2MSw4MCBAQCBzdGF0aWMg aW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0 X18oc3RydWN0IF9fcHl4XworICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjk5MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5 MworICAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNwbGF5CisgICogICAg ICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dMX0RJU1BMQVksIGdl dF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCisgICogICAgICAgICBpZiBkcm1f ZGlzcGxheTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIGRy bV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpCisgICogICAgICAgICAgICAg ZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lkIiwgLTEpCisgICov CistICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9kcm1fZGlzcGxh eSk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk5MSwgX19weXhf TDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdl9k cm1fZGlzcGxheSk7IGlmICh1bmxpa2VseShfX3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDk5 MywgX19weXhfTDFfZXJyb3IpCisgICBpZiAoX19weXhfdF82KSB7CisgCistICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTIKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjk5NAorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JF TkRFUl9QQVJBTV9XTF9ESVNQTEFZLCBnZXRfcG9pbnRlcigid2xfZGlzcGxheSIsIHdsX2Rpc3Bs YXkpKQorICAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6CisgICogICAgICAgICAgICAgZHJtX3Bh cmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5 LmdldCgiY3J0Y19pZCIsIC0xKQorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9y X2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKKyAgKi8KKy0gICAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2RybV9kaXNwbGF5LCBf X3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTky LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgOTk0LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7CistICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwo X19weXhfdF8yLCBfX3B5eF90dXBsZV9fNywgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8x KSkgX19QWVhfRVJSKDAsIDk5MiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9f UHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8yLCBfX3B5eF90dXBsZV9fNywgTlVMTCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3IpCisg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8y KTsgX19weXhfdF8yID0gMDsKKy0gICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9f cHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09j Y3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTkyLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhf dF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhf dF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTk0LCBf X3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9 IDA7CisgICAgIF9fcHl4X3ZfZHJtX3BhcmFtcy5mZCA9IF9fcHl4X3RfNzsKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MworKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6OTk1CisgICogICAgICAgICBpZiBkcm1fZGlzcGxheToKKyAgKiAg ICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKQorICAq ICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0Y19p ZCIsIC0xKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgZHJt X3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0x KQorICAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVlc3Rf cHRyIiwgTm9uZSkKKyAgKi8KKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0 clN0cihfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTkzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhf dF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2RybV9kaXNwbGF5LCBfX3B5 eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgOTk1LCBf X3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4 X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8xLCBfX3B5eF90dXBsZV9fOCwgTlVM TCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5MywgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8xLCBf X3B5eF90dXBsZV9fOCwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDk5NSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwor ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKy0gICAgX19weXhf dF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSgoX19weXhf dF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTkzLCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4 X3RfMik7IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09jY3Vy cmVkKCkpKSBfX1BZWF9FUlIoMCwgOTk1LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgICAgIF9fcHl4X3ZfZHJtX3BhcmFtcy5j cnRjX2lkID0gX19weXhfdF83OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTk0CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTYKKyAg KiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIsIC0xKQor ICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5LmdldCgiY3J0 Y19pZCIsIC0xKQorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJt X2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorICAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVl c3RfcHRyIiwgTm9uZSkKKyAgKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6CisgICov CistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9kcm1f ZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhf RVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5NiwgX19weXhfTDFfZXJyb3IpCisg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICBfX3B5eF90XzEgPSBfX1B5eF9QeU9i amVjdF9DYWxsKF9fcHl4X3RfMiwgX19weXhfdHVwbGVfXzksIE5VTEwpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5 eF90XzEgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMiwgX19weXhfdHVwbGVfXzksIE5V TEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5OTYsIF9fcHl4X0wx X2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgX19QeXhfREVDUkVG KF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5SW50 X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNyA9PSAoaW50KS0xKSAm JiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3IpCisr ICAgIF9fcHl4X3RfNyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfNyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJS KDAsIDk5NiwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworICAgICBfX3B5eF92X2RybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gX19w eXhfdF83OworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk1Cisr ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTcKKyAgKiAgICAgICAgICAg ICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKKyAg KiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgi Y29ubmVjdG9yX2lkIiwgLTEpCisgICogICAgICAgICAgICAgYXJwID0gZHJtX2Rpc3BsYXkuZ2V0 KCJhdG9taWNfcmVxdWVzdF9wdHIiLCBOb25lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CisgICogICAgICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOgorICAqICAgICAgICAgICAgICAg ICBkcm1fcGFyYW1zLmF0b21pY19yZXF1ZXN0X3B0ciA9IDxfZHJtTW9kZUF0b21pY1JlcSAqKj5n ZXRfcG9pbnRlcihhcnAsICJkcm1Nb2RlQXRvbWljUmVxKiIpCisgICovCistICAgIF9fcHl4X3Rf MSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhf bl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5NSwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIo X19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDk5NywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOworLSAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4 X3RfMSwgX19weXhfdHVwbGVfXzEwLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgOTk1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8yID0gX19QeXhf UHlPYmplY3RfQ2FsbChfX3B5eF90XzEsIF9fcHl4X3R1cGxlX18xMCwgTlVMTCk7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5NywgX19weXhfTDFfZXJyb3IpCisgICAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKyAgICAgX19weXhfdl9hcnAgPSBfX3B5eF90XzI7CisgICAgIF9fcHl4 X3RfMiA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTYK KysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5OAorICAqICAgICAgICAg ICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3Jf aWQiLCAtMSkKKyAgKiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19y ZXF1ZXN0X3B0ciIsIE5vbmUpCisgICogICAgICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTcyNDUsMTcgKzE3MjQ1LDE3IEBAIHN0 YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9f X2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzYgIT0gMCk7 CisgICAgIGlmIChfX3B5eF90XzMpIHsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTk3CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi Ojk5OQorICAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWljX3JlcXVl c3RfcHRyIiwgTm9uZSkKKyAgKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6CisgICog ICAgICAgICAgICAgICAgIGRybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gPF9kcm1Nb2Rl QXRvbWljUmVxICoqPmdldF9wb2ludGVyKGFycCwgImRybU1vZGVBdG9taWNSZXEqIikgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVy X2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkKKyAgKiAgICAgICAgICAgICBw YXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1z KQorICAqLworLSAgICAgIF9fcHl4X3RfOCA9IF9fUHl4X1B5T2JqZWN0X0FzU3RyaW5nKF9fcHl4 X3ZfYXJwKTsgaWYgKHVubGlrZWx5KCghX19weXhfdF84KSAmJiBQeUVycl9PY2N1cnJlZCgpKSkg X19QWVhfRVJSKDAsIDk5NywgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19weXhfdF84ID0gX19Q eXhfUHlPYmplY3RfQXNTdHJpbmcoX19weXhfdl9hcnApOyBpZiAodW5saWtlbHkoKCFfX3B5eF90 XzgpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgOTk5LCBfX3B5eF9MMV9lcnJv cikKKyAgICAgICBfX3B5eF92X2RybV9wYXJhbXMuYXRvbWljX3JlcXVlc3RfcHRyID0gKChzdHJ1 Y3QgX2RybU1vZGVBdG9taWNSZXEgKiopX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfZ2V0 X3BvaW50ZXIoX19weXhfdF84LCBfX3B5eF9rcF9zX2RybU1vZGVBdG9taWNSZXEpKTsKKyAKKy0g ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk2CisrICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5OAorICAqICAgICAgICAgICAgIGRybV9wYXJh bXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkKKyAg KiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19yZXF1ZXN0X3B0ciIs IE5vbmUpCisgICogICAgICAgICAgICAgaWYgYXJwIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMTcyNjQsMzQgKzE3MjY0LDM0IEBAIHN0YXRpYyBpbnQgX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1 Y3QgX19weXhfCisgICovCisgICAgIH0KKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjk5OAorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAw MAorICAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKKyAgKiAgICAgICAgICAgICAg ICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+ Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQorICAqICAgICAgICAgICAgIGRy bV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9p ZHAoTVBWX1JFTkRFUl9QQVJBTV9EUk1fRElTUExBWSwgJmRybV9wYXJhbXMpCisgICogICAgICAg ICBpZiBkcm1fb3NkX3NpemU6CisgICovCistICAgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0 X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxheSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDk5OCwgX19weXhfTDFfZXJyb3IpCisrICAg IF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9kcm1fZGlzcGxh eSwgX19weXhfbl9zX2dldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDEwMDAsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0g ICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzIsIF9fcHl4X3R1cGxl X18xMSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDk5OCwg X19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19w eXhfdF8yLCBfX3B5eF90dXBsZV9fMTEsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxMDAwLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMSk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor LSAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF8xKTsgaWYgKHVubGlr ZWx5KChfX3B5eF90XzcgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VS UigwLCA5OTgsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9B c19pbnQoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzcgPT0gKGludCktMSkgJiYg UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDAwLCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICAgIF9fcHl4X3Zf ZHJtX3BhcmFtcy5yZW5kZXJfZmQgPSBfX3B5eF90Xzc7CisgCistICAgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5OTkKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwMDEKKyAgKiAgICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVz dF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0 b21pY1JlcSoiKQorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVyX2ZkID0gZHJtX2Rp c3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3Zv aWRwKE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1zKSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6CisgICogICAg ICAgICAgICAgX2RybV9vc2Rfc2l6ZS53aWR0aCwgX2RybV9vc2Rfc2l6ZS5oZWlnaHQgPSBkcm1f b3NkX3NpemUKKyAgKi8KKy0gICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVj dF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5f X3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0RS TV9ESVNQTEFZLCAoJl9fcHl4X3ZfZHJtX3BhcmFtcyksIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCA5OTksIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90 XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVu ZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfdm9pZHAoX19weXhf dl9wYXJhbXMsIE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICgmX19weXhfdl9kcm1fcGFy YW1zKSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwMDEs IF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTEKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjk5MworICAqICAgICAgICAgICAgIHNlbGYuX3dsX2Rpc3BsYXkgPSB3bF9kaXNw bGF5CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChNUFZfUkVOREVSX1BBUkFNX1dM X0RJU1BMQVksIGdldF9wb2ludGVyKCJ3bF9kaXNwbGF5Iiwgd2xfZGlzcGxheSkpCisgICogICAg ICAgICBpZiBkcm1fZGlzcGxheTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3 MzAwLDE3ICsxNzMwMCwxNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAqLworICAgfQor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDAKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAyCisgICogICAgICAgICAgICAgZHJtX3BhcmFt cy5yZW5kZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJlbmRlcl9mZCIsIC0xKQorICAqICAgICAg ICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9EUk1fRElTUExBWSwgJmRy bV9wYXJhbXMpCisgICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBfZHJtX29zZF9zaXplLndpZHRoLCBfZHJtX29z ZF9zaXplLmhlaWdodCA9IGRybV9vc2Rfc2l6ZQorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRf dm9pZHAoTVBWX1JFTkRFUl9QQVJBTV9EUk1fT1NEX1NJWkUsICZfZHJtX29zZF9zaXplKQorICAq LworLSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfZHJtX29zZF9z aXplKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwgMTAwMCwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhf dl9kcm1fb3NkX3NpemUpOyBpZiAodW5saWtlbHkoX19weXhfdF8zIDwgMCkpIF9fUFlYX0VSUigw LCAxMDAyLCBfX3B5eF9MMV9lcnJvcikKKyAgIGlmIChfX3B5eF90XzMpIHsKKyAKKy0gICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDEKKysgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwMDMKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRw KE1QVl9SRU5ERVJfUEFSQU1fRFJNX0RJU1BMQVksICZkcm1fcGFyYW1zKQorICAqICAgICAgICAg aWYgZHJtX29zZF9zaXplOgorICAqICAgICAgICAgICAgIF9kcm1fb3NkX3NpemUud2lkdGgsIF9k cm1fb3NkX3NpemUuaGVpZ2h0ID0gZHJtX29zZF9zaXplICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0xNzMyMyw3ICsxNzMyMyw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisg ICAgICAgaWYgKHVubGlrZWx5KHNpemUgIT0gMikpIHsKKyAgICAgICAgIGlmIChzaXplID4gMikg X19QeXhfUmFpc2VUb29NYW55VmFsdWVzRXJyb3IoMik7CisgICAgICAgICBlbHNlIGlmIChzaXpl ID49IDApIF9fUHl4X1JhaXNlTmVlZE1vcmVWYWx1ZXNFcnJvcihzaXplKTsKKy0gICAgICAgIF9f UFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICAgIF9fUFlYX0VSUigwLCAx MDAzLCBfX3B5eF9MMV9lcnJvcikKKyAgICAgICB9CisgICAgICAgI2lmIENZVEhPTl9BU1NVTUVf U0FGRV9NQUNST1MgJiYgIUNZVEhPTl9BVk9JRF9CT1JST1dFRF9SRUZTCisgICAgICAgaWYgKGxp a2VseShQeVR1cGxlX0NoZWNrRXhhY3Qoc2VxdWVuY2UpKSkgeworQEAgLTE3MzM2LDIxICsxNzMz NiwyMSBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF90XzEpOworICAgICAgIF9fUHl4X0lOQ1JFRihfX3B5eF90XzIpOworICAgICAgICNlbHNlCist ICAgICAgX19weXhfdF8xID0gUHlTZXF1ZW5jZV9JVEVNKHNlcXVlbmNlLCAwKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCisrICAg ICAgX19weXhfdF8xID0gUHlTZXF1ZW5jZV9JVEVNKHNlcXVlbmNlLCAwKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTAwMywgX19weXhfTDFfZXJyb3IpCisgICAgICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgICAgX19weXhfdF8yID0gUHlTZXF1ZW5jZV9J VEVNKHNlcXVlbmNlLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MTAwMSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19weXhfdF8yID0gUHlTZXF1ZW5jZV9JVEVN KHNlcXVlbmNlLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTAw MywgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CisgICAg ICAgI2VuZGlmCisgICAgIH0gZWxzZSB7CisgICAgICAgUHlfc3NpemVfdCBpbmRleCA9IC0xOwor LSAgICAgIF9fcHl4X3RfNCA9IFB5T2JqZWN0X0dldEl0ZXIoX19weXhfdl9kcm1fb3NkX3NpemUp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9l cnJvcikKKysgICAgICBfX3B5eF90XzQgPSBQeU9iamVjdF9HZXRJdGVyKF9fcHl4X3ZfZHJtX29z ZF9zaXplKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAwMywgX19w eXhfTDFfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICAgICAgX19w eXhfdF85ID0gUHlfVFlQRShfX3B5eF90XzQpLT50cF9pdGVybmV4dDsKKyAgICAgICBpbmRleCA9 IDA7IF9fcHl4X3RfMSA9IF9fcHl4X3RfOShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfMSkpIGdvdG8gX19weXhfTDExX3VucGFja2luZ19mYWlsZWQ7CisgICAgICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMSk7CisgICAgICAgaW5kZXggPSAxOyBfX3B5eF90XzIgPSBfX3B5eF90Xzko X19weXhfdF80KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBnb3RvIF9fcHl4X0wxMV91bnBh Y2tpbmdfZmFpbGVkOworICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgICAgIGlm IChfX1B5eF9JdGVybmV4dFVucGFja0VuZENoZWNrKF9fcHl4X3RfOShfX3B5eF90XzQpLCAyKSA8 IDApIF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBpZiAoX19QeXhf SXRlcm5leHRVbnBhY2tFbmRDaGVjayhfX3B5eF90XzkoX19weXhfdF80KSwgMikgPCAwKSBfX1BZ WF9FUlIoMCwgMTAwMywgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19weXhfdF85ID0gTlVMTDsK KyAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgICAgICBn b3RvIF9fcHl4X0wxMl91bnBhY2tpbmdfZG9uZTsKK0BAIC0xNzM1OCwyOCArMTczNTgsMjggQEAg c3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 X19faW5pdF9fKHN0cnVjdCBfX3B5eF8KKyAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKyAgICAgICBfX3B5eF90XzkgPSBOVUxMOworICAgICAgIGlmIChfX1B5 eF9JdGVyRmluaXNoKCkgPT0gMCkgX19QeXhfUmFpc2VOZWVkTW9yZVZhbHVlc0Vycm9yKGluZGV4 KTsKKy0gICAgICBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCisrICAgICAgX19Q WVhfRVJSKDAsIDEwMDMsIF9fcHl4X0wxX2Vycm9yKQorICAgICAgIF9fcHl4X0wxMl91bnBhY2tp bmdfZG9uZTo7CisgICAgIH0KKy0gICAgX19weXhfdF83ID0gX19QeXhfUHlJbnRfQXNfaW50KF9f cHl4X3RfMSk7IGlmICh1bmxpa2VseSgoX19weXhfdF83ID09IChpbnQpLTEpICYmIFB5RXJyX09j Y3VycmVkKCkpKSBfX1BZWF9FUlIoMCwgMTAwMSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4 X3RfNyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoKF9fcHl4 X3RfNyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwMDMs IF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKKy0gICAgX19weXhfdF8xMCA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzIpOyBp ZiAodW5saWtlbHkoKF9fcHl4X3RfMTAgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCAxMDAxLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xMCA9IF9f UHl4X1B5SW50X0FzX2ludChfX3B5eF90XzIpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMTAgPT0g KGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDAzLCBfX3B5eF9M MV9lcnJvcikKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisg ICAgIF9fcHl4X3ZfX2RybV9vc2Rfc2l6ZS53aWR0aCA9IF9fcHl4X3RfNzsKKyAgICAgX19weXhf dl9fZHJtX29zZF9zaXplLmhlaWdodCA9IF9fcHl4X3RfMTA7CisgCistICAgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAyCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDA0CisgICogICAgICAgICBpZiBkcm1fb3NkX3NpemU6CisgICogICAgICAg ICAgICAgX2RybV9vc2Rfc2l6ZS53aWR0aCwgX2RybV9vc2Rfc2l6ZS5oZWlnaHQgPSBkcm1fb3Nk X3NpemUKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1f RFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6ZSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqIAorICAqICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2NyZWF0ZSgmc2Vs Zi5fY3R4LCBzZWxmLl9tcHYuX2N0eCwgcGFyYW1zLnBhcmFtcykKKyAgKi8KKy0gICAgX19weXhf dF8yID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1Jl bmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4 X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX0RSTV9PU0RfU0laRSwgKCZfX3B5eF92X19kcm1f b3NkX3NpemUpLCBOVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MTAwMiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMiA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3Bh cmFtcy0+X19weXhfdnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9Q QVJBTV9EUk1fT1NEX1NJWkUsICgmX19weXhfdl9fZHJtX29zZF9zaXplKSwgTlVMTCk7IGlmICh1 bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwMDQsIF9fcHl4X0wxX2Vycm9yKQor ICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Mik7IF9fcHl4X3RfMiA9IDA7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDAwCisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDAyCisg ICogICAgICAgICAgICAgZHJtX3BhcmFtcy5yZW5kZXJfZmQgPSBkcm1fZGlzcGxheS5nZXQoInJl bmRlcl9mZCIsIC0xKQorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRF Ul9QQVJBTV9EUk1fRElTUExBWSwgJmRybV9wYXJhbXMpCisgICogICAgICAgICBpZiBkcm1fb3Nk X3NpemU6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNzM4OCw3ICsxNzM4OCw3 IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICovCisgICB9CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAwNAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwMDYKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5E RVJfUEFSQU1fRFJNX09TRF9TSVpFLCAmX2RybV9vc2Rfc2l6ZSkKKyAgKiAKKyAgKiAgICAgICAg IGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9j dHgsIHBhcmFtcy5wYXJhbXMpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNzM5 Nyw3ICsxNzM5Nyw3IEBAIHN0YXRpYyBpbnQgX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzEzUmVuZGVyQ29udGV4dF9fX2luaXRfXyhzdHJ1Y3QgX19weXhfCisgICovCisgICBfX3B5eF92 X2VyciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoKCZfX3B5eF92X3NlbGYtPl9jdHgpLCBf X3B5eF92X3NlbGYtPl9tcHYtPl9jdHgsIF9fcHl4X3ZfcGFyYW1zLT5wYXJhbXMpOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDUKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDA3CisgICogCisgICogICAgICAgICBlcnIgPSBtcHZfcmVu ZGVyX2NvbnRleHRfY3JlYXRlKCZzZWxmLl9jdHgsIHNlbGYuX21wdi5fY3R4LCBwYXJhbXMucGFy YW1zKQorICAqICAgICAgICAgaWYgZXJyIDwgMDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTE3NDA3LDE2ICsxNzQwNywxNiBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAg X19weXhfdF8zID0gKChfX3B5eF92X2VyciA8IDApICE9IDApOworICAgaWYgKHVubGlrZWx5KF9f cHl4X3RfMykpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw MDYKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDgKKyAgKiAgICAg ICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9jcmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2 Ll9jdHgsIHBhcmFtcy5wYXJhbXMpCisgICogICAgICAgICBpZiBlcnIgPCAwOgorICAqICAgICAg ICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor ICAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCisgICogCisgICovCistICAgIF9fUHl4X0dl dE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8xLCBfX3B5eF9uX3NfTVBWRXJyb3IpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDA2LCBfX3B5eF9MMV9lcnJvcikKKysg ICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19NUFZFcnJv cik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwMDgsIF9fcHl4X0wx X2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gICAgX19weXhfdF80ID0g X19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCAxMDA2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF80ID0g X19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCAxMDA4LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNCk7CisgICAgIF9fcHl4X3RfNSA9IE5VTEw7CisgICAgIGlmIChDWVRIT05fVU5Q QUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8xKSkpIHsKK0BA IC0xNzQzMSwxNCArMTc0MzEsMTQgQEAgc3RhdGljIGludCBfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBfX3B5eF8KKyAgICAgX19w eXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF8x LCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfMSwgX19weXhfdF80KTsKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90 XzUgPSAwOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0g ICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTAwNiwgX19weXhfTDFf ZXJyb3IpCisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwMDgs IF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgICAgX19Q eXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICAgIF9fUHl4X1JhaXNlKF9f cHl4X3RfMiwgMCwgMCwgMCk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90 XzIgPSAwOworLSAgICBfX1BZWF9FUlIoMCwgMTAwNiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9f UFlYX0VSUigwLCAxMDA4LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwMDUKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwMDcKKyAgKiAKKyAgKiAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9j cmVhdGUoJnNlbGYuX2N0eCwgc2VsZi5fbXB2Ll9jdHgsIHBhcmFtcy5wYXJhbXMpCisgICogICAg ICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTc0NDcs NyArMTc0NDcsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAqLworICAgfQorIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMDcKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDA5CisgICogICAgICAgICBpZiBlcnIgPCAwOgorICAqICAg ICAgICAgICAgIHJhaXNlIE1QVkVycm9yKGVycikKKyAgKiAgICAgICAgIHNlbGYuaW5pdGVkID0g VHJ1ZSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTc0NTYsNyArMTc0NTYsNyBA QCBzdGF0aWMgaW50IF9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfX19pbml0X18oc3RydWN0IF9fcHl4XworICAqLworICAgX19weXhfdl9zZWxmLT5pbml0ZWQg PSAxOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk1MAorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk1MgorICAqICAgICAgICAgYmludCBpbml0 ZWQKKyAgKiAKKyAgKiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1wdiwgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTE3NDgxLDcgKzE3NDgxLDcgQEAgc3RhdGljIGludCBfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0X19faW5pdF9fKHN0cnVjdCBf X3B5eF8KKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTAxMAorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDEy CisgICogCisgICogICAgIEBfZXJyb3JzCisgICogICAgIGRlZiBzZXRfaWNjX3Byb2ZpbGUoc2Vs ZiwgaWNjX2Jsb2IpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTc1MjAsNyAr MTc1MjAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfMnNldF9pY2NfcHJvZmlsZQorICAgaW50IF9fcHl4X2NsaW5lbm8g PSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInNldF9pY2NfcHJvZmlsZSIsIDAp OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMTYKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDE4CisgICogICAgICAgICAgICAgaW50IGVy cgorICAqIAorICAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaWNjX2Jsb2IsIGJ5dGVzKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3NTMxLDE0ICsxNzUzMSwxNCBAQCBz dGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNv bnRleHRfMnNldF9pY2NfcHJvZmlsZQorICAgX19weXhfdF8yID0gKCghKF9fcHl4X3RfMSAhPSAw KSkgIT0gMCk7CisgICBpZiAodW5saWtlbHkoX19weXhfdF8yKSkgeworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAxNworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTAxOQorICAqIAorICAqICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo aWNjX2Jsb2IsIGJ5dGVzKToKKyAgKiAgICAgICAgICAgICByYWlzZSBQeU1QVkVycm9yKCJpY2Nf YmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKyAgKiAgICAgICAgIHZhbC5kYXRhID0gPHZvaWQgKj48Y2hhciAqPmljY19ibG9iCisg ICogICAgICAgICB2YWwuc2l6ZSA9IGxlbihpY2NfYmxvYikKKyAgKi8KKy0gICAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19QeU1QVkVycm9yKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAxNywgX19weXhfTDFfZXJyb3IpCisr ICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF80LCBfX3B5eF9uX3NfUHlNUFZF cnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwMTksIF9fcHl4 X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgICAgX19weXhfdF81 ID0gTlVMTDsKKyAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1l dGhvZF9DaGVjayhfX3B5eF90XzQpKSkgeworQEAgLTE3NTUyLDE0ICsxNzU1MiwxNCBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfMnNldF9pY2NfcHJvZmlsZQorICAgICB9CisgICAgIF9fcHl4X3RfMyA9IChfX3B5eF90XzUp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNCwgX19weXhfdF81LCBfX3B5eF9r cF9zX2ljY19ibG9iX3Nob3VsZF9iZV9hX2J5dGVzX2luc3RhKSA6IF9fUHl4X1B5T2JqZWN0X0Nh bGxPbmVBcmcoX19weXhfdF80LCBfX3B5eF9rcF9zX2ljY19ibG9iX3Nob3VsZF9iZV9hX2J5dGVz X2luc3RhKTsKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOwor LSAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMDE3LCBfX3B5eF9M MV9lcnJvcikKKysgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTAx OSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgICBf X1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgICAgX19QeXhfUmFpc2Uo X19weXhfdF8zLCAwLCAwLCAwKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4 X3RfMyA9IDA7CistICAgIF9fUFlYX0VSUigwLCAxMDE3LCBfX3B5eF9MMV9lcnJvcikKKysgICAg X19QWVhfRVJSKDAsIDEwMTksIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTAxNgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTAxOAorICAqICAgICAgICAgICAgIGludCBlcnIKKyAgKiAKKyAgKiAgICAgICAg IGlmIG5vdCBpc2luc3RhbmNlKGljY19ibG9iLCBieXRlcyk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKK0BAIC0xNzU2OCwyNyArMTc1NjgsMjcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2Zp bGUKKyAgKi8KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDE4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyMAorICAqICAgICAg ICAgaWYgbm90IGlzaW5zdGFuY2UoaWNjX2Jsb2IsIGJ5dGVzKToKKyAgKiAgICAgICAgICAgICBy YWlzZSBQeU1QVkVycm9yKCJpY2NfYmxvYiBzaG91bGQgYmUgYSBieXRlcyBpbnN0YW5jZSIpCisg ICogICAgICAgICB2YWwuZGF0YSA9IDx2b2lkICo+PGNoYXIgKj5pY2NfYmxvYiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICB2YWwuc2l6ZSA9IGxlbihpY2NfYmxvYikK KyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0FzV3JpdGFibGVTdHJp bmcoX19weXhfdl9pY2NfYmxvYik7IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNikgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDE4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0FzV3JpdGFibGVTdHJpbmcoX19weXhfdl9pY2NfYmxvYik7 IGlmICh1bmxpa2VseSgoIV9fcHl4X3RfNikgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VS UigwLCAxMDIwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4X3ZfdmFsLmRhdGEgPSAoKHZvaWQg KikoKGNoYXIgKilfX3B5eF90XzYpKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDE5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyMQor ICAqICAgICAgICAgICAgIHJhaXNlIFB5TVBWRXJyb3IoImljY19ibG9iIHNob3VsZCBiZSBhIGJ5 dGVzIGluc3RhbmNlIikKKyAgKiAgICAgICAgIHZhbC5kYXRhID0gPHZvaWQgKj48Y2hhciAqPmlj Y19ibG9iCisgICogICAgICAgICB2YWwuc2l6ZSA9IGxlbihpY2NfYmxvYikgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqIAorICAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5E RVJfUEFSQU1fSUNDX1BST0ZJTEUKKyAgKi8KKy0gIF9fcHl4X3RfNyA9IFB5T2JqZWN0X0xlbmd0 aChfX3B5eF92X2ljY19ibG9iKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNyA9PSAoKFB5X3NzaXpl X3QpLTEpKSkgX19QWVhfRVJSKDAsIDEwMTksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF83 ID0gUHlPYmplY3RfTGVuZ3RoKF9fcHl4X3ZfaWNjX2Jsb2IpOyBpZiAodW5saWtlbHkoX19weXhf dF83ID09ICgoUHlfc3NpemVfdCktMSkpKSBfX1BZWF9FUlIoMCwgMTAyMSwgX19weXhfTDFfZXJy b3IpCisgICBfX3B5eF92X3ZhbC5zaXplID0gX19weXhfdF83OworIAorLSAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDIzCisgICogICAgICAgICB2YWwuc2l6ZSA9IGxlbihpY2NfYmxvYikKKyAgKiAK KyAgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BBUkFNX0lDQ19QUk9GSUxFICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNzU5Nyw3ICsxNzU5Nyw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF8yc2V0X2ljY19wcm9maWxlCisgICovCisgICBfX3B5eF92X3BhcmFtLnR5cGUgPSBNUFZfUkVO REVSX1BBUkFNX0lDQ19QUk9GSUxFOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwMjIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI0Cisg ICogCisgICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9JQ0NfUFJPRklM RQorICAqICAgICAgICAgcGFyYW0uZGF0YSA9ICZ2YWwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorQEAgLTE3NjA2LDcgKzE3NjA2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2ZpbGUKKyAg Ki8KKyAgIF9fcHl4X3ZfcGFyYW0uZGF0YSA9ICgmX19weXhfdl92YWwpOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDI2CisgICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbAorICAqIAor ICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTE3NjIxLDcgKzE3NjIxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2ZpbGUKKyAgICAgICAjZW5k aWYKKyAgICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTAyNQorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwMjcKKyAgKiAKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAg ZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBwYXJhbSkg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3NjMxLDcgKzE3NjMxLDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250 ZXh0XzJzZXRfaWNjX3Byb2ZpbGUKKyAgICAgICAgIF9fcHl4X3ZfZXJyID0gbXB2X3JlbmRlcl9j b250ZXh0X3NldF9wYXJhbWV0ZXIoX19weXhfdl9zZWxmLT5fY3R4LCBfX3B5eF92X3BhcmFtKTsK KyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw MjQKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAyNgorICAqICAg ICAgICAgcGFyYW0uZGF0YSA9ICZ2YWwKKyAgKiAKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNzY1MCw3ICsxNzY1MCw3IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF8yc2V0X2ljY19wcm9maWxlCisgICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwMjYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDI4CisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIGVyciA9 IG1wdl9yZW5kZXJfY29udGV4dF9zZXRfcGFyYW1ldGVyKHNlbGYuX2N0eCwgcGFyYW0pCisgICog ICAgICAgICByZXR1cm4gZXJyICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNzY1 OCwxMyArMTc2NTgsMTMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzJzZXRfaWNjX3Byb2ZpbGUKKyAgKiAgICAgQF9lcnJv cnMKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7CistICBfX3B5eF90XzMgPSBfX1B5 eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkg X19QWVhfRVJSKDAsIDEwMjYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8zID0gX19QeXhf UHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9f UFlYX0VSUigwLCAxMDI4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzMpOworICAgX19weXhfciA9IF9fcHl4X3RfMzsKKyAgIF9fcHl4X3RfMyA9IDA7CisgICBnb3Rv IF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMTAK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDEyCisgICogCisgICogICAg IEBfZXJyb3JzCisgICogICAgIGRlZiBzZXRfaWNjX3Byb2ZpbGUoc2VsZiwgaWNjX2Jsb2IpOiAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTc2ODUsNyArMTc2ODUsNyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfMnNldF9pY2NfcHJvZmlsZQorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI5CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwMzEKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAgICAgZGVmIHNldF9h bWJpZW50X2xpZ2h0KHNlbGYsIGx1eCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xNzcxOSwxNyArMTc3MTksMTcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzRzZXRfYW1iaWVudF9saWcKKyAgIGludCBf X3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJzZXRfYW1i aWVudF9saWdodCIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwMzUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM3CisgICogICAg ICAgICAgICAgaW50IGVycgorICAqIAorICAqICAgICAgICAgdmFsID0gbHV4ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBNUFZfUkVOREVSX1BB UkFNX0FNQklFTlRfTElHSFQKKyAgKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsCisgICovCist ICBfX3B5eF90XzEgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdl9sdXgpOyBpZiAodW5saWtl bHkoKF9fcHl4X3RfMSA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJS KDAsIDEwMzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfQXNf aW50KF9fcHl4X3ZfbHV4KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzEgPT0gKGludCktMSkgJiYg UHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDM3LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fcHl4X3ZfdmFsID0gX19weXhfdF8xOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwMzYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM4 CisgICogCisgICogICAgICAgICB2YWwgPSBsdXgKKyAgKiAgICAgICAgIHBhcmFtLnR5cGUgPSBN UFZfUkVOREVSX1BBUkFNX0FNQklFTlRfTElHSFQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTE3NzM4LDcgKzE3NzM4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzRzZXRfYW1iaWVudF9saWcKKyAgKi8K KyAgIF9fcHl4X3ZfcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fQU1CSUVOVF9MSUdIVDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDM3CisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzOQorICAqICAgICAgICAgdmFsID0gbHV4Cisg ICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9QQVJBTV9BTUJJRU5UX0xJR0hUCisg ICogICAgICAgICBwYXJhbS5kYXRhID0gJnZhbCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8 CitAQCAtMTc3NDcsNyArMTc3NDcsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNHNldF9hbWJpZW50X2xpZworICAqLwor ICAgX19weXhfdl9wYXJhbS5kYXRhID0gKCZfX3B5eF92X3ZhbCk7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzOQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwNDEKKyAgKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmdmFsCisgICogCisgICog ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTc3 NjIsNyArMTc3NjIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM1JlbmRlckNvbnRleHRfNHNldF9hbWJpZW50X2xpZworICAgICAgICNlbmRpZgor ICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDQwCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA0MgorICAqIAorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICBlcnIg PSBtcHZfcmVuZGVyX2NvbnRleHRfc2V0X3BhcmFtZXRlcihzZWxmLl9jdHgsIHBhcmFtKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTc3NzIsNyArMTc3NzIsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRf NHNldF9hbWJpZW50X2xpZworICAgICAgICAgX19weXhfdl9lcnIgPSBtcHZfcmVuZGVyX2NvbnRl eHRfc2V0X3BhcmFtZXRlcihfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW0pOworICAg ICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzOQor KyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDQxCisgICogICAgICAg ICBwYXJhbS5kYXRhID0gJnZhbAorICAqIAorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3NzkxLDcgKzE3NzkxLDcgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzRz ZXRfYW1iaWVudF9saWcKKyAgICAgICB9CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA0MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwNDMKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgZXJyID0gbXB2 X3JlbmRlcl9jb250ZXh0X3NldF9wYXJhbWV0ZXIoc2VsZi5fY3R4LCBwYXJhbSkKKyAgKiAgICAg ICAgIHJldHVybiBlcnIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3Nzk5LDEz ICsxNzc5OSwxMyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfNHNldF9hbWJpZW50X2xpZworICAqICAgICBkZWYgZ2V0X25l eHRfZnJhbWVfaW5mbyhzZWxmKToKKyAgKi8KKyAgIF9fUHl4X1hERUNSRUYoX19weXhfcik7Cist ICBfX3B5eF90XzIgPSBfX1B5eF9QeUludF9Gcm9tX2ludChfX3B5eF92X2Vycik7IGlmICh1bmxp a2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwNDEsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMDQzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgX19weXhfciA9IF9fcHl4X3RfMjsKKyAgIF9fcHl4 X3RfMiA9IDA7CisgICBnb3RvIF9fcHl4X0wwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwMjkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDMxCisgICogCisgICogICAgIEBfZXJyb3JzCisgICogICAgIGRlZiBzZXRfYW1iaWVudF9saWdo dChzZWxmLCBsdXgpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTc4MjQsNyAr MTc4MjQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfNHNldF9hbWJpZW50X2xpZworICAgcmV0dXJuIF9fcHl4X3I7Cisg fQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDQzCisrLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNDUKKyAgKiAgICAgICAgIHJldHVybiBlcnIKKyAg KiAKKyAgKiAgICAgZGVmIGdldF9uZXh0X2ZyYW1lX2luZm8oc2VsZik6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xNzg2MSw3ICsxNzg2MSw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF82Z2V0X25leHRf ZnJhbWVfCisgICBpbnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiZ2V0X25leHRfZnJhbWVfaW5mbyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEwNDgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMDUwCisgICogICAgICAgICAgICAgbXB2X3JlbmRlcl9wYXJhbSBwYXJhbQorICAqIAor ICAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZP ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xNzg3MCw3ICsxNzg3MCw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF82Z2V0X25leHRfZnJhbWVfCisgICovCisgICBfX3B5eF92X3BhcmFtLnR5cGUgPSBNUFZf UkVOREVSX1BBUkFNX05FWFRfRlJBTUVfSU5GTzsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDQ5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA1MQorICAqIAorICAqICAgICAgICAgcGFyYW0udHlwZSA9IE1QVl9SRU5ERVJfUEFSQU1fTkVY VF9GUkFNRV9JTkZPCisgICogICAgICAgICBwYXJhbS5kYXRhID0gJmluZm8gICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3ODc5LDcgKzE3ODc5LDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4 dF9mcmFtZV8KKyAgKi8KKyAgIF9fcHl4X3ZfcGFyYW0uZGF0YSA9ICgmX19weXhfdl9pbmZvKTsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDUwCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MgorICAqICAgICAgICAgcGFyYW0udHlwZSA9 IE1QVl9SRU5ERVJfUEFSQU1fTkVYVF9GUkFNRV9JTkZPCisgICogICAgICAgICBwYXJhbS5kYXRh ID0gJmluZm8KKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0xNzg5NCw3ICsxNzg5NCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF82Z2V0X25leHRfZnJhbWVfCisg ICAgICAgI2VuZGlmCisgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTEKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDUzCisgICogICAgICAgICBwYXJhbS5kYXRhID0gJmluZm8KKyAgKiAg ICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250 ZXh0X2dldF9pbmZvKHNlbGYuX2N0eCwgcGFyYW0pICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xNzkwNCw3ICsxNzkwNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF82Z2V0X25leHRfZnJhbWVfCisgICAg ICAgICBfX3B5eF92X2VyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhfX3B5eF92X3Nl bGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW0pOworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MAorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDUyCisgICogICAgICAgICBwYXJhbS50eXBlID0gTVBWX1JFTkRFUl9Q QVJBTV9ORVhUX0ZSQU1FX0lORk8KKyAgKiAgICAgICAgIHBhcmFtLmRhdGEgPSAmaW5mbworICAq ICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE3 OTIzLDcgKzE3OTIzLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4dF9mcmFtZV8KKyAgICAgICB9CisgICB9 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1MgorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTQKKyAgKiAgICAgICAgIHdpdGggbm9naWw6 CisgICogICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2dldF9pbmZvKHNlbGYu X2N0eCwgcGFyYW0pCisgICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CitAQCAtMTc5MzMsMTYgKzE3OTMzLDE2IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF82Z2V0X25leHRfZnJh bWVfCisgICBfX3B5eF90XzEgPSAoKF9fcHl4X3ZfZXJyIDwgMCkgIT0gMCk7CisgICBpZiAodW5s aWtlbHkoX19weXhfdF8xKSkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTA1MworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1NQor ICAqICAgICAgICAgICAgIGVyciA9IG1wdl9yZW5kZXJfY29udGV4dF9nZXRfaW5mbyhzZWxmLl9j dHgsIHBhcmFtKQorICAqICAgICAgICAgaWYgZXJyIDwgMDoKKyAgKiAgICAgICAgICAgICByYWlz ZSBNUFZFcnJvcihlcnIpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKyAgKiAg ICAgICAgIHJldHVybiBSZW5kZXJGcmFtZUluZm8oKS5fZnJvbV9zdHJ1Y3QoJmluZm8pCisgICov CistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8zLCBfX3B5eF9uX3NfTVBW RXJyb3IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMDUzLCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzMsIF9f cHl4X25fc19NUFZFcnJvcik7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAs IDEwNTUsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0g ICAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDUzLCBfX3B5eF9MMV9lcnJvcikKKysg ICAgX19weXhfdF80ID0gX19QeXhfUHlJbnRfRnJvbV9pbnQoX19weXhfdl9lcnIpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDU1LCBfX3B5eF9MMV9lcnJvcikKKyAg ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICAgIF9fcHl4X3RfNSA9IE5VTEw7CisgICAg IGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19w eXhfdF8zKSkpIHsKK0BAIC0xNzk1NywxNCArMTc5NTcsMTQgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4dF9m cmFtZV8KKyAgICAgX19weXhfdF8yID0gKF9fcHl4X3RfNSkgPyBfX1B5eF9QeU9iamVjdF9DYWxs MkFyZ3MoX19weXhfdF8zLCBfX3B5eF90XzUsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9D YWxsT25lQXJnKF9fcHl4X3RfMywgX19weXhfdF80KTsKKyAgICAgX19QeXhfWERFQ1JFRihfX3B5 eF90XzUpOyBfX3B5eF90XzUgPSAwOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKKy0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MTA1MywgX19weXhfTDFfZXJyb3IpCisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDEwNTUsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8yKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgICAg IF9fUHl4X1JhaXNlKF9fcHl4X3RfMiwgMCwgMCwgMCk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgICBfX1BZWF9FUlIoMCwgMTA1MywgX19weXhfTDFf ZXJyb3IpCisrICAgIF9fUFlYX0VSUigwLCAxMDU1LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTIKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTQKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICog ICAgICAgICAgICAgZXJyID0gbXB2X3JlbmRlcl9jb250ZXh0X2dldF9pbmZvKHNlbGYuX2N0eCwg cGFyYW0pCisgICogICAgICAgICBpZiBlcnIgPCAwOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtMTc5NzMsNyArMTc5NzMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNmdldF9uZXh0X2ZyYW1lXworICAq LworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNTUKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU3CisgICogICAgICAgICAgICAg cmFpc2UgTVBWRXJyb3IoZXJyKQorICAqIAorICAqICAgICAgICAgcmV0dXJuIFJlbmRlckZyYW1l SW5mbygpLl9mcm9tX3N0cnVjdCgmaW5mbykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTE3OTgxLDE2ICsxNzk4MSwxNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfNmdldF9uZXh0X2ZyYW1lXworICAqICAg ICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6CisgICovCisgICBfX1B5eF9YREVD UkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJ bmZvKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwNTUsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKCgoUHlP YmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZv KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDEwNTcsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX3B5eF90XzMgPSAoKHN0 cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUlu Zm8gKikoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1l SW5mbyAqKV9fcHl4X3RfMiktPl9fcHl4X3Z0YWIpLT5fZnJvbV9zdHJ1Y3QoKChzdHJ1Y3QgX19w eXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8gKilfX3B5eF90XzIp LCAoJl9fcHl4X3ZfaW5mbykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigw LCAxMDU1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9ICgoc3RydWN0IF9fcHl4X3Z0 YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKSgoc3RydWN0 IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvICopX19weXhf dF8yKS0+X19weXhfdnRhYiktPl9mcm9tX3N0cnVjdCgoKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1 dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbyAqKV9fcHl4X3RfMiksICgmX19weXhfdl9p bmZvKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDEwNTcsIF9fcHl4 X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMyk7CisgICBfX1B5eF9ERUNSRUYo X19weXhfdF8yKTsgX19weXhfdF8yID0gMDsKKyAgIF9fcHl4X3IgPSBfX3B5eF90XzM7CisgICBf X3B5eF90XzMgPSAwOworICAgZ290byBfX3B5eF9MMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDQzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTA0NQorICAqICAgICAgICAgcmV0dXJuIGVycgorICAqIAorICAqICAgICBkZWYgZ2V0X25l eHRfZnJhbWVfaW5mbyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4 MDEyLDcgKzE4MDEyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzZnZXRfbmV4dF9mcmFtZV8KKyAgIHJldHVybiBfX3B5 eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1NworKy8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDU5CisgICogICAgICAgICByZXR1cm4g UmVuZGVyRnJhbWVJbmZvKCkuX2Zyb21fc3RydWN0KCZpbmZvKQorICAqIAorICAqICAgICBkZWYg c2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xODAzOCw3ICsxODAzOCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF84c2V0X3VwZGF0ZV9jYWxsCisgICBf X1B5eF9SZWZOYW5ueURlY2xhcmF0aW9ucworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQo InNldF91cGRhdGVfY2FsbGJhY2siLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDU4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2 MAorICAqIAorICAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6CisgICog ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTgw NTMsNyArMTgwNTMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM1JlbmRlckNvbnRleHRfOHNldF91cGRhdGVfY2FsbAorICAgICAgICNlbmRpZgor ICAgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDU5CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA2MQorICAqICAgICBkZWYgc2V0X3VwZGF0ZV9jYWxsYmFjayhzZWxmLCBjYik6CisgICogICAg ICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9zZXRf dXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8dm9pZCAqPmNiKSAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTgwNjMsNyArMTgwNjMsNyBAQCBzdGF0aWMg UHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRf OHNldF91cGRhdGVfY2FsbAorICAgICAgICAgbXB2X3JlbmRlcl9jb250ZXh0X3NldF91cGRhdGVf Y2FsbGJhY2soX19weXhfdl9zZWxmLT5fY3R4LCAoJl9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2X19jX3VwZGF0ZWNiKSwgKCh2b2lkICopX19weXhfdl9jYikpOworICAgICAgIH0KKyAKKy0g ICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA1OAorKyAgICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDYwCisgICogCisgICogICAgIGRlZiBzZXRf dXBkYXRlX2NhbGxiYWNrKHNlbGYsIGNiKToKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODA4Miw3ICsxODA4Miw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF84 c2V0X3VwZGF0ZV9jYWxsCisgICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwNjAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDYyCisgICogICAgICAgICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIG1wdl9yZW5k ZXJfY29udGV4dF9zZXRfdXBkYXRlX2NhbGxiYWNrKHNlbGYuX2N0eCwgJl9jX3VwZGF0ZWNiLCA8 dm9pZCAqPmNiKQorICAqICAgICAgICAgc2VsZi51cGRhdGVfY2IgPSBjYiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMTgwOTUsNyArMTgwOTUsNyBAQCBzdGF0aWMgUHlPYmplY3Qg Kl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfOHNldF91cGRh dGVfY2FsbAorICAgX19QeXhfREVDUkVGKF9fcHl4X3Zfc2VsZi0+dXBkYXRlX2NiKTsKKyAgIF9f cHl4X3Zfc2VsZi0+dXBkYXRlX2NiID0gX19weXhfdl9jYjsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMDU3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTA1OQorICAqICAgICAgICAgcmV0dXJuIFJlbmRlckZyYW1lSW5mbygpLl9mcm9tX3N0 cnVjdCgmaW5mbykKKyAgKiAKKyAgKiAgICAgZGVmIHNldF91cGRhdGVfY2FsbGJhY2soc2VsZiwg Y2IpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTgxMTAsNyArMTgxMTAsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfOHNldF91cGRhdGVfY2FsbAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDYyCisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwNjQKKyAgKiAgICAgICAgIHNlbGYudXBkYXRlX2NiID0gY2IKKyAg KiAKKyAgKiAgICAgZGVmIHVwZGF0ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTE4MTQxLDcgKzE4MTQxLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEwdXBkYXRlKHN0cnVjdAorICAgaW50 IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoInVwZGF0 ZSIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjQKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY2CisgICogICAgIGRlZiB1cGRh dGUoc2VsZik6CisgICogICAgICAgICBjZGVmIHVpbnQ2NF90IHJldAorICAqICAgICAgICAgd2l0 aCBub2dpbDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4MTU2LDcgKzE4MTU2 LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNS ZW5kZXJDb250ZXh0XzEwdXBkYXRlKHN0cnVjdAorICAgICAgICNlbmRpZgorICAgICAgIC8qdHJ5 OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY1 CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2NworICAqICAg ICAgICAgY2RlZiB1aW50NjRfdCByZXQKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAg ICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3VwZGF0ZShzZWxmLl9jdHgpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODE2Niw3ICsxODE2Niw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8x MHVwZGF0ZShzdHJ1Y3QKKyAgICAgICAgIF9fcHl4X3ZfcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0 X3VwZGF0ZShfX3B5eF92X3NlbGYtPl9jdHgpOworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2NAorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDY2CisgICogICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICogICAg ICAgICBjZGVmIHVpbnQ2NF90IHJldAorICAqICAgICAgICAgd2l0aCBub2dpbDogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4MTg1LDcgKzE4MTg1LDcgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEwdXBk YXRlKHN0cnVjdAorICAgICAgIH0KKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDY2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2 OAorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAgICAgICByZXQgPSBtcHZfcmVu ZGVyX2NvbnRleHRfdXBkYXRlKHNlbGYuX2N0eCkKKyAgKiAgICAgICAgIHJldHVybiByZXQgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4MTkzLDEzICsxODE5MywxMyBAQCBzdGF0 aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRl eHRfMTB1cGRhdGUoc3RydWN0CisgICogICAgIEBfZXJyb3JzCisgICovCisgICBfX1B5eF9YREVD UkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRfdChf X3B5eF92X3JldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwNjYs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJvbV91aW50NjRf dChfX3B5eF92X3JldCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEw NjgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX3B5 eF9yID0gX19weXhfdF8xOworICAgX19weXhfdF8xID0gMDsKKyAgIGdvdG8gX19weXhfTDA7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2MgorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjQKKyAgKiAgICAgICAgIHNlbGYudXBkYXRlX2Ni ID0gY2IKKyAgKiAKKyAgKiAgICAgZGVmIHVwZGF0ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTE4MjE4LDcgKzE4MjE4LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEwdXBkYXRlKHN0cnVj dAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMDY5CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNzEKKyAg KiAKKyAgKiAgICAgQF9lcnJvcnMKKyAgKiAgICAgZGVmIHJlbmRlcihzZWxmLCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTgyNDQsNyArMTgyNDQsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5k ZXIoUHlPYmplYworICAgICBzdGF0aWMgUHlPYmplY3QgKipfX3B5eF9weWFyZ25hbWVzW10gPSB7 Jl9fcHl4X25fc19vcGVuZ2xfZmJvLCZfX3B5eF9uX3NfZmxpcF95LCZfX3B5eF9uX3NfZGVwdGgs Jl9fcHl4X25fc19ibG9ja19mb3JfdGFyZ2V0X3RpbWUsJl9fcHl4X25fc19za2lwX3JlbmRlcmlu ZywwfTsKKyAgICAgUHlPYmplY3QqIHZhbHVlc1s1XSA9IHswLDAsMCwwLDB9OworIAorLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MAorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MgorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYg cmVuZGVyKHNlbGYsCisgICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTgyNTMsNyArMTgyNTMsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNy ZW5kZXIoUHlPYmplYworICAqLworICAgICB2YWx1ZXNbMF0gPSAoKFB5T2JqZWN0ICopUHlfTm9u ZSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDcxCisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDczCisgICogICAgIGRlZiByZW5k ZXIoc2VsZiwKKyAgKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJvPU5vbmUsCisgICogICAgICAg ICAgICAgICAgZmxpcF95PUZhbHNlLCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MTgyNjIsNyArMTgyNjIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIoUHlPYmplYworICAqLworICAgICB2 YWx1ZXNbMV0gPSAoKFB5T2JqZWN0ICopUHlfRmFsc2UpOworIAorLSAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTA3NAorICAqICAgICAgICAgICAgICAgIG9wZW5nbF9mYm89Tm9uZSwKKyAgKiAg ICAgICAgICAgICAgICBmbGlwX3k9RmFsc2UsCisgICogICAgICAgICAgICAgICAgZGVwdGg9Tm9u ZSwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4MjcxLDcgKzE4MjcxLDcgQEAg c3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJD b250ZXh0XzEzcmVuZGVyKFB5T2JqZWMKKyAgKi8KKyAgICAgdmFsdWVzWzJdID0gKChQeU9iamVj dCAqKVB5X05vbmUpOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA3MworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3NQorICAqICAg ICAgICAgICAgICAgIGZsaXBfeT1GYWxzZSwKKyAgKiAgICAgICAgICAgICAgICBkZXB0aD1Ob25l LAorICAqICAgICAgICAgICAgICAgIGJsb2NrX2Zvcl90YXJnZXRfdGltZT1UcnVlLCAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTgyODAsNyArMTgyODAsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNy ZW5kZXIoUHlPYmplYworICAqLworICAgICB2YWx1ZXNbM10gPSAoKFB5T2JqZWN0ICopUHlfVHJ1 ZSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDc0CisrICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDc2CisgICogICAgICAgICAgICAg ICAgZGVwdGg9Tm9uZSwKKyAgKiAgICAgICAgICAgICAgICBibG9ja19mb3JfdGFyZ2V0X3RpbWU9 VHJ1ZSwKKyAgKiAgICAgICAgICAgICAgICBza2lwX3JlbmRlcmluZz1GYWxzZSk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODMzOCw3ICsxODMzOCw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xM3Jl bmRlcihQeU9iamVjCisgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGlmICh1bmxpa2VseShr d19hcmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFs S2V5d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJn cywgInJlbmRlciIpIDwgMCkpIF9fUFlYX0VSUigwLCAxMDY5LCBfX3B5eF9MM19lcnJvcikKKysg ICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dk cywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgInJlbmRlciIpIDwgMCkp IF9fUFlYX0VSUigwLCAxMDcxLCBfX3B5eF9MM19lcnJvcikKKyAgICAgICB9CisgICAgIH0gZWxz ZSB7CisgICAgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKSB7CitAQCAt MTgzNjQsNyArMTgzNjQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3B3Xzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIoUHlPYmplYworICAgfQorICAgZ290 byBfX3B5eF9MNF9hcmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKyAgIF9fcHl4X0w1X2FyZ3R1cGxl X2Vycm9yOjsKKy0gIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJyZW5kZXIiLCAwLCAwLCA1 LCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDEwNjksIF9fcHl4 X0wzX2Vycm9yKQorKyAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoInJlbmRlciIsIDAsIDAs IDUsIFB5VHVwbGVfR0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMTA3MSwgX19w eXhfTDNfZXJyb3IpCisgICBfX3B5eF9MM19lcnJvcjo7CisgICBfX1B5eF9BZGRUcmFjZWJhY2so InZpZGN1dHRlci5saWJzLm1wdi5SZW5kZXJDb250ZXh0LnJlbmRlciIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CitAQCAtMTgzNzIsNyArMTgzNzIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTNyZW5kZXIoUHlPYmpl YworICAgX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU6OworICAgX19weXhfciA9IF9f cHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTJyZW5kZXIoKChz dHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ICopX19w eXhfdl9zZWxmKSwgX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF92X2ZsaXBfeSwgX19weXhfdl9k ZXB0aCwgX19weXhfdl9ibG9ja19mb3JfdGFyZ2V0X3RpbWUsIF9fcHl4X3Zfc2tpcF9yZW5kZXJp bmcpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwNjkKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDcxCisgICogCisgICogICAgIEBfZXJy b3JzCisgICogICAgIGRlZiByZW5kZXIoc2VsZiwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTE4NDAyLDI5ICsxODQwMiwyOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTJyZW5kZXIoc3RydWN0CisgICBp bnQgX19weXhfY2xpbmVubyA9IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgicmVu ZGVyIiwgMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3OQor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODEKKyAgKiAgICAgICAgICAg ICBtcHZfb3BlbmdsX2ZibyBmYm8KKyAgKiAKKyAgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQ YXJhbXMoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogICAgICAgICBp ZiBvcGVuZ2xfZmJvOgorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfQ2FsbE5v QXJnKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRl clBhcmFtcykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDc5LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZygo KFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJh bXMpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA4MSwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fcHl4X3ZfcGFyYW1z ID0gKChzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1z ICopX19weXhfdF8xKTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTA4MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwODMKKyAgKiAgICAgICAgIHBhcmFtcyA9IF9SZW5kZXJQYXJhbXMoKQorICAqIAorICAq ICAgICAgICAgaWYgb3BlbmdsX2ZibzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAq ICAgICAgICAgICAgIG1lbXNldCgmZmJvLCAwLCBzaXplb2YoZmJvKSkKKyAgKiAgICAgICAgICAg ICBmYm8uZmJvID0gb3BlbmdsX2Ziby5nZXQoImZibyIsIDApIG9yIDAKKyAgKi8KKy0gIF9fcHl4 X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X29wZW5nbF9mYm8pOyBpZiAodW5s aWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMDgxLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X29wZW5nbF9mYm8p OyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9M MV9lcnJvcikKKyAgIGlmIChfX3B5eF90XzIpIHsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwODIKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwODQKKyAgKiAKKyAgKiAgICAgICAgIGlmIG9wZW5nbF9mYm86CisgICogICAgICAgICAg ICAgbWVtc2V0KCZmYm8sIDAsIHNpemVvZihmYm8pKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtMTg0MzMsMjMgKzE4NDMzLDIzIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKKyAg Ki8KKyAgICAgKHZvaWQpKG1lbXNldCgoJl9fcHl4X3ZfZmJvKSwgMCwgKHNpemVvZihfX3B5eF92 X2ZibykpKSk7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDgz CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg1CisgICogICAgICAg ICBpZiBvcGVuZ2xfZmJvOgorICAqICAgICAgICAgICAgIG1lbXNldCgmZmJvLCAwLCBzaXplb2Yo ZmJvKSkKKyAgKiAgICAgICAgICAgICBmYm8uZmJvID0gb3BlbmdsX2Ziby5nZXQoImZibyIsIDAp IG9yIDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIGZiby53 ID0gb3BlbmdsX2Zib1sidyJdCisgICogICAgICAgICAgICAgZmJvLmggPSBvcGVuZ2xfZmJvWyJo Il0KKyAgKi8KKy0gICAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5 eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xID0gX19Q eXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X29wZW5nbF9mYm8sIF9fcHl4X25fc19nZXQp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDg1LCBfX3B5eF9MMV9l cnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fcHl4X3RfNCA9IF9f UHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF8xLCBfX3B5eF90dXBsZV9fMTIsIE5VTEwpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikK KysgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfQ2FsbChfX3B5eF90XzEsIF9fcHl4X3R1 cGxlX18xMiwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEw ODUsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CistICAgIF9fcHl4X3RfMiA9 IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoX19weXhfdF8y IDwgMCkpIF9fUFlYX0VSUigwLCAxMDgzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8y ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseShfX3B5eF90 XzIgPCAwKSkgX19QWVhfRVJSKDAsIDEwODUsIF9fcHl4X0wxX2Vycm9yKQorICAgICBpZiAoIV9f cHl4X3RfMikgeworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAw OworICAgICB9IGVsc2UgeworLSAgICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5SW50X0FzX2ludChf X3B5eF90XzQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfNSA9PSAoaW50KS0xKSAmJiBQeUVycl9P Y2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQorKyAgICAgIF9f cHl4X3RfNSA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoKF9f cHl4X3RfNSA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEw ODUsIF9fcHl4X0wxX2Vycm9yKQorICAgICAgIF9fcHl4X3RfMyA9IF9fcHl4X3RfNTsKKyAgICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgICAgICBnb3RvIF9f cHl4X0w0X2Jvb2xfYmlub3BfZG9uZTsKK0BAIC0xODQ1OCw0OSArMTg0NTgsNDkgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 XzEycmVuZGVyKHN0cnVjdAorICAgICBfX3B5eF9MNF9ib29sX2Jpbm9wX2RvbmU6OworICAgICBf X3B5eF92X2Ziby5mYm8gPSBfX3B5eF90XzM7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDg0CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDg2CisgICogICAgICAgICAgICAgbWVtc2V0KCZmYm8sIDAsIHNpemVvZihmYm8pKQorICAq ICAgICAgICAgICAgIGZiby5mYm8gPSBvcGVuZ2xfZmJvLmdldCgiZmJvIiwgMCkgb3IgMAorICAq ICAgICAgICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBmYm8uaCA9IG9wZW5nbF9mYm9bImgiXQorICAqICAg ICAgICAgICAgIGZiby5pbnRlcm5hbF9mb3JtYXQgPSBvcGVuZ2xfZmJvLmdldCgiaW50ZXJuYWxf Zm9ybWF0IiwgMCkgb3IgMAorICAqLworLSAgICBfX3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9E aWN0X0dldEl0ZW0oX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF9uX3Nfdyk7IGlmICh1bmxpa2Vs eSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwODQsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9EaWN0X0dldEl0ZW0oX19weXhfdl9vcGVuZ2xfZmJv LCBfX3B5eF9uX3Nfdyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEw ODYsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKy0gICAg X19weXhfdF8zID0gX19QeXhfUHlJbnRfQXNfaW50KF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseSgo X19weXhfdF8zID09IChpbnQpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpKSBfX1BZWF9FUlIoMCwg MTA4NCwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FzX2lu dChfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoaW50KS0xKSAmJiBQeUVy cl9PY2N1cnJlZCgpKSkgX19QWVhfRVJSKDAsIDEwODYsIF9fcHl4X0wxX2Vycm9yKQorICAgICBf X1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgICAgX19weXhfdl9mYm8u dyA9IF9fcHl4X3RfMzsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjEwODUKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODcKKyAgKiAg ICAgICAgICAgICBmYm8uZmJvID0gb3BlbmdsX2Ziby5nZXQoImZibyIsIDApIG9yIDAKKyAgKiAg ICAgICAgICAgICBmYm8udyA9IG9wZW5nbF9mYm9bInciXQorICAqICAgICAgICAgICAgIGZiby5o ID0gb3BlbmdsX2Zib1siaCJdICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAg ICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0ID0gb3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zv cm1hdCIsIDApIG9yIDAKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5E RVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykKKyAgKi8KKy0gICAgX19weXhfdF80ID0gX19QeXhf UHlPYmplY3RfRGljdF9HZXRJdGVtKF9fcHl4X3Zfb3BlbmdsX2ZibywgX19weXhfbl9zX2gpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMDg1LCBfX3B5eF9MMV9lcnJv cikKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfRGljdF9HZXRJdGVtKF9fcHl4X3Zf b3BlbmdsX2ZibywgX19weXhfbl9zX2gpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCAxMDg3LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf NCk7CistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF90XzQpOyBpZiAo dW5saWtlbHkoKF9fcHl4X3RfMyA9PSAoaW50KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgX19Q WVhfRVJSKDAsIDEwODUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzMgPSBfX1B5eF9Q eUludF9Bc19pbnQoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGludCkt MSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDg3LCBfX3B5eF9MMV9lcnJv cikKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgICAgIF9f cHl4X3ZfZmJvLmggPSBfX3B5eF90XzM7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMDg2CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDg4CisgICogICAgICAgICAgICAgZmJvLncgPSBvcGVuZ2xfZmJvWyJ3Il0KKyAgKiAgICAgICAg ICAgICBmYm8uaCA9IG9wZW5nbF9mYm9bImgiXQorICAqICAgICAgICAgICAgIGZiby5pbnRlcm5h bF9mb3JtYXQgPSBvcGVuZ2xfZmJvLmdldCgiaW50ZXJuYWxfZm9ybWF0IiwgMCkgb3IgMCAgICAg ICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lk cChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCisgICogICAgICAgICBpZiBmbGlw X3k6CisgICovCistICAgIF9fcHl4X3RfNCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19w eXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF9uX3NfZ2V0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfNCA9IF9f UHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9vcGVuZ2xfZmJvLCBfX3B5eF9uX3NfZ2V0 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTA4OCwgX19weXhfTDFf ZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgICBfX3B5eF90XzEgPSBf X1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfNCwgX19weXhfdHVwbGVfXzEzLCBOVUxMKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3Ip CisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0NhbGwoX19weXhfdF80LCBfX3B5eF90 dXBsZV9fMTMsIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAx MDg4LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgICBfX3B5eF90XzIg PSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3Rf MiA8IDApKSBfX1BZWF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3Rf MiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzEpOyBpZiAodW5saWtlbHkoX19weXhf dF8yIDwgMCkpIF9fUFlYX0VSUigwLCAxMDg4LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgaWYgKCFf X3B5eF90XzIpIHsKKyAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKyAgICAgfSBlbHNlIHsKKy0gICAgICBfX3B5eF90XzUgPSBfX1B5eF9QeUludF9Bc19pbnQo X19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChfX3B5eF90XzUgPT0gKGludCktMSkgJiYgUHlFcnJf T2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDg2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBf X3B5eF90XzUgPSBfX1B5eF9QeUludF9Bc19pbnQoX19weXhfdF8xKTsgaWYgKHVubGlrZWx5KChf X3B5eF90XzUgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAx MDg4LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgICBfX3B5eF90XzMgPSBfX3B5eF90XzU7CisgICAg ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICAgICAgZ290byBf X3B5eF9MNl9ib29sX2Jpbm9wX2RvbmU7CitAQCAtMTg1MDksMTggKzE4NTA5LDE4IEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4 dF8xMnJlbmRlcihzdHJ1Y3QKKyAgICAgX19weXhfTDZfYm9vbF9iaW5vcF9kb25lOjsKKyAgICAg X19weXhfdl9mYm8uaW50ZXJuYWxfZm9ybWF0ID0gX19weXhfdF8zOworIAorLSAgICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4NworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTA4OQorICAqICAgICAgICAgICAgIGZiby5oID0gb3BlbmdsX2Zib1si aCJdCisgICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0 KCJpbnRlcm5hbF9mb3JtYXQiLCAwKSBvciAwCisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF92 b2lkcChNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIGlmIGZsaXBfeToKKyAgKiAgICAgICAgICAgICBwYXJh bXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKKyAgKi8KKy0gICAgX19weXhf dF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1Jl bmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX3ZvaWRwKF9fcHl4 X3ZfcGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICgmX19weXhfdl9mYm8pLCBO VUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA4NywgX19weXhf TDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4X3Z0YWJzdHJ1Y3RfOXZp ZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92X3BhcmFtcy0+X19weXhf dnRhYiktPmFkZF92b2lkcChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9PUEVOR0xf RkJPLCAoJl9fcHl4X3ZfZmJvKSwgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDEwODksIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhf dF8xKTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDgxCisrICAgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDgzCisgICogICAgICAgICBwYXJhbXMgPSBfUmVu ZGVyUGFyYW1zKCkKKyAgKiAKKyAgKiAgICAgICAgIGlmIG9wZW5nbF9mYm86ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODUyOSwyOCArMTg1MjksMjggQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEycmVu ZGVyKHN0cnVjdAorICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwODgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkwCisg ICogICAgICAgICAgICAgZmJvLmludGVybmFsX2Zvcm1hdCA9IG9wZW5nbF9mYm8uZ2V0KCJpbnRl cm5hbF9mb3JtYXQiLCAwKSBvciAwCisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF92b2lkcChN UFZfUkVOREVSX1BBUkFNX09QRU5HTF9GQk8sICZmYm8pCisgICogICAgICAgICBpZiBmbGlwX3k6 ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRk X2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKKyAgKiAgICAgICAgIGlmIGRlcHRoIGlz IG5vdCBOb25lOgorICAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9f cHl4X3ZfZmxpcF95KTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwg MTA4OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1Ry dWUoX19weXhfdl9mbGlwX3kpOyBpZiAodW5saWtlbHkoX19weXhfdF8yIDwgMCkpIF9fUFlYX0VS UigwLCAxMDkwLCBfX3B5eF9MMV9lcnJvcikKKyAgIGlmIChfX3B5eF90XzIpIHsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODkKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTEKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX3Zv aWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykKKyAgKiAgICAgICAgIGlmIGZs aXBfeToKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZM SVBfWSwgMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgaWYgZGVw dGggaXMgbm90IE5vbmU6CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRF Ul9QQVJBTV9ERVBUSCwgZGVwdGgpCisgICovCistICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9f cHl4X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5 eF92X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5E RVJfUEFSQU1fRkxJUF9ZLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIo MCwgMTA4OSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9ICgoc3RydWN0IF9fcHl4 X3Z0YWJzdHJ1Y3RfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMgKilfX3B5eF92 X3BhcmFtcy0+X19weXhfdnRhYiktPmFkZF9pbnQoX19weXhfdl9wYXJhbXMsIE1QVl9SRU5ERVJf UEFSQU1fRkxJUF9ZLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MTA5MSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAg ICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwODgKKysgICAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEwOTAKKyAgKiAgICAgICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0 ID0gb3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDApIG9yIDAKKyAgKiAgICAgICAg ICAgICBwYXJhbXMuYWRkX3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fT1BFTkdMX0ZCTywgJmZibykK KyAgKiAgICAgICAgIGlmIGZsaXBfeTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAg LTE4NTU5LDcgKzE4NTU5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEycmVuZGVyKHN0cnVjdAorICAqLworICAgfQor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTAKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkyCisgICogICAgICAgICBpZiBmbGlwX3k6Cisg ICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9GTElQX1ksIDEp CisgICogICAgICAgICBpZiBkZXB0aCBpcyBub3QgTm9uZTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTE4NTcwLDE5ICsxODU3MCwxOSBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTJyZW5kZXIoc3RydWN0 CisgICBfX3B5eF90XzYgPSAoX19weXhfdF8yICE9IDApOworICAgaWYgKF9fcHl4X3RfNikgewor IAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MQorKyAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5MworICAqICAgICAgICAgICAgIHBhcmFt cy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fRkxJUF9ZLCAxKQorICAqICAgICAgICAgaWYgZGVw dGggaXMgbm90IE5vbmU6CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRF Ul9QQVJBTV9ERVBUSCwgZGVwdGgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6CisgICogICAgICAgICAgICAgcGFy YW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCisg ICovCistICAgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF92X2RlcHRoKTsg aWYgKHVubGlrZWx5KChfX3B5eF90XzMgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkp IF9fUFlYX0VSUigwLCAxMDkxLCBfX3B5eF9MMV9lcnJvcikKKy0gICAgX19weXhfdF8xID0gKChz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFt cyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywg TVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwgX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMTA5MSwgX19weXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMyA9 IF9fUHl4X1B5SW50X0FzX2ludChfX3B5eF92X2RlcHRoKTsgaWYgKHVubGlrZWx5KChfX3B5eF90 XzMgPT0gKGludCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIF9fUFlYX0VSUigwLCAxMDkzLCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhfdnRhYnN0cnVj dF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5f X3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9QQVJBTV9ERVBU SCwgX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA5 MywgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBf X1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTAKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEwOTIKKyAgKiAgICAgICAgIGlmIGZsaXBfeToKKyAgKiAgICAgICAgICAg ICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0ZMSVBfWSwgMSkKKyAgKiAgICAgICAg IGlmIGRlcHRoIGlzIG5vdCBOb25lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAt MTg1OTEsMjkgKzE4NTkxLDI5IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKKyAgKi8KKyAgIH0K KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDkyCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NAorICAqICAgICAgICAgaWYgZGVwdGggaXMg bm90IE5vbmU6CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJB TV9ERVBUSCwgZGVwdGgpCisgICogICAgICAgICBpZiBub3QgYmxvY2tfZm9yX3RhcmdldF90aW1l OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgcGFyYW1zLmFk ZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCisgICogICAg ICAgICBpZiBza2lwX3JlbmRlcmluZzoKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2Jq ZWN0X0lzVHJ1ZShfX3B5eF92X2Jsb2NrX2Zvcl90YXJnZXRfdGltZSk7IGlmICh1bmxpa2VseShf X3B5eF90XzYgPCAwKSkgX19QWVhfRVJSKDAsIDEwOTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdF82ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3ZfYmxvY2tfZm9yX3RhcmdldF90 aW1lKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfNiA8IDApKSBfX1BZWF9FUlIoMCwgMTA5NCwgX19w eXhfTDFfZXJyb3IpCisgICBfX3B5eF90XzIgPSAoKCFfX3B5eF90XzYpICE9IDApOworICAgaWYg KF9fcHl4X3RfMikgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA5MworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NQorICAqICAg ICAgICAgICAgIHBhcmFtcy5hZGRfaW50KE1QVl9SRU5ERVJfUEFSQU1fREVQVEgsIGRlcHRoKQor ICAqICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90YXJnZXRfdGltZToKKyAgKiAgICAgICAgICAg ICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BBUkFNX0JMT0NLX0ZPUl9UQVJHRVRfVElNRSwg MCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgaWYgc2tpcF9yZW5k ZXJpbmc6CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9T S0lQX1JFTkRFUklORywgMSkKKyAgKi8KKy0gICAgX19weXhfdF8xID0gKChzdHJ1Y3QgX19weXhf dnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqKV9fcHl4X3Zf cGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywgTVBWX1JFTkRFUl9Q QVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxMDkzLCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF8xID0gKChz dHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFt cyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFtcywg TVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMDk1LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5 eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5 MgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NAorICAqICAgICAg ICAgaWYgZGVwdGggaXMgbm90IE5vbmU6CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQo TVBWX1JFTkRFUl9QQVJBTV9ERVBUSCwgZGVwdGgpCisgICogICAgICAgICBpZiBub3QgYmxvY2tf Zm9yX3RhcmdldF90aW1lOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTg2MjIs MjggKzE4NjIyLDI4IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKKyAgKi8KKyAgIH0KKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDk0CisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NgorICAqICAgICAgICAgaWYgbm90IGJsb2NrX2Zvcl90 YXJnZXRfdGltZToKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRkX2ludChNUFZfUkVOREVSX1BB UkFNX0JMT0NLX0ZPUl9UQVJHRVRfVElNRSwgMCkKKyAgKiAgICAgICAgIGlmIHNraXBfcmVuZGVy aW5nOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgcGFyYW1z LmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkKKyAgKiAKKyAgKi8K Ky0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF92X3NraXBfcmVuZGVy aW5nKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgMTA5NCwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhf dl9za2lwX3JlbmRlcmluZyk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJS KDAsIDEwOTYsIF9fcHl4X0wxX2Vycm9yKQorICAgaWYgKF9fcHl4X3RfMikgeworIAorLSAgICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NQorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5NworICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfaW50 KE1QVl9SRU5ERVJfUEFSQU1fQkxPQ0tfRk9SX1RBUkdFVF9USU1FLCAwKQorICAqICAgICAgICAg aWYgc2tpcF9yZW5kZXJpbmc6CisgICogICAgICAgICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JF TkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqIAorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKi8KKy0gICAgX19weXhfdF8xID0g KChzdHJ1Y3QgX19weXhfdnRhYnN0cnVjdF85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBh cmFtcyAqKV9fcHl4X3ZfcGFyYW1zLT5fX3B5eF92dGFiKS0+YWRkX2ludChfX3B5eF92X3BhcmFt cywgTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDEwOTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90 XzEgPSAoKHN0cnVjdCBfX3B5eF92dGFic3RydWN0Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVu ZGVyUGFyYW1zICopX19weXhfdl9wYXJhbXMtPl9fcHl4X3Z0YWIpLT5hZGRfaW50KF9fcHl4X3Zf cGFyYW1zLCBNUFZfUkVOREVSX1BBUkFNX1NLSVBfUkVOREVSSU5HLCAxKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTA5NywgX19weXhfTDFfZXJyb3IpCisgICAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19w eXhfdF8xID0gMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEw OTQKKysgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTYKKyAgKiAgICAg ICAgIGlmIG5vdCBibG9ja19mb3JfdGFyZ2V0X3RpbWU6CisgICogICAgICAgICAgICAgcGFyYW1z LmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9CTE9DS19GT1JfVEFSR0VUX1RJTUUsIDApCisgICog ICAgICAgICBpZiBza2lwX3JlbmRlcmluZzogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTE4NjUyLDcgKzE4NjUyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzEycmVuZGVyKHN0cnVjdAorICAqLworICAg fQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwOTcKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDk5CisgICogICAgICAgICAgICAgcGFyYW1z LmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkKKyAgKiAKKyAgKiAg ICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODY2 Nyw3ICsxODY2Nyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGli c18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKKyAgICAgICAjZW5kaWYKKyAg ICAgICAvKnRyeToqLyB7CisgCistICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTA5OAorKyAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx MDAKKyAgKiAKKyAgKiAgICAgICAgIHdpdGggbm9naWw6CisgICogICAgICAgICAgICAgcmV0ID0g bXB2X3JlbmRlcl9jb250ZXh0X3JlbmRlcihzZWxmLl9jdHgsIHBhcmFtcy5wYXJhbXMpICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODY3Nyw3ICsxODY3Nyw3IEBAIHN0YXRpYyBQ eU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8x MnJlbmRlcihzdHJ1Y3QKKyAgICAgICAgIF9fcHl4X3ZfcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0 X3JlbmRlcihfX3B5eF92X3NlbGYtPl9jdHgsIF9fcHl4X3ZfcGFyYW1zLT5wYXJhbXMpOworICAg ICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5Nwor KyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDk5CisgICogICAgICAg ICAgICAgcGFyYW1zLmFkZF9pbnQoTVBWX1JFTkRFUl9QQVJBTV9TS0lQX1JFTkRFUklORywgMSkK KyAgKiAKKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xODY5Niw3ICsxODY5Niw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZp ZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKKyAgICAg ICB9CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA5OQor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDEKKyAgKiAgICAgICAgIHdp dGggbm9naWw6CisgICogICAgICAgICAgICAgcmV0ID0gbXB2X3JlbmRlcl9jb250ZXh0X3JlbmRl cihzZWxmLl9jdHgsIHBhcmFtcy5wYXJhbXMpCisgICogICAgICAgICByZXR1cm4gcmV0ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODcwNCwxMyArMTg3MDQsMTMgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 XzEycmVuZGVyKHN0cnVjdAorICAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6CisgICovCisg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3IpOworLSAgX19weXhfdF8xID0gX19QeXhfUHlJbnRfRnJv bV9pbnQoX19weXhfdl9yZXQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCAxMDk5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMSA9IF9fUHl4X1B5SW50X0Zyb21f aW50KF9fcHl4X3ZfcmV0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MTEwMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9f cHl4X3IgPSBfX3B5eF90XzE7CisgICBfX3B5eF90XzEgPSAwOworICAgZ290byBfX3B5eF9MMDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDY5CisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA3MQorICAqIAorICAqICAgICBAX2Vycm9ycwor ICAqICAgICBkZWYgcmVuZGVyKHNlbGYsICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xODczMSw3ICsxODczMSw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xMnJlbmRlcihzdHJ1Y3QKKyAgIHJldHVybiBf X3B5eF9yOworIH0KKyAKKy0vKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwMQor Ky8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTAzCisgICogICAgICAgICByZXR1 cm4gcmV0CisgICogCisgICogICAgIGRlZiByZXBvcnRfc3dhcChzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4NzU3LDcgKzE4NzU3LDcgQEAgc3RhdGljIFB5T2JqZWN0 ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE0cmVwb3J0 X3N3YXAoc3QKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBfX1B5eF9SZWZOYW5u eVNldHVwQ29udGV4dCgicmVwb3J0X3N3YXAiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTAyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTEwNAorICAqIAorICAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6CisgICogICAgICAg ICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTg3NzIsNyAr MTg3NzIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xM1JlbmRlckNvbnRleHRfMTRyZXBvcnRfc3dhcChzdAorICAgICAgICNlbmRpZgorICAgICAg IC8qdHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTAzCisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwNQor ICAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6CisgICogICAgICAgICB3aXRoIG5vZ2lsOgor ICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9yZXBvcnRfc3dhcChzZWxmLl9jdHgp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODc4Miw3ICsxODc4Miw3IEBAIHN0 YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29u dGV4dF8xNHJlcG9ydF9zd2FwKHN0CisgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfcmVwb3J0 X3N3YXAoX19weXhfdl9zZWxmLT5fY3R4KTsKKyAgICAgICB9CisgCistICAgICAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDIKKysgICAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTEwNAorICAqIAorICAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6 CisgICogICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMTg4MDEsNyArMTg4MDEsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTRyZXBvcnRfc3dhcChzdAorICAgICAgIH0K KyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTAxCisrICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwMworICAqICAgICAgICAgcmV0dXJu IHJldAorICAqIAorICAqICAgICBkZWYgcmVwb3J0X3N3YXAoc2VsZik6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xODgxNiw3ICsxODgxNiw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNHJlcG9ydF9z d2FwKHN0CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExMDUKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEw NworICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9yZXBvcnRfc3dhcChzZWxmLl9j dHgpCisgICogCisgICogICAgIGRlZiBmcmVlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTg4NDMsNyArMTg4NDMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTZmcmVlKHN0cnVjdCBfXwor ICAgaW50IF9fcHl4X3RfMTsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJmcmVlIiwg MCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEwNgorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDgKKyAgKiAKKyAgKiAgICAgZGVmIGZy ZWUoc2VsZik6CisgICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0xODg1Myw3ICsxODg1Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZyZWUoc3Ry dWN0IF9fCisgICBfX3B5eF90XzEgPSAoKCEoX19weXhfdl9zZWxmLT5pbml0ZWQgIT0gMCkpICE9 IDApOworICAgaWYgKF9fcHl4X3RfMSkgeworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTEwNworKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTEwOQorICAqICAgICBkZWYgZnJlZShzZWxmKToKKyAgKiAgICAgICAgIGlmIG5vdCBzZWxmLmlu aXRlZDoKKyAgKiAgICAgICAgICAgICByZXR1cm4gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorQEAgLTE4ODY0LDcgKzE4ODY0LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE2ZnJlZShzdHJ1Y3QgX18KKyAgICAg X19weXhfciA9IFB5X05vbmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgZ290byBfX3B5 eF9MMDsKKyAKKy0gICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDYKKysg ICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMDgKKyAgKiAKKyAgKiAgICAg ZGVmIGZyZWUoc2VsZik6CisgICogICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xODg3Myw3ICsxODg3Myw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZy ZWUoc3RydWN0IF9fCisgICovCisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTEwOAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTAK KyAgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKyAgKiAgICAgICAgICAgICByZXR1cm4K KyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BA IC0xODg4OCw3ICsxODg4OCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRl cl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZyZWUoc3RydWN0IF9fCisgICAgICAgI2Vu ZGlmCisgICAgICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExMDkKKysgICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTExCisgICogICAgICAgICAgICAgcmV0dXJuCisgICogICAgICAgICB3aXRoIG5vZ2ls OgorICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNlbGYuX2N0eCkgICAg ICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4ODk4LDcgKzE4ODk4LDcgQEAgc3RhdGlj IFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0 XzE2ZnJlZShzdHJ1Y3QgX18KKyAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKF9fcHl4 X3Zfc2VsZi0+X2N0eCk7CisgICAgICAgfQorIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTA4CisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMTAKKyAgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKyAgKiAgICAgICAgICAg ICByZXR1cm4KKyAgKiAgICAgICAgIHdpdGggbm9naWw6ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0xODkxNyw3ICsxODkxNyw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZf OXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xNmZyZWUoc3RydWN0IF9fCisg ICAgICAgfQorICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx MTAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTEyCisgICogICAgICAg ICB3aXRoIG5vZ2lsOgorICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9mcmVlKHNl bGYuX2N0eCkKKyAgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorQEAgLTE4OTI2LDcgKzE4OTI2LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE2ZnJlZShzdHJ1 Y3QgX18KKyAgKi8KKyAgIF9fcHl4X3Zfc2VsZi0+aW5pdGVkID0gMDsKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTA1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTEwNworICAqICAgICAgICAgICAgIG1wdl9yZW5kZXJfY29udGV4dF9yZXBv cnRfc3dhcChzZWxmLl9jdHgpCisgICogCisgICogICAgIGRlZiBmcmVlKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTg5NDIsNyArMTg5NDIsNyBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMTZm cmVlKHN0cnVjdCBfXworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTEyCisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMTQKKyAgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKKyAgKiAKKyAgKiAgICAg ZGVmIGNsb3NlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTg5Njks NyArMTg5NjksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xM1JlbmRlckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXworICAgaW50IF9fcHl4X3RfMTsK KyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjbG9zZSIsIDApOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTE1CisgICogCisgICogICAgIGRlZiBjbG9zZShzZWxmKToKKyAgKiAg ICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor QEAgLTE4OTc5LDcgKzE4OTc5LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfMTNSZW5kZXJDb250ZXh0XzE4Y2xvc2Uoc3RydWN0IF8KKyAgIF9fcHl4 X3RfMSA9ICgoIShfX3B5eF92X3NlbGYtPmluaXRlZCAhPSAwKSkgIT0gMCk7CisgICBpZiAoX19w eXhfdF8xKSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE0 CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE2CisgICogICAgIGRl ZiBjbG9zZShzZWxmKToKKyAgKiAgICAgICAgIGlmIG5vdCBzZWxmLmluaXRlZDoKKyAgKiAgICAg ICAgICAgICByZXR1cm4gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE4OTkwLDcg KzE4OTkwLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTNSZW5kZXJDb250ZXh0XzE4Y2xvc2Uoc3RydWN0IF8KKyAgICAgX19weXhfciA9IFB5X05v bmU7IF9fUHl4X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgZ290byBfX3B5eF9MMDsKKyAKKy0gICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTMKKysgICAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMTUKKyAgKiAKKyAgKiAgICAgZGVmIGNsb3NlKHNlbGYp OgorICAqICAgICAgICAgaWYgbm90IHNlbGYuaW5pdGVkOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMTg5OTksNyArMTg5OTksNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3Bm Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXwor ICAqLworICAgfQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMTUK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE3CisgICogICAgICAgICBp ZiBub3Qgc2VsZi5pbml0ZWQ6CisgICogICAgICAgICAgICAgcmV0dXJuCisgICogICAgICAgICB3 aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTkwMTQsNyArMTkw MTQsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXworICAgICAgICNlbmRpZgorICAgICAgIC8q dHJ5OiovIHsKKyAKKy0gICAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTE2CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExOAorICAq ICAgICAgICAgICAgIHJldHVybgorICAqICAgICAgICAgd2l0aCBub2dpbDoKKyAgKiAgICAgICAg ICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKK0BAIC0xOTAyNCw3ICsxOTAyNCw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xOGNsb3NlKHN0cnVj dCBfCisgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShfX3B5eF92X3NlbGYtPl9jdHgp OworICAgICAgIH0KKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTExNQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE3CisgICog ICAgICAgICBpZiBub3Qgc2VsZi5pbml0ZWQ6CisgICogICAgICAgICAgICAgcmV0dXJuCisgICog ICAgICAgICB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTkw NDMsNyArMTkwNDMsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM1JlbmRlckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXworICAgICAgIH0KKyAgIH0K KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE3CisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExOQorICAqICAgICAgICAgd2l0aCBub2dpbDoK KyAgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX2NvbnRleHRfZnJlZShzZWxmLl9jdHgpCisgICog ICAgICAgICBzZWxmLmluaXRlZCA9IEZhbHNlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK K0BAIC0xOTA1Miw3ICsxOTA1Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1 dHRlcl80bGlic18zbXB2XzEzUmVuZGVyQ29udGV4dF8xOGNsb3NlKHN0cnVjdCBfCisgICovCisg ICBfX3B5eF92X3NlbGYtPmluaXRlZCA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTExMgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx MTQKKyAgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKKyAgKiAKKyAgKiAgICAgZGVmIGNs b3NlKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTkwNjgsNyArMTkw NjgsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x M1JlbmRlckNvbnRleHRfMThjbG9zZShzdHJ1Y3QgXworICAgcmV0dXJuIF9fcHl4X3I7CisgfQor IAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTE5CisrLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExMjEKKyAgKiAgICAgICAgIHNlbGYuaW5pdGVkID0gRmFs c2UKKyAgKiAKKyAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CitAQCAtMTkwOTcsMTQgKzE5MDk3LDE0IEBAIHN0YXRpYyB2b2lkIF9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjBfX2RlYWxsb2NfXyhz dHJ1Y3QKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBD b250ZXh0KCJfX2RlYWxsb2NfXyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMjAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIy CisgICogCisgICogICAgIGRlZiBfX2RlYWxsb2NfXyhzZWxmKToKKyAgKiAgICAgICAgIHNlbGYu Y2xvc2UoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogY2RlZiBjbGFz cyBPcGVuR0xSZW5kZXJDb250ZXh0KFJlbmRlckNvbnRleHQpOgorICAqLworLSAgX19weXhfdF8y ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfdl9zZWxmKSwg X19weXhfbl9zX2Nsb3NlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg MTEyMCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF92X3NlbGYpLCBfX3B5eF9uX3NfY2xvc2UpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTIyLCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworICAgX19weXhfdF8zID0gTlVMTDsKKyAgIGlm IChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgbGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3Rf MikpKSB7CitAQCAtMTkxMTgsMTIgKzE5MTE4LDEyIEBAIHN0YXRpYyB2b2lkIF9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRlckNvbnRleHRfMjBfX2RlYWxsb2NfXyhzdHJ1Y3QK KyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbE9u ZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMykgOiBfX1B5eF9QeU9iamVjdF9DYWxsTm9BcmcoX19w eXhfdF8yKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0g IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMjAsIF9fcHl4X0wxX2Vy cm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEyMiwgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7 IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTExOQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMjEKKyAgKiAgICAg ICAgIHNlbGYuaW5pdGVkID0gRmFsc2UKKyAgKiAKKyAgKiAgICAgZGVmIF9fZGVhbGxvY19fKHNl bGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTkyNTUsNyArMTkyNTUsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xM1JlbmRl ckNvbnRleHRfMjRfX3NldHN0YXRlX2N5dAorICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTIzCisrLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExMjUKKyAgKiAKKyAgKiBjZGVmIGNsYXNzIE9wZW5HTFJlbmRlckNv bnRleHQoUmVuZGVyQ29udGV4dCk6CisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtcHYsICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xOTMxMiwxMiArMTkzMTIsMTIgQEAgc3Rh dGljIGludCBfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250 ZXh0XzFfX2luaXRfXyhQeU9iamUKKyAgICAgICAgIGNhc2UgIDE6CisgICAgICAgICBpZiAobGlr ZWx5KCh2YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5 eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcykpICE9IDApKSBrd19hcmdzLS07CisgICAgICAgICBlbHNl IHsKKy0gICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwg MiwgMiwgMSk7IF9fUFlYX0VSUigwLCAxMTIzLCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgICAg X19QeXhfUmFpc2VBcmd0dXBsZUludmFsaWQoIl9faW5pdF9fIiwgMCwgMiwgMiwgMSk7IF9fUFlY X0VSUigwLCAxMTI1LCBfX3B5eF9MM19lcnJvcikKKyAgICAgICAgIH0KKyAgICAgICB9CisgICAg ICAgaWYgKHVubGlrZWx5KGt3X2FyZ3MgPiAwKSkgeworICAgICAgICAgY29uc3QgUHlfc3NpemVf dCB1c2VkX3Bvc19hcmdzID0gKHBvc19hcmdzIDwgMikgPyBwb3NfYXJncyA6IDI7CistICAgICAg ICBpZiAodW5saWtlbHkoX19QeXhfUGFyc2VPcHRpb25hbEtleXdvcmRzKF9fcHl4X2t3ZHMsIF9f cHl4X3B5YXJnbmFtZXMsIF9fcHl4X3Zfa3dhcmdzLCB2YWx1ZXMsIHVzZWRfcG9zX2FyZ3MsICJf X2luaXRfXyIpIDwgMCkpIF9fUFlYX0VSUigwLCAxMTIzLCBfX3B5eF9MM19lcnJvcikKKysgICAg ICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhfa3dkcywg X19weXhfcHlhcmduYW1lcywgX19weXhfdl9rd2FyZ3MsIHZhbHVlcywgdXNlZF9wb3NfYXJncywg Il9faW5pdF9fIikgPCAwKSkgX19QWVhfRVJSKDAsIDExMjUsIF9fcHl4X0wzX2Vycm9yKQorICAg ICAgIH0KKyAgICAgfSBlbHNlIGlmIChQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpIDwgMikg eworICAgICAgIGdvdG8gX19weXhfTDVfYXJndHVwbGVfZXJyb3I7CitAQCAtMTkzMzAsNyArMTkz MzAsNyBAQCBzdGF0aWMgaW50IF9fcHl4X3B3Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xOU9wZW5H TFJlbmRlckNvbnRleHRfMV9faW5pdF9fKFB5T2JqZQorICAgfQorICAgZ290byBfX3B5eF9MNF9h cmd1bWVudF91bnBhY2tpbmdfZG9uZTsKKyAgIF9fcHl4X0w1X2FyZ3R1cGxlX2Vycm9yOjsKKy0g IF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJfX2luaXRfXyIsIDAsIDIsIDIsIFB5VHVwbGVf R0VUX1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMTEyMywgX19weXhfTDNfZXJyb3Ip CisrICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgiX19pbml0X18iLCAwLCAyLCAyLCBQeVR1 cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAsIDExMjUsIF9fcHl4X0wzX2Vy cm9yKQorICAgX19weXhfTDNfZXJyb3I6OworICAgX19QeXhfREVDUkVGKF9fcHl4X3ZfYXJncyk7 IF9fcHl4X3ZfYXJncyA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdl9rd2FyZ3MpOyBfX3B5 eF92X2t3YXJncyA9IDA7CitAQCAtMTkzNjAsMzkgKzE5MzYwLDM5IEBAIHN0YXRpYyBpbnQgX19w eXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4dF9fX2luaXRf XyhzdHJ1Y3QKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0 dXBDb250ZXh0KCJfX2luaXRfXyIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMjcKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTI5 CisgICogICAgICAgICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpOgorICAqICAgICAgICAgaW5p dF9wYXJhbXMgPSB7CisgICogICAgICAgICAgICAgImdldF9wcm9jX2FkZHJlc3MiOiBnZXRfcHJv Y19hZGRyZXNzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIH0KKyAg KiAgICAgICAgIFJlbmRlckNvbnRleHQuX19pbml0X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0 LkFQSV9PUEVOR0wsCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9QeURpY3RfTmV3UHJlc2l6 ZWQoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMjcsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlEaWN0X05ld1ByZXNpemVkKDEpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9f cHl4X3RfMSwgX19weXhfbl9zX2dldF9wcm9jX2FkZHJlc3MsIF9fcHl4X3ZfZ2V0X3Byb2NfYWRk cmVzcykgPCAwKSBfX1BZWF9FUlIoMCwgMTEyNywgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlE aWN0X1NldEl0ZW0oX19weXhfdF8xLCBfX3B5eF9uX3NfZ2V0X3Byb2NfYWRkcmVzcywgX19weXhf dl9nZXRfcHJvY19hZGRyZXNzKSA8IDApIF9fUFlYX0VSUigwLCAxMTI5LCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fcHl4X3ZfaW5pdF9wYXJhbXMgPSAoKFB5T2JqZWN0KilfX3B5eF90XzEpOworICAg X19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTI5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMQorICAqICAgICAg ICAgICAgICJnZXRfcHJvY19hZGRyZXNzIjogZ2V0X3Byb2NfYWRkcmVzcworICAqICAgICAgICAg fQorICAqICAgICAgICAgUmVuZGVyQ29udGV4dC5fX2luaXRfXyhzZWxmLCBtcHYsIFJlbmRlckNv bnRleHQuQVBJX09QRU5HTCwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BhcmFtcywgKmFyZ3MsICoqa3dhcmdzKQor ICAqIAorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cigoKFB5 T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQp LCBfX3B5eF9uX3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAs IDExMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cigoKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Jl bmRlckNvbnRleHQpLCBfX3B5eF9uX3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDExMzEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfMSk7CistICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKCgoUHlPYmpl Y3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCksIF9f cHl4X25fc19BUElfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgMTEyOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9H ZXRBdHRyU3RyKCgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyQ29udGV4dCksIF9fcHl4X25fc19BUElfT1BFTkdMKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzIpKSBfX1BZWF9FUlIoMCwgMTEzMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RS RUYoX19weXhfdF8yKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTMwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMgorICAqICAgICAg ICAgfQorICAqICAgICAgICAgUmVuZGVyQ29udGV4dC5fX2luaXRfXyhzZWxmLCBtcHYsIFJlbmRl ckNvbnRleHQuQVBJX09QRU5HTCwKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5pdF9wYXJhbXMsICphcmdzLCAqKmt3YXJncykgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqIAorICAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6CisgICovCistICBfX3B5 eF90XzMgPSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgMTEyOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzMgPSBQeVR1cGxlX05ldyg0 KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTEzMSwgX19weXhfTDFf ZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAgIF9fUHl4X0lOQ1JFRigoKFB5 T2JqZWN0ICopX19weXhfdl9zZWxmKSk7CisgICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKilf X3B5eF92X3NlbGYpKTsKK0BAIC0xOTQwNyw0MiArMTk0MDcsNDIgQEAgc3RhdGljIGludCBfX3B5 eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTlPcGVuR0xSZW5kZXJDb250ZXh0X19faW5pdF9f KHN0cnVjdAorICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5eF90XzMsIDMsIF9fcHl4X3ZfaW5pdF9w YXJhbXMpOworICAgX19weXhfdF8yID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTI5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEz MQorICAqICAgICAgICAgICAgICJnZXRfcHJvY19hZGRyZXNzIjogZ2V0X3Byb2NfYWRkcmVzcwor ICAqICAgICAgICAgfQorICAqICAgICAgICAgUmVuZGVyQ29udGV4dC5fX2luaXRfXyhzZWxmLCBt cHYsIFJlbmRlckNvbnRleHQuQVBJX09QRU5HTCwgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BhcmFtcywgKmFyZ3Ms ICoqa3dhcmdzKQorICAqIAorICAqLworLSAgX19weXhfdF8yID0gUHlOdW1iZXJfQWRkKF9fcHl4 X3RfMywgX19weXhfdl9hcmdzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgMTEyOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBQeU51bWJlcl9BZGQoX19w eXhfdF8zLCBfX3B5eF92X2FyZ3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VS UigwLCAxMTMxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOwor ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CisgCistICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExMzIKKyAgKiAgICAgICAgIH0KKyAgKiAgICAgICAgIFJlbmRlckNvbnRl eHQuX19pbml0X18oc2VsZiwgbXB2LCBSZW5kZXJDb250ZXh0LkFQSV9PUEVOR0wsCisgICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfcGFyYW1zLCAqYXJncywgKiprd2FyZ3Mp ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKyAgKiBjbGFzcyBDYWxsYmFja1Ro cmVhZChUaHJlYWQpOgorICAqLworLSAgX19weXhfdF8zID0gUHlEaWN0X0NvcHkoX19weXhfdl9r d2FyZ3MpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTMwLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9IFB5RGljdF9Db3B5KF9fcHl4X3Zfa3dhcmdzKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTI5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTEzMQorICAqICAgICAgICAgICAgICJnZXRfcHJvY19hZGRyZXNzIjogZ2V0X3Byb2NfYWRk cmVzcworICAqICAgICAgICAgfQorICAqICAgICAgICAgUmVuZGVyQ29udGV4dC5fX2luaXRfXyhz ZWxmLCBtcHYsIFJlbmRlckNvbnRleHQuQVBJX09QRU5HTCwgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3BhcmFtcywg KmFyZ3MsICoqa3dhcmdzKQorICAqIAorICAqLworLSAgX19weXhfdF80ID0gX19QeXhfUHlPYmpl Y3RfQ2FsbChfX3B5eF90XzEsIF9fcHl4X3RfMiwgX19weXhfdF8zKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTEyOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90 XzQgPSBfX1B5eF9QeU9iamVjdF9DYWxsKF9fcHl4X3RfMSwgX19weXhfdF8yLCBfX3B5eF90XzMp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMTMxLCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhf dF8yID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEyMworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjExMjUKKyAgKiAKKyAgKiBjZGVmIGNsYXNzIE9wZW5HTFJlbmRlckNvbnRleHQo UmVuZGVyQ29udGV4dCk6CisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtcHYsICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xOTU3OSw3ICsxOTU3OSw3IEBAIHN0YXRpYyBQeU9i amVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE5T3BlbkdMUmVuZGVyQ29udGV4 dF80X19zZXRzdGF0CisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExMzMKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTEzNQorICAqIAorICAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6CisgICogICAg IGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE5 NjEyLDE2ICsxOTYxMiwxNiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkX19faW5pdF9fKENZVEhPTgorICAgaW50IF9fcHl4 X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRleHQoIl9faW5pdF9fIiwg MCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNAorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzYKKyAgKiBjbGFzcyBDYWxsYmFja1Ro cmVhZChUaHJlYWQpOgorICAqICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICogICAgICAgICBU aHJlYWQuX19pbml0X18oc2VsZikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAg ICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCisgICogICAgICAgICBzZWxmLmxvY2sgPSBTZW1hcGhv cmUoKQorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4 X25fc19UaHJlYWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTM0 LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8y LCBfX3B5eF9uX3NfVGhyZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIo MCwgMTEzNiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0g IF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdF8yLCBfX3B5eF9u X3NfaW5pdCk7IGlmICh1bmxpa2VseSghX19weXhfdF8zKSkgX19QWVhfRVJSKDAsIDExMzQsIF9f cHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF90XzIsIF9fcHl4X25fc19pbml0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZ WF9FUlIoMCwgMTEzNiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8z KTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19weXhf dF8yID0gTlVMTDsKK0BAIC0xOTYzNiwyOCArMTk2MzYsMjggQEAgc3RhdGljIFB5T2JqZWN0ICpf X3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF9fX2luaXRfXyhD WVRIT04KKyAgIH0KKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzIpID8gX19QeXhfUHlPYmplY3Rf Q2FsbDJBcmdzKF9fcHl4X3RfMywgX19weXhfdF8yLCBfX3B5eF92X3NlbGYpIDogX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzMsIF9fcHl4X3Zfc2VsZik7CisgICBfX1B5eF9YREVD UkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf MSkpIF9fUFlYX0VSUigwLCAxMTM0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMzYsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8z ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzUKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTM3CisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAg KiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQorICAqICAgICAgICAgc2VsZi5kYWVtb24g PSBUcnVlICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNlbGYubG9j ayA9IFNlbWFwaG9yZSgpCisgICogICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQorICAq LworLSAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9u X3NfZGFlbW9uLCBQeV9UcnVlKSA8IDApIF9fUFlYX0VSUigwLCAxMTM1LCBfX3B5eF9MMV9lcnJv cikKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhf bl9zX2RhZW1vbiwgUHlfVHJ1ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTEzNywgX19weXhfTDFfZXJy b3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNgorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzgKKyAgKiAgICAgICAgIFRocmVhZC5f X2luaXRfXyhzZWxmKQorICAqICAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCisgICogICAgICAg ICBzZWxmLmxvY2sgPSBTZW1hcGhvcmUoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisg ICogICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQorICAqICAgICAgICAgc2VsZi5jYWxs YmFjayA9IE5vbmUKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8z LCBfX3B5eF9uX3NfU2VtYXBob3JlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9F UlIoMCwgMTEzNiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1l KF9fcHl4X3RfMywgX19weXhfbl9zX1NlbWFwaG9yZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8z KSkgX19QWVhfRVJSKDAsIDExMzgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9f cHl4X3RfMyk7CisgICBfX3B5eF90XzIgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzMpKSkgeworQEAgLTE5Njcx LDIyICsxOTY3MSwyMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNENhbGxiYWNrVGhyZWFkX19faW5pdF9fKENZVEhPTgorICAgfQorICAgX19weXhf dF8xID0gKF9fcHl4X3RfMikgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywg X19weXhfdF8yKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzMpOworICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEzNiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTM4LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7CistICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0clN0cihfX3B5eF92X3Nl bGYsIF9fcHl4X25fc19sb2NrLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDExMzYsIF9f cHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9z ZWxmLCBfX3B5eF9uX3NfbG9jaywgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTM4LCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzcKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM5CisgICogICAgICAgICBzZWxmLmRhZW1v biA9IFRydWUKKyAgKiAgICAgICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgpCisgICogICAgICAg ICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8Cisg ICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorICAqICAgICAgICAgc2VsZi5pc3NodXRk b3duID0gRmFsc2UKKyAgKi8KKy0gIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9jayk7IGlmICh1bmxpa2VseSghX19weXhfdF8z KSkgX19QWVhfRVJSKDAsIDExMzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8zID0gX19Q eXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTEzOSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8zKTsKKy0gIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2Jq ZWN0X0dldEF0dHJTdHIoX19weXhfdF8zLCBfX3B5eF9uX3NfYWNxdWlyZSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExMzcsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzMsIF9fcHl4X25fc19h Y3F1aXJlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTEzOSwgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzMpOyBfX3B5eF90XzMgPSAwOworICAgX19weXhfdF8zID0gTlVMTDsKK0BAIC0x OTcwMSwzMCArMTk3MDEsMzAgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF9fX2luaXRfXyhDWVRIT04KKyAgIH0KKyAgIF9f cHl4X3RfMSA9IChfX3B5eF90XzMpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3Rf MiwgX19weXhfdF8zLCBQeV9UcnVlKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhf dF8yLCBQeV9UcnVlKTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0g MDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMzcsIF9fcHl4 X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEz OSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTEzOAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDAKKyAg KiAgICAgICAgIHNlbGYubG9jayA9IFNlbWFwaG9yZSgpCisgICogICAgICAgICBzZWxmLmxvY2su YWNxdWlyZShUcnVlKQorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IE5vbmUgICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gRmFsc2UK KyAgKiAKKyAgKi8KKy0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2Vs ZiwgX19weXhfbl9zX2NhbGxiYWNrLCBQeV9Ob25lKSA8IDApIF9fUFlYX0VSUigwLCAxMTM4LCBf X3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zf c2VsZiwgX19weXhfbl9zX2NhbGxiYWNrLCBQeV9Ob25lKSA8IDApIF9fUFlYX0VSUigwLCAxMTQw LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMTM5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQorICAqICAg ICAgICAgc2VsZi5sb2NrLmFjcXVpcmUoVHJ1ZSkKKyAgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sg PSBOb25lCisgICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisgICogCisgICogICAgIGRlZiBzaHV0ZG93bihzZWxmKToKKyAgKi8K Ky0gIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9z X2lzc2h1dGRvd24sIFB5X0ZhbHNlKSA8IDApIF9fUFlYX0VSUigwLCAxMTM5LCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19w eXhfbl9zX2lzc2h1dGRvd24sIFB5X0ZhbHNlKSA8IDApIF9fUFlYX0VSUigwLCAxMTQxLCBfX3B5 eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTMz CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzNQorICAqIAorICAqIGNs YXNzIENhbGxiYWNrVGhyZWFkKFRocmVhZCk6CisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTE5NzQ3LDcgKzE5NzQ3LDcgQEAgc3Rh dGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1Ro cmVhZF9fX2luaXRfXyhDWVRIT04KKyAgIHJldHVybiBfX3B5eF9yOworIH0KKyAKKy0vKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQorKy8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTQzCisgICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZQorICAq IAorICAqICAgICBkZWYgc2h1dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKK0BAIC0xOTc4MCwzNCArMTk3ODAsMzQgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8yc2h1dGRvd24oQ1lUSE8KKyAg IGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJz aHV0ZG93biIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEx NDIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ0CisgICogCisgICog ICAgIGRlZiBzaHV0ZG93bihzZWxmKToKKyAgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IFRy dWUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jYWxsYmFj ayA9IE5vbmUKKyAgKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKKyAgKi8KKy0gIGlmIChf X1B5eF9QeU9iamVjdF9TZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2lzc2h1dGRv d24sIFB5X1RydWUpIDwgMCkgX19QWVhfRVJSKDAsIDExNDIsIF9fcHl4X0wxX2Vycm9yKQorKyAg aWYgKF9fUHl4X1B5T2JqZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfaXNz aHV0ZG93biwgUHlfVHJ1ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3Ip CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MworKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDUKKyAgKiAgICAgZGVmIHNodXRkb3duKHNl bGYpOgorICAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gVHJ1ZQorICAqICAgICAgICAgc2Vs Zi5jYWxsYmFjayA9IE5vbmUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAg ICAgc2VsZi5sb2NrLnJlbGVhc2UoKQorICAqIAorICAqLworLSAgaWYgKF9fUHl4X1B5T2JqZWN0 X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2ssIFB5X05vbmUpIDwg MCkgX19QWVhfRVJSKDAsIDExNDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1B5T2Jq ZWN0X1NldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2ssIFB5X05vbmUp IDwgMCkgX19QWVhfRVJSKDAsIDExNDUsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTQ2CisgICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBUcnVlCisgICog ICAgICAgICBzZWxmLmNhbGxiYWNrID0gTm9uZQorICAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVh c2UoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogICAgIGRlZiBjYWxs KHNlbGYpOgorICAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBf X1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9Q eU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2xvY2spOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTQ2LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gX19QeXhfUHlPYmplY3Rf R2V0QXR0clN0cihfX3B5eF90XzIsIF9fcHl4X25fc19yZWxlYXNlKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzMpKSBfX1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90 XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfMiwgX19weXhfbl9zX3JlbGVh c2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigwLCAxMTQ2LCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzMpOworICAgX19QeXhfREVDUkVGKF9f cHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7CisgICBfX3B5eF90XzIgPSBOVUxMOworQEAgLTE5ODIy LDEyICsxOTgyMiwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzJzaHV0ZG93bihDWVRITworICAgfQorICAgX19weXhf dF8xID0gKF9fcHl4X3RfMikgPyBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfMywg X19weXhfdF8yKSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxOb0FyZyhfX3B5eF90XzMpOworICAgX19Q eXhfWERFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworLSAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0NCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTQ2LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMyk7IF9f cHl4X3RfMyA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQxCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MworICAqICAgICAgICAgc2VsZi5pc3NodXRk b3duID0gRmFsc2UKKyAgKiAKKyAgKiAgICAgZGVmIHNodXRkb3duKHNlbGYpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTk4NTAsNyArMTk4NTAsNyBAQCBzdGF0aWMgUHlPYmpl Y3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzJzaHV0 ZG93bihDWVRITworICAgcmV0dXJuIF9fcHl4X3I7CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTQ2CisrLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjExNDgKKyAgKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNlKCkKKyAgKiAKKyAgKiAgICAgZGVm IGNhbGwoc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xOTg4MywxNiAr MTk4ODMsMTYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTRDYWxsYmFja1RocmVhZF80Y2FsbChDWVRIT05fVU4KKyAgIGludCBfX3B5eF9jbGluZW5v ID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55U2V0dXBDb250ZXh0KCJjYWxsIiwgMCk7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0NworKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExNDkKKyAgKiAKKyAgKiAgICAgZGVmIGNhbGwoc2VsZik6Cisg ICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAKKyAgKiAgICAgZGVmIHNldChzZWxmLCBjYWxsYmFjayk6CisgICovCistICBfX3B5 eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9z X2xvY2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTQ3LCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19w eXhfdl9zZWxmLCBfX3B5eF9uX3NfbG9jayk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19Q WVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Mik7CistICBfX3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfMiwg X19weXhfbl9zX3JlbGVhc2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VSUigw LCAxMTQ3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoX19weXhfdF8yLCBfX3B5eF9uX3NfcmVsZWFzZSk7IGlmICh1bmxpa2VseSghX19w eXhfdF8zKSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfMyk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8yID0g MDsKKyAgIF9fcHl4X3RfMiA9IE5VTEw7CitAQCAtMTk5MDcsMTIgKzE5OTA3LDEyIEBAIHN0YXRp YyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJl YWRfNGNhbGwoQ1lUSE9OX1VOCisgICB9CisgICBfX3B5eF90XzEgPSAoX19weXhfdF8yKSA/IF9f UHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8zLCBfX3B5eF90XzIpIDogX19QeXhfUHlP YmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMyk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMik7 IF9fcHl4X3RfMiA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigw LCAxMTQ3LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf MSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8zKTsgX19weXhfdF8zID0gMDsKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExNDYKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTQ4CisgICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisgICogCisgICogICAg IGRlZiBjYWxsKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMTk5MzUs NyArMTk5MzUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNENhbGxiYWNrVGhyZWFkXzRjYWxsKENZVEhPTl9VTgorICAgcmV0dXJuIF9fcHl4X3I7 CisgfQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ5CisrLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTEKKyAgKiAgICAgICAgIHNlbGYubG9jay5y ZWxlYXNlKCkKKyAgKiAKKyAgKiAgICAgZGVmIHNldChzZWxmLCBjYWxsYmFjayk6ICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0xOTk3OCwxMSArMTk5NzgsMTEgQEAgc3RhdGljIFB5 T2JqZWN0ICpfX3B5eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF83 c2V0KFB5T2JqZWN0ICoKKyAgICAgICAgIGNhc2UgIDE6CisgICAgICAgICBpZiAobGlrZWx5KCh2 YWx1ZXNbMV0gPSBfX1B5eF9QeURpY3RfR2V0SXRlbVN0cihfX3B5eF9rd2RzLCBfX3B5eF9uX3Nf Y2FsbGJhY2spKSAhPSAwKSkga3dfYXJncy0tOworICAgICAgICAgZWxzZSB7CistICAgICAgICAg IF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJzZXQiLCAxLCAyLCAyLCAxKTsgX19QWVhfRVJS KDAsIDExNDksIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgICBfX1B5eF9SYWlzZUFyZ3R1cGxl SW52YWxpZCgic2V0IiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAxMTUxLCBfX3B5eF9MM19l cnJvcikKKyAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgaWYgKHVubGlrZWx5KGt3X2FyZ3Mg PiAwKSkgeworLSAgICAgICAgaWYgKHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3Jk cyhfX3B5eF9rd2RzLCBfX3B5eF9weWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0 IikgPCAwKSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgICAgaWYg KHVubGlrZWx5KF9fUHl4X1BhcnNlT3B0aW9uYWxLZXl3b3JkcyhfX3B5eF9rd2RzLCBfX3B5eF9w eWFyZ25hbWVzLCAwLCB2YWx1ZXMsIHBvc19hcmdzLCAic2V0IikgPCAwKSkgX19QWVhfRVJSKDAs IDExNTEsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIH0KKyAgICAgfSBlbHNlIGlmIChQeVR1cGxl X0dFVF9TSVpFKF9fcHl4X2FyZ3MpICE9IDIpIHsKKyAgICAgICBnb3RvIF9fcHl4X0w1X2FyZ3R1 cGxlX2Vycm9yOworQEAgLTE5OTk1LDcgKzE5OTk1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5 eF9wd185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF83c2V0KFB5T2JqZWN0 ICoKKyAgIH0KKyAgIGdvdG8gX19weXhfTDRfYXJndW1lbnRfdW5wYWNraW5nX2RvbmU7CisgICBf X3B5eF9MNV9hcmd0dXBsZV9lcnJvcjo7CistICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgi c2V0IiwgMSwgMiwgMiwgUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigw LCAxMTQ5LCBfX3B5eF9MM19lcnJvcikKKysgIF9fUHl4X1JhaXNlQXJndHVwbGVJbnZhbGlkKCJz ZXQiLCAxLCAyLCAyLCBQeVR1cGxlX0dFVF9TSVpFKF9fcHl4X2FyZ3MpKTsgX19QWVhfRVJSKDAs IDExNTEsIF9fcHl4X0wzX2Vycm9yKQorICAgX19weXhfTDNfZXJyb3I6OworICAgX19QeXhfQWRk VHJhY2ViYWNrKCJ2aWRjdXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQuc2V0IiwgX19weXhf Y2xpbmVubywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CisgICBfX1B5eF9SZWZOYW5u eUZpbmlzaENvbnRleHQoKTsKK0BAIC0yMDAxNiwxNiArMjAwMTYsMTYgQEAgc3RhdGljIFB5T2Jq ZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF82c2V0 KENZVEhPTl9VTlUKKyAgIGludCBfX3B5eF9jbGluZW5vID0gMDsKKyAgIF9fUHl4X1JlZk5hbm55 U2V0dXBDb250ZXh0KCJzZXQiLCAwKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTUwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1Mgor ICAqIAorICAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxiYWNrKToKKyAgKiAgICAgICAgIHNlbGYu Y2FsbGJhY2sgPSBjYWxsYmFjayAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisg ICogICAgIGRlZiBydW4oc2VsZik6CisgICovCistICBpZiAoX19QeXhfUHlPYmplY3RfU2V0QXR0 clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jYWxsYmFjaywgX19weXhfdl9jYWxsYmFjaykg PCAwKSBfX1BZWF9FUlIoMCwgMTE1MCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfUHlP YmplY3RfU2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19jYWxsYmFjaywgX19weXhf dl9jYWxsYmFjaykgPCAwKSBfX1BZWF9FUlIoMCwgMTE1MiwgX19weXhfTDFfZXJyb3IpCisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0OQorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNTEKKyAgKiAgICAgICAgIHNlbGYubG9jay5yZWxlYXNl KCkKKyAgKiAKKyAgKiAgICAgZGVmIHNldChzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0yMDA0NSw3ICsyMDA0NSw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNnNldChDWVRI T05fVU5VCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCistLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjExNTIKKysvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1 NAorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisgICogCisgICogICAgIGRl ZiBydW4oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0yMDA4Miw3ICsy MDA4Miw3IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2 XzE0Q2FsbGJhY2tUaHJlYWRfOHJ1bihDWVRIT05fVU5VCisgICBpbnQgX19weXhfY2xpbmVubyA9 IDA7CisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgicnVuIiwgMCk7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1MworKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjExNTUKKyAgKiAKKyAgKiAgICAgZGVmIHJ1bihzZWxmKToKKyAgKiAg ICAgICAgIHdoaWxlIG5vdCBzZWxmLmlzc2h1dGRvd246ICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKK0BAIC0yMDA5MCwyMyArMjAwOTAsMjMgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF84cnVuKENZVEhPTl9VTlUK KyAgKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxmLmNhbGxiYWNrKSBpZiBzZWxm LmNhbGxiYWNrIGVsc2UgTm9uZQorICAqLworICAgd2hpbGUgKDEpIHsKKy0gICAgX19weXhfdF8x ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19pc3No dXRkb3duKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE1MywgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fcHl4X3RfMSA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIo X19weXhfdl9zZWxmLCBfX3B5eF9uX3NfaXNzaHV0ZG93bik7IGlmICh1bmxpa2VseSghX19weXhf dF8xKSkgX19QWVhfRVJSKDAsIDExNTUsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RS RUYoX19weXhfdF8xKTsKKy0gICAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9f cHl4X3RfMSk7IGlmICh1bmxpa2VseShfX3B5eF90XzIgPCAwKSkgX19QWVhfRVJSKDAsIDExNTMs IF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUo X19weXhfdF8xKTsgaWYgKHVubGlrZWx5KF9fcHl4X3RfMiA8IDApKSBfX1BZWF9FUlIoMCwgMTE1 NSwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90 XzEgPSAwOworICAgICBfX3B5eF90XzMgPSAoKCFfX3B5eF90XzIpICE9IDApOworICAgICBpZiAo IV9fcHl4X3RfMykgYnJlYWs7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTU0CisrICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU2Cisg ICogICAgIGRlZiBydW4oc2VsZik6CisgICogICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc3NodXRk b3duOgorICAqICAgICAgICAgICAgIHNlbGYubG9jay5hY3F1aXJlKFRydWUpICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBzZWxmLm1wdl9jYWxsYmFjayhzZWxm LmNhbGxiYWNrKSBpZiBzZWxmLmNhbGxiYWNrIGVsc2UgTm9uZQorICAqIAorICAqLworLSAgICBf X3B5eF90XzQgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhf bl9zX2xvY2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAxMTU0LCBf X3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0 cihfX3B5eF92X3NlbGYsIF9fcHl4X25fc19sb2NrKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgMTE1NiwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOworLSAgICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9f cHl4X3RfNCwgX19weXhfbl9zX2FjcXVpcmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9f UFlYX0VSUigwLCAxMTU0LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19weXhfdF81ID0gX19QeXhf UHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzQsIF9fcHl4X25fc19hY3F1aXJlKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzUpKSBfX1BZWF9FUlIoMCwgMTE1NiwgX19weXhfTDFfZXJyb3IpCisg ICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzUpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80 KTsgX19weXhfdF80ID0gMDsKKyAgICAgX19weXhfdF80ID0gTlVMTDsKK0BAIC0yMDEyMSwyNiAr MjAxMjEsMjYgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTRDYWxsYmFja1RocmVhZF84cnVuKENZVEhPTl9VTlUKKyAgICAgfQorICAgICBfX3B5eF90 XzEgPSAoX19weXhfdF80KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzUsIF9f cHl4X3RfNCwgUHlfVHJ1ZSkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNSwg UHlfVHJ1ZSk7CisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsK Ky0gICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE1NCwgX19weXhf TDFfZXJyb3IpCisrICAgIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDEx NTYsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKyAgICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNSk7IF9fcHl4X3RfNSA9IDA7CisgICAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MTE1NQorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTE1NworICAqICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNzaHV0ZG93bjoKKyAgKiAgICAg ICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQorICAqICAgICAgICAgICAgIHNlbGYubXB2 X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2FsbGJhY2sgZWxzZSBOb25lICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAKKyAgKiAgICAgZGVmIG1wdl9jYWxsYmFjayhz ZWxmLCBjYWxsYmFjayk6CisgICovCistICAgIF9fcHl4X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0dl dEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9uX3NfY2FsbGJhY2spOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNSkpIF9fUFlYX0VSUigwLCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19w eXhfdF81ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X3NlbGYsIF9fcHl4X25f c19jYWxsYmFjayk7IGlmICh1bmxpa2VseSghX19weXhfdF81KSkgX19QWVhfRVJSKDAsIDExNTcs IF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF81KTsKKy0gICAgX19w eXhfdF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNSk7IGlmICh1bmxpa2VseShf X3B5eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDExNTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X3B5eF90XzMgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF81KTsgaWYgKHVubGlrZWx5 KF9fcHl4X3RfMyA8IDApKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDFfZXJyb3IpCisgICAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAwOworICAgICBpZiAoX19weXhf dF8zKSB7CistICAgICAgX19weXhfdF80ID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5 eF92X3NlbGYsIF9fcHl4X25fc19tcHZfY2FsbGJhY2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX3B5eF90XzQg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX21wdl9j YWxsYmFjayk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDExNTcsIF9f cHl4X0wxX2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgICAgIF9f cHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhfdl9zZWxmLCBfX3B5eF9u X3NfY2FsbGJhY2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTU1 LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBfX3B5eF90XzYgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3Zfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNrKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDFfZXJyb3IpCisgICAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CisgICAgICAgX19weXhfdF83ID0gTlVMTDsKKyAgICAgICBp ZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90 XzQpKSkgeworQEAgLTIwMTU1LDcgKzIwMTU1LDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9w Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF84cnVuKENZVEhPTl9VTlUK KyAgICAgICBfX3B5eF90XzUgPSAoX19weXhfdF83KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJn cyhfX3B5eF90XzQsIF9fcHl4X3RfNywgX19weXhfdF82KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxP bmVBcmcoX19weXhfdF80LCBfX3B5eF90XzYpOworICAgICAgIF9fUHl4X1hERUNSRUYoX19weXhf dF83KTsgX19weXhfdF83ID0gMDsKKyAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19w eXhfdF82ID0gMDsKKy0gICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkpIF9fUFlYX0VSUigw LCAxMTU1LCBfX3B5eF9MMV9lcnJvcikKKysgICAgICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNSkp IF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYo X19weXhfdF81KTsKKyAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0g MDsKKyAgICAgICBfX3B5eF90XzEgPSBfX3B5eF90XzU7CitAQCAtMjAxNjcsNyArMjAxNjcsNyBA QCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxi YWNrVGhyZWFkXzhydW4oQ1lUSE9OX1VOVQorICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsg X19weXhfdF8xID0gMDsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTUyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1NAorICAq ICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisgICogCisgICogICAgIGRlZiBydW4o c2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKK0BAIC0yMDE5Miw3ICsyMDE5Miw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2Fs bGJhY2tUaHJlYWRfOHJ1bihDWVRIT05fVU5VCisgICByZXR1cm4gX19weXhfcjsKKyB9CisgCist LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTcKKysvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTE1OQorICAqICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNr KHNlbGYuY2FsbGJhY2spIGlmIHNlbGYuY2FsbGJhY2sgZWxzZSBOb25lCisgICogCisgICogICAg IGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMjAyMzUsMTEgKzIwMjM1LDExIEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhf cHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTFtcHZfY2FsbGJhY2so CisgICAgICAgICBjYXNlICAxOgorICAgICAgICAgaWYgKGxpa2VseSgodmFsdWVzWzFdID0gX19Q eXhfUHlEaWN0X0dldEl0ZW1TdHIoX19weXhfa3dkcywgX19weXhfbl9zX2NhbGxiYWNrKSkgIT0g MCkpIGt3X2FyZ3MtLTsKKyAgICAgICAgIGVsc2UgeworLSAgICAgICAgICBfX1B5eF9SYWlzZUFy Z3R1cGxlSW52YWxpZCgibXB2X2NhbGxiYWNrIiwgMSwgMiwgMiwgMSk7IF9fUFlYX0VSUigwLCAx MTU3LCBfX3B5eF9MM19lcnJvcikKKysgICAgICAgICAgX19QeXhfUmFpc2VBcmd0dXBsZUludmFs aWQoIm1wdl9jYWxsYmFjayIsIDEsIDIsIDIsIDEpOyBfX1BZWF9FUlIoMCwgMTE1OSwgX19weXhf TDNfZXJyb3IpCisgICAgICAgICB9CisgICAgICAgfQorICAgICAgIGlmICh1bmxpa2VseShrd19h cmdzID4gMCkpIHsKKy0gICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5 d29yZHMoX19weXhfa3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywg Im1wdl9jYWxsYmFjayIpIDwgMCkpIF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MM19lcnJvcikK KysgICAgICAgIGlmICh1bmxpa2VseShfX1B5eF9QYXJzZU9wdGlvbmFsS2V5d29yZHMoX19weXhf a3dkcywgX19weXhfcHlhcmduYW1lcywgMCwgdmFsdWVzLCBwb3NfYXJncywgIm1wdl9jYWxsYmFj ayIpIDwgMCkpIF9fUFlYX0VSUigwLCAxMTU5LCBfX3B5eF9MM19lcnJvcikKKyAgICAgICB9Cisg ICAgIH0gZWxzZSBpZiAoUHlUdXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSAhPSAyKSB7CisgICAg ICAgZ290byBfX3B5eF9MNV9hcmd0dXBsZV9lcnJvcjsKK0BAIC0yMDI1Miw3ICsyMDI1Miw3IEBA IHN0YXRpYyBQeU9iamVjdCAqX19weXhfcHdfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJh Y2tUaHJlYWRfMTFtcHZfY2FsbGJhY2soCisgICB9CisgICBnb3RvIF9fcHl4X0w0X2FyZ3VtZW50 X3VucGFja2luZ19kb25lOworICAgX19weXhfTDVfYXJndHVwbGVfZXJyb3I6OworLSAgX19QeXhf UmFpc2VBcmd0dXBsZUludmFsaWQoIm1wdl9jYWxsYmFjayIsIDEsIDIsIDIsIFB5VHVwbGVfR0VU X1NJWkUoX19weXhfYXJncykpOyBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDNfZXJyb3IpCisr ICBfX1B5eF9SYWlzZUFyZ3R1cGxlSW52YWxpZCgibXB2X2NhbGxiYWNrIiwgMSwgMiwgMiwgUHlU dXBsZV9HRVRfU0laRShfX3B5eF9hcmdzKSk7IF9fUFlYX0VSUigwLCAxMTU5LCBfX3B5eF9MM19l cnJvcikKKyAgIF9fcHl4X0wzX2Vycm9yOjsKKyAgIF9fUHl4X0FkZFRyYWNlYmFjaygidmlkY3V0 dGVyLmxpYnMubXB2LkNhbGxiYWNrVGhyZWFkLm1wdl9jYWxsYmFjayIsIF9fcHl4X2NsaW5lbm8s IF9fcHl4X2xpbmVubywgX19weXhfZmlsZW5hbWUpOworICAgX19QeXhfUmVmTmFubnlGaW5pc2hD b250ZXh0KCk7CitAQCAtMjAyODUsNyArMjAyODUsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNr KAorICAgaW50IF9fcHl4X2NsaW5lbm8gPSAwOworICAgX19QeXhfUmVmTmFubnlTZXR1cENvbnRl eHQoIm1wdl9jYWxsYmFjayIsIDApOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExNTgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTYwCisg ICogCisgICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgorICAqICAgICAg ICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjAzMDEsNyArMjAzMDEs NyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENh bGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNrKAorICAgICBfX1B5eF9YR09UUkVGKF9fcHl4X3Rf Myk7CisgICAgIC8qdHJ5OiovIHsKKyAKKy0gICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTE1OQorKyAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MTYxCisgICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2VsZiwgY2FsbGJhY2spOgorICAqICAgICAg ICAgdHJ5OgorICAqICAgICAgICAgICAgIGNhbGxiYWNrKCkgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorQEAgLTIwMzIxLDEyICsyMDMyMSwxMiBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4 X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNr KAorICAgICAgIH0KKyAgICAgICBfX3B5eF90XzQgPSAoX19weXhfdF82KSA/IF9fUHl4X1B5T2Jq ZWN0X0NhbGxPbmVBcmcoX19weXhfdF81LCBfX3B5eF90XzYpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE5vQXJnKF9fcHl4X3RfNSk7CisgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOyBfX3B5 eF90XzYgPSAwOworLSAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAs IDExNTksIF9fcHl4X0wzX2Vycm9yKQorKyAgICAgIGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDExNjEsIF9fcHl4X0wzX2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzUpOyBfX3B5eF90XzUgPSAw OworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworIAorLSAg ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU4CisrICAgICAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNjAKKyAgKiAKKyAgKiAgICAgZGVmIG1wdl9j YWxsYmFjayhzZWxmLCBjYWxsYmFjayk6CisgICogICAgICAgICB0cnk6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0yMDM0Myw3ICsyMDM0Myw3IEBAIHN0YXRpYyBQeU9iamVjdCAq X19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTBtcHZfY2Fs bGJhY2soCisgICAgIF9fUHl4X1hERUNSRUYoX19weXhfdF81KTsgX19weXhfdF81ID0gMDsKKyAg ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2MAorKyAgICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTE2MgorICAqICAgICAgICAgdHJ5OgorICAqICAgICAgICAgICAg IGNhbGxiYWNrKCkKKyAgKiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTIwMzUzLDI5ICsyMDM1MywyOSBAQCBzdGF0aWMgUHlP YmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEw bXB2X2NhbGxiYWNrKAorICAgICBfX3B5eF90XzcgPSBfX1B5eF9QeUVycl9FeGNlcHRpb25NYXRj aGVzKCgoUHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkp OworICAgICBpZiAoX19weXhfdF83KSB7CisgICAgICAgX19QeXhfQWRkVHJhY2ViYWNrKCJ2aWRj dXR0ZXIubGlicy5tcHYuQ2FsbGJhY2tUaHJlYWQubXB2X2NhbGxiYWNrIiwgX19weXhfY2xpbmVu bywgX19weXhfbGluZW5vLCBfX3B5eF9maWxlbmFtZSk7CistICAgICAgaWYgKF9fUHl4X0dldEV4 Y2VwdGlvbigmX19weXhfdF80LCAmX19weXhfdF81LCAmX19weXhfdF82KSA8IDApIF9fUFlYX0VS UigwLCAxMTYwLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCisrICAgICAgaWYgKF9fUHl4X0dldEV4 Y2VwdGlvbigmX19weXhfdF80LCAmX19weXhfdF81LCAmX19weXhfdF82KSA8IDApIF9fUFlYX0VS UigwLCAxMTYyLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNCk7CisgICAgICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNSk7CisgICAgICAgX19QeXhf R09UUkVGKF9fcHl4X3RfNik7CisgICAgICAgX19QeXhfSU5DUkVGKF9fcHl4X3RfNSk7CisgICAg ICAgX19weXhfdl9lID0gX19weXhfdF81OworIAorLSAgICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTYxCisrICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExNjMKKyAgKiAgICAgICAgICAgICBjYWxsYmFjaygpCisgICogICAgICAgICBleGNlcHQg RXhjZXB0aW9uIGFzIGU6CisgICogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgicHltcHYg ZXJyb3IgZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAlIGUpICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKyAgKiAKKyAgKiBjZGVmIHZvaWQgX2NfY2FsbGJhY2sodm9pZCogZCkgd2l0aCBnaWw6 CisgICovCistICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzksIF9fcHl4 X25fc19zeXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlYX0VSUigwLCAxMTYxLCBf X3B5eF9MNV9leGNlcHRfZXJyb3IpCisrICAgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShf X3B5eF90XzksIF9fcHl4X25fc19zeXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfOSkpIF9fUFlY X0VSUigwLCAxMTYzLCBfX3B5eF9MNV9leGNlcHRfZXJyb3IpCisgICAgICAgX19QeXhfR09UUkVG KF9fcHl4X3RfOSk7CistICAgICAgX19weXhfdF8xMCA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJT dHIoX19weXhfdF85LCBfX3B5eF9uX3Nfc3RkZXJyKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEw KSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKysgICAgICBfX3B5 eF90XzEwID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF90XzksIF9fcHl4X25fc19z dGRlcnIpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMTApKSBfX1BZWF9FUlIoMCwgMTE2MywgX19w eXhfTDVfZXhjZXB0X2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEwKTsKKyAg ICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF85KTsgX19weXhfdF85ID0gMDsKKy0gICAgICBfX3B5 eF90XzkgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfMTAsIF9fcHl4X25fc193 cml0ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF85KSkgX19QWVhfRVJSKDAsIDExNjEsIF9fcHl4 X0w1X2V4Y2VwdF9lcnJvcikKKysgICAgICBfX3B5eF90XzkgPSBfX1B5eF9QeU9iamVjdF9HZXRB dHRyU3RyKF9fcHl4X3RfMTAsIF9fcHl4X25fc193cml0ZSk7IGlmICh1bmxpa2VseSghX19weXhf dF85KSkgX19QWVhfRVJSKDAsIDExNjMsIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcikKKyAgICAgICBf X1B5eF9HT1RSRUYoX19weXhfdF85KTsKKyAgICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xMCk7 IF9fcHl4X3RfMTAgPSAwOworLSAgICAgIF9fcHl4X3RfMTAgPSBfX1B5eF9QeVN0cmluZ19Gb3Jt YXRTYWZlKF9fcHl4X2twX3NfcHltcHZfZXJyb3JfZHVyaW5nX2NhbGxiYWNrX3MsIF9fcHl4X3Zf ZSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xMCkpIF9fUFlYX0VSUigwLCAxMTYxLCBfX3B5eF9M NV9leGNlcHRfZXJyb3IpCisrICAgICAgX19weXhfdF8xMCA9IF9fUHl4X1B5U3RyaW5nX0Zvcm1h dFNhZmUoX19weXhfa3Bfc19weW1wdl9lcnJvcl9kdXJpbmdfY2FsbGJhY2tfcywgX19weXhfdl9l KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEwKSkgX19QWVhfRVJSKDAsIDExNjMsIF9fcHl4X0w1 X2V4Y2VwdF9lcnJvcikKKyAgICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xMCk7CisgICAgICAg X19weXhfdF8xMSA9IE5VTEw7CisgICAgICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiBs aWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF85KSkpIHsKK0BAIC0yMDM5MCw3ICsyMDM5MCw3 IEBAIHN0YXRpYyBQeU9iamVjdCAqX19weXhfcGZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2Fs bGJhY2tUaHJlYWRfMTBtcHZfY2FsbGJhY2soCisgICAgICAgX19weXhfdF84ID0gKF9fcHl4X3Rf MTEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfOSwgX19weXhfdF8xMSwgX19w eXhfdF8xMCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfOSwgX19weXhfdF8x MCk7CisgICAgICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzExKTsgX19weXhfdF8xMSA9IDA7Cisg ICAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMTApOyBfX3B5eF90XzEwID0gMDsKKy0gICAgICBp ZiAodW5saWtlbHkoIV9fcHl4X3RfOCkpIF9fUFlYX0VSUigwLCAxMTYxLCBfX3B5eF9MNV9leGNl cHRfZXJyb3IpCisrICAgICAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzgpKSBfX1BZWF9FUlIoMCwg MTE2MywgX19weXhfTDVfZXhjZXB0X2Vycm9yKQorICAgICAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzgpOworICAgICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzkpOyBfX3B5eF90XzkgPSAwOworICAg ICAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzgpOyBfX3B5eF90XzggPSAwOworQEAgLTIwNDAyLDcg KzIwNDAyLDcgQEAgc3RhdGljIFB5T2JqZWN0ICpfX3B5eF9wZl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfMTRDYWxsYmFja1RocmVhZF8xMG1wdl9jYWxsYmFjaygKKyAgICAgZ290byBfX3B5eF9MNV9l eGNlcHRfZXJyb3I7CisgICAgIF9fcHl4X0w1X2V4Y2VwdF9lcnJvcjo7CisgCistICAgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU4CisrICAgIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMTYwCisgICogCisgICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2Vs ZiwgY2FsbGJhY2spOgorICAqICAgICAgICAgdHJ5OiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CitAQCAtMjA0MjIsNyArMjA0MjIsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNrKAorICAg ICBfX3B5eF9MOF90cnlfZW5kOjsKKyAgIH0KKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTU3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1 OQorICAqICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJhY2spIGlmIHNl bGYuY2FsbGJhY2sgZWxzZSBOb25lCisgICogCisgICogICAgIGRlZiBtcHZfY2FsbGJhY2soc2Vs ZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjA0NTAsNyAr MjA0NTAsNyBAQCBzdGF0aWMgUHlPYmplY3QgKl9fcHl4X3BmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNENhbGxiYWNrVGhyZWFkXzEwbXB2X2NhbGxiYWNrKAorICAgcmV0dXJuIF9fcHl4X3I7Cisg fQorIAorLS8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTYzCisrLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNjUKKyAgKiAgICAgICAgICAgICBzeXMuc3RkZXJy LndyaXRlKCJweW1wdiBlcnJvciBkdXJpbmcgY2FsbGJhY2s6ICVzXG4iICUgZSkKKyAgKiAKKyAg KiBjZGVmIHZvaWQgX2NfY2FsbGJhY2sodm9pZCogZCkgd2l0aCBnaWw6ICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKK0BAIC0yMDQ3NCw3ICsyMDQ3NCw3IEBAIHN0YXRpYyB2b2lkIF9fcHl4 X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jX2NhbGxiYWNrKHZvaWQgKl9fcHl4X3ZfZCkgewor ICAgI2VuZGlmCisgICBfX1B5eF9SZWZOYW5ueVNldHVwQ29udGV4dCgiX2NfY2FsbGJhY2siLCAw KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTY0CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2NgorICAqIAorICAqIGNkZWYgdm9pZCBf Y19jYWxsYmFjayh2b2lkKiBkKSB3aXRoIGdpbDoKKyAgKiAgICAgY2RlZiB1aW50NjRfdCBuYW1l ID0gPHVpbnQ2NF90PmQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorQEAgLTIwNDgzLDE1 ICsyMDQ4MywxNSBAQCBzdGF0aWMgdm9pZCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9f Y19jYWxsYmFjayh2b2lkICpfX3B5eF92X2QpIHsKKyAgKi8KKyAgIF9fcHl4X3ZfbmFtZSA9ICgo dWludDY0X3QpX19weXhfdl9kKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMTY1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2NworICAq IGNkZWYgdm9pZCBfY19jYWxsYmFjayh2b2lkKiBkKSB3aXRoIGdpbDoKKyAgKiAgICAgY2RlZiB1 aW50NjRfdCBuYW1lID0gPHVpbnQ2NF90PmQKKyAgKiAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2tz LmdldChuYW1lKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGNhbGxiYWNr LmNhbGwoKQorICAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihf X3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY2FsbGJhY2tzLCBfX3B5eF9uX3NfZ2V0KTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgMTE2NSwgX19weXhfTDFfZXJy b3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3ZfOXZp ZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X25fc19nZXQpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCAxMTY3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzIpOworLSAgX19weXhfdF8zID0gX19QeXhfUHlJbnRfRnJvbV91 aW50NjRfdChfX3B5eF92X25hbWUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMykpIF9fUFlYX0VS UigwLCAxMTY1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMyA9IF9fUHl4X1B5SW50X0Zy b21fdWludDY0X3QoX19weXhfdl9uYW1lKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzMpKSBfX1BZ WF9FUlIoMCwgMTE2NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8z KTsKKyAgIF9fcHl4X3RfNCA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IGxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzIpKSkgeworQEAgLTIwNTA2LDE4ICsyMDUw NiwxOCBAQCBzdGF0aWMgdm9pZCBfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fY19jYWxs YmFjayh2b2lkICpfX3B5eF92X2QpIHsKKyAgIF9fcHl4X3RfMSA9IChfX3B5eF90XzQpID8gX19Q eXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfMiwgX19weXhfdF80LCBfX3B5eF90XzMpIDog X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzIsIF9fcHl4X3RfMyk7CisgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8zKTsgX19weXhfdF8zID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDExNjUsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzEpKSBfX1BZWF9FUlIoMCwgMTE2NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdF8xKTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOwor ICAgX19weXhfdl9jYWxsYmFjayA9IF9fcHl4X3RfMTsKKyAgIF9fcHl4X3RfMSA9IDA7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE2NgorKyAgLyogInZpZGN1dHRl ci9saWJzL3B5bXB2L21wdi5weXgiOjExNjgKKyAgKiAgICAgY2RlZiB1aW50NjRfdCBuYW1lID0g PHVpbnQ2NF90PmQKKyAgKiAgICAgY2FsbGJhY2sgPSBfY2FsbGJhY2tzLmdldChuYW1lKQorICAq ICAgICBjYWxsYmFjay5jYWxsKCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqLwor LSAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0QXR0clN0cihfX3B5eF92X2NhbGxiYWNr LCBfX3B5eF9uX3NfY2FsbCk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAs IDExNjYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8yID0gX19QeXhfUHlPYmplY3RfR2V0 QXR0clN0cihfX3B5eF92X2NhbGxiYWNrLCBfX3B5eF9uX3NfY2FsbCk7IGlmICh1bmxpa2VseSgh X19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDExNjgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMik7CisgICBfX3B5eF90XzMgPSBOVUxMOworICAgaWYgKENZVEhPTl9V TlBBQ0tfTUVUSE9EUyAmJiBsaWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF8yKSkpIHsKK0BA IC0yMDUzMSwxMiArMjA1MzEsMTIgQEAgc3RhdGljIHZvaWQgX19weXhfZl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX2NfY2FsbGJhY2sodm9pZCAqX19weXhfdl9kKSB7CisgICB9CisgICBfX3B5eF90 XzEgPSAoX19weXhfdF8zKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF8yLCBf X3B5eF90XzMpIDogX19QeXhfUHlPYmplY3RfQ2FsbE5vQXJnKF9fcHl4X3RfMik7CisgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMyk7IF9fcHl4X3RfMyA9IDA7CistICBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTY2LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxp a2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNjgsIF9fcHl4X0wxX2Vycm9yKQorICAg X19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19w eXhfdF8yID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNjMKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTY1CisgICogICAgICAgICAgICAgc3lzLnN0ZGVy ci53cml0ZSgicHltcHYgZXJyb3IgZHVyaW5nIGNhbGxiYWNrOiAlc1xuIiAlIGUpCisgICogCisg ICogY2RlZiB2b2lkIF9jX2NhbGxiYWNrKHZvaWQqIGQpIHdpdGggZ2lsOiAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CitAQCAtMjQ0NDQsMTMgKzI0NDQ0LDEzIEBAIHN0YXRpYyBfX1B5eF9T dHJpbmdUYWJFbnRyeSBfX3B5eF9zdHJpbmdfdGFiW10gPSB7CisgICB7MCwgMCwgMCwgMCwgMCwg MCwgMH0KKyB9OworIHN0YXRpYyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfSW5pdENhY2hl ZEJ1aWx0aW5zKHZvaWQpIHsKKy0gIF9fcHl4X2J1aWx0aW5fSW1wb3J0RXJyb3IgPSBfX1B5eF9H ZXRCdWlsdGluTmFtZShfX3B5eF9uX3NfSW1wb3J0RXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0aW5f SW1wb3J0RXJyb3IpIF9fUFlYX0VSUigwLCA0NCwgX19weXhfTDFfZXJyb3IpCistICBfX3B5eF9i dWlsdGluX29iamVjdCA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19vYmplY3QpOyBp ZiAoIV9fcHl4X2J1aWx0aW5fb2JqZWN0KSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9MMV9lcnJv cikKKy0gIF9fcHl4X2J1aWx0aW5fVW5pY29kZURlY29kZUVycm9yID0gX19QeXhfR2V0QnVpbHRp bk5hbWUoX19weXhfbl9zX1VuaWNvZGVEZWNvZGVFcnJvcik7IGlmICghX19weXhfYnVpbHRpbl9V bmljb2RlRGVjb2RlRXJyb3IpIF9fUFlYX0VSUigwLCA1OCwgX19weXhfTDFfZXJyb3IpCistICBf X3B5eF9idWlsdGluX1VuaWNvZGVFbmNvZGVFcnJvciA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9f cHl4X25fc19Vbmljb2RlRW5jb2RlRXJyb3IpOyBpZiAoIV9fcHl4X2J1aWx0aW5fVW5pY29kZUVu Y29kZUVycm9yKSBfX1BZWF9FUlIoMCwgNjYsIF9fcHl4X0wxX2Vycm9yKQorLSAgX19weXhfYnVp bHRpbl9yYW5nZSA9IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19yYW5nZSk7IGlmICgh X19weXhfYnVpbHRpbl9yYW5nZSkgX19QWVhfRVJSKDAsIDIyMiwgX19weXhfTDFfZXJyb3IpCist ICBfX3B5eF9idWlsdGluX2lkID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX2lkKTsg aWYgKCFfX3B5eF9idWlsdGluX2lkKSBfX1BZWF9FUlIoMCwgMzAzLCBfX3B5eF9MMV9lcnJvcikK Ky0gIF9fcHl4X2J1aWx0aW5fZW51bWVyYXRlID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhf bl9zX2VudW1lcmF0ZSk7IGlmICghX19weXhfYnVpbHRpbl9lbnVtZXJhdGUpIF9fUFlYX0VSUigw LCA0NzUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfYnVpbHRpbl9JbXBvcnRFcnJvciA9IF9f UHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19JbXBvcnRFcnJvcik7IGlmICghX19weXhfYnVp bHRpbl9JbXBvcnRFcnJvcikgX19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X2J1aWx0aW5fb2JqZWN0ID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX29iamVj dCk7IGlmICghX19weXhfYnVpbHRpbl9vYmplY3QpIF9fUFlYX0VSUigwLCAzNDgsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfYnVpbHRpbl9Vbmljb2RlRGVjb2RlRXJyb3IgPSBfX1B5eF9HZXRC dWlsdGluTmFtZShfX3B5eF9uX3NfVW5pY29kZURlY29kZUVycm9yKTsgaWYgKCFfX3B5eF9idWls dGluX1VuaWNvZGVEZWNvZGVFcnJvcikgX19QWVhfRVJSKDAsIDYwLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X2J1aWx0aW5fVW5pY29kZUVuY29kZUVycm9yID0gX19QeXhfR2V0QnVpbHRpbk5h bWUoX19weXhfbl9zX1VuaWNvZGVFbmNvZGVFcnJvcik7IGlmICghX19weXhfYnVpbHRpbl9Vbmlj b2RlRW5jb2RlRXJyb3IpIF9fUFlYX0VSUigwLCA2OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF9idWlsdGluX3JhbmdlID0gX19QeXhfR2V0QnVpbHRpbk5hbWUoX19weXhfbl9zX3JhbmdlKTsg aWYgKCFfX3B5eF9idWlsdGluX3JhbmdlKSBfX1BZWF9FUlIoMCwgMjI0LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fcHl4X2J1aWx0aW5faWQgPSBfX1B5eF9HZXRCdWlsdGluTmFtZShfX3B5eF9uX3Nf aWQpOyBpZiAoIV9fcHl4X2J1aWx0aW5faWQpIF9fUFlYX0VSUigwLCAzMDUsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfYnVpbHRpbl9lbnVtZXJhdGUgPSBfX1B5eF9HZXRCdWlsdGluTmFtZShf X3B5eF9uX3NfZW51bWVyYXRlKTsgaWYgKCFfX3B5eF9idWlsdGluX2VudW1lcmF0ZSkgX19QWVhf RVJSKDAsIDQ3NywgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF9idWlsdGluX1R5cGVFcnJvciA9 IF9fUHl4X0dldEJ1aWx0aW5OYW1lKF9fcHl4X25fc19UeXBlRXJyb3IpOyBpZiAoIV9fcHl4X2J1 aWx0aW5fVHlwZUVycm9yKSBfX1BZWF9FUlIoMSwgMiwgX19weXhfTDFfZXJyb3IpCisgICByZXR1 cm4gMDsKKyAgIF9fcHl4X0wxX2Vycm9yOjsKK0BAIC0yNDQ2MSwxNyArMjQ0NjEsMTcgQEAgc3Rh dGljIENZVEhPTl9TTUFMTF9DT0RFIGludCBfX1B5eF9Jbml0Q2FjaGVkQ29uc3RhbnRzKHZvaWQp IHsKKyAgIF9fUHl4X1JlZk5hbm55RGVjbGFyYXRpb25zCisgICBfX1B5eF9SZWZOYW5ueVNldHVw Q29udGV4dCgiX19QeXhfSW5pdENhY2hlZENvbnN0YW50cyIsIDApOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjMyMQorICAqIAorICAqIGRlZiBfZXJyb3JzKGZuKToKKyAgKiAgICAgZGVmIHdy YXBwZWQoKmssICoqa3cpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAg ICB2ID0gZm4oKmssICoqa3cpCisgICogICAgICAgICBpZiB2IDwgMDoKKyAgKi8KKy0gIF9fcHl4 X3R1cGxlXyA9IFB5VHVwbGVfUGFjaygzLCBfX3B5eF9uX3NfaywgX19weXhfbl9zX2t3LCBfX3B5 eF9uX3Nfdik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfKSkgX19QWVhfRVJSKDAsIDMxOSwg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90dXBsZV8gPSBQeVR1cGxlX1BhY2soMywgX19weXhf bl9zX2ssIF9fcHl4X25fc19rdywgX19weXhfbl9zX3YpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1 cGxlXykpIF9fUFlYX0VSUigwLCAzMjEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3R1cGxlXyk7CisgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlXyk7CistICBfX3B5 eF9jb2Rlb2JqX18yID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDAsIDAsIDMsIDAsIENP X09QVElNSVpFRHxDT19ORVdMT0NBTFN8Q09fVkFSQVJHU3xDT19WQVJLRVlXT1JEUywgX19weXhf ZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf dHVwbGVfLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3Nf dmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3dyYXBwZWQsIDMxOSwgX19w eXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzIpKSBfX1BZWF9F UlIoMCwgMzE5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X2NvZGVvYmpfXzIgPSAoUHlPYmpl Y3QqKV9fUHl4X1B5Q29kZV9OZXcoMCwgMCwgMywgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FM U3xDT19WQVJBUkdTfENPX1ZBUktFWVdPUkRTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV8sIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9t cHZfcHl4LCBfX3B5eF9uX3Nfd3JhcHBlZCwgMzIxLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1 bmxpa2VseSghX19weXhfY29kZW9ial9fMikpIF9fUFlYX0VSUigwLCAzMjEsIF9fcHl4X0wxX2Vy cm9yKQorIAorICAgLyogIih0cmVlIGZyYWdtZW50KSI6MgorICAqIGRlZiBfX3JlZHVjZV9jeXRo b25fXyhzZWxmKToKK0BAIC0yNDUxMSw4MCArMjQ1MTEsODAgQEAgc3RhdGljIENZVEhPTl9TTUFM TF9DT0RFIGludCBfX1B5eF9Jbml0Q2FjaGVkQ29uc3RhbnRzKHZvaWQpIHsKKyAgIF9fUHl4X0dP VFJFRihfX3B5eF90dXBsZV9fNik7CisgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX182KTsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTIKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5OTQKKyAgKiAgICAgICAgICAgICBwYXJhbXMuYWRk X3ZvaWRwKE1QVl9SRU5ERVJfUEFSQU1fV0xfRElTUExBWSwgZ2V0X3BvaW50ZXIoIndsX2Rpc3Bs YXkiLCB3bF9kaXNwbGF5KSkKKyAgKiAgICAgICAgIGlmIGRybV9kaXNwbGF5OgorICAqICAgICAg ICAgICAgIGRybV9wYXJhbXMuZmQgPSBkcm1fZGlzcGxheS5nZXQoImZkIiwgLTEpICAgICAgICAg ICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQg PSBkcm1fZGlzcGxheS5nZXQoImNydGNfaWQiLCAtMSkKKyAgKiAgICAgICAgICAgICBkcm1fcGFy YW1zLmNvbm5lY3Rvcl9pZCA9IGRybV9kaXNwbGF5LmdldCgiY29ubmVjdG9yX2lkIiwgLTEpCisg ICovCistICBfX3B5eF90dXBsZV9fNyA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfZmQsIF9f cHl4X2ludF9uZWdfMSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzcpKSBfX1BZWF9FUlIo MCwgOTkyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX183ID0gUHlUdXBsZV9QYWNr KDIsIF9fcHl4X25fc19mZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 dXBsZV9fNykpIF9fUFlYX0VSUigwLCA5OTQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3R1cGxlX183KTsKKyAgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzcpOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5MworKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk5NQorICAqICAgICAgICAgaWYgZHJtX2Rpc3BsYXk6 CisgICogICAgICAgICAgICAgZHJtX3BhcmFtcy5mZCA9IGRybV9kaXNwbGF5LmdldCgiZmQiLCAt MSkKKyAgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmNydGNfaWQgPSBkcm1fZGlzcGxheS5nZXQo ImNydGNfaWQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAg ICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3Jf aWQiLCAtMSkKKyAgKiAgICAgICAgICAgICBhcnAgPSBkcm1fZGlzcGxheS5nZXQoImF0b21pY19y ZXF1ZXN0X3B0ciIsIE5vbmUpCisgICovCistICBfX3B5eF90dXBsZV9fOCA9IFB5VHVwbGVfUGFj aygyLCBfX3B5eF9uX3NfY3J0Y19pZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90dXBsZV9fOCkpIF9fUFlYX0VSUigwLCA5OTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdHVwbGVfXzggPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9zX2NydGNfaWQsIF9fcHl4X2lu dF9uZWdfMSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzgpKSBfX1BZWF9FUlIoMCwgOTk1 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fOCk7CisgICBf X1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX184KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo5OTQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5 OTYKKyAgKiAgICAgICAgICAgICBkcm1fcGFyYW1zLmZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJmZCIs IC0xKQorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY3J0Y19pZCA9IGRybV9kaXNwbGF5Lmdl dCgiY3J0Y19pZCIsIC0xKQorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMuY29ubmVjdG9yX2lk ID0gZHJtX2Rpc3BsYXkuZ2V0KCJjb25uZWN0b3JfaWQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIGFycCA9IGRybV9kaXNwbGF5LmdldCgiYXRvbWlj X3JlcXVlc3RfcHRyIiwgTm9uZSkKKyAgKiAgICAgICAgICAgICBpZiBhcnAgaXMgbm90IE5vbmU6 CisgICovCistICBfX3B5eF90dXBsZV9fOSA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfY29u bmVjdG9yX2lkLCBfX3B5eF9pbnRfbmVnXzEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX185 KSkgX19QWVhfRVJSKDAsIDk5NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90dXBsZV9fOSA9 IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfY29ubmVjdG9yX2lkLCBfX3B5eF9pbnRfbmVnXzEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX185KSkgX19QWVhfRVJSKDAsIDk5NiwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzkpOworICAgX19QeXhfR0lW RVJFRihfX3B5eF90dXBsZV9fOSk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTk1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk3CisgICog ICAgICAgICAgICAgZHJtX3BhcmFtcy5jcnRjX2lkID0gZHJtX2Rpc3BsYXkuZ2V0KCJjcnRjX2lk IiwgLTEpCisgICogICAgICAgICAgICAgZHJtX3BhcmFtcy5jb25uZWN0b3JfaWQgPSBkcm1fZGlz cGxheS5nZXQoImNvbm5lY3Rvcl9pZCIsIC0xKQorICAqICAgICAgICAgICAgIGFycCA9IGRybV9k aXNwbGF5LmdldCgiYXRvbWljX3JlcXVlc3RfcHRyIiwgTm9uZSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIGlmIGFycCBpcyBub3QgTm9uZToKKyAgKiAgICAg ICAgICAgICAgICAgZHJtX3BhcmFtcy5hdG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9t aWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJwLCAiZHJtTW9kZUF0b21pY1JlcSoiKQorICAqLworLSAg X19weXhfdHVwbGVfXzEwID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19hdG9taWNfcmVxdWVz dF9wdHIsIFB5X05vbmUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMCkpIF9fUFlYX0VS UigwLCA5OTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVwbGVfXzEwID0gUHlUdXBsZV9Q YWNrKDIsIF9fcHl4X25fc19hdG9taWNfcmVxdWVzdF9wdHIsIFB5X05vbmUpOyBpZiAodW5saWtl bHkoIV9fcHl4X3R1cGxlX18xMCkpIF9fUFlYX0VSUigwLCA5OTcsIF9fcHl4X0wxX2Vycm9yKQor ICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18xMCk7CisgICBfX1B5eF9HSVZFUkVGKF9fcHl4 X3R1cGxlX18xMCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTk4 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAwMAorICAqICAgICAgICAg ICAgIGlmIGFycCBpcyBub3QgTm9uZToKKyAgKiAgICAgICAgICAgICAgICAgZHJtX3BhcmFtcy5h dG9taWNfcmVxdWVzdF9wdHIgPSA8X2RybU1vZGVBdG9taWNSZXEgKio+Z2V0X3BvaW50ZXIoYXJw LCAiZHJtTW9kZUF0b21pY1JlcSoiKQorICAqICAgICAgICAgICAgIGRybV9wYXJhbXMucmVuZGVy X2ZkID0gZHJtX2Rpc3BsYXkuZ2V0KCJyZW5kZXJfZmQiLCAtMSkgICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRFUl9Q QVJBTV9EUk1fRElTUExBWSwgJmRybV9wYXJhbXMpCisgICogICAgICAgICBpZiBkcm1fb3NkX3Np emU6CisgICovCistICBfX3B5eF90dXBsZV9fMTEgPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9z X3JlbmRlcl9mZCwgX19weXhfaW50X25lZ18xKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9f MTEpKSBfX1BZWF9FUlIoMCwgOTk4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX18x MSA9IFB5VHVwbGVfUGFjaygyLCBfX3B5eF9uX3NfcmVuZGVyX2ZkLCBfX3B5eF9pbnRfbmVnXzEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMSkpIF9fUFlYX0VSUigwLCAxMDAwLCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTEpOworICAgX19QeXhf R0lWRVJFRihfX3B5eF90dXBsZV9fMTEpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjEwODMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDg1 CisgICogICAgICAgICBpZiBvcGVuZ2xfZmJvOgorICAqICAgICAgICAgICAgIG1lbXNldCgmZmJv LCAwLCBzaXplb2YoZmJvKSkKKyAgKiAgICAgICAgICAgICBmYm8uZmJvID0gb3BlbmdsX2Ziby5n ZXQoImZibyIsIDApIG9yIDAgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAg ICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdCisgICogICAgICAgICAgICAgZmJvLmggPSBv cGVuZ2xfZmJvWyJoIl0KKyAgKi8KKy0gIF9fcHl4X3R1cGxlX18xMiA9IFB5VHVwbGVfUGFjaygy LCBfX3B5eF9uX3NfZmJvLCBfX3B5eF9pbnRfMCk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVf XzEyKSkgX19QWVhfRVJSKDAsIDEwODMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVwbGVf XzEyID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19mYm8sIF9fcHl4X2ludF8wKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90dXBsZV9fMTIpKSBfX1BZWF9FUlIoMCwgMTA4NSwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzEyKTsKKyAgIF9fUHl4X0dJVkVSRUYo X19weXhfdHVwbGVfXzEyKTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxMDg2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTA4OAorICAqICAg ICAgICAgICAgIGZiby53ID0gb3BlbmdsX2Zib1sidyJdCisgICogICAgICAgICAgICAgZmJvLmgg PSBvcGVuZ2xfZmJvWyJoIl0KKyAgKiAgICAgICAgICAgICBmYm8uaW50ZXJuYWxfZm9ybWF0ID0g b3BlbmdsX2Ziby5nZXQoImludGVybmFsX2Zvcm1hdCIsIDApIG9yIDAgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgICAgIHBhcmFtcy5hZGRfdm9pZHAoTVBWX1JFTkRF Ul9QQVJBTV9PUEVOR0xfRkJPLCAmZmJvKQorICAqICAgICAgICAgaWYgZmxpcF95OgorICAqLwor LSAgX19weXhfdHVwbGVfXzEzID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19pbnRlcm5hbF9m b3JtYXQsIF9fcHl4X2ludF8wKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMTMpKSBfX1BZ WF9FUlIoMCwgMTA4NiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90dXBsZV9fMTMgPSBQeVR1 cGxlX1BhY2soMiwgX19weXhfbl9zX2ludGVybmFsX2Zvcm1hdCwgX19weXhfaW50XzApOyBpZiAo dW5saWtlbHkoIV9fcHl4X3R1cGxlX18xMykpIF9fUFlYX0VSUigwLCAxMDg4LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTMpOworICAgX19QeXhfR0lWRVJF RihfX3B5eF90dXBsZV9fMTMpOworIAorQEAgLTI0NjI2LDE4MyArMjQ2MjYsMTgzIEBAIHN0YXRp YyBDWVRIT05fU01BTExfQ09ERSBpbnQgX19QeXhfSW5pdENhY2hlZENvbnN0YW50cyh2b2lkKSB7 CisgICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzE3KTsKKyAgIF9fUHl4X0dJVkVSRUYoX19w eXhfdHVwbGVfXzE3KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1 MgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjU0CisgICogICAgIHZvaWQg UHlfSW5pdGlhbGl6ZSgpCisgICogCisgICogX2lzX3B5MyA9IHN5cy52ZXJzaW9uX2luZm8gPj0g KDMsKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogX3N0cmRlY19lcnIgPSAic3Vy cm9nYXRlZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIKKyAgKiAjIG1wdiAtPiBQeXRo b24KKyAgKi8KKy0gIF9fcHl4X3R1cGxlX18xOCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9pbnRf Myk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE4KSkgX19QWVhfRVJSKDAsIDUyLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX18xOCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9p bnRfMyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE4KSkgX19QWVhfRVJSKDAsIDU0LCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMTgpOworICAgX19Q eXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTgpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjU1CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTcK KyAgKiBfc3RyZGVjX2VyciA9ICJzdXJyb2dhdGVlc2NhcGUiIGlmIF9pc19weTMgZWxzZSAic3Ry aWN0IgorICAqICMgbXB2IC0+IFB5dGhvbgorICAqIGRlZiBfc3RyZGVjKHMpOiAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIHRyeToKKyAgKiAgICAgICAgIHJldHVybiBzLmRl Y29kZSgidXRmLTgiLCBfc3RyZGVjX2VycikKKyAgKi8KKy0gIF9fcHl4X3R1cGxlX18xOSA9IFB5 VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfcyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzE5 KSkgX19QWVhfRVJSKDAsIDU1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX18xOSA9 IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfcyk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVf XzE5KSkgX19QWVhfRVJSKDAsIDU3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90dXBsZV9fMTkpOworICAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMTkpOworLSAg X19weXhfY29kZW9ial9fMjAgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwg MCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzE5LCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHlt cHZfbXB2X3B5eCwgX19weXhfbl9zX3N0cmRlYywgNTUsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYg KHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18yMCkpIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF9jb2Rlb2JqX18yMCA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05l dygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRl cywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMTks IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0 ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3Nfc3RyZGVjLCA1NywgX19weXhfZW1wdHlf Ynl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzIwKSkgX19QWVhfRVJSKDAsIDU3 LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo2MworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1CisgICogCisgICog IyBQeXRob24gLT4gbXB2CisgICogZGVmIF9zdHJlbmMocyk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKyAgKiAgICAgdHJ5OgorICAqICAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJ1dGYt OCIsIF9zdHJkZWNfZXJyKQorICAqLworLSAgX19weXhfdHVwbGVfXzIxID0gUHlUdXBsZV9QYWNr KDEsIF9fcHl4X25fc19zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjEpKSBfX1BZWF9F UlIoMCwgNjMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVwbGVfXzIxID0gUHlUdXBsZV9Q YWNrKDEsIF9fcHl4X25fc19zKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjEpKSBfX1BZ WF9FUlIoMCwgNjUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxl X18yMSk7CisgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18yMSk7CistICBfX3B5eF9jb2Rl b2JqX18yMiA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJ TUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUs IF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMjEsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4 LCBfX3B5eF9uX3Nfc3RyZW5jLCA2MywgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHko IV9fcHl4X2NvZGVvYmpfXzIyKSkgX19QWVhfRVJSKDAsIDYzLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fcHl4X2NvZGVvYmpfXzIyID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEs IDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18yMSwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5 bXB2X21wdl9weXgsIF9fcHl4X25fc19zdHJlbmMsIDY1LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlm ICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMjIpKSBfX1BZWF9FUlIoMCwgNjUsIF9fcHl4X0wx X2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMxOAorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyMAorICAqIAorICAqIAorICAqIGRl ZiBfZXJyb3JzKGZuKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBkZWYg d3JhcHBlZCgqaywgKiprdyk6CisgICogICAgICAgICB2ID0gZm4oKmssICoqa3cpCisgICovCist ICBfX3B5eF90dXBsZV9fMjMgPSBQeVR1cGxlX1BhY2soMywgX19weXhfbl9zX2ZuLCBfX3B5eF9u X3Nfd3JhcHBlZCwgX19weXhfbl9zX3dyYXBwZWQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxl X18yMykpIF9fUFlYX0VSUigwLCAzMTgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVwbGVf XzIzID0gUHlUdXBsZV9QYWNrKDMsIF9fcHl4X25fc19mbiwgX19weXhfbl9zX3dyYXBwZWQsIF9f cHl4X25fc193cmFwcGVkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjMpKSBfX1BZWF9F UlIoMCwgMzIwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9f MjMpOworICAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMjMpOworLSAgX19weXhfY29kZW9i al9fMjQgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMywgMCwgQ09fT1BUSU1J WkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzIzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwg X19weXhfbl9zX2Vycm9ycywgMzE4LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSgh X19weXhfY29kZW9ial9fMjQpKSBfX1BZWF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKKysg IF9fcHl4X2NvZGVvYmpfXzI0ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDMs IDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18yMywgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5 bXB2X21wdl9weXgsIF9fcHl4X25fc19lcnJvcnMsIDMyMCwgX19weXhfZW1wdHlfYnl0ZXMpOyBp ZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzI0KSkgX19QWVhfRVJSKDAsIDMyMCwgX19weXhf TDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzI5Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzMxCisgICogICAgIGNvZGUgPSBO b25lCisgICogCisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jb2RlID0gZQorICAqICAgICAgICAgY2Rl ZiBjb25zdCBjaGFyKiBlcnJfYworICAqLworLSAgX19weXhfdHVwbGVfXzI1ID0gUHlUdXBsZV9Q YWNrKDQsIF9fcHl4X25fc19zZWxmLCBfX3B5eF9uX3NfZSwgX19weXhfbl9zX2Vycl9jLCBfX3B5 eF9uX3NfZV9pKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjUpKSBfX1BZWF9FUlIoMCwg MzI5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX18yNSA9IFB5VHVwbGVfUGFjayg0 LCBfX3B5eF9uX3Nfc2VsZiwgX19weXhfbl9zX2UsIF9fcHl4X25fc19lcnJfYywgX19weXhfbl9z X2VfaSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzI1KSkgX19QWVhfRVJSKDAsIDMzMSwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzI1KTsKKyAgIF9f UHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzI1KTsKKy0gIF9fcHl4X2NvZGVvYmpfXzI2ID0gKFB5 T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDIsIDAsIDQsIDAsIENPX09QVElNSVpFRHxDT19ORVdM T0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlf dHVwbGUsIF9fcHl4X3R1cGxlX18yNSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4X25fc19p bml0LCAzMjksIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2Jq X18yNikpIF9fUFlYX0VSUigwLCAzMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfY29kZW9i al9fMjYgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgNCwgMCwgQ09fT1BUSU1J WkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzI1LCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwg X19weXhfbl9zX2luaXQsIDMzMSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9f cHl4X2NvZGVvYmpfXzI2KSkgX19QWVhfRVJSKDAsIDMzMSwgX19weXhfTDFfZXJyb3IpCisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ2CisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ4CisgICogY2RlZiBfcmVwbHlfdXNlcmRhdGFzID0gZGlj dCgpCisgICogCisgICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICog ICAgICAgICBzZWxmLmNvdW50ZXIgPSAwCisgICovCistICBfX3B5eF90dXBsZV9fMjcgPSBQeVR1 cGxlX1BhY2soMSwgX19weXhfYnVpbHRpbl9vYmplY3QpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1 cGxlX18yNykpIF9fUFlYX0VSUigwLCAzNDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVw bGVfXzI3ID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X2J1aWx0aW5fb2JqZWN0KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90dXBsZV9fMjcpKSBfX1BZWF9FUlIoMCwgMzQ4LCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fMjcpOworICAgX19QeXhfR0lWRVJFRihfX3B5 eF90dXBsZV9fMjcpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0 NworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0OQorICAqIAorICAqIGNs YXNzIF9SZXBseVVzZXJEYXRhKG9iamVjdCk6CisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBk YXRhKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jb3Vu dGVyID0gMAorICAqICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAqLworLSAgX19weXhfdHVw bGVfXzI4ID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19zZWxmLCBfX3B5eF9uX3NfZGF0YSk7 IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzI4KSkgX19QWVhfRVJSKDAsIDM0NywgX19weXhf TDFfZXJyb3IpCisrICBfX3B5eF90dXBsZV9fMjggPSBQeVR1cGxlX1BhY2soMiwgX19weXhfbl9z X3NlbGYsIF9fcHl4X25fc19kYXRhKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMjgpKSBf X1BZWF9FUlIoMCwgMzQ5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 dXBsZV9fMjgpOworICAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fMjgpOworLSAgX19weXhf Y29kZW9ial9fMjkgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgMiwgMCwgQ09f T1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzI4LCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2 X3B5eCwgX19weXhfbl9zX2luaXQsIDM0NywgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtl bHkoIV9fcHl4X2NvZGVvYmpfXzI5KSkgX19QWVhfRVJSKDAsIDM0NywgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF9jb2Rlb2JqX18yOSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygyLCAw LCAyLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMjgsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGli c19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfaW5pdCwgMzQ5LCBfX3B5eF9lbXB0eV9ieXRlcyk7 IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMjkpKSBfX1BZWF9FUlIoMCwgMzQ5LCBfX3B5 eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTIK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNTQKKyAgKiAgICAgICAgIHNl bGYub2JzZXJ2ZWQgPSBGYWxzZQorICAqIAorICAqICAgICBkZWYgYWRkKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBzZWxmLmNvdW50ZXIgKz0gMQorICAq IAorICAqLworLSAgX19weXhfdHVwbGVfXzMwID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19z ZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9fMzApKSBfX1BZWF9FUlIoMCwgMzUyLCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX18zMCA9IFB5VHVwbGVfUGFjaygxLCBfX3B5 eF9uX3Nfc2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzMwKSkgX19QWVhfRVJSKDAs IDM1NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdHVwbGVfXzMwKTsK KyAgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzMwKTsKKy0gIF9fcHl4X2NvZGVvYmpfXzMx ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAsIENPX09QVElNSVpFRHxD T19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf ZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18zMCwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2X21wdl9weXgsIF9fcHl4 X25fc19hZGQsIDM1MiwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2Nv ZGVvYmpfXzMxKSkgX19QWVhfRVJSKDAsIDM1MiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF9j b2Rlb2JqX18zMSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19P UFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVw bGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMzAsIF9fcHl4X2VtcHR5X3R1cGxl LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZf cHl4LCBfX3B5eF9uX3NfYWRkLCAzNTQsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF9jb2Rlb2JqX18zMSkpIF9fUFlYX0VSUigwLCAzNTQsIF9fcHl4X0wxX2Vycm9yKQor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NworICAqICAgICAgICAgc2VsZi5jb3VudGVyICs9 IDEKKyAgKiAKKyAgKiAgICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jb3VudGVyIC09IDEKKyAgKiAKKyAgKi8KKy0gIF9f cHl4X3R1cGxlX18zMiA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9uX3Nfc2VsZik7IGlmICh1bmxp a2VseSghX19weXhfdHVwbGVfXzMyKSkgX19QWVhfRVJSKDAsIDM1NSwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90dXBsZV9fMzIgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18zMikpIF9fUFlYX0VSUigwLCAzNTcsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18zMik7CisgICBfX1B5eF9HSVZF UkVGKF9fcHl4X3R1cGxlX18zMik7CistICBfX3B5eF9jb2Rlb2JqX18zMyA9IChQeU9iamVjdCop X19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBf X3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBf X3B5eF90dXBsZV9fMzIsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfcmVtb3ZlLCAz NTUsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18zMykp IF9fUFlYX0VSUigwLCAzNTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfY29kZW9ial9fMzMg PSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENP X05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzMyLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhf bl9zX3JlbW92ZSwgMzU3LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhf Y29kZW9ial9fMzMpKSBfX1BZWF9FUlIoMCwgMzU3LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTMzCisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTEzNQorICAqIAorICAqIGNsYXNzIENhbGxiYWNrVGhyZWFkKFRo cmVhZCk6CisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICogICAgICAgICBz ZWxmLmRhZW1vbiA9IFRydWUKKyAgKi8KKy0gIF9fcHl4X3R1cGxlX18zNCA9IFB5VHVwbGVfUGFj aygxLCBfX3B5eF9uX3Nfc2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzM0KSkgX19Q WVhfRVJSKDAsIDExMzMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdHVwbGVfXzM0ID0gUHlU dXBsZV9QYWNrKDEsIF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90dXBsZV9f MzQpKSBfX1BZWF9FUlIoMCwgMTEzNSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdHVwbGVfXzM0KTsKKyAgIF9fUHl4X0dJVkVSRUYoX19weXhfdHVwbGVfXzM0KTsKKy0g IF9fcHl4X2NvZGVvYmpfXzM1ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEs IDAsIENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18zNCwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5 bXB2X21wdl9weXgsIF9fcHl4X25fc19pbml0LCAxMTMzLCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlm ICh1bmxpa2VseSghX19weXhfY29kZW9ial9fMzUpKSBfX1BZWF9FUlIoMCwgMTEzMywgX19weXhf TDFfZXJyb3IpCisrICBfX3B5eF9jb2Rlb2JqX18zNSA9IChQeU9iamVjdCopX19QeXhfUHlDb2Rl X05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9i eXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9f MzQsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRj dXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfaW5pdCwgMTEzNSwgX19weXhfZW1w dHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzM1KSkgX19QWVhfRVJSKDAs IDExMzUsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjExNDEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQzCisg ICogICAgICAgICBzZWxmLmlzc2h1dGRvd24gPSBGYWxzZQorICAqIAorICAqICAgICBkZWYgc2h1 dGRvd24oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHNl bGYuaXNzaHV0ZG93biA9IFRydWUKKyAgKiAgICAgICAgIHNlbGYuY2FsbGJhY2sgPSBOb25lCisg ICovCistICBfX3B5eF90dXBsZV9fMzYgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYp OyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18zNikpIF9fUFlYX0VSUigwLCAxMTQxLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX18zNiA9IFB5VHVwbGVfUGFjaygxLCBfX3B5eF9u X3Nfc2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzM2KSkgX19QWVhfRVJSKDAsIDEx NDMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18zNik7Cisg ICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18zNik7CistICBfX3B5eF9jb2Rlb2JqX18zNyA9 IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUlaRUR8Q09f TkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMzYsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5eF9u X3Nfc2h1dGRvd24sIDExNDEsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF9jb2Rlb2JqX18zNykpIF9fUFlYX0VSUigwLCAxMTQxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X2NvZGVvYmpfXzM3ID0gKFB5T2JqZWN0KilfX1B5eF9QeUNvZGVfTmV3KDEsIDAsIDEsIDAs IENPX09QVElNSVpFRHxDT19ORVdMT0NBTFMsIF9fcHl4X2VtcHR5X2J5dGVzLCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3R1cGxlX18zNiwgX19weXhfZW1wdHlf dHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9rcF9zX3ZpZGN1dHRlcl9saWJzX3B5bXB2 X21wdl9weXgsIF9fcHl4X25fc19zaHV0ZG93biwgMTE0MywgX19weXhfZW1wdHlfYnl0ZXMpOyBp ZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzM3KSkgX19QWVhfRVJSKDAsIDExNDMsIF9fcHl4 X0wxX2Vycm9yKQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDYK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ4CisgICogICAgICAgICBz ZWxmLmxvY2sucmVsZWFzZSgpCisgICogCisgICogICAgIGRlZiBjYWxsKHNlbGYpOiAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgpCisg ICogCisgICovCistICBfX3B5eF90dXBsZV9fMzggPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9z X3NlbGYpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX18zOCkpIF9fUFlYX0VSUigwLCAxMTQ2 LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX18zOCA9IFB5VHVwbGVfUGFjaygxLCBf X3B5eF9uX3Nfc2VsZik7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzM4KSkgX19QWVhfRVJS KDAsIDExNDgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX18z OCk7CisgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX18zOCk7CistICBfX3B5eF9jb2Rlb2Jq X18zOSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygxLCAwLCAxLCAwLCBDT19PUFRJTUla RUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fMzgsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBf X3B5eF9uX3NfY2FsbCwgMTE0NiwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9f cHl4X2NvZGVvYmpfXzM5KSkgX19QWVhfRVJSKDAsIDExNDYsIF9fcHl4X0wxX2Vycm9yKQorKyAg X19weXhfY29kZW9ial9fMzkgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwg MCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzM4LCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHlt cHZfbXB2X3B5eCwgX19weXhfbl9zX2NhbGwsIDExNDgsIF9fcHl4X2VtcHR5X2J5dGVzKTsgaWYg KHVubGlrZWx5KCFfX3B5eF9jb2Rlb2JqX18zOSkpIF9fUFlYX0VSUigwLCAxMTQ4LCBfX3B5eF9M MV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTQ5Cisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1MQorICAqICAgICAgICAgc2Vs Zi5sb2NrLnJlbGVhc2UoKQorICAqIAorICAqICAgICBkZWYgc2V0KHNlbGYsIGNhbGxiYWNrKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9 IGNhbGxiYWNrCisgICogCisgICovCistICBfX3B5eF90dXBsZV9fNDAgPSBQeVR1cGxlX1BhY2so MiwgX19weXhfbl9zX3NlbGYsIF9fcHl4X25fc19jYWxsYmFjayk7IGlmICh1bmxpa2VseSghX19w eXhfdHVwbGVfXzQwKSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdHVwbGVfXzQwID0gUHlUdXBsZV9QYWNrKDIsIF9fcHl4X25fc19zZWxmLCBfX3B5eF9uX3Nf Y2FsbGJhY2spOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX180MCkpIF9fUFlYX0VSUigwLCAx MTUxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNDApOwor ICAgX19QeXhfR0lWRVJFRihfX3B5eF90dXBsZV9fNDApOworLSAgX19weXhfY29kZW9ial9fNDEg PSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgMiwgMCwgQ09fT1BUSU1JWkVEfENP X05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzQwLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhf bl9zX3NldCwgMTE0OSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2Nv ZGVvYmpfXzQxKSkgX19QWVhfRVJSKDAsIDExNDksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhf Y29kZW9ial9fNDEgPSAoUHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMiwgMCwgMiwgMCwgQ09f T1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1 cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdHVwbGVfXzQwLCBfX3B5eF9lbXB0eV90dXBs ZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2 X3B5eCwgX19weXhfbl9zX3NldCwgMTE1MSwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtl bHkoIV9fcHl4X2NvZGVvYmpfXzQxKSkgX19QWVhfRVJSKDAsIDExNTEsIF9fcHl4X0wxX2Vycm9y KQorIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTIKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTU0CisgICogICAgICAgICBzZWxmLmNhbGxi YWNrID0gY2FsbGJhY2sKKyAgKiAKKyAgKiAgICAgZGVmIHJ1bihzZWxmKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNzaHV0ZG93bjoK KyAgKiAgICAgICAgICAgICBzZWxmLmxvY2suYWNxdWlyZShUcnVlKQorICAqLworLSAgX19weXhf dHVwbGVfXzQyID0gUHlUdXBsZV9QYWNrKDEsIF9fcHl4X25fc19zZWxmKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90dXBsZV9fNDIpKSBfX1BZWF9FUlIoMCwgMTE1MiwgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF90dXBsZV9fNDIgPSBQeVR1cGxlX1BhY2soMSwgX19weXhfbl9zX3NlbGYpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3R1cGxlX180MikpIF9fUFlYX0VSUigwLCAxMTU0LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90dXBsZV9fNDIpOworICAgX19QeXhfR0lWRVJF RihfX3B5eF90dXBsZV9fNDIpOworLSAgX19weXhfY29kZW9ial9fNDMgPSAoUHlPYmplY3QqKV9f UHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05FV0xPQ0FMUywgX19w eXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19w eXhfdHVwbGVfXzQyLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9zX3J1biwgMTE1Miwg X19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVvYmpfXzQzKSkgX19Q WVhfRVJSKDAsIDExNTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfY29kZW9ial9fNDMgPSAo UHlPYmplY3QqKV9fUHl4X1B5Q29kZV9OZXcoMSwgMCwgMSwgMCwgQ09fT1BUSU1JWkVEfENPX05F V0xPQ0FMUywgX19weXhfZW1wdHlfYnl0ZXMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0 eV90dXBsZSwgX19weXhfdHVwbGVfXzQyLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfZW1wdHlf dHVwbGUsIF9fcHl4X2twX3NfdmlkY3V0dGVyX2xpYnNfcHltcHZfbXB2X3B5eCwgX19weXhfbl9z X3J1biwgMTE1NCwgX19weXhfZW1wdHlfYnl0ZXMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2NvZGVv YmpfXzQzKSkgX19QWVhfRVJSKDAsIDExNTQsIF9fcHl4X0wxX2Vycm9yKQorIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNTcKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMTU5CisgICogICAgICAgICAgICAgc2VsZi5tcHZfY2FsbGJhY2soc2Vs Zi5jYWxsYmFjaykgaWYgc2VsZi5jYWxsYmFjayBlbHNlIE5vbmUKKyAgKiAKKyAgKiAgICAgZGVm IG1wdl9jYWxsYmFjayhzZWxmLCBjYWxsYmFjayk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAgICAgICAgIHRyeToKKyAgKiAgICAgICAgICAgICBjYWxsYmFjaygpCisgICovCist ICBfX3B5eF90dXBsZV9fNDQgPSBQeVR1cGxlX1BhY2soMywgX19weXhfbl9zX3NlbGYsIF9fcHl4 X25fc19jYWxsYmFjaywgX19weXhfbl9zX2UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3R1cGxlX180 NCkpIF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3R1cGxlX180 NCA9IFB5VHVwbGVfUGFjaygzLCBfX3B5eF9uX3Nfc2VsZiwgX19weXhfbl9zX2NhbGxiYWNrLCBf X3B5eF9uX3NfZSk7IGlmICh1bmxpa2VseSghX19weXhfdHVwbGVfXzQ0KSkgX19QWVhfRVJSKDAs IDExNTksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3R1cGxlX180NCk7 CisgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3R1cGxlX180NCk7CistICBfX3B5eF9jb2Rlb2JqX180 NSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygyLCAwLCAzLCAwLCBDT19PUFRJTUlaRUR8 Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDQsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9l bXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGlic19weW1wdl9tcHZfcHl4LCBfX3B5 eF9uX3NfbXB2X2NhbGxiYWNrLCAxMTU3LCBfX3B5eF9lbXB0eV9ieXRlcyk7IGlmICh1bmxpa2Vs eSghX19weXhfY29kZW9ial9fNDUpKSBfX1BZWF9FUlIoMCwgMTE1NywgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF9jb2Rlb2JqX180NSA9IChQeU9iamVjdCopX19QeXhfUHlDb2RlX05ldygyLCAw LCAzLCAwLCBDT19PUFRJTUlaRUR8Q09fTkVXTE9DQUxTLCBfX3B5eF9lbXB0eV9ieXRlcywgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90dXBsZV9fNDQsIF9fcHl4 X2VtcHR5X3R1cGxlLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfa3Bfc192aWRjdXR0ZXJfbGli c19weW1wdl9tcHZfcHl4LCBfX3B5eF9uX3NfbXB2X2NhbGxiYWNrLCAxMTU5LCBfX3B5eF9lbXB0 eV9ieXRlcyk7IGlmICh1bmxpa2VseSghX19weXhfY29kZW9ial9fNDUpKSBfX1BZWF9FUlIoMCwg MTE1OSwgX19weXhfTDFfZXJyb3IpCisgCisgICAvKiAiKHRyZWUgZnJhZ21lbnQpIjoxCisgICog ZGVmIF9fcHl4X3VucGlja2xlX0VuZE9mRmlsZVJlYWNoZWQoX19weXhfdHlwZSwgbG9uZyBfX3B5 eF9jaGVja3N1bSwgX19weXhfc3RhdGUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMjQ4NDAsOSArMjQ4NDAsOSBAQCBzdGF0aWMgQ1lUSE9OX1NNQUxMX0NPREUgaW50IF9fUHl4 X0luaXRHbG9iYWxzKHZvaWQpIHsKKyAgIGlmIChfX1B5eF9Jbml0U3RyaW5ncyhfX3B5eF9zdHJp bmdfdGFiKSA8IDApIF9fUFlYX0VSUigwLCAxLCBfX3B5eF9MMV9lcnJvcik7CisgICBfX3B5eF9p bnRfMCA9IFB5SW50X0Zyb21Mb25nKDApOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8wKSkgX19Q WVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfaW50XzEgPSBQeUludF9Gcm9t TG9uZygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfMSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5 eF9MMV9lcnJvcikKKy0gIF9fcHl4X2ludF8yID0gUHlJbnRfRnJvbUxvbmcoMik7IGlmICh1bmxp a2VseSghX19weXhfaW50XzIpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCisgICBf X3B5eF9pbnRfMyA9IFB5SW50X0Zyb21Mb25nKDMpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8z KSkgX19QWVhfRVJSKDAsIDEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfaW50XzMyID0gUHlJ bnRfRnJvbUxvbmcoMzIpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8zMikpIF9fUFlYX0VSUigw LCAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X2ludF8xMDkgPSBQeUludF9Gcm9tTG9uZygx MDkpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8xMDkpKSBfX1BZWF9FUlIoMCwgMSwgX19weXhf TDFfZXJyb3IpCisgICBfX3B5eF9pbnRfNTcxMzE2OSA9IFB5SW50X0Zyb21Mb25nKDU3MTMxNjlM KTsgaWYgKHVubGlrZWx5KCFfX3B5eF9pbnRfNTcxMzE2OSkpIF9fUFlYX0VSUigwLCAxLCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fcHl4X2ludF85MDk1ODI2MiA9IFB5SW50X0Zyb21Mb25nKDkwOTU4 MjYyTCk7IGlmICh1bmxpa2VseSghX19weXhfaW50XzkwOTU4MjYyKSkgX19QWVhfRVJSKDAsIDEs IF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfaW50XzE0MjAzNjkxMCA9IFB5SW50X0Zyb21Mb25n KDE0MjAzNjkxMEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X2ludF8xNDIwMzY5MTApKSBfX1BZWF9F UlIoMCwgMSwgX19weXhfTDFfZXJyb3IpCitAQCAtMjQ4OTcsMTIyICsyNDg5NywxMjIgQEAgc3Rh dGljIGludCBfX1B5eF9tb2Rpbml0X3R5cGVfaW5pdF9jb2RlKHZvaWQpIHsKKyAgIC8qLS0tIFR5 cGUgaW5pdCBjb2RlIC0tLSovCisgICBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9FbmRPZkZpbGVSZWFjaGVkID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RW5kT2ZGaWxlUmVhY2hlZDsKKyAgIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RW5kT2ZGaWxlUmVhY2hlZC5faW5pdCA9IChQeU9iamVjdCAqKCopKHN0cnVjdCBfX3B5eF9vYmpf OXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQgKiwgc3RydWN0IG1wdl9ldmVu dF9lbmRfZmlsZSAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNkVuZE9mRmlsZVJl YWNoZWRfX2luaXQ7CistICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9fcHl4 X0wxX2Vycm9yKQorKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCkgPCAwKSBfX1BZWF9FUlIoMCwgMTU4LCBfX3B5eF9M MV9lcnJvcikKKyAgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKKyAgIF9fcHl4X3R5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQudHBfcHJpbnQgPSAwOwor ICAgI2VuZGlmCisgICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZ VFlQRV9MT09LVVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf RW5kT2ZGaWxlUmVhY2hlZC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQudHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2VuZXJp Y0dldEF0dHIpKSB7CisgICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9m RmlsZVJlYWNoZWQudHBfZ2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cjsK KyAgIH0KKy0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRW5kT2ZGaWxlUmVhY2hlZC50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9fcHl4 X0wxX2Vycm9yKQorLSAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX0Vu ZE9mRmlsZVJlYWNoZWQsIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAxNTYsIF9fcHl4X0wxX2Vy cm9yKQorLSAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkKSA8IDApIF9fUFlYX0VSUigwLCAx NTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkLnRwX2RpY3QsIF9fcHl4X3Z0YWJw dHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkgX19QWVhfRVJS KDAsIDE1OCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9t LCBfX3B5eF9uX3NfRW5kT2ZGaWxlUmVhY2hlZCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkgX19QWVhfRVJSKDAsIDE1 OCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCop Jl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0VuZE9mRmlsZVJlYWNoZWQpIDwgMCkg X19QWVhfRVJSKDAsIDE1OCwgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRW5kT2ZGaWxlUmVhY2hlZCA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FbmRPZkZpbGVSZWFjaGVkOworICAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfTG9nTWVzc2FnZSA9ICZfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0xvZ01lc3NhZ2U7CisgICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xv Z01lc3NhZ2UuX2luaXQgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlICosIHN0cnVjdCBtcHZfZXZlbnRfbG9nX21lc3NhZ2Ug KikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTBMb2dNZXNzYWdlX19pbml0OworLSAg aWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVz c2FnZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeVR5 cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UpIDwg MCkgX19QWVhfRVJSKDAsIDE4NCwgX19weXhfTDFfZXJyb3IpCisgICAjaWYgUFlfVkVSU0lPTl9I RVggPCAweDAzMDgwMEIxCisgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dN ZXNzYWdlLnRwX3ByaW50ID0gMDsKKyAgICNlbmRpZgorICAgaWYgKChDWVRIT05fVVNFX1RZUEVf U0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtlbHkoIV9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UudHBfZGljdG9mZnNldCAmJiBfX3B5eF90 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlLnRwX2dldGF0dHJvID09IFB5T2Jq ZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworICAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Mb2dNZXNzYWdlLnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0 dHI7CisgICB9CistICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0xvZ01lc3NhZ2UudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRs aWJzXzNtcHZfTG9nTWVzc2FnZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJv cikKKy0gIGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19Mb2dNZXNzYWdl LCAoUHlPYmplY3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVzc2Fn ZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChfX1B5eF9z ZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf TG9nTWVzc2FnZSkgPCAwKSBfX1BZWF9FUlIoMCwgMTgyLCBfX3B5eF9MMV9lcnJvcikKKysgIGlm IChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfTG9nTWVz c2FnZS50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNz YWdlKSA8IDApIF9fUFlYX0VSUigwLCAxODQsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5T2Jq ZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX0xvZ01lc3NhZ2UsIChQeU9iamVjdCAqKSZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKSA8IDApIF9fUFlYX0VS UigwLCAxODQsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlP YmplY3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Mb2dNZXNzYWdlKSA8IDAp IF9fUFlYX0VSUigwLCAxODQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0xvZ01lc3NhZ2UgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfTG9nTWVzc2FnZTsKKyAgIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2 X1Byb3BlcnR5ID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHk7 CisgICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5Ll9pbml0ID0g KFB5T2JqZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJv cGVydHkgKiwgc3RydWN0IG1wdl9ldmVudF9wcm9wZXJ0eSAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl84UHJvcGVydHlfX2luaXQ7CistICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0eSkgPCAwKSBfX1BZWF9FUlIoMCwgMjQz LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSA8IDApIF9fUFlYX0VSUigwLCAyNDUsIF9fcHl4X0wx X2Vycm9yKQorICAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQorICAgX19weXhfdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfcHJpbnQgPSAwOworICAgI2VuZGlm CisgICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9MT09L VVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHku dHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Qcm9wZXJ0 eS50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKyAgICAgX19weXhf dHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZ2V0YXR0cm8gPSBfX1B5eF9Q eU9iamVjdF9HZW5lcmljR2V0QXR0cjsKKyAgIH0KKy0gIGlmIChfX1B5eF9TZXRWdGFibGUoX19w eXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkudHBfZGljdCwgX19weXhfdnRh YnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpIDwgMCkgX19QWVhfRVJSKDAsIDI0 MywgX19weXhfTDFfZXJyb3IpCistICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5 eF9uX3NfUHJvcGVydHksIChQeU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Qcm9wZXJ0eSkgPCAwKSBfX1BZWF9FUlIoMCwgMjQzLCBfX3B5eF9MMV9lcnJvcikKKy0g IGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUHJvcGVydHkpIDwgMCkgX19QWVhfRVJSKDAsIDI0MywgX19weXhfTDFfZXJy b3IpCisrICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1Byb3BlcnR5LnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2 X1Byb3BlcnR5KSA8IDApIF9fUFlYX0VSUigwLCAyNDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX1Byb3BlcnR5LCAoUHlPYmplY3Qg KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUHJvcGVydHkpIDwgMCkgX19QWVhf RVJSKDAsIDI0NSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQ eU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1Byb3BlcnR5KSA8IDAp IF9fUFlYX0VSUigwLCAyNDUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X1Byb3BlcnR5ID0gJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1Byb3BlcnR5OworICAgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZl bnQgPSAmX19weXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudDsKKyAgIF9fcHl4 X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQuX2RhdGEgPSAoUHlPYmplY3QgKigq KShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAqLCBzdHJ1Y3Qg bXB2X2V2ZW50ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVFdmVudF9fZGF0YTsK KyAgIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQuX2luaXQgPSAoUHlP YmplY3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCAq LCBzdHJ1Y3QgbXB2X2V2ZW50ICosIFB5T2JqZWN0ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGli c18zbXB2XzVFdmVudF9faW5pdDsKKy0gIGlmIChQeVR5cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KSA8IDApIF9fUFlYX0VSUigwLCAyNTYsIF9fcHl4X0wx X2Vycm9yKQorKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfRXZlbnQpIDwgMCkgX19QWVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJyb3IpCisgICAj aWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDgwMEIxCisgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9FdmVudC50cF9wcmludCA9IDA7CisgICAjZW5kaWYKKyAgIGlmICgoQ1lUSE9O X1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudC50cF9kaWN0b2Zmc2V0ICYmIF9f cHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50LnRwX2dldGF0dHJvID09IFB5T2Jq ZWN0X0dlbmVyaWNHZXRBdHRyKSkgeworICAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudC50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOwor ICAgfQorLSAgaWYgKF9fUHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9FdmVudC50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9F dmVudCkgPCAwKSBfX1BZWF9FUlIoMCwgMjU2LCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChQeU9i amVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19FdmVudCwgKFB5T2JqZWN0ICopJl9fcHl4 X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0V2ZW50KSA8IDApIF9fUFlYX0VSUigwLCAyNTYs IF9fcHl4X0wxX2Vycm9yKQorLSAgaWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZf X3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCkgPCAwKSBfX1BZWF9FUlIoMCwg MjU2LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfRXZlbnQpIDwgMCkgX19QWVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJy b3IpCisrICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfRXZlbnQsIChQ eU9iamVjdCAqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9FdmVudCkgPCAwKSBf X1BZWF9FUlIoMCwgMjU4LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9zZXR1cF9yZWR1 Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQpIDwg MCkgX19QWVhfRVJSKDAsIDI1OCwgX19weXhfTDFfZXJyb3IpCisgICBfX3B5eF9wdHlwZV85dmlk Y3V0dGVyXzRsaWJzXzNtcHZfRXZlbnQgPSAmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfRXZlbnQ7CisgICBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 ID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dDsKKyAgIF9fcHl4 X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC5fcHJlcF9ub2RlX2xpc3QgPSAo c3RydWN0IG1wdl9ub2RlX2xpc3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9Db250ZXh0ICosIFB5T2JqZWN0ICopKV9fcHl4X2ZfOXZpZGN1dHRlcl80bGlic18z bXB2XzdDb250ZXh0X19wcmVwX25vZGVfbGlzdDsKKyAgIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dC5fcHJlcF9ub2RlX21hcCA9IChzdHJ1Y3QgbXB2X25vZGVfbGlz dCAqKCopKHN0cnVjdCBfX3B5eF9vYmpfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQgKiwg UHlPYmplY3QgKikpX19weXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfN0NvbnRleHRfX3ByZXBf bm9kZV9tYXA7CisgICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQu X3ByZXBfbmF0aXZlX3ZhbHVlID0gKHN0cnVjdCBtcHZfbm9kZSAoKikoc3RydWN0IF9fcHl4X29i al85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAq KSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl83Q29udGV4dF9fcHJlcF9uYXRpdmVfdmFs dWU7CisgICBfX3B5eF92dGFibGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQuX2ZyZWVf bmF0aXZlX3ZhbHVlID0gKFB5T2JqZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVy XzRsaWJzXzNtcHZfQ29udGV4dCAqLCBzdHJ1Y3QgbXB2X25vZGUpKV9fcHl4X2ZfOXZpZGN1dHRl cl80bGlic18zbXB2XzdDb250ZXh0X19mcmVlX25hdGl2ZV92YWx1ZTsKKy0gIGlmIChQeVR5cGVf UmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19Q WVhfRVJSKDAsIDM1OSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5 eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCAz NjEsIF9fcHl4X0wxX2Vycm9yKQorICAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQor ICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC50cF9wcmludCA9IDA7 CisgICAjZW5kaWYKKyAgIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYmIENZVEhPTl9VU0Vf UFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9Db250ZXh0LnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dC50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKyAg ICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC50cF9nZXRhdHRybyA9 IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyOworICAgfQorLSAgaWYgKF9fUHl4X1NldFZ0 YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LnRwX2RpY3QsIF9f cHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJS KDAsIDM1OSwgX19weXhfTDFfZXJyb3IpCistICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9t LCBfX3B5eF9uX3NfQ29udGV4dCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDM1OSwgX19weXhfTDFfZXJyb3Ip CistICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDM1OSwgX19weXhfTDFf ZXJyb3IpCisrICBpZiAoX19QeXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X0NvbnRleHQudHBfZGljdCwgX19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNt cHZfQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMzYxLCBfX3B5eF9MMV9lcnJvcikKKysgIGlm IChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19Db250ZXh0LCAoUHlPYmplY3Qg KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCkgPCAwKSBfX1BZWF9F UlIoMCwgMzYxLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5 T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCkgPCAwKSBf X1BZWF9FUlIoMCwgMzYxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0ID0gJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQ7CisgICBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVy UGFyYW1zID0gJl9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFt czsKKyAgIF9fcHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy5h ZGRfdm9pZHAgPSAoUHlPYmplY3QgKigqKShzdHJ1Y3QgX19weXhfb2JqXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl9fUmVuZGVyUGFyYW1zICosIGVudW0gbXB2X3JlbmRlcl9wYXJhbV90eXBlLCB2b2lk ICosIHN0cnVjdCBfX3B5eF9vcHRfYXJnc185dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTNfUmVuZGVy UGFyYW1zX2FkZF92b2lkcCAqX19weXhfb3B0aW9uYWxfYXJncykpX19weXhfZl85dmlkY3V0dGVy XzRsaWJzXzNtcHZfMTNfUmVuZGVyUGFyYW1zX2FkZF92b2lkcDsKKyAgIF9fcHl4X3Z0YWJsZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy5hZGRfaW50ID0gKFB5T2JqZWN0ICoo Kikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAq LCBlbnVtIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSwgaW50KSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX2ludDsKKyAgIF9fcHl4X3Z0YWJsZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy5hZGRfc3RyaW5nID0gKFB5T2JqZWN0ICooKiko c3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcyAqLCBl bnVtIG1wdl9yZW5kZXJfcGFyYW1fdHlwZSwgY2hhciAqKSlfX3B5eF9mXzl2aWRjdXR0ZXJfNGxp YnNfM21wdl8xM19SZW5kZXJQYXJhbXNfYWRkX3N0cmluZzsKKy0gIGlmIChQeVR5cGVfUmVhZHko Jl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMpIDwgMCkgX19Q WVhfRVJSKDAsIDg4MSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5 eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKSA8IDApIF9fUFlYX0VS UigwLCA4ODMsIF9fcHl4X0wxX2Vycm9yKQorICAgI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4 MDBCMQorICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50 cF9wcmludCA9IDA7CisgICAjZW5kaWYKKyAgIGlmICgoQ1lUSE9OX1VTRV9UWVBFX1NMT1RTICYm IENZVEhPTl9VU0VfUFlUWVBFX0xPT0tVUCkgJiYgbGlrZWx5KCFfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zLnRwX2RpY3RvZmZzZXQgJiYgX19weXhfdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9nZXRhdHRybyA9PSBQeU9iamVj dF9HZW5lcmljR2V0QXR0cikpIHsKKyAgICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNt cHZfX1JlbmRlclBhcmFtcy50cF9nZXRhdHRybyA9IF9fUHl4X1B5T2JqZWN0X0dlbmVyaWNHZXRB dHRyOworICAgfQorLSAgaWYgKF9fUHl4X1NldFZ0YWJsZShfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zLnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRl cl80bGlic18zbXB2X19SZW5kZXJQYXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MSwgX19weXhf TDFfZXJyb3IpCistICBpZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfUmVu ZGVyUGFyYW1zLCAoUHlPYmplY3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf X1JlbmRlclBhcmFtcykgPCAwKSBfX1BZWF9FUlIoMCwgODgxLCBfX3B5eF9MMV9lcnJvcikKKy0g IGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfX1JlbmRlclBhcmFtcykgPCAwKSBfX1BZWF9FUlIoMCwgODgxLCBfX3B5eF9M MV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfX1JlbmRlclBhcmFtcy50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zKSA8IDApIF9fUFlYX0VSUigwLCA4ODMsIF9fcHl4X0wx X2Vycm9yKQorKyAgaWYgKFB5T2JqZWN0X1NldEF0dHIoX19weXhfbSwgX19weXhfbl9zX1JlbmRl clBhcmFtcywgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19S ZW5kZXJQYXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MywgX19weXhfTDFfZXJyb3IpCisrICBp ZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X19SZW5kZXJQYXJhbXMpIDwgMCkgX19QWVhfRVJSKDAsIDg4MywgX19weXhfTDFf ZXJyb3IpCisgICBfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX1JlbmRlclBhcmFt cyA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fUmVuZGVyUGFyYW1zOworICAg X19weXhfdnRhYnB0cl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvID0gJl9f cHl4X3Z0YWJsZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvOworICAgX19w eXhfdnRhYmxlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJGcmFtZUluZm8uX2Zyb21fc3Ry dWN0ID0gKFB5T2JqZWN0ICooKikoc3RydWN0IF9fcHl4X29ial85dmlkY3V0dGVyXzRsaWJzXzNt cHZfUmVuZGVyRnJhbWVJbmZvICosIHN0cnVjdCBtcHZfcmVuZGVyX2ZyYW1lX2luZm8gKikpX19w eXhfZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTVSZW5kZXJGcmFtZUluZm9fX2Zyb21fc3RydWN0 OworLSAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf UmVuZGVyRnJhbWVJbmZvKSA8IDApIF9fUFlYX0VSUigwLCA5MjgsIF9fcHl4X0wxX2Vycm9yKQor KyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVu ZGVyRnJhbWVJbmZvKSA8IDApIF9fUFlYX0VSUigwLCA5MzAsIF9fcHl4X0wxX2Vycm9yKQorICAg I2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzA4MDBCMQorICAgX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX3ByaW50ID0gMDsKKyAgICNlbmRpZgorICAg aWYgKChDWVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAm JiBsaWtlbHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1lSW5m by50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRl ckZyYW1lSW5mby50cF9nZXRhdHRybyA9PSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cikpIHsKKyAg ICAgX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2dl dGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7CisgICB9CistICBpZiAoX19Q eXhfU2V0VnRhYmxlKF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckZyYW1l SW5mby50cF9kaWN0LCBfX3B5eF92dGFicHRyXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJG cmFtZUluZm8pIDwgMCkgX19QWVhfRVJSKDAsIDkyOCwgX19weXhfTDFfZXJyb3IpCistICBpZiAo X19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1JlbmRlckZyYW1lSW5mbykgPCAwKSBfX1BZWF9FUlIoMCwgOTI4LCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX1B5eF9TZXRWdGFibGUoX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUmVuZGVyRnJhbWVJbmZvLnRwX2RpY3QsIF9fcHl4X3Z0YWJwdHJfOXZpZGN1dHRlcl80 bGlic18zbXB2X1JlbmRlckZyYW1lSW5mbykgPCAwKSBfX1BZWF9FUlIoMCwgOTMwLCBfX3B5eF9M MV9lcnJvcikKKysgIGlmIChfX1B5eF9zZXR1cF9yZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyRnJhbWVJbmZvKSA8IDApIF9fUFlYX0VSUigw LCA5MzAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckZyYW1lSW5mbyA9ICZfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9S ZW5kZXJGcmFtZUluZm87CistICBpZiAoUHlUeXBlX1JlYWR5KCZfX3B5eF90eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCA5MzcsIF9fcHl4 X0wxX2Vycm9yKQorKyAgaWYgKFB5VHlwZV9SZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgOTM5LCBfX3B5eF9MMV9l cnJvcikKKyAgICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKKyAgIF9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQudHBfcHJpbnQgPSAwOworICAgI2Vu ZGlmCisgICBpZiAoKENZVEhPTl9VU0VfVFlQRV9TTE9UUyAmJiBDWVRIT05fVVNFX1BZVFlQRV9M T09LVVApICYmIGxpa2VseSghX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dC50cF9kaWN0b2Zmc2V0ICYmIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X1JlbmRlckNvbnRleHQudHBfZ2V0YXR0cm8gPT0gUHlPYmplY3RfR2VuZXJpY0dldEF0dHIpKSB7 CisgICAgIF9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQudHBf Z2V0YXR0cm8gPSBfX1B5eF9QeU9iamVjdF9HZW5lcmljR2V0QXR0cjsKKyAgIH0KKy0gIGlmIChQ eU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19SZW5kZXJDb250ZXh0LCAoUHlPYmpl Y3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCkgPCAw KSBfX1BZWF9FUlIoMCwgOTM3LCBfX3B5eF9MMV9lcnJvcikKKy0gIGlmIChfX1B5eF9zZXR1cF9y ZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgOTM3LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQ eU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25fc19SZW5kZXJDb250ZXh0LCAoUHlPYmpl Y3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCkgPCAw KSBfX1BZWF9FUlIoMCwgOTM5LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9zZXR1cF9y ZWR1Y2UoKFB5T2JqZWN0KikmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVy Q29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgOTM5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fcHl4 X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0ID0gJl9fcHl4X3R5cGVf OXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQ7CisgICBfX3B5eF90eXBlXzl2aWRj dXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX2Jhc2UgPSBfX3B5eF9wdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dDsKKy0gIGlmIChQeVR5cGVfUmVh ZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQp IDwgMCkgX19QWVhfRVJSKDAsIDExMjIsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5VHlwZV9S ZWFkeSgmX19weXhfdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4 dCkgPCAwKSBfX1BZWF9FUlIoMCwgMTEyNCwgX19weXhfTDFfZXJyb3IpCisgICAjaWYgUFlfVkVS U0lPTl9IRVggPCAweDAzMDgwMEIxCisgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9PcGVuR0xSZW5kZXJDb250ZXh0LnRwX3ByaW50ID0gMDsKKyAgICNlbmRpZgorICAgaWYgKChD WVRIT05fVVNFX1RZUEVfU0xPVFMgJiYgQ1lUSE9OX1VTRV9QWVRZUEVfTE9PS1VQKSAmJiBsaWtl bHkoIV9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQu dHBfZGljdG9mZnNldCAmJiBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xS ZW5kZXJDb250ZXh0LnRwX2dldGF0dHJvID09IFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKSkgewor ICAgICBfX3B5eF90eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0 LnRwX2dldGF0dHJvID0gX19QeXhfUHlPYmplY3RfR2VuZXJpY0dldEF0dHI7CisgICB9CistICBp ZiAoUHlPYmplY3RfU2V0QXR0cihfX3B5eF9tLCBfX3B5eF9uX3NfT3BlbkdMUmVuZGVyQ29udGV4 dCwgKFB5T2JqZWN0ICopJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJl bmRlckNvbnRleHQpIDwgMCkgX19QWVhfRVJSKDAsIDExMjIsIF9fcHl4X0wxX2Vycm9yKQorLSAg aWYgKF9fUHl4X3NldHVwX3JlZHVjZSgoUHlPYmplY3QqKSZfX3B5eF90eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9PcGVuR0xSZW5kZXJDb250ZXh0KSA8IDApIF9fUFlYX0VSUigwLCAxMTIyLCBf X3B5eF9MMV9lcnJvcikKKysgIGlmIChQeU9iamVjdF9TZXRBdHRyKF9fcHl4X20sIF9fcHl4X25f c19PcGVuR0xSZW5kZXJDb250ZXh0LCAoUHlPYmplY3QgKikmX19weXhfdHlwZV85dmlkY3V0dGVy XzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dCkgPCAwKSBfX1BZWF9FUlIoMCwgMTEyNCwg X19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfc2V0dXBfcmVkdWNlKChQeU9iamVjdCopJl9f cHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQpIDwgMCkg X19QWVhfRVJSKDAsIDExMjQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X09wZW5HTFJlbmRlckNvbnRleHQgPSAmX19weXhfdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfT3BlbkdMUmVuZGVyQ29udGV4dDsKKy0gIGlmIChQeVR5cGVfUmVhZHko Jl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vy cm9ycykgPCAwKSBfX1BZWF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeVR5 cGVfUmVhZHkoJl9fcHl4X3R5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0 cnVjdF9fX2Vycm9ycykgPCAwKSBfX1BZWF9FUlIoMCwgMzIwLCBfX3B5eF9MMV9lcnJvcikKKyAg ICNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwODAwQjEKKyAgIF9fcHl4X3R5cGVfOXZpZGN1dHRl cl80bGlic18zbXB2X19fcHl4X3Njb3BlX3N0cnVjdF9fX2Vycm9ycy50cF9wcmludCA9IDA7Cisg ICAjZW5kaWYKK0BAIC0yNTMxNSwyOSArMjUzMTUsMjkgQEAgaWYgKCFfX1B5eF9SZWZOYW5ueSkg eworICAqIF9fdmVyc2lvbl9fID0gIjAuMy4wIgorICAqIF9fYXV0aG9yX18gPSAiQW5kcmUgRCIg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorLSAqIF9SRVFVSVJFRF9DQVBJX01B Sk9SID0gMgorKyAqICNfUkVRVUlSRURfQ0FQSV9NQUpPUiA9IDIKKyAgKi8KKyAgIGlmIChQeURp Y3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfYXV0aG9yLCBfX3B5eF9rcF9zX0FuZHJlX0Qp IDwgMCkgX19QWVhfRVJSKDAsIDMxLCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMworLSAqIF9fYXV0aG9yX18gPSAiQW5kcmUgRCIKKy0g KiAKKy0gKiBfUkVRVUlSRURfQ0FQSV9NQUpPUiA9IDIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8 PDw8PAorLSAqIF9NSU5fQ0FQSV9NSU5PUiA9IDAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjozNQorKyAqICNfUkVRVUlSRURfQ0FQSV9NQUpPUiA9IDIKKysgKiAjX01JTl9D QVBJX01JTk9SID0gMAorKyAqIF9SRVFVSVJFRF9DQVBJX01BSk9SID0gMSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisrICogX01JTl9DQVBJX01JTk9SID0gMTA5CisgICogCisgICovCist ICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFK T1IsIF9fcHl4X2ludF8yKSA8IDApIF9fUFlYX0VSUigwLCAzMywgX19weXhfTDFfZXJyb3IpCisr ICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX1JFUVVJUkVEX0NBUElfTUFK T1IsIF9fcHl4X2ludF8xKSA8IDApIF9fUFlYX0VSUigwLCAzNSwgX19weXhfTDFfZXJyb3IpCisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MzQKKy0gKiAKKy0gKiBfUkVR VUlSRURfQ0FQSV9NQUpPUiA9IDIKKy0gKiBfTUlOX0NBUElfTUlOT1IgPSAwICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz NgorKyAqICNfTUlOX0NBUElfTUlOT1IgPSAwCisrICogX1JFUVVJUkVEX0NBUElfTUFKT1IgPSAx CisrICogX01JTl9DQVBJX01JTk9SID0gMTA5ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KyAgKiAKKyAgKiBjZGVmIHVuc2lnbmVkIGxvbmcgX0NBUElfVkVSU0lPTgorICAqLworLSAgaWYg KFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUiwgX19weXhf aW50XzApIDwgMCkgX19QWVhfRVJSKDAsIDM0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeURp Y3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfTUlOX0NBUElfTUlOT1IsIF9fcHl4X2ludF8x MDkpIDwgMCkgX19QWVhfRVJSKDAsIDM2LCBfX3B5eF9MMV9lcnJvcikKKyAKKy0gIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM5CisgICogCisgICogY2RlZiB1bnNpZ25lZCBsb25nIF9DQVBJX1ZFUlNJT04K KyAgKiB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitAQCAtMjUzNTIs NyArMjUzNTIsNyBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7CisgICAgICAgI2VuZGlmCisgICAg ICAgLyp0cnk6Ki8geworIAorLSAgICAgICAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjM4CisrICAgICAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDAKKyAg KiBjZGVmIHVuc2lnbmVkIGxvbmcgX0NBUElfVkVSU0lPTgorICAqIHdpdGggbm9naWw6CisgICog ICAgIF9DQVBJX1ZFUlNJT04gPSBtcHZfY2xpZW50X2FwaV92ZXJzaW9uKCkgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorQEAgLTI1MzYyLDcgKzI1MzYyLDcgQEAgaWYgKCFfX1B5eF9SZWZO YW5ueSkgeworICAgICAgICAgX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX0NBUElfVkVS U0lPTiA9IG1wdl9jbGllbnRfYXBpX3ZlcnNpb24oKTsKKyAgICAgICB9CisgCistICAgICAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM3CisrICAgICAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjM5CisgICogCisgICogY2RlZiB1bnNpZ25lZCBsb25nIF9DQVBJ X1ZFUlNJT04KKyAgKiB3aXRoIG5vZ2lsOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CitA QCAtMjUzODEsODAgKzI1MzgxLDgwIEBAIGlmICghX19QeXhfUmVmTmFubnkpIHsKKyAgICAgICB9 CisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDAKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MgorICAqICAgICBfQ0FQSV9WRVJTSU9O ID0gbXB2X2NsaWVudF9hcGlfdmVyc2lvbigpCisgICogCisgICogX0NBUElfTUFKT1IgPSBfQ0FQ SV9WRVJTSU9OID4+IDE2ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiBfQ0FQSV9N SU5PUiA9IF9DQVBJX1ZFUlNJT04gJiAweEZGRkYKKyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfMiA9 IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9uZygoX19weXhfdl85dmlkY3V0dGVyXzRsaWJz XzNtcHZfX0NBUElfVkVSU0lPTiA+PiAxNikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9f UFlYX0VSUigwLCA0MCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzIgPSBfX1B5eF9QeUlu dF9Gcm9tX3Vuc2lnbmVkX2xvbmcoKF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19DQVBJ X1ZFUlNJT04gPj4gMTYpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg NDIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBpZiAo UHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX0NBUElfTUFKT1IsIF9fcHl4X3RfMikg PCAwKSBfX1BZWF9FUlIoMCwgNDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5RGljdF9TZXRJ dGVtKF9fcHl4X2QsIF9fcHl4X25fc19DQVBJX01BSk9SLCBfX3B5eF90XzIpIDwgMCkgX19QWVhf RVJSKDAsIDQyLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBf X3B5eF90XzIgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQx CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMKKyAgKiAKKyAgKiBfQ0FQ SV9NQUpPUiA9IF9DQVBJX1ZFUlNJT04gPj4gMTYKKyAgKiBfQ0FQSV9NSU5PUiA9IF9DQVBJX1ZF UlNJT04gJiAweEZGRkYgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIAorICAqIGlm IF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01BSk9SIG9yIF9DQVBJX01JTk9SIDwgX01J Tl9DQVBJX01JTk9SOgorICAqLworLSAgX19weXhfdF8yID0gX19QeXhfUHlJbnRfRnJvbV91bnNp Z25lZF9sb25nKChfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9fQ0FQSV9WRVJTSU9OICYg MHhGRkZGKSk7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJSKDAsIDQxLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfMiA9IF9fUHl4X1B5SW50X0Zyb21fdW5zaWduZWRfbG9u ZygoX19weXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX0NBUElfVkVSU0lPTiAmIDB4RkZGRikp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0MywgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8yKTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShf X3B5eF9kLCBfX3B5eF9uX3NfQ0FQSV9NSU5PUiwgX19weXhfdF8yKSA8IDApIF9fUFlYX0VSUigw LCA0MSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19w eXhfbl9zX0NBUElfTUlOT1IsIF9fcHl4X3RfMikgPCAwKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4 X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMik7IF9fcHl4X3RfMiA9IDA7Cisg CistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDMKKysgIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NQorICAqIF9DQVBJX01JTk9SID0gX0NBUElfVkVSU0lP TiAmIDB4RkZGRgorICAqIAorICAqIGlmIF9DQVBJX01BSk9SICE9IF9SRVFVSVJFRF9DQVBJX01B Sk9SIG9yIF9DQVBJX01JTk9SIDwgX01JTl9DQVBJX01JTk9SOiAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogICAgIHJhaXNlIEltcG9ydEVycm9yKAorICAqICAgICAgICAgImxpYm1w diB2ZXJzaW9uIGlzIGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJQorICAq LworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4X25fc19DQVBJ X01BSk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzIsIF9fcHl4 X25fc19DQVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzIpKSBfX1BZWF9FUlIoMCwg NDUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMik7CistICBfX1B5 eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhfbl9zX1JFUVVJUkVEX0NBUElf TUFKT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCA0MywgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwgX19weXhf bl9zX1JFUVVJUkVEX0NBUElfTUFKT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCA0NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsK Ky0gIF9fcHl4X3RfNCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3RfMiwgX19weXhfdF8x LCBQeV9ORSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF80KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzQpKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF80ID0gUHlP YmplY3RfUmljaENvbXBhcmUoX19weXhfdF8yLCBfX3B5eF90XzEsIFB5X05FKTsgX19QeXhfWEdP VFJFRihfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA0 NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8yKTsgX19weXhfdF8y ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworLSAgX19w eXhfdF81ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNCk7IGlmICh1bmxpa2VseShf X3B5eF90XzUgPCAwKSkgX19QWVhfRVJSKDAsIDQzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNSA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzQpOyBpZiAodW5saWtlbHkoX19w eXhfdF81IDwgMCkpIF9fUFlYX0VSUigwLCA0NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9E RUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAgIGlmICghX19weXhfdF81KSB7Cisg ICB9IGVsc2UgeworICAgICBfX3B5eF90XzMgPSBfX3B5eF90XzU7CisgICAgIGdvdG8gX19weXhf TDZfYm9vbF9iaW5vcF9kb25lOworICAgfQorLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShf X3B5eF90XzQsIF9fcHl4X25fc19DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNCk7CistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfMSwg X19weXhfbl9zX01JTl9DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZ WF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzEsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19w eXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzEpOworLSAgX19weXhfdF8yID0gUHlPYmplY3RfUmljaENvbXBhcmUoX19weXhf dF80LCBfX3B5eF90XzEsIFB5X0xUKTsgX19QeXhfWEdPVFJFRihfX3B5eF90XzIpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMikpIF9fUFlYX0VSUigwLCA0MywgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShfX3B5eF90XzQsIF9fcHl4X3RfMSwgUHlf TFQpOyBfX1B5eF9YR09UUkVGKF9fcHl4X3RfMik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkg X19QWVhfRVJSKDAsIDQ1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3Rf MSA9IDA7CistICBfX3B5eF90XzUgPSBfX1B5eF9QeU9iamVjdF9Jc1RydWUoX19weXhfdF8yKTsg aWYgKHVubGlrZWx5KF9fcHl4X3RfNSA8IDApKSBfX1BZWF9FUlIoMCwgNDMsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF81ID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfMik7IGlm ICh1bmxpa2VseShfX3B5eF90XzUgPCAwKSkgX19QWVhfRVJSKDAsIDQ1LCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzIpOyBfX3B5eF90XzIgPSAwOworICAgX19weXhf dF8zID0gX19weXhfdF81OworICAgX19weXhfTDZfYm9vbF9iaW5vcF9kb25lOjsKKyAgIGlmICh1 bmxpa2VseShfX3B5eF90XzMpKSB7CisgCistICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo0NgorKyAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDgKKyAg KiAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCisgICogICAgICAgICAibGlibXB2IHZlcnNpb24gaXMg aW5jb3JyZWN0LiBSZXF1aXJlZCAlZC4lZCBnb3QgJWQuJWQuIiAlCisgICogICAgICAgICAgICAg KF9SRVFVSVJFRF9DQVBJX01BSk9SLCBfTUlOX0NBUElfTUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQ SV9NSU5PUikgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICApCisgICogCisg ICovCistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF8yLCBfX3B5eF9uX3Nf UkVRVUlSRURfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF8yKSkgX19QWVhfRVJS KDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShf X3B5eF90XzIsIF9fcHl4X25fc19SRVFVSVJFRF9DQVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzIpKSBfX1BZWF9FUlIoMCwgNDgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF8yKTsKKy0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzEsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUik7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkg X19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzEsIF9fcHl4X25fc19NSU5fQ0FQSV9NSU5PUik7IGlmICh1bmxpa2Vs eSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDQ4LCBfX3B5eF9MMV9lcnJvcikKKyAgICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfMSk7CistICAgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF80LCBfX3B5eF9uX3NfQ0FQSV9NQUpPUik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkg X19QWVhfRVJSKDAsIDQ2LCBfX3B5eF9MMV9lcnJvcikKKysgICAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzQsIF9fcHl4X25fc19DQVBJX01BSk9SKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9H T1RSRUYoX19weXhfdF80KTsKKy0gICAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90 XzYsIF9fcHl4X25fc19DQVBJX01JTk9SKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgNDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxO YW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX0NBUElfTUlOT1IpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCA0OCwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOworLSAgICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDYsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBf X3B5eF90XzcgPSBQeVR1cGxlX05ldyg0KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZ WF9FUlIoMCwgNDgsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF83 KTsKKyAgICAgX19QeXhfR0lWRVJFRihfX3B5eF90XzIpOworICAgICBQeVR1cGxlX1NFVF9JVEVN KF9fcHl4X3RfNywgMCwgX19weXhfdF8yKTsKK0BAIC0yNTQ2OSwzMiArMjU0NjksMzIgQEAgaWYg KCFfX1B5eF9SZWZOYW5ueSkgeworICAgICBfX3B5eF90XzQgPSAwOworICAgICBfX3B5eF90XzYg PSAwOworIAorLSAgICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUKKysgICAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ3CisgICogaWYgX0NBUElfTUFKT1Ig IT0gX1JFUVVJUkVEX0NBUElfTUFKT1Igb3IgX0NBUElfTUlOT1IgPCBfTUlOX0NBUElfTUlOT1I6 CisgICogICAgIHJhaXNlIEltcG9ydEVycm9yKAorICAqICAgICAgICAgImxpYm1wdiB2ZXJzaW9u IGlzIGluY29ycmVjdC4gUmVxdWlyZWQgJWQuJWQgZ290ICVkLiVkLiIgJSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICAgICAgKF9SRVFVSVJFRF9DQVBJX01BSk9SLCBf TUlOX0NBUElfTUlOT1IsIF9DQVBJX01BSk9SLCBfQ0FQSV9NSU5PUikKKyAgKiAgICAgKQorICAq LworLSAgICBfX3B5eF90XzYgPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXQoX19weXhfa3Bfc19saWJt cHZfdmVyc2lvbl9pc19pbmNvcnJlY3RfUmVxdSwgX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDUsIF9fcHl4X0wxX2Vycm9yKQorKyAgICBfX3B5eF90 XzYgPSBfX1B5eF9QeVN0cmluZ19Gb3JtYXQoX19weXhfa3Bfc19saWJtcHZfdmVyc2lvbl9pc19p bmNvcnJlY3RfUmVxdSwgX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgNDcsIF9fcHl4X0wxX2Vycm9yKQorICAgICBfX1B5eF9HT1RSRUYoX19weXhfdF82 KTsKKyAgICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgCistICAg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0NAorKyAgICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NDYKKyAgKiAKKyAgKiBpZiBfQ0FQSV9NQUpPUiAhPSBfUkVR VUlSRURfQ0FQSV9NQUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9NSU5fQ0FQSV9NSU5PUjoKKyAgKiAg ICAgcmFpc2UgSW1wb3J0RXJyb3IoICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgICAgICJsaWJtcHYgdmVyc2lvbiBpcyBpbmNvcnJlY3QuIFJlcXVpcmVkICVkLiVkIGdvdCAl ZC4lZC4iICUKKyAgKiAgICAgICAgICAgICAoX1JFUVVJUkVEX0NBUElfTUFKT1IsIF9NSU5fQ0FQ SV9NSU5PUiwgX0NBUElfTUFKT1IsIF9DQVBJX01JTk9SKQorICAqLworLSAgICBfX3B5eF90Xzcg PSBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X2J1aWx0aW5fSW1wb3J0RXJyb3IsIF9f cHl4X3RfNik7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQ0LCBfX3B5 eF9MMV9lcnJvcikKKysgICAgX19weXhfdF83ID0gX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhf X3B5eF9idWlsdGluX0ltcG9ydEVycm9yLCBfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNykpIF9fUFlYX0VSUigwLCA0NiwgX19weXhfTDFfZXJyb3IpCisgICAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzcpOworICAgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKKyAgICAgX19QeXhfUmFpc2UoX19weXhfdF83LCAwLCAwLCAwKTsKKyAgICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CistICAgIF9fUFlYX0VSUigwLCA0NCwgX19w eXhfTDFfZXJyb3IpCisrICAgIF9fUFlYX0VSUigwLCA0NiwgX19weXhfTDFfZXJyb3IpCisgCist ICAgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0MworKyAgICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NDUKKyAgKiBfQ0FQSV9NSU5PUiA9IF9DQVBJX1ZFUlNJ T04gJiAweEZGRkYKKyAgKiAKKyAgKiBpZiBfQ0FQSV9NQUpPUiAhPSBfUkVRVUlSRURfQ0FQSV9N QUpPUiBvciBfQ0FQSV9NSU5PUiA8IF9NSU5fQ0FQSV9NSU5PUjogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorQEAgLTI1NTAzLDMzICsyNTUwMywzMyBAQCBpZiAoIV9fUHl4X1JlZk5hbm55 KSB7CisgICovCisgICB9CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 NTIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NAorICAqICAgICB2b2lk IFB5X0luaXRpYWxpemUoKQorICAqIAorICAqIF9pc19weTMgPSBzeXMudmVyc2lvbl9pbmZvID49 ICgzLCkgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqIF9zdHJkZWNfZXJyID0gInN1 cnJvZ2F0ZWVzY2FwZSIgaWYgX2lzX3B5MyBlbHNlICJzdHJpY3QiCisgICogIyBtcHYgLT4gUHl0 aG9uCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNywgX19weXhf bl9zX3N5cyk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDUyLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF83LCBfX3B5 eF9uX3Nfc3lzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNTQsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CistICBfX3B5eF90XzYg PSBfX1B5eF9QeU9iamVjdF9HZXRBdHRyU3RyKF9fcHl4X3RfNywgX19weXhfbl9zX3ZlcnNpb25f aW5mbyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDUyLCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5T2JqZWN0X0dldEF0dHJTdHIoX19weXhf dF83LCBfX3B5eF9uX3NfdmVyc2lvbl9pbmZvKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgNTQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nik7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKy0gIF9fcHl4 X3RfNyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKF9fcHl4X3RfNiwgX19weXhfdHVwbGVfXzE4LCBQ eV9HRSk7IF9fUHl4X1hHT1RSRUYoX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzcp KSBfX1BZWF9FUlIoMCwgNTIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF83ID0gUHlPYmpl Y3RfUmljaENvbXBhcmUoX19weXhfdF82LCBfX3B5eF90dXBsZV9fMTgsIFB5X0dFKTsgX19QeXhf WEdPVFJFRihfX3B5eF90XzcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigw LCA1NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhf dF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfaXNfcHkz LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDUyLCBfX3B5eF9MMV9lcnJvcikKKysgIGlm IChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfaXNfcHkzLCBfX3B5eF90XzcpIDwg MCkgX19QWVhfRVJSKDAsIDU0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzcpOyBfX3B5eF90XzcgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjUzCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTUKKyAgKiAK KyAgKiBfaXNfcHkzID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywpCisgICogX3N0cmRlY19lcnIg PSAic3Vycm9nYXRlZXNjYXBlIiBpZiBfaXNfcHkzIGVsc2UgInN0cmljdCIgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICMgbXB2IC0+IFB5dGhvbgorICAqIGRlZiBfc3RyZGVjKHMp OgorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25f c19pc19weTMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA1MywgX19w eXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxOYW1lKF9fcHl4X3RfNiwgX19w eXhfbl9zX2lzX3B5Myk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDU1 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgX19weXhf dF8zID0gX19QeXhfUHlPYmplY3RfSXNUcnVlKF9fcHl4X3RfNik7IGlmICh1bmxpa2VseShfX3B5 eF90XzMgPCAwKSkgX19QWVhfRVJSKDAsIDUzLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3Rf MyA9IF9fUHl4X1B5T2JqZWN0X0lzVHJ1ZShfX3B5eF90XzYpOyBpZiAodW5saWtlbHkoX19weXhf dF8zIDwgMCkpIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAgIGlmIChfX3B5eF90XzMpIHsKKyAgICAg X19QeXhfSU5DUkVGKF9fcHl4X25fc19zdXJyb2dhdGVlc2NhcGUpOworQEAgLTI1NTM4LDM0ICsy NTUzOCwzNCBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7CisgICAgIF9fUHl4X0lOQ1JFRihfX3B5 eF9uX3Nfc3RyaWN0KTsKKyAgICAgX19weXhfdF83ID0gX19weXhfbl9zX3N0cmljdDsKKyAgIH0K Ky0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3Nfc3RyZGVjX2VyciwgX19w eXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA1MywgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlE aWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRlY19lcnIsIF9fcHl4X3RfNykgPCAw KSBfX1BZWF9FUlIoMCwgNTUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo1NworICAqIF9z dHJkZWNfZXJyID0gInN1cnJvZ2F0ZWVzY2FwZSIgaWYgX2lzX3B5MyBlbHNlICJzdHJpY3QiCisg ICogIyBtcHYgLT4gUHl0aG9uCisgICogZGVmIF9zdHJkZWMocyk6ICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgdHJ5OgorICAqICAgICAgICAgcmV0dXJuIHMuZGVjb2RlKCJ1 dGYtOCIsIF9zdHJkZWNfZXJyKQorICAqLworLSAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3 RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzFfc3RyZGVjLCBOVUxMLCBfX3B5 eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZ WF9FUlIoMCwgNTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25f TmV3RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzFfc3RyZGVjLCBOVUxMLCBf X3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBf X1BZWF9FUlIoMCwgNTcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3Rf Nyk7CistICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRlYywgX19w eXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA1NSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlE aWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmRlYywgX19weXhfdF83KSA8IDApIF9f UFlYX0VSUigwLCA1NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF83 KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo2MworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY1CisgICogCisgICog IyBQeXRob24gLT4gbXB2CisgICogZGVmIF9zdHJlbmMocyk6ICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKyAgKiAgICAgdHJ5OgorICAqICAgICAgICAgcmV0dXJuIHMuZW5jb2RlKCJ1dGYt OCIsIF9zdHJkZWNfZXJyKQorICAqLworLSAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3RXgo Jl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzNfc3RyZW5jLCBOVUxMLCBfX3B5eF9u X3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9F UlIoMCwgNjMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF83ID0gUHlDRnVuY3Rpb25fTmV3 RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzNfc3RyZW5jLCBOVUxMLCBfX3B5 eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZ WF9FUlIoMCwgNjUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7 CistICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmVuYywgX19weXhf dF83KSA8IDApIF9fUFlYX0VSUigwLCA2MywgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlEaWN0 X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX3N0cmVuYywgX19weXhfdF83KSA8IDApIF9fUFlY X0VSUigwLCA2NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsg X19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjcyCisgICogICAgICAgICBy ZXR1cm4gcworICAqIAorICAqIFB5X0luaXRpYWxpemUoKSAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CitAQCAtMjU1NzQsODgzICsyNTU3NCw4ODMgQEAgaWYgKCFfX1B5eF9SZWZOYW5ueSkg eworICAqLworICAgUHlfSW5pdGlhbGl6ZSgpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjcyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzQK KyAgKiBQeV9Jbml0aWFsaXplKCkKKyAgKiAKKyAgKiBjbGFzcyBFcnJvcnM6ICAgICAgICAgICAg ICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgIiIiU2V0IG9mIGtub3duIGVycm9yIGNvZGVzIGZy b20gTXB2RXJyb3IgYW5kIEV2ZW50IHJlc3BvbnNlcy4KKyAgKiAKKyAgKi8KKy0gIF9fcHl4X3Rf NyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2Vt cHR5X3R1cGxlLCBfX3B5eF9uX3NfRXJyb3JzLCBfX3B5eF9uX3NfRXJyb3JzLCAoUHlPYmplY3Qg KikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfa3Bfc19TZXRfb2Zf a25vd25fZXJyb3JfY29kZXNfZnJvbV9NcCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19Q WVhfRVJSKDAsIDcyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNyA9IF9fUHl4X1B5M01l dGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF9uX3NfRXJyb3JzLCBfX3B5eF9uX3NfRXJyb3JzLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhf bl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfa3Bfc19TZXRfb2Zfa25vd25fZXJyb3JfY29k ZXNfZnJvbV9NcCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDc0LCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODEKKyAgKiAgICAgWW91IHNob3VsZCBoYW5kbGUgdGhlIHBvc3NpYmlsaXR5 IHRoYXQgZXJyb3IgY29kZXMgbWF5IG5vdCBiZSBhbnkgb2YgdGhlc2UgdmFsdWVzLgorICAqICAg ICAiIiIKKyAgKiAgICAgc3VjY2VzcyA9IE1QVl9FUlJPUl9TVUNDRVNTICAgICAgICAgICAgICMg PDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgcXVldWVfZnVsbCA9IE1QVl9FUlJPUl9FVkVOVF9RVUVV RV9GVUxMCisgICogICAgIG5vbWVtID0gTVBWX0VSUk9SX05PTUVNCisgICovCistICBfX3B5eF90 XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfU1VDQ0VTUyk7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDc5LCBfX3B5eF9MMV9lcnJv cikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9F UlJPUl9TVUNDRVNTKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODEs IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19Q eXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc3VjY2VzcywgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCA3OSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc3VjY2VzcywgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCA4MSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhf dF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4Ijo4MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjgyCisgICogICAg ICIiIgorICAqICAgICBzdWNjZXNzID0gTVBWX0VSUk9SX1NVQ0NFU1MKKyAgKiAgICAgcXVldWVf ZnVsbCA9IE1QVl9FUlJPUl9FVkVOVF9RVUVVRV9GVUxMICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKyAgKiAgICAgbm9tZW0gPSBNUFZfRVJST1JfTk9NRU0KKyAgKiAgICAgdW5pbml0aWFs aXplZCA9IE1QVl9FUlJPUl9VTklOSVRJQUxJWkVECisgICovCistICBfX3B5eF90XzYgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfRVZFTlRfUVVFVUVfRlVMTCk7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgwLCBfX3B5eF9MMV9lcnJv cikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9F UlJPUl9FVkVOVF9RVUVVRV9GVUxMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgODIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cist ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcXVldWVfZnVs bCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4MCwgX19weXhfTDFfZXJyb3IpCisrICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcXVldWVfZnVsbCwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo4MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjgzCisgICogICAgIHN1Y2Nlc3MgPSBNUFZfRVJST1JfU1VDQ0VTUworICAqICAgICBxdWV1 ZV9mdWxsID0gTVBWX0VSUk9SX0VWRU5UX1FVRVVFX0ZVTEwKKyAgKiAgICAgbm9tZW0gPSBNUFZf RVJST1JfTk9NRU0gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICB1bmluaXRp YWxpemVkID0gTVBWX0VSUk9SX1VOSU5JVElBTElaRUQKKyAgKiAgICAgaW52YWxpZF9wYXJhbWV0 ZXIgPSBNUFZfRVJST1JfSU5WQUxJRF9QQVJBTUVURVIKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9f UHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9OT01FTSk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9OT01F TSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgzLCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX25vbWVtLCBfX3B5eF90XzYpIDwgMCkgX19QWVhf RVJSKDAsIDgxLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc19ub21lbSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4 MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4MgorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg0CisgICogICAgIHF1ZXVlX2Z1bGwgPSBN UFZfRVJST1JfRVZFTlRfUVVFVUVfRlVMTAorICAqICAgICBub21lbSA9IE1QVl9FUlJPUl9OT01F TQorICAqICAgICB1bmluaXRpYWxpemVkID0gTVBWX0VSUk9SX1VOSU5JVElBTElaRUQgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBpbnZhbGlkX3BhcmFtZXRlciA9IE1QVl9F UlJPUl9JTlZBTElEX1BBUkFNRVRFUgorICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfT1BU SU9OX05PVF9GT1VORAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVt X19tcHZfZXJyb3IoTVBWX0VSUk9SX1VOSU5JVElBTElaRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCA4MiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBf X1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfVU5JTklUSUFMSVpFRCk7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg0LCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNs YXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3VuaW5pdGlhbGl6ZWQsIF9fcHl4X3RfNikgPCAwKSBf X1BZWF9FUlIoMCwgODIsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNs YXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3VuaW5pdGlhbGl6ZWQsIF9fcHl4X3RfNikgPCAwKSBf X1BZWF9FUlIoMCwgODQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Nik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6ODMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NQorICAqICAgICBu b21lbSA9IE1QVl9FUlJPUl9OT01FTQorICAqICAgICB1bmluaXRpYWxpemVkID0gTVBWX0VSUk9S X1VOSU5JVElBTElaRUQKKyAgKiAgICAgaW52YWxpZF9wYXJhbWV0ZXIgPSBNUFZfRVJST1JfSU5W QUxJRF9QQVJBTUVURVIgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBub3Rf Zm91bmQgPSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORAorICAqICAgICBvcHRpb25fZm9ybWF0 ID0gTVBWX0VSUk9SX09QVElPTl9GT1JNQVQKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUik7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDgzLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJP Ul9JTlZBTElEX1BBUkFNRVRFUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJS KDAsIDg1LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAg aWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2ludmFsaWRfcGFy YW1ldGVyLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDgzLCBfX3B5eF9MMV9lcnJvcikK KysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19pbnZhbGlk X3BhcmFtZXRlciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4NSwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NAorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjg2CisgICogICAgIHVuaW5pdGlhbGl6ZWQgPSBNUFZfRVJST1JfVU5J TklUSUFMSVpFRAorICAqICAgICBpbnZhbGlkX3BhcmFtZXRlciA9IE1QVl9FUlJPUl9JTlZBTElE X1BBUkFNRVRFUgorICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VO RCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIG9wdGlvbl9mb3JtYXQgPSBN UFZfRVJST1JfT1BUSU9OX0ZPUk1BVAorICAqICAgICBvcHRpb25fZXJyb3IgPSBNUFZfRVJST1Jf T1BUSU9OX0VSUk9SCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9lcnJvcihNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORCk7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDg0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9 IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9PUFRJT05fTk9UX0ZP VU5EKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODYsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFt ZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm90X2ZvdW5kLCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDg0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5D bGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19ub3RfZm91bmQsIF9fcHl4X3RfNikgPCAwKSBfX1BZ WF9FUlIoMCwgODYsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7 IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 ODUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4NworICAqICAgICBpbnZh bGlkX3BhcmFtZXRlciA9IE1QVl9FUlJPUl9JTlZBTElEX1BBUkFNRVRFUgorICAqICAgICBub3Rf Zm91bmQgPSBNUFZfRVJST1JfT1BUSU9OX05PVF9GT1VORAorICAqICAgICBvcHRpb25fZm9ybWF0 ID0gTVBWX0VSUk9SX09QVElPTl9GT1JNQVQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAor ICAqICAgICBvcHRpb25fZXJyb3IgPSBNUFZfRVJST1JfT1BUSU9OX0VSUk9SCisgICogICAgIG5v dF9mb3VuZCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9OT1RfRk9VTkQKKyAgKi8KKy0gIF9fcHl4X3Rf NiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9PUFRJT05fRk9S TUFUKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODUsIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3Io TVBWX0VSUk9SX09QVElPTl9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCA4NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK Ky0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19vcHRpb25f Zm9ybWF0LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg1LCBfX3B5eF9MMV9lcnJvcikK KysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19vcHRpb25f Zm9ybWF0LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg3LCBfX3B5eF9MMV9lcnJvcikK KyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjg2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6ODgKKyAgKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX09QVElPTl9OT1Rf Rk9VTkQKKyAgKiAgICAgb3B0aW9uX2Zvcm1hdCA9IE1QVl9FUlJPUl9PUFRJT05fRk9STUFUCisg ICogICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJT05fRVJST1IgICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfUFJPUEVSVFlf Tk9UX0ZPVU5ECisgICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9G T1JNQVQKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vy cm9yKE1QVl9FUlJPUl9PUFRJT05fRVJST1IpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9f UFlYX0VSUigwLCA4NiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfT1BUSU9OX0VSUk9SKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgODgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF83LCBfX3B5eF9uX3Nfb3B0aW9uX2Vycm9yLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAs IDg2LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90 XzcsIF9fcHl4X25fc19vcHRpb25fZXJyb3IsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwg ODgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3Rf NiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODcKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OQorICAqICAgICBvcHRpb25fZm9ybWF0 ID0gTVBWX0VSUk9SX09QVElPTl9GT1JNQVQKKyAgKiAgICAgb3B0aW9uX2Vycm9yID0gTVBWX0VS Uk9SX09QVElPTl9FUlJPUgorICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfUFJPUEVSVFlf Tk9UX0ZPVU5EICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgcHJvcGVydHlf Zm9ybWF0ID0gTVBWX0VSUk9SX1BST1BFUlRZX0ZPUk1BVAorICAqICAgICBwcm9wZXJ0eV91bmF2 YWlsYWJsZSA9IE1QVl9FUlJPUl9QUk9QRVJUWV9VTkFWQUlMQUJMRQorICAqLworLSAgX19weXhf dF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1BST1BFUlRZ X05PVF9GT1VORCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg3LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJUWV9OT1RfRk9VTkQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCA4OSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4 X25fc19ub3RfZm91bmQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgODcsIF9fcHl4X0wx X2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9z X25vdF9mb3VuZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA4OSwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo4OAorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjkwCisgICogICAgIG9wdGlvbl9lcnJvciA9IE1QVl9FUlJPUl9PUFRJ T05fRVJST1IKKyAgKiAgICAgbm90X2ZvdW5kID0gTVBWX0VSUk9SX1BST1BFUlRZX05PVF9GT1VO RAorICAqICAgICBwcm9wZXJ0eV9mb3JtYXQgPSBNUFZfRVJST1JfUFJPUEVSVFlfRk9STUFUICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUg PSBNUFZfRVJST1JfUFJPUEVSVFlfVU5BVkFJTEFCTEUKKyAgKiAgICAgcHJvcGVydHlfZXJyb3Ig PSBNUFZfRVJST1JfUFJPUEVSVFlfRVJST1IKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJUWV9GT1JNQVQpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA4OCwgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1Jf UFJPUEVSVFlfRk9STUFUKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg OTAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAo X19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcHJvcGVydHlfZm9ybWF0 LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg4LCBfX3B5eF9MMV9lcnJvcikKKysgIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV9mb3Jt YXQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTAsIF9fcHl4X0wxX2Vycm9yKQorICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6ODkKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4Ijo5MQorICAqICAgICBub3RfZm91bmQgPSBNUFZfRVJST1JfUFJPUEVSVFlfTk9UX0ZP VU5ECisgICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9QUk9QRVJUWV9GT1JNQVQK KyAgKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1JfUFJPUEVSVFlfVU5BVkFJ TEFCTEUgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBwcm9wZXJ0eV9lcnJv ciA9IE1QVl9FUlJPUl9QUk9QRVJUWV9FUlJPUgorICAqICAgICBjb21tYW5kX2Vycm9yID0gTVBW X0VSUk9SX0NPTU1BTkQKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51 bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJUWV9VTkFWQUlMQUJMRSk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDg5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJU WV9VTkFWQUlMQUJMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkx LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Byb3BlcnR5X3VuYXZhaWxh YmxlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDg5LCBfX3B5eF9MMV9lcnJvcikKKysg IGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV91 bmF2YWlsYWJsZSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MSwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MAorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjkyCisgICogICAgIHByb3BlcnR5X2Zvcm1hdCA9IE1QVl9FUlJPUl9Q Uk9QRVJUWV9GT1JNQVQKKyAgKiAgICAgcHJvcGVydHlfdW5hdmFpbGFibGUgPSBNUFZfRVJST1Jf UFJPUEVSVFlfVU5BVkFJTEFCTEUKKyAgKiAgICAgcHJvcGVydHlfZXJyb3IgPSBNUFZfRVJST1Jf UFJPUEVSVFlfRVJST1IgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBjb21t YW5kX2Vycm9yID0gTVBWX0VSUk9SX0NPTU1BTkQKKyAgKiAgICAgbG9hZGluZ19mYWlsZWQgPSBN UFZfRVJST1JfTE9BRElOR19GQUlMRUQKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50 X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9QRVJUWV9FUlJPUik7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9QUk9Q RVJUWV9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDkyLCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Byb3BlcnR5X2Vycm9yLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDkwLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV9lcnJvciwgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo5MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjkzCisgICogICAgIHByb3BlcnR5X3VuYXZhaWxhYmxlID0gTVBWX0VSUk9SX1BST1BFUlRZX1VO QVZBSUxBQkxFCisgICogICAgIHByb3BlcnR5X2Vycm9yID0gTVBWX0VSUk9SX1BST1BFUlRZX0VS Uk9SCisgICogICAgIGNvbW1hbmRfZXJyb3IgPSBNUFZfRVJST1JfQ09NTUFORCAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGxvYWRpbmdfZmFpbGVkID0gTVBWX0VSUk9SX0xP QURJTkdfRkFJTEVECisgICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX0FPX0lOSVRf RkFJTEVECisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l cnJvcihNUFZfRVJST1JfQ09NTUFORCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDkxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zy b21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9DT01NQU5EKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgOTMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfY29tbWFuZF9lcnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MSwgX19w eXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfY29tbWFuZF9lcnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MywgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5MgorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk0CisgICogICAgIHByb3BlcnR5X2Vycm9yID0gTVBW X0VSUk9SX1BST1BFUlRZX0VSUk9SCisgICogICAgIGNvbW1hbmRfZXJyb3IgPSBNUFZfRVJST1Jf Q09NTUFORAorICAqICAgICBsb2FkaW5nX2ZhaWxlZCA9IE1QVl9FUlJPUl9MT0FESU5HX0ZBSUxF RCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGFvX2luaXRfZmFpbGVkID0g TVBWX0VSUk9SX0FPX0lOSVRfRkFJTEVECisgICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VS Uk9SX1ZPX0lOSVRfRkFJTEVECisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9t X2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfTE9BRElOR19GQUlMRUQpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90 XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfTE9BRElOR19G QUlMRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5NCwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXRO YW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19sb2FkaW5nX2ZhaWxlZCwgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCA5MiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfbG9hZGluZ19mYWlsZWQsIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgOTQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6OTMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NQor ICAqICAgICBjb21tYW5kX2Vycm9yID0gTVBWX0VSUk9SX0NPTU1BTkQKKyAgKiAgICAgbG9hZGlu Z19mYWlsZWQgPSBNUFZfRVJST1JfTE9BRElOR19GQUlMRUQKKyAgKiAgICAgYW9faW5pdF9mYWls ZWQgPSBNUFZfRVJST1JfQU9fSU5JVF9GQUlMRUQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICB2b19pbml0X2ZhaWxlZCA9IE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRAorICAq ICAgICBub3RoaW5nX3RvX3BsYXkgPSBNUFZfRVJST1JfTk9USElOR19UT19QTEFZCisgICovCist ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1Jf QU9fSU5JVF9GQUlMRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5 MywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9lcnJvcihNUFZfRVJST1JfQU9fSU5JVF9GQUlMRUQpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCA5NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4 X25fc19hb19pbml0X2ZhaWxlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5MywgX19w eXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfYW9faW5pdF9mYWlsZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTUsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTQKKysgIC8qICJ2aWRj dXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NgorICAqICAgICBsb2FkaW5nX2ZhaWxlZCA9IE1Q Vl9FUlJPUl9MT0FESU5HX0ZBSUxFRAorICAqICAgICBhb19pbml0X2ZhaWxlZCA9IE1QVl9FUlJP Ul9BT19JTklUX0ZBSUxFRAorICAqICAgICB2b19pbml0X2ZhaWxlZCA9IE1QVl9FUlJPUl9WT19J TklUX0ZBSUxFRCAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIG5vdGhpbmdf dG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkKKyAgKiAgICAgdW5rbm93bl9mb3Jt YXQgPSBNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4 X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9WT19JTklUX0ZBSUxFRCk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDk0LCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJP Ul9WT19JTklUX0ZBSUxFRCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDk2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3ZvX2luaXRfZmFpbGVk LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDk0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc192b19pbml0X2ZhaWxl ZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5NiwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo5NQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjk3CisgICogICAgIGFvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX0FPX0lOSVRfRkFJ TEVECisgICogICAgIHZvX2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRfRkFJTEVECisg ICogICAgIG5vdGhpbmdfdG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICB1bmtub3duX2Zvcm1hdCA9IE1QVl9FUlJP Ul9VTktOT1dOX0ZPUk1BVAorICAqICAgICB1bnN1cHBvcnRlZCA9IE1QVl9FUlJPUl9VTlNVUFBP UlRFRAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJy b3IoTVBWX0VSUk9SX05PVEhJTkdfVE9fUExBWSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDk1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5NywgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc19ub3RoaW5nX3RvX3BsYXksIF9fcHl4X3RfNikgPCAwKSBfX1BZ WF9FUlIoMCwgOTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNz KF9fcHl4X3RfNywgX19weXhfbl9zX25vdGhpbmdfdG9fcGxheSwgX19weXhfdF82KSA8IDApIF9f UFlYX0VSUigwLCA5NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo5NgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjk4CisgICogICAgIHZv X2luaXRfZmFpbGVkID0gTVBWX0VSUk9SX1ZPX0lOSVRfRkFJTEVECisgICogICAgIG5vdGhpbmdf dG9fcGxheSA9IE1QVl9FUlJPUl9OT1RISU5HX1RPX1BMQVkKKyAgKiAgICAgdW5rbm93bl9mb3Jt YXQgPSBNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICB1bnN1cHBvcnRlZCA9IE1QVl9FUlJPUl9VTlNVUFBPUlRFRAorICAqICAgICBu b3RfaW1wbGVtZW50ZWQgPSBNUFZfRVJST1JfTk9UX0lNUExFTUVOVEVECisgICovCistICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lcnJvcihNUFZfRVJST1JfVU5LTk9X Tl9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA5NiwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l cnJvcihNUFZfRVJST1JfVU5LTk9XTl9GT1JNQVQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA5OCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc191 bmtub3duX2Zvcm1hdCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCA5NiwgX19weXhfTDFf ZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nf dW5rbm93bl9mb3JtYXQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTgsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTcKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4Ijo5OQorICAqICAgICBub3RoaW5nX3RvX3BsYXkgPSBNUFZfRVJS T1JfTk9USElOR19UT19QTEFZCisgICogICAgIHVua25vd25fZm9ybWF0ID0gTVBWX0VSUk9SX1VO S05PV05fRk9STUFUCisgICogICAgIHVuc3VwcG9ydGVkID0gTVBWX0VSUk9SX1VOU1VQUE9SVEVE ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgbm90X2ltcGxlbWVudGVkID0g TVBWX0VSUk9SX05PVF9JTVBMRU1FTlRFRAorICAqIAorICAqLworLSAgX19weXhfdF82ID0gX19Q eXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX1VOU1VQUE9SVEVEKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTcsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9S X1VOU1VQUE9SVEVEKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgOTks IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19Q eXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfdW5zdXBwb3J0ZWQsIF9fcHl4 X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgOTcsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3Vuc3VwcG9ydGVkLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDk5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjk4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAw CisgICogICAgIHVua25vd25fZm9ybWF0ID0gTVBWX0VSUk9SX1VOS05PV05fRk9STUFUCisgICog ICAgIHVuc3VwcG9ydGVkID0gTVBWX0VSUk9SX1VOU1VQUE9SVEVECisgICogICAgIG5vdF9pbXBs ZW1lbnRlZCA9IE1QVl9FUlJPUl9OT1RfSU1QTEVNRU5URUQgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqIAorICAqIAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJv bV9lbnVtX19tcHZfZXJyb3IoTVBWX0VSUk9SX05PVF9JTVBMRU1FTlRFRCk7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDk4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2Vycm9yKE1QVl9FUlJPUl9OT1RfSU1Q TEVNRU5URUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDAsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm90X2ltcGxlbWVudGVkLCBfX3B5 eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDk4LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19ub3RfaW1wbGVtZW50ZWQsIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTAwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjcyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6NzQKKyAgKiBQeV9Jbml0aWFsaXplKCkKKyAgKiAKKyAgKiBjbGFzcyBFcnJvcnM6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgIiIiU2V0IG9mIGtub3duIGVycm9yIGNv ZGVzIGZyb20gTXB2RXJyb3IgYW5kIEV2ZW50IHJlc3BvbnNlcy4KKyAgKiAKKyAgKi8KKy0gIF9f cHl4X3RfNiA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKCgoUHlPYmplY3QqKSZfX1B5eF9EZWZhdWx0 Q2xhc3NUeXBlKSwgX19weXhfbl9zX0Vycm9ycywgX19weXhfZW1wdHlfdHVwbGUsIF9fcHl4X3Rf NywgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDcy LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKCgo UHlPYmplY3QqKSZfX1B5eF9EZWZhdWx0Q2xhc3NUeXBlKSwgX19weXhfbl9zX0Vycm9ycywgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X3RfNywgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDc0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19F cnJvcnMsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgNzIsIF9fcHl4X0wxX2Vycm9yKQor KyAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19FcnJvcnMsIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgNzQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsg X19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MDEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDMKKyAgKiAKKyAgKiAK KyAgKiBjbGFzcyBFdmVudHM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAg IiIiU2V0IG9mIGtub3duIHZhbHVlcyBmb3IgRXZlbnQgaWRzLgorICAqIAorICAqLworLSAgX19w eXhfdF83ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZSgoUHlPYmplY3QgKikgTlVMTCwgX19w eXhfZW1wdHlfdHVwbGUsIF9fcHl4X25fc19FdmVudHMsIF9fcHl4X25fc19FdmVudHMsIChQeU9i amVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9rcF9zX1Nl dF9vZl9rbm93bl92YWx1ZXNfZm9yX0V2ZW50X2lkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzcp KSBfX1BZWF9FUlIoMCwgMTAxLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNyA9IF9fUHl4 X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5X3R1cGxl LCBfX3B5eF9uX3NfRXZlbnRzLCBfX3B5eF9uX3NfRXZlbnRzLCAoUHlPYmplY3QgKikgTlVMTCwg X19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfa3Bfc19TZXRfb2Zfa25vd25fdmFs dWVzX2Zvcl9FdmVudF9pZCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAs IDEwMywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAKKy0g IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDgKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTAKKyAgKiAgICAgWW91IHNob3VsZCBoYW5kbGUgdGhlIHBv c3NpYmlsaXR5IHRoYXQgZXZlbnQgaWRzIG1heSBub3QgYmUgYW55IG9mIHRoZXNlIHZhbHVlcy4K KyAgKiAgICAgIiIiCisgICogICAgIG5vbmUgPSBNUFZfRVZFTlRfTk9ORSAgICAgICAgICAgICAj IDw8PDw8PDw8PDw8PDw8CisgICogICAgIHNodXRkb3duID0gTVBWX0VWRU5UX1NIVVRET1dOCisg ICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5UX0xPR19NRVNTQUdFCisgICovCistICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfTk9O RSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEwOCwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9p ZChNUFZfRVZFTlRfTk9ORSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDExMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19ub25lLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEwOCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfbm9uZSwgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCAxMTAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTA5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExCisgICog ICAgICIiIgorICAqICAgICBub25lID0gTVBWX0VWRU5UX05PTkUKKyAgKiAgICAgc2h1dGRvd24g PSBNUFZfRVZFTlRfU0hVVERPV04gICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAg ICBsb2dfbWVzc2FnZSA9IE1QVl9FVkVOVF9MT0dfTUVTU0FHRQorICAqICAgICBnZXRfcHJvcGVy dHlfcmVwbHkgPSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCisgICovCistICBfX3B5eF90 XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfU0hVVERP V04pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDksIF9fcHl4X0wx X2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRf aWQoTVBWX0VWRU5UX1NIVVRET1dOKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgMTExLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOwor LSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3NodXRkb3du LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEwOSwgX19weXhfTDFfZXJyb3IpCisrICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTExLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExMAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMgorICAqICAgICBub25lID0gTVBWX0VWRU5UX05PTkUKKyAgKiAgICAgc2h1dGRvd24g PSBNUFZfRVZFTlRfU0hVVERPV04KKyAgKiAgICAgbG9nX21lc3NhZ2UgPSBNUFZfRVZFTlRfTE9H X01FU1NBR0UgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBnZXRfcHJvcGVy dHlfcmVwbHkgPSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCisgICogICAgIHNldF9wcm9w ZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkKKyAgKi8KKy0gIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9MT0df TUVTU0FHRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMCwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9l dmVudF9pZChNUFZfRVZFTlRfTE9HX01FU1NBR0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCAxMTIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4 X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nf bG9nX21lc3NhZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTEwLCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19s b2dfbWVzc2FnZSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTIsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTExCisrICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTEzCisgICogICAgIHNodXRkb3duID0gTVBWX0VWRU5UX1NIVVRE T1dOCisgICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5UX0xPR19NRVNTQUdFCisgICogICAg IGdldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9HRVRfUFJPUEVSVFlfUkVQTFkgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBzZXRfcHJvcGVydHlfcmVwbHkgPSBNUFZf RVZFTlRfU0VUX1BST1BFUlRZX1JFUExZCisgICogICAgIGNvbW1hbmRfcmVwbHkgPSBNUFZfRVZF TlRfQ09NTUFORF9SRVBMWQorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0dFVF9QUk9QRVJUWV9SRVBMWSk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMSwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRf R0VUX1BST1BFUlRZX1JFUExZKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIo MCwgMTEzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAg aWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2dldF9wcm9wZXJ0 eV9yZXBseSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTEsIF9fcHl4X0wxX2Vycm9y KQorKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2dldF9w cm9wZXJ0eV9yZXBseSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTMsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEyCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0CisgICogICAgIGxvZ19tZXNzYWdlID0gTVBWX0VWRU5U X0xPR19NRVNTQUdFCisgICogICAgIGdldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9HRVRf UFJPUEVSVFlfUkVQTFkKKyAgKiAgICAgc2V0X3Byb3BlcnR5X3JlcGx5ID0gTVBWX0VWRU5UX1NF VF9QUk9QRVJUWV9SRVBMWSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGNv bW1hbmRfcmVwbHkgPSBNUFZfRVZFTlRfQ09NTUFORF9SRVBMWQorICAqICAgICBzdGFydF9maWxl ID0gTVBWX0VWRU5UX1NUQVJUX0ZJTEUKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50 X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkpOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMTIsIF9fcHl4X0wxX2Vycm9y KQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBW X0VWRU5UX1NFVF9QUk9QRVJUWV9SRVBMWSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDExNCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82 KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19zZXRf cHJvcGVydHlfcmVwbHksIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTEyLCBfX3B5eF9M MV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25f c19zZXRfcHJvcGVydHlfcmVwbHksIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE0LCBf X3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMworKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNQorICAqICAgICBnZXRfcHJvcGVydHlfcmVw bHkgPSBNUFZfRVZFTlRfR0VUX1BST1BFUlRZX1JFUExZCisgICogICAgIHNldF9wcm9wZXJ0eV9y ZXBseSA9IE1QVl9FVkVOVF9TRVRfUFJPUEVSVFlfUkVQTFkKKyAgKiAgICAgY29tbWFuZF9yZXBs eSA9IE1QVl9FVkVOVF9DT01NQU5EX1JFUExZICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwK KyAgKiAgICAgc3RhcnRfZmlsZSA9IE1QVl9FVkVOVF9TVEFSVF9GSUxFCisgICogICAgIGVuZF9m aWxlID0gTVBWX0VWRU5UX0VORF9GSUxFCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfQ09NTUFORF9SRVBMWSk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDExMywgX19weXhfTDFfZXJyb3IpCisr ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZF TlRfQ09NTUFORF9SRVBMWSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDExNSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19jb21tYW5kX3JlcGx5 LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExMywgX19weXhfTDFfZXJyb3IpCisrICBp ZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfY29tbWFuZF9yZXBs eSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTUsIF9fcHl4X0wxX2Vycm9yKQorICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTE2CisgICogICAgIHNldF9wcm9wZXJ0eV9yZXBseSA9IE1QVl9FVkVOVF9TRVRf UFJPUEVSVFlfUkVQTFkKKyAgKiAgICAgY29tbWFuZF9yZXBseSA9IE1QVl9FVkVOVF9DT01NQU5E X1JFUExZCisgICogICAgIHN0YXJ0X2ZpbGUgPSBNUFZfRVZFTlRfU1RBUlRfRklMRSAgICAgICAg ICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGVuZF9maWxlID0gTVBWX0VWRU5UX0VORF9G SUxFCisgICogICAgIGZpbGVfbG9hZGVkID0gTVBWX0VWRU5UX0ZJTEVfTE9BREVECisgICovCist ICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZF TlRfU1RBUlRfRklMRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEx NCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9ldmVudF9pZChNUFZfRVZFTlRfU1RBUlRfRklMRSk7IGlmICh1bmxpa2VseSghX19weXhf dF82KSkgX19QWVhfRVJSKDAsIDExNiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYo X19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4 X25fc19zdGFydF9maWxlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNCwgX19weXhf TDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9u X3Nfc3RhcnRfZmlsZSwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMTYsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1CisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTE3CisgICogICAgIGNvbW1hbmRfcmVwbHkgPSBNUFZfRVZF TlRfQ09NTUFORF9SRVBMWQorICAqICAgICBzdGFydF9maWxlID0gTVBWX0VWRU5UX1NUQVJUX0ZJ TEUKKyAgKiAgICAgZW5kX2ZpbGUgPSBNUFZfRVZFTlRfRU5EX0ZJTEUgICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqICAgICBmaWxlX2xvYWRlZCA9IE1QVl9FVkVOVF9GSUxFX0xPQURF RAorICAqICAgICAjIHRyYWNrc19jaGFuZ2VkID0gTVBWX0VWRU5UX1RSQUNLU19DSEFOR0VECisg ICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChN UFZfRVZFTlRfRU5EX0ZJTEUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCAxMTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0VORF9GSUxFKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19w eXhfbl9zX2VuZF9maWxlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDExNSwgX19weXhf TDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9u X3NfZW5kX2ZpbGUsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE3LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNgorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExOAorICAqICAgICBzdGFydF9maWxlID0gTVBWX0VWRU5UX1NU QVJUX0ZJTEUKKyAgKiAgICAgZW5kX2ZpbGUgPSBNUFZfRVZFTlRfRU5EX0ZJTEUKKyAgKiAgICAg ZmlsZV9sb2FkZWQgPSBNUFZfRVZFTlRfRklMRV9MT0FERUQgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICAjIHRyYWNrc19jaGFuZ2VkID0gTVBWX0VWRU5UX1RSQUNLU19DSEFO R0VECisgICogICAgICMgdHJhY2tzX3N3aXRjaGVkID0gTVBWX0VWRU5UX1RSQUNLX1NXSVRDSEVE CisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9p ZChNUFZfRVZFTlRfRklMRV9MT0FERUQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCAxMTYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0ZJTEVfTE9BREVEKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNywgX19weXhfbl9zX2ZpbGVfbG9hZGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAs IDExNiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF83LCBfX3B5eF9uX3NfZmlsZV9sb2FkZWQsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwg MTE4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExOQorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEyMQorICAqICAgICAjIHRyYWNrc19j aGFuZ2VkID0gTVBWX0VWRU5UX1RSQUNLU19DSEFOR0VECisgICogICAgICMgdHJhY2tzX3N3aXRj aGVkID0gTVBWX0VWRU5UX1RSQUNLX1NXSVRDSEVECisgICogICAgIGlkbGUgPSBNUFZfRVZFTlRf SURMRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICMgcGF1c2UgPSBNUFZf RVZFTlRfUEFVU0UKKyAgKiAgICAgIyB1bnBhdXNlID0gTVBWX0VWRU5UX1VOUEFVU0UKKyAgKi8K Ky0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9F VkVOVF9JRExFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTE5LCBf X3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2 X2V2ZW50X2lkKE1QVl9FVkVOVF9JRExFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgMTIxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2lkbGUs IF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTE5LCBfX3B5eF9MMV9lcnJvcikKKysgIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19pZGxlLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNS RUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMjIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijox MjQKKyAgKiAgICAgIyBwYXVzZSA9IE1QVl9FVkVOVF9QQVVTRQorICAqICAgICAjIHVucGF1c2Ug PSBNUFZfRVZFTlRfVU5QQVVTRQorICAqICAgICB0aWNrID0gTVBWX0VWRU5UX1RJQ0sgICAgICAg ICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAjIHNjcmlwdF9pbnB1dF9kaXNwYXRjaCA9 IE1QVl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0gKKyAgKiAgICAgY2xpZW50X21lc3NhZ2Ug PSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0UKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5 SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9USUNLKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTIyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9USUNL KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI0LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3RpY2ssIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9F UlIoMCwgMTIyLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc190aWNrLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEy NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjQKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMjYKKyAgKiAgICAgdGljayA9IE1QVl9F VkVOVF9USUNLCisgICogICAgICMgc2NyaXB0X2lucHV0X2Rpc3BhdGNoID0gTVBWX0VWRU5UX1ND UklQVF9JTlBVVF9ESVNQQVRDSAorICAqICAgICBjbGllbnRfbWVzc2FnZSA9IE1QVl9FVkVOVF9D TElFTlRfTUVTU0FHRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIHZpZGVv X3JlY29uZmlnID0gTVBWX0VWRU5UX1ZJREVPX1JFQ09ORklHCisgICogICAgIGF1ZGlvX3JlY29u ZmlnID0gTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHCisgICovCistICBfX3B5eF90XzYgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0Up OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMjQsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZXZlbnRfaWQo TVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgMTI2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2NsaWVu dF9tZXNzYWdlLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyNCwgX19weXhfTDFfZXJy b3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfY2xp ZW50X21lc3NhZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTI2LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEyNQorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEyNworICAqICAgICAjIHNjcmlwdF9pbnB1dF9kaXNwYXRjaCA9 IE1QVl9FVkVOVF9TQ1JJUFRfSU5QVVRfRElTUEFUQ0gKKyAgKiAgICAgY2xpZW50X21lc3NhZ2Ug PSBNUFZfRVZFTlRfQ0xJRU5UX01FU1NBR0UKKyAgKiAgICAgdmlkZW9fcmVjb25maWcgPSBNUFZf RVZFTlRfVklERU9fUkVDT05GSUcgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAg ICBhdWRpb19yZWNvbmZpZyA9IE1QVl9FVkVOVF9BVURJT19SRUNPTkZJRworICAqICAgICAjIG1l dGFkYXRhX3VwZGF0ZSA9IE1QVl9FVkVOVF9NRVRBREFUQV9VUERBVEUKKyAgKi8KKy0gIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9WSURF T19SRUNPTkZJRyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEyNSwg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21w dl9ldmVudF9pZChNUFZfRVZFTlRfVklERU9fUkVDT05GSUcpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCAxMjcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3NfdmlkZW9fcmVjb25maWcsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTI1LCBf X3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9f cHl4X25fc192aWRlb19yZWNvbmZpZywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMjcs IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTI2CisrICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTI4CisgICogICAgIGNsaWVudF9tZXNzYWdl ID0gTVBWX0VWRU5UX0NMSUVOVF9NRVNTQUdFCisgICogICAgIHZpZGVvX3JlY29uZmlnID0gTVBW X0VWRU5UX1ZJREVPX1JFQ09ORklHCisgICogICAgIGF1ZGlvX3JlY29uZmlnID0gTVBWX0VWRU5U X0FVRElPX1JFQ09ORklHICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgIyBt ZXRhZGF0YV91cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFfVVBEQVRFCisgICogICAgIHNlZWsg PSBNUFZfRVZFTlRfU0VFSworICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9l bnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX0FVRElPX1JFQ09ORklHKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTI2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1QVl9FVkVOVF9BVURJ T19SRUNPTkZJRyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEyOCwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5 eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19hdWRpb19yZWNvbmZpZywgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMjYsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2F1ZGlvX3JlY29uZmlnLCBf X3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyOCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMjgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxMzAKKyAgKiAgICAgYXVkaW9fcmVjb25maWcgPSBNUFZfRVZFTlRfQVVESU9fUkVDT05G SUcKKyAgKiAgICAgIyBtZXRhZGF0YV91cGRhdGUgPSBNUFZfRVZFTlRfTUVUQURBVEFfVVBEQVRF CisgICogICAgIHNlZWsgPSBNUFZfRVZFTlRfU0VFSyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisgICogICAgIHBsYXliYWNrX3Jlc3RhcnQgPSBNUFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFS VAorICAqICAgICBwcm9wZXJ0eV9jaGFuZ2UgPSBNUFZfRVZFTlRfUFJPUEVSVFlfQ0hBTkdFCisg ICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChN UFZfRVZFTlRfU0VFSyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEy OCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1f X21wdl9ldmVudF9pZChNUFZfRVZFTlRfU0VFSyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDEzMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19z ZWVrLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEyOCwgX19weXhfTDFfZXJyb3IpCisr ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfc2VlaywgX19w eXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTI5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTMxCisgICogICAgICMgbWV0YWRhdGFfdXBkYXRlID0gTVBWX0VWRU5UX01FVEFEQVRBX1VQ REFURQorICAqICAgICBzZWVrID0gTVBWX0VWRU5UX1NFRUsKKyAgKiAgICAgcGxheWJhY2tfcmVz dGFydCA9IE1QVl9FVkVOVF9QTEFZQkFDS19SRVNUQVJUICAgICAgICAgICAgICMgPDw8PDw8PDw8 PDw8PDwKKyAgKiAgICAgcHJvcGVydHlfY2hhbmdlID0gTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5H RQorICAqICAgICAjIGNoYXB0ZXJfY2hhbmdlID0gTVBWX0VWRU5UX0NIQVBURVJfQ0hBTkdFCisg ICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChN UFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFSVCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDEyOSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9ldmVudF9pZChNUFZfRVZFTlRfUExBWUJBQ0tfUkVTVEFSVCk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEzMSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFz cyhfX3B5eF90XzcsIF9fcHl4X25fc19wbGF5YmFja19yZXN0YXJ0LCBfX3B5eF90XzYpIDwgMCkg X19QWVhfRVJSKDAsIDEyOSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfcGxheWJhY2tfcmVzdGFydCwgX19weXhfdF82KSA8 IDApIF9fUFlYX0VSUigwLCAxMzEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9f cHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6MTMwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTMyCisg ICogICAgIHNlZWsgPSBNUFZfRVZFTlRfU0VFSworICAqICAgICBwbGF5YmFja19yZXN0YXJ0ID0g TVBWX0VWRU5UX1BMQVlCQUNLX1JFU1RBUlQKKyAgKiAgICAgcHJvcGVydHlfY2hhbmdlID0gTVBW X0VWRU5UX1BST1BFUlRZX0NIQU5HRSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICog ICAgICMgY2hhcHRlcl9jaGFuZ2UgPSBNUFZfRVZFTlRfQ0hBUFRFUl9DSEFOR0UKKyAgKiAKKyAg Ki8KKy0gIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2V2ZW50X2lkKE1Q Vl9FVkVOVF9QUk9QRVJUWV9DSEFOR0UpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCAxMzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRf RnJvbV9lbnVtX19tcHZfZXZlbnRfaWQoTVBWX0VWRU5UX1BST1BFUlRZX0NIQU5HRSk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEzMiwgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV9jaGFuZ2UsIF9fcHl4X3RfNikgPCAwKSBfX1BZ WF9FUlIoMCwgMTMwLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFz cyhfX3B5eF90XzcsIF9fcHl4X25fc19wcm9wZXJ0eV9jaGFuZ2UsIF9fcHl4X3RfNikgPCAwKSBf X1BZWF9FUlIoMCwgMTMyLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEwMQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMworICAqIAor ICAqIAorICAqIGNsYXNzIEV2ZW50czogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAq ICAgICAiIiJTZXQgb2Yga25vd24gdmFsdWVzIGZvciBFdmVudCBpZHMuCisgICogCisgICovCist ICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZSgoKFB5T2JqZWN0KikmX19QeXhfRGVm YXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19FdmVudHMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5 eF90XzcsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigw LCAxMDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHkzQ2xhc3NDcmVh dGUoKChQeU9iamVjdCopJl9fUHl4X0RlZmF1bHRDbGFzc1R5cGUpLCBfX3B5eF9uX3NfRXZlbnRz LCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhfdF83LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTAzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4 X25fc19FdmVudHMsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTAxLCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfRXZlbnRzLCBf X3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEwMywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzcpOyBfX3B5eF90XzcgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEzNAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEzNgorICAq IAorICAqIAorICAqIGNsYXNzIExvZ0xldmVsczogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICBubyA9IE1QVl9MT0dfTEVWRUxfTk9ORQorICAqICAgICBmYXRhbCA9IE1QVl9M T0dfTEVWRUxfRkFUQUwKKyAgKi8KKy0gIF9fcHl4X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1By ZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfTG9n TGV2ZWxzLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9z X3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF83 ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZSgoUHlPYmplY3QgKikgTlVMTCwgX19weXhfZW1w dHlfdHVwbGUsIF9fcHl4X25fc19Mb2dMZXZlbHMsIF9fcHl4X25fc19Mb2dMZXZlbHMsIChQeU9i amVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikg TlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEzNiwgX19weXhf TDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMzcKKyAgKiAKKyAgKiBjbGFzcyBMb2dMZXZlbHM6CisgICogICAgIG5vID0gTVBW X0xPR19MRVZFTF9OT05FICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgZmF0 YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMCisgICogICAgIGVycm9yID0gTVBWX0xPR19MRVZFTF9F UlJPUgorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9n X2xldmVsKE1QVl9MT0dfTEVWRUxfTk9ORSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDEzNSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUlu dF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9OT05FKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9f UHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4 X3RfNywgX19weXhfbl9zX25vLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzNSwgX19w eXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5 eF9uX3Nfbm8sIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTM3LCBfX3B5eF9MMV9lcnJv cikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEzNgorKyAgLyogInZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgiOjEzOAorICAqIGNsYXNzIExvZ0xldmVsczoKKyAgKiAgICAgbm8gPSBN UFZfTE9HX0xFVkVMX05PTkUKKyAgKiAgICAgZmF0YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgZXJyb3IgPSBNUFZfTE9HX0xFVkVM X0VSUk9SCisgICogICAgIHdhcm4gPSBNUFZfTE9HX0xFVkVMX1dBUk4KKyAgKi8KKy0gIF9fcHl4 X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVM X0ZBVEFMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM2LCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xv Z19sZXZlbChNUFZfTE9HX0xFVkVMX0ZBVEFMKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgMTM4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90 XzYpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2Zh dGFsLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzNiwgX19weXhfTDFfZXJyb3IpCisr ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZmF0YWwsIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTM4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjEzNworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjEzOQorICAqICAgICBubyA9IE1QVl9MT0dfTEVWRUxfTk9ORQorICAqICAgICBmYXRhbCA9 IE1QVl9MT0dfTEVWRUxfRkFUQUwKKyAgKiAgICAgZXJyb3IgPSBNUFZfTE9HX0xFVkVMX0VSUk9S ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgd2FybiA9IE1QVl9MT0dfTEVW RUxfV0FSTgorICAqICAgICBpbmZvID0gTVBWX0xPR19MRVZFTF9JTkZPCisgICovCistICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZF TF9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDEzNywgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9s b2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkg X19QWVhfRVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhf dF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19l cnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzcsIF9fcHl4X0wxX2Vycm9yKQor KyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2Vycm9yLCBf X3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMzgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjoxNDAKKyAgKiAgICAgZmF0YWwgPSBNUFZfTE9HX0xFVkVMX0ZBVEFMCisgICogICAgIGVy cm9yID0gTVBWX0xPR19MRVZFTF9FUlJPUgorICAqICAgICB3YXJuID0gTVBWX0xPR19MRVZFTF9X QVJOICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgaW5mbyA9IE1QVl9MT0df TEVWRUxfSU5GTworICAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WCisgICovCistICBfX3B5eF90 XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9X QVJOKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTM4LCBfX3B5eF9M MV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19s ZXZlbChNUFZfTE9HX0xFVkVMX1dBUk4pOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlY X0VSUigwLCAxNDAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7 CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3Nfd2Fybiwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxMzgsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3dhcm4sIF9fcHl4X3Rf NikgPCAwKSBfX1BZWF9FUlIoMCwgMTQwLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JF RihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5 bXB2L21wdi5weXgiOjEzOQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE0 MQorICAqICAgICBlcnJvciA9IE1QVl9MT0dfTEVWRUxfRVJST1IKKyAgKiAgICAgd2FybiA9IE1Q Vl9MT0dfTEVWRUxfV0FSTgorICAqICAgICBpbmZvID0gTVBWX0xPR19MRVZFTF9JTkZPICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgdiA9IE1QVl9MT0dfTEVWRUxfVgorICAq ICAgICBkZWJ1ZyA9IE1QVl9MT0dfTEVWRUxfREVCVUcKKyAgKi8KKy0gIF9fcHl4X3RfNiA9IF9f UHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2xvZ19sZXZlbChNUFZfTE9HX0xFVkVMX0lORk8pOyBp ZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzksIF9fcHl4X0wxX2Vycm9y KQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVsKE1Q Vl9MT0dfTEVWRUxfSU5GTyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDE0MSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19pbmZvLCBfX3B5eF90 XzYpIDwgMCkgX19QWVhfRVJSKDAsIDEzOSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfaW5mbywgX19weXhfdF82KSA8IDAp IF9fUFlYX0VSUigwLCAxNDEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4 X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTQwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTQyCisgICog ICAgIHdhcm4gPSBNUFZfTE9HX0xFVkVMX1dBUk4KKyAgKiAgICAgaW5mbyA9IE1QVl9MT0dfTEVW RUxfSU5GTworICAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WICAgICAgICAgICAgICMgPDw8PDw8 PDw8PDw8PDwKKyAgKiAgICAgZGVidWcgPSBNUFZfTE9HX0xFVkVMX0RFQlVHCisgICogICAgIHRy YWNlID0gTVBWX0xPR19MRVZFTF9UUkFDRQorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJ bnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfVik7IGlmICh1bmxpa2Vs eSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE0MCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5 eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZF TF9WKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTQyLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9fUHl4X1NldE5h bWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3YsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9F UlIoMCwgMTQwLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhf X3B5eF90XzcsIF9fcHl4X25fc192LCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE0Miwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDEKKysgIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDMKKyAgKiAgICAgaW5mbyA9IE1QVl9MT0df TEVWRUxfSU5GTworICAqICAgICB2ID0gTVBWX0xPR19MRVZFTF9WCisgICogICAgIGRlYnVnID0g TVBWX0xPR19MRVZFTF9ERUJVRyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAg IHRyYWNlID0gTVBWX0xPR19MRVZFTF9UUkFDRQorICAqIAorICAqLworLSAgX19weXhfdF82ID0g X19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVsKE1QVl9MT0dfTEVWRUxfREVCVUcp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNDEsIF9fcHl4X0wxX2Vy cm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfbG9nX2xldmVs KE1QVl9MT0dfTEVWRUxfREVCVUcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VS UigwLCAxNDMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7Cist ICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83LCBfX3B5eF9uX3NfZGVidWcsIF9f cHl4X3RfNikgPCAwKSBfX1BZWF9FUlIoMCwgMTQxLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChf X1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19kZWJ1ZywgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCAxNDMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTQyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTQ0 CisgICogICAgIHYgPSBNUFZfTE9HX0xFVkVMX1YKKyAgKiAgICAgZGVidWcgPSBNUFZfTE9HX0xF VkVMX0RFQlVHCisgICogICAgIHRyYWNlID0gTVBWX0xPR19MRVZFTF9UUkFDRSAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogCisgICovCistICBfX3B5eF90XzYgPSBfX1B5 eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBWX0xPR19MRVZFTF9UUkFDRSk7IGlm ICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE0MiwgX19weXhfTDFfZXJyb3Ip CisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9sb2dfbGV2ZWwoTVBW X0xPR19MRVZFTF9UUkFDRSk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAs IDE0NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc190cmFjZSwgX19weXhf dF82KSA8IDApIF9fUFlYX0VSUigwLCAxNDIsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4 X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3RyYWNlLCBfX3B5eF90XzYpIDwg MCkgX19QWVhfRVJSKDAsIDE0NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF82KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMzQKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMzYKKyAg KiAKKyAgKiAKKyAgKiBjbGFzcyBMb2dMZXZlbHM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAgICAgbm8gPSBNUFZfTE9HX0xFVkVMX05PTkUKKyAgKiAgICAgZmF0YWwgPSBNUFZf TE9HX0xFVkVMX0ZBVEFMCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0 ZSgoKFB5T2JqZWN0KikmX19QeXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19Mb2dMZXZl bHMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90XzcsIE5VTEwsIDAsIDEpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMzQsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdF82ID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUoKChQeU9iamVjdCopJl9fUHl4X0RlZmF1bHRD bGFzc1R5cGUpLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCBfX3B5eF9lbXB0eV90dXBsZSwgX19weXhf dF83LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwg MTM2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYg KFB5RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19Mb2dMZXZlbHMsIF9fcHl4X3RfNikg PCAwKSBfX1BZWF9FUlIoMCwgMTM0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeURpY3RfU2V0 SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfTG9nTGV2ZWxzLCBfX3B5eF90XzYpIDwgMCkgX19QWVhf RVJSKDAsIDEzNiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsg X19weXhfdF82ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90XzcgPSAw OworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE0NQorKyAgLyogInZp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE0NworICAqIAorICAqIAorICAqIGNsYXNzIEVP RlJlYXNvbnM6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgIiIiS25vd24g cG9zc2libGUgdmFsdWVzIGZvciBFbmRPZkZpbGVSZWFjaGVkIHJlYXNvbi4KKyAgKiAKKyAgKi8K Ky0gIF9fcHl4X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5V TEwsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfRU9GUmVhc29ucywgX19weXhfbl9zX0VP RlJlYXNvbnMsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2 LCBfX3B5eF9rcF9zX0tub3duX3Bvc3NpYmxlX3ZhbHVlc19mb3JfRW5kT2ZGKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMTQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfNyA9IF9fUHl4X1B5M01ldGFjbGFzc1ByZXBhcmUoKFB5T2JqZWN0ICopIE5VTEwsIF9f cHl4X2VtcHR5X3R1cGxlLCBfX3B5eF9uX3NfRU9GUmVhc29ucywgX19weXhfbl9zX0VPRlJlYXNv bnMsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5 eF9rcF9zX0tub3duX3Bvc3NpYmxlX3ZhbHVlc19mb3JfRW5kT2ZGKTsgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMTQ3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzcpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgi OjE1MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjE1MgorICAqICAgICBZ b3Ugc2hvdWxkIGhhbmRsZSB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGUgcmVhc29uIG1heSBub3Qg YmUgYW55IG9mIHRoZXNlIHZhbHVlcy4KKyAgKiAgICAgIiIiCisgICogICAgIGVvZiA9IE1QVl9F TkRfRklMRV9SRUFTT05fRU9GICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAg YWJvcnRlZCA9IE1QVl9FTkRfRklMRV9SRUFTT05fU1RPUAorICAqICAgICBxdWl0ID0gTVBWX0VO RF9GSUxFX1JFQVNPTl9RVUlUCisgICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9t X2VudW1fX21wdl9lbmRfZmlsZV9yZWFzb24oTVBWX0VORF9GSUxFX1JFQVNPTl9FT0YpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNTAsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5kX2ZpbGVfcmVhc29u KE1QVl9FTkRfRklMRV9SRUFTT05fRU9GKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgMTUyLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYp OworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2VvZiwg X19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxNTAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX2VvZiwgX19weXhfdF82 KSA8IDApIF9fUFlYX0VSUigwLCAxNTIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVG KF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6MTUxCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTUz CisgICogICAgICIiIgorICAqICAgICBlb2YgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX0VPRgorICAq ICAgICBhYm9ydGVkID0gTVBWX0VORF9GSUxFX1JFQVNPTl9TVE9QICAgICAgICAgICAgICMgPDw8 PDw8PDw8PDw8PDwKKyAgKiAgICAgcXVpdCA9IE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVAorICAq ICAgICBlcnJvciA9IE1QVl9FTkRfRklMRV9SRUFTT05fRVJST1IKKyAgKi8KKy0gIF9fcHl4X3Rf NiA9IF9fUHl4X1B5SW50X0Zyb21fZW51bV9fbXB2X2VuZF9maWxlX3JlYXNvbihNUFZfRU5EX0ZJ TEVfUkVBU09OX1NUT1ApOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAx NTEsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVt X19tcHZfZW5kX2ZpbGVfcmVhc29uKE1QVl9FTkRfRklMRV9SRUFTT05fU1RPUCk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE1MywgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5 eF90XzcsIF9fcHl4X25fc19hYm9ydGVkLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE1 MSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF83 LCBfX3B5eF9uX3NfYWJvcnRlZCwgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxNTMsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7 CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTUyCisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTU0CisgICogICAgIGVvZiA9IE1QVl9FTkRfRklM RV9SRUFTT05fRU9GCisgICogICAgIGFib3J0ZWQgPSBNUFZfRU5EX0ZJTEVfUkVBU09OX1NUT1AK KyAgKiAgICAgcXVpdCA9IE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVCAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisgICogICAgIGVycm9yID0gTVBWX0VORF9GSUxFX1JFQVNPTl9FUlJPUgor ICAqIAorICAqLworLSAgX19weXhfdF82ID0gX19QeXhfUHlJbnRfRnJvbV9lbnVtX19tcHZfZW5k X2ZpbGVfcmVhc29uKE1QVl9FTkRfRklMRV9SRUFTT05fUVVJVCk7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDE1MiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYg PSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lbmRfZmlsZV9yZWFzb24oTVBWX0VORF9GSUxF X1JFQVNPTl9RVUlUKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTU0 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNywgX19weXhfbl9zX3F1aXQsIF9fcHl4X3RfNikg PCAwKSBfX1BZWF9FUlIoMCwgMTUyLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXRO YW1lSW5DbGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19xdWl0LCBfX3B5eF90XzYpIDwgMCkgX19Q WVhfRVJSKDAsIDE1NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82 KTsgX19weXhfdF82ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 IjoxNTMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNTUKKyAgKiAgICAg YWJvcnRlZCA9IE1QVl9FTkRfRklMRV9SRUFTT05fU1RPUAorICAqICAgICBxdWl0ID0gTVBWX0VO RF9GSUxFX1JFQVNPTl9RVUlUCisgICogICAgIGVycm9yID0gTVBWX0VORF9GSUxFX1JFQVNPTl9F UlJPUiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogCisgICovCistICBf X3B5eF90XzYgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9lbmRfZmlsZV9yZWFzb24oTVBW X0VORF9GSUxFX1JFQVNPTl9FUlJPUik7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhf RVJSKDAsIDE1MywgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeUludF9G cm9tX2VudW1fX21wdl9lbmRfZmlsZV9yZWFzb24oTVBWX0VORF9GSUxFX1JFQVNPTl9FUlJPUik7 IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDE1NSwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5D bGFzcyhfX3B5eF90XzcsIF9fcHl4X25fc19lcnJvciwgX19weXhfdF82KSA8IDApIF9fUFlYX0VS UigwLCAxNTMsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9f cHl4X3RfNywgX19weXhfbl9zX2Vycm9yLCBfX3B5eF90XzYpIDwgMCkgX19QWVhfRVJSKDAsIDE1 NSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82 ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDUKKysgIC8q ICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxNDcKKyAgKiAKKyAgKiAKKyAgKiBjbGFz cyBFT0ZSZWFzb25zOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICIiIktu b3duIHBvc3NpYmxlIHZhbHVlcyBmb3IgRW5kT2ZGaWxlUmVhY2hlZCByZWFzb24uCisgICogCisg ICovCistICBfX3B5eF90XzYgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZSgoKFB5T2JqZWN0KikmX19Q eXhfRGVmYXVsdENsYXNzVHlwZSksIF9fcHl4X25fc19FT0ZSZWFzb25zLCBfX3B5eF9lbXB0eV90 dXBsZSwgX19weXhfdF83LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBf X1BZWF9FUlIoMCwgMTQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNiA9IF9fUHl4X1B5 M0NsYXNzQ3JlYXRlKCgoUHlPYmplY3QqKSZfX1B5eF9EZWZhdWx0Q2xhc3NUeXBlKSwgX19weXhf bl9zX0VPRlJlYXNvbnMsIF9fcHl4X2VtcHR5X3R1cGxlLCBfX3B5eF90XzcsIE5VTEwsIDAsIDEp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxNDcsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CistICBpZiAoUHlEaWN0X1NldEl0ZW0o X19weXhfZCwgX19weXhfbl9zX0VPRlJlYXNvbnMsIF9fcHl4X3RfNikgPCAwKSBfX1BZWF9FUlIo MCwgMTQ1LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBf X3B5eF9uX3NfRU9GUmVhc29ucywgX19weXhfdF82KSA8IDApIF9fUFlYX0VSUigwLCAxNDcsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7 CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2 aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMTgKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozMjAKKyAgKiAKKyAgKiAKKyAgKiBkZWYgX2Vycm9ycyhmbik6ICAgICAg ICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgZGVmIHdyYXBwZWQoKmssICoqa3cpOgor ICAqICAgICAgICAgdiA9IGZuKCprLCAqKmt3KQorICAqLworLSAgX19weXhfdF83ID0gUHlDRnVu Y3Rpb25fTmV3RXgoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzVfZXJyb3JzLCBO VUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMCwgMzE4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNyA9IFB5 Q0Z1bmN0aW9uX05ld0V4KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl81X2Vycm9y cywgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdik7IGlmICh1bmxpa2VseSghX19w eXhfdF83KSkgX19QWVhfRVJSKDAsIDMyMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RS RUYoX19weXhfdF83KTsKKy0gIGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3Nf ZXJyb3JzLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDMxOCwgX19weXhfTDFfZXJyb3Ip CisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhfbl9zX2Vycm9ycywgX19weXhf dF83KSA8IDApIF9fUFlYX0VSUigwLCAzMjAsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6MzI2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MzI4CisgICogCisgICogCisgICogY2xhc3MgTVBWRXJyb3IoRXhjZXB0aW9uKTogICAgICAgICAg ICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBjb2RlID0gTm9uZQorICAqIAorICAqLworLSAg X19weXhfdF83ID0gUHlUdXBsZV9OZXcoMSk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19Q WVhfRVJSKDAsIDMyNiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzcgPSBQeVR1cGxlX05l dygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzI4LCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworICAgX19QeXhfSU5DUkVGKCgo UHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOworICAg X19QeXhfR0lWRVJFRigoKFB5T2JqZWN0ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0 aW9uKVswXSkpKTsKKyAgIFB5VHVwbGVfU0VUX0lURU0oX19weXhfdF83LCAwLCAoKFB5T2JqZWN0 ICopKCYoKFB5VHlwZU9iamVjdCopUHlFeGNfRXhjZXB0aW9uKVswXSkpKTsKKy0gIF9fcHl4X3Rf NiA9IF9fUHl4X0NhbGN1bGF0ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90XzcpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAzMjYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19w eXhfdF82ID0gX19QeXhfQ2FsY3VsYXRlTWV0YWNsYXNzKE5VTEwsIF9fcHl4X3RfNyk7IGlmICh1 bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDMyOCwgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKy0gIF9fcHl4X3RfNCA9IF9fUHl4X1B5M01ldGFj bGFzc1ByZXBhcmUoX19weXhfdF82LCBfX3B5eF90XzcsIF9fcHl4X25fc19NUFZFcnJvciwgX19w eXhfbl9zX01QVkVycm9yLCAoUHlPYmplY3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9s aWJzX21wdiwgKFB5T2JqZWN0ICopIE5VTEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9f UFlYX0VSUigwLCAzMjYsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF80ID0gX19QeXhfUHkz TWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzYsIF9fcHl4X3RfNywgX19weXhfbl9zX01QVkVycm9y LCBfX3B5eF9uX3NfTVBWRXJyb3IsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0 dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF80 KSkgX19QWVhfRVJSKDAsIDMyOCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19w eXhfdF80KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjcKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozMjkKKyAgKiAKKyAgKiBjbGFzcyBN UFZFcnJvcihFeGNlcHRpb24pOgorICAqICAgICBjb2RlID0gTm9uZSAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisgICogCisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlKToKKyAgKi8K Ky0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19jb2RlLCBQ eV9Ob25lKSA8IDApIF9fUFlYX0VSUigwLCAzMjcsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9f UHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX2NvZGUsIFB5X05vbmUpIDwg MCkgX19QWVhfRVJSKDAsIDMyOSwgX19weXhfTDFfZXJyb3IpCisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzI5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzMxCisgICogICAgIGNvZGUgPSBOb25lCisgICogCisgICogICAgIGRlZiBfX2luaXRf XyhzZWxmLCBlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2Vs Zi5jb2RlID0gZQorICAqICAgICAgICAgY2RlZiBjb25zdCBjaGFyKiBlcnJfYworICAqLworLSAg X19weXhfdF8xID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80 bGlic18zbXB2XzhNUFZFcnJvcl8xX19pbml0X18sIDAsIF9fcHl4X25fc19NUFZFcnJvcl9fX2lu aXQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmpl Y3QgKilfX3B5eF9jb2Rlb2JqX18yNikpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlY X0VSUigwLCAzMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF8xID0gX19QeXhfQ3lGdW5j dGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzhNUFZFcnJvcl8xX19p bml0X18sIDAsIF9fcHl4X25fc19NUFZFcnJvcl9fX2luaXQsIE5VTEwsIF9fcHl4X25fc192aWRj dXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18yNikp OyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMzEsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhfU2V0TmFtZUlu Q2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3NfaW5pdCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VS UigwLCAzMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9f cHl4X3RfNCwgX19weXhfbl9zX2luaXQsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMzMx LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEg PSAwOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyNgorKyAgLyog InZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjMyOAorICAqIAorICAqIAorICAqIGNsYXNz IE1QVkVycm9yKEV4Y2VwdGlvbik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgY29kZSA9IE5vbmUKKyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X1B5M0NsYXNz Q3JlYXRlKF9fcHl4X3RfNiwgX19weXhfbl9zX01QVkVycm9yLCBfX3B5eF90XzcsIF9fcHl4X3Rf NCwgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDMy NiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZShf X3B5eF90XzYsIF9fcHl4X25fc19NUFZFcnJvciwgX19weXhfdF83LCBfX3B5eF90XzQsIE5VTEws IDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAzMjgsIF9fcHl4 X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoUHlEaWN0X1Nl dEl0ZW0oX19weXhfZCwgX19weXhfbl9zX01QVkVycm9yLCBfX3B5eF90XzEpIDwgMCkgX19QWVhf RVJSKDAsIDMyNiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhf ZCwgX19weXhfbl9zX01QVkVycm9yLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDMyOCwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0g MDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhf dF83KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYu cHl4IjozNDAKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDIKKyAgKiAg ICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmLCBlKQorICAqIAorICAqIGNsYXNzIFB5TVBW RXJyb3IoRXhjZXB0aW9uKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBw YXNzCisgICogCisgICovCistICBfX3B5eF90XzcgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzQwLCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfNyA9IFB5VHVwbGVfTmV3KDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlY X0VSUigwLCAzNDIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7 CisgICBfX1B5eF9JTkNSRUYoKChQeU9iamVjdCAqKSgmKChQeVR5cGVPYmplY3QqKVB5RXhjX0V4 Y2VwdGlvbilbMF0pKSk7CisgICBfX1B5eF9HSVZFUkVGKCgoUHlPYmplY3QgKikoJigoUHlUeXBl T2JqZWN0KilQeUV4Y19FeGNlcHRpb24pWzBdKSkpOworICAgUHlUdXBsZV9TRVRfSVRFTShfX3B5 eF90XzcsIDAsICgoUHlPYmplY3QgKikoJigoUHlUeXBlT2JqZWN0KilQeUV4Y19FeGNlcHRpb24p WzBdKSkpOworLSAgX19weXhfdF82ID0gX19QeXhfQ2FsY3VsYXRlTWV0YWNsYXNzKE5VTEwsIF9f cHl4X3RfNyk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDM0MCwgX19w eXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9DYWxjdWxhdGVNZXRhY2xhc3MoTlVM TCwgX19weXhfdF83KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMzQy LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworLSAgX19weXhf dF80ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzYsIF9fcHl4X3RfNywgX19w eXhfbl9zX1B5TVBWRXJyb3IsIF9fcHl4X25fc19QeU1QVkVycm9yLCAoUHlPYmplY3QgKikgTlVM TCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5VTEwpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNDAsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19weXhfdF80ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzYsIF9fcHl4 X3RfNywgX19weXhfbl9zX1B5TVBWRXJyb3IsIF9fcHl4X25fc19QeU1QVkVycm9yLCAoUHlPYmpl Y3QgKikgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgKFB5T2JqZWN0ICopIE5V TEwpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNDIsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBfX3B5eF90XzEgPSBfX1B5 eF9QeTNDbGFzc0NyZWF0ZShfX3B5eF90XzYsIF9fcHl4X25fc19QeU1QVkVycm9yLCBfX3B5eF90 XzcsIF9fcHl4X3RfNCwgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19Q WVhfRVJSKDAsIDM0MCwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeTND bGFzc0NyZWF0ZShfX3B5eF90XzYsIF9fcHl4X25fc19QeU1QVkVycm9yLCBfX3B5eF90XzcsIF9f cHl4X3RfNCwgTlVMTCwgMCwgMSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJS KDAsIDM0MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF8xKTsKKy0g IGlmIChQeURpY3RfU2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfUHlNUFZFcnJvciwgX19weXhf dF8xKSA8IDApIF9fUFlYX0VSUigwLCAzNDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5RGlj dF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19QeU1QVkVycm9yLCBfX3B5eF90XzEpIDwgMCkg X19QWVhfRVJSKDAsIDM0MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhf dF8xKTsgX19weXhfdF8xID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90 XzQgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgICBf X1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0 ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNDUKKyAgKiAgICAgcGFzcworICAqIAorICAqIGNkZWYgX2NhbGxiYWNrcyA9IGRp Y3QoKSAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogY2RlZiBfcmVwbHlfdXNlcmRh dGFzID0gZGljdCgpCisgICogCisgICovCistICBfX3B5eF90XzcgPSBfX1B5eF9QeURpY3RfTmV3 UHJlc2l6ZWQoMCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDM0Mywg X19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzcgPSBfX1B5eF9QeURpY3RfTmV3UHJlc2l6ZWQo MCk7IGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDM0NSwgX19weXhfTDFf ZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAgIF9fUHl4X1hHT1RSRUYoX19w eXhfdl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfX2NhbGxiYWNrcyk7CisgICBfX1B5eF9ERUNSRUZf U0VUKF9fcHl4X3ZfOXZpZGN1dHRlcl80bGlic18zbXB2X19jYWxsYmFja3MsIF9fcHl4X3RfNyk7 CisgICBfX1B5eF9HSVZFUkVGKF9fcHl4X3RfNyk7CisgICBfX3B5eF90XzcgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM0NAorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjM0NgorICAqIAorICAqIGNkZWYgX2NhbGxiYWNrcyA9IGRpY3Qo KQorICAqIGNkZWYgX3JlcGx5X3VzZXJkYXRhcyA9IGRpY3QoKSAgICAgICAgICAgICAjIDw8PDw8 PDw8PDw8PDw8CisgICogCisgICogY2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KToKKyAgKi8K Ky0gIF9fcHl4X3RfNyA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMzQ0LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNyA9IF9fUHl4X1B5RGljdF9OZXdQcmVzaXplZCgwKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzcpKSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzcpOworICAgX19QeXhfWEdPVFJFRihfX3B5eF92Xzl2aWRjdXR0ZXJfNGxpYnNfM21w dl9fcmVwbHlfdXNlcmRhdGFzKTsKKyAgIF9fUHl4X0RFQ1JFRl9TRVQoX19weXhfdl85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfX3JlcGx5X3VzZXJkYXRhcywgX19weXhfdF83KTsKKyAgIF9fUHl4X0dJ VkVSRUYoX19weXhfdF83KTsKKyAgIF9fcHl4X3RfNyA9IDA7CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MzQ2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MzQ4CisgICogY2RlZiBfcmVwbHlfdXNlcmRhdGFzID0gZGljdCgpCisgICogCisgICog Y2xhc3MgX1JlcGx5VXNlckRhdGEob2JqZWN0KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6CisgICogICAgICAgICBzZWxmLmNv dW50ZXIgPSAwCisgICovCistICBfX3B5eF90XzcgPSBfX1B5eF9DYWxjdWxhdGVNZXRhY2xhc3Mo TlVMTCwgX19weXhfdHVwbGVfXzI3KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9F UlIoMCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNyA9IF9fUHl4X0NhbGN1bGF0 ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90dXBsZV9fMjcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NykpIF9fUFlYX0VSUigwLCAzNDgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNyk7CistICBfX3B5eF90XzYgPSBfX1B5eF9QeTNNZXRhY2xhc3NQcmVwYXJlKF9fcHl4 X3RfNywgX19weXhfdHVwbGVfXzI3LCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YSwgX19weXhfbl9z X1JlcGx5VXNlckRhdGEsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xp YnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSghX19weXhfdF82KSkgX19Q WVhfRVJSKDAsIDM0NiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzYgPSBfX1B5eF9QeTNN ZXRhY2xhc3NQcmVwYXJlKF9fcHl4X3RfNywgX19weXhfdHVwbGVfXzI3LCBfX3B5eF9uX3NfUmVw bHlVc2VyRGF0YSwgX19weXhfbl9zX1JlcGx5VXNlckRhdGEsIChQeU9iamVjdCAqKSBOVUxMLCBf X3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxp a2VseSghX19weXhfdF82KSkgX19QWVhfRVJSKDAsIDM0OCwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjozNDcKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDkKKyAg KiAKKyAgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmplY3QpOgorICAqICAgICBkZWYgX19pbml0 X18oc2VsZiwgZGF0YSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAg IHNlbGYuY291bnRlciA9IDAKKyAgKiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKKyAgKi8KKy0g IF9fcHl4X3RfNCA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzFfX2luaXRfXywgMCwgX19weXhfbl9zX1JlcGx5 VXNlckRhdGFfX19pbml0LCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5 eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMjkpKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzQpKSBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3RfNCA9 IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8x NF9SZXBseVVzZXJEYXRhXzFfX2luaXRfXywgMCwgX19weXhfbl9zX1JlcGx5VXNlckRhdGFfX19p bml0LCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2Jq ZWN0ICopX19weXhfY29kZW9ial9fMjkpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgMzQ5LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQp OworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNiwgX19weXhfbl9zX2luaXQs IF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ3LCBfX3B5eF9MMV9lcnJvcikKKysgIGlm IChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzYsIF9fcHl4X25fc19pbml0LCBfX3B5eF90 XzQpIDwgMCkgX19QWVhfRVJSKDAsIDM0OSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNS RUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjozNTIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijoz NTQKKyAgKiAgICAgICAgIHNlbGYub2JzZXJ2ZWQgPSBGYWxzZQorICAqIAorICAqICAgICBkZWYg YWRkKHNlbGYpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgICAgICBzZWxm LmNvdW50ZXIgKz0gMQorICAqIAorICAqLworLSAgX19weXhfdF80ID0gX19QeXhfQ3lGdW5jdGlv bl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0X1JlcGx5VXNlckRhdGFf M2FkZCwgMCwgX19weXhfbl9zX1JlcGx5VXNlckRhdGFfYWRkLCBOVUxMLCBfX3B5eF9uX3Nfdmlk Y3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMzEp KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzUyLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fcHl4X3RfNCA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBseVVzZXJEYXRhXzNhZGQsIDAsIF9fcHl4X25fc19S ZXBseVVzZXJEYXRhX2FkZCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19w eXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzMxKSk7IGlmICh1bmxpa2VseSghX19w eXhfdF80KSkgX19QWVhfRVJSKDAsIDM1NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RS RUYoX19weXhfdF80KTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzYsIF9f cHl4X25fc19hZGQsIF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzUyLCBfX3B5eF9MMV9l cnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzYsIF9fcHl4X25fc19h ZGQsIF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzU0LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjM1NQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjM1NworICAqICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKKyAgKiAKKyAgKiAg ICAgZGVmIHJlbW92ZShzZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAg ICAgICAgc2VsZi5jb3VudGVyIC09IDEKKyAgKiAKKyAgKi8KKy0gIF9fcHl4X3RfNCA9IF9fUHl4 X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNF9SZXBs eVVzZXJEYXRhXzVyZW1vdmUsIDAsIF9fcHl4X25fc19SZXBseVVzZXJEYXRhX3JlbW92ZSwgTlVM TCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9f cHl4X2NvZGVvYmpfXzMzKSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAs IDM1NSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzQgPSBfX1B5eF9DeUZ1bmN0aW9uX05l dygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRfUmVwbHlVc2VyRGF0YV81cmVt b3ZlLCAwLCBfX3B5eF9uX3NfUmVwbHlVc2VyRGF0YV9yZW1vdmUsIE5VTEwsIF9fcHl4X25fc192 aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18z MykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCAzNTcsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CistICBpZiAoX19QeXhfU2V0TmFt ZUluQ2xhc3MoX19weXhfdF82LCBfX3B5eF9uX3NfcmVtb3ZlLCBfX3B5eF90XzQpIDwgMCkgX19Q WVhfRVJSKDAsIDM1NSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xh c3MoX19weXhfdF82LCBfX3B5eF9uX3NfcmVtb3ZlLCBfX3B5eF90XzQpIDwgMCkgX19QWVhfRVJS KDAsIDM1NywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19w eXhfdF80ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDYK KysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjozNDgKKyAgKiBjZGVmIF9yZXBs eV91c2VyZGF0YXMgPSBkaWN0KCkKKyAgKiAKKyAgKiBjbGFzcyBfUmVwbHlVc2VyRGF0YShvYmpl Y3QpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGRlZiBfX2luaXRfXyhz ZWxmLCBkYXRhKToKKyAgKiAgICAgICAgIHNlbGYuY291bnRlciA9IDAKKyAgKi8KKy0gIF9fcHl4 X3RfNCA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKF9fcHl4X3RfNywgX19weXhfbl9zX1JlcGx5VXNl ckRhdGEsIF9fcHl4X3R1cGxlX18yNywgX19weXhfdF82LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzQ2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f cHl4X3RfNCA9IF9fUHl4X1B5M0NsYXNzQ3JlYXRlKF9fcHl4X3RfNywgX19weXhfbl9zX1JlcGx5 VXNlckRhdGEsIF9fcHl4X3R1cGxlX18yNywgX19weXhfdF82LCBOVUxMLCAwLCAxKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMzQ4LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKF9fcHl4X2Qs IF9fcHl4X25fc19SZXBseVVzZXJEYXRhLCBfX3B5eF90XzQpIDwgMCkgX19QWVhfRVJSKDAsIDM0 NiwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlEaWN0X1NldEl0ZW0oX19weXhfZCwgX19weXhf bl9zX1JlcGx5VXNlckRhdGEsIF9fcHl4X3RfNCkgPCAwKSBfX1BZWF9FUlIoMCwgMzQ4LCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOwor ICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9IDA7CisgICBfX1B5eF9ERUNS RUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4Ijo0MTEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo0 MTMKKyAgKiAgICAgIyAgICAgICAgIG1wdl9yZXN1bWUoc2VsZi5fY3R4KQorICAqIAorICAqICAg ICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGRlZiByZXF1 ZXN0X2V2ZW50KHNlbGYsIGV2ZW50LCBlbmFibGUpOgorICAqICAgICAgICAgIiIiRW5hYmxlIG9y IGRpc2FibGUgYSBnaXZlbiBldmVudC4KKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgNDExLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgNDEzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJF RihfX3B5eF90XzYpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQx MgorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQxNAorICAqIAorICAqICAg ICBAX2Vycm9ycworICAqICAgICBkZWYgcmVxdWVzdF9ldmVudChzZWxmLCBldmVudCwgZW5hYmxl KTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgIiIiRW5hYmxlIG9y IGRpc2FibGUgYSBnaXZlbiBldmVudC4KKyAgKiAKKyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNs YXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQsIF9fcHl4X25fc19yZXF1ZXN0X2V2ZW50KTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzQpKSBfX1BZWF9FUlIoMCwgNDEyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE5h bWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80 bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19yZXF1ZXN0X2V2ZW50KTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDE0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzQpOworICAgX19weXhfdF8xID0gTlVMTDsKKyAgIGlmIChDWVRIT05f VU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsK K0BAIC0yNjQ2NSwzMSArMjY0NjUsMzEgQEAgaWYgKCFfX1B5eF9SZWZOYW5ueSkgeworICAgX19w eXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82 LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4 X3RfNiwgX19weXhfdF80KTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8x ID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYg KHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDExLCBfX3B5eF9MMV9lcnJvcikK KysgIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDQxMywgX19weXhfTDFf ZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5 eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAq KV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5 eF9uX3NfcmVxdWVzdF9ldmVudCwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA0MTIsIF9f cHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfcmVx dWVzdF9ldmVudCwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA0MTQsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgICBQeVR5 cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpOwor IAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQyOQorKyAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzMQorICAqICAgICAgICAgcmV0dXJuIGVycgorICAq IAorICAqICAgICBAX2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAg IGRlZiBzZXRfbG9nX2xldmVsKHNlbGYsIGxvZ2xldmVsKToKKyAgKiAgICAgICAgICIiIldyYXBz OiBtcHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUds b2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5 eF90XzYpKSBfX1BZWF9FUlIoMCwgNDI5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDMxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzYpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjQzMAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQzMgorICAqIAor ICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgc2V0X2xvZ19sZXZlbChzZWxmLCBsb2dsZXZl bCk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICIiIldyYXBzOiBt cHZfcmVxdWVzdF9sb2dfbWVzc2FnZXMiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgK KyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19w eXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19zZXRfbG9n X2xldmVsKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDMwLCBfX3B5 eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0 ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19z ZXRfbG9nX2xldmVsKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgNDMy LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzQpOworICAgX19weXhf dF8xID0gTlVMTDsKKyAgIGlmIChDWVRIT05fVU5QQUNLX01FVEhPRFMgJiYgdW5saWtlbHkoUHlN ZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsKK0BAIC0yNjUwNCwzMSArMjY1MDQsMzEgQEAgaWYg KCFfX1B5eF9SZWZOYW5ueSkgeworICAgX19weXhfdF83ID0gKF9fcHl4X3RfMSkgPyBfX1B5eF9Q eU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90XzEsIF9fcHl4X3RfNCkgOiBfX1B5 eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19weXhfdF80KTsKKyAgIF9fUHl4X1hE RUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90 XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9F UlIoMCwgNDI5LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF83KSkg X19QWVhfRVJSKDAsIDQzMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhf dF83KTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgaWYg KFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0X2xvZ19sZXZlbCwgX19weXhfdF83 KSA8IDApIF9fUFlYX0VSUigwLCA0MzAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5RGljdF9T ZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250 ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0X2xvZ19sZXZlbCwgX19weXhfdF83KSA8IDApIF9f UFlYX0VSUigwLCA0MzIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3Rf Nyk7IF9fcHl4X3RfNyA9IDA7CisgICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ0MAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0Mgor ICAqICAgICAgICAgcmV0dXJuIGVycgorICAqIAorICAqICAgICBAX2Vycm9ycyAgICAgICAgICAg ICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGRlZiBsb2FkX2NvbmZpZyhzZWxmLCBmaWxlbmFt ZSk6CisgICogICAgICAgICAiIiJXcmFwczogbXB2X2xvYWRfY29uZmlnX2ZpbGUiIiIKKyAgKi8K Ky0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3Jz KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDQwLCBfX3B5eF9MMV9l cnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3Nf ZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNDQyLCBfX3B5 eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjQ0MQorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjQ0MworICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgbG9hZF9j b25maWcoc2VsZiwgZmlsZW5hbWUpOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICog ICAgICAgICAiIiJXcmFwczogbXB2X2xvYWRfY29uZmlnX2ZpbGUiIiIKKyAgKiAgICAgICAgIGFz c2VydCBzZWxmLl9jdHgKKyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwg KFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9f cHl4X25fc19sb2FkX2NvbmZpZyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJS KDAsIDQ0MSwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90 XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0 LCBfX3B5eF9uX3NfbG9hZF9jb25maWcpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCA0NDMsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7 CisgICBfX3B5eF90XzEgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1 bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgeworQEAgLTI2NTQzLDMxICsyNjU0 MywzMSBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7CisgICBfX3B5eF90XzcgPSAoX19weXhfdF8x KSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhf dF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5eF90XzQpOwor ICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworICAgX19QeXhfREVD UkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NykpIF9fUFlYX0VSUigwLCA0NDAsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFf X3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNDQyLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dP VFJFRihfX3B5eF90XzcpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9fcHl4X3RfNiA9 IDA7CistICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1 dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19sb2FkX2NvbmZpZywg X19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA0NDEsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfbG9hZF9jb25maWcsIF9fcHl4X3RfNykg PCAwKSBfX1BZWF9FUlIoMCwgNDQzLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihf X3B5eF90XzcpOyBfX3B5eF90XzcgPSAwOworICAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBl Xzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4Ijo1NzMKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4 Ijo1NzUKKyAgKiAgICAgICAgIHJldHVybiByZXN1bHQKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMg ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBkZWYgZ2V0X3Byb3BlcnR5X2Fz eW5jKHNlbGYsIHByb3AsIGRhdGE9Tm9uZSk6CisgICogICAgICAgICAiIiJHZXRzIHRoZSB2YWx1 ZSBvZiBhIHByb3BlcnR5IGFzeW5jaHJvbm91c2x5LgorICAqLworLSAgX19QeXhfR2V0TW9kdWxl R2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfNikpIF9fUFlYX0VSUigwLCA1NzMsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA1NzUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19Q eXhfR09UUkVGKF9fcHl4X3RfNik7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6NTc0CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NTc2CisgICog CisgICogICAgIEBfZXJyb3JzCisgICogICAgIGRlZiBnZXRfcHJvcGVydHlfYXN5bmMoc2VsZiwg cHJvcCwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAg ICAgIiIiR2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBhc3luY2hyb25vdXNseS4KKyAgKiAK KyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19w eXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19nZXRfcHJv cGVydHlfYXN5bmMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA1NzQs IF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlP YmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhf bl9zX2dldF9wcm9wZXJ0eV9hc3luYyk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhf RVJSKDAsIDU3NiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsK KyAgIF9fcHl4X3RfMSA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVu bGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CitAQCAtMjY1ODIsMzEgKzI2NTgy LDMxIEBAIGlmICghX19QeXhfUmVmTmFubnkpIHsKKyAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEp ID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90 XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7Cisg ICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX1B5eF9ERUNS RUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83 KSkgX19QWVhfRVJSKDAsIDU3MywgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9f cHl4X3RfNykpIF9fUFlYX0VSUigwLCA1NzUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNyk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0g MDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX2dldF9wcm9wZXJ0eV9h c3luYywgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA1NzQsIF9fcHl4X0wxX2Vycm9yKQor KyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfZ2V0X3Byb3BlcnR5X2FzeW5j LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDU3NiwgX19weXhfTDFfZXJyb3IpCisgICBf X1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAgIFB5VHlwZV9Nb2RpZmll ZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7CisgCistICAvKiAi dmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjM1CisrICAvKiAidmlkY3V0dGVyL2xpYnMv cHltcHYvbXB2LnB5eCI6NjM3CisgICogICAgICAgICByZXR1cm4gdgorICAqIAorICAqICAgICBA X2Vycm9ycyAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogICAgIGRlZiBzZXRfcHJv cGVydHkoc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSwgYXN5bmNocm9ub3VzPUZhbHNlLCBkYXRhPU5v bmUpOgorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRf cHJvcGVydHlfYXN5bmMiIiIKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19w eXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgNjM1LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYp KSBfX1BZWF9FUlIoMCwgNjM3LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzYpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzNgorKyAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjYzOAorICAqIAorICAqICAgICBAX2Vy cm9ycworICAqICAgICBkZWYgc2V0X3Byb3BlcnR5KHNlbGYsIHByb3AsIHZhbHVlPVRydWUsIGFz eW5jaHJvbm91cz1GYWxzZSwgZGF0YT1Ob25lKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8 PAorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl9zZXRfcHJvcGVydHkgYW5kIG1wdl9zZXRfcHJv cGVydHlfYXN5bmMiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKi8KKy0gIF9f UHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc19zZXRfcHJvcGVydHkpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA2MzYsIF9fcHl4X0wxX2Vycm9yKQor KyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlw ZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3NldF9wcm9wZXJ0eSk7 IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDYzOCwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgIF9fcHl4X3RfMSA9IE5VTEw7Cisg ICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9f cHl4X3RfNikpKSB7CitAQCAtMjY2MjEsMzEgKzI2NjIxLDMxIEBAIGlmICghX19QeXhfUmVmTmFu bnkpIHsKKyAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDYzNSwgX19w eXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA2 MzcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRl bSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+ dHBfZGljdCwgX19weXhfbl9zX3NldF9wcm9wZXJ0eSwgX19weXhfdF83KSA8IDApIF9fUFlYX0VS UigwLCA2MzYsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVj dCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBf X3B5eF9uX3Nfc2V0X3Byb3BlcnR5LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDYzOCwg X19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0g MDsKKyAgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NjczCisr ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njc1CisgICogICAgICAgICByZXR1 cm4gZXJyCisgICogCisgICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAgICAgZGVmIHNldF9vcHRpb24oc2VsZiwgcHJvcCwgdmFsdWU9VHJ1ZSk6CisgICog ICAgICAgICAiIiJXcmFwczogbXB2X3NldF9vcHRpb24iIiIKKyAgKi8KKy0gIF9fUHl4X0dldE1v ZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNjczLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4 X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgNjc1LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzYpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjY3NAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjY3Ngor ICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgc2V0X29wdGlvbihzZWxmLCBwcm9w LCB2YWx1ZT1UcnVlKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAg IiIiV3JhcHM6IG1wdl9zZXRfb3B0aW9uIiIiCisgICogICAgICAgICBhc3NlcnQgc2VsZi5fY3R4 CisgICovCistICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9f cHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5eF9uX3Nfc2V0X29w dGlvbik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDY3NCwgX19weXhf TDFfZXJyb3IpCisrICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAq KV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LCBfX3B5eF9uX3Nfc2V0 X29wdGlvbik7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDY3NiwgX19w eXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgIF9fcHl4X3RfMSA9 IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5KFB5TWV0aG9k X0NoZWNrKF9fcHl4X3RfNikpKSB7CitAQCAtMjY2NjAsMzEgKzI2NjYwLDMxIEBAIGlmICghX19Q eXhfUmVmTmFubnkpIHsKKyAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmpl Y3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlP YmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CisgICBfX1B5eF9YREVDUkVG KF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsg X19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAs IDY3MywgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlY X0VSUigwLCA2NzUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7 CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURp Y3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZf Q29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3NldF9vcHRpb24sIF9fcHl4X3RfNykgPCAwKSBf X1BZWF9FUlIoMCwgNjc0LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeURpY3RfU2V0SXRlbSgo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dC0+dHBf ZGljdCwgX19weXhfbl9zX3NldF9vcHRpb24sIF9fcHl4X3RfNykgPCAwKSBfX1BZWF9FUlIoMCwg Njc2LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzcpOyBfX3B5eF90 XzcgPSAwOworICAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2 OTUKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo2OTcKKyAgKiAgICAgICAg IHJldHVybiBlcnIKKyAgKiAKKyAgKiAgICAgQF9lcnJvcnMgICAgICAgICAgICAgIyA8PDw8PDw8 PDw8PDw8PAorICAqICAgICBkZWYgaW5pdGlhbGl6ZShzZWxmKToKKyAgKiAgICAgICAgICIiIldy YXBzOiBtcHZfaW5pdGlhbGl6ZSIiIgorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFt ZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikp IF9fUFlYX0VSUigwLCA2OTUsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TW9kdWxlR2xv YmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4 X3RfNikpIF9fUFlYX0VSUigwLCA2OTcsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVG KF9fcHl4X3RfNik7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk2 CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6Njk4CisgICogCisgICogICAg IEBfZXJyb3JzCisgICogICAgIGRlZiBpbml0aWFsaXplKHNlbGYpOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisgICogICAgICAgICAiIiJXcmFwczogbXB2X2luaXRpYWxpemUiIiIKKyAg KiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKi8KKy0gIF9fUHl4X0dldE5hbWVJbkNsYXNz KF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2 X0NvbnRleHQsIF9fcHl4X25fc19pbml0aWFsaXplKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQp KSBfX1BZWF9FUlIoMCwgNjk2LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE5hbWVJbkNs YXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X0NvbnRleHQsIF9fcHl4X25fc19pbml0aWFsaXplKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90 XzQpKSBfX1BZWF9FUlIoMCwgNjk4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihf X3B5eF90XzQpOworICAgX19weXhfdF8xID0gTlVMTDsKKyAgIGlmIChDWVRIT05fVU5QQUNLX01F VEhPRFMgJiYgdW5saWtlbHkoUHlNZXRob2RfQ2hlY2soX19weXhfdF82KSkpIHsKK0BAIC0yNjY5 OSwzMSArMjY2OTksMzEgQEAgaWYgKCFfX1B5eF9SZWZOYW5ueSkgeworICAgX19weXhfdF83ID0g KF9fcHl4X3RfMSkgPyBfX1B5eF9QeU9iamVjdF9DYWxsMkFyZ3MoX19weXhfdF82LCBfX3B5eF90 XzEsIF9fcHl4X3RfNCkgOiBfX1B5eF9QeU9iamVjdF9DYWxsT25lQXJnKF9fcHl4X3RfNiwgX19w eXhfdF80KTsKKyAgIF9fUHl4X1hERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAg IF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5eF90XzQgPSAwOworLSAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNjk1LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmICh1 bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDY5NywgX19weXhfTDFfZXJyb3IpCisg ICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBf X3B5eF90XzYgPSAwOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfaW5p dGlhbGl6ZSwgX19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2OTYsIF9fcHl4X0wxX2Vycm9y KQorKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfaW5pdGlhbGl6ZSwgX19w eXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA2OTgsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf REVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgICBQeVR5cGVfTW9kaWZpZWQoX19w eXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQpOworIAorLSAgLyogInZpZGN1 dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjc0OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2 L21wdi5weXgiOjc1MAorICAqICAgICAgICAgc2VsZi5jYWxsYmFja3RocmVhZC5zdGFydCgpCisg ICogCisgICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgZGVmIG9ic2VydmVfcHJvcGVydHkoc2VsZiwgcHJvcCwgZGF0YT1Ob25lKToKKyAgKiAgICAg ICAgICIiIldyYXBzOiBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSIiIgorICAqLworLSAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA3NDgsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19Q eXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCA3NTAsIF9fcHl4X0wxX2Vycm9yKQor ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNik7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHlt cHYvbXB2LnB5eCI6NzQ5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzUx CisgICogCisgICogICAgIEBfZXJyb3JzCisgICogICAgIGRlZiBvYnNlcnZlX3Byb3BlcnR5KHNl bGYsIHByb3AsIGRhdGE9Tm9uZSk6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgICAgICIiIldyYXBzOiBtcHZfb2JzZXJ2ZV9wcm9wZXJ0eSIiIgorICAqICAgICAgICAgYXNz ZXJ0IHNlbGYuX2N0eAorICAqLworLSAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19w eXhfbl9zX29ic2VydmVfcHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlY X0VSUigwLCA3NDksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19w eXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29u dGV4dCwgX19weXhfbl9zX29ic2VydmVfcHJvcGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCA3NTEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNCk7CisgICBfX3B5eF90XzEgPSBOVUxMOworICAgaWYgKENZVEhPTl9VTlBBQ0tfTUVU SE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90XzYpKSkgeworQEAgLTI2NzM4 LDMxICsyNjczOCwzMSBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7CisgICBfX3B5eF90XzcgPSAo X19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhfX3B5eF90XzYsIF9fcHl4X3Rf MSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVBcmcoX19weXhfdF82LCBfX3B5 eF90XzQpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworICAg X19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7CistICBpZiAodW5saWtlbHko IV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCA3NDgsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVu bGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgNzUwLCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNik7IF9f cHl4X3RfNiA9IDA7CistICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19vYnNl cnZlX3Byb3BlcnR5LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDc0OSwgX19weXhfTDFf ZXJyb3IpCisrICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19vYnNlcnZlX3By b3BlcnR5LCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDc1MSwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAgIFB5VHlwZV9N b2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7CisgCist ICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6NzcwCisrICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6NzcyCisgICogICAgICAgICByZXR1cm4gZXJyCisgICogCisg ICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgZGVm IHVub2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKToKKyAgKiAgICAgICAgICIiIldyYXBzOiBt cHZfdW5vYnNlcnZlX3Byb3BlcnR5IiIiCisgICovCistICBfX1B5eF9HZXRNb2R1bGVHbG9iYWxO YW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19weXhfdF82 KSkgX19QWVhfRVJSKDAsIDc3MCwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfNiwgX19weXhfbl9zX2Vycm9ycyk7IGlmICh1bmxpa2VseSghX19w eXhfdF82KSkgX19QWVhfRVJSKDAsIDc3MiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RS RUYoX19weXhfdF82KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3 NzEKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4Ijo3NzMKKyAgKiAKKyAgKiAg ICAgQF9lcnJvcnMKKyAgKiAgICAgZGVmIHVub2JzZXJ2ZV9wcm9wZXJ0eShzZWxmLCBkYXRhKTog ICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgIiIiV3JhcHM6IG1wdl91 bm9ic2VydmVfcHJvcGVydHkiIiIKKyAgKiAgICAgICAgIGFzc2VydCBzZWxmLl9jdHgKKyAgKi8K Ky0gIF9fUHl4X0dldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5 cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X0NvbnRleHQsIF9fcHl4X25fc191bm9ic2VydmVfcHJv cGVydHkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNCkpIF9fUFlYX0VSUigwLCA3NzEsIF9fcHl4 X0wxX2Vycm9yKQorKyAgX19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3Qg KilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCwgX19weXhfbl9zX3Vu b2JzZXJ2ZV9wcm9wZXJ0eSk7IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAs IDc3MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF80KTsKKyAgIF9f cHl4X3RfMSA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYmIHVubGlrZWx5 KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CitAQCAtMjY3NzcsNTQgKzI2Nzc3LDU0IEBA IGlmICghX19QeXhfUmVmTmFubnkpIHsKKyAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19Q eXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDog X19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CisgICBfX1B5 eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19Q WVhfRVJSKDAsIDc3MCwgX19weXhfTDFfZXJyb3IpCisrICBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NykpIF9fUFlYX0VSUigwLCA3NzIsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9f cHl4X3RfNyk7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0g IGlmIChQeURpY3RfU2V0SXRlbSgoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRs aWJzXzNtcHZfQ29udGV4dC0+dHBfZGljdCwgX19weXhfbl9zX3Vub2JzZXJ2ZV9wcm9wZXJ0eSwg X19weXhfdF83KSA8IDApIF9fUFlYX0VSUigwLCA3NzEsIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYg KFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl9Db250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfdW5vYnNlcnZlX3Byb3BlcnR5LCBfX3B5 eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDc3MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9E RUNSRUYoX19weXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAgIFB5VHlwZV9Nb2RpZmllZChfX3B5 eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfQ29udGV4dCk7CisgCistICAvKiAidmlkY3V0 dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTM4CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYv bXB2LnB5eCI6OTQwCisgICogCisgICogY2RlZiBjbGFzcyBSZW5kZXJDb250ZXh0KG9iamVjdCk6 CisgICogICAgIEFQSV9PUEVOR0wgPSAib3BlbmdsIiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8 PDw8CisgICogICAgIFVQREFURV9GUkFNRSA9IE1QVl9SRU5ERVJfVVBEQVRFX0ZSQU1FCisgICog CisgICovCistICBpZiAoUHlEaWN0X1NldEl0ZW0oKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZp ZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRleHQtPnRwX2RpY3QsIF9fcHl4X25fc19BUElf T1BFTkdMLCBfX3B5eF9uX3Nfb3BlbmdsKSA8IDApIF9fUFlYX0VSUigwLCA5MzgsIF9fcHl4X0wx X2Vycm9yKQorKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfQVBJ X09QRU5HTCwgX19weXhfbl9zX29wZW5nbCkgPCAwKSBfX1BZWF9FUlIoMCwgOTQwLCBfX3B5eF9M MV9lcnJvcikKKyAgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJz XzNtcHZfUmVuZGVyQ29udGV4dCk7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6OTM5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6OTQxCisgICog Y2RlZiBjbGFzcyBSZW5kZXJDb250ZXh0KG9iamVjdCk6CisgICogICAgIEFQSV9PUEVOR0wgPSAi b3BlbmdsIgorICAqICAgICBVUERBVEVfRlJBTUUgPSBNUFZfUkVOREVSX1VQREFURV9GUkFNRSAg ICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICogCisgICogICAgIGNkZWY6CisgICovCist ICBfX3B5eF90XzcgPSBfX1B5eF9QeUludF9Gcm9tX2VudW1fX21wdl9yZW5kZXJfdXBkYXRlX2Zs YWcoTVBWX1JFTkRFUl9VUERBVEVfRlJBTUUpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9f UFlYX0VSUigwLCA5MzksIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF83ID0gX19QeXhfUHlJ bnRfRnJvbV9lbnVtX19tcHZfcmVuZGVyX3VwZGF0ZV9mbGFnKE1QVl9SRU5ERVJfVVBEQVRFX0ZS QU1FKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgOTQxLCBfX3B5eF9M MV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgaWYgKFB5RGljdF9TZXRJ dGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJD b250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfVVBEQVRFX0ZSQU1FLCBfX3B5eF90XzcpIDwgMCkg X19QWVhfRVJSKDAsIDkzOSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoUHlEaWN0X1NldEl0ZW0o KFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNvbnRl eHQtPnRwX2RpY3QsIF9fcHl4X25fc19VUERBVEVfRlJBTUUsIF9fcHl4X3RfNykgPCAwKSBfX1BZ WF9FUlIoMCwgOTQxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90Xzcp OyBfX3B5eF90XzcgPSAwOworICAgUHlUeXBlX01vZGlmaWVkKF9fcHl4X3B0eXBlXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDA5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTAxMQorICAqICAgICAgICAgc2VsZi5pbml0ZWQgPSBUcnVlCisgICogCisgICogICAgIEBfZXJy b3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgZGVmIHNldF9pY2NfcHJv ZmlsZShzZWxmLCBpY2NfYmxvYik6CisgICogICAgICAgICBjZGVmOgorICAqLworLSAgX19QeXhf R2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDA5LCBfX3B5eF9MMV9lcnJvcikKKysg IF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsg aWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTAxMSwgX19weXhfTDFfZXJy b3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYucHl4IjoxMDEwCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5 eCI6MTAxMgorICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgc2V0X2ljY19wcm9m aWxlKHNlbGYsIGljY19ibG9iKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAg ICAgICAgY2RlZjoKKyAgKiAgICAgICAgICAgICBtcHZfcmVuZGVyX3BhcmFtIHBhcmFtCisgICov CistICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9iamVjdCAqKV9fcHl4X3B0 eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LCBfX3B5eF9uX3Nfc2V0X2lj Y19wcm9maWxlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZWF9FUlIoMCwgMTAxMCwg X19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIChQeU9i amVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LCBf X3B5eF9uX3Nfc2V0X2ljY19wcm9maWxlKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzQpKSBfX1BZ WF9FUlIoMCwgMTAxMiwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF80 KTsKKyAgIF9fcHl4X3RfMSA9IE5VTEw7CisgICBpZiAoQ1lUSE9OX1VOUEFDS19NRVRIT0RTICYm IHVubGlrZWx5KFB5TWV0aG9kX0NoZWNrKF9fcHl4X3RfNikpKSB7CitAQCAtMjY4MzksMzEgKzI2 ODM5LDMxIEBAIGlmICghX19QeXhfUmVmTmFubnkpIHsKKyAgIF9fcHl4X3RfNyA9IChfX3B5eF90 XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJBcmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5 eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2FsbE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7 CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX1B5eF9E RUNSRUYoX19weXhfdF80KTsgX19weXhfdF80ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhf dF83KSkgX19QWVhfRVJSKDAsIDEwMDksIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwgMTAxMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9HT1RSRUYoX19weXhfdF83KTsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90 XzYgPSAwOworLSAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0 X2ljY19wcm9maWxlLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDEwMTAsIF9fcHl4X0wx X2Vycm9yKQorKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0 X2ljY19wcm9maWxlLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDEwMTIsIF9fcHl4X0wx X2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7CisgICBQ eVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18zbXB2X1JlbmRlckNv bnRleHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjEwMjgKKysg IC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDMwCisgICogICAgICAgICByZXR1 cm4gZXJyCisgICogCisgICogICAgIEBfZXJyb3JzICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8 PDwKKyAgKiAgICAgZGVmIHNldF9hbWJpZW50X2xpZ2h0KHNlbGYsIGx1eCk6CisgICogICAgICAg ICBjZGVmOgorICAqLworLSAgX19QeXhfR2V0TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9f cHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAx MDI4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhf dF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9F UlIoMCwgMTAzMCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsK KyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMDI5CisrICAvKiAidmlk Y3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTAzMQorICAqIAorICAqICAgICBAX2Vycm9ycwor ICAqICAgICBkZWYgc2V0X2FtYmllbnRfbGlnaHQoc2VsZiwgbHV4KTogICAgICAgICAgICAgIyA8 PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgY2RlZjoKKyAgKiAgICAgICAgICAgICBtcHZfcmVu ZGVyX3BhcmFtIHBhcmFtCisgICovCistICBfX1B5eF9HZXROYW1lSW5DbGFzcyhfX3B5eF90XzQs IChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250 ZXh0LCBfX3B5eF9uX3Nfc2V0X2FtYmllbnRfbGlnaHQpOyBpZiAodW5saWtlbHkoIV9fcHl4X3Rf NCkpIF9fUFlYX0VSUigwLCAxMDI5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fUHl4X0dldE5hbWVJ bkNsYXNzKF9fcHl4X3RfNCwgKFB5T2JqZWN0ICopX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGli c18zbXB2X1JlbmRlckNvbnRleHQsIF9fcHl4X25fc19zZXRfYW1iaWVudF9saWdodCk7IGlmICh1 bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwMzEsIF9fcHl4X0wxX2Vycm9yKQor ICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICBfX3B5eF90XzEgPSBOVUxMOworICAgaWYg KENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5eF90 XzYpKSkgeworQEAgLTI2ODc4LDMxICsyNjg3OCwzMSBAQCBpZiAoIV9fUHl4X1JlZk5hbm55KSB7 CisgICBfX3B5eF90XzcgPSAoX19weXhfdF8xKSA/IF9fUHl4X1B5T2JqZWN0X0NhbGwyQXJncyhf X3B5eF90XzYsIF9fcHl4X3RfMSwgX19weXhfdF80KSA6IF9fUHl4X1B5T2JqZWN0X0NhbGxPbmVB cmcoX19weXhfdF82LCBfX3B5eF90XzQpOworICAgX19QeXhfWERFQ1JFRihfX3B5eF90XzEpOyBf X3B5eF90XzEgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNCk7IF9fcHl4X3RfNCA9IDA7 CistICBpZiAodW5saWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMDI4LCBfX3B5eF9M MV9lcnJvcikKKysgIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEwMzAs IF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNyk7CisgICBfX1B5eF9E RUNSRUYoX19weXhfdF82KTsgX19weXhfdF82ID0gMDsKKy0gIGlmIChQeURpY3RfU2V0SXRlbSgo UHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4 dC0+dHBfZGljdCwgX19weXhfbl9zX3NldF9hbWJpZW50X2xpZ2h0LCBfX3B5eF90XzcpIDwgMCkg X19QWVhfRVJSKDAsIDEwMjksIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5RGljdF9TZXRJdGVt KChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250 ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3Nfc2V0X2FtYmllbnRfbGlnaHQsIF9fcHl4X3RfNykgPCAw KSBfX1BZWF9FUlIoMCwgMTAzMSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF83KTsgX19weXhfdF83ID0gMDsKKyAgIFB5VHlwZV9Nb2RpZmllZChfX3B5eF9wdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCk7CisgCistICAvKiAidmlkY3V0dGVy L2xpYnMvcHltcHYvbXB2LnB5eCI6MTA2OAorKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgiOjEwNzAKKyAgKiAgICAgICAgIHJldHVybiByZXQKKyAgKiAKKyAgKiAgICAgQF9lcnJv cnMgICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBkZWYgcmVuZGVyKHNlbGYs CisgICogICAgICAgICAgICAgICAgb3BlbmdsX2Zibz1Ob25lLAorICAqLworLSAgX19QeXhfR2V0 TW9kdWxlR2xvYmFsTmFtZShfX3B5eF90XzYsIF9fcHl4X25fc19lcnJvcnMpOyBpZiAodW5saWtl bHkoIV9fcHl4X3RfNikpIF9fUFlYX0VSUigwLCAxMDY4LCBfX3B5eF9MMV9lcnJvcikKKysgIF9f UHl4X0dldE1vZHVsZUdsb2JhbE5hbWUoX19weXhfdF82LCBfX3B5eF9uX3NfZXJyb3JzKTsgaWYg KHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTA3MCwgX19weXhfTDFfZXJyb3Ip CisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82KTsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9w eW1wdi9tcHYucHl4IjoxMDY5CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6 MTA3MQorICAqIAorICAqICAgICBAX2Vycm9ycworICAqICAgICBkZWYgcmVuZGVyKHNlbGYsICAg ICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgICAgICAgICBvcGVuZ2xfZmJv PU5vbmUsCisgICogICAgICAgICAgICAgICAgZmxpcF95PUZhbHNlLAorICAqLworLSAgX19QeXhf R2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85dmlkY3V0 dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgX19weXhfbl9zX3JlbmRlcik7IGlmICh1bmxp a2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwNjksIF9fcHl4X0wxX2Vycm9yKQorKyAg X19QeXhfR2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCAoUHlPYmplY3QgKilfX3B5eF9wdHlwZV85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfUmVuZGVyQ29udGV4dCwgX19weXhfbl9zX3JlbmRlcik7IGlm ICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDEwNzEsIF9fcHl4X0wxX2Vycm9y KQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgICBfX3B5eF90XzEgPSBOVUxMOworICAg aWYgKENZVEhPTl9VTlBBQ0tfTUVUSE9EUyAmJiB1bmxpa2VseShQeU1ldGhvZF9DaGVjayhfX3B5 eF90XzYpKSkgeworQEAgLTI2OTE3LDExNCArMjY5MTcsMTE0IEBAIGlmICghX19QeXhfUmVmTmFu bnkpIHsKKyAgIF9fcHl4X3RfNyA9IChfX3B5eF90XzEpID8gX19QeXhfUHlPYmplY3RfQ2FsbDJB cmdzKF9fcHl4X3RfNiwgX19weXhfdF8xLCBfX3B5eF90XzQpIDogX19QeXhfUHlPYmplY3RfQ2Fs bE9uZUFyZyhfX3B5eF90XzYsIF9fcHl4X3RfNCk7CisgICBfX1B5eF9YREVDUkVGKF9fcHl4X3Rf MSk7IF9fcHl4X3RfMSA9IDA7CisgICBfX1B5eF9ERUNSRUYoX19weXhfdF80KTsgX19weXhfdF80 ID0gMDsKKy0gIGlmICh1bmxpa2VseSghX19weXhfdF83KSkgX19QWVhfRVJSKDAsIDEwNjgsIF9f cHl4X0wxX2Vycm9yKQorKyAgaWYgKHVubGlrZWx5KCFfX3B5eF90XzcpKSBfX1BZWF9FUlIoMCwg MTA3MCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF83KTsKKyAgIF9f UHl4X0RFQ1JFRihfX3B5eF90XzYpOyBfX3B5eF90XzYgPSAwOworLSAgaWYgKFB5RGljdF9TZXRJ dGVtKChQeU9iamVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJD b250ZXh0LT50cF9kaWN0LCBfX3B5eF9uX3NfcmVuZGVyLCBfX3B5eF90XzcpIDwgMCkgX19QWVhf RVJSKDAsIDEwNjksIF9fcHl4X0wxX2Vycm9yKQorKyAgaWYgKFB5RGljdF9TZXRJdGVtKChQeU9i amVjdCAqKV9fcHl4X3B0eXBlXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl9SZW5kZXJDb250ZXh0LT50 cF9kaWN0LCBfX3B5eF9uX3NfcmVuZGVyLCBfX3B5eF90XzcpIDwgMCkgX19QWVhfRVJSKDAsIDEw NzEsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3Rf NyA9IDA7CisgICBQeVR5cGVfTW9kaWZpZWQoX19weXhfcHR5cGVfOXZpZGN1dHRlcl80bGlic18z bXB2X1JlbmRlckNvbnRleHQpOworIAorLSAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMzIKKysgIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9tcHYucHl4IjoxMTM0CisgICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfcGFyYW1zLCAqYXJncywgKiprd2Fy Z3MpCisgICogCisgICogY2xhc3MgQ2FsbGJhY2tUaHJlYWQoVGhyZWFkKTogICAgICAgICAgICAg IyA8PDw8PDw8PDw8PDw8PAorICAqICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICogICAgICAg ICBUaHJlYWQuX19pbml0X18oc2VsZikKKyAgKi8KKy0gIF9fUHl4X0dldE1vZHVsZUdsb2JhbE5h bWUoX19weXhfdF83LCBfX3B5eF9uX3NfVGhyZWFkKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90Xzcp KSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJyb3IpCisrICBfX1B5eF9HZXRNb2R1bGVH bG9iYWxOYW1lKF9fcHl4X3RfNywgX19weXhfbl9zX1RocmVhZCk7IGlmICh1bmxpa2VseSghX19w eXhfdF83KSkgX19QWVhfRVJSKDAsIDExMzQsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09U UkVGKF9fcHl4X3RfNyk7CistICBfX3B5eF90XzYgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlr ZWx5KCFfX3B5eF90XzYpKSBfX1BZWF9FUlIoMCwgMTEzMiwgX19weXhfTDFfZXJyb3IpCisrICBf X3B5eF90XzYgPSBQeVR1cGxlX05ldygxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzYpKSBfX1BZ WF9FUlIoMCwgMTEzNCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9HT1RSRUYoX19weXhfdF82 KTsKKyAgIF9fUHl4X0dJVkVSRUYoX19weXhfdF83KTsKKyAgIFB5VHVwbGVfU0VUX0lURU0oX19w eXhfdF82LCAwLCBfX3B5eF90XzcpOworICAgX19weXhfdF83ID0gMDsKKy0gIF9fcHl4X3RfNyA9 IF9fUHl4X0NhbGN1bGF0ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90XzYpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMTMyLCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfNyA9IF9fUHl4X0NhbGN1bGF0ZU1ldGFjbGFzcyhOVUxMLCBfX3B5eF90XzYpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfNykpIF9fUFlYX0VSUigwLCAxMTM0LCBfX3B5eF9MMV9lcnJvcikKKyAg IF9fUHl4X0dPVFJFRihfX3B5eF90XzcpOworLSAgX19weXhfdF80ID0gX19QeXhfUHkzTWV0YWNs YXNzUHJlcGFyZShfX3B5eF90XzcsIF9fcHl4X3RfNiwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFk LCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIChQeU9iamVjdCAqKSBOVUxMLCBfX3B5eF9uX3Nf dmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7IGlmICh1bmxpa2VseSghX19w eXhfdF80KSkgX19QWVhfRVJSKDAsIDExMzIsIF9fcHl4X0wxX2Vycm9yKQorKyAgX19weXhfdF80 ID0gX19QeXhfUHkzTWV0YWNsYXNzUHJlcGFyZShfX3B5eF90XzcsIF9fcHl4X3RfNiwgX19weXhf bl9zX0NhbGxiYWNrVGhyZWFkLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIChQeU9iamVjdCAq KSBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCAoUHlPYmplY3QgKikgTlVMTCk7 IGlmICh1bmxpa2VseSghX19weXhfdF80KSkgX19QWVhfRVJSKDAsIDExMzQsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfNCk7CisgCistICAvKiAidmlkY3V0dGVyL2xp YnMvcHltcHYvbXB2LnB5eCI6MTEzMworKyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5w eXgiOjExMzUKKyAgKiAKKyAgKiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOgorICAqICAg ICBkZWYgX19pbml0X18oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAg ICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQorICAqICAgICAgICAgc2VsZi5kYWVtb24gPSBU cnVlCisgICovCistICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRl Zl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8xX19pbml0X18sIDAsIF9f cHl4X25fc19DYWxsYmFja1RocmVhZF9fX2luaXQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJf bGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18zNSkpOyBpZiAo dW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTMzLCBfX3B5eF9MMV9lcnJvcikK KysgIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0 ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzFfX2luaXRfXywgMCwgX19weXhfbl9zX0Nh bGxiYWNrVGhyZWFkX19faW5pdCwgTlVMTCwgX19weXhfbl9zX3ZpZGN1dHRlcl9saWJzX21wdiwg X19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVvYmpfXzM1KSk7IGlmICh1bmxpa2VseSgh X19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExMzUsIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhf R09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF80 LCBfX3B5eF9uX3NfaW5pdCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTMzLCBfX3B5 eF9MMV9lcnJvcikKKysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4 X25fc19pbml0LCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAsIDExMzUsIF9fcHl4X0wxX2Vy cm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4X3RfMSA9IDA7CisgCistICAv KiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0MQorKyAgLyogInZpZGN1dHRlci9s aWJzL3B5bXB2L21wdi5weXgiOjExNDMKKyAgKiAgICAgICAgIHNlbGYuaXNzaHV0ZG93biA9IEZh bHNlCisgICogCisgICogICAgIGRlZiBzaHV0ZG93bihzZWxmKTogICAgICAgICAgICAgIyA8PDw8 PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5pc3NodXRkb3duID0gVHJ1ZQorICAqICAgICAg ICAgc2VsZi5jYWxsYmFjayA9IE5vbmUKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVu Y3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhy ZWFkXzNzaHV0ZG93biwgMCwgX19weXhfbl9zX0NhbGxiYWNrVGhyZWFkX3NodXRkb3duLCBOVUxM LCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19w eXhfY29kZW9ial9fMzcpKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwg MTE0MSwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05l dygmX19weXhfbWRlZl85dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF8zc2h1 dGRvd24sIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9zaHV0ZG93biwgTlVMTCwgX19weXhf bl9zX3ZpZGN1dHRlcl9saWJzX21wdiwgX19weXhfZCwgKChQeU9iamVjdCAqKV9fcHl4X2NvZGVv YmpfXzM3KSk7IGlmICh1bmxpa2VseSghX19weXhfdF8xKSkgX19QWVhfRVJSKDAsIDExNDMsIF9f cHl4X0wxX2Vycm9yKQorICAgX19QeXhfR09UUkVGKF9fcHl4X3RfMSk7CistICBpZiAoX19QeXhf U2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X3RfMSkg PCAwKSBfX1BZWF9FUlIoMCwgMTE0MSwgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0 TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5eF9uX3Nfc2h1dGRvd24sIF9fcHl4X3RfMSkgPCAw KSBfX1BZWF9FUlIoMCwgMTE0MywgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1wdi9t cHYucHl4IjoxMTQ2CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE0OAor ICAqICAgICAgICAgc2VsZi5sb2NrLnJlbGVhc2UoKQorICAqIAorICAqICAgICBkZWYgY2FsbChz ZWxmKTogICAgICAgICAgICAgIyA8PDw8PDw8PDw8PDw8PAorICAqICAgICAgICAgc2VsZi5sb2Nr LnJlbGVhc2UoKQorICAqIAorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfQ3lGdW5jdGlvbl9O ZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18zbXB2XzE0Q2FsbGJhY2tUaHJlYWRfNWNh bGwsIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9jYWxsLCBOVUxMLCBfX3B5eF9uX3Nfdmlk Y3V0dGVyX2xpYnNfbXB2LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fMzkp KTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19weXhfTDFf ZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9DeUZ1bmN0aW9uX05ldygmX19weXhfbWRlZl85 dmlkY3V0dGVyXzRsaWJzXzNtcHZfMTRDYWxsYmFja1RocmVhZF81Y2FsbCwgMCwgX19weXhfbl9z X0NhbGxiYWNrVGhyZWFkX2NhbGwsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYs IF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX18zOSkpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTQ4LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4 X0dPVFJFRihfX3B5eF90XzEpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3Rf NCwgX19weXhfbl9zX2NhbGwsIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE0NiwgX19w eXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhfdF80LCBfX3B5 eF9uX3NfY2FsbCwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTQ4LCBfX3B5eF9MMV9l cnJvcikKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzEpOyBfX3B5eF90XzEgPSAwOworIAorLSAg LyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExNDkKKysgIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTUxCisgICogICAgICAgICBzZWxmLmxvY2sucmVsZWFzZSgp CisgICogCisgICogICAgIGRlZiBzZXQoc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8 PDw8PDw8PDw8PDw8CisgICogICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKyAgKiAK KyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2 aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzdzZXQsIDAsIF9fcHl4X25fc19D YWxsYmFja1RocmVhZF9zZXQsIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9f cHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX180MSkpOyBpZiAodW5saWtlbHkoIV9f cHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4X3Rf MSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21w dl8xNENhbGxiYWNrVGhyZWFkXzdzZXQsIDAsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZF9zZXQs IE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3Qg KilfX3B5eF9jb2Rlb2JqX180MSkpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VS UigwLCAxMTUxLCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOwor LSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9zX3NldCwgX19w eXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTQ5LCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChf X1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19zZXQsIF9fcHl4X3RfMSkg PCAwKSBfX1BZWF9FUlIoMCwgMTE1MSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYo X19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIvbGlicy9weW1w di9tcHYucHl4IjoxMTUyCisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTE1 NAorICAqICAgICAgICAgc2VsZi5jYWxsYmFjayA9IGNhbGxiYWNrCisgICogCisgICogICAgIGRl ZiBydW4oc2VsZik6ICAgICAgICAgICAgICMgPDw8PDw8PDw8PDw8PDwKKyAgKiAgICAgICAgIHdo aWxlIG5vdCBzZWxmLmlzc2h1dGRvd246CisgICogICAgICAgICAgICAgc2VsZi5sb2NrLmFjcXVp cmUoVHJ1ZSkKKyAgKi8KKy0gIF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5 eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzlydW4sIDAsIF9f cHl4X25fc19DYWxsYmFja1RocmVhZF9ydW4sIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGli c19tcHYsIF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX180MykpOyBpZiAodW5s aWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTUyLCBfX3B5eF9MMV9lcnJvcikKKysg IF9fcHl4X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJf NGxpYnNfM21wdl8xNENhbGxiYWNrVGhyZWFkXzlydW4sIDAsIF9fcHl4X25fc19DYWxsYmFja1Ro cmVhZF9ydW4sIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYsIF9fcHl4X2QsICgo UHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX180MykpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkp IF9fUFlYX0VSUigwLCAxMTU0LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5 eF90XzEpOworLSAgaWYgKF9fUHl4X1NldE5hbWVJbkNsYXNzKF9fcHl4X3RfNCwgX19weXhfbl9z X3J1biwgX19weXhfdF8xKSA8IDApIF9fUFlYX0VSUigwLCAxMTUyLCBfX3B5eF9MMV9lcnJvcikK KysgIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90XzQsIF9fcHl4X25fc19ydW4sIF9f cHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwgMTE1NCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9ERUNSRUYoX19weXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAKKy0gIC8qICJ2aWRjdXR0ZXIv bGlicy9weW1wdi9tcHYucHl4IjoxMTU3CisrICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2 LnB5eCI6MTE1OQorICAqICAgICAgICAgICAgIHNlbGYubXB2X2NhbGxiYWNrKHNlbGYuY2FsbGJh Y2spIGlmIHNlbGYuY2FsbGJhY2sgZWxzZSBOb25lCisgICogCisgICogICAgIGRlZiBtcHZfY2Fs bGJhY2soc2VsZiwgY2FsbGJhY2spOiAgICAgICAgICAgICAjIDw8PDw8PDw8PDw8PDw8CisgICog ICAgICAgICB0cnk6CisgICogICAgICAgICAgICAgY2FsbGJhY2soKQorICAqLworLSAgX19weXhf dF8xID0gX19QeXhfQ3lGdW5jdGlvbl9OZXcoJl9fcHl4X21kZWZfOXZpZGN1dHRlcl80bGlic18z bXB2XzE0Q2FsbGJhY2tUaHJlYWRfMTFtcHZfY2FsbGJhY2ssIDAsIF9fcHl4X25fc19DYWxsYmFj a1RocmVhZF9tcHZfY2FsbGJhY2ssIE5VTEwsIF9fcHl4X25fc192aWRjdXR0ZXJfbGlic19tcHYs IF9fcHl4X2QsICgoUHlPYmplY3QgKilfX3B5eF9jb2Rlb2JqX180NSkpOyBpZiAodW5saWtlbHko IV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTU3LCBfX3B5eF9MMV9lcnJvcikKKysgIF9fcHl4 X3RfMSA9IF9fUHl4X0N5RnVuY3Rpb25fTmV3KCZfX3B5eF9tZGVmXzl2aWRjdXR0ZXJfNGxpYnNf M21wdl8xNENhbGxiYWNrVGhyZWFkXzExbXB2X2NhbGxiYWNrLCAwLCBfX3B5eF9uX3NfQ2FsbGJh Y2tUaHJlYWRfbXB2X2NhbGxiYWNrLCBOVUxMLCBfX3B5eF9uX3NfdmlkY3V0dGVyX2xpYnNfbXB2 LCBfX3B5eF9kLCAoKFB5T2JqZWN0ICopX19weXhfY29kZW9ial9fNDUpKTsgaWYgKHVubGlrZWx5 KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTE1OSwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5 eF9HT1RSRUYoX19weXhfdF8xKTsKKy0gIGlmIChfX1B5eF9TZXROYW1lSW5DbGFzcyhfX3B5eF90 XzQsIF9fcHl4X25fc19tcHZfY2FsbGJhY2ssIF9fcHl4X3RfMSkgPCAwKSBfX1BZWF9FUlIoMCwg MTE1NywgX19weXhfTDFfZXJyb3IpCisrICBpZiAoX19QeXhfU2V0TmFtZUluQ2xhc3MoX19weXhf dF80LCBfX3B5eF9uX3NfbXB2X2NhbGxiYWNrLCBfX3B5eF90XzEpIDwgMCkgX19QWVhfRVJSKDAs IDExNTksIF9fcHl4X0wxX2Vycm9yKQorICAgX19QeXhfREVDUkVGKF9fcHl4X3RfMSk7IF9fcHl4 X3RfMSA9IDA7CisgCistICAvKiAidmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCI6MTEzMgor KyAgLyogInZpZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgiOjExMzQKKyAgKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXJhbXMsICphcmdzLCAqKmt3YXJncykKKyAgKiAK KyAgKiBjbGFzcyBDYWxsYmFja1RocmVhZChUaHJlYWQpOiAgICAgICAgICAgICAjIDw8PDw8PDw8 PDw8PDw8CisgICogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgKiAgICAgICAgIFRocmVhZC5f X2luaXRfXyhzZWxmKQorICAqLworLSAgX19weXhfdF8xID0gX19QeXhfUHkzQ2xhc3NDcmVhdGUo X19weXhfdF83LCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIF9fcHl4X3RfNiwgX19weXhfdF80 LCBOVUxMLCAwLCAxKTsgaWYgKHVubGlrZWx5KCFfX3B5eF90XzEpKSBfX1BZWF9FUlIoMCwgMTEz MiwgX19weXhfTDFfZXJyb3IpCisrICBfX3B5eF90XzEgPSBfX1B5eF9QeTNDbGFzc0NyZWF0ZShf X3B5eF90XzcsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfdF82LCBfX3B5eF90XzQs IE5VTEwsIDAsIDEpOyBpZiAodW5saWtlbHkoIV9fcHl4X3RfMSkpIF9fUFlYX0VSUigwLCAxMTM0 LCBfX3B5eF9MMV9lcnJvcikKKyAgIF9fUHl4X0dPVFJFRihfX3B5eF90XzEpOworLSAgaWYgKFB5 RGljdF9TZXRJdGVtKF9fcHl4X2QsIF9fcHl4X25fc19DYWxsYmFja1RocmVhZCwgX19weXhfdF8x KSA8IDApIF9fUFlYX0VSUigwLCAxMTMyLCBfX3B5eF9MMV9lcnJvcikKKysgIGlmIChQeURpY3Rf U2V0SXRlbShfX3B5eF9kLCBfX3B5eF9uX3NfQ2FsbGJhY2tUaHJlYWQsIF9fcHl4X3RfMSkgPCAw KSBfX1BZWF9FUlIoMCwgMTEzNCwgX19weXhfTDFfZXJyb3IpCisgICBfX1B5eF9ERUNSRUYoX19w eXhfdF8xKTsgX19weXhfdF8xID0gMDsKKyAgIF9fUHl4X0RFQ1JFRihfX3B5eF90XzQpOyBfX3B5 eF90XzQgPSAwOworICAgX19QeXhfREVDUkVGKF9fcHl4X3RfNyk7IF9fcHl4X3RfNyA9IDA7Citk aWZmIC0tZ2l0IGEvdmlkY3V0dGVyL2xpYnMvcHltcHYvbXB2LnB5eCBiL3ZpZGN1dHRlci9saWJz L3B5bXB2L21wdi5weXgKK2luZGV4IDhhZjJkY2M3Li4xZGVjZGRhOCAxMDA2NDQKKy0tLSBhL3Zp ZGN1dHRlci9saWJzL3B5bXB2L21wdi5weXgKKysrKyBiL3ZpZGN1dHRlci9saWJzL3B5bXB2L21w di5weXgKK0BAIC0zMCw4ICszMCwxMCBAQCBmcm9tIGNsaWVudCBjaW1wb3J0ICoKKyBfX3ZlcnNp b25fXyA9ICIwLjMuMCIKKyBfX2F1dGhvcl9fID0gIkFuZHJlIEQiCisgCistX1JFUVVJUkVEX0NB UElfTUFKT1IgPSAyCistX01JTl9DQVBJX01JTk9SID0gMAorKyNfUkVRVUlSRURfQ0FQSV9NQUpP UiA9IDIKKysjX01JTl9DQVBJX01JTk9SID0gMAorK19SRVFVSVJFRF9DQVBJX01BSk9SID0gMQor K19NSU5fQ0FQSV9NSU5PUiA9IDEwOQorIAorIGNkZWYgdW5zaWduZWQgbG9uZyBfQ0FQSV9WRVJT SU9OCisgd2l0aCBub2dpbDoKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvdmlkY3V0dGVyL3RlbXBsYXRl IGIvc3JjcGtncy92aWRjdXR0ZXIvdGVtcGxhdGUKaW5kZXggMDdiZGE1MGM5MTdjLi45M2U2ZGJl ZmFhY2MgMTAwNjQ0Ci0tLSBhL3NyY3BrZ3MvdmlkY3V0dGVyL3RlbXBsYXRlCisrKyBiL3NyY3Br Z3MvdmlkY3V0dGVyL3RlbXBsYXRlCkBAIC0xLDcgKzEsNyBAQAogIyBUZW1wbGF0ZSBmaWxlIGZv ciAndmlkY3V0dGVyJwogcGtnbmFtZT12aWRjdXR0ZXIKLXZlcnNpb249Ni4wLjAKLXJldmlzaW9u PTYKK3ZlcnNpb249Ni4wLjUuMQorcmV2aXNpb249MQogYnVpbGRfc3R5bGU9cHl0aG9uMy1tb2R1 bGUKIGhvc3RtYWtlZGVwZW5kcz0icHl0aG9uMy1zZXR1cHRvb2xzIHB5dGhvbjMtQ3l0aG9uIgog bWFrZWRlcGVuZHM9Im1wdi1kZXZlbCBweXRob24zLWRldmVsIgpAQCAtMTIsNyArMTIsNyBAQCBt YWludGFpbmVyPSJPcnBoYW5lZCA8b3JwaGFuQHZvaWRsaW51eC5vcmc+IgogbGljZW5zZT0iR1BM LTMuMC1vci1sYXRlciIKIGhvbWVwYWdlPSJodHRwczovL2dpdGh1Yi5jb20vb3ptYXJ0aWFuL3Zp ZGN1dHRlciIKIGRpc3RmaWxlcz0iaHR0cHM6Ly9naXRodWIuY29tL296bWFydGlhbi92aWRjdXR0 ZXIvYXJjaGl2ZS9yZWZzL3RhZ3MvJHt2ZXJzaW9ufS50YXIuZ3oiCi1jaGVja3N1bT1jMDliZTdl Y2VhZjQyZmY3MjExZmUzYjgxMjUyNzljNGZlYzdmN2QyNTFkMjcyYjYxZDU3OWU0MjZiZDRlMmMy CitjaGVja3N1bT1jNjM3NGVhZWRiODQ1ZjllNTgwZTU1NWRkMTJjMWRiMWNmMmZmYTI4ZDM3NTZi MDhlMmFlMjhjMWE0Y2Q0YTk2CiAKIHByZV9idWlsZCgpIHsKIAlybSAtZiB2aWRjdXR0ZXIvbGli cy9weW1wdi9tcHYuYwoKRnJvbSA5NjMwNmJmOGY1OWExZGNkNmZhMDY4ZjRhZWQzNzFkOTkyNWRk ODUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgQmVuc29uIDxhYmVuc29u K3ZvaWRAZ21haWwuY29tPgpEYXRlOiBNb24sIDE0IE5vdiAyMDIyIDA4OjA4OjMxIC0wNjAwClN1 YmplY3Q6IFtQQVRDSCA4LzhdIHN0cmVtaW8tc2hlbGw6IHJlYnVpbGQgZm9yIG1wdi0wLjM1LjAK Ci0tLQogc3JjcGtncy9zdHJlbWlvLXNoZWxsL3RlbXBsYXRlIHwgMiArLQogMSBmaWxlIGNoYW5n ZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy9z dHJlbWlvLXNoZWxsL3RlbXBsYXRlIGIvc3JjcGtncy9zdHJlbWlvLXNoZWxsL3RlbXBsYXRlCmlu ZGV4IDY0MTAwMGQ2ZmU2NC4uMmIwYzBiMjNhZjY5IDEwMDY0NAotLS0gYS9zcmNwa2dzL3N0cmVt aW8tc2hlbGwvdGVtcGxhdGUKKysrIGIvc3JjcGtncy9zdHJlbWlvLXNoZWxsL3RlbXBsYXRlCkBA IC0xLDcgKzEsNyBAQAogIyBUZW1wbGF0ZSBmaWxlIGZvciAnc3RyZW1pby1zaGVsbCcKIHBrZ25h bWU9c3RyZW1pby1zaGVsbAogdmVyc2lvbj00LjQuMTU5Ci1yZXZpc2lvbj0yCityZXZpc2lvbj0z CiBfc2luZ2xlYXBwbGljYXRpb25faGFzaD1mMWUxNTA4MWRjNTdhOWMwM2Y3ZjRmMTY1Njc3ZjE4 ODAyZTE0MzdhCiBfbGlibXB2X2hhc2g9ODIyYTQxYTEwODdkYWYyOTExZmMzMzZmYmQ5NTA5Zjk2 MjE1OGZlZgogY3JlYXRlX3dya3NyYz15ZXMK --===============7639165932028404388==--