From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: =?utf-8?b?QWxleGFuZHJhIEjDoWprb3bDoSA8YWhhamtvdmFAcmVkaGF0LmNvbT4=?= To: git-commits@fedoraproject.org Subject: [rpms/gdb] fix-dup-patch: Rebase to FSF GDB 16.1. Date: Thu, 23 Jul 2026 18:36:08 GMT Message-ID: <178483176843.1.8930759173614151492.rpms-gdb-5fc2d96b3010@fedoraproject.org> List-ID: X-Git-Repo: rpms/gdb X-Git-Branch: fix-dup-patch X-Git-Rev: 5fc2d96b30102d32189266b67ff9c2087d1e70d9 ICAgICAgICAgIEEgbmV3IGNvbW1pdCBoYXMgYmVlbiBwdXNoZWQuCgogICAgICAgICAgUmVwbyAg IDogcnBtcy9nZGIKICAgICAgICAgIEJyYW5jaCA6IGZpeC1kdXAtcGF0Y2gKICAgICAgICAgIENv bW1pdCA6IDVmYzJkOTZiMzAxMDJkMzIxODkyNjZiNjdmZjljMjA4N2QxZTcwZDkKICAgICAgICAg IEF1dGhvciA6IEFsZXhhbmRyYSBIw6Fqa292w6EgPGFoYWprb3ZhQHJlZGhhdC5jb20+CiAgICAg ICAgICBEYXRlICAgOiAyMDI1LTAyLTA2VDIwOjE4OjQwKzAxOjAwCiAgICAgICAgICBTdGF0cyAg OiArMTgvLTEwMzA1IGluIDExIGZpbGUocykKICAgICAgICAgIFVSTCAgICA6IGh0dHBzOi8vc3Jj LmZlZG9yYXByb2plY3Qub3JnL3JwbXMvZ2RiL2MvNWZjMmQ5NmIzMDEwMmQzMjE4OTI2NmI2N2Zm OWMyMDg3ZDFlNzBkOT9icmFuY2g9Zml4LWR1cC1wYXRjaAoKICAgICAgICAgIExvZzoKICAgICAg ICAgIFJlYmFzZSB0byBGU0YgR0RCIDE2LjEuCgpEcm9wcGVkOgpnZGItYmFja3BvcnQtYnVpbGRp ZC1yZWxhdGVkLWNoYW5nZXMucGF0Y2gKZ2RiLWNhdGNocG9pbnQtcmUtc2V0LnBhdGNoCmdkYi1y ZW1vdmUtcW54LW5ldXRyaW5vLXN1cHBvcnQucGF0Y2gKCi0tLQpkaWZmIC0tZ2l0IGEvLmdpdGln bm9yZSBiLy5naXRpZ25vcmUKaW5kZXggYjE1YTEzYy4uMGFlNmIxZSAxMDA2NDQKLS0tIGEvLmdp dGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0xLDUgKzEsNSBAQAogL25ldy1mZWRvcmEtcmVs ZWFzZQogL2dkYi1saWJzdGRjKystdjMtcHl0aG9uLTguMS4xLTIwMTgwNjI2LnRhci54egogL3Yy LjAuNS50YXIuZ3oKLS9nZGItMTUuMS50YXIueHoKLS9nZGItMTUuMi50YXIueHoKKy9nZGItMTYu MS50YXIueHoKKy9nZGItMTYuMC50YXIuZ3oKCmRpZmYgLS1naXQgYS9fZ2RiLnNwZWMuUGF0Y2gu aW5jbHVkZSBiL19nZGIuc3BlYy5QYXRjaC5pbmNsdWRlCmluZGV4IDMxNTM4ZTYuLmY2ZTkxNjAg MTAwNjQ0Ci0tLSBhL19nZGIuc3BlYy5QYXRjaC5pbmNsdWRlCisrKyBiL19nZGIuc3BlYy5QYXRj aC5pbmNsdWRlCkBAIC01MywzOSArNTMsNyBAQCBQYXRjaDAxMDogZ2RiLXJoYnoxMDg0NDA0LXBw YzY0LXMzOTB4LXdyb25nLXByb2xvZ3VlLXNraXAtTzItZy0zb2YzLnBhdGNoCiAjPWZlZG9yYQog UGF0Y2gwMTE6IGdkYi1hZGQtaW5kZXgucGF0Y2gKIAotIyBCYWNrcG9ydCBvZiB1cHN0cmVhbSBj b21taXQgMzZmYjIwZmE5MzQ4NGIxMDRkLiAgVGhpcyBpcyBub3QgcmVhbGx5Ci0jIHJlbGV2YW50 IGZvciBvdXIgYnJhbmNoLCBidXQgbGF0ZXIgY29tbWl0cyB0aGF0IGFyZSBpbXBvcnRhbnQsIGFu ZAotIyB3aGljaCB3ZSB3YW50IHRvIGJhY2twb3J0LCBjb25mbGljdCB1bmxlc3MgdGhlIGNsZWFu dXAgaW4gdGhpcwotIyBwYXRjaCBpcyBpbiBwbGFjZS4KLSMKLSMgVGhpcyBjb21taXQgd2lsbCBi ZSBwYXJ0IG9mIEdEQiAxNiwgc28gdGhpcyBiYWNrLXBvcnQgc2hvdWxkIGRyb3AKLSMgb3V0IHdo ZW4gd2UgcmViYXNlIG9udG8gR0RCIDE2LgotIwotIyBnZGI6IHJlbW92ZSBRTlggTmV1dHJpbm8g c3VwcG9ydAotIwotIyBSZW1vdmUgdGhlIHN1cHBvcnQgZm9yIHRoZSBRTlggTmV1dHJpbm8gT1Mg KHRkZXAgYW5kIG5hdGl2ZSBiaXRzKS4gIFRoaXMKLSMgaGFzIGJlZW4gdW5tYWludGFpbmVkIGZv ciB5ZWFycywgYW5kIHdlIGRvbid0IGhhdmUgYSB3YXkgdG8gc2VlIGlmIGl0Ci0jIHdvcmtzIChv ciBldmVuIGJ1aWxkcywgZm9yIHRoZSBuYXRpdmUgcGFydHMpLiAgV2l0aG91dCBzb21lYm9keSBh Y3RpdmVseQotIyBtYWludGFpbmluZyBpdCwgdGhpcyBpcyBqdXN0IGEgYnVyZGVuIGZvciBkZXZl bG9wZXJzLCBlc3BlY2lhbGx5IHRoYXQKLSMgdGhpcyBwb3J0IGRvZXMgYSBmZXcgd2VpcmQgdW5p cXVlIHRoaW5ncyB0aGF0IHJlcXVpcmUgcmVhc29uaW5nIGFib3V0Ci0jIHdoZW4gZG9pbmcgYmln IGNoYW5nZS4KLSMKLSMgU3VwcG9ydCBmb3IgR0RCc2VydmVyIHdhcyByZW1vdmVkIGluIDIwMjAs IGNvbW1pdCA2MTNmMTQ5YTkwZDYKLSMgKCJnZGJzZXJ2ZXI6IHJlbW92ZSBzdXBwb3J0IGZvciBO ZXV0cmlubyIpLgotIwotIyBDaGFuZ2UtSWQ6IEk0ZTI1ZWMyNmFiMDY2MzY2MjlhZGViZDAyY2Vi MTYxZWUzMWMyMzJkCi0jIEFwcHJvdmVkLWJ5OiBLZXZpbiBCdWV0dG5lciA8a2V2aW5iQHJlZGhh dC5jb20+Ci1QYXRjaDAxMjogZ2RiLXJlbW92ZS1xbngtbmV1dHJpbm8tc3VwcG9ydC5wYXRjaAot Ci0jIEJhY2twb3J0IHBhdGNoZXMgcmVsYXRlZCB0byBidWlsZC1pZCB1c2FnZSB3aGVuIG9wZW5p bmcgYSBjb3JlCi0jIGZpbGUsIGFuZCBhbHNvIGltcHJvdmluZyBnZW5lcmFsIGJ1aWxkLWlkIGJh c2VkIGxvb2t1cC4gIFRoZXNlIHdpbGwKLSMgYWxsIGRyb3Agb3V0IHdoZW4gcmViYXNpbmcgdG8g R0RCIDE2LgotUGF0Y2gwMTM6IGdkYi1iYWNrcG9ydC1idWlsZGlkLXJlbGF0ZWQtY2hhbmdlcy5w YXRjaAotCiAjIE5vdCBhIGJhY2twb3J0LiAgQWRkIGEgbmV3IHNjcmlwdCB3aGljaCBob29rcyBp bnRvIEdEQiBhbmQgc3VnZ2VzdHMKICMgUlBNcyB0byBpbnN0YWxsIHdoZW4gR0RCIGZpbmRzIGFu IG9iamZpbGUgd2l0aCBubyBkZWJ1ZyBpbmZvLgotUGF0Y2gwMTQ6IGdkYi1hZGQtcnBtLXN1Z2dl c3Rpb24tc2NyaXB0LnBhdGNoCi0KLQotUGF0Y2gwMTU6IGdkYi1jYXRjaHBvaW50LXJlLXNldC5w YXRjaAorUGF0Y2gwMTI6IGdkYi1hZGQtcnBtLXN1Z2dlc3Rpb24tc2NyaXB0LnBhdGNoCiAKCmRp ZmYgLS1naXQgYS9fZ2RiLnNwZWMucGF0Y2guaW5jbHVkZSBiL19nZGIuc3BlYy5wYXRjaC5pbmNs dWRlCmluZGV4IGY2MzBmYzIuLmRhZDRkMGEgMTAwNjQ0Ci0tLSBhL19nZGIuc3BlYy5wYXRjaC5p bmNsdWRlCisrKyBiL19nZGIuc3BlYy5wYXRjaC5pbmNsdWRlCkBAIC0xMCw2ICsxMCwzIEBACiAl cGF0Y2ggLXAxIC1QMDEwCiAlcGF0Y2ggLXAxIC1QMDExCiAlcGF0Y2ggLXAxIC1QMDEyCi0lcGF0 Y2ggLXAxIC1QMDEzCi0lcGF0Y2ggLXAxIC1QMDE0Ci0lcGF0Y2ggLXAxIC1QMDE1CgpkaWZmIC0t Z2l0IGEvX2dpdF91cHN0cmVhbV9jb21taXQgYi9fZ2l0X3Vwc3RyZWFtX2NvbW1pdAppbmRleCAw ZTA4N2E5Li4xOTQ5OTM1IDEwMDY0NAotLS0gYS9fZ2l0X3Vwc3RyZWFtX2NvbW1pdAorKysgYi9f Z2l0X3Vwc3RyZWFtX2NvbW1pdApAQCAtMSArMSBAQAotMjNjODRkYjViM2NiNGU4YTBkNTU1Yzc2 ZTFhMGFiNTZkYzgzNTVmMworZjJhMGU1MWNkYTRkYTY4NmUzNWNhM2JjMDhhNGI1ZGFkNzEzMDQ3 MwoKZGlmZiAtLWdpdCBhL19wYXRjaF9vcmRlciBiL19wYXRjaF9vcmRlcgppbmRleCA1YWU3NzA3 Li4wNDdmNDcyIDEwMDY0NAotLS0gYS9fcGF0Y2hfb3JkZXIKKysrIGIvX3BhdGNoX29yZGVyCkBA IC05LDcgKzksNCBAQCBnZGItcmhiei04MTgzNDMtc2V0LXNvbGliLWFic29sdXRlLXByZWZpeC10 ZXN0Y2FzZS5wYXRjaAogZ2RiLXJoYnoxMTQ5MjA1LWNhdGNoLXN5c2NhbGwtYWZ0ZXItZm9yay10 ZXN0LnBhdGNoCiBnZGItcmhiejEwODQ0MDQtcHBjNjQtczM5MHgtd3JvbmctcHJvbG9ndWUtc2tp cC1PMi1nLTNvZjMucGF0Y2gKIGdkYi1hZGQtaW5kZXgucGF0Y2gKLWdkYi1yZW1vdmUtcW54LW5l dXRyaW5vLXN1cHBvcnQucGF0Y2gKLWdkYi1iYWNrcG9ydC1idWlsZGlkLXJlbGF0ZWQtY2hhbmdl cy5wYXRjaAogZ2RiLWFkZC1ycG0tc3VnZ2VzdGlvbi1zY3JpcHQucGF0Y2gKLWdkYi1jYXRjaHBv aW50LXJlLXNldC5wYXRjaAoKZGlmZiAtLWdpdCBhL2dkYi1hZGQtcnBtLXN1Z2dlc3Rpb24tc2Ny aXB0LnBhdGNoIGIvZ2RiLWFkZC1ycG0tc3VnZ2VzdGlvbi1zY3JpcHQucGF0Y2gKaW5kZXggNTEz NTdmNC4uOThiZGE3MSAxMDA2NDQKLS0tIGEvZ2RiLWFkZC1ycG0tc3VnZ2VzdGlvbi1zY3JpcHQu cGF0Y2gKKysrIGIvZ2RiLWFkZC1ycG0tc3VnZ2VzdGlvbi1zY3JpcHQucGF0Y2gKQEAgLTE0LDcg KzE0LDcgQEAgc3VnZ2VzdHMgZGVidWdpbmZvIFJQTXMgdG8gaW5zdGFsbC4KIGRpZmYgLS1naXQg YS9nZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4gYi9nZGIvZGF0YS1kaXJlY3RvcnkvTWFr ZWZpbGUuaW4KIC0tLSBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbgogKysrIGIvZ2Ri L2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluCi1AQCAtOTEsNiArOTEsNyBAQCBQWVRIT05fRklM RV9MSVNUID0gXAorQEAgLTkyLDYgKzkyLDcgQEAgUFlUSE9OX0ZJTEVfTElTVCA9IFwKICAJZ2Ri L2NvbW1hbmQvbWlzc2luZ19maWxlcy5weSBcCiAgCWdkYi9jb21tYW5kL3ByZXR0eV9wcmludGVy cy5weSBcCiAgCWdkYi9jb21tYW5kL3Byb21wdC5weSBcCkBAIC0zMyw3ICszMyw3IEBAIGRpZmYg LS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIvZ2RiL2RvYy9nZGIudGV4aW5mbwogICogTWFu IFBhZ2VzOjogICAgICAgICAgICAgICAgICAgTWFudWFsIHBhZ2VzCiAgKiBDb3B5aW5nOjogICAg ICAgICAgICAgICAgICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBzYXlzCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBob3cgeW91IGNhbiBjb3B5IGFuZCBzaGFyZSBAdmFs dWV7R0RCTn0KLUBAIC01MDM0MSw2ICs1MDM0MiwxMTEgQEAgU2hvdyB0aGUgY3VycmVudCB2ZXJi b3NpdHkgc2V0dGluZy4KK0BAIC01MDU3Niw2ICs1MDU3NywxMTEgQEAgU2hvdyB0aGUgY3VycmVu dCB2ZXJib3NpdHkgc2V0dGluZy4KICAKICBAZW5kIHRhYmxlCiAgCkBAIC05NTcsNyArOTU3LDcg QEAgZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZp bGUucHkgYi9nZGIvdGVzdHN1aXRlL2dkYi4KIGRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2xp Yi9nZGIuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAogLS0tIGEvZ2RiL3Rlc3RzdWl0 ZS9saWIvZ2RiLmV4cAogKysrIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cAotQEAgLTIzOCw3 ICsyMzgsOCBAQCBpZiAhW2luZm8gZXhpc3RzIElOVEVSTkFMX0dEQkZMQUdTXSB7CitAQCAtMjU1 LDcgKzI1NSw4IEBAIGlmICFbaW5mbyBleGlzdHMgSU5URVJOQUxfR0RCRkxBR1NdIHsKICAJCSAg ICItbngiIFwKICAJCSAgICItcSIgXAogIAkJICAgey1pZXggInNldCBoZWlnaHQgMCJ9IFwKQEAg LTk2Nyw3ICs5NjcsNyBAQCBkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cCBi L2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAKICAKICAgICAgIyBJZiBERUJVR0lORk9EX1VSTFMg aXMgc2V0LCBnZGIgd2lsbCB0cnkgdG8gZG93bmxvYWQgc291cmNlcyBhbmQKICAgICAgIyBkZWJ1 ZyBpbmZvIGZvciBmLmkuIHN5c3RlbSBsaWJyYXJpZXMuICBQcmV2ZW50IHRoaXMuCi1AQCAtMjQ5 Myw2ICsyNDk0LDE4IEBAIHByb2MgZGVmYXVsdF9nZGJfc3RhcnQgeyB9IHsKK0BAIC0yNjEwLDYg KzI2MTEsMTggQEAgcHJvYyBkZWZhdWx0X2dkYl9zdGFydCB7IH0gewogIAl9CiAgICAgIH0KICAK CmRpZmYgLS1naXQgYS9nZGItYmFja3BvcnQtYnVpbGRpZC1yZWxhdGVkLWNoYW5nZXMucGF0Y2gg Yi9nZGItYmFja3BvcnQtYnVpbGRpZC1yZWxhdGVkLWNoYW5nZXMucGF0Y2gKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDdhY2U4YzUuLjAwMDAwMDAKLS0tIGEvZ2RiLWJhY2twb3J0LWJ1 aWxkaWQtcmVsYXRlZC1jaGFuZ2VzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNjc1MyArMCww IEBACi1Gcm9tIEZFRE9SQV9QQVRDSEVTIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTog QW5kcmV3IEJ1cmdlc3MgPGFidXJnZXNzQHJlZGhhdC5jb20+Ci1EYXRlOiBXZWQsIDMxIEp1bCAy MDI0IDE1OjU4OjIwICswMTAwCi1TdWJqZWN0OiBnZGItYmFja3BvcnQtYnVpbGRpZC1yZWxhdGVk LWNoYW5nZXMucGF0Y2gKLQotOzsgQmFja3BvcnQgcGF0Y2hlcyByZWxhdGVkIHRvIGJ1aWxkLWlk IHVzYWdlIHdoZW4gb3BlbmluZyBhIGNvcmUKLTs7IGZpbGUsIGFuZCBhbHNvIGltcHJvdmluZyBn ZW5lcmFsIGJ1aWxkLWlkIGJhc2VkIGxvb2t1cC4gIFRoZXNlIHdpbGwKLTs7IGFsbCBkcm9wIG91 dCB3aGVuIHJlYmFzaW5nIHRvIEdEQiAxNi4KLQotYmFja3BvcnQgdGhlIGZvbGxvd2luZyBwYXRj aGVzIHJlbGF0ZWQgdG8gYnVpbGQtaWQgdXNhZ2UKLQotVGhpcyBvbmUgcGF0Y2ggYmFja3BvcnRz IHRoZSBmb2xsb3dpbmcgdXBzdHJlYW0gY29tbWl0czoKLQotICAqIDE5NTc5NWIwZmQ0IGdkYjog Zml4IGEgdGFyZ2V0OiBwcmVmaXggaXNzdWUgaW4gZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlCi0g ICogZWE0Yzk2OGNlNTQgZ2RiOiBhdm9pZCAnLy8nIGluIGZpbGVuYW1lcyB3aGVuIHNlYXJjaGlu ZyBmb3IgZGVidWdpbmZvCi0gICogMjI4MzZjYTg4NTkgZ2RiOiBjaGVjayBmb3IgbXVsdGlwbGUg bWF0Y2hpbmcgYnVpbGQtaWQgZmlsZXMKLSAgKiA2ZDQ1YWY5NmVhNSBnZGJzZXJ2ZXI6IGFkZCBn ZGJzZXJ2ZXIgc3VwcG9ydCBmb3IgdkZpbGU6OnN0YXQgcGFja2V0Ci0gICogMzA1NWUzZDJmMTMg Z2RiOiBhZGQgR0RCIHNpZGUgdGFyZ2V0X29wczo6ZmlsZWlvX3N0YXQgaW1wbGVtZW50YXRpb24K LSAgKiAwOGExMTVjYzFjNCBnZGI6IGFkZCB0YXJnZXRfZmlsZWlvX3N0YXQsIGJ1dCBubyBpbXBs ZW1lbnRhdGlvbnMgeWV0Ci0gICogYzdlMzhlZTQ3YzkgZ2RiOiBhdm9pZCBkdXBsaWNhdGUgc2Vh cmNoIGluIGJ1aWxkX2lkX3RvX2JmZF9zdWZmaXgKLSAgKiAxMGFjN2U4MGMwMSBnZGI6IHJlbW92 ZSBmaW5kX2FuZF9vcGVuX3NvbGliIHNvX2xpc3QgbWV0aG9kCi0gICogM2UzNWI0ZGVhZTIgZ2Ri L3Rlc3RzdWl0ZTogdGVzdHMgZm9yIGRlYnVnIGxvb2t1cCB3aXRoaW4gdGhlIHN5c3Jvb3QKLSAg KiA2ZGZkMDcyMjJjMCBnZGI6IGNvbnZlcnQgc2VwYXJhdGUtZGVidWctZmlsZSB0byBuZXcoaXNo KSBkZWJ1ZyBzY2hlbWUKLSAgKiA1Y2FiYzgwOThlNiBnZGIvcHl0aG9uOiBpbXBsZW1lbnQgUHl0 aG9uIGZpbmRfZXhlY19ieV9idWlsZF9pZCBob29rCi0gICogZWYxYTQxZjIwYjcgZ2RiOiBhZGQg ZXh0ZW5zaW9uIGhvb2sgZXh0X2xhbmdfZmluZF9vYmpmaWxlX2Zyb21fYnVpbGRpZAotICAqIDYy OWJjYzY4ZDc5IGdkYjogcmVuYW1lIGV4dF9sYW5nX21pc3NpbmdfZGVidWdpbmZvX3Jlc3VsdAot ICAqIDczZDczMTJmZjYxIGdkYjogdXNlIG1hcHBlZCBmaWxlIGluZm9ybWF0aW9uIHRvIGltcHJv dmUgZGVidWdpbmZvZCB0ZXh0Ci0gICogNWRkZDBkN2VlZmIgZ2RiL3B5dGhvbjogYXZvaWQgZGVw ZW5kaW5nIG9uIHRoZSBjdXJzZXMgbGlicmFyeQotICAqIDgzNThkMzliNGYwIGdkYjogdW5pZnkg YnVpbGQtaWQgdG8gb2JqZmlsZSBsb29rdXAgY29kZQotICAqIGZhODI2YTRiYmU5IGdkYjogaW1w cm92ZSBzaGFyZWQgbGlicmFyeSBidWlsZC1pZCBjaGVjayBmb3IgY29yZS1maWxlcwotICAqIGE0 N2E2NzljNzY5IGdkYi9jb3JlZmlsZTogaW1wcm92ZSBmaWxlIGJhY2tlZCBtYXBwaW5nIGhhbmRs aW5nCi0gICogNTIyODc1ZjY3OWIgZ2RiL2NvcmVmaWxlOiBkb24ndCBwcmV0ZW5kIHVuYXZhaWxh YmxlIHNlY3Rpb25zIGFyZSByZWFkYWJsZQotICAqIDk3ODMyNDcxODk5IGdkYi9idWlsZC1pZDog cHJvdGVjdCBhZ2FpbnN0IHdlaXJkbHkgc2hvcnQgYnVpbGQtaWRzCi0gICogOTU0M2MzNzYyMGMg Z2RiL3Rlc3RzdWl0ZTogbWFrZSBnZGJfZ251X3N0cmlwX2RlYnVnIGNvbnNpc3RlbnQKLSAgKiBm YzI0MGJiMTQzYyBnZGIvZmlsZWlvOiBmaXggZXJybm8gZm9yIHBhY2tldHMgd2hlcmUgYW4gYXR0 YWNobWVudCBpcyBleHBlY3RlZAotICAqIGRmMDQ0NWIzNzBmIGdkYi90ZXN0c3VpdGU6IGZpeCB0 eXBvICd1bnN1cHBvcnQnIHRvICd1bnN1cHBvcnRlZCcKLQotSSd2ZSBtZXJnZWQgdGhlc2UgaW50 byBhIHNpbmdsZSAobGFyZ2UpIHBhdGNoIGFzIHRoZXNlIGFsbCBtZXJnZWQKLXdpdGhvdXQgYW55 IGNoYW5nZXMgKGkuZS4gdGhlc2UgcmVwcmVzZW50IGV4YWN0bHkgdGhlIHVwc3RyZWFtIGNvZGUp LAotYW5kIGFsbCBvZiB0aGVzZSB3aWxsIGJlIGluY2x1ZGVkIGluIEdEQiAxNiwgYW5kIHNvIHNo b3VsZCBhbGwgZHJvcAotb3V0IHRvZ2V0aGVyIHdoZW4gd2UgcmViYXNlIHRvIEdEQiAxNiAodGhl IG5leHQgcmViYXNlKS4KLQotQWxsIG9mIHRoZXNlIHBhdGNoZXMgcmVsYXRlIHRvIGVpdGhlciBi dWlsZC1pZCB1c2FnZSB3aGVuIG9wZW5pbmcgYQotY29yZSBmaWxlLCBvciBpbXByb3ZpbmcgR0RC J3MgYnVpbGQtaWQgYmFzZWQgZGVidWcgbG9va3VwLgotCi1kaWZmIC0tZ2l0IGEvZ2RiL05FV1Mg Yi9nZGIvTkVXUwotLS0tIGEvZ2RiL05FV1MKLSsrKyBiL2dkYi9ORVdTCi1AQCAtMSw2ICsxLDM2 IEBACi0gCQlXaGF0IGhhcyBjaGFuZ2VkIGluIEdEQj8KLSAJICAgICAoT3JnYW5pemVkIHJlbGVh c2UgYnkgcmVsZWFzZSkKLSAKLSsqKiogQ2hhbmdlIHNpbmNlIEdEQiAxNQotKwotKyogUHl0aG9u IEFQSQotKwotKyAgKiogTmV3IG1vZHVsZSBnZGIubWlzc2luZ19vYmpmaWxlIHRoYXQgZmFjaWxp dGF0ZXMgZGVhbGluZyB3aXRoCi0rICAgICBtaXNzaW5nIG9iamZpbGVzIHdoZW4gb3BlbmluZyBh IGNvcmUtZmlsZS4KLSsKLSsgICoqIE5ldyBmdW5jdGlvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJl Z2lzdGVyX2hhbmRsZXIgdGhhdCBjYW4KLSsgICAgIHJlZ2lzdGVyIGFuIGluc3RhbmNlIG9mIGEg c3ViLWNsYXNzIG9mCi0rICAgICBnZGIubWlzc2luZ19kZWJ1Zy5NaXNzaW5nT2JqZmlsZUhhbmRs ZXIgYXMgYSBoYW5kbGVyIGZvciBtaXNzaW5nCi0rICAgICBvYmpmaWxlcy4KLSsKLSsgICoqIE5l dyBjbGFzcyBnZGIubWlzc2luZ19vYmpmaWxlLk1pc3NpbmdPYmpmaWxlSGFuZGxlciB3aGljaCBj YW4gYmUKLSsgICAgIHN1Yi1jbGFzc2VkIHRvIGNyZWF0ZSBoYW5kbGVycyBmb3IgbWlzc2luZyBv YmpmaWxlcy4KLSsKLSsqIE5ldyBjb21tYW5kcwotKwotK2luZm8gbWlzc2luZy1vYmpmaWxlLWhh bmRsZXJzCi0rICBMaXN0IGFsbCB0aGUgcmVnaXN0ZXJlZCBtaXNzaW5nLW9iamZpbGUgaGFuZGxl cnMuCi0rCi0rZW5hYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIExPQ1VTIEhBTkRMRVIKLStk aXNhYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIExPQ1VTIEhBTkRMRVIKLSsgIEVuYWJsZSBv ciBkaXNhYmxlIGEgbWlzc2luZy1vYmpmaWxlIGhhbmRsZXIgd2l0aCBhIG5hbWUgbWF0Y2hpbmcg dGhlCi0rICByZWd1bGFyIGV4cHJlc3Npb24gSEFORExFUiwgaW4gTE9DVVMuCi0rCi0rICBMT0NV UyBjYW4gYmUgJ2dsb2JhbCcgdG8gb3BlcmF0ZSBvbiBnbG9iYWwgbWlzc2luZy1vYmpmaWxlIGhh bmRsZXIsCi0rICAncHJvZ3NwYWNlJyB0byBvcGVyYXRlIG9uIGhhbmRsZXJzIHdpdGhpbiB0aGUg Y3VycmVudCBwcm9ncmFtIHNwYWNlLAotKyAgb3IgY2FuIGJlIGEgcmVndWxhciBleHByZXNzaW9u IHdoaWNoIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgZmlsZW5hbWUKLSsgIG9mIHRoZSBwcmltYXJ5 IGV4ZWN1dGFibGUgaW4gZWFjaCBwcm9ncmFtIHNwYWNlLgotKwotICoqKiBDaGFuZ2VzIGluIEdE QiAxNQotIAotICogVGhlIE1QWCBjb21tYW5kcyAic2hvdy9zZXQgbXB4IGJvdW5kIiBoYXZlIGJl ZW4gZGVwcmVjYXRlZCwgYXMgSW50ZWwKLUBAIC0yMTIsNiArMjQyLDExIEBAIHFJc0FkZHJlc3NU YWdnZWQKLSAgIGZpbGUgaXMgYWJvdXQsIHRoaXMgbmV3IHBhY2tldCBwcm92aWRlcyBhIG1vcmUg Z2VuZXJpYyB3YXkgdG8gcGVyZm9ybSBzdWNoCi0gICBhIGNoZWNrLgotIAotK3ZGaWxlOnN0YXQK LSsgIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCBmaWxlcyBvbiB0aGUgcmVtb3RlIHN5c3RlbS4g IExpa2UKLSsgIHZGaWxlOmZzdGF0IGJ1dCB0YWtlcyBhIGZpbGVuYW1lIHJhdGhlciB0aGFuIGFu IG9wZW4gZmlsZQotKyAgZGVzY3JpcHRvci4KLSsKLSAqKiogQ2hhbmdlcyBpbiBHREIgMTQKLSAK LSAqIEdEQiBub3cgc3VwcG9ydHMgdGhlIEFBcmNoNjQgU2NhbGFibGUgTWF0cml4IEV4dGVuc2lv biAyIChTTUUyKSwgd2hpY2gKLWRpZmYgLS1naXQgYS9nZGIvYnVpbGQtaWQuYyBiL2dkYi9idWls ZC1pZC5jCi0tLS0gYS9nZGIvYnVpbGQtaWQuYwotKysrIGIvZ2RiL2J1aWxkLWlkLmMKLUBAIC0y Niw2ICsyNiw5IEBACi0gI2luY2x1ZGUgImZpbGVuYW1lcy5oIgotICNpbmNsdWRlICJnZGJjb3Jl LmgiCi0gI2luY2x1ZGUgImNsaS9jbGktc3R5bGUuaCIKLSsjaW5jbHVkZSAiZ2Ric3VwcG9ydC9z Y29wZWRfZmQuaCIKLSsjaW5jbHVkZSAiZGVidWdpbmZvZC1zdXBwb3J0LmgiCi0rI2luY2x1ZGUg ImV4dGVuc2lvbi5oIgotIAotIC8qIFNlZSBidWlsZC1pZC5oLiAgKi8KLSAKLUBAIC03Myw3MyAr NzYsMTc3IEBAIGJ1aWxkX2lkX3ZlcmlmeSAoYmZkICphYmZkLCBzaXplX3QgY2hlY2tfbGVuLCBj b25zdCBiZmRfYnl0ZSAqY2hlY2spCi0gICByZXR1cm4gcmV0dmFsOwotIH0KLSAKLS0vKiBIZWxw ZXIgZm9yIGJ1aWxkX2lkX3RvX2RlYnVnX2JmZC4gIExJTksgaXMgYSBwYXRoIHRvIGEgcG90ZW50 aWFsCi0tICAgYnVpbGQtaWQtYmFzZWQgc2VwYXJhdGUgZGVidWcgZmlsZSwgcG90ZW50aWFsbHkg YSBzeW1saW5rIHRvIHRoZSByZWFsIGZpbGUuCi0tICAgSWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBt YXRjaGVzIEJVSUxEX0lELCByZXR1cm4gYSBCRkQgcmVmZXJlbmNlIHRvIGl0LiAgKi8KLSsvKiBI ZWxwZXIgZm9yIGJ1aWxkX2lkX3RvX2RlYnVnX2JmZC4gIE9SSUdJTkFMX0xJTksgd2l0aCBTVUZG SVggYXBwZW5kZWQgaXMKLSsgICBhIHBhdGggdG8gYSBwb3RlbnRpYWwgYnVpbGQtaWQtYmFzZWQg c2VwYXJhdGUgZGVidWcgZmlsZSwgcG90ZW50aWFsbHkgYQotKyAgIHN5bWxpbmsgdG8gdGhlIHJl YWwgZmlsZS4gIElmIHRoZSBmaWxlIGV4aXN0cyBhbmQgbWF0Y2hlcyBCVUlMRF9JRCwKLSsgICBy ZXR1cm4gYSBCRkQgcmVmZXJlbmNlIHRvIGl0LiAgKi8KLSAKLSBzdGF0aWMgZ2RiX2JmZF9yZWZf cHRyCi0tYnVpbGRfaWRfdG9fZGVidWdfYmZkXzEgKGNvbnN0IHN0ZDo6c3RyaW5nICZsaW5rLCBz aXplX3QgYnVpbGRfaWRfbGVuLAotLQkJCSBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQpCi0rYnVp bGRfaWRfdG9fZGVidWdfYmZkXzEgKGNvbnN0IHN0ZDo6c3RyaW5nICZvcmlnaW5hbF9saW5rLAot KwkJCSBzaXplX3QgYnVpbGRfaWRfbGVuLCBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQsCi0rCQkJ IGNvbnN0IGNoYXIgKnN1ZmZpeCkKLSB7Ci0tICBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1 ZykKLSsgIHRyaWJvb2wgc3VwcG9ydHNfdGFyZ2V0X3N0YXQgPSBUUklCT09MX1VOS05PV047Ci0r Ci0rICAvKiBEcm9wIHRoZSAndGFyZ2V0OicgcHJlZml4IGlmIHRoZSB0YXJnZXQgZmlsZXN5c3Rl bSBpcyBsb2NhbC4gICovCi0rICBzdGQ6OnN0cmluZ192aWV3IG9yaWdpbmFsX2xpbmtfdmlldyAo b3JpZ2luYWxfbGluayk7Ci0rICBpZiAoaXNfdGFyZ2V0X2ZpbGVuYW1lIChvcmlnaW5hbF9saW5r KSAmJiB0YXJnZXRfZmlsZXN5c3RlbV9pc19sb2NhbCAoKSkKLSsgICAgb3JpZ2luYWxfbGlua192 aWV3Ci0rICAgICAgPSBvcmlnaW5hbF9saW5rX3ZpZXcuc3Vic3RyIChzdHJsZW4gKFRBUkdFVF9T WVNST09UX1BSRUZJWCkpOwotKwotKyAgLyogVGhlIHVwcGVyIGJvdW5kIG9mICcxMCcgaGVyZSBp cyBjb21wbGV0ZWx5IGFyYml0cmFyeS4gIFRoZSBsb29wIHNob3VsZAotKyAgICAgdGVybWluYXRl IHZpYSAnYnJlYWsnIHdoZW4gZWl0aGVyIChhKSBhIHJlYWRhYmxlIHN5bWxpbmsgaXMgZm91bmQs IG9yCi0rICAgICAoYikgYSBub24tZXhpc3RpbmcgZW50cnkgaXMgZm91bmQuCi0rCi0rICAgICBI b3dldmVyLCBmb3IgcmVtb3RlIHRhcmdldHMsIHdlIHJlbHkgb24gdGhlIHJlbW90ZSByZXR1cm5p bmcgc2FuZQotKyAgICAgZXJyb3IgY29kZXMuICBJZiBhIHJlbW90ZSBzZW5kcyBiYWNrIHRoZSB3 cm9uZyBlcnJvciBjb2RlIHRoZW4gaXQKLSsgICAgIG1pZ2h0IHRyaWNrIEdEQiBpbnRvIHRoaW5r aW5nIHRoYXQgdGhlIHN5bWxpbmsgZXhpc3RzLCBidXQgcG9pbnRzIHRvIGEKLSsgICAgIG1pc3Np bmcgZmlsZSwgaW4gd2hpY2ggY2FzZSBHREIgd2lsbCB0cnkgdGhlIG5leHQgc2Vxbm8uICBXZSBk b24ndAotKyAgICAgd2FudCBhIGJyb2tlbiByZW1vdGUgdG8gY2F1c2UgR0RCIHRvIHNwaW4gaGVy ZSBmb3JldmVyLCBoZW5jZSBhIGZpeGVkCi0rICAgICB1cHBlciBib3VuZC4gICovCi0rCi0rICBm b3IgKHVuc2lnbmVkIHNlcW5vID0gMDsgc2Vxbm8gPCAxMDsgc2Vxbm8rKykKLSAgICAgewotLSAg ICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csIF8oIiAgVHJ5aW5nICVzLi4uIiksIGxpbmsuY19z dHIgKCkpOwotLSAgICAgIGdkYl9mbHVzaCAoZ2RiX3N0ZGxvZyk7Ci0tICAgIH0KLSsgICAgICBz dGQ6OnN0cmluZyBsaW5rIChvcmlnaW5hbF9saW5rX3ZpZXcpOwotIAotLSAgLyogbHJlYWxwYXRo KCkgaXMgZXhwZW5zaXZlIGV2ZW4gZm9yIHRoZSB1c3VhbGx5IG5vbi1leGlzdGVudCBmaWxlcy4g ICovCi0tICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBmaWxlbmFtZV9ob2xkZXI7Ci0t ICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IG51bGxwdHI7Ci0tICBpZiAoaXNfdGFyZ2V0X2ZpbGVu YW1lIChsaW5rKSkKLS0gICAgZmlsZW5hbWUgPSBsaW5rLmNfc3RyICgpOwotLSAgZWxzZSBpZiAo YWNjZXNzIChsaW5rLmNfc3RyICgpLCBGX09LKSA9PSAwKQotLSAgICB7Ci0tICAgICAgZmlsZW5h bWVfaG9sZGVyLnJlc2V0IChscmVhbHBhdGggKGxpbmsuY19zdHIgKCkpKTsKLS0gICAgICBmaWxl bmFtZSA9IGZpbGVuYW1lX2hvbGRlci5nZXQgKCk7Ci0tICAgIH0KLSsgICAgICBpZiAoc2Vxbm8g PiAwKQotKwlzdHJpbmdfYXBwZW5kZiAobGluaywgIi4ldSIsIHNlcW5vKTsKLSAKLS0gIGlmIChm aWxlbmFtZSA9PSBOVUxMKQotLSAgICB7Ci0tICAgICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVf ZGVidWcpCi0tCWdkYl9wcmludGYgKGdkYl9zdGRsb2csCi0tCQkgICAgXygiIG5vLCB1bmFibGUg dG8gY29tcHV0ZSByZWFsIHBhdGhcbiIpKTsKLSsgICAgICBsaW5rICs9IHN1ZmZpeDsKLSAKLS0g ICAgICByZXR1cm4ge307Ci0tICAgIH0KLSsgICAgICBzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVn X3ByaW50ZiAoIlRyeWluZyAlcy4uLiIsIGxpbmsuY19zdHIgKCkpOwotIAotLSAgLyogV2UgZXhw ZWN0IHRvIGJlIHNpbGVudCBvbiB0aGUgbm9uLWV4aXN0aW5nIGZpbGVzLiAgKi8KLS0gIGdkYl9i ZmRfcmVmX3B0ciBkZWJ1Z19iZmQgPSBnZGJfYmZkX29wZW4gKGZpbGVuYW1lLCBnbnV0YXJnZXQp OwotKyAgICAgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+IGZpbGVuYW1lX2hvbGRlcjsK LSsgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSA9IG51bGxwdHI7Ci0rICAgICAgaWYgKGlzX3Rh cmdldF9maWxlbmFtZSAobGluaykpCi0rCXsKLSsJICBnZGJfYXNzZXJ0IChsaW5rLmxlbmd0aCAo KSA+PSBzdHJsZW4gKFRBUkdFVF9TWVNST09UX1BSRUZJWCkpOwotKwkgIGNvbnN0IGNoYXIgKmxp bmtfb25fdGFyZ2V0Ci0rCSAgICA9IGxpbmsuY19zdHIgKCkgKyBzdHJsZW4gKFRBUkdFVF9TWVNS T09UX1BSRUZJWCk7Ci0rCi0rCSAgZmlsZWlvX2Vycm9yIHRhcmdldF9lcnJubzsKLSsJICBpZiAo c3VwcG9ydHNfdGFyZ2V0X3N0YXQgIT0gVFJJQk9PTF9GQUxTRSkKLSsJICAgIHsKLSsJICAgICAg c3RydWN0IHN0YXQgc2I7Ci0rCSAgICAgIGludCByZXMgPSB0YXJnZXRfZmlsZWlvX3N0YXQgKG51 bGxwdHIsIGxpbmtfb25fdGFyZ2V0LCAmc2IsCi0rCQkJCQkgICAgJnRhcmdldF9lcnJubyk7Ci0r Ci0rCSAgICAgIGlmIChyZXMgIT0gMCAmJiB0YXJnZXRfZXJybm8gIT0gRklMRUlPX0VOT1NZUykK LSsJCXsKLSsJCSAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYgKCJwYXRoIGRvZXNu J3QgZXhpc3QiKTsKLSsJCSAgYnJlYWs7Ci0rCQl9Ci0rCSAgICAgIGVsc2UgaWYgKHJlcyAhPSAw ICYmIHRhcmdldF9lcnJubyA9PSBGSUxFSU9fRU5PU1lTKQotKwkJc3VwcG9ydHNfdGFyZ2V0X3N0 YXQgPSBUUklCT09MX0ZBTFNFOwotKwkgICAgICBlbHNlCi0rCQl7Ci0rCQkgIHN1cHBvcnRzX3Rh cmdldF9zdGF0ID0gVFJJQk9PTF9UUlVFOwotKwkJICBmaWxlbmFtZSA9IGxpbmsuY19zdHIgKCk7 Ci0rCQl9Ci0rCSAgICB9Ci0rCi0rCSAgaWYgKHN1cHBvcnRzX3RhcmdldF9zdGF0ID09IFRSSUJP T0xfRkFMU0UpCi0rCSAgICB7Ci0rCSAgICAgIGdkYl9hc3NlcnQgKGZpbGVuYW1lID09IG51bGxw dHIpOwotKwotKwkgICAgICAvKiBDb25uZWN0aW5nIHRvIGEgdGFyZ2V0IHRoYXQgZG9lc24ndCBz dXBwb3J0ICdzdGF0Jy4gIFRyeQotKwkJICdyZWFkbGluaycgYXMgYW4gYWx0ZXJuYXRpdmUuICBU aGlzIGlzbid0IGlkZWFsLCBidXQgaXMKLSsJCSBtYXliZSBiZXR0ZXIgdGhhbiBub3RoaW5nLiAg UmV0dXJucyBFSU5WQUwgaWYgdGhlIHBhdGgKLSsJCSBpc24ndCBhIHN5bWJvbGljIGxpbmssIHdo aWNoIGhpbnRzIHRoYXQgdGhlIHBhdGggaXMKLSsJCSBhdmFpbGFibGUgLS0gdGhlcmUgYXJlIG90 aGVyIGVycm9ycyBlLmcuIEVOT0VOVCBmb3Igd2hlbgotKwkJIHRoZSBwYXRoIGRvZXNuJ3QgZXhp c3QsIGJ1dCB3ZSBqdXN0IGFzc3VtZSB0aGF0IGFueXRoaW5nCi0rCQkgb3RoZXIgdGhhbiBFSU5W QUwgaW5kaWNhdGVzIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3QuICAqLwotKwkgICAgICBzdGQ6Om9w dGlvbmFsPHN0ZDo6c3RyaW5nPiBsaW5rX3RhcmdldAotKwkJPSB0YXJnZXRfZmlsZWlvX3JlYWRs aW5rIChudWxscHRyLCBsaW5rX29uX3RhcmdldCwKLSsJCQkJCSAgJnRhcmdldF9lcnJubyk7Ci0r CSAgICAgIGlmIChsaW5rX3RhcmdldC5oYXNfdmFsdWUgKCkKLSsJCSAgfHwgdGFyZ2V0X2Vycm5v ID09IEZJTEVJT19FSU5WQUwpCi0rCQlmaWxlbmFtZSA9IGxpbmsuY19zdHIgKCk7Ci0rCSAgICAg IGVsc2UKLSsJCXsKLSsJCSAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYgKCJwYXRo IGRvZXNuJ3QgZXhpc3QiKTsKLSsJCSAgYnJlYWs7Ci0rCQl9Ci0rCSAgICB9Ci0rCX0KLSsgICAg ICBlbHNlCi0rCXsKLSsJICBzdHJ1Y3Qgc3RhdCBidWY7Ci0rCi0rCSAgLyogVGhlIGBhY2Nlc3Mn IGNhbGwgYmVsb3cgYXV0b21hdGljYWxseSBkZXJlZmVyZW5jZXMgTElOSywgYnV0Ci0rCSAgICAg d2Ugd2FudCB0byBzdG9wIGluY3JlbWVudGluZyBTRVFOTyBvbmNlIHdlIGZpbmQgYSBzeW1saW5r Ci0rCSAgICAgdGhhdCBkb2Vzbid0IGV4aXN0LiAgKi8KLSsJICBpZiAobHN0YXQgKGxpbmsuY19z dHIgKCksICZidWYpICE9IDApCi0rCSAgICB7Ci0rCSAgICAgIHNlcGFyYXRlX2RlYnVnX2ZpbGVf ZGVidWdfcHJpbnRmICgicGF0aCBkb2Vzbid0IGV4aXN0Iik7Ci0rCSAgICAgIGJyZWFrOwotKwkg ICAgfQotKwotKwkgIC8qIENhbiBMSU5LIGJlIGFjY2Vzc2VkLCBvciBpZiBMSU5LIGlzIGEgc3lt bGluaywgY2FuIHRoZSBmaWxlCi0rCSAgICAgcG9pbnRlZCB0b28gYmUgYWNjZXNzZWQ/ICBEbyB0 aGlzIGFzIGxyZWFscGF0aCgpIGlzCi0rCSAgICAgZXhwZW5zaXZlLCBldmVuIGZvciB0aGUgdXN1 YWxseSBub24tZXhpc3RlbnQgZmlsZXMuICAqLwotKwkgIGlmIChhY2Nlc3MgKGxpbmsuY19zdHIg KCksIEZfT0spID09IDApCi0rCSAgICB7Ci0rCSAgICAgIGZpbGVuYW1lX2hvbGRlci5yZXNldCAo bHJlYWxwYXRoIChsaW5rLmNfc3RyICgpKSk7Ci0rCSAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVf aG9sZGVyLmdldCAoKTsKLSsJICAgIH0KLSsJfQotIAotLSAgaWYgKGRlYnVnX2JmZCA9PSBOVUxM KQotLSAgICB7Ci0tICAgICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCi0tCWdkYl9w cmludGYgKGdkYl9zdGRsb2csIF8oIiBubywgdW5hYmxlIHRvIG9wZW4uXG4iKSk7Ci0rICAgICAg aWYgKGZpbGVuYW1lID09IG51bGxwdHIpCi0rCXsKLSsJICBzZXBhcmF0ZV9kZWJ1Z19maWxlX2Rl YnVnX3ByaW50ZiAoInVuYWJsZSB0byBjb21wdXRlIHJlYWwgcGF0aCIpOwotKwkgIGNvbnRpbnVl OwotKwl9Ci0gCi0tICAgICAgcmV0dXJuIHt9OwotLSAgICB9Ci0rICAgICAgLyogV2UgZXhwZWN0 IHRvIGJlIHNpbGVudCBvbiB0aGUgbm9uLWV4aXN0aW5nIGZpbGVzLiAgKi8KLSsgICAgICBnZGJf YmZkX3JlZl9wdHIgZGVidWdfYmZkID0gZ2RiX2JmZF9vcGVuIChmaWxlbmFtZSwgZ251dGFyZ2V0 KTsKLSAKLS0gIGlmICghYnVpbGRfaWRfdmVyaWZ5IChkZWJ1Z19iZmQuZ2V0KCksIGJ1aWxkX2lk X2xlbiwgYnVpbGRfaWQpKQotLSAgICB7Ci0tICAgICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVf ZGVidWcpCi0tCWdkYl9wcmludGYgKGdkYl9zdGRsb2csIF8oIiBubywgYnVpbGQtaWQgZG9lcyBu b3QgbWF0Y2guXG4iKSk7Ci0rICAgICAgaWYgKGRlYnVnX2JmZCA9PSBOVUxMKQotKwl7Ci0rCSAg c2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYgKCJ1bmFibGUgdG8gb3BlbiBgJXNgIiwg ZmlsZW5hbWUpOwotKwkgIGNvbnRpbnVlOwotKwl9Ci0gCi0tICAgICAgcmV0dXJuIHt9OwotLSAg ICB9Ci0rICAgICAgaWYgKCFidWlsZF9pZF92ZXJpZnkgKGRlYnVnX2JmZC5nZXQoKSwgYnVpbGRf aWRfbGVuLCBidWlsZF9pZCkpCi0rCXsKLSsJICBzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnX3By aW50ZiAoImJ1aWxkLWlkIGRvZXMgbm90IG1hdGNoIik7Ci0rCSAgY29udGludWU7Ci0rCX0KLSAK LS0gIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQotLSAgICBnZGJfcHJpbnRmIChnZGJf c3RkbG9nLCBfKCIgeWVzIVxuIikpOwotKyAgICAgIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdf cHJpbnRmICgiZm91bmQgYSBtYXRjaCIpOwotKyAgICAgIHJldHVybiBkZWJ1Z19iZmQ7Ci0rICAg IH0KLSAKLS0gIHJldHVybiBkZWJ1Z19iZmQ7Ci0rICBzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVn X3ByaW50ZiAoIm5vIHN1aXRhYmxlIGZpbGUgZm91bmQiKTsKLSsgIHJldHVybiB7fTsKLSB9Ci0g Ci0gLyogQ29tbW9uIGNvZGUgZm9yIGZpbmRpbmcgQkZEcyBvZiBhIGdpdmVuIGJ1aWxkLWlkLiAg VGhpcyBmdW5jdGlvbgotICAgIHdvcmtzIHdpdGggYm90aCBkZWJ1Z2luZm8gZmlsZXMgKFNVRkZJ WCA9PSAiLmRlYnVnIikgYW5kIGV4ZWN1dGFibGUKLS0gICBmaWxlcyAoU1VGRklYID09ICIiKS4g ICovCi0rICAgZmlsZXMgKFNVRkZJWCA9PSAiIikuCi0rCi0rICAgVGhlIGJ1aWxkLWlkIHdpbGwg YmUgc3BsaXQgaW50byBhIHNpbmdsZSBieXRlIHN1Yi1kaXJlY3RvcnksIGZvbGxvd2VkIGJ5Ci0r ICAgdGhlIHJlbWFpbmluZyBidWlsZC1pZCBieXRlcyBhcyB0aGUgZmlsZW5hbWUsIGkuZS4gd2Ug dXNlIHRoZSBsb29rdXAKLSsgICBmb3JtYXQ6IGAuYnVpbGQtaWQveHgveXkuLi4uenpgLiAgQXMg YSBjb25zZXF1ZW5jZSwgaWYgQlVJTERfSURfTEVOIGlzCi0rICAgbGVzcyB0aGFuIDIgKGJ5dGVz KSwgbm8gcmVzdWx0cyB3aWxsIGJlIGZvdW5kIGFzIHRoZXJlIGFyZSBub3QgZW5vdWdoCi0rICAg Ynl0ZXMgdG8gZm9ybSB0aGUgYHl5Li4uLnp6YCBwYXJ0IG9mIHRoZSBsb29rdXAgZmlsZW5hbWUu ICAqLwotIAotIHN0YXRpYyBnZGJfYmZkX3JlZl9wdHIKLSBidWlsZF9pZF90b19iZmRfc3VmZml4 IChzaXplX3QgYnVpbGRfaWRfbGVuLCBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQsCi0gCQkJY29u c3QgY2hhciAqc3VmZml4KQotIHsKLSsgIFNFUEFSQVRFX0RFQlVHX0ZJTEVfU0NPUEVEX0RFQlVH X0VOVEVSX0VYSVQ7Ci0rCi0rICBpZiAoYnVpbGRfaWRfbGVuIDwgMikKLSsgICAgewotKyAgICAg IC8qIFplcm8gbGVuZ3RoIGJ1aWxkLWlkcyBhcmUgaWdub3JlZCBieSBiZmQuICAqLwotKyAgICAg IGdkYl9hc3NlcnQgKGJ1aWxkX2lkX2xlbiA+IDApOwotKyAgICAgIHNlcGFyYXRlX2RlYnVnX2Zp bGVfZGVidWdfcHJpbnRmCi0rCSgiSWdub3Jpbmcgc2hvcnQgYnVpbGQtaWQgYCVzJyBmb3IgYnVp bGQtaWQgYmFzZWQgbG9va3VwIiwKLSsJIGJpbjJoZXggKGJ1aWxkX2lkLCBidWlsZF9pZF9sZW4p LmNfc3RyICgpKTsKLSsgICAgICByZXR1cm4ge307Ci0rICAgIH0KLSsKLSAgIC8qIEtlZXAgYmFj a3dhcmQgY29tcGF0aWJpbGl0eSBzbyB0aGF0IERFQlVHX0ZJTEVfRElSRUNUT1JZIGJlaW5nICIi IHdpbGwKLSAgICAgIGNhdXNlICIvLmJ1aWxkLWlkLy4uLiIgbG9va3Vwcy4gICovCi0gCi1AQCAt MTU4LDMwICsyNjUsMzMgQEAgYnVpbGRfaWRfdG9fYmZkX3N1ZmZpeCAoc2l6ZV90IGJ1aWxkX2lk X2xlbiwgY29uc3QgYmZkX2J5dGUgKmJ1aWxkX2lkLAotICAgICAgIHN0ZDo6c3RyaW5nIGxpbmsg PSBkZWJ1Z2Rpci5nZXQgKCk7Ci0gICAgICAgbGluayArPSAiLy5idWlsZC1pZC8iOwotIAotLSAg ICAgIGlmIChzaXplID4gMCkKLS0JewotLQkgIHNpemUtLTsKLS0JICBzdHJpbmdfYXBwZW5kZiAo bGluaywgIiUwMngvIiwgKHVuc2lnbmVkKSAqZGF0YSsrKTsKLS0JfQotKyAgICAgIGdkYl9hc3Nl cnQgKHNpemUgPiAxKTsKLSsgICAgICBzaXplLS07Ci0rICAgICAgc3RyaW5nX2FwcGVuZGYgKGxp bmssICIlMDJ4LyIsICh1bnNpZ25lZCkgKmRhdGErKyk7Ci0gCi0gICAgICAgd2hpbGUgKHNpemUt LSA+IDApCi0gCXN0cmluZ19hcHBlbmRmIChsaW5rLCAiJTAyeCIsICh1bnNpZ25lZCkgKmRhdGEr Kyk7Ci0gCi0tICAgICAgbGluayArPSBzdWZmaXg7Ci0tCi0gICAgICAgZ2RiX2JmZF9yZWZfcHRy IGRlYnVnX2JmZAotLQk9IGJ1aWxkX2lkX3RvX2RlYnVnX2JmZF8xIChsaW5rLCBidWlsZF9pZF9s ZW4sIGJ1aWxkX2lkKTsKLSsJPSBidWlsZF9pZF90b19kZWJ1Z19iZmRfMSAobGluaywgYnVpbGRf aWRfbGVuLCBidWlsZF9pZCwgc3VmZml4KTsKLSAgICAgICBpZiAoZGVidWdfYmZkICE9IE5VTEwp Ci0gCXJldHVybiBkZWJ1Z19iZmQ7Ci0gCi0gICAgICAgLyogVHJ5IHRvIGxvb2sgdW5kZXIgdGhl IHN5c3Jvb3QgYXMgd2VsbC4gIElmIHRoZSBzeXNyb290IGlzCi0gCSAiL3RoZS9zeXNyb290Iiwg aXQgd2lsbCBnaXZlCi0tCSAiL3RoZS9zeXNyb290L3Vzci9saWIvZGVidWcvLmJ1aWxkLWlkL2Fi L2NkZWYuZGVidWciLiAgKi8KLSsJICIvdGhlL3N5c3Jvb3QvdXNyL2xpYi9kZWJ1Zy8uYnVpbGQt aWQvYWIvY2RlZi5kZWJ1ZyIuCi0rCi0rCSBJZiB0aGUgc3lzcm9vdCBpcyAndGFyZ2V0OicgYW5k IHRoZSB0YXJnZXQgZmlsZXN5c3RlbSBpcyBsb2NhbCB0bwotKwkgR0RCIHRoZW4gJ3RhcmdldDov cGF0aC90by9jaGVjaycgYmVjb21lcyAnL3BhdGgvdG8vY2hlY2snIHdoaWNoCi0rCSB3ZSBqdXN0 IGNoZWNrZWQgYWJvdmUuICAqLwotIAotLSAgICAgIGlmICghZ2RiX3N5c3Jvb3QuZW1wdHkgKCkp Ci0rICAgICAgaWYgKCFnZGJfc3lzcm9vdC5lbXB0eSAoKQotKwkgICYmIChnZGJfc3lzcm9vdCAh PSBUQVJHRVRfU1lTUk9PVF9QUkVGSVgKLSsJICAgICAgfHwgIXRhcmdldF9maWxlc3lzdGVtX2lz X2xvY2FsICgpKSkKLSAJewotIAkgIGxpbmsgPSBnZGJfc3lzcm9vdCArIGxpbms7Ci0tCSAgZGVi dWdfYmZkID0gYnVpbGRfaWRfdG9fZGVidWdfYmZkXzEgKGxpbmssIGJ1aWxkX2lkX2xlbiwgYnVp bGRfaWQpOwotKwkgIGRlYnVnX2JmZCA9IGJ1aWxkX2lkX3RvX2RlYnVnX2JmZF8xIChsaW5rLCBi dWlsZF9pZF9sZW4sIGJ1aWxkX2lkLAotKwkJCQkJICAgICAgIHN1ZmZpeCk7Ci0gCSAgaWYgKGRl YnVnX2JmZCAhPSBOVUxMKQotIAkgICAgcmV0dXJuIGRlYnVnX2JmZDsKLSAJfQotQEAgLTE5OCw5 ICszMDgsMTEgQEAgYnVpbGRfaWRfdG9fZGVidWdfYmZkIChzaXplX3QgYnVpbGRfaWRfbGVuLCBj b25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQpCi0gICByZXR1cm4gYnVpbGRfaWRfdG9fYmZkX3N1ZmZp eCAoYnVpbGRfaWRfbGVuLCBidWlsZF9pZCwgIi5kZWJ1ZyIpOwotIH0KLSAKLS0vKiBTZWUgYnVp bGQtaWQuaC4gICovCi0rLyogRmluZCBhbmQgb3BlbiBhIEJGRCBmb3IgYW4gZXhlY3V0YWJsZSBm aWxlIGdpdmVuIGEgYnVpbGQtaWQuICBJZiBubyBCRkQKLSsgICBjYW4gYmUgZm91bmQsIHJldHVy biBOVUxMLiAgVGhlIHJldHVybmVkIHJlZmVyZW5jZSB0byB0aGUgQkZEIG11c3QgYmUKLSsgICBy ZWxlYXNlZCBieSB0aGUgY2FsbGVyLiAgKi8KLSAKLS1nZGJfYmZkX3JlZl9wdHIKLStzdGF0aWMg Z2RiX2JmZF9yZWZfcHRyCi0gYnVpbGRfaWRfdG9fZXhlY19iZmQgKHNpemVfdCBidWlsZF9pZF9s ZW4sIGNvbnN0IGJmZF9ieXRlICpidWlsZF9pZCkKLSB7Ci0gICByZXR1cm4gYnVpbGRfaWRfdG9f YmZkX3N1ZmZpeCAoYnVpbGRfaWRfbGVuLCBidWlsZF9pZCwgIiIpOwotQEAgLTIxNywxMCArMzI5 LDkgQEAgZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlX2J5X2J1aWxkaWQgKHN0cnVjdCBvYmpmaWxl ICpvYmpmaWxlLAotICAgYnVpbGRfaWQgPSBidWlsZF9pZF9iZmRfZ2V0IChvYmpmaWxlLT5vYmZk LmdldCAoKSk7Ci0gICBpZiAoYnVpbGRfaWQgIT0gTlVMTCkKLSAgICAgewotLSAgICAgIGlmIChz ZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQotLQlnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAotLQkJ ICAgIF8oIlxuTG9va2luZyBmb3Igc2VwYXJhdGUgZGVidWcgaW5mbyAoYnVpbGQtaWQpIGZvciAi Ci0tCQkgICAgICAiJXNcbiIpLCBvYmpmaWxlX25hbWUgKG9iamZpbGUpKTsKLSsgICAgICBTRVBB UkFURV9ERUJVR19GSUxFX1NDT1BFRF9ERUJVR19TVEFSVF9FTkQKLSsJKCJsb29raW5nIGZvciBz ZXBhcmF0ZSBkZWJ1ZyBpbmZvIChidWlsZC1pZCkgZm9yICVzIiwKLSsJIG9iamZpbGVfbmFtZSAo b2JqZmlsZSkpOwotIAotICAgICAgIGdkYl9iZmRfcmVmX3B0ciBhYmZkIChidWlsZF9pZF90b19k ZWJ1Z19iZmQgKGJ1aWxkX2lkLT5zaXplLAotIAkJCQkJCSAgIGJ1aWxkX2lkLT5kYXRhKSk7Ci1A QCAtMjI5LDkgKzM0MCw5IEBAIGZpbmRfc2VwYXJhdGVfZGVidWdfZmlsZV9ieV9idWlsZGlkIChz dHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSwKLSAJICAmJiBmaWxlbmFtZV9jbXAgKGJmZF9nZXRfZmls ZW5hbWUgKGFiZmQuZ2V0ICgpKSwKLSAJCQkgICBvYmpmaWxlX25hbWUgKG9iamZpbGUpKSA9PSAw KQotIAl7Ci0tCSAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCi0tCSAgICBnZGJfcHJp bnRmIChnZGJfc3RkbG9nLCAiXCIlc1wiOiBzZXBhcmF0ZSBkZWJ1ZyBpbmZvIGZpbGUgaGFzIG5v ICIKLS0JCQkiZGVidWcgaW5mbyIsIGJmZF9nZXRfZmlsZW5hbWUgKGFiZmQuZ2V0ICgpKSk7Ci0r CSAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYKLSsJICAgICgiXCIlc1wiOiBzZXBh cmF0ZSBkZWJ1ZyBpbmZvIGZpbGUgaGFzIG5vIGRlYnVnIGluZm8iLAotKwkgICAgIGJmZF9nZXRf ZmlsZW5hbWUgKGFiZmQuZ2V0ICgpKSk7Ci0gCSAgd2FybmluZ3MtPndhcm4gKF8oIlwiJXBzXCI6 IHNlcGFyYXRlIGRlYnVnIGluZm8gZmlsZSBoYXMgbm8gIgotIAkJCSAgICAiZGVidWcgaW5mbyIp LAotIAkJCSAgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLAotQEAgLTI0 MywzICszNTQsNzggQEAgZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlX2J5X2J1aWxkaWQgKHN0cnVj dCBvYmpmaWxlICpvYmpmaWxlLAotIAotICAgcmV0dXJuIHN0ZDo6c3RyaW5nICgpOwotIH0KLSsK LSsvKiBTZWUgYnVpbGQtaWQuaC4gICovCi0rCi0rZ2RiX2JmZF9yZWZfcHRyCi0rZmluZF9vYmpm aWxlX2J5X2J1aWxkX2lkIChwcm9ncmFtX3NwYWNlICpwc3BhY2UsCi0rCQkJICBjb25zdCBiZmRf YnVpbGRfaWQgKmJ1aWxkX2lkLAotKwkJCSAgY29uc3QgY2hhciAqZXhwZWN0ZWRfZmlsZW5hbWUp Ci0rewotKyAgZ2RiX2JmZF9yZWZfcHRyIGFiZmQ7Ci0rCi0rICBmb3IgKHVuc2lnbmVkIGF0dGVt cHQgPSAwLCBtYXhfYXR0ZW1wdHMgPSAxOwotKyAgICAgICBhdHRlbXB0IDwgbWF4X2F0dGVtcHRz ICYmIGFiZmQgPT0gbnVsbHB0cjsKLSsgICAgICAgKythdHRlbXB0KQotKyAgICB7Ci0rICAgICAg LyogVHJ5IHRvIGZpbmQgdGhlIGV4ZWN1dGFibGUgKG9yIHNoYXJlZCBvYmplY3QpIGJ5IGxvb2tp bmcgZm9yIGEKLSsJIChzeW0pbGluayBvbiBkaXNrIGZyb20gdGhlIGJ1aWxkLWlkIHRvIHRoZSBv YmplY3QgZmlsZS4gICovCi0rICAgICAgYWJmZCA9IGJ1aWxkX2lkX3RvX2V4ZWNfYmZkIChidWls ZF9pZC0+c2l6ZSwgYnVpbGRfaWQtPmRhdGEpOwotKwotKyAgICAgIGlmIChhYmZkICE9IG51bGxw dHIgfHwgYXR0ZW1wdCA+IDApCi0rCWJyZWFrOwotKwotKyAgICAgIC8qIEF0dGVtcHQgdG8gcXVl cnkgZGVidWdpbmZvZCBmb3IgdGhlIGV4ZWN1dGFibGUuICBUaGlzIHdpbGwgb25seQotKwkgZ2V0 IHJ1biBkdXJpbmcgdGhlIGZpcnN0IGF0dGVtcHQsIGlmIGFuIGV4dGVuc2lvbiBsYW5ndWFnZSBo b29rCi0rCSAoc2VlIGJlbG93KSBhc2tlZCBmb3IgYSBzZWNvbmQgYXR0ZW1wdCB0aGVuIHdlIHdp bGwgaGF2ZSBhbHJlYWR5Ci0rCSBicm9rZW4gb3V0IG9mIHRoZSBsb29wIGFib3ZlLiAgKi8KLSsg ICAgICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBwYXRoOwotKyAgICAgIHNjb3BlZF9m ZCBmZCA9IGRlYnVnaW5mb2RfZXhlY19xdWVyeSAoYnVpbGRfaWQtPmRhdGEsIGJ1aWxkX2lkLT5z aXplLAotKwkJCQkJICAgIGV4cGVjdGVkX2ZpbGVuYW1lLCAmcGF0aCk7Ci0rICAgICAgaWYgKGZk LmdldCAoKSA+PSAwKQotKwl7Ci0rCSAgYWJmZCA9IGdkYl9iZmRfb3BlbiAocGF0aC5nZXQgKCks IGdudXRhcmdldCk7Ci0rCi0rCSAgaWYgKGFiZmQgPT0gbnVsbHB0cikKLSsJICAgIHdhcm5pbmcg KF8oIlwiJXBzXCIgZnJvbSBkZWJ1Z2luZm9kIGNhbm5vdCBiZSBvcGVuZWQgYXMgYmZkOiAlcyIp LAotKwkJICAgICBzdHlsZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5bGUgKCksIHBhdGgu Z2V0ICgpKSwKLSsJCSAgICAgZ2RiX2JmZF9lcnJtc2cgKGJmZF9nZXRfZXJyb3IgKCksIG51bGxw dHIpLmNfc3RyICgpKTsKLSsJICBlbHNlIGlmICghYnVpbGRfaWRfdmVyaWZ5IChhYmZkLmdldCAo KSwgYnVpbGRfaWQtPnNpemUsCi0rCQkJCSAgICAgYnVpbGRfaWQtPmRhdGEpKQotKwkgICAgYWJm ZCA9IG51bGxwdHI7Ci0rCX0KLSsKLSsgICAgICBpZiAoYWJmZCAhPSBudWxscHRyKQotKwlicmVh azsKLSsKLSsgICAgICBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0IGV4dF9yZXN1bHQKLSsJ PSBleHRfbGFuZ19maW5kX29iamZpbGVfZnJvbV9idWlsZGlkIChwc3BhY2UsIGJ1aWxkX2lkLAot KwkJCQkJICAgICAgZXhwZWN0ZWRfZmlsZW5hbWUpOwotKyAgICAgIGlmICghZXh0X3Jlc3VsdC5m aWxlbmFtZSAoKS5lbXB0eSAoKSkKLSsJewotKwkgIC8qIFRoZSBleHRlbnNpb24gaWRlbnRpZmll ZCB0aGUgZmlsZSBmb3IgdXMuICAqLwotKwkgIGFiZmQgPSBnZGJfYmZkX29wZW4gKGV4dF9yZXN1 bHQuZmlsZW5hbWUgKCkuY19zdHIgKCksIGdudXRhcmdldCk7Ci0rCSAgaWYgKGFiZmQgPT0gbnVs bHB0cikKLSsJICAgIHsKLSsJICAgICAgd2FybmluZyAoXygiXCIlcHNcIiBmcm9tIGV4dGVuc2lv biBjYW5ub3QgYmUgb3BlbmVkIGFzIGJmZDogJXMiKSwKLSsJCSAgICAgICBzdHlsZWRfc3RyaW5n IChmaWxlX25hbWVfc3R5bGUuc3R5bGUgKCksCi0rCQkJCSAgICAgIGV4dF9yZXN1bHQuZmlsZW5h bWUgKCkuY19zdHIgKCkpLAotKwkJICAgICAgIGdkYl9iZmRfZXJybXNnIChiZmRfZ2V0X2Vycm9y ICgpLCBudWxscHRyKS5jX3N0ciAoKSk7Ci0rCSAgICAgIGJyZWFrOwotKwkgICAgfQotKwotKwkg IC8qIElmIHRoZSBleHRlbnNpb24gZ2F2ZSB1cyBhIHBhdGggdG8gYSBmaWxlIHRoZW4gd2UgYWx3 YXlzCi0rCSAgICAgYXNzdW1lIHRoYXQgaXQgaXMgdGhlIGNvcnJlY3QgZmlsZSwgd2UgZG8gbm8g YWRkaXRpb25hbCBjaGVjawotKwkgICAgIG9mIGl0cyBidWlsZC1pZC4gICovCi0rCX0KLSsgICAg ICBlbHNlIGlmIChleHRfcmVzdWx0LnRyeV9hZ2FpbiAoKSkKLSsJewotKwkgIC8qIFRoZSBleHRl bnNpb24gbWlnaHQgaGF2ZSBpbnN0YWxsZWQgdGhlIGZpbGUgaW4gdGhlIGV4cGVjdGVkCi0rCSAg ICAgbG9jYXRpb24sIHdlIHNob3VsZCB0cnkgYWdhaW4uICAqLwotKwkgIG1heF9hdHRlbXB0cyA9 IDI7Ci0rCSAgY29udGludWU7Ci0rCX0KLSsgICAgfQotKwotKyAgcmV0dXJuIGFiZmQ7Ci0rfQot ZGlmZiAtLWdpdCBhL2dkYi9idWlsZC1pZC5oIGIvZ2RiL2J1aWxkLWlkLmgKLS0tLSBhL2dkYi9i dWlsZC1pZC5oCi0rKysgYi9nZGIvYnVpbGQtaWQuaAotQEAgLTQwLDEzICs0MCw2IEBAIGV4dGVy biBpbnQgYnVpbGRfaWRfdmVyaWZ5IChiZmQgKmFiZmQsCi0gZXh0ZXJuIGdkYl9iZmRfcmVmX3B0 ciBidWlsZF9pZF90b19kZWJ1Z19iZmQgKHNpemVfdCBidWlsZF9pZF9sZW4sCi0gCQkJCQkgICAg ICBjb25zdCBiZmRfYnl0ZSAqYnVpbGRfaWQpOwotIAotLS8qIEZpbmQgYW5kIG9wZW4gYSBCRkQg Zm9yIGFuIGV4ZWN1dGFibGUgZmlsZSBnaXZlbiBhIGJ1aWxkLWlkLiAgSWYgbm8gQkZECi0tICAg Y2FuIGJlIGZvdW5kLCByZXR1cm4gTlVMTC4gIFRoZSByZXR1cm5lZCByZWZlcmVuY2UgdG8gdGhl IEJGRCBtdXN0IGJlCi0tICAgcmVsZWFzZWQgYnkgdGhlIGNhbGxlci4gICovCi0tCi0tZXh0ZXJu IGdkYl9iZmRfcmVmX3B0ciBidWlsZF9pZF90b19leGVjX2JmZCAoc2l6ZV90IGJ1aWxkX2lkX2xl biwKLS0JCQkJCSAgICAgY29uc3QgYmZkX2J5dGUgKmJ1aWxkX2lkKTsKLS0KLSAvKiBGaW5kIHRo ZSBzZXBhcmF0ZSBkZWJ1ZyBmaWxlIGZvciBPQkpGSUxFLCBieSB1c2luZyB0aGUgYnVpbGQtaWQK LSAgICBhc3NvY2lhdGVkIHdpdGggT0JKRklMRSdzIEJGRC4gIElmIHN1Y2Nlc3NmdWwsIHJldHVy bnMgdGhlIGZpbGUgbmFtZSBmb3IgdGhlCi0gICAgc2VwYXJhdGUgZGVidWcgZmlsZSwgb3RoZXJ3 aXNlLCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLgotQEAgLTYwLDYgKzUzLDIyIEBAIGV4dGVybiBn ZGJfYmZkX3JlZl9wdHIgYnVpbGRfaWRfdG9fZXhlY19iZmQgKHNpemVfdCBidWlsZF9pZF9sZW4s Ci0gZXh0ZXJuIHN0ZDo6c3RyaW5nIGZpbmRfc2VwYXJhdGVfZGVidWdfZmlsZV9ieV9idWlsZGlk Ci0gICAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUsIGRlZmVycmVkX3dhcm5pbmdzICp3YXJuaW5n cyk7Ci0gCi0rLyogRmluZCBhbiBvYmpmaWxlIChleGVjdXRhYmxlIG9yIHNoYXJlZCBsaWJyYXJ5 KSB0aGF0IG1hdGNoZXMgQlVJTERfSUQuCi0rICAgVGhpcyBpcyBkb25lIGJ5IGZpcnN0IGNoZWNr aW5nIGluIHRoZSBkZWJ1Zy1maWxlLWRpcmVjdG9yeSBmb3IgYQotKyAgIHN1aXRhYmxlIC5idWls ZC1pZC8gc3ViLWRpcmVjdG9yeSwgYW5kIGxvb2tpbmcgZm9yIGEgZmlsZSB3aXRoIHRoZQotKyAg IHJlcXVpcmVkIGJ1aWxkLWlkICh1c3VhbGx5IGEgc3ltYm9saWMgbGluayBvciBoYXJkIGxpbmsg dG8gdGhlIGFjdHVhbAotKyAgIGZpbGUpLgotKwotKyAgIElmIHRoYXQgZG9lc24ndCBmaW5kIHVz IGEgZmlsZSB0aGVuIHdlIGNhbGwgdG8gZGVidWdpbmZvZCB0byBzZWUgaWYgaXQKLSsgICBjYW4g cHJvdmlkZSB0aGUgcmVxdWlyZWQgZmlsZS4KLSsKLSsgICBFWFBFQ1RFRF9GSUxFTkFNRSBpcyB1 c2VkIGluIG91dHB1dCBtZXNzYWdlcyBmcm9tIGRlYnVnaW5mb2QsIHRoaXMKLSsgICBzaG91bGQg YmUgdGhlIGZpbGUgd2Ugd2VyZSBsb29raW5nIGZvciBidXQgY291bGRuJ3QgZmluZC4gICovCi0r Ci0rZXh0ZXJuIGdkYl9iZmRfcmVmX3B0ciBmaW5kX29iamZpbGVfYnlfYnVpbGRfaWQKLSsgIChz dHJ1Y3QgcHJvZ3JhbV9zcGFjZSAqcHNwYWNlLCBjb25zdCBiZmRfYnVpbGRfaWQgKmJ1aWxkX2lk LAotKyAgIGNvbnN0IGNoYXIgKmV4cGVjdGVkX2ZpbGVuYW1lKTsKLSsKLSAvKiBSZXR1cm4gYW4g aGV4LXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBCVUlMRF9JRC4gICovCi0gCi0gc3RhdGljIGlu bGluZSBzdGQ6OnN0cmluZwotZGlmZiAtLWdpdCBhL2dkYi9jb3JlbG93LmMgYi9nZGIvY29yZWxv dy5jCi0tLS0gYS9nZGIvY29yZWxvdy5jCi0rKysgYi9nZGIvY29yZWxvdy5jCi1AQCAtNDcsMTcg KzQ3LDEzMCBAQAotICNpbmNsdWRlICJnZGJzdXBwb3J0L3BhdGhzdHVmZi5oIgotICNpbmNsdWRl ICJnZGJzdXBwb3J0L3Njb3BlZF9mZC5oIgotICNpbmNsdWRlICJnZGJzdXBwb3J0L3g4Ni14c3Rh dGUuaCIKLS0jaW5jbHVkZSAiZGVidWdpbmZvZC1zdXBwb3J0LmgiCi0gI2luY2x1ZGUgPHVub3Jk ZXJlZF9tYXA+Ci0gI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+Ci0gI2luY2x1ZGUgImNsaS9jbGkt Y21kcy5oIgotICNpbmNsdWRlICJ4bWwtdGRlc2MuaCIKLSAjaW5jbHVkZSAibWVtdGFnLmgiCi0r I2luY2x1ZGUgImNsaS9jbGktc3R5bGUuaCIKLSAKLSAjaWZuZGVmIE9fTEFSR0VGSUxFCi0gI2Rl ZmluZSBPX0xBUkdFRklMRSAwCi0gI2VuZGlmCi0gCi0rLyogQSBtZW1fcmFuZ2UgYW5kIHRoZSBi dWlsZC1pZCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUgbWFwcGVkIGludG8gdGhlCi0rICAgZ2l2 ZW4gcmFuZ2UuICAqLwotKwotK3N0cnVjdCBtZW1fcmFuZ2VfYW5kX2J1aWxkX2lkCi0rewotKyAg bWVtX3JhbmdlX2FuZF9idWlsZF9pZCAobWVtX3JhbmdlICYmciwgY29uc3QgYmZkX2J1aWxkX2lk ICppZCkKLSsgICAgOiByYW5nZSAociksCi0rICAgICAgYnVpbGRfaWQgKGlkKQotKyAgeyAvKiBO b3RoaW5nLiAgKi8gfQotKwotKyAgLyogQSByYW5nZSBvZiBtZW1vcnkgYWRkcmVzc2VzLiAgKi8K LSsgIG1lbV9yYW5nZSByYW5nZTsKLSsKLSsgIC8qIFRoZSBidWlsZC1pZCBvZiB0aGUgZmlsZSBt YXBwZWQgaW50byBSQU5HRS4gICovCi0rICBjb25zdCBiZmRfYnVpbGRfaWQgKmJ1aWxkX2lkOwot K307Ci0rCi0rLyogQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBpcyBjcmVhdGVkIHdpdGhpbiB0 aGUgY29yZV90YXJnZXQgYW5kIGlzIHVzZWQKLSsgICB0byBob2xkIGFsbCB0aGUgaW5mb3JtYXRp b24gdGhhdCByZWxhdGluZyB0byBtYXBwZWQgZmlsZXMsIHRoZWlyIGFkZHJlc3MKLSsgICByYW5n ZXMsIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGJ1aWxkLWlkcy4gICovCi0rCi0rc3RydWN0IG1h cHBlZF9maWxlX2luZm8KLSt7Ci0rICAvKiBTZWUgY29tbWVudCBvbiBmdW5jdGlvbiBkZWZpbml0 aW9uLiAgKi8KLSsKLSsgIHZvaWQgYWRkIChjb25zdCBjaGFyICpzb25hbWUsIGNvbnN0IGNoYXIg KmV4cGVjdGVkX2ZpbGVuYW1lLAotKwkgICAgY29uc3QgY2hhciAqYWN0dWFsX2ZpbGVuYW1lLCBz dGQ6OnZlY3RvcjxtZW1fcmFuZ2U+ICYmcmFuZ2VzLAotKwkgICAgY29uc3QgYmZkX2J1aWxkX2lk ICpidWlsZF9pZCk7Ci0rCi0rICAvKiBTZWUgY29tbWVudCBvbiBmdW5jdGlvbiBkZWZpbml0aW9u LiAgKi8KLSsKLSsgIHN0ZDo6b3B0aW9uYWwgPGNvcmVfdGFyZ2V0X21hcHBlZF9maWxlX2luZm8+ Ci0rICBsb29rdXAgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBzdGQ6Om9wdGlvbmFsPENP UkVfQUREUj4gJmFkZHIpOwotKwotK3ByaXZhdGU6Ci0rCi0rICAvKiBIZWxwZXIgZm9yIDo6bG9v a3VwLiAgQlVJTERfSUQgaXMgYSBidWlsZC1pZCB0aGF0IHdhcyBmb3VuZCBpbgotKyAgICAgb25l IG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoaXMgY2xhc3MuICBMb29rdXAgdGhlCi0r ICAgICBjb3JyZXNwb25kaW5nIGZpbGVuYW1lIGluIG1fYnVpbGRfaWRfdG9fZmlsZW5hbWVfbWFw IGFuZCByZXR1cm4gYSBwYWlyCi0rICAgICBjb250YWluaW5nIHRoZSBidWlsZC1pZCBhbmQgZmls ZW5hbWUuCi0rCi0rICAgICBJZiBubyBjb3JyZXNwb25kaW5nIGZpbGVuYW1lIGlzIGZvdW5kIGlu IG1fYnVpbGRfaWRfdG9fZmlsZW5hbWVfbWFwCi0rICAgICB0aGVuIHRoZSByZXR1cm5lZCBwYWly IGNvbnRhaW5zIEJVSUxEX0lEIGFuZCBhbiBlbXB0eSBzdHJpbmcuCi0rCi0rICAgICBJZiBCVUlM RF9JRCBpcyBudWxscHRyIHRoZW4gdGhlIHJldHVybmVkIHBhaXIgY29udGFpbnMgbnVsbHB0ciBh bmQgYW4KLSsgICAgIGVtcHR5IHN0cmluZy4gICovCi0rCi0rICBzdHJ1Y3QgY29yZV90YXJnZXRf bWFwcGVkX2ZpbGVfaW5mbwotKyAgbWFrZV9yZXN1bHQgKGNvbnN0IGJmZF9idWlsZF9pZCAqYnVp bGRfaWQpCi0rICB7Ci0rICAgIGlmIChidWlsZF9pZCAhPSBudWxscHRyKQotKyAgICAgIHsKLSsg ICAgICBhdXRvIGl0ID0gbV9idWlsZF9pZF90b19maWxlbmFtZV9tYXAuZmluZCAoYnVpbGRfaWQp OwotKyAgICAgIGlmIChpdCAhPSBtX2J1aWxkX2lkX3RvX2ZpbGVuYW1lX21hcC5lbmQgKCkpCi0r CXJldHVybiB7IGJ1aWxkX2lkLCBpdC0+c2Vjb25kIH07Ci0rICAgIH0KLSsKLSsgICAgcmV0dXJu IHsgYnVpbGRfaWQsIHt9IH07Ci0rICB9Ci0rCi0rICAvKiBBIHR5cGUgdGhhdCBtYXBzIGEgc3Ry aW5nIHRvIGEgYnVpbGQtaWQuICAqLwotKyAgdXNpbmcgc3RyaW5nX3RvX2J1aWxkX2lkX21hcAot KyAgICA9IHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgY29uc3QgYmZkX2J1aWxkX2lk ICo+OwotKwotKyAgLyogQSB0eXBlIHRoYXQgbWFwcyBhIGJ1aWxkLWlkIHRvIGEgc3RyaW5nLiAg Ki8KLSsgIHVzaW5nIGJ1aWxkX2lkX3RvX3N0cmluZ19tYXAKLSsgICAgPSBzdGQ6OnVub3JkZXJl ZF9tYXA8Y29uc3QgYmZkX2J1aWxkX2lkICosIHN0ZDo6c3RyaW5nPjsKLSsKLSsgIC8qIFdoZW4g bG9hZGluZyBhIGNvcmUgZmlsZSwgdGhlIGJ1aWxkLWlkcyBhcmUgZXh0cmFjdGVkIGJhc2VkIG9u IHRoZQotKyAgICAgZmlsZSBiYWNrZWQgbWFwcGluZ3MuICBUaGlzIG1hcCBhc3NvY2lhdGVzIHRo ZSBuYW1lIG9mIGEgZmlsZSB0aGF0IHdhcwotKyAgICAgbWFwcGVkIGludG8gdGhlIGNvcmUgZmls ZSB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGJ1aWxkLWlkLiAgVGhlCi0rICAgICBidWlsZC1pZCBw b2ludGVycyBpbiB0aGlzIG1hcCB3aWxsIG5ldmVyIGJlIG51bGxwdHIgYXMgd2Ugb25seSByZWNv cmQKLSsgICAgIGZpbGVzIGlmIHRoZXkgaGF2ZSBhIGJ1aWxkLWlkLiAgKi8KLSsKLSsgIHN0cmlu Z190b19idWlsZF9pZF9tYXAgbV9maWxlbmFtZV90b19idWlsZF9pZF9tYXA7Ci0rCi0rICAvKiBN YXAgYSBidWlsZC1pZCBwb2ludGVyIGJhY2sgdG8gdGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCB3 YXMgbWFwcGVkCi0rICAgICBpbnRvIHRoZSBpbmZlcmlvcidzIGFkZHJlc3Mgc3BhY2UuICBJZiB3 ZSBsb29rdXAgYSBtYXRjaGluZyBidWlsZC1pZAotKyAgICAgdXNpbmcgZWl0aGVyIGEgc29uYW1l IG9yIGFuIGFkZHJlc3MgdGhlbiB0aGlzIG1hcCBhbGxvd3MgdXMgdG8gYWxzbwotKyAgICAgcHJv dmlkZSBhIGZ1bGwgcGF0aCB0byBhIGZpbGUgd2l0aCBhIG1hdGNoaW5nIGJ1aWxkLWlkLiAgKi8K LSsKLSsgIGJ1aWxkX2lkX3RvX3N0cmluZ19tYXAgbV9idWlsZF9pZF90b19maWxlbmFtZV9tYXA7 Ci0rCi0rICAvKiBJZiB0aGUgZmlsZSB0aGF0IHdhcyBtYXBwZWQgaW50byB0aGUgY29yZSBmaWxl IHdhcyBhIHNoYXJlZCBsaWJyYXJ5Ci0rICAgICB0aGVuIGl0IG1pZ2h0IGhhdmUgYSBEVF9TT05B TUUgdGFnIGluIGl0cyAuZHluYW1pYyBzZWN0aW9uLCB0aGlzIHRhZwotKyAgICAgY29udGFpbnMg dGhlIG5hbWUgb2YgYSBzaGFyZWQgb2JqZWN0LiAgV2hlbiBvcGVuaW5nIGEgc2hhcmVkIGxpYnJh cnksCi0rICAgICBpZiBpdCdzIGJhc2VuYW1lIGFwcGVhcnMgaW4gdGhpcyBtYXAgdGhlbiB3ZSBj YW4gdXNlIHRoZSBjb3JyZXNwb25kaW5nCi0rICAgICBidWlsZC1pZC4KLSsKLSsgICAgIEluIHRo ZSByYXJlIGNhc2UgdGhhdCB0d28gZGlmZmVyZW50IGZpbGVzIGhhdmUgdGhlIHNhbWUgRFRfU09O QU1FCi0rICAgICB2YWx1ZSB0aGVuIHRoZSBidWlsZC1pZCBwb2ludGVyIGluIHRoaXMgbWFwIHdp bGwgYmUgbnVsbHB0ciwgdGhpcwotKyAgICAgaW5kaWNhdGVzIHRoYXQgaXQncyBub3QgcG9zc2li bGUgdG8gZmluZCBhIGJ1aWxkLWlkIGJhc2VkIG9uIHRoZSBnaXZlbgotKyAgICAgRFRfU09OQU1F IHZhbHVlLiAgKi8KLSsKLSsgIHN0cmluZ190b19idWlsZF9pZF9tYXAgbV9zb25hbWVfdG9fYnVp bGRfaWRfbWFwOwotKwotKyAgLyogVGhpcyB2ZWN0b3IgbWFwcyBtZW1vcnkgcmFuZ2VzIG9udG8g YW4gYXNzb2NpYXRlZCBidWlsZC1pZC4gIFRoZQotKyAgICAgcmFuZ2VzIGFyZSB0aG9zZSBvZiB0 aGUgZmlsZXMgbWFwcGVkIGludG8gdGhlIGNvcmUgZmlsZS4KLSsKLSsgICAgIEVudHJpZXMgaW4g dGhpcyB2ZWN0b3IgbXVzdCBub3Qgb3ZlcmxhcCwgYW5kIGFyZSBzb3J0ZWQgYmUgaW5jcmVhc2lu ZwotKyAgICAgbWVtb3J5IGFkZHJlc3MuICBXaXRoaW4gZWFjaCBlbnRyeSB0aGUgYnVpbGQtaWQg cG9pbnRlciB3aWxsIG5vdCBiZQotKyAgICAgbnVsbHB0ci4KLSsKLSsgICAgIFdoaWxlIGJ1aWxk aW5nIHRoaXMgdmVjdG9yIHRoZSBlbnRyaWVzIGFyZSBub3Qgc29ydGVkLCB0aGV5IGFyZQotKyAg ICAgc29ydGVkIG9uY2UgYWZ0ZXIgdGhlIHRhYmxlIGhhcyBmaW5pc2hlZCBiZWluZyBidWlsdC4g ICovCi0rCi0rICBzdGQ6OnZlY3RvcjxtZW1fcmFuZ2VfYW5kX2J1aWxkX2lkPiBtX2FkZHJlc3Nf dG9fYnVpbGRfaWRfbGlzdDsKLSsKLSsgIC8qIEZhbHNlIGlmIGFkZHJlc3NfdG9fYnVpbGRfaWRf bGlzdCBpcyB1bnNvcnRlZCwgb3RoZXJ3aXNlIHRydWUuICAqLwotKwotKyAgYm9vbCBtX2FkZHJl c3NfdG9fYnVpbGRfaWRfbGlzdF9zb3J0ZWQgPSBmYWxzZTsKLSt9OwotKwotIC8qIFRoZSBjb3Jl IGZpbGUgdGFyZ2V0LiAgKi8KLSAKLSBzdGF0aWMgY29uc3QgdGFyZ2V0X2luZm8gY29yZV90YXJn ZXRfaW5mbyA9IHsKLUBAIC0xMzQsNiArMjQ3LDM0IEBAIGNsYXNzIGNvcmVfdGFyZ2V0IGZpbmFs IDogcHVibGljIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQKLSAgIC8qIFNlZSBkZWZpbml0aW9uLiAg Ki8KLSAgIHZvaWQgaW5mb19wcm9jX21hcHBpbmdzIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCk7 Ci0gCi0rICBzdGQ6Om9wdGlvbmFsIDxjb3JlX3RhcmdldF9tYXBwZWRfZmlsZV9pbmZvPgotKyAg bG9va3VwX21hcHBlZF9maWxlX2luZm8gKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotKwkJCSAgIGNv bnN0IHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPiAmYWRkcikKLSsgIHsKLSsgICAgcmV0dXJuIG1f bWFwcGVkX2ZpbGVfaW5mby5sb29rdXAgKGZpbGVuYW1lLCBhZGRyKTsKLSsgIH0KLSsKLSsgIC8q IFJldHVybiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBleHBlY3RlZCBleGVjdXRhYmxlIGZpbGVu YW1lIG9idGFpbmVkCi0rICAgICBmcm9tIHRoZSBtYXBwZWQgZmlsZSBpbmZvcm1hdGlvbiB3aXRo aW4gdGhlIGNvcmUgZmlsZS4gIFRoZSBmaWxlbmFtZQotKyAgICAgcmV0dXJuZWQgd2lsbCBiZSBm b3IgdGhlIG1hcHBlZCBmaWxlIHdob3NlIEVMRiBoZWFkZXJzIGFyZSBtYXBwZWQgYXQKLSsgICAg IHRoZSBsb3dlc3QgYWRkcmVzcyAoaS5lLiB3aGljaCBHREIgZW5jb3VudGVycyBmaXJzdCkuCi0r Ci0rICAgICBJZiBubyBzdWl0YWJsZSBmaWxlbmFtZSBjYW4gYmUgZm91bmQgdGhlbiB0aGUgcmV0 dXJuZWQgc3RyaW5nIHdpbGwgYmUKLSsgICAgIGVtcHR5LgotKwotKyAgICAgSWYgdGhlcmUgYXJl IG5vIGJ1aWxkLWlkcyBlbWJlZGRlZCBpbnRvIHRoZSBjb3JlIGZpbGUgdGhlbiB0aGUKLSsgICAg IHJldHVybmVkIHN0cmluZyB3aWxsIGJlIGVtcHR5LgotKwotKyAgICAgSWYgYSBub24tZW1wdHkg c3RyaW5nIGlzIHJldHVybmVkIHRoZW4gdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlCi0r ICAgICBuYW1lZCBmaWxlIGV4aXN0cyBvbiBkaXNrLCBvciBpZiBpdCBkb2VzIGV4aXN0IG9uIGRp c2ssIHRoZW4gdGhlCi0rICAgICBvbi1kaXNrIGZpbGUgbWlnaHQgaGF2ZSBhIGRpZmZlcmVudCBi dWlsZC1pZCB0byB0aGUgZGVzaXJlZAotKyAgICAgYnVpbGQtaWQuICAqLwotKyAgY29uc3Qgc3Rk OjpzdHJpbmcgJgotKyAgZXhwZWN0ZWRfZXhlY19maWxlbmFtZSAoKSBjb25zdAotKyAgewotKyAg ICByZXR1cm4gbV9leHBlY3RlZF9leGVjX2ZpbGVuYW1lOwotKyAgfQotKwotIHByaXZhdGU6IC8q IHBlci1jb3JlIGRhdGEgKi8KLSAKLSAgIC8qIEdldCByaWQgb2YgdGhlIGNvcmUgaW5mZXJpb3Iu ICAqLwotQEAgLTE1NiwxOSArMjk3LDIzIEBAIGNsYXNzIGNvcmVfdGFyZ2V0IGZpbmFsIDogcHVi bGljIHByb2Nlc3Nfc3RyYXR1bV90YXJnZXQKLSAgICAgIHN0aWxsIGJlIHVzZWZ1bC4gICovCi0g ICBzdGQ6OnZlY3RvcjxtZW1fcmFuZ2U+IG1fY29yZV91bmF2YWlsYWJsZV9tYXBwaW5nczsKLSAK LS0gIC8qIEJ1aWxkIG1fY29yZV9maWxlX21hcHBpbmdzLiAgQ2FsbGVkIGZyb20gdGhlIGNvbnN0 cnVjdG9yLiAgKi8KLS0gIHZvaWQgYnVpbGRfZmlsZV9tYXBwaW5ncyAoKTsKLSsgIC8qIERhdGEg c3RydWN0dXJlIHRoYXQgaG9sZHMgaW5mb3JtYXRpb24gbWFwcGluZyBmaWxlbmFtZXMgYW5kIGFk ZHJlc3MKLSsgICAgIHJhbmdlcyB0byB0aGUgY29ycmVzcG9uZGluZyBidWlsZC1pZHMgYXMgd2Vs bCBhcyB0aGUgcmV2ZXJzZSBidWlsZC1pZAotKyAgICAgdG8gZmlsZW5hbWUgbWFwcGluZy4gICov Ci0rICBtYXBwZWRfZmlsZV9pbmZvIG1fbWFwcGVkX2ZpbGVfaW5mbzsKLSAKLS0gIC8qIEhlbHBl ciBtZXRob2QgZm9yIHhmZXJfcGFydGlhbC4gICovCi0tICBlbnVtIHRhcmdldF94ZmVyX3N0YXR1 cyB4ZmVyX21lbW9yeV92aWFfbWFwcGluZ3MgKGdkYl9ieXRlICpyZWFkYnVmLAotLQkJCQkJCSAg ICBjb25zdCBnZGJfYnl0ZSAqd3JpdGVidWYsCi0tCQkJCQkJICAgIFVMT05HRVNUIG9mZnNldCwK LS0JCQkJCQkgICAgVUxPTkdFU1QgbGVuLAotLQkJCQkJCSAgICBVTE9OR0VTVCAqeGZlcmVkX2xl bik7Ci0rICAvKiBCdWlsZCBtX2NvcmVfZmlsZV9tYXBwaW5ncyBhbmQgbV9tYXBwZWRfZmlsZV9p bmZvLiAgQ2FsbGVkIGZyb20gdGhlCi0rICAgICBjb25zdHJ1Y3Rvci4gICovCi0rICB2b2lkIGJ1 aWxkX2ZpbGVfbWFwcGluZ3MgKCk7Ci0gCi0gICAvKiBGSVhNRToga2V0dGVuaXMvMjAwMzEwMjM6 IEV2ZW50dWFsbHkgdGhpcyBmaWVsZCBzaG91bGQKLSAgICAgIGRpc2FwcGVhci4gICovCi0gICBz dHJ1Y3QgZ2RiYXJjaCAqbV9jb3JlX2dkYmFyY2ggPSBOVUxMOwotKwotKyAgLyogSWYgbm90IGVt cHR5IHRoZW4gdGhpcyBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZXhlY3V0YWJsZSBkaXNjb3Zl cmVkCi0rICAgICB3aGVuIHByb2Nlc3NpbmcgdGhlIG1lbW9yeS1tYXBwZWQgZmlsZSBpbmZvcm1h dGlvbi4gIFRoaXMgd2lsbCBvbmx5Ci0rICAgICBiZSBzZXQgaWYgd2UgZmluZCBhIG1hcHBlZCB3 aXRoIGEgc3VpdGFibGUgYnVpbGQtaWQuICAqLwotKyAgc3RkOjpzdHJpbmcgbV9leHBlY3RlZF9l eGVjX2ZpbGVuYW1lOwotIH07Ci0gCi0gY29yZV90YXJnZXQ6OmNvcmVfdGFyZ2V0ICgpCi1AQCAt MjE2LDkgKzM2MSw1MSBAQCBjb3JlX3RhcmdldDo6Y29yZV90YXJnZXQgKCkKLSB2b2lkCi0gY29y ZV90YXJnZXQ6OmJ1aWxkX2ZpbGVfbWFwcGluZ3MgKCkKLSB7Ci0rICAvKiBUeXBlIGhvbGRpbmcg aW5mb3JtYXRpb24gYWJvdXQgYSBzaW5nbGUgZmlsZSBtYXBwZWQgaW50byB0aGUgaW5mZXJpb3IK LSsgICAgIGF0IHRoZSBwb2ludCB3aGVuIHRoZSBjb3JlIGZpbGUgd2FzIGNyZWF0ZWQuICBBc3Nv Y2lhdGVzIGEgYnVpbGQtaWQKLSsgICAgIHdpdGggdGhlIGxpc3Qgb2YgcmVnaW9ucyB0aGUgZmls ZSBpcyBtYXBwZWQgaW50by4gICovCi0rICBzdHJ1Y3QgbWFwcGVkX2ZpbGUKLSsgIHsKLSsgICAg LyogVHlwZSBmb3IgYSByZWdpb24gb2YgYSBmaWxlIHRoYXQgd2FzIG1hcHBlZCBpbnRvIHRoZSBp bmZlcmlvciB3aGVuCi0rICAgICAgIHRoZSBjb3JlIGZpbGUgd2FzIGdlbmVyYXRlZC4gICovCi0r ICAgIHN0cnVjdCByZWdpb24KLSsgICAgewotKyAgICAgIC8qIENvbnN0cnVjdG9yLiAgIFNlZSBt ZW1iZXIgdmFyaWFibGVzIGZvciBhcmd1bWVudCBkZXNjcmlwdGlvbnMuICAqLwotKyAgICAgIHJl Z2lvbiAoQ09SRV9BRERSIHN0YXJ0XywgQ09SRV9BRERSIGVuZF8sIENPUkVfQUREUiBmaWxlX29m c18pCi0rCTogc3RhcnQgKHN0YXJ0XyksCi0rCSAgZW5kIChlbmRfKSwKLSsJICBmaWxlX29mcyAo ZmlsZV9vZnNfKQotKyAgICAgIHsgLyogTm90aGluZy4gICovIH0KLSsKLSsgICAgICAvKiBUaGUg aW5mZXJpb3IgYWRkcmVzcyBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBtYXBwZWQgcmVnaW9uLiAgKi8K LSsgICAgICBDT1JFX0FERFIgc3RhcnQ7Ci0rCi0rICAgICAgLyogVGhlIGluZmVyaW9yIGFkZHJl c3MgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1hcHBlZCByZWdpb24uICAqLwotKyAgICAgIENPUkVf QUREUiBlbmQ7Ci0rCi0rICAgICAgLyogVGhlIG9mZnNldCB3aXRoaW4gdGhlIG1hcHBlZCBmaWxl IGZvciB0aGlzIGNvbnRlbnQuICAqLwotKyAgICAgIENPUkVfQUREUiBmaWxlX29mczsKLSsgICAg fTsKLSsKLSsgICAgLyogSWYgbm90IG51bGxwdHIsIHRoZW4gdGhpcyBpcyB0aGUgYnVpbGQtaWQg YXNzb2NpYXRlZCB3aXRoIHRoaXMKLSsgICAgICAgZmlsZS4gICovCi0rICAgIGNvbnN0IGJmZF9i dWlsZF9pZCAqYnVpbGRfaWQgPSBudWxscHRyOwotKwotKyAgICAvKiBJZiB0cnVlIHRoZW4gd2Ug aGF2ZSBzZWVuIG11bHRpcGxlIGRpZmZlcmVudCBidWlsZC1pZHMgYXNzb2NpYXRlZAotKyAgICAg ICB3aXRoIHRoZSBzYW1lIGZpbGVuYW1lLiAgVGhlIGJ1aWxkX2lkIGZpZWxkIHdpbGwgaGF2ZSBi ZWVuIHNldCBiYWNrCi0rICAgICAgIHRvIG51bGxwdHIsIGFuZCB3ZSBzaG91bGQgbm90IHNldCBi dWlsZF9pZCBpbiBmdXR1cmUuICAqLwotKyAgICBib29sIGlnbm9yZV9idWlsZF9pZF9wID0gZmFs c2U7Ci0rCi0rICAgIC8qIEFsbCB0aGUgbWFwcGVkIHJlZ2lvbnMgb2YgdGhpcyBmaWxlLiAgKi8K LSsgICAgc3RkOjp2ZWN0b3I8cmVnaW9uPiByZWdpb25zOwotKyAgfTsKLSsKLSAgIHN0ZDo6dW5v cmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RydWN0IGJmZCAqPiBiZmRfbWFwOwotICAgc3RkOjp1 bm9yZGVyZWRfc2V0PHN0ZDo6c3RyaW5nPiB1bmF2YWlsYWJsZV9wYXRoczsKLSAKLSsgIC8qIEFs bCBmaWxlcyBtYXBwZWQgaW50byB0aGUgY29yZSBmaWxlLiAgVGhlIGtleSBpcyB0aGUgZmlsZW5h bWUuICAqLwotKyAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBtYXBwZWRfZmlsZT4g bWFwcGVkX2ZpbGVzOwotKwotICAgLyogU2VlIGxpbnV4X3JlYWRfY29yZV9maWxlX21hcHBpbmdz KCkgaW4gbGludXgtdGRlcC5jIGZvciBhbiBleGFtcGxlCi0gICAgICByZWFkX2NvcmVfZmlsZV9t YXBwaW5ncyBtZXRob2QuICAqLwotICAgZ2RiYXJjaF9yZWFkX2NvcmVfZmlsZV9tYXBwaW5ncyAo bV9jb3JlX2dkYmFyY2gsCi1AQCAtMjM5LDg3ICs0MjYsMjA2IEBAIGNvcmVfdGFyZ2V0OjpidWls ZF9maWxlX21hcHBpbmdzICgpCi0gCSAgIHdlZWQgb3V0IG5vbi1maWxlLWJhY2tlZCBtYXBwaW5n cy4gICovCi0gCWdkYl9hc3NlcnQgKGZpbGVuYW1lICE9IG51bGxwdHIpOwotIAotLQlpZiAodW5h dmFpbGFibGVfcGF0aHMuZmluZCAoZmlsZW5hbWUpICE9IHVuYXZhaWxhYmxlX3BhdGhzLmVuZCAo KSkKLS0JICB7Ci0tCSAgICAvKiBXZSBoYXZlIGFscmVhZHkgc2VlbiBzb21lIG1hcHBpbmcgZm9y IEZJTEVOQU1FIGJ1dCBmYWlsZWQgdG8KLS0JICAgICAgIGZpbmQvb3BlbiB0aGUgZmlsZS4gIFRo ZXJlIGlzIG5vIHBvaW50IGluIHRyeWluZyB0aGUgc2FtZQotLQkgICAgICAgdGhpbmcgYWdhaW4g c28ganVzdCByZWNvcmQgdGhhdCB0aGUgcmFuZ2UgW3N0YXJ0LCBlbmQpIGlzCi0tCSAgICAgICB1 bmF2YWlsYWJsZS4gICovCi0tCSAgICBtX2NvcmVfdW5hdmFpbGFibGVfbWFwcGluZ3MuZW1wbGFj ZV9iYWNrIChzdGFydCwgZW5kIC0gc3RhcnQpOwotLQkgICAgcmV0dXJuOwotLQkgIH0KLS0KLS0J c3RydWN0IGJmZCAqYmZkID0gYmZkX21hcFtmaWxlbmFtZV07Ci0tCWlmIChiZmQgPT0gbnVsbHB0 cikKLSsJLyogQWRkIHRoaXMgbWFwcGVkIHJlZ2lvbiB0byB0aGUgZGF0YSBmb3IgRklMRU5BTUUu ICAqLwotKwltYXBwZWRfZmlsZSAmZmlsZV9kYXRhID0gbWFwcGVkX2ZpbGVzW2ZpbGVuYW1lXTsK LSsJZmlsZV9kYXRhLnJlZ2lvbnMuZW1wbGFjZV9iYWNrIChzdGFydCwgZW5kLCBmaWxlX29mcyk7 Ci0rCWlmIChidWlsZF9pZCAhPSBudWxscHRyICYmICFmaWxlX2RhdGEuaWdub3JlX2J1aWxkX2lk X3ApCi0gCSAgewotLQkgICAgLyogVXNlIGV4ZWNfZmlsZV9maW5kKCkgdG8gZG8gc3lzcm9vdCBl eHBhbnNpb24uICBJdCdsbAotLQkgICAgICAgYWxzbyBzdHJpcCB0aGUgcG90ZW50aWFsIHN5c3Jv b3QgInRhcmdldDoiIHByZWZpeC4gIElmCi0tCSAgICAgICB0aGVyZSBpcyBubyBzeXNyb290LCBh biBlcXVpdmFsZW50IChwb3NzaWJseSBtb3JlCi0tCSAgICAgICBjYW5vbmljYWwpIHBhdGhuYW1l IHdpbGwgYmUgcHJvdmlkZWQuICAqLwotLQkgICAgZ2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8Y2hh cj4gZXhwYW5kZWRfZm5hbWUKLS0JICAgICAgPSBleGVjX2ZpbGVfZmluZCAoZmlsZW5hbWUsIE5V TEwpOwotLQotLQkgICAgaWYgKGV4cGFuZGVkX2ZuYW1lID09IG51bGxwdHIgJiYgYnVpbGRfaWQg IT0gbnVsbHB0cikKLS0JICAgICAgZGVidWdpbmZvZF9leGVjX3F1ZXJ5IChidWlsZF9pZC0+ZGF0 YSwgYnVpbGRfaWQtPnNpemUsCi0tCQkJCSAgICAgZmlsZW5hbWUsICZleHBhbmRlZF9mbmFtZSk7 Ci0tCi0tCSAgICBpZiAoZXhwYW5kZWRfZm5hbWUgPT0gbnVsbHB0cikKLSsJICAgIGlmIChmaWxl X2RhdGEuYnVpbGRfaWQgPT0gbnVsbHB0cikKLSsJICAgICAgZmlsZV9kYXRhLmJ1aWxkX2lkID0g YnVpbGRfaWQ7Ci0rCSAgICBlbHNlIGlmICghYnVpbGRfaWRfZXF1YWwgKGJ1aWxkX2lkLCBmaWxl X2RhdGEuYnVpbGRfaWQpKQotIAkgICAgICB7Ci0tCQltX2NvcmVfdW5hdmFpbGFibGVfbWFwcGlu Z3MuZW1wbGFjZV9iYWNrIChzdGFydCwgZW5kIC0gc3RhcnQpOwotLQkJdW5hdmFpbGFibGVfcGF0 aHMuaW5zZXJ0IChmaWxlbmFtZSk7Ci0tCQl3YXJuaW5nIChfKCJDYW4ndCBvcGVuIGZpbGUgJXMg ZHVyaW5nIGZpbGUtYmFja2VkIG1hcHBpbmcgIgotLQkJCSAgICJub3RlIHByb2Nlc3NpbmciKSwK LS0JCQkgZmlsZW5hbWUpOwotLQkJcmV0dXJuOwotKwkJd2FybmluZyAoXygiTXVsdGlwbGUgYnVp bGQtaWRzIGZvdW5kIGZvciAlcHMiKSwKLSsJCQkgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0 eWxlLnN0eWxlICgpLCBmaWxlbmFtZSkpOwotKwkJZmlsZV9kYXRhLmJ1aWxkX2lkID0gbnVsbHB0 cjsKLSsJCWZpbGVfZGF0YS5pZ25vcmVfYnVpbGRfaWRfcCA9IHRydWU7Ci0gCSAgICAgIH0KLSsJ ICB9Ci0rICAgICAgfSk7Ci0gCi0tCSAgICBiZmQgPSBiZmRfb3BlbnIgKGV4cGFuZGVkX2ZuYW1l LmdldCAoKSwgImJpbmFyeSIpOwotKyAgLyogR2V0IHRoZSBidWlsZC1pZCBvZiB0aGUgY29yZSBm aWxlLiAgKi8KLSsgIGNvbnN0IGJmZF9idWlsZF9pZCAqY29yZV9idWlsZF9pZAotKyAgICA9IGJ1 aWxkX2lkX2JmZF9nZXQgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+Y29yZV9iZmQgKCkpOwotIAot LQkgICAgaWYgKGJmZCA9PSBudWxscHRyIHx8ICFiZmRfY2hlY2tfZm9ybWF0IChiZmQsIGJmZF9v YmplY3QpKQotLQkgICAgICB7Ci0tCQltX2NvcmVfdW5hdmFpbGFibGVfbWFwcGluZ3MuZW1wbGFj ZV9iYWNrIChzdGFydCwgZW5kIC0gc3RhcnQpOwotLQkJdW5hdmFpbGFibGVfcGF0aHMuaW5zZXJ0 IChmaWxlbmFtZSk7Ci0tCQl3YXJuaW5nIChfKCJDYW4ndCBvcGVuIGZpbGUgJXMgd2hpY2ggd2Fz IGV4cGFuZGVkIHRvICVzICIKLSsgIGZvciAoY29uc3QgYXV0byAmaXRlciA6IG1hcHBlZF9maWxl cykKLSsgICAgewotKyAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZmaWxlbmFtZSA9IGl0ZXIuZmly c3Q7Ci0rICAgICAgY29uc3QgbWFwcGVkX2ZpbGUgJmZpbGVfZGF0YSA9IGl0ZXIuc2Vjb25kOwot KwotKyAgICAgIC8qIElmIHRoaXMgbWFwcGVkIGZpbGUgaGFzIHRoZSBzYW1lIGJ1aWxkLWlkIGFz IHdhcyBkaXNjb3ZlcmVkIGZvcgotKwkgdGhlIGNvcmUtZmlsZSBpdHNlbGYsIHRoZW4gd2UgYXNz dW1lIHRoaXMgaXMgdGhlIG1haW4KLSsJIGV4ZWN1dGFibGUuICBSZWNvcmQgdGhlIGZpbGVuYW1l IGFzIHdlIGNhbiB1c2UgdGhpcyBsYXRlci4gICovCi0rICAgICAgaWYgKGZpbGVfZGF0YS5idWls ZF9pZCAhPSBudWxscHRyCi0rCSAgJiYgbV9leHBlY3RlZF9leGVjX2ZpbGVuYW1lLmVtcHR5ICgp Ci0rCSAgJiYgYnVpbGRfaWRfZXF1YWwgKGZpbGVfZGF0YS5idWlsZF9pZCwgY29yZV9idWlsZF9p ZCkpCi0rCW1fZXhwZWN0ZWRfZXhlY19maWxlbmFtZSA9IGZpbGVuYW1lOwotKwotKyAgICAgIC8q IFVzZSBleGVjX2ZpbGVfZmluZCgpIHRvIGRvIHN5c3Jvb3QgZXhwYW5zaW9uLiAgSXQnbGwKLSsJ IGFsc28gc3RyaXAgdGhlIHBvdGVudGlhbCBzeXNyb290ICJ0YXJnZXQ6IiBwcmVmaXguICBJZgot KwkgdGhlcmUgaXMgbm8gc3lzcm9vdCwgYW4gZXF1aXZhbGVudCAocG9zc2libHkgbW9yZQotKwkg Y2Fub25pY2FsKSBwYXRobmFtZSB3aWxsIGJlIHByb3ZpZGVkLiAgKi8KLSsgICAgICBnZGI6OnVu aXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBleHBhbmRlZF9mbmFtZQotKwk9IGV4ZWNfZmlsZV9maW5k IChmaWxlbmFtZS5jX3N0ciAoKSwgbnVsbHB0cik7Ci0rCi0rICAgICAgYm9vbCBidWlsZF9pZF9t aXNtYXRjaCA9IGZhbHNlOwotKyAgICAgIGlmIChleHBhbmRlZF9mbmFtZSAhPSBudWxscHRyICYm IGZpbGVfZGF0YS5idWlsZF9pZCAhPSBudWxscHRyKQotKwl7Ci0rCSAgLyogV2UgdGVtcG9yYXJp bHkgb3BlbiB0aGUgYmZkIGFzIGEgc3RydWN0dXJlZCB0YXJnZXQsIHRoaXMKLSsJICAgICBhbGxv d3MgdXMgdG8gcmVhZCB0aGUgYnVpbGQtaWQgZnJvbSB0aGUgYmZkIGlmIHRoZXJlIGlzIG9uZS4K LSsJICAgICBGb3IgdGhpcyB0YXNrIGl0J3MgT0sgaWYgd2UgcmV1c2UgYW4gYWxyZWFkeSBvcGVu IGJmZCBvYmplY3QsCi0rCSAgICAgc28gd2UgbWFrZSB0aGlzIGNhbGwgdGhyb3VnaCBHREIncyBi ZmQgY2FjaGUuICBPbmNlIHdlJ3ZlCi0rCSAgICAgY2hlY2tlZCB0aGUgYnVpbGQtaWQgKGlmIHRo ZXJlIGlzIG9uZSkgd2UnbGwgZHJvcCB0aGlzCi0rCSAgICAgcmVmZXJlbmNlIGFuZCByZS1vcGVu IHRoZSBiZmQgdXNpbmcgdGhlICJiaW5hcnkiIHRhcmdldC4gICovCi0rCSAgZ2RiX2JmZF9yZWZf cHRyIHRtcF9iZmQKLSsJICAgID0gZ2RiX2JmZF9vcGVuIChleHBhbmRlZF9mbmFtZS5nZXQgKCks IGdudXRhcmdldCk7Ci0rCi0rCSAgaWYgKHRtcF9iZmQgIT0gbnVsbHB0cgotKwkgICAgICAmJiBi ZmRfY2hlY2tfZm9ybWF0ICh0bXBfYmZkLmdldCAoKSwgYmZkX29iamVjdCkKLSsJICAgICAgJiYg YnVpbGRfaWRfYmZkX2dldCAodG1wX2JmZC5nZXQgKCkpICE9IG51bGxwdHIpCi0rCSAgICB7Ci0r CSAgICAgIC8qIFRoZSBuZXdseSBvcGVuZWQgVE1QX0JGRCBoYXMgYSBidWlsZC1pZCwgYW5kIHRo aXMgbWFwcGVkCi0rCQkgZmlsZSBoYXMgYSBidWlsZC1pZCBleHRyYWN0ZWQgZnJvbSB0aGUgY29y ZS1maWxlLiAgQ2hlY2sKLSsJCSB0aGUgYnVpbGQtaWQncyBtYXRjaCwgYW5kIGlmIG5vdCwgcmVq ZWN0IFRNUF9CRkQuICAqLwotKwkgICAgICBjb25zdCBzdHJ1Y3QgYmZkX2J1aWxkX2lkICpmb3Vu ZAotKwkJPSBidWlsZF9pZF9iZmRfZ2V0ICh0bXBfYmZkLmdldCAoKSk7Ci0rCSAgICAgIGlmICgh YnVpbGRfaWRfZXF1YWwgKGZvdW5kLCBmaWxlX2RhdGEuYnVpbGRfaWQpKQotKwkJYnVpbGRfaWRf bWlzbWF0Y2ggPSB0cnVlOwotKwkgICAgfQotKwl9Ci0rCi0rICAgICAgZ2RiX2JmZF9yZWZfcHRy IGFiZmQ7Ci0rICAgICAgaWYgKGV4cGFuZGVkX2ZuYW1lICE9IG51bGxwdHIgJiYgIWJ1aWxkX2lk X21pc21hdGNoKQotKwl7Ci0rCSAgc3RydWN0IGJmZCAqYiA9IGJmZF9vcGVuciAoZXhwYW5kZWRf Zm5hbWUuZ2V0ICgpLCAiYmluYXJ5Iik7Ci0rCSAgYWJmZCA9IGdkYl9iZmRfcmVmX3B0cjo6bmV3 X3JlZmVyZW5jZSAoYik7Ci0rCX0KLSsKLSsgICAgICBpZiAoKGV4cGFuZGVkX2ZuYW1lID09IG51 bGxwdHIKLSsJICAgfHwgYWJmZCA9PSBudWxscHRyCi0rCSAgIHx8ICFiZmRfY2hlY2tfZm9ybWF0 IChhYmZkLmdldCAoKSwgYmZkX29iamVjdCkpCi0rCSAgJiYgZmlsZV9kYXRhLmJ1aWxkX2lkICE9 IG51bGxwdHIpCi0rCXsKLSsJICBhYmZkID0gZmluZF9vYmpmaWxlX2J5X2J1aWxkX2lkIChjdXJy ZW50X3Byb2dyYW1fc3BhY2UsCi0rCQkJCQkgICBmaWxlX2RhdGEuYnVpbGRfaWQsCi0rCQkJCQkg ICBmaWxlbmFtZS5jX3N0ciAoKSk7Ci0rCi0rCSAgaWYgKGFiZmQgIT0gbnVsbHB0cikKLSsJICAg IHsKLSsJICAgICAgLyogVGhlIGZpbmRfb2JqZmlsZV9ieV9idWlsZF9pZCB3aWxsIGhhdmUgb3Bl bmVkIEFCRkQgdXNpbmcKLSsJCSB0aGUgR05VVEFSR0VUIGdsb2JhbCBiZmQgdHlwZSwgaG93ZXZl ciwgd2UgbmVlZCB0aGUgYmZkCi0rCQkgb3BlbmVkIGFzIHRoZSBiaW5hcnkgdHlwZSAoc2VlIHRo ZSBmdW5jdGlvbidzIGhlYWRlcgotKwkJIGNvbW1lbnQpLCBzbyBub3cgd2UgcmVvcGVuIEFCRkQg d2l0aCB0aGUgZGVzaXJlZCBiaW5hcnkKLSsJCSB0eXBlLiAgKi8KLSsJICAgICAgZXhwYW5kZWRf Zm5hbWUKLSsJCT0gbWFrZV91bmlxdWVfeHN0cmR1cCAoYmZkX2dldF9maWxlbmFtZSAoYWJmZC5n ZXQgKCkpKTsKLSsJICAgICAgc3RydWN0IGJmZCAqYiA9IGJmZF9vcGVuciAoZXhwYW5kZWRfZm5h bWUuZ2V0ICgpLCAiYmluYXJ5Iik7Ci0rCSAgICAgIGdkYl9hc3NlcnQgKGIgIT0gbnVsbHB0cik7 Ci0rCSAgICAgIGFiZmQgPSBnZGJfYmZkX3JlZl9wdHI6Om5ld19yZWZlcmVuY2UgKGIpOwotKwkg ICAgfQotKwl9Ci0rCi0rICAgICAgc3RkOjp2ZWN0b3I8bWVtX3JhbmdlPiByYW5nZXM7Ci0rICAg ICAgZm9yIChjb25zdCBtYXBwZWRfZmlsZTo6cmVnaW9uICZyZWdpb24gOiBmaWxlX2RhdGEucmVn aW9ucykKLSsJcmFuZ2VzLmVtcGxhY2VfYmFjayAocmVnaW9uLnN0YXJ0LCByZWdpb24uZW5kIC0g cmVnaW9uLnN0YXJ0KTsKLSsKLSsgICAgICBpZiAoZXhwYW5kZWRfZm5hbWUgPT0gbnVsbHB0cgot KwkgIHx8IGFiZmQgPT0gbnVsbHB0cgotKwkgIHx8ICFiZmRfY2hlY2tfZm9ybWF0IChhYmZkLmdl dCAoKSwgYmZkX29iamVjdCkpCi0rCXsKLSsJICAvKiBJZiBBQkZEIHdhcyBvcGVuZWQsIGJ1dCB0 aGUgd3JvbmcgZm9ybWF0LCBjbG9zZSBpdCBub3cuICAqLwotKwkgIGFiZmQgPSBudWxscHRyOwot KwotKwkgIC8qIFJlY29yZCBhbGwgcmVnaW9ucyBmb3IgdGhpcyBmaWxlIGFzIHVuYXZhaWxhYmxl LiAgKi8KLSsJICBmb3IgKGNvbnN0IG1hcHBlZF9maWxlOjpyZWdpb24gJnJlZ2lvbiA6IGZpbGVf ZGF0YS5yZWdpb25zKQotKwkgICAgbV9jb3JlX3VuYXZhaWxhYmxlX21hcHBpbmdzLmVtcGxhY2Vf YmFjayAocmVnaW9uLnN0YXJ0LAotKwkJCQkJCSAgICAgIHJlZ2lvbi5lbmQKLSsJCQkJCQkgICAg ICAtIHJlZ2lvbi5zdGFydCk7Ci0rCi0rCSAgLyogQW5kIGdpdmUgdGhlIHVzZXIgYW4gYXBwcm9w cmlhdGUgd2FybmluZy4gICovCi0rCSAgaWYgKGJ1aWxkX2lkX21pc21hdGNoKQotKwkgICAgewot KwkgICAgICBpZiAoZXhwYW5kZWRfZm5hbWUgPT0gbnVsbHB0cgotKwkJICB8fCBmaWxlbmFtZSA9 PSBleHBhbmRlZF9mbmFtZS5nZXQgKCkpCi0rCQl3YXJuaW5nIChfKCJGaWxlICVwcyBkb2Vzbid0 IG1hdGNoIGJ1aWxkLWlkIGZyb20gY29yZS1maWxlICIKLSsJCQkgICAiZHVyaW5nIGZpbGUtYmFj a2VkIG1hcHBpbmcgcHJvY2Vzc2luZyIpLAotKwkJCSBzdHlsZWRfc3RyaW5nIChmaWxlX25hbWVf c3R5bGUuc3R5bGUgKCksCi0rCQkJCQlmaWxlbmFtZS5jX3N0ciAoKSkpOwotKwkgICAgICBlbHNl Ci0rCQl3YXJuaW5nIChfKCJGaWxlICVwcyB3aGljaCB3YXMgZXhwYW5kZWQgdG8gJXBzLCBkb2Vz bid0IG1hdGNoICIKLSsJCQkgICAiYnVpbGQtaWQgZnJvbSBjb3JlLWZpbGUgZHVyaW5nIGZpbGUt YmFja2VkICIKLSsJCQkgICAibWFwcGluZyBwcm9jZXNzaW5nIiksCi0rCQkJIHN0eWxlZF9zdHJp bmcgKGZpbGVfbmFtZV9zdHlsZS5zdHlsZSAoKSwKLSsJCQkJCWZpbGVuYW1lLmNfc3RyICgpKSwK LSsJCQkgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLAotKwkJCQkJZXhw YW5kZWRfZm5hbWUuZ2V0ICgpKSk7Ci0rCSAgICB9Ci0rCSAgZWxzZQotKwkgICAgewotKwkgICAg ICBpZiAoZXhwYW5kZWRfZm5hbWUgPT0gbnVsbHB0cgotKwkJICB8fCBmaWxlbmFtZSA9PSBleHBh bmRlZF9mbmFtZS5nZXQgKCkpCi0rCQl3YXJuaW5nIChfKCJDYW4ndCBvcGVuIGZpbGUgJXBzIGR1 cmluZyBmaWxlLWJhY2tlZCBtYXBwaW5nICIKLSsJCQkgICAibm90ZSBwcm9jZXNzaW5nIiksCi0r CQkJIHN0eWxlZF9zdHJpbmcgKGZpbGVfbmFtZV9zdHlsZS5zdHlsZSAoKSwKLSsJCQkJCWZpbGVu YW1lLmNfc3RyICgpKSk7Ci0rCSAgICAgIGVsc2UKLSsJCXdhcm5pbmcgKF8oIkNhbid0IG9wZW4g ZmlsZSAlcHMgd2hpY2ggd2FzIGV4cGFuZGVkIHRvICVwcyAiCi0gCQkJICAgImR1cmluZyBmaWxl LWJhY2tlZCBtYXBwaW5nIG5vdGUgcHJvY2Vzc2luZyIpLAotLQkJCSBmaWxlbmFtZSwgZXhwYW5k ZWRfZm5hbWUuZ2V0ICgpKTsKLSsJCQkgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0 eWxlICgpLAotKwkJCQkJZmlsZW5hbWUuY19zdHIgKCkpLAotKwkJCSBzdHlsZWRfc3RyaW5nIChm aWxlX25hbWVfc3R5bGUuc3R5bGUgKCksCi0rCQkJCQlleHBhbmRlZF9mbmFtZS5nZXQgKCkpKTsK LSsJICAgIH0KLSsJfQotKyAgICAgIGVsc2UKLSsJewotKwkgIC8qIEVuc3VyZSB0aGF0IHRoZSBi ZmQgd2lsbCBiZSBjbG9zZWQgd2hlbiBjb3JlX2JmZCBpcyBjbG9zZWQuCi0rCSAgICAgVGhpcyBj YW4gYmUgY2hlY2tlZCBiZWZvcmUvYWZ0ZXIgYSBjb3JlIGZpbGUgZGV0YWNoIHZpYSAibWFpbnQK LSsJICAgICBpbmZvIGJmZHMiLiAgKi8KLSsJICBnZGJfYmZkX3JlY29yZF9pbmNsdXNpb24gKGN1 cnJlbnRfcHJvZ3JhbV9zcGFjZS0+Y29yZV9iZmQgKCksCi0rCQkJCSAgICBhYmZkLmdldCAoKSk7 Ci0rCi0rCSAgLyogQ3JlYXRlIHNlY3Rpb25zIGZvciBlYWNoIG1hcHBlZCByZWdpb24uICAqLwot KwkgIGZvciAoY29uc3QgbWFwcGVkX2ZpbGU6OnJlZ2lvbiAmcmVnaW9uIDogZmlsZV9kYXRhLnJl Z2lvbnMpCi0rCSAgICB7Ci0rCSAgICAgIC8qIE1ha2UgbmV3IEJGRCBzZWN0aW9uLiAgQWxsIHNl Y3Rpb25zIGhhdmUgdGhlIHNhbWUgbmFtZSwKLSsJCSB3aGljaCBpcyBwZXJtaXR0ZWQgYnkgYmZk X21ha2Vfc2VjdGlvbl9hbnl3YXkoKS4gICovCi0rCSAgICAgIGFzZWN0aW9uICpzZWMgPSBiZmRf bWFrZV9zZWN0aW9uX2FueXdheSAoYWJmZC5nZXQgKCksICJsb2FkIik7Ci0rCSAgICAgIGlmIChz ZWMgPT0gbnVsbHB0cikKLSsJCWVycm9yIChfKCJDYW4ndCBtYWtlIHNlY3Rpb24iKSk7Ci0rCSAg ICAgIHNlYy0+ZmlsZXBvcyA9IHJlZ2lvbi5maWxlX29mczsKLSsJICAgICAgYmZkX3NldF9zZWN0 aW9uX2ZsYWdzIChzZWMsIFNFQ19SRUFET05MWSB8IFNFQ19IQVNfQ09OVEVOVFMpOwotKwkgICAg ICBiZmRfc2V0X3NlY3Rpb25fc2l6ZSAoc2VjLCByZWdpb24uZW5kIC0gcmVnaW9uLnN0YXJ0KTsK LSsJICAgICAgYmZkX3NldF9zZWN0aW9uX3ZtYSAoc2VjLCByZWdpb24uc3RhcnQpOwotKwkgICAg ICBiZmRfc2V0X3NlY3Rpb25fbG1hIChzZWMsIHJlZ2lvbi5zdGFydCk7Ci0rCSAgICAgIGJmZF9z ZXRfc2VjdGlvbl9hbGlnbm1lbnQgKHNlYywgMik7Ci0rCi0rCSAgICAgIC8qIFNldCB0YXJnZXRf c2VjdGlvbiBmaWVsZHMuICAqLwotKwkgICAgICBtX2NvcmVfZmlsZV9tYXBwaW5ncy5lbXBsYWNl X2JhY2sgKHJlZ2lvbi5zdGFydCwgcmVnaW9uLmVuZCwgc2VjKTsKLSsJICAgIH0KLSsJfQotIAot LQkJaWYgKGJmZCAhPSBudWxscHRyKQotLQkJICBiZmRfY2xvc2UgKGJmZCk7Ci0tCQlyZXR1cm47 Ci0tCSAgICAgIH0KLS0JICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBiZmQgd2lsbCBiZSBjbG9zZWQg d2hlbiBjb3JlX2JmZCBpcyBjbG9zZWQuIAotLQkgICAgICAgVGhpcyBjYW4gYmUgY2hlY2tlZCBi ZWZvcmUvYWZ0ZXIgYSBjb3JlIGZpbGUgZGV0YWNoIHZpYQotLQkgICAgICAgIm1haW50IGluZm8g YmZkcyIuICAqLwotLQkgICAgZ2RiX2JmZF9yZWNvcmRfaW5jbHVzaW9uIChjdXJyZW50X3Byb2dy YW1fc3BhY2UtPmNvcmVfYmZkICgpLCBiZmQpOwotLQkgICAgYmZkX21hcFtmaWxlbmFtZV0gPSBi ZmQ7Ci0tCSAgfQotKyAgICAgIC8qIElmIHRoaXMgaXMgYSBiZmQgd2l0aCBhIGJ1aWxkLWlkIHRo ZW4gcmVjb3JkIHRoZSBmaWxlbmFtZSwKLSsJIG9wdGlvbmFsIHNvbmFtZSAoRFRfU09OQU1FIC5k eW5hbWljIGF0dHJpYnV0ZSksIGFuZCB0aGUgcmFuZ2Ugb2YKLSsJIGFkZHJlc3NlcyBhdCB3aGlj aCB0aGlzIGJmZCBpcyBtYXBwZWQuICBUaGlzIGluZm9ybWF0aW9uIGNhbiBiZQotKwkgdXNlZCB0 byBwZXJmb3JtIGJ1aWxkLWlkIGNoZWNraW5nIHdoZW4gbG9hZGluZyB0aGUgc2hhcmVkCi0rCSBs aWJyYXJpZXMuICAqLwotKyAgICAgIGlmIChmaWxlX2RhdGEuYnVpbGRfaWQgIT0gbnVsbHB0cikK LSsJewotKwkgIG5vcm1hbGl6ZV9tZW1fcmFuZ2VzICgmcmFuZ2VzKTsKLSAKLS0JLyogTWFrZSBu ZXcgQkZEIHNlY3Rpb24uICBBbGwgc2VjdGlvbnMgaGF2ZSB0aGUgc2FtZSBuYW1lLAotLQkgICB3 aGljaCBpcyBwZXJtaXR0ZWQgYnkgYmZkX21ha2Vfc2VjdGlvbl9hbnl3YXkoKS4gICovCi0tCWFz ZWN0aW9uICpzZWMgPSBiZmRfbWFrZV9zZWN0aW9uX2FueXdheSAoYmZkLCAibG9hZCIpOwotLQlp ZiAoc2VjID09IG51bGxwdHIpCi0tCSAgZXJyb3IgKF8oIkNhbid0IG1ha2Ugc2VjdGlvbiIpKTsK LS0Jc2VjLT5maWxlcG9zID0gZmlsZV9vZnM7Ci0tCWJmZF9zZXRfc2VjdGlvbl9mbGFncyAoc2Vj LCBTRUNfUkVBRE9OTFkgfCBTRUNfSEFTX0NPTlRFTlRTKTsKLS0JYmZkX3NldF9zZWN0aW9uX3Np emUgKHNlYywgZW5kIC0gc3RhcnQpOwotLQliZmRfc2V0X3NlY3Rpb25fdm1hIChzZWMsIHN0YXJ0 KTsKLS0JYmZkX3NldF9zZWN0aW9uX2xtYSAoc2VjLCBzdGFydCk7Ci0tCWJmZF9zZXRfc2VjdGlv bl9hbGlnbm1lbnQgKHNlYywgMik7Ci0tCi0tCS8qIFNldCB0YXJnZXRfc2VjdGlvbiBmaWVsZHMu ICAqLwotLQltX2NvcmVfZmlsZV9tYXBwaW5ncy5lbXBsYWNlX2JhY2sgKHN0YXJ0LCBlbmQsIHNl Yyk7Ci0tCi0tCS8qIElmIHRoaXMgaXMgYSBiZmQgb2YgYSBzaGFyZWQgbGlicmFyeSwgcmVjb3Jk IGl0cyBzb25hbWUKLS0JICAgYW5kIGJ1aWxkIGlkLiAgKi8KLS0JaWYgKGJ1aWxkX2lkICE9IG51 bGxwdHIpCi0tCSAgewotLQkgICAgZ2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8Y2hhcj4gc29uYW1l Ci0tCSAgICAgID0gZ2RiX2JmZF9yZWFkX2VsZl9zb25hbWUgKGJmZC0+ZmlsZW5hbWUpOwotLQkg ICAgaWYgKHNvbmFtZSAhPSBudWxscHRyKQotLQkgICAgICBzZXRfY2JmZF9zb25hbWVfYnVpbGRf aWQgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+Y2JmZCwKLS0JCQkJCXNvbmFtZS5nZXQgKCksIGJ1 aWxkX2lkKTsKLS0JICB9Ci0tICAgICAgfSk7Ci0rCSAgY29uc3QgY2hhciAqYWN0dWFsX2ZpbGVu YW1lID0gbnVsbHB0cjsKLSsJICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiBzb25hbWU7 Ci0rCSAgaWYgKGFiZmQgIT0gbnVsbHB0cikKLSsJICAgIHsKLSsJICAgICAgYWN0dWFsX2ZpbGVu YW1lID0gYmZkX2dldF9maWxlbmFtZSAoYWJmZC5nZXQgKCkpOwotKwkgICAgICBzb25hbWUgPSBn ZGJfYmZkX3JlYWRfZWxmX3NvbmFtZSAoYWN0dWFsX2ZpbGVuYW1lKTsKLSsJICAgIH0KLSsKLSsJ ICBtX21hcHBlZF9maWxlX2luZm8uYWRkIChzb25hbWUuZ2V0ICgpLCBmaWxlbmFtZS5jX3N0ciAo KSwKLSsJCQkJICBhY3R1YWxfZmlsZW5hbWUsIHN0ZDo6bW92ZSAocmFuZ2VzKSwKLSsJCQkJICBm aWxlX2RhdGEuYnVpbGRfaWQpOwotKwl9Ci0rICAgIH0KLSAKLSAgIG5vcm1hbGl6ZV9tZW1fcmFu Z2VzICgmbV9jb3JlX3VuYXZhaWxhYmxlX21hcHBpbmdzKTsKLSB9Ci1AQCAtNTY0LDM2ICs4NzAs MzEgQEAgcmVuYW1lX3ZtY29yZV9pZGxlX3JlZ19zZWN0aW9ucyAoYmZkICphYmZkLCBpbmZlcmlv ciAqaW5mKQotICAgIEJGRCBBQkZELiAgKi8KLSAKLSBzdGF0aWMgdm9pZAotLWxvY2F0ZV9leGVj X2Zyb21fY29yZWZpbGVfYnVpbGRfaWQgKGJmZCAqYWJmZCwgaW50IGZyb21fdHR5KQotK2xvY2F0 ZV9leGVjX2Zyb21fY29yZWZpbGVfYnVpbGRfaWQgKGJmZCAqYWJmZCwgY29yZV90YXJnZXQgKnRh cmdldCwKLSsJCQkJICAgIGludCBmcm9tX3R0eSkKLSB7Ci0gICBjb25zdCBiZmRfYnVpbGRfaWQg KmJ1aWxkX2lkID0gYnVpbGRfaWRfYmZkX2dldCAoYWJmZCk7Ci0gICBpZiAoYnVpbGRfaWQgPT0g bnVsbHB0cikKLSAgICAgcmV0dXJuOwotIAotLSAgZ2RiX2JmZF9yZWZfcHRyIGV4ZWNiZmQKLS0g ICAgPSBidWlsZF9pZF90b19leGVjX2JmZCAoYnVpbGRfaWQtPnNpemUsIGJ1aWxkX2lkLT5kYXRh KTsKLSsgIC8qIFRoZSBmaWxlbmFtZSB1c2VkIGZvciB0aGUgZmluZF9vYmpmaWxlX2J5X2J1aWxk X2lkIGNhbGwuICAqLwotKyAgc3RkOjpzdHJpbmcgZmlsZW5hbWU7Ci0gCi0tICBpZiAoZXhlY2Jm ZCA9PSBudWxscHRyKQotKyAgaWYgKCF0YXJnZXQtPmV4cGVjdGVkX2V4ZWNfZmlsZW5hbWUgKCku ZW1wdHkgKCkpCi0rICAgIGZpbGVuYW1lID0gdGFyZ2V0LT5leHBlY3RlZF9leGVjX2ZpbGVuYW1l ICgpOwotKyAgZWxzZQotICAgICB7Ci0tICAgICAgLyogQXR0ZW1wdCB0byBxdWVyeSBkZWJ1Z2lu Zm9kIGZvciB0aGUgZXhlY3V0YWJsZS4gICovCi0tICAgICAgZ2RiOjp1bmlxdWVfeG1hbGxvY19w dHI8Y2hhcj4gZXhlY3BhdGg7Ci0tICAgICAgc2NvcGVkX2ZkIGZkID0gZGVidWdpbmZvZF9leGVj X3F1ZXJ5IChidWlsZF9pZC0+ZGF0YSwgYnVpbGRfaWQtPnNpemUsCi0tCQkJCQkgICAgYWJmZC0+ ZmlsZW5hbWUsICZleGVjcGF0aCk7Ci0tCi0tICAgICAgaWYgKGZkLmdldCAoKSA+PSAwKQotLQl7 Ci0tCSAgZXhlY2JmZCA9IGdkYl9iZmRfb3BlbiAoZXhlY3BhdGguZ2V0ICgpLCBnbnV0YXJnZXQp OwotLQotLQkgIGlmIChleGVjYmZkID09IG51bGxwdHIpCi0tCSAgICB3YXJuaW5nIChfKCJcIiVz XCIgZnJvbSBkZWJ1Z2luZm9kIGNhbm5vdCBiZSBvcGVuZWQgYXMgYmZkOiAlcyIpLAotLQkJICAg ICBleGVjcGF0aC5nZXQgKCksCi0tCQkgICAgIGdkYl9iZmRfZXJybXNnIChiZmRfZ2V0X2Vycm9y ICgpLCBudWxscHRyKS5jX3N0ciAoKSk7Ci0tCSAgZWxzZSBpZiAoIWJ1aWxkX2lkX3ZlcmlmeSAo ZXhlY2JmZC5nZXQgKCksIGJ1aWxkX2lkLT5zaXplLAotLQkJCQkgICAgIGJ1aWxkX2lkLT5kYXRh KSkKLS0JICAgIGV4ZWNiZmQucmVzZXQgKG51bGxwdHIpOwotLQl9Ci0rICAgICAgLyogV2UgZGlk bid0IGZpbmQgYW4gZXhlY3V0YWJsZSBuYW1lIGZyb20gdGhlIG1hcHBlZCBmaWxlCi0rCSBpbmZv cm1hdGlvbiwgc28gYXMgYSBzdGFuZC1pbiBidWlsZCBhIHN0cmluZyBiYXNlZCBvbiB0aGUKLSsJ IGJ1aWxkLWlkLiAgKi8KLSsgICAgICBzdGQ6OnN0cmluZyBidWlsZF9pZF9oZXhfc3RyID0gYmlu MmhleCAoYnVpbGRfaWQtPmRhdGEsIGJ1aWxkX2lkLT5zaXplKTsKLSsgICAgICBmaWxlbmFtZSA9 IHN0cmluZ19wcmludGYgKCJ3aXRoIGJ1aWxkLWlkICVzIiwgYnVpbGRfaWRfaGV4X3N0ci5jX3N0 ciAoKSk7Ci0gICAgIH0KLSAKLSsgIGdkYl9iZmRfcmVmX3B0ciBleGVjYmZkCi0rICAgID0gZmlu ZF9vYmpmaWxlX2J5X2J1aWxkX2lkIChjdXJyZW50X3Byb2dyYW1fc3BhY2UsIGJ1aWxkX2lkLAot KwkJCQlmaWxlbmFtZS5jX3N0ciAoKSk7Ci0rCi0gICBpZiAoZXhlY2JmZCAhPSBudWxscHRyKQot ICAgICB7Ci0gICAgICAgZXhlY19maWxlX2F0dGFjaCAoYmZkX2dldF9maWxlbmFtZSAoZXhlY2Jm ZC5nZXQgKCkpLCBmcm9tX3R0eSk7Ci1AQCAtNzI0LDcgKzEwMjUsNyBAQCBjb3JlX3RhcmdldF9v cGVuIChjb25zdCBjaGFyICphcmcsIGludCBmcm9tX3R0eSkKLSAKLSAgIGlmIChjdXJyZW50X3By b2dyYW1fc3BhY2UtPmV4ZWNfYmZkICgpID09IG51bGxwdHIpCi0gICAgIGxvY2F0ZV9leGVjX2Zy b21fY29yZWZpbGVfYnVpbGRfaWQgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+Y29yZV9iZmQgKCks Ci0tCQkJCQlmcm9tX3R0eSk7Ci0rCQkJCQl0YXJnZXQsIGZyb21fdHR5KTsKLSAKLSAgIHBvc3Rf Y3JlYXRlX2luZmVyaW9yIChmcm9tX3R0eSk7Ci0gCi1AQCAtOTYzLDU1ICsxMjY0LDYgQEAgY29y ZV90YXJnZXQ6OmZpbGVzX2luZm8gKCkKLSAgIHByaW50X3NlY3Rpb25faW5mbyAoJm1fY29yZV9z ZWN0aW9uX3RhYmxlLCBjdXJyZW50X3Byb2dyYW1fc3BhY2UtPmNvcmVfYmZkICgpKTsKLSB9Ci0g DAotLS8qIEhlbHBlciBtZXRob2QgZm9yIGNvcmVfdGFyZ2V0Ojp4ZmVyX3BhcnRpYWwuICAqLwot LQotLWVudW0gdGFyZ2V0X3hmZXJfc3RhdHVzCi0tY29yZV90YXJnZXQ6OnhmZXJfbWVtb3J5X3Zp YV9tYXBwaW5ncyAoZ2RiX2J5dGUgKnJlYWRidWYsCi0tCQkJCSAgICAgICBjb25zdCBnZGJfYnl0 ZSAqd3JpdGVidWYsCi0tCQkJCSAgICAgICBVTE9OR0VTVCBvZmZzZXQsIFVMT05HRVNUIGxlbiwK LS0JCQkJICAgICAgIFVMT05HRVNUICp4ZmVyZWRfbGVuKQotLXsKLS0gIGVudW0gdGFyZ2V0X3hm ZXJfc3RhdHVzIHhmZXJfc3RhdHVzOwotLQotLSAgeGZlcl9zdGF0dXMgPSAoc2VjdGlvbl90YWJs ZV94ZmVyX21lbW9yeV9wYXJ0aWFsCi0tCQkgICAocmVhZGJ1Ziwgd3JpdGVidWYsCi0tCQkgICAg b2Zmc2V0LCBsZW4sIHhmZXJlZF9sZW4sCi0tCQkgICAgbV9jb3JlX2ZpbGVfbWFwcGluZ3MpKTsK LS0KLS0gIGlmICh4ZmVyX3N0YXR1cyA9PSBUQVJHRVRfWEZFUl9PSyB8fCBtX2NvcmVfdW5hdmFp bGFibGVfbWFwcGluZ3MuZW1wdHkgKCkpCi0tICAgIHJldHVybiB4ZmVyX3N0YXR1czsKLS0KLS0g IC8qIFRoZXJlIGFyZSBpbnN0YW5jZXMgLSBlLmcuIHdoZW4gZGVidWdnaW5nIHdpdGhpbiBhIGRv Y2tlcgotLSAgICAgY29udGFpbmVyIHVzaW5nIHRoZSBBVUZTIHN0b3JhZ2UgZHJpdmVyIC0gd2hl cmUgdGhlIHBhdGhuYW1lcwotLSAgICAgb2J0YWluZWQgZnJvbSB0aGUgbm90ZSBzZWN0aW9uIGFy ZSBpbmNvcnJlY3QuICBEZXNwaXRlIHRoZSBwYXRoCi0tICAgICBiZWluZyB3cm9uZywganVzdCBr bm93aW5nIHRoZSBzdGFydCBhbmQgZW5kIGFkZHJlc3NlcyBvZiB0aGUKLS0gICAgIG1hcHBpbmdz IGlzIHN0aWxsIHVzZWZ1bDsgd2UgY2FuIGF0dGVtcHQgYW4gYWNjZXNzIG9mIHRoZSBmaWxlCi0t ICAgICBzdHJhdHVtIGNvbnN0cmFpbmVkIHRvIHRoZSBhZGRyZXNzIHJhbmdlcyBjb3JyZXNwb25k aW5nIHRvIHRoZQotLSAgICAgdW5hdmFpbGFibGUgbWFwcGluZ3MuICAqLwotLQotLSAgVUxPTkdF U1QgbWVtYWRkciA9IG9mZnNldDsKLS0gIFVMT05HRVNUIG1lbWVuZCA9IG9mZnNldCArIGxlbjsK LS0KLS0gIGZvciAoY29uc3QgYXV0byAmbXIgOiBtX2NvcmVfdW5hdmFpbGFibGVfbWFwcGluZ3Mp Ci0tICAgIHsKLS0gICAgICBpZiAobXIuY29udGFpbnMgKG1lbWFkZHIpKQotLQl7Ci0tCSAgaWYg KCFtci5jb250YWlucyAobWVtZW5kKSkKLS0JICAgIGxlbiA9IG1yLnN0YXJ0ICsgbXIubGVuZ3Ro IC0gbWVtYWRkcjsKLS0KLS0JICB4ZmVyX3N0YXR1cyA9IHRoaXMtPmJlbmVhdGggKCktPnhmZXJf cGFydGlhbCAoVEFSR0VUX09CSkVDVF9NRU1PUlksCi0tCQkJCQkJCU5VTEwsCi0tCQkJCQkJCXJl YWRidWYsCi0tCQkJCQkJCXdyaXRlYnVmLAotLQkJCQkJCQlvZmZzZXQsCi0tCQkJCQkJCWxlbiwK LS0JCQkJCQkJeGZlcmVkX2xlbik7Ci0tCSAgYnJlYWs7Ci0tCX0KLS0gICAgfQotLQotLSAgcmV0 dXJuIHhmZXJfc3RhdHVzOwotLX0KLSAKLSBlbnVtIHRhcmdldF94ZmVyX3N0YXR1cwotIGNvcmVf dGFyZ2V0Ojp4ZmVyX3BhcnRpYWwgKGVudW0gdGFyZ2V0X29iamVjdCBvYmplY3QsIGNvbnN0IGNo YXIgKmFubmV4LAotQEAgLTEwMzksMjYgKzEyOTEsNzIgQEAgY29yZV90YXJnZXQ6OnhmZXJfcGFy dGlhbCAoZW51bSB0YXJnZXRfb2JqZWN0IG9iamVjdCwgY29uc3QgY2hhciAqYW5uZXgsCi0gCWlm ICh4ZmVyX3N0YXR1cyA9PSBUQVJHRVRfWEZFUl9PSykKLSAJICByZXR1cm4gVEFSR0VUX1hGRVJf T0s7Ci0gCi0tCS8qIENoZWNrIGZpbGUgYmFja2VkIG1hcHBpbmdzLiAgSWYgdGhleSdyZSBhdmFp bGFibGUsIHVzZQotLQkgICBjb3JlIGZpbGUgcHJvdmlkZWQgbWFwcGluZ3MgKGUuZy4gZnJvbSAu bm90ZS5saW51eGNvcmUuZmlsZQotLQkgICBvciB0aGUgbGlrZSkgYXMgdGhpcyBzaG91bGQgcHJv dmlkZSBhIG1vcmUgYWNjdXJhdGUKLS0JICAgcmVzdWx0LiAgSWYgbm90LCBjaGVjayB0aGUgc3Ry YXR1bSBiZW5lYXRoIHVzLCB3aGljaCBzaG91bGQKLS0JICAgYmUgdGhlIGZpbGUgc3RyYXR1bS4K LSsJLyogQ2hlY2sgZmlsZSBiYWNrZWQgbWFwcGluZ3MuICBJZiB0aGV5J3JlIGF2YWlsYWJsZSwg dXNlIGNvcmUgZmlsZQotKwkgICBwcm92aWRlZCBtYXBwaW5ncyAoZS5nLiBmcm9tIC5ub3RlLmxp bnV4Y29yZS5maWxlIG9yIHRoZSBsaWtlKQotKwkgICBhcyB0aGlzIHNob3VsZCBwcm92aWRlIGEg bW9yZSBhY2N1cmF0ZSByZXN1bHQuICAqLwotKwlpZiAoIW1fY29yZV9maWxlX21hcHBpbmdzLmVt cHR5ICgpKQotKwkgIHsKLSsJICAgIHhmZXJfc3RhdHVzID0gc2VjdGlvbl90YWJsZV94ZmVyX21l bW9yeV9wYXJ0aWFsCi0rCQkJICAgIChyZWFkYnVmLCB3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4sIHhm ZXJlZF9sZW4sCi0rCQkJICAgICBtX2NvcmVfZmlsZV9tYXBwaW5ncyk7Ci0rCSAgICBpZiAoeGZl cl9zdGF0dXMgPT0gVEFSR0VUX1hGRVJfT0spCi0rCSAgICAgIHJldHVybiB4ZmVyX3N0YXR1czsK LSsJICB9Ci0gCi0tCSAgIFdlIGFsc28gY2hlY2sgdW5hdmFpbGFibGUgbWFwcGluZ3MgZHVlIHRv IERvY2tlci9BVUZTIGRyaXZlcgotLQkgICBpc3N1ZXMuICAqLwotLQlpZiAoIW1fY29yZV9maWxl X21hcHBpbmdzLmVtcHR5ICgpCi0tCSAgICB8fCAhbV9jb3JlX3VuYXZhaWxhYmxlX21hcHBpbmdz LmVtcHR5ICgpKQotKwkvKiBJZiB0aGUgYWNjZXNzIGlzIHdpdGhpbiBhbiB1bmF2YWlsYWJsZSBm aWxlIG1hcHBpbmcgdGhlbiB3ZSB0cnkKLSsJICAgdG8gY2hlY2sgaW4gdGhlIHN0cmF0dW0gYmVs b3cgKHRoZSBleGVjdXRhYmxlIHN0cmF0dW0pLiAgVGhlCi0rCSAgIHRoaW5raW5nIGhlcmUgaXMg dGhhdCBpZiB0aGUgbWFwcGluZyB3YXMgcmVhZC93cml0ZSB0aGVuIHRoZQotKwkgICBjb250ZW50 cyB3b3VsZCBoYXZlIGJlZW4gd3JpdHRlbiBpbnRvIHRoZSBjb3JlIGZpbGUgYW5kIHRoZQotKwkg ICBhY2Nlc3Mgd291bGQgaGF2ZSBiZWVuIHNhdGlzZmllZCBieSBtX2NvcmVfc2VjdGlvbl90YWJs ZS4KLSsKLSsJICAgQnV0IGlmIHRoZSBhY2Nlc3MgaGFzIG5vdCB5ZXQgYmVlbiByZXNvbHZlZCB0 aGVuIHdlIGNhbiBhc3N1bWUKLSsJICAgdGhlIGFjY2VzcyBpcyByZWFkLW9ubHkuICBJZiB0aGUg ZXhlY3V0YWJsZSB3YXMgbm90IGZvdW5kCi0rCSAgIGR1cmluZyB0aGUgbWFwcGVkIGZpbGUgY2hl Y2sgdGhlbiB3ZSdsbCBoYXZlIGFuIHVuYXZhaWxhYmxlCi0rCSAgIG1hcHBpbmcgZW50cnksIGhv d2V2ZXIsIGlmIHRoZSB1c2VyIGhhcyBwcm92aWRlZCB0aGUgZXhlY3V0YWJsZQotKwkgICAobWF5 YmUgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24pIHRoZW4gd2UgbWlnaHQgYmUgYWJsZSB0bwotKwkg ICByZXNvbHZlIHRoZSBhY2Nlc3MgZnJvbSB0aGVyZS4KLSsKLSsJICAgSWYgdGhhdCBmYWlscywg YnV0IHRoZSBhY2Nlc3MgaXMgd2l0aGluIGFuIHVuYXZhaWxhYmxlIHJlZ2lvbiwKLSsJICAgdGhl biB0aGUgYWNjZXNzIGl0c2VsZiBzaG91bGQgZmFpbC4gICovCi0rCWZvciAoY29uc3QgYXV0byAm bXIgOiBtX2NvcmVfdW5hdmFpbGFibGVfbWFwcGluZ3MpCi0gCSAgewotLQkgICAgeGZlcl9zdGF0 dXMgPSB4ZmVyX21lbW9yeV92aWFfbWFwcGluZ3MgKHJlYWRidWYsIHdyaXRlYnVmLCBvZmZzZXQs Ci0rCSAgICBpZiAobXIuY29udGFpbnMgKG9mZnNldCkpCi0rCSAgICAgIHsKLSsJCWlmICghbXIu Y29udGFpbnMgKG9mZnNldCArIGxlbikpCi0rCQkgIGxlbiA9IG1yLnN0YXJ0ICsgbXIubGVuZ3Ro IC0gb2Zmc2V0OwotKwotKwkJeGZlcl9zdGF0dXMKLSsJCSAgPSB0aGlzLT5iZW5lYXRoICgpLT54 ZmVyX3BhcnRpYWwgKFRBUkdFVF9PQkpFQ1RfTUVNT1JZLAotKwkJCQkJCSAgICBudWxscHRyLCBy ZWFkYnVmLAotKwkJCQkJCSAgICB3cml0ZWJ1Ziwgb2Zmc2V0LAotIAkJCQkJCSAgICBsZW4sIHhm ZXJlZF9sZW4pOwotKwkJaWYgKHhmZXJfc3RhdHVzID09IFRBUkdFVF9YRkVSX09LKQotKwkJICBy ZXR1cm4gVEFSR0VUX1hGRVJfT0s7Ci0rCi0rCQlyZXR1cm4gVEFSR0VUX1hGRVJfRV9JTzsKLSsJ ICAgICAgfQotKwkgIH0KLSsKLSsJLyogVGhlIGZvbGxvd2luZyBpcyBhY3RpbmcgYXMgYSBmYWxs YmFjayBpbiBjYXNlIHdlIGVuY291bnRlciBhCi0rCSAgIHNpdHVhdGlvbiB3aGVyZSB0aGUgY29y ZSBmaWxlIGlzIGxhY2tpbmcgYW5kIG1hcHBlZCBmaWxlCi0rCSAgIGluZm9ybWF0aW9uLiAgSGVy ZSB3ZSBxdWVyeSB0aGUgZXhlYyBmaWxlIHN0cmF0dW0gdG8gc2VlIGlmIGl0Ci0rCSAgIGNhbiBy ZXNvbHZlIHRoZSBhY2Nlc3MuICBEb2luZyB0aGlzIHdoZW4gd2UgYXJlIG1pc3NpbmcgbWFwcGVk Ci0rCSAgIGZpbGUgaW5mb3JtYXRpb24gbWlnaHQgYmUgdGhlIGJlc3Qgd2UgY2FuIGRvLCBidXQg dGhlcmUgYXJlCi0rCSAgIGNlcnRhaW5seSBjYXNlcyB0aGlzIHdpbGwgZ2V0IHdyb25nLCBlLmcu IGlmIGFuIGluZmVyaW9yIGNyZWF0ZWQKLSsJICAgYSB6ZXJvIGluaXRpYWxpc2VkIG1hcHBpbmcg b3ZlciB0aGUgdG9wIG9mIHNvbWUgZGF0YSB0aGF0IGV4aXN0cwotKwkgICB3aXRoaW4gdGhlIGV4 ZWN1dGFibGUgdGhlbiB0aGlzIHdpbGwgcmV0dXJuIHRoZSBleGVjdXRhYmxlIGRhdGEKLSsJICAg cmF0aGVyIHRoYW4gdGhlIHplcm8gZGF0YS4gIE1heWJlIHdlIHNob3VsZCBqdXN0IGRyb3AgdGhp cwotKwkgICBibG9jaz8gICovCi0rCWlmIChtX2NvcmVfZmlsZV9tYXBwaW5ncy5lbXB0eSAoKQot KwkgICAgJiYgbV9jb3JlX3VuYXZhaWxhYmxlX21hcHBpbmdzLmVtcHR5ICgpKQotKwkgIHsKLSsJ ICAgIHhmZXJfc3RhdHVzCi0rCSAgICAgID0gdGhpcy0+YmVuZWF0aCAoKS0+eGZlcl9wYXJ0aWFs IChvYmplY3QsIGFubmV4LCByZWFkYnVmLAotKwkJCQkJCXdyaXRlYnVmLCBvZmZzZXQsIGxlbiwK LSsJCQkJCQl4ZmVyZWRfbGVuKTsKLSsJICAgIGlmICh4ZmVyX3N0YXR1cyA9PSBUQVJHRVRfWEZF Ul9PSykKLSsJICAgICAgcmV0dXJuIFRBUkdFVF9YRkVSX09LOwotIAkgIH0KLS0JZWxzZQotLQkg IHhmZXJfc3RhdHVzID0gdGhpcy0+YmVuZWF0aCAoKS0+eGZlcl9wYXJ0aWFsIChvYmplY3QsIGFu bmV4LCByZWFkYnVmLAotLQkJCQkJCQl3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4sCi0tCQkJCQkJCXhm ZXJlZF9sZW4pOwotLQlpZiAoeGZlcl9zdGF0dXMgPT0gVEFSR0VUX1hGRVJfT0spCi0tCSAgcmV0 dXJuIFRBUkdFVF9YRkVSX09LOwotIAotIAkvKiBGaW5hbGx5LCBhdHRlbXB0IHRvIGFjY2VzcyBk YXRhIGluIGNvcmUgZmlsZSBzZWN0aW9ucyB3aXRoCi0gCSAgIG5vIGNvbnRlbnRzLiAgVGhlc2Ug d2lsbCB0eXBpY2FsbHkgcmVhZCBhcyBhbGwgemVyby4gICovCi1AQCAtMTUxNSw2ICsxODEzLDE4 MiBAQCBtYWludGVuYW5jZV9wcmludF9jb3JlX2ZpbGVfYmFja2VkX21hcHBpbmdzIChjb25zdCBj aGFyICphcmdzLCBpbnQgZnJvbV90dHkpCi0gICAgIHRhcmctPmluZm9fcHJvY19tYXBwaW5ncyAo dGFyZy0+Y29yZV9nZGJhcmNoICgpKTsKLSB9Ci0gCi0rLyogQWRkIG1vcmUgZGV0YWlscyBkaXNj b3ZlcmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhlIGNvcmUtZmlsZSdzIG1hcHBlZCBmaWxlCi0rICAg aW5mb3JtYXRpb24sIHdlJ3JlIGJ1aWxkaW5nIG1hcHMgYmV0d2VlbiBmaWxlbmFtZXMgYW5kIHRo ZSBjb3JyZXNwb25kaW5nCi0rICAgYnVpbGQtaWRzLCBiZXR3ZWVuIGFkZHJlc3MgcmFuZ2VzIGFu ZCB0aGUgY29ycmVzcG9uZGluZyBidWlsZC1pZHMsIGFuZAotKyAgIGFsc28gYSByZXZlcnNlIG1h cCBiZXR3ZWVuIGJ1aWxkLWlkIGFuZCB0aGUgY29ycmVzcG9uZGluZyBmaWxlbmFtZS4KLSsKLSsg ICBTT05BTUUgaXMgdGhlIERUX1NPTkFNRSBhdHRyaWJ1dGUgZXh0cmFjdGVkIGZyb20gdGhlIC5k eW5hbWljIHNlY3Rpb24gb2YKLSsgICBhIHNoYXJlZCBsaWJyYXJ5IHRoYXQgd2FzIG1hcHBlZCBp bnRvIHRoZSBjb3JlIGZpbGUuICBUaGlzIGNhbiBiZQotKyAgIG51bGxwdHIgaWYgdGhlIG1hcHBl ZCBmaWxlcyB3YXMgbm90IGEgc2hhcmVkIGxpYnJhcnksIG9yIGRpZG4ndCBoYXZlIGEKLSsgICBE VF9TT05BTUUgYXR0cmlidXRlLgotKwotKyAgIEVYUEVDVEVEX0ZJTEVOQU1FIGlzIHRoZSBuYW1l IG9mIHRoZSBmaWxlIHRoYXQgd2FzIG1hcHBlZCBpbnRvIHRoZQotKyAgIGluZmVyaW9yIGFzIGV4 dHJhY3RlZCBmcm9tIHRoZSBjb3JlIGZpbGUsIHRoaXMgc2hvdWxkIG5ldmVyIGJlIG51bGxwdHIu Ci0rCi0rICAgQUNUVUFMX0ZJTEVOQU1FIGlzIHRoZSBuYW1lIG9mIHRoZSBhY3R1YWwgZmlsZSBH REIgZm91bmQgdG8gcHJvdmlkZSB0aGUKLSsgICBtYXBwZWQgZmlsZSBpbmZvcm1hdGlvbiwgdGhp cyBjYW4gYmUgbnVsbHB0ciBpZiBHREIgZmFpbGVkIHRvIGZpbmQgYQotKyAgIHN1aXRhYmxlIGZp bGUuICBUaGlzIG1pZ2h0IGJlIGRpZmZlcmVudCB0byBFWFBFQ1RFRF9GSUxFTkFNRSwgZS5nLiBH REIKLSsgICBtaWdodCBoYXZlIGRvd25sb2FkZWQgdGhlIGZpbGUgZnJvbSBkZWJ1Z2luZm9kIGFu ZCBzbyBBQ1RVQUxfRklMRU5BTUUKLSsgICB3aWxsIGJlIGEgZmlsZSBpbiB0aGUgZGVidWdpbmZv ZCBjbGllbnQgY2FjaGUuCi0rCi0rICAgUkFOR0VTIGlzIHRoZSBsaXN0IG9mIG1lbW9yeSByYW5n ZXMgYXQgd2hpY2ggdGhpcyBmaWxlIHdhcyBtYXBwZWQgaW50bwotKyAgIHRoZSBpbmZlcmlvci4K LSsKLSsgICBCVUlMRF9JRCBpcyB0aGUgYnVpbGQtaWQgZm9yIHRoaXMgbWFwcGVkIGZpbGUsIHRo aXMgd2lsbCBuZXZlciBiZQotKyAgIG51bGxwdHIuICBOb3QgZXZlcnkgbWFwcGVkIGZpbGUgd2ls bCBoYXZlIGEgYnVpbGQtaWQsIGJ1dCB0aGVyZSdzIG5vCi0rICAgcG9pbnQgY2FsbGluZyB0aGlz IGZ1bmN0aW9uIGlmIHdlIGZhaWxlZCB0byBmaW5kIGEgYnVpbGQtaWQ7IHRoaXMKLSsgICBzdHJ1 Y3R1cmUgb25seSBleGlzdHMgc28gd2UgY2FuIGxvb2t1cCBmaWxlcyBiYXNlZCBvbiB0aGVpciBi dWlsZC1pZC4gICovCi0rCi0rdm9pZAotK21hcHBlZF9maWxlX2luZm86OmFkZCAoY29uc3QgY2hh ciAqc29uYW1lLAotKwkJICAgICAgIGNvbnN0IGNoYXIgKmV4cGVjdGVkX2ZpbGVuYW1lLAotKwkJ ICAgICAgIGNvbnN0IGNoYXIgKmFjdHVhbF9maWxlbmFtZSwKLSsJCSAgICAgICBzdGQ6OnZlY3Rv cjxtZW1fcmFuZ2U+ICYmcmFuZ2VzLAotKwkJICAgICAgIGNvbnN0IGJmZF9idWlsZF9pZCAqYnVp bGRfaWQpCi0rewotKyAgZ2RiX2Fzc2VydCAoYnVpbGRfaWQgIT0gbnVsbHB0cik7Ci0rICBnZGJf YXNzZXJ0IChleHBlY3RlZF9maWxlbmFtZSAhPSBudWxscHRyKTsKLSsKLSsgIGlmIChzb25hbWUg IT0gbnVsbHB0cikKLSsgICAgewotKyAgICAgIC8qIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBlbnRy eSB3aXRoIHRoaXMgU09OQU1FIHRoZW4gdGhpcyBpbmRpY2F0ZXMKLSsJIHRoYXQgdGhlIGluZmVy aW9yIGhhcyB0d28gZmlsZXMgbWFwcGVkIGludG8gbWVtb3J5IHdpdGggZGlmZmVyZW50Ci0rCSBm aWxlIG5hbWVzIChhbmQgbW9zdCBsaWtlbHkgZGlmZmVyZW50IGJ1aWxkLWlkcyksIGJ1dCB3aXRo IHRoZQotKwkgc2FtZSBEVF9TT05BTUUgYXR0cmlidXRlLiAgSW4gdGhpcyBjYXNlIHdlIGNhbid0 IHVzZSB0aGUKLSsJIERUX1NPTkFNRSB0byBmaWd1cmUgb3V0IHRoZSBleHBlY3RlZCBidWlsZC1p ZCBvZiBhIHNoYXJlZAotKwkgbGlicmFyeSwgc28gcG9pc29uIHRoZSBlbnRyeSBmb3IgdGhpcyBT T05BTUUgYnkgc2V0dGluZyB0aGUgZW50cnkKLSsJIHRvIG51bGxwdHIuICAqLwotKyAgICAgIGF1 dG8gaXQgPSBtX3NvbmFtZV90b19idWlsZF9pZF9tYXAuZmluZCAoc29uYW1lKTsKLSsgICAgICBp ZiAoaXQgIT0gbV9zb25hbWVfdG9fYnVpbGRfaWRfbWFwLmVuZCAoKQotKwkgICYmIGl0LT5zZWNv bmQgIT0gbnVsbHB0cgotKwkgICYmICFidWlsZF9pZF9lcXVhbCAoaXQtPnNlY29uZCwgYnVpbGRf aWQpKQotKwltX3NvbmFtZV90b19idWlsZF9pZF9tYXBbc29uYW1lXSA9IG51bGxwdHI7Ci0rICAg ICAgZWxzZQotKwltX3NvbmFtZV90b19idWlsZF9pZF9tYXBbc29uYW1lXSA9IGJ1aWxkX2lkOwot KyAgICB9Ci0rCi0rICAvKiBXaGVuIHRoZSBjb3JlIGZpbGUgaXMgaW5pdGlhbGx5IG9wZW5lZCBh bmQgdGhlIG1hcHBlZCBmaWxlcyBhcmUKLSsgICAgIHBhcnNlZCwgd2UgZ3JvdXAgdGhlIGJ1aWxk LWlkIGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoZSBmaWxlIG5hbWUuICBBcwotKyAgICAgYSBjb25z ZXF1ZW5jZSwgd2Ugc2hvdWxkIHNlZSBlYWNoIEVYUEVDVEVEX0ZJTEVOQU1FIHZhbHVlIGV4YWN0 bHkKLSsgICAgIG9uY2UuICBUaGlzIG1lYW5zIHRoYXQgZWFjaCBpbnNlcnRpb24gc2hvdWxkIGFs d2F5cyBzdWNjZWVkLiAgKi8KLSsgIGNvbnN0IGF1dG8gW2l0LCBpbnNlcnRlZF0KLSsgICAgPSBt X2ZpbGVuYW1lX3RvX2J1aWxkX2lkX21hcC5lbXBsYWNlIChleHBlY3RlZF9maWxlbmFtZSwgYnVp bGRfaWQpOwotKyAgZ2RiX2Fzc2VydCAoaW5zZXJ0ZWQpOwotKwotKyAgLyogU2V0dXAgdGhlIHJl dmVyc2UgYnVpbGQtaWQgdG8gZmlsZSBuYW1lIG1hcC4gICovCi0rICBpZiAoYWN0dWFsX2ZpbGVu YW1lICE9IG51bGxwdHIpCi0rICAgIG1fYnVpbGRfaWRfdG9fZmlsZW5hbWVfbWFwLmVtcGxhY2Ug KGJ1aWxkX2lkLCBhY3R1YWxfZmlsZW5hbWUpOwotKwotKyAgLyogU2V0dXAgdGhlIGxpc3Qgb2Yg bWVtb3J5IHJhbmdlIHRvIGJ1aWxkLWlkIG9iamVjdHMuICAqLwotKyAgZm9yIChtZW1fcmFuZ2Ug JnIgOiByYW5nZXMpCi0rICAgIG1fYWRkcmVzc190b19idWlsZF9pZF9saXN0LmVtcGxhY2VfYmFj ayAoc3RkOjptb3ZlIChyKSwgYnVpbGRfaWQpOwotKwotKyAgLyogQXQgdGhpcyBwb2ludCB0aGUg bV9hZGRyZXNzX3RvX2J1aWxkX2lkX2xpc3QgaXMgdW5zb3J0ZWQgKHdlIGp1c3QKLSsgICAgIGFk ZGVkIHNvbWUgZW50cmllcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0KS4gIEFsbCBlbnRyaWVzIHNo b3VsZCBiZQotKyAgICAgYWRkZWQgYmVmb3JlIGFueSBsb29rLXVwcyBhcmUgcGVyZm9ybWVkLCBh bmQgdGhlIGxpc3QgaXMgb25seSBzb3J0ZWQKLSsgICAgIHdoZW4gdGhlIGZpcnN0IGxvb2stdXAg aXMgcGVyZm9ybWVkLiAgKi8KLSsgIGdkYl9hc3NlcnQgKCFtX2FkZHJlc3NfdG9fYnVpbGRfaWRf bGlzdF9zb3J0ZWQpOwotK30KLSsKLSsvKiBGSUxFTkFNRSBpcyB0aGUgbmFtZSBvZiBhIGZpbGUg R0RCIGlzIHRyeWluZyB0byBsb2FkLCBhbmQgQUREUiBpcwotKyAgIChvcHRpb25hbGx5KSBhbiBh ZGRyZXNzIHdpdGhpbiB0aGUgZmlsZSBpbiB0aGUgaW5mZXJpb3IncyBhZGRyZXNzIHNwYWNlLgot KwotKyAgIFNlYXJjaCB0aHJvdWdoIHRoZSBpbmZvcm1hdGlvbiBnYXRoZXJlZCBmcm9tIHRoZSBj b3JlLWZpbGUncyBtYXBwZWQgZmlsZQotKyAgIGluZm9ybWF0aW9uIGxvb2tpbmcgZm9yIGEgZmls ZSBuYW1lZCBGSUxFTkFNRSwgb3IgZm9yIGEgZmlsZSB0aGF0IGNvdmVycwotKyAgIEFERFIuICBJ ZiBhIG1hdGNoIGlzIGZvdW5kIHRoZW4gcmV0dXJuIHRoZSBidWlsZC1pZCBmb3IgdGhlIGZpbGUg YWxvbmcKLSsgICB3aXRoIHRoZSBsb2NhdGlvbiB3aGVyZSBHREIgZm91bmQgdGhlIG1hcHBlZCBm aWxlLgotKwotKyAgIFRoZSBsb2NhdGlvbiBvZiB0aGUgbWFwcGVkIGZpbGUgbWlnaHQgYmUgdGhl IGVtcHR5IHN0cmluZyBpZiBHREIgd2FzCi0rICAgdW5hYmxlIHRvIGZpbmQgdGhlIG1hcHBlZCBm aWxlLgotKwotKyAgIElmIG5vIGJ1aWxkLWlkIGNhbiBiZSBmb3VuZCBmb3IgRklMRU5BTUUgdGhl biBHREIgd2lsbCByZXR1cm4gYSBwYWlyCi0rICAgY29udGFpbmluZyBudWxscHRyIChmb3IgdGhl IGJ1aWxkLWlkKSBhbmQgYW4gZW1wdHkgc3RyaW5nIGZvciB0aGUgZmlsZQotKyAgIG5hbWUuICAq LwotKwotK3N0ZDo6b3B0aW9uYWwgPGNvcmVfdGFyZ2V0X21hcHBlZF9maWxlX2luZm8+Ci0rbWFw cGVkX2ZpbGVfaW5mbzo6bG9va3VwIChjb25zdCBjaGFyICpmaWxlbmFtZSwKLSsJCQkgIGNvbnN0 IHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPiAmYWRkcikKLSt7Ci0rICBpZiAoZmlsZW5hbWUgIT0g bnVsbHB0cikKLSsgICAgewotKyAgICAgIC8qIElmIHRoZXJlJ3MgYSBtYXRjaGluZyBlbnRyeSBp biBtX2ZpbGVuYW1lX3RvX2J1aWxkX2lkX21hcCB0aGVuIHRoZQotKwkgYXNzb2NpYXRlZCBidWls ZC1pZCB3aWxsIG5vdCBiZSBudWxscHRyLCBhbmQgY2FuIGJlIHVzZWQgdG8KLSsJIHZhbGlkYXRl IHRoYXQgRklMRU5BTUUgaXMgY29ycmVjdC4gICovCi0rICAgICAgYXV0byBpdCA9IG1fZmlsZW5h bWVfdG9fYnVpbGRfaWRfbWFwLmZpbmQgKGZpbGVuYW1lKTsKLSsgICAgICBpZiAoaXQgIT0gbV9m aWxlbmFtZV90b19idWlsZF9pZF9tYXAuZW5kICgpKQotKwlyZXR1cm4gbWFrZV9yZXN1bHQgKGl0 LT5zZWNvbmQpOwotKyAgICB9Ci0rCi0rICBpZiAoYWRkci5oYXNfdmFsdWUgKCkpCi0rICAgIHsK LSsgICAgICAvKiBPbiB0aGUgZmlyc3QgbG9va3VwLCBzb3J0IHRoZSBhZGRyZXNzX3RvX2J1aWxk X2lkX2xpc3QuICAqLwotKyAgICAgIGlmICghbV9hZGRyZXNzX3RvX2J1aWxkX2lkX2xpc3Rfc29y dGVkKQotKwl7Ci0rCSAgc3RkOjpzb3J0IChtX2FkZHJlc3NfdG9fYnVpbGRfaWRfbGlzdC5iZWdp biAoKSwKLSsJCSAgICAgbV9hZGRyZXNzX3RvX2J1aWxkX2lkX2xpc3QuZW5kICgpLAotKwkJICAg ICBbXSAoY29uc3QgbWVtX3JhbmdlX2FuZF9idWlsZF9pZCAmYSwKLSsJCQkgY29uc3QgbWVtX3Jh bmdlX2FuZF9idWlsZF9pZCAmYikgewotKwkJICAgICAgIHJldHVybiBhLnJhbmdlIDwgYi5yYW5n ZTsKLSsJCSAgICAgfSk7Ci0rCSAgbV9hZGRyZXNzX3RvX2J1aWxkX2lkX2xpc3Rfc29ydGVkID0g dHJ1ZTsKLSsJfQotKwotKyAgICAgIC8qIExvb2sgZm9yIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBy YW5nZSdzIHN0YXJ0IGFkZHJlc3MgaXMgbm90IGxlc3MKLSsJIHRoYW4sIG9yIGVxdWFsIHRvbywg dGhlIGFkZHJlc3MgQUREUi4gIElmIHdlIGZpbmQgc3VjaCBhbiBlbnRyeSwKLSsJIHRoZW4gdGhl IHByZXZpb3VzIGVudHJ5J3MgcmFuZ2UgbWlnaHQgY29udGFpbiBBRERSLiAgSWYgaXQgZG9lcwot KwkgdGhlbiB0aGF0IHByZXZpb3VzIGVudHJ5J3MgYnVpbGQtaWQgY2FuIGJlIHVzZWQuICAqLwot KyAgICAgIGF1dG8gaXQgPSBzdGQ6Omxvd2VyX2JvdW5kCi0rCShtX2FkZHJlc3NfdG9fYnVpbGRf aWRfbGlzdC5iZWdpbiAoKSwKLSsJIG1fYWRkcmVzc190b19idWlsZF9pZF9saXN0LmVuZCAoKSwK LSsJICphZGRyLAotKwkgW10gKGNvbnN0IG1lbV9yYW5nZV9hbmRfYnVpbGRfaWQgJmEsCi0rCSAg ICAgY29uc3QgQ09SRV9BRERSICZiKSB7Ci0rCSAgcmV0dXJuIGEucmFuZ2Uuc3RhcnQgPD0gYjsK LSsJfSk7Ci0rCi0rICAgICAgaWYgKGl0ICE9IG1fYWRkcmVzc190b19idWlsZF9pZF9saXN0LmJl Z2luICgpKQotKwl7Ci0rCSAgLS1pdDsKLSsKLSsJICBpZiAoaXQtPnJhbmdlLmNvbnRhaW5zICgq YWRkcikpCi0rCSAgICByZXR1cm4gbWFrZV9yZXN1bHQgKGl0LT5idWlsZF9pZCk7Ci0rCX0KLSsg ICAgfQotKwotKyAgaWYgKGZpbGVuYW1lICE9IG51bGxwdHIpCi0rICAgIHsKLSsgICAgICAvKiBJ ZiB0aGUgYmFzZW5hbWUgb2YgRklMRU5BTUUgYXBwZWFycyBpbiBtX3NvbmFtZV90b19idWlsZF9p ZF9tYXAKLSsJIHRoZW4gd2hlbiB0aGUgbWFwcGVkIGZpbGVzIHdlcmUgcHJvY2Vzc2VkLCB3ZSBz YXcgYSBmaWxlIHdpdGggYQotKwkgRFRfU09OQU1FIGF0dHJpYnV0ZSBjb3JyZXNwb25kaW5nIHRv IEZJTEVOQU1FLCB1c2UgdGhhdCBidWlsZC1pZAotKwkgdG8gdmFsaWRhdGUgRklMRU5BTUUuCi0r Ci0rCSBIb3dldmVyLCB0aGUgYnVpbGQtaWQgaW4gdGhpcyBtYXAgbWlnaHQgYmUgbnVsbHB0ciBp ZiB3ZSBzYXcKLSsJIG11bHRpcGxlIG1hcHBlZCBmaWxlcyB3aXRoIHRoZSBzYW1lIERUX1NPTkFN RSBhdHRyaWJ1dGUgKHRob3VnaAotKwkgdGhpcyBzaG91bGQgYmUgcHJldHR5IHJhcmUpLiAgKi8K LSsgICAgICBhdXRvIGl0Ci0rCT0gbV9zb25hbWVfdG9fYnVpbGRfaWRfbWFwLmZpbmQgKGxiYXNl bmFtZSAoZmlsZW5hbWUpKTsKLSsgICAgICBpZiAoaXQgIT0gbV9zb25hbWVfdG9fYnVpbGRfaWRf bWFwLmVuZCAoKQotKwkgICYmIGl0LT5zZWNvbmQgIT0gbnVsbHB0cikKLSsJcmV0dXJuIG1ha2Vf cmVzdWx0IChpdC0+c2Vjb25kKTsKLSsgICAgfQotKwotKyAgcmV0dXJuIHt9OwotK30KLSsKLSsv KiBTZWUgZ2RiY29yZS5oLiAgKi8KLSsKLStzdGQ6Om9wdGlvbmFsIDxjb3JlX3RhcmdldF9tYXBw ZWRfZmlsZV9pbmZvPgotK2NvcmVfdGFyZ2V0X2ZpbmRfbWFwcGVkX2ZpbGUgKGNvbnN0IGNoYXIg KmZpbGVuYW1lLAotKwkJCSAgICAgIHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPiBhZGRyKQotK3sK LSsgIGNvcmVfdGFyZ2V0ICp0YXJnID0gZ2V0X2N1cnJlbnRfY29yZV90YXJnZXQgKCk7Ci0rICBp ZiAodGFyZyA9PSBudWxscHRyIHx8IGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+Y2JmZC5nZXQgKCkg PT0gbnVsbHB0cikKLSsgICAgcmV0dXJuIHt9OwotKwotKyAgcmV0dXJuIHRhcmctPmxvb2t1cF9t YXBwZWRfZmlsZV9pbmZvIChmaWxlbmFtZSwgYWRkcik7Ci0rfQotKwotIHZvaWQgX2luaXRpYWxp emVfY29yZWxvdyAoKTsKLSB2b2lkCi0gX2luaXRpYWxpemVfY29yZWxvdyAoKQotZGlmZiAtLWdp dCBhL2dkYi9kYXRhLWRpcmVjdG9yeS9NYWtlZmlsZS5pbiBiL2dkYi9kYXRhLWRpcmVjdG9yeS9N YWtlZmlsZS5pbgotLS0tIGEvZ2RiL2RhdGEtZGlyZWN0b3J5L01ha2VmaWxlLmluCi0rKysgYi9n ZGIvZGF0YS1kaXJlY3RvcnkvTWFrZWZpbGUuaW4KLUBAIC03Nyw2ICs3Nyw4IEBAIFBZVEhPTl9G SUxFX0xJU1QgPSBcCi0gCWdkYi9GcmFtZUl0ZXJhdG9yLnB5IFwKLSAJZ2RiL2ZyYW1lcy5weSBc Ci0gCWdkYi9taXNzaW5nX2RlYnVnLnB5IFwKLSsJZ2RiL21pc3Npbmdfb2JqZmlsZS5weSBcCi0r CWdkYi9taXNzaW5nX2ZpbGVzLnB5IFwKLSAJZ2RiL3ByaW50aW5nLnB5IFwKLSAJZ2RiL3Byb21w dC5weSBcCi0gCWdkYi9zdHlsaW5nLnB5IFwKLUBAIC04Niw3ICs4OCw3IEBAIFBZVEhPTl9GSUxF X0xJU1QgPSBcCi0gCWdkYi9jb21tYW5kL19faW5pdF9fLnB5IFwKLSAJZ2RiL2NvbW1hbmQvZXhw bG9yZS5weSBcCi0gCWdkYi9jb21tYW5kL2ZyYW1lX2ZpbHRlcnMucHkgXAotLQlnZGIvY29tbWFu ZC9taXNzaW5nX2RlYnVnLnB5IFwKLSsJZ2RiL2NvbW1hbmQvbWlzc2luZ19maWxlcy5weSBcCi0g CWdkYi9jb21tYW5kL3ByZXR0eV9wcmludGVycy5weSBcCi0gCWdkYi9jb21tYW5kL3Byb21wdC5w eSBcCi0gCWdkYi9jb21tYW5kL3R5cGVfcHJpbnRlcnMucHkgXAotZGlmZiAtLWdpdCBhL2dkYi9k ZWJ1Z2luZm9kLXN1cHBvcnQuYyBiL2dkYi9kZWJ1Z2luZm9kLXN1cHBvcnQuYwotLS0tIGEvZ2Ri L2RlYnVnaW5mb2Qtc3VwcG9ydC5jCi0rKysgYi9nZGIvZGVidWdpbmZvZC1zdXBwb3J0LmMKLUBA IC00MDksNyArNDA5LDcgQEAgZGVidWdpbmZvZF9leGVjX3F1ZXJ5IChjb25zdCB1bnNpZ25lZCBj aGFyICpidWlsZF9pZCwKLSAgIHN0ZDo6b3B0aW9uYWw8dGFyZ2V0X3Rlcm1pbmFsOjpzY29wZWRf cmVzdG9yZV90ZXJtaW5hbF9zdGF0ZT4gdGVybV9zdGF0ZTsKLSAKLSAgIHsKLS0gICAgdXNlcl9k YXRhIGRhdGEgKCJleGVjdXRhYmxlIGZvciIsIGZpbGVuYW1lKTsKLSsgICAgdXNlcl9kYXRhIGRh dGEgKCJmaWxlIiwgZmlsZW5hbWUpOwotIAotICAgICBkZWJ1Z2luZm9kX3NldF91c2VyX2RhdGEg KGMsICZkYXRhKTsKLSAgICAgaWYgKHRhcmdldF9zdXBwb3J0c190ZXJtaW5hbF9vdXJzICgpKQot QEAgLTQyMyw3ICs0MjMsNyBAQCBkZWJ1Z2luZm9kX2V4ZWNfcXVlcnkgKGNvbnN0IHVuc2lnbmVk IGNoYXIgKmJ1aWxkX2lkLAotICAgICBkZWJ1Z2luZm9kX3NldF91c2VyX2RhdGEgKGMsIG51bGxw dHIpOwotICAgfQotIAotLSAgcHJpbnRfb3V0Y29tZSAoZmQuZ2V0ICgpLCAiZXhlY3V0YWJsZSBm b3IiLCBmaWxlbmFtZSk7Ci0rICBwcmludF9vdXRjb21lIChmZC5nZXQgKCksICJmaWxlIiwgZmls ZW5hbWUpOwotIAotICAgaWYgKGZkLmdldCAoKSA+PSAwKQotICAgICBkZXN0bmFtZS0+cmVzZXQg KGRuYW1lKTsKLWRpZmYgLS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZvIGIvZ2RiL2RvYy9nZGIu dGV4aW5mbwotLS0tIGEvZ2RiL2RvYy9nZGIudGV4aW5mbwotKysrIGIvZ2RiL2RvYy9nZGIudGV4 aW5mbwotQEAgLTIxNzg2LDYgKzIxNzg2LDcgQEAgY29udGFpbmVkIGluIEB2YXJ7ZmlsZW5hbWV9 IGJ5IHVzaW5nIHRoZSBAc2FtcHstcmVhZG5ldmVyfSBvcHRpb24uCi0gQGMgKGVnIHJvb3RlZCBp biB2YWwgb2YgZW52IHZhciBHREJTWU1TKSBjb3VsZCBleGlzdCBmb3IgbWFwcGFibGUgc3ltYm9s Ci0gQGMgZmlsZXMuCi0gCi0rQGFuY2hvcntjb3JlLWZpbGUgY29tbWFuZH0KLSBAa2luZGV4IGNv cmUtZmlsZQotIEBpdGVtIGNvcmUtZmlsZSBAcntbfUB2YXJ7ZmlsZW5hbWV9QHJ7XX0KLSBAaXRl bXggY29yZQotQEAgLTI0NTM0LDYgKzI0NTM1LDEwIEBAIGZ1dHVyZSBjb25uZWN0aW9ucyBpcyBz aG93bi4gIFRoZSBhdmFpbGFibGUgc2V0dGluZ3MgYXJlOgotIEB0YWIgQGNvZGV7dkZpbGU6ZnN0 YXR9Ci0gQHRhYiBIb3N0IEkvTwotIAotK0BpdGVtIEBjb2Rle2hvc3Rpby1zdGF0LXBhY2tldH0K LStAdGFiIEBjb2Rle3ZGaWxlOnN0YXR9Ci0rQHRhYiBIb3N0IEkvTwotKwotIEBpdGVtIEBjb2Rl e2hvc3Rpby1zZXRmcy1wYWNrZXR9Ci0gQHRhYiBAY29kZXt2RmlsZTpzZXRmc30KLSBAdGFiIEhv c3QgSS9PCi1AQCAtNDYyODksNiArNDYyOTQsMTMgQEAgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMg dGhlIHNpemUgb2YgdGhpcyBhdHRhY2htZW50IGluIGJ5dGVzLgotIElmIGFuIGVycm9yIG9jY3Vy cyB0aGUgcmV0dXJuIHZhbHVlIGlzIC0xLiAgVGhlIGZvcm1hdCBvZiB0aGUKLSByZXR1cm5lZCBi aW5hcnkgYXR0YWNobWVudCBpcyBhcyBkZXNjcmliZWQgaW4gQHJlZntzdHJ1Y3Qgc3RhdH0uCi0g Ci0rQGl0ZW0gdkZpbGU6c3RhdDogQHZhcntmaWxlbmFtZX0KLStHZXQgaW5mb3JtYXRpb24gYWJv dXQgdGhlIGZpbGUgQHZhcntmaWxlbmFtZX0gb24gdGhlIHRhcmdldC4KLStPbiBzdWNjZXNzIHRo ZSBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZCBhcyBhIGJpbmFyeSBhdHRhY2htZW50Ci0rYW5kIHRo ZSByZXR1cm4gdmFsdWUgaXMgdGhlIHNpemUgb2YgdGhpcyBhdHRhY2htZW50IGluIGJ5dGVzLgot K0lmIGFuIGVycm9yIG9jY3VycyB0aGUgcmV0dXJuIHZhbHVlIGlzIC0xLiAgVGhlIGZvcm1hdCBv ZiB0aGUKLStyZXR1cm5lZCBiaW5hcnkgYXR0YWNobWVudCBpcyBhcyBkZXNjcmliZWQgaW4gQHJl ZntzdHJ1Y3Qgc3RhdH0uCi0rCi0gQGl0ZW0gdkZpbGU6dW5saW5rOiBAdmFye2ZpbGVuYW1lfQot IERlbGV0ZSB0aGUgZmlsZSBhdCBAdmFye2ZpbGVuYW1lfSBvbiB0aGUgdGFyZ2V0LiAgUmV0dXJu IDAsCi0gb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJzLiAgVGhlIEB2YXJ7ZmlsZW5hbWV9IGlzIGEg c3RyaW5nLgotZGlmZiAtLWdpdCBhL2dkYi9kb2MvcHl0aG9uLnRleGkgYi9nZGIvZG9jL3B5dGhv bi50ZXhpCi0tLS0gYS9nZGIvZG9jL3B5dGhvbi50ZXhpCi0rKysgYi9nZGIvZG9jL3B5dGhvbi50 ZXhpCi1AQCAtMjMxLDYgKzIzMSw3IEBAIG9wdGlvbmFsIGFyZ3VtZW50cyB3aGlsZSBza2lwcGlu ZyBvdGhlcnMuICBFeGFtcGxlOgotICogVFVJIFdpbmRvd3MgSW4gUHl0aG9uOjogICAgICAgSW1w bGVtZW50aW5nIG5ldyBUVUkgd2luZG93cy4KLSAqIERpc2Fzc2VtYmx5IEluIFB5dGhvbjo6ICAg ICAgIEluc3RydWN0aW9uIERpc2Fzc2VtYmx5IEluIFB5dGhvbgotICogTWlzc2luZyBEZWJ1ZyBJ bmZvIEluIFB5dGhvbjo6IEhhbmRsZSBtaXNzaW5nIGRlYnVnIGluZm8gZnJvbSBQeXRob24uCi0r KiBNaXNzaW5nIE9iamZpbGVzIEluIFB5dGhvbjo6ICBIYW5kbGUgb2JqZmlsZXMgZnJvbSBQeXRo b24uCi0gQGVuZCBtZW51Ci0gCi0gQG5vZGUgQmFzaWMgUHl0aG9uCi1AQCAtNTM3MCwxMCArNTM3 MSwxMSBAQCBUaGUgQGNvZGV7ZnJhbWVfZmlsdGVyc30gYXR0cmlidXRlIGlzIGEgZGljdGlvbmFy eSBvZiBmcmFtZSBmaWx0ZXIKLSBvYmplY3RzLiAgQHhyZWZ7RnJhbWUgRmlsdGVyIEFQSX0sIGZv ciBtb3JlIGluZm9ybWF0aW9uLgotIEBlbmQgZGVmdmFyCi0gCi0tQGRlZnZhciBQcm9nc3BhY2Uu bWlzc2luZ19kZWJ1Z19oYW5kbGVycwotLVRoZSBAY29kZXttaXNzaW5nX2RlYnVnX2hhbmRsZXJz fSBhdHRyaWJ1dGUgaXMgYSBsaXN0IG9mIHRoZSBtaXNzaW5nCi0tZGVidWcgaGFuZGxlciBvYmpl Y3RzIGZvciB0aGlzIHByb2dyYW0gc3BhY2UuICBAeHJlZntNaXNzaW5nIERlYnVnCi0tSW5mbyBJ biBQeXRob259LCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLStAZGVmdmFyIFByb2dzcGFjZS5taXNz aW5nX2ZpbGVfaGFuZGxlcnMKLStUaGUgQGNvZGV7bWlzc2luZ19maWxlX2hhbmRsZXJzfSBhdHRy aWJ1dGUgaXMgYSBsaXN0IG9mIHR1cGxlcy4gIEVhY2gKLSt0dXBsZSBob2xkcyBhIG1pc3Npbmct ZmlsZSBoYW5kbGVyIG9iamVjdCBmb3IgdGhpcyBwcm9ncmFtIHNwYWNlLiAgRm9yCi0rbW9yZSBp bmZvcm1hdGlvbiwgQHB4cmVme01pc3NpbmcgRGVidWcgSW5mbyBJbiBQeXRob259LCBhbmQKLStA cmVme01pc3NpbmcgT2JqZmlsZXMgSW4gUHl0aG9ufS4KLSBAZW5kIGRlZnZhcgotIAotIEEgcHJv Z3JhbSBzcGFjZSBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgotQEAgLTU1NDksNiArNTU1MSw3 IEBAIFNlcGFyYXRlIGRlYnVnIGluZm8gb2JqZmlsZXMgYXJlIGFkZGVkIHdpdGggdGhlCi0gQGNv ZGV7Z2RiLk9iamZpbGUuYWRkX3NlcGFyYXRlX2RlYnVnX2ZpbGV9IG1ldGhvZCwgZGVzY3JpYmVk IGJlbG93LgotIEBlbmQgZGVmdmFyCi0gCi0rQGFuY2hvcntPYmpmaWxlLmJ1aWxkX2lkfQotIEBk ZWZ2YXIgT2JqZmlsZS5idWlsZF9pZAotIFRoZSBidWlsZCBJRCBvZiB0aGUgb2JqZmlsZSBhcyBh IHN0cmluZy4KLSBJZiB0aGUgb2JqZmlsZSBkb2VzIG5vdCBoYXZlIGEgYnVpbGQgSUQgdGhlbiB0 aGUgdmFsdWUgaXMgQGNvZGV7Tm9uZX0uCi1AQCAtODEzNyw2ICs4MTQwLDE4OSBAQCByZXR1cm5z IGEgdmFsdWUgb3RoZXIgdGhhbiBAY29kZXtOb25lfSwgbm8gZnVydGhlciBoYW5kbGVycyBhcmUg Y2FsbGVkCi0gZm9yIHRoaXMgb2JqZmlsZS4KLSBAZW5kIGRlZnVuCi0gCi0rQG5vZGUgTWlzc2lu ZyBPYmpmaWxlcyBJbiBQeXRob24KLStAc3Vic3Vic2VjdGlvbiBNaXNzaW5nIE9iamZpbGVzIElu IFB5dGhvbgotK0BjaW5kZXggcHl0aG9uLCBoYW5kbGUgbWlzc2luZyBvYmpmaWxlcwotKwotK1do ZW4gQHZhbHVle0dEQk59IG9wZW5zIGEgY29yZSBmaWxlLCBmb3IgZXhhbXBsZSB3aXRoIHRoZQot K0BrYmR7Y29yZS1maWxlfSBjb21tYW5kIChAcHhyZWZ7Y29yZS1maWxlIGNvbW1hbmR9KSwgQHZh bHVle0dEQk59IHdpbGwKLSthdHRlbXB0IHRvIGxvYWQgdGhlIGNvcnJlc3BvbmRpbmcgZXhlY3V0 YWJsZSBhbmQgc2hhcmVkIGxpYnJhcmllcy4KLStPZnRlbiB0aGVzZSBmaWxlcyBjYW4gYmUgZm91 bmQgb24gdGhlIGxvY2FsIG1hY2hpbmUsIGJ1dCBzb21ldGltZXMKLSt0aGVzZSBmaWxlcyBjYW5u b3QgYmUgZm91bmQsIGluIHdoaWNoIGNhc2UgdGhlIGRlYnVnZ2luZyBleHBlcmllbmNlCi0rd2ls bCBiZSByZXN0cmljdGVkLgotKwotK0lmIEB2YWx1ZXtHREJOfSBmYWlscyB0byBsb2NhdGUgYSBw YXJ0aWN1bGFyIGZpbGUgdGhlbiB0aGVyZSBpcyBhbgotK29wcG9ydHVuaXR5IGZvciBhIFB5dGhv biBleHRlbnNpb24gdG8gc3RlcCBpbi4gIEEgUHl0aG9uIGV4dGVuc2lvbiBjYW4KLStwb3RlbnRp YWxseSBsb2NhdGUgdGhlIG1pc3NpbmcgZmlsZSB1c2luZyBzb21lIHBsYXRmb3JtLSBvcgotK3By b2plY3Qtc3BlY2lmaWMgc3RlcHMsIGFuZCBpbmZvcm0gQHZhbHVle0dEQk59IG9mIGl0cyBsb2Nh dGlvbi4gIE9yIGEKLStQeXRob24gZXh0ZW5zaW9uIG1pZ2h0IHByb3ZpZGUgc29tZSBwbGF0Zm9y bS0gb3IgcHJvamVjdC1zcGVjaWZpYwotK2FkdmljZSB0byB0aGUgdXNlciBhYm91dCBob3cgdG8g b2J0YWluIHRoZSBtaXNzaW5nIGZpbGUuCi0rCi0rQSBtaXNzaW5nLW9iamZpbGUgUHl0aG9uIGV4 dGVuc2lvbiBjb25zaXN0cyBvZiBhIGhhbmRsZXIgb2JqZWN0IHdoaWNoCi0raGFzIHRoZSBAY29k ZXtuYW1lfSBhbmQgQGNvZGV7ZW5hYmxlZH0gYXR0cmlidXRlcywgYW5kIGltcGxlbWVudHMgdGhl Ci0rQGNvZGV7X19jYWxsX199IG1ldGhvZC4gIFdoZW4gQHZhbHVle0dEQk59IGVuY291bnRlcnMg YSBzaXR1YXRpb24KLSt3aGVyZSBhIGZpbGUgY2Fubm90IGJlIGZvdW5kLCBidXQgdGhlIGJ1aWxk LWlkIChAcHhyZWZ7YnVpbGQgSUR9KSBmb3IKLSt0aGUgbWlzc2luZyBmaWxlIGlzIGtub3duLCB0 aGVuIHRoZSBAY29kZXtfX2NhbGxfX30gbWV0aG9kIGlzIGludm9rZWQKLSt0byB0cnkgYW5kIGZp bmQgdGhlIGZpbGUuICBGdWxsIGRldGFpbHMgb2YgaG93IGhhbmRsZXJzIGFyZSB3cml0dGVuCi0r Y2FuIGJlIGZvdW5kIGJlbG93LgotKwotK0BzdWJoZWFkaW5nIFRoZSBAY29kZXtnZGIubWlzc2lu Z19vYmpmaWxlfSBNb2R1bGUKLSsKLStAdmFsdWV7R0RCTn0gY29tZXMgd2l0aCBhIEBjb2Rle2dk Yi5taXNzaW5nX29iamZpbGV9IG1vZHVsZSB3aGljaAotK2NvbnRhaW5zIHRoZSBmb2xsb3dpbmcg Y2xhc3MgYW5kIGdsb2JhbCBmdW5jdGlvbjoKLSsKLStAZGVmdHB7Y2xhc3N9IGdkYi5taXNzaW5n X29iamZpbGUuTWlzc2luZ09iamZpbGVIYW5kbGVyCi0rCi0rQGNvZGV7TWlzc2luZ09iamZpbGVI YW5kbGVyfSBpcyBhIGJhc2UgY2xhc3MgZnJvbSB3aGljaCB1c2VyLWNyZWF0ZWQKLStoYW5kbGVy cyBjYW4gZGVyaXZlLCB0aG91Z2ggaXQgaXMgbm90IHJlcXVpcmVkIHRoYXQgaGFuZGxlcnMgZGVy aXZlCi0rZnJvbSB0aGlzIGNsYXNzLCBzbyBsb25nIGFzIGFueSB1c2VyIGNyZWF0ZWQgaGFuZGxl ciBoYXMgdGhlCi0rQGNvZGV7bmFtZX0gYW5kIEBjb2Rle2VuYWJsZWR9IGF0dHJpYnV0ZXMsIGFu ZCBpbXBsZW1lbnRzIHRoZQotK0Bjb2Rle19fY2FsbF9ffSBtZXRob2QuCi0rCi0rQGRlZnVuIE1p c3NpbmdPYmpmaWxlSGFuZGxlci5fX2luaXRfXyAobmFtZSkKLStUaGUgQHZhcntuYW1lfSBpcyBh IHN0cmluZyB1c2VkIHRvIHJlZmVyZW5jZSB0aGlzIG1pc3Npbmctb2JqZmlsZQotK2hhbmRsZXIg d2l0aGluIHNvbWUgQHZhbHVle0dEQk59IGNvbW1hbmRzLiAgVmFsaWQgbmFtZXMgY29uc2lzdCBv ZiB0aGUKLStjaGFyYWN0ZXJzIEBzYW1we1stX2EtekEtWjAtOV19LCBjcmVhdGluZyBhIGhhbmRs ZXIgd2l0aCBhbiBpbnZhbGlkCi0rbmFtZSByYWlzZXMgYSBAY29kZXtWYWx1ZUVycm9yfSBleGNl cHRpb24uCi0rQGVuZCBkZWZ1bgotKwotK0BkZWZ1biBNaXNzaW5nT2JqZmlsZUhhbmRsZXIuX19j YWxsX18gKHBzcGFjZSwgYnVpbGRfaWQsIGZpbGVuYW1lKQotKwotK1N1Yi1jbGFzc2VzIG11c3Qg b3ZlcnJpZGUgdGhlIEBjb2Rle19fY2FsbF9ffSBtZXRob2QuICBUaGUKLStAdmFye3BzcGFjZX0g YXJndW1lbnQgd2lsbCBiZSBhIEBjb2Rle2dkYi5Qcm9nc3BhY2V9Ci0rKEBweHJlZntQcm9nc3Bh Y2VzIEluIFB5dGhvbn0pLCB0aGlzIGlzIHRoZSBwcm9ncmFtIHNwYWNlIGluIHdoaWNoCi0rQHZh bHVle0dEQk59IGlzIGxvb2tpbmcgZm9yIHRoZSBtaXNzaW5nIGZpbGUuCi0rCi0rVGhlIEB2YXJ7 YnVpbGRfaWR9IGFyZ3VtZW50IGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGJ1aWxkLWlkIG9m IHRoZQotK2ZpbGUgdGhhdCBpcyBtaXNzaW5nLCB0aGlzIHdpbGwgYmUgaW4gdGhlIHNhbWUgZm9y bWF0IGFzIHJldHVybmVkIGJ5Ci0rQGNvZGV7T2JqZmlsZS5idWlsZF9pZH0gKEBweHJlZntPYmpm aWxlLmJ1aWxkX2lkfSkuCi0rCi0rVGhlIEB2YXJ7ZmlsZW5hbWV9IGFyZ3VtZW50IGNvbnRhaW5z IHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQKLStAdmFsdWV7R0RCTn0gaXMgbG9va2luZyBmb3Iu ICBUaGlzIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIHRvIGFsbG93Ci0raGFuZGxlcnMgdG8gZ2Vu ZXJhdGUgaW5mb3JtYXRpdmUgbWVzc2FnZXMgZm9yIHRoZSB1c2VyLiAgQSBoYW5kbGVyIGlzCi0r bm90IHJlcXVpcmVkIHRvIHBsYWNlIHRoZSBtaXNzaW5nIGZpbGUgYXQgdGhpcyBsb2NhdGlvbi4g IFRoZXJlIG1pZ2h0Ci0rYWxyZWFkeSBiZSBhIGZpbGUgcHJlc2VudCBhdCB0aGlzIGxvY2F0aW9u LCBidXQgaXQgbWlnaHQgbm90IG1hdGNoIHRoZQotK3JlcXVpcmVkIGJ1aWxkLWlkLCBpbiB3aGlj aCBjYXNlIEB2YWx1ZXtHREJOfSB3aWxsIGhhdmUgaWdub3JlZCBpdC4KLStJbiBzb21lIGxpbWl0 ZWQgY2FzZXMgQHZhbHVle0dEQk59IG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGVzdGFibGlzaCB0aGUK LStAdmFye2ZpbGVuYW1lfSBvZiB0aGUgZmlsZSBpdCBpcyBzZWFyY2hpbmcgZm9yLCBpbiB0aGlz IGNhc2UKLStAdmFsdWV7R0RCTn0gd2lsbCB1c2UgYSBzdHJpbmcgQHNhbXB7d2l0aCBidWlsZC1p ZCBAdmFye2J1aWxkX2lkfX0gYXMgYQotK3JlcGxhY2VtZW50LgotKwotK1RoZSByZXR1cm4gdmFs dWUgZnJvbSB0aGUgQGNvZGV7X19jYWxsX199IG1ldGhvZCBpbmRpY2F0ZXMgd2hhdAotK0B2YWx1 ZXtHREJOfSBzaG91bGQgZG8gbmV4dC4gIFRoZSBwb3NzaWJsZSByZXR1cm4gdmFsdWVzIGFyZToK LSsKLStAaXRlbWl6ZSBAYnVsbGV0Ci0rQGl0ZW0gQGNvZGV7Tm9uZX0KLSsKLStUaGlzIGluZGlj YXRlcyB0aGF0IHRoaXMgaGFuZGxlciBjb3VsZCBub3QgbG9jYXRlIHRoZSBtaXNzaW5nIGZpbGUg YW5kCi0rQHZhbHVle0dEQk59IHNob3VsZCBjYWxsIGFueSBvdGhlciByZWdpc3RlcmVkIGhhbmRs ZXJzLgotKwotK0BpdGVtIEBjb2Rle1RydWV9Ci0rCi0rVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGlz IGhhbmRsZXIgaGFzIGluc3RhbGxlZCB0aGUgbWlzc2luZyBmaWxlIGludG8gYQotK2xvY2F0aW9u IHdoZXJlIEB2YWx1ZXtHREJOfSB3b3VsZCBub3JtYWxseSBleHBlY3QgdG8gZmluZCBpdC4gIFRo ZQotK29ubHkgbG9jYXRpb24gaW4gd2hpY2ggQHZhbHVle0dEQk59IHdpbGwgbG9vayBpcyB3aXRo aW4gdGhlCi0rQGZpbGV7LmJ1aWxkLWlkfSBzdWItZGlyZWN0b3J5IHdpdGhpbiB0aGUgQHZhcntk ZWJ1Zy1maWxlLWRpcmVjdG9yeX0KLSsoQHB4cmVme2RlYnVnLWZpbGUtZGlyZWN0b3J5fSkuCi0r Ci0rQHZhbHVle0dEQk59IHdpbGwgcmVwZWF0IHRoZSBub3JtYWwgbG9va3VwIHByb2Nlc3MsIHdo aWNoIHNob3VsZCBub3cKLStmaW5kIHRoZSBwcmV2aW91c2x5IG1pc3NpbmcgZmlsZS4KLSsKLStJ ZiBAdmFsdWV7R0RCTn0gc3RpbGwgZG9lc24ndCBmaW5kIGZpbGUgYWZ0ZXIgdGhpcyBzZWNvbmQg YXR0ZW1wdCwKLSt0aGVuIHRoZSBQeXRob24gbWlzc2luZy1vYmpmaWxlIGhhbmRsZXJzIGFyZSBu b3QgaW52b2tlZCBhIHNlY29uZAotK3RpbWUsIHRoaXMgcHJldmVudHMgYSBiYWRseSBiZWhhdmVk IGhhbmRsZXIgY2F1c2luZyBAdmFsdWV7R0RCTn0gdG8KLStnZXQgc3R1Y2sgaW4gYSBsb29wLiAg QHZhbHVle0dEQk59IHdpbGwgY29udGludWUgd2l0aG91dCB0aGUgbWlzc2luZwotK2ZpbGUsIHRo b3VnaCB0aGlzIHdpbGwgZGVncmFkZSB0aGUgZGVidWdnaW5nIGV4cGVyaWVuY2UuCi0rCi0rQGl0 ZW0gQGNvZGV7RmFsc2V9Ci0rCi0rVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGlzIGhhbmRsZXIgaGFz IGRvbmUgZXZlcnl0aGluZyB0aGF0IGl0IGludGVuZHMKLSt0byBkbyBidXQgdGhlIG1pc3Npbmcg ZmlsZSBjb3VsZCBub3QgYmUgZm91bmQuICBAdmFsdWV7R0RCTn0gd2lsbCBub3QKLStjYWxsIGFu eSBvdGhlciByZWdpc3RlcmVkIGhhbmRsZXJzIHRvIGxvb2sgZm9yIHRoZSBtaXNzaW5nIGZpbGUu Ci0rQHZhbHVle0dEQk59IHdpbGwgY29udGludWUgd2l0aG91dCB0aGUgbWlzc2luZyBmaWxlLCB0 aG91Z2ggdGhpcyB3aWxsCi0rZGVncmFkZSB0aGUgZGVidWdnaW5nIGV4cGVyaWVuY2UuCi0rCi0r QGl0ZW0gQSBzdHJpbmcKLSsKLStUaGUgcmV0dXJuZWQgc3RyaW5nIHNob3VsZCBjb250YWluIGEg ZmlsZW5hbWUuICBAdmFsdWV7R0RCTn0gd2lsbCBub3QKLStjYWxsIGFueSBmdXJ0aGVyIHJlZ2lz dGVyZWQgaGFuZGxlcnMsIGFuZCB3aWxsIGluc3RlYWQgdXNlIHRoZQotK3JldHVybmVkIGZpbGVu YW1lIGFzIHRoZSBtaXNzaW5nIGZpbGUuCi0rQGVuZCBpdGVtaXplCi0rCi0rSW52b2tpbmcgdGhl IEBjb2Rle19fY2FsbF9ffSBtZXRob2QgZnJvbSB0aGlzIGJhc2UgY2xhc3Mgd2lsbCByYWlzZSBh Ci0rQGNvZGV7Tm90SW1wbGVtZW50ZWRFcnJvcn0gZXhjZXB0aW9uLgotK0BlbmQgZGVmdW4KLSsK LStAZGVmdmFyIE1pc3NpbmdPYmpmaWxlSGFuZGxlci5uYW1lCi0rQSByZWFkLW9ubHkgYXR0cmli dXRlIHdoaWNoIGlzIGEgc3RyaW5nLCB0aGUgbmFtZSBvZiB0aGlzIGhhbmRsZXIKLStwYXNzZWQg dG8gdGhlIEBjb2Rle19faW5pdF9ffSBtZXRob2QuCi0rQGVuZCBkZWZ2YXIKLSsKLStAZGVmdmFy IE1pc3NpbmdPYmpmaWxlSGFuZGxlci5lbmFibGVkCi0rQSBtb2RpZmlhYmxlIGF0dHJpYnV0ZSBj b250YWluaW5nIGEgYm9vbGVhbjsgd2hlbiBAY29kZXtUcnVlfSwgdGhlCi0raGFuZGxlciBpcyBl bmFibGVkLCBhbmQgd2lsbCBiZSB1c2VkIGJ5IEB2YWx1ZXtHREJOfS4gIFdoZW4KLStAY29kZXtG YWxzZX0sIHRoZSBoYW5kbGVyIGhhcyBiZWVuIGRpc2FibGVkLCBhbmQgd2lsbCBub3QgYmUgdXNl ZC4KLStAZW5kIGRlZnZhcgotK0BlbmQgZGVmdHAKLSsKLStAZGVmdW4gZ2RiLm1pc3Npbmdfb2Jq ZmlsZS5yZWdpc3Rlcl9oYW5kbGVyIChsb2N1cywgaGFuZGxlciwgcmVwbGFjZT1AY29kZXtGYWxz ZX0pCi0rUmVnaXN0ZXIgYSBuZXcgbWlzc2luZy1vYmpmaWxlIGhhbmRsZXIgd2l0aCBAdmFsdWV7 R0RCTn0uCi0rCi0rQHZhcntoYW5kbGVyfSBpcyBhbiBpbnN0YW5jZSBvZiBhIHN1Yi1jbGFzcyBv ZgotK0Bjb2Rle01pc3NpbmdPYmpmaWxlSGFuZGxlcn0sIG9yIGF0IGxlYXN0IGFuIGluc3RhbmNl IG9mIGFuIG9iamVjdCB0aGF0Ci0raGFzIHRoZSBzYW1lIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMg YXMgQGNvZGV7TWlzc2luZ09iamZpbGVIYW5kbGVyfS4KLSsKLStAdmFye2xvY3VzfSBzcGVjaWZp ZXMgdG8gd2hpY2ggaGFuZGxlciBsaXN0IHRvIHByZXBlbmQgQHZhcntoYW5kbGVyfS4KLStJdCBj YW4gYmUgZWl0aGVyIGEgQGNvZGV7Z2RiLlByb2dzcGFjZX0gKEBweHJlZntQcm9nc3BhY2VzIElu IFB5dGhvbn0pCi0rb3IgQGNvZGV7Tm9uZX0sIGluIHdoaWNoIGNhc2UgdGhlIGhhbmRsZXIgaXMg cmVnaXN0ZXJlZCBnbG9iYWxseS4gIFRoZQotK25ld2x5IHJlZ2lzdGVyZWQgQHZhcntoYW5kbGVy fSB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIGhhbmRsZXIKLStmcm9tIHRoZSBzYW1l IGxvY3VzLiAgVHdvIGhhbmRsZXJzIGluIHRoZSBzYW1lIGxvY3VzIGNhbm5vdCBoYXZlIHRoZQot K3NhbWUgbmFtZSwgYW4gYXR0ZW1wdCB0byBhZGQgYSBoYW5kbGVyIHdpdGggYW4gYWxyZWFkeSBl eGlzdGluZyBuYW1lCi0rcmFpc2VzIGFuIGV4Y2VwdGlvbiB1bmxlc3MgQHZhcntyZXBsYWNlfSBp cyBAY29kZXtUcnVlfSwgaW4gd2hpY2ggY2FzZQotK3RoZSBvbGQgaGFuZGxlciBpcyBkZWxldGVk IGFuZCB0aGUgbmV3IGhhbmRsZXIgaXMgcHJlcGVuZGVkIHRvIHRoZQotK3NlbGVjdGVkIGhhbmRs ZXIgbGlzdC4KLSsKLStAdmFsdWV7R0RCTn0gZmlyc3QgY2FsbHMgdGhlIGhhbmRsZXJzIGZvciB0 aGUgY3VycmVudCBwcm9ncmFtIHNwYWNlLAotK2FuZCB0aGVuIHRoZSBnbG9iYWxseSByZWdpc3Rl cmVkIGhhbmRsZXJzLiAgQXMgc29vbiBhcyBhIGhhbmRsZXIKLStyZXR1cm5zIGEgdmFsdWUgb3Ro ZXIgdGhhbiBAY29kZXtOb25lfSwgbm8gZnVydGhlciBoYW5kbGVycyBhcmUKLStjYWxsZWQuCi0r QGVuZCBkZWZ1bgotKwotK0BzdWJoZWFkaW5nIE1hbmFnaW5nIE1pc3NpbmctT2JqZmlsZSBIYW5k bGVycwotKwotK0B2YWx1ZXtHREJOfSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8g bWFuYWdlIHJlZ2lzdGVyZWQKLSttaXNzaW5nLW9iamZpbGUgaGFuZGxlcnM6Ci0rCi0rQHRhYmxl IEBjb2RlCi0rCi0rQGtpbmRleCBpbmZvIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVycwotK0BpdGVt IGluZm8gbWlzc2luZy1vYmpmaWxlLWhhbmRsZXJzIEBye1t9IEB2YXJ7bG9jdXN9IEBye1t9IEB2 YXJ7bmFtZS1yZWdleHB9IEBye119IEBye119Ci0rTGlzdHMgYWxsIHJlZ2lzdGVyZWQgbWlzc2lu Zy1vYmpmaWxlIGhhbmRsZXJzLiAgQXJndW1lbnRzIEB2YXJ7bG9jdXN9Ci0rYW5kIEB2YXJ7bmFt ZS1yZWdleHB9IGFyZSBib3RoIG9wdGlvbmFsIGFuZCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIKLSt3 aGljaCBoYW5kbGVycyBhcmUgbGlzdGVkLgotKwotK1RoZSBAdmFye2xvY3VzfSBhcmd1bWVudCBz aG91bGQgYmUgZWl0aGVyIEBrYmR7Z2xvYmFsfSwKLStAa2Jke3Byb2dzcGFjZX0sIG9yIHRoZSBu YW1lIG9mIGFuIG9iamVjdCBmaWxlLiAgT25seSBoYW5kbGVycwotK3JlZ2lzdGVyZWQgZm9yIHRo ZSBzcGVjaWZpZWQgbG9jdXMgd2lsbCBiZSBsaXN0ZWQuCi0rCi0rVGhlIEB2YXJ7bmFtZS1yZWdl eHB9IGlzIGEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gbWF0Y2ggYWdhaW5zdAotK2hhbmRs ZXIgbmFtZXMuCi0rCi0rQGtpbmRleCBkaXNhYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyCi0r QGl0ZW0gZGlzYWJsZSBtaXNzaW5nLW9iamZpbGUtaGFuZGxlciBAcntbfSBAdmFye2xvY3VzfSBA cntbfSBAdmFye25hbWUtcmVnZXhwfSBAcntdfSBAcntdfQotK1RoZSBAdmFye2xvY3VzfSBhbmQg QHZhcntuYW1lLXJlZ2V4cH0gYXJlIGludGVycHJldGVkIGFzIGluIEBrYmR7aW5mbwotK21pc3Np bmctb2JqZmlsZS1oYW5kbGVyc30gYWJvdmUsIGJ1dCBpbnN0ZWFkIG9mIGxpc3RpbmcgdGhlIG1h dGNoaW5nCi0raGFuZGxlcnMsIGFsbCBvZiB0aGUgbWF0Y2hpbmcgaGFuZGxlcnMgYXJlIGRpc2Fi bGVkLiAgVGhlCi0rQGNvZGV7ZW5hYmxlZH0gZmllbGQgb2YgZWFjaCBtYXRjaGluZyBoYW5kbGVy IGlzIHNldCB0byBAY29kZXtGYWxzZX0uCi0rCi0rQGtpbmRleCBlbmFibGUgbWlzc2luZy1vYmpm aWxlLWhhbmRsZXIKLStAaXRlbSBlbmFibGUgbWlzc2luZy1vYmpmaWxlLWhhbmRsZXIgQHJ7W30g QHZhcntsb2N1c30gQHJ7W30gQHZhcntuYW1lLXJlZ2V4cH0gQHJ7XX0gQHJ7XX0KLStUaGUgQHZh cntsb2N1c30gYW5kIEB2YXJ7bmFtZS1yZWdleHB9IGFyZSBpbnRlcnByZXRlZCBhcyBpbiBAa2Jk e2luZm8KLSttaXNzaW5nLW9iamZpbGUtaGFuZGxlcnN9IGFib3ZlLCBidXQgaW5zdGVhZCBvZiBs aXN0aW5nIHRoZSBtYXRjaGluZwotK2hhbmRsZXJzLCBhbGwgb2YgdGhlIG1hdGNoaW5nIGhhbmRs ZXJzIGFyZSBlbmFibGVkLiAgVGhlCi0rQGNvZGV7ZW5hYmxlZH0gZmllbGQgb2YgZWFjaCBtYXRj aGluZyBoYW5kbGVyIGlzIHNldCB0byBAY29kZXtUcnVlfS4KLStAZW5kIHRhYmxlCi0rCi0gQG5v ZGUgUHl0aG9uIEF1dG8tbG9hZGluZwotIEBzdWJzZWN0aW9uIFB5dGhvbiBBdXRvLWxvYWRpbmcK LSBAY2luZGV4IFB5dGhvbiBhdXRvLWxvYWRpbmcKLWRpZmYgLS1naXQgYS9nZGIvZXh0ZW5zaW9u LXByaXYuaCBiL2dkYi9leHRlbnNpb24tcHJpdi5oCi0tLS0gYS9nZGIvZXh0ZW5zaW9uLXByaXYu aAotKysrIGIvZ2RiL2V4dGVuc2lvbi1wcml2LmgKLUBAIC0yODcsOSArMjg3LDIyIEBAIHN0cnVj dCBleHRlbnNpb25fbGFuZ3VhZ2Vfb3BzCi0gICAvKiBHaXZlIGV4dGVuc2lvbiBsYW5ndWFnZXMg YSBjaGFuY2UgdG8gZGVhbCB3aXRoIG1pc3NpbmcgZGVidWcKLSAgICAgIGluZm9ybWF0aW9uLiAg T0JKRklMRSBpcyB0aGUgZmlsZSBmb3Igd2hpY2ggR0RCIHdhcyB1bmFibGUgdG8gZmluZAotICAg ICAgYW55IGRlYnVnIGluZm9ybWF0aW9uLiAgKi8KLS0gIGV4dF9sYW5nX21pc3NpbmdfZGVidWdp bmZvX3Jlc3VsdAotKyAgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdAotICAgICAoKmhhbmRs ZV9taXNzaW5nX2RlYnVnaW5mbykgKGNvbnN0IHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVm biAqLAotIAkJCQkgc3RydWN0IG9iamZpbGUgKm9iamZpbGUpOwotKwotKyAgLyogR2l2ZSBleHRl bnNpb24gbGFuZ3VhZ2VzIGEgY2hhbmNlIHRvIGRlYWwgd2l0aCBtaXNzaW5nIG9iamZpbGVzLgot KyAgICAgUFNQQUNFIGlzIHRoZSBwcm9ncmFtIHNwYWNlIGluIHdoaWNoIEdEQiBpcyBzZWFyY2hp bmcgZm9yIGEgbWlzc2luZwotKyAgICAgb2JqZmlsZSwgYW5kIHdpbGwgbm90IGJlIE5VTEwuICBC VUlMRF9JRCBpcyB0aGUgYnVpbGQtaWQgb2YgdGhlCi0rICAgICBvYmpmaWxlIHdlJ3JlIGxvb2tp bmcgZm9yLCBhbmQgd2lsbCBub3QgYmUgTlVMTC4gIEZJTEVOQU1FIGlzIHRoZSBuYW1lCi0rICAg ICBvZiB0aGUgZmlsZSB3ZSdyZSBsb29raW5nIGZvciwgYW5kIHdpbGwgbm90IGJlIE5VTEwuICBT ZWUKLSsgICAgIGV4dF9sYW5nX2ZpbmRfb2JqZmlsZV9mcm9tX2J1aWxkaWQgZm9yIHNvbWUgYWRk aXRpb25hbCBpbmZvcm1hdGlvbgotKyAgICAgYWJvdXQgdGhlIG1lYW5pbmcgb2YgRklMRU5BTUUu ICAqLwotKyAgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdAotKyAgICAoKmZpbmRfb2JqZmls ZV9mcm9tX2J1aWxkaWQpIChjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1YWdlX2RlZm4gKiwK LSsJCQkJICBwcm9ncmFtX3NwYWNlICpwc3BhY2UsCi0rCQkJCSAgY29uc3Qgc3RydWN0IGJmZF9i dWlsZF9pZCAqYnVpbGRfaWQsCi0rCQkJCSAgY29uc3QgY2hhciAqZmlsZW5hbWUpOwotIH07Ci0g Ci0gLyogU3RhdGUgbmVjZXNzYXJ5IHRvIHJlc3RvcmUgYSBzaWduYWwgaGFuZGxlciB0byBpdHMg cHJldmlvdXMgdmFsdWUuICAqLwotZGlmZiAtLWdpdCBhL2dkYi9leHRlbnNpb24uYyBiL2dkYi9l eHRlbnNpb24uYwotLS0tIGEvZ2RiL2V4dGVuc2lvbi5jCi0rKysgYi9nZGIvZXh0ZW5zaW9uLmMK LUBAIC0xMDQwLDcgKzEwNDAsNyBAQCBleHRfbGFuZ19wcmludF9pbnNuIChzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCwgQ09SRV9BRERSIGFkZHJlc3MsCi0gCi0gLyogU2VlIGV4dGVuc2lvbi5oLiAg Ki8KLSAKLS1leHRfbGFuZ19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQKLStleHRfbGFuZ19taXNz aW5nX2ZpbGVfcmVzdWx0Ci0gZXh0X2xhbmdfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvIChzdHJ1 Y3Qgb2JqZmlsZSAqb2JqZmlsZSkKLSB7Ci0gICBmb3IgKGNvbnN0IHN0cnVjdCBleHRlbnNpb25f bGFuZ3VhZ2VfZGVmbiAqZXh0bGFuZyA6IGV4dGVuc2lvbl9sYW5ndWFnZXMpCi1AQCAtMTA0OCw3 ICsxMDQ4LDcgQEAgZXh0X2xhbmdfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvIChzdHJ1Y3Qgb2Jq ZmlsZSAqb2JqZmlsZSkKLSAgICAgICBpZiAoZXh0bGFuZy0+b3BzID09IG51bGxwdHIKLSAJICB8 fCBleHRsYW5nLT5vcHMtPmhhbmRsZV9taXNzaW5nX2RlYnVnaW5mbyA9PSBudWxscHRyKQotIAlj b250aW51ZTsKLS0gICAgICBleHRfbGFuZ19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQgcmVzdWx0 Ci0rICAgICAgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCByZXN1bHQKLSAJPSBleHRsYW5n LT5vcHMtPmhhbmRsZV9taXNzaW5nX2RlYnVnaW5mbyAoZXh0bGFuZywgb2JqZmlsZSk7Ci0gICAg ICAgaWYgKCFyZXN1bHQuZmlsZW5hbWUgKCkuZW1wdHkgKCkgfHwgcmVzdWx0LnRyeV9hZ2FpbiAo KSkKLSAJcmV0dXJuIHJlc3VsdDsKLUBAIC0xMDU3LDYgKzEwNTcsMjggQEAgZXh0X2xhbmdfaGFu ZGxlX21pc3NpbmdfZGVidWdpbmZvIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSkKLSAgIHJldHVy biB7fTsKLSB9Ci0gCi0rLyogU2VlIGV4dGVuc2lvbi5oLiAgKi8KLSsKLStleHRfbGFuZ19taXNz aW5nX2ZpbGVfcmVzdWx0Ci0rZXh0X2xhbmdfZmluZF9vYmpmaWxlX2Zyb21fYnVpbGRpZCAocHJv Z3JhbV9zcGFjZSAqcHNwYWNlLAotKwkJCQkgICAgY29uc3Qgc3RydWN0IGJmZF9idWlsZF9pZCAq YnVpbGRfaWQsCi0rCQkJCSAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKLSt7Ci0rICBmb3IgKGNv bnN0IHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFuZyA6IGV4dGVuc2lvbl9s YW5ndWFnZXMpCi0rICAgIHsKLSsgICAgICBpZiAoZXh0bGFuZy0+b3BzID09IG51bGxwdHIKLSsJ ICB8fCBleHRsYW5nLT5vcHMtPmZpbmRfb2JqZmlsZV9mcm9tX2J1aWxkaWQgPT0gbnVsbHB0cikK LSsJY29udGludWU7Ci0rICAgICAgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCByZXN1bHQK LSsJPSBleHRsYW5nLT5vcHMtPmZpbmRfb2JqZmlsZV9mcm9tX2J1aWxkaWQgKGV4dGxhbmcsIHBz cGFjZSwgYnVpbGRfaWQsCi0rCQkJCQkJICAgZmlsZW5hbWUpOwotKyAgICAgIGlmICghcmVzdWx0 LmZpbGVuYW1lICgpLmVtcHR5ICgpIHx8IHJlc3VsdC50cnlfYWdhaW4gKCkpCi0rCXJldHVybiBy ZXN1bHQ7Ci0rICAgIH0KLSsKLSsgIHJldHVybiB7fTsKLSt9Ci0rCi0gLyogQ2FsbGVkIHZpYSBh biBvYnNlcnZlciBiZWZvcmUgZ2RiIHByaW50cyBpdHMgcHJvbXB0LgotICAgIEl0ZXJhdGUgb3Zl ciB0aGUgZXh0ZW5zaW9uIGxhbmd1YWdlcyBnaXZpbmcgdGhlbSBhIGNoYW5jZSB0bwotICAgIGNo YW5nZSB0aGUgcHJvbXB0LiAgVGhlIGZpcnN0IG9uZSB0byBjaGFuZ2UgdGhlIHByb21wdCB3aW5z LAotZGlmZiAtLWdpdCBhL2dkYi9leHRlbnNpb24uaCBiL2dkYi9leHRlbnNpb24uaAotLS0tIGEv Z2RiL2V4dGVuc2lvbi5oCi0rKysgYi9nZGIvZXh0ZW5zaW9uLmgKLUBAIC0zNiw2ICszNiw3IEBA IHN0cnVjdCB1aV9maWxlOwotIHN0cnVjdCB1aV9vdXQ7Ci0gc3RydWN0IHZhbHVlOwotIHN0cnVj dCB2YWx1ZV9wcmludF9vcHRpb25zOwotK3N0cnVjdCBwcm9ncmFtX3NwYWNlOwotIAotIC8qIEEg ZnVuY3Rpb24gdG8gbG9hZCBhbmQgcHJvY2VzcyBhIHNjcmlwdCBmaWxlLgotICAgIFRoZSBmaWxl IGhhcyBiZWVuIG9wZW5lZCBhbmQgaXMgcmVhZHkgdG8gYmUgcmVhZCBmcm9tIHRoZSBiZWdpbm5p bmcuCi1AQCAtMzU4LDIzICszNTksMjMgQEAgZXh0ZXJuIHN0ZDo6b3B0aW9uYWw8aW50PiBleHRf bGFuZ19wcmludF9pbnNuCi0gICAgaXQuICBBbmQgdGhlIHRoaXJkIG9wdGlvbiBpcyBmb3IgdGhl IGV4dGVuc2lvbiB0byBqdXN0IHJldHVybiBhIG51bGwKLSAgICByZXN1bHQsIGluZGljYXRpb24g dGhlcmUgaXMgbm90aGluZyB0aGUgZXh0ZW5zaW9uIGNhbiBkbyB0byBwcm92aWRlIHRoZQotICAg IG1pc3NpbmcgZGVidWcgaW5mb3JtYXRpb24uICAqLwotLXN0cnVjdCBleHRfbGFuZ19taXNzaW5n X2RlYnVnaW5mb19yZXN1bHQKLStzdHJ1Y3QgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdAot IHsKLSAgIC8qIERlZmF1bHQgcmVzdWx0LiAgVGhlIGV4dGVuc2lvbiB3YXMgdW5hYmxlIHRvIHBy b3ZpZGUgdGhlIG1pc3NpbmcgZGVidWcKLSAgICAgIGluZm8uICAqLwotLSAgZXh0X2xhbmdfbWlz c2luZ19kZWJ1Z2luZm9fcmVzdWx0ICgpCi0rICBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0 ICgpCi0gICB7IC8qIE5vdGhpbmcuICAqLyB9Ci0gCi0gICAvKiBXaGVuIFRSWV9BR0FJTiBpcyB0 cnVlIEdEQiBzaG91bGQgdHJ5IHNlYXJjaGluZyBhZ2FpbiwgdGhlIGV4dGVuc2lvbgotICAgICAg bWF5IGhhdmUgaW5zdGFsbGVkIHRoZSBtaXNzaW5nIGRlYnVnIGluZm8gaW50byBhIHN1aXRhYmxl IGxvY2F0aW9uLgotICAgICAgV2hlbiBUUllfQUdBSU4gaXMgZmFsc2UgdGhpcyBpcyBlcXVpdmFs ZW50IHRvIHRoZSBkZWZhdWx0LCBubwotICAgICAgYXJndW1lbnQsIGNvbnN0cnVjdG9yLiAgKi8K LS0gIGV4dF9sYW5nX21pc3NpbmdfZGVidWdpbmZvX3Jlc3VsdCAoYm9vbCB0cnlfYWdhaW4pCi0r ICBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0IChib29sIHRyeV9hZ2FpbikKLSAgICAgOiBt X3RyeV9hZ2FpbiAodHJ5X2FnYWluKQotICAgeyAvKiBOb3RoaW5nLiAgKi8gfQotIAotICAgLyog TG9vayBpbiBGSUxFTkFNRSBmb3IgdGhlIG1pc3NpbmcgZGVidWcgaW5mby4gICovCi0tICBleHRf bGFuZ19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQgKHN0ZDo6c3RyaW5nICYmZmlsZW5hbWUpCi0r ICBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0IChzdGQ6OnN0cmluZyAmJmZpbGVuYW1lKQot ICAgICA6IG1fZmlsZW5hbWUgKHN0ZDo6bW92ZSAoZmlsZW5hbWUpKQotICAgeyAvKiBOb3RoaW5n LiAgKi8gfQotIAotQEAgLTQwNCw5ICs0MDUsMjggQEAgc3RydWN0IGV4dF9sYW5nX21pc3Npbmdf ZGVidWdpbmZvX3Jlc3VsdAotIAotIC8qIENhbGxlZCB3aGVuIEdEQiBmYWlsZWQgdG8gZmluZCBh bnkgZGVidWcgaW5mb3JtYXRpb24gZm9yIE9CSkZJTEUuICAqLwotIAotLWV4dGVybiBleHRfbGFu Z19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQgZXh0X2xhbmdfaGFuZGxlX21pc3NpbmdfZGVidWdp bmZvCi0rZXh0ZXJuIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgZXh0X2xhbmdfaGFuZGxl X21pc3NpbmdfZGVidWdpbmZvCi0gICAoc3RydWN0IG9iamZpbGUgKm9iamZpbGUpOwotIAotKy8q IENhbGxlZCB3aGVuIEdEQiBvcGVucyBhIGNvcmUtZmlsZSB0byBmaW5kIGFueSBvYmplY3QgZmls ZXMgZm9yIHdoaWNoIGEKLSsgICBidWlsZC1pZCBjb3VsZCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUg Y29yZS1maWxlLCBidXQgdGhlIG1hdGNoaW5nIGZpbGUKLSsgICBjb3VsZCBub3Qgb3RoZXJ3aXNl IGJlIGZvdW5kIGJ5IEdEQi4KLSsKLSsgICBQU1BBQ0UgaXMgdGhlIHByb2dyYW0gc3BhY2UgaW4g d2hpY2ggR0RCIGlzIG9wZW5pbmcgdGhlIGNvcmUtZmlsZSBhbmQKLSsgICBpcyBsb29raW5nIGZv ciBhIG1pc3Npbmcgb2JqZWN0IGZpbGUuICBCVUlMRF9JRCBpcyB0aGUgYnVpbGQtaWQgb2YgdGhl Ci0rICAgZmlsZSBiZWluZyBsb29rZWQgZm9yLCBhbmQgd2lsbCBub3QgYmUgTlVMTC4gIEZJTEVO QU1FIGlzIHRoZSBuYW1lIG9mCi0rICAgdGhlIGZpbGUgR0RCIGlzIGxvb2tpbmcgZm9yLCB0aGlz IHdpbGwgbm90IGJlIE5VTEwuICBUaGUgRklMRU5BTUUgaXMKLSsgICBwcm92aWRlZCBvbmx5IGZv ciBjcmVhdGluZyBoZWxwZnVsIG1lc3NhZ2VzIGZvciB0aGUgdXNlci4gIEZJTEVOQU1FCi0rICAg bWlnaHQgYWxyZWFkeSBleGlzdCBvbiBkaXNrIGJ1dCBoYXZlIHRoZSB3cm9uZyBidWlsZC1pZCwg b2YgRklMRU5BTUUKLSsgICBtaWdodCBub3QgZXhpc3Qgb24gZGlzay4gIElmIHRoZSBtaXNzaW5n IG9iamZpbGUgY2FuIGJlIGZvdW5kIHRoZW4gaXQKLSsgICBkb2VzIG5vdCBoYXZlIHRvIGJlIHBs YWNlZCBhdCB0aGUgbG9jYXRpb24gRklMRU5BTUUuCi0rCi0rICAgVGhlIHJldHVybmVkIG9iamVj dCBpbmRpY2F0ZXMgaWYgdGhlIGZpbGUgY291bGQgYmUgZm91bmQgb3Igbm90LiAgKi8KLSsKLStl eHRlcm4gZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCBleHRfbGFuZ19maW5kX29iamZpbGVf ZnJvbV9idWlsZGlkCi0rICAocHJvZ3JhbV9zcGFjZSAqcHNwYWNlLCBjb25zdCBzdHJ1Y3QgYmZk X2J1aWxkX2lkICpidWlsZF9pZCwKLSsgICBjb25zdCBjaGFyICpmaWxlbmFtZSk7Ci0rCi0gI2lm IEdEQl9TRUxGX1RFU1QKLSBuYW1lc3BhY2Ugc2VsZnRlc3RzIHsKLSBleHRlcm4gdm9pZCAoKmhv b2tfc2V0X2FjdGl2ZV9leHRfbGFuZykgKCk7Ci1kaWZmIC0tZ2l0IGEvZ2RiL2dkYmNvcmUuaCBi L2dkYi9nZGJjb3JlLmgKLS0tLSBhL2dkYi9nZGJjb3JlLmgKLSsrKyBiL2dkYi9nZGJjb3JlLmgK LUBAIC0xOTYsNCArMTk2LDcwIEBAIGNsYXNzIHRocmVhZF9zZWN0aW9uX25hbWUKLSAgIHN0ZDo6 c3RyaW5nIG1fc3RvcmFnZTsKLSB9OwotIAotKy8qIFR5cGUgcmV0dXJuZWQgZnJvbSBjb3JlX3Rh cmdldF9maW5kX21hcHBlZF9maWxlLiAgSG9sZHMgaW5mb3JtYXRpb24KLSsgICBhYm91dCBhIG1h cHBlZCBmaWxlIHRoYXQgd2FzIHByb2Nlc3NlZCB3aGVuIGEgY29yZSBmaWxlIHdhcyBpbml0aWFs bHkKLSsgICBsb2FkZWQuICAqLwotK3N0cnVjdCBjb3JlX3RhcmdldF9tYXBwZWRfZmlsZV9pbmZv Ci0rewotKyAgLyogQ29uc3RydWN0b3IuICBCVUlMRF9JRCBpcyBub3QgbnVsbHB0ciwgYW5kIGlz IHRoZSBidWlsZC1pZCBmb3IgdGhlCi0rICAgICBtYXBwZWQgZmlsZS4gIEZJTEVOQU1FIGlzIHRo ZSBsb2NhdGlvbiBvZiB0aGUgZmlsZSB0aGF0IEdEQiBsb2FkZWQgdG8KLSsgICAgIHByb3ZpZGUg dGhlIG1hcHBlZCBmaWxlLiAgVGhpcyBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbmFtZSBv ZiB0aGUKLSsgICAgIG1hcHBlZCBmaWxlIG1lbnRpb25lZCBpbiB0aGUgY29yZSBmaWxlLCBlLmcu IGlmIEdEQiBkb3dubG9hZHMgYSBmaWxlCi0rICAgICBmcm9tIGRlYnVnaW5mb2QgdGhlbiBGSUxF TkFNRSB3b3VsZCBwb2ludCBpbnRvIHRoZSBkZWJ1Z2luZm9kIGNsaWVudAotKyAgICAgY2FjaGUu ICBUaGUgRklMRU5BTUUgY2FuIGJlIHRoZSBlbXB0eSBzdHJpbmcgaWYgR0RCIHdhcyB1bmFibGUg dG8gZmluZAotKyAgICAgYSBmaWxlIHRvIHByb3ZpZGUgdGhlIG1hcHBlZCBmaWxlLiAgKi8KLSsK LSsgIGNvcmVfdGFyZ2V0X21hcHBlZF9maWxlX2luZm8gKGNvbnN0IGJmZF9idWlsZF9pZCAqYnVp bGRfaWQsCi0rCQkJCWNvbnN0IHN0ZDo6c3RyaW5nIGZpbGVuYW1lKQotKyAgICA6IG1fYnVpbGRf aWQgKGJ1aWxkX2lkKSwKLSsgICAgICBtX2ZpbGVuYW1lIChmaWxlbmFtZSkKLSsgIHsKLSsgICAg Z2RiX2Fzc2VydCAobV9idWlsZF9pZCAhPSBudWxscHRyKTsKLSsgIH0KLSsKLSsgIC8qIFRoZSBi dWlsZC1pZCBmb3IgdGhpcyBtYXBwZWQgZmlsZS4gICovCi0rCi0rICBjb25zdCBiZmRfYnVpbGRf aWQgKgotKyAgYnVpbGRfaWQgKCkgY29uc3QKLSsgIHsKLSsgICAgcmV0dXJuIG1fYnVpbGRfaWQ7 Ci0rICB9Ci0rCi0rICAvKiBUaGUgZmlsZSBHREIgdXNlZCB0byBwcm92aWRlIHRoaXMgbWFwcGVk IGZpbGUuICAqLwotKwotKyAgY29uc3Qgc3RkOjpzdHJpbmcgJgotKyAgZmlsZW5hbWUgKCkgY29u c3QKLSsgIHsKLSsgICAgcmV0dXJuIG1fZmlsZW5hbWU7Ci0rICB9Ci0rCi0rcHJpdmF0ZToKLSsg IGNvbnN0IGJmZF9idWlsZF9pZCAqbV9idWlsZF9pZCA9IG51bGxwdHI7Ci0rICBjb25zdCBzdGQ6 OnN0cmluZyBtX2ZpbGVuYW1lOwotK307Ci0rCi0rLyogSWYgdGhlIGN1cnJlbnQgaW5mZXJpb3Ig aGFzIGEgY29yZV90YXJnZXQgZm9yIGl0cyBwcm9jZXNzIHRhcmdldCwgdGhlbgotKyAgIGxvb2t1 cCBpbmZvcm1hdGlvbiBhYm91dCBhIG1hcHBlZCBmaWxlIHRoYXQgd2FzIGRpc2NvdmVyZWQgd2hl biB0aGUKLSsgICBjb3JlIGZpbGUgd2FzIGxvYWRlZC4KLSsKLSsgICBUaGUgRklMRU5BTUUgaXMg dGhlIGZpbGUgd2UncmUgbG9va2luZyBmb3IuICBUaGUgQUREUiwgaWYgcHJvdmlkZWQsIGlzIGEK LSsgICBtYXBwZWQgYWRkcmVzcyB3aXRoaW4gdGhlIGluZmVyaW9yIHdoaWNoIGlzIGtub3duIHRv IGJlIHBhcnQgb2YgdGhlIGZpbGUKLSsgICB3ZSBhcmUgbG9va2luZyBmb3IuCi0rCi0rICAgQXMg YW4gZXhhbXBsZSwgd2hlbiBsb2FkaW5nIHNoYXJlZCBsaWJyYXJpZXMgdGhpcyBmdW5jdGlvbiBj YW4gYmUKLSsgICBjYWxsZWQsIGluIHRoYXQgY2FzZSBGSUxFTkFNRSB3aWxsIGJlIHRoZSBuYW1l IG9mIHRoZSBzaGFyZWQgbGlicmFyeQotKyAgIHRoYXQgR0RCIGlzIHRyeWluZyB0byBsb2FkIGFu ZCBBRERSIHdpbGwgYmUgYW4gaW5mZXJpb3IgYWRkcmVzcyB3aGljaCBpcwotKyAgIHBhcnQgb2Yg dGhlIHNoYXJlZCBsaWJyYXJ5IHdlIGFyZSBsb29raW5nIGZvci4KLSsKLSsgICBUaGlzIGZ1bmN0 aW9uIGxvb2tzIGZvciBhIG1hcHBlZCBmaWxlIHdoaWNoIG1hdGNoZXMgRklMRU5BTUUgYW5kL29y Ci0rICAgd2hpY2ggY292ZXJzIEFERFIgYW5kIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhh dCBmaWxlLgotKwotKyAgIFRoZSByZXR1cm5lZCBpbmZvcm1hdGlvbiBpbmNsdWRlcyB0aGUgbmFt ZSBvZiB0aGUgbWFwcGVkIGZpbGUgaWYga25vd24KLSsgICBhbmQgdGhlIGJ1aWxkLWlkIGZvciB0 aGUgbWFwcGVkIGZpbGUgaWYga25vd24uCi0rCi0rICAgKi8KLStzdGQ6Om9wdGlvbmFsPGNvcmVf dGFyZ2V0X21hcHBlZF9maWxlX2luZm8+Ci0rY29yZV90YXJnZXRfZmluZF9tYXBwZWRfZmlsZSAo Y29uc3QgY2hhciAqZmlsZW5hbWUsCi0rCQkJICAgICAgc3RkOjpvcHRpb25hbDxDT1JFX0FERFI+ IGFkZHIpOwotKwotICNlbmRpZiAvKiAhZGVmaW5lZCAoR0RCQ09SRV9IKSAqLwotZGlmZiAtLWdp dCBhL2dkYi9pbmYtY2hpbGQuYyBiL2dkYi9pbmYtY2hpbGQuYwotLS0tIGEvZ2RiL2luZi1jaGls ZC5jCi0rKysgYi9nZGIvaW5mLWNoaWxkLmMKLUBAIC0zMjAsNiArMzIwLDIxIEBAIGluZl9jaGls ZF90YXJnZXQ6OmZpbGVpb19mc3RhdCAoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc2IsIGZpbGVpb19l cnJvciAqdGFyZ2V0X2VyCi0gICByZXR1cm4gcmV0OwotIH0KLSAKLSsvKiBJbXBsZW1lbnRhdGlv biBvZiB0b19maWxlaW9fc3RhdC4gICovCi0rCi0raW50Ci0raW5mX2NoaWxkX3RhcmdldDo6Zmls ZWlvX3N0YXQgKHN0cnVjdCBpbmZlcmlvciAqaW5mLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLSsJ CQkgICAgICAgc3RydWN0IHN0YXQgKnNiLCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubykKLSt7 Ci0rICBpbnQgcmV0OwotKwotKyAgcmV0ID0gbHN0YXQgKGZpbGVuYW1lLCBzYik7Ci0rICBpZiAo cmV0ID09IC0xKQotKyAgICAqdGFyZ2V0X2Vycm5vID0gaG9zdF90b19maWxlaW9fZXJyb3IgKGVy cm5vKTsKLSsKLSsgIHJldHVybiByZXQ7Ci0rfQotKwotIC8qIEltcGxlbWVudGF0aW9uIG9mIHRv X2ZpbGVpb19jbG9zZS4gICovCi0gCi0gaW50Ci1kaWZmIC0tZ2l0IGEvZ2RiL2luZi1jaGlsZC5o IGIvZ2RiL2luZi1jaGlsZC5oCi0tLS0gYS9nZGIvaW5mLWNoaWxkLmgKLSsrKyBiL2dkYi9pbmYt Y2hpbGQuaAotQEAgLTgxLDYgKzgxLDggQEAgY2xhc3MgaW5mX2NoaWxkX3RhcmdldAotICAgaW50 IGZpbGVpb19wcmVhZCAoaW50IGZkLCBnZGJfYnl0ZSAqcmVhZF9idWYsIGludCBsZW4sCi0gCQkg ICAgVUxPTkdFU1Qgb2Zmc2V0LCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubykgb3ZlcnJpZGU7 Ci0gICBpbnQgZmlsZWlvX2ZzdGF0IChpbnQgZmQsIHN0cnVjdCBzdGF0ICpzYiwgZmlsZWlvX2Vy cm9yICp0YXJnZXRfZXJybm8pIG92ZXJyaWRlOwotKyAgaW50IGZpbGVpb19zdGF0IChzdHJ1Y3Qg aW5mZXJpb3IgKmluZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0rCQkgICBzdHJ1Y3Qgc3RhdCAq c2IsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKSBvdmVycmlkZTsKLSAgIGludCBmaWxlaW9f Y2xvc2UgKGludCBmZCwgZmlsZWlvX2Vycm9yICp0YXJnZXRfZXJybm8pIG92ZXJyaWRlOwotICAg aW50IGZpbGVpb191bmxpbmsgKHN0cnVjdCBpbmZlcmlvciAqaW5mLAotIAkJICAgICBjb25zdCBj aGFyICpmaWxlbmFtZSwKLWRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18u cHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvX19pbml0X18ucHkKLS0tLSBhL2dkYi9weXRob24vbGli L2dkYi9fX2luaXRfXy5weQotKysrIGIvZ2RiL3B5dGhvbi9saWIvZ2RiL19faW5pdF9fLnB5Ci1A QCAtODcsOCArODcsOSBAQCB4bWV0aG9kcyA9IFtdCi0gZnJhbWVfZmlsdGVycyA9IHt9Ci0gIyBJ bml0aWFsIGZyYW1lIHVud2luZGVycy4KLSBmcmFtZV91bndpbmRlcnMgPSBbXQotLSMgSW5pdGlh bCBtaXNzaW5nIGRlYnVnIGhhbmRsZXJzLgotLW1pc3NpbmdfZGVidWdfaGFuZGxlcnMgPSBbXQot KyMgVGhlIG1pc3NpbmcgZmlsZSBoYW5kbGVycy4gIEVhY2ggaXRlbSBpcyBhIHR1cGxlIHdpdGgg dGhlIGZvcm0KLSsjIChUWVBFLCBIQU5ETEVSKSB3aGVyZSBUWVBFIGlzIGEgc3RyaW5nIGVpdGhl ciAnZGVidWcnIG9yICdvYmpmaWxlJy4KLSttaXNzaW5nX2ZpbGVfaGFuZGxlcnMgPSBbXQotIAot IAotIGRlZiBfZXhlY3V0ZV91bndpbmRlcnMocGVuZGluZ19mcmFtZSk6Ci1AQCAtMjcxLDYgKzI3 Miw2MSBAQCBjbGFzcyBUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6Ci0gICAgICAgICAgICAgc3Vw ZXIoKS5zdGFydCgpCi0gCi0gCi0rZGVmIF9maWx0ZXJfbWlzc2luZ19maWxlX2hhbmRsZXJzKGhh bmRsZXJzLCBoYW5kbGVyX3R5cGUpOgotKyAgICAiIiJFYWNoIGxpc3Qgb2YgbWlzc2luZyBmaWxl IGhhbmRsZXJzIGlzIGEgbGlzdCBvZiB0dXBsZXMsIHRoZSBmaXJzdAotKyAgICBpdGVtIGluIHRo ZSB0dXBsZSBpcyBhIHN0cmluZyBlaXRoZXIgJ2RlYnVnJyBvciAnb2JqZmlsZScgdG8KLSsgICAg aW5kaWNhdGUgd2hhdCB0eXBlIG9mIGhhbmRsZXIgaXQgaXMuICBUaGUgc2Vjb25kIGl0ZW0gaW4g dGhlIHR1cGxlCi0rICAgIGlzIHRoZSBhY3R1YWwgaGFuZGxlciBvYmplY3QuCi0rCi0rICAgIFRo aXMgZnVuY3Rpb24gdGFrZXMgSEFORExFUl9UWVBFIHdoaWNoIGlzIGEgc3RyaW5nLCBlaXRoZXIg J2RlYnVnJwotKyAgICBvciAnb2JqZmlsZScgYW5kIEhBTkRMRVJTLCBhIGxpc3Qgb2YgdHVwbGVz LiAgVGhlIGZ1bmN0aW9uIHJldHVybnMKLSsgICAgYW4gaXRlcmFibGUgb3ZlciBhbGwgb2YgdGhl IGhhbmRsZXIgb2JqZWN0cyAoZXh0cmFjdGVkIGZyb20gdGhlCi0rICAgIHR1cGxlcykgd2hpY2gg bWF0Y2ggSEFORExFUl9UWVBFLgotKyAgICAiIiIKLSsKLSsgICAgcmV0dXJuIG1hcChsYW1iZGEg dDogdFsxXSwgZmlsdGVyKGxhbWJkYSB0OiB0WzBdID09IGhhbmRsZXJfdHlwZSwgaGFuZGxlcnMp KQotKwotKwotK2RlZiBfaGFuZGxlX21pc3NpbmdfZmlsZXMocHNwYWNlLCBoYW5kbGVyX3R5cGUs IGNiKToKLSsgICAgIiIiSGVscGVyIGZvciBfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvIGFuZCBf aGFuZGxlX21pc3Npbmdfb2JqZmlsZS4KLSsKLSsgICAgQXJndW1lbnRzOgotKyAgICAgICAgcHNw YWNlOiBUaGUgZ2RiLlByb2dzcGFjZSBpbiB3aGljaCB3ZSdyZSBvcGVyYXRpbmcuICBVc2VkIHRv Ci0rICAgICAgICAgICAgbG9va3VwIHByb2dyYW0gc3BhY2Ugc3BlY2lmaWMgaGFuZGxlcnMuCi0r ICAgICAgICBoYW5kbGVyX3R5cGU6IEEgc3RyaW5nLCBlaXRoZXIgJ2RlYnVnJyBvciAnb2JqZmls ZScsIHRoaXMgaXMgdGhlCi0rICAgICAgICAgICAgdHlwZSBvZiBoYW5kbGVyIHdlJ3JlIGxvb2tp bmcgZm9yLgotKyAgICAgICAgY2I6IEEgY2FsbGJhY2sgd2hpY2ggdGFrZXMgYSBoYW5kbGVyIGFu ZCByZXR1cm5zIHRoZSByZXN1bHQgb2YKLSsgICAgICAgICAgICBjYWxsaW5nIHRoZSBoYW5kbGVy LgotKwotKyAgICBSZXR1cm5zOgotKyAgICAgICAgTm9uZTogTm8gc3VpdGFibGUgZmlsZSBjb3Vs ZCBiZSBmb3VuZC4KLSsgICAgICAgIEZhbHNlOiBBIGhhbmRsZXIgaGFzIGRlY2lkZWQgdGhhdCB0 aGUgcmVxdWVzdGVkIGZpbGUgY2Fubm90IGJlCi0rICAgICAgICAgICAgICAgIGZvdW5kLCBhbmQg bm8gZnVydGhlciBzZWFyY2hpbmcgc2hvdWxkIGJlIGRvbmUuCi0rICAgICAgICBUcnVlOiBUaGUg ZmlsZSBoYXMgYmVlbiBmb3VuZCBhbmQgaW5zdGFsbGVkIGluIGEgbG9jYXRpb24KLSsgICAgICAg ICAgICAgICAgd2hlcmUgR0RCIHdvdWxkIG5vcm1hbGx5IGxvb2sgZm9yIGl0LiAgR0RCIHNob3Vs ZAotKyAgICAgICAgICAgICAgICByZXBlYXQgaXRzIGxvb2t1cCBwcm9jZXNzLCB0aGUgZmlsZSBz aG91bGQgbm93IGJlIGluCi0rICAgICAgICAgICAgICAgIHBsYWNlLgotKyAgICAgICAgQSBzdHJp bmc6IFRoaXMgaXMgdGhlIGZpbGVuYW1lIG9mIHdoZXJlIHRoZSBtaXNzaW5nIGZpbGUgY2FuCi0r ICAgICAgICAgICAgICAgIGJlIGZvdW5kLgotKyAgICAiIiIKLSsKLSsgICAgZm9yIGhhbmRsZXIg aW4gX2ZpbHRlcl9taXNzaW5nX2ZpbGVfaGFuZGxlcnMoCi0rICAgICAgICBwc3BhY2UubWlzc2lu Z19maWxlX2hhbmRsZXJzLCBoYW5kbGVyX3R5cGUKLSsgICAgKToKLSsgICAgICAgIGlmIGhhbmRs ZXIuZW5hYmxlZDoKLSsgICAgICAgICAgICByZXN1bHQgPSBjYihoYW5kbGVyKQotKyAgICAgICAg ICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKLSsgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs dAotKwotKyAgICBmb3IgaGFuZGxlciBpbiBfZmlsdGVyX21pc3NpbmdfZmlsZV9oYW5kbGVycyht aXNzaW5nX2ZpbGVfaGFuZGxlcnMsIGhhbmRsZXJfdHlwZSk6Ci0rICAgICAgICBpZiBoYW5kbGVy LmVuYWJsZWQ6Ci0rICAgICAgICAgICAgcmVzdWx0ID0gY2IoaGFuZGxlcikKLSsgICAgICAgICAg ICBpZiByZXN1bHQgaXMgbm90IE5vbmU6Ci0rICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQK LSsKLSsgICAgcmV0dXJuIE5vbmUKLSsKLSsKLSBkZWYgX2hhbmRsZV9taXNzaW5nX2RlYnVnaW5m byhvYmpmaWxlKToKLSAgICAgIiIiSW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVkIGZyb20gR0RCIHRv IGV4ZWN1dGUgbWlzc2luZyBkZWJ1ZwotICAgICBoYW5kbGVycy4KLUBAIC0yOTMsMTggKzM0OSw0 NiBAQCBkZWYgX2hhbmRsZV9taXNzaW5nX2RlYnVnaW5mbyhvYmpmaWxlKToKLSAgICAgICAgIEEg c3RyaW5nOiBUaGlzIGlzIHRoZSBmaWxlbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyB0aGUKLSAg ICAgICAgICAgICAgICAgICByZXF1aXJlZCBkZWJ1ZyBpbmZvcm1hdGlvbi4KLSAgICAgIiIiCi0r Ci0gICAgIHBzcGFjZSA9IG9iamZpbGUucHJvZ3NwYWNlCi0gCi0tICAgIGZvciBoYW5kbGVyIGlu IHBzcGFjZS5taXNzaW5nX2RlYnVnX2hhbmRsZXJzOgotLSAgICAgICAgaWYgaGFuZGxlci5lbmFi bGVkOgotLSAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIob2JqZmlsZSkKLS0gICAgICAgICAg ICBpZiByZXN1bHQgaXMgbm90IE5vbmU6Ci0tICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQK LSsgICAgcmV0dXJuIF9oYW5kbGVfbWlzc2luZ19maWxlcyhwc3BhY2UsICJkZWJ1ZyIsIGxhbWJk YSBoOiBoKG9iamZpbGUpKQotIAotLSAgICBmb3IgaGFuZGxlciBpbiBtaXNzaW5nX2RlYnVnX2hh bmRsZXJzOgotLSAgICAgICAgaWYgaGFuZGxlci5lbmFibGVkOgotLSAgICAgICAgICAgIHJlc3Vs dCA9IGhhbmRsZXIob2JqZmlsZSkKLS0gICAgICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6 Ci0tICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKLSAKLS0gICAgcmV0dXJuIE5vbmUKLStk ZWYgX2hhbmRsZV9taXNzaW5nX29iamZpbGUocHNwYWNlLCBidWlsZGlkLCBmaWxlbmFtZSk6Ci0r ICAgICIiIkludGVybmFsIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIEdEQiB0byBleGVjdXRlIG1pc3Np bmcgb2JqZmlsZQotKyAgICBoYW5kbGVycy4KLSsKLSsgICAgUnVuIGVhY2ggb2YgdGhlIGN1cnJl bnRseSByZWdpc3RlcmVkLCBhbmQgZW5hYmxlZCBtaXNzaW5nIG9iamZpbGUKLSsgICAgaGFuZGxl ciBvYmplY3RzIGZvciB0aGUgZ2RiLlByb2dzcGFjZSBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQs Ci0rICAgIGFuZCB0aGVuIGZyb20gdGhlIGdsb2JhbCBsaXN0LiAgU3RvcCBhZnRlciB0aGUgZmly c3QgaGFuZGxlciB0aGF0Ci0rICAgIHJldHVybnMgYSByZXN1bHQgb3RoZXIgdGhhbiBOb25lLgot KwotKyAgICBBcmd1bWVudHM6Ci0rICAgICAgICBwc3BhY2U6IEEgZ2RiLlByb2dzcGFjZSBmb3Ig d2hpY2ggdGhlIG1pc3Npbmcgb2JqZmlsZSBoYW5kbGVycwotKyAgICAgICAgICAgICAgICBzaG91 bGQgYmUgcnVuLiAgVGhpcyBpcyB0aGUgcHJvZ3JhbSBzcGFjZSBpbiB3aGljaCBhbgotKyAgICAg ICAgICAgICAgICBvYmpmaWxlIHdhcyBmb3VuZCB0byBiZSBtaXNzaW5nLgotKyAgICAgICAgYnVp bGRpZDogQSBzdHJpbmcgY29udGFpbmluZyB0aGUgYnVpbGQtaWQgd2UncmUgbG9va2luZyBmb3Iu Ci0rICAgICAgICBmaWxlbmFtZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBmaWxlIEdEQiB0cmllZCB0 byBmaW5kIGJ1dAotKyAgICAgICAgICAgICAgICAgIGNvdWxkbid0LiAgVGhpcyBpcyBub3Qgd2hl cmUgdGhlIGZpbGUgc2hvdWxkIGJlCi0rICAgICAgICAgICAgICAgICAgcGxhY2VkIGlmIGZvdW5k LCBpbiBmYWN0LCB0aGlzIGZpbGUgbWlnaHQgYWxyZWFkeQotKyAgICAgICAgICAgICAgICAgIGV4 aXN0IG9uIGRpc2sgYnV0IGhhdmUgdGhlIHdyb25nIGJ1aWxkLWlkLiAgVGhpcyBpcwotKyAgICAg ICAgICAgICAgICAgIG1vc3RseSBwcm92aWRlZCBpbiBvcmRlciB0byBiZSB1c2VkIGluIG1lc3Nh Z2VzIHRvCi0rICAgICAgICAgICAgICAgICAgdGhlIHVzZXIuCi0rCi0rICAgIFJldHVybnM6Ci0r ICAgICAgICBOb25lOiBObyBvYmpmaWxlIGNvdWxkIGJlIGZvdW5kIGZvciB0aGlzIGJ1aWxkLWlk LgotKyAgICAgICAgRmFsc2U6IEEgaGFuZGxlciBoYXMgZG9uZSBhbGwgaXQgY2FuIHdpdGggZm9y IHRoaXMgYnVpbGQtaWQsCi0rICAgICAgICAgICAgICAgYnV0IG5vIG9iamZpbGUgY291bGQgYmUg Zm91bmQuCi0rICAgICAgICBUcnVlOiBBbiBvYmpmaWxlIG1pZ2h0IGhhdmUgYmVlbiBpbnN0YWxs ZWQgYnkgYSBoYW5kbGVyLCBHREIKLSsgICAgICAgICAgICAgIHNob3VsZCBjaGVjayBhZ2Fpbi4g IFRoZSBvbmx5IHBsYWNlIEdEQiBjaGVja3MgaXMgd2l0aGluCi0rICAgICAgICAgICAgICB0aGUg LmJ1aWxkLWlkIHN1Yi1kaXJlY3Rvcnkgd2l0aGluIHRoZQotKyAgICAgICAgICAgICAgZGVidWct ZmlsZS1kaXJlY3RvcnkuICBJZiB0aGUgcmVxdWlyZWQgZmlsZSB3YXMgbm90Ci0rICAgICAgICAg ICAgICBpbnN0YWxsZWQgdGhlcmUgdGhlbiBHREIgd2lsbCBub3QgZmluZCBpdC4KLSsgICAgICAg IEEgc3RyaW5nOiBUaGlzIGlzIHRoZSBmaWxlbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyB0aGUK LSsgICAgICAgICAgICAgICAgICBtaXNzaW5nIG9iamZpbGUuCi0rICAgICIiIgotKwotKyAgICBy ZXR1cm4gX2hhbmRsZV9taXNzaW5nX2ZpbGVzKAotKyAgICAgICAgcHNwYWNlLCAib2JqZmlsZSIs IGxhbWJkYSBoOiBoKHBzcGFjZSwgYnVpbGRpZCwgZmlsZW5hbWUpCi0rICAgICkKLWRpZmYgLS1n aXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9taXNzaW5nX2RlYnVnLnB5IGIvZ2RiL3B5 dGhvbi9saWIvZ2RiL2NvbW1hbmQvbWlzc2luZ19maWxlcy5weQotc2ltaWxhcml0eSBpbmRleCA1 NCUKLXJlbmFtZSBmcm9tIGdkYi9weXRob24vbGliL2dkYi9jb21tYW5kL21pc3NpbmdfZGVidWcu cHkKLXJlbmFtZSB0byBnZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9taXNzaW5nX2ZpbGVzLnB5 Ci0tLS0gYS9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9taXNzaW5nX2RlYnVnLnB5Ci0rKysg Yi9nZGIvcHl0aG9uL2xpYi9nZGIvY29tbWFuZC9taXNzaW5nX2ZpbGVzLnB5Ci1AQCAtMSw0ICsx LDQgQEAKLS0jIE1pc3NpbmcgZGVidWcgcmVsYXRlZCBjb21tYW5kcy4KLSsjIE1pc3NpbmcgZGVi dWcgYW5kIG9iamZpbGUgcmVsYXRlZCBjb21tYW5kcy4KLSAjCi0gIyBDb3B5cmlnaHQgMjAyMy0y MDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotICMKLUBAIC0yMSw3ICsyMSw3IEBA IGltcG9ydCBnZGIKLSAKLSAKLSBkZWYgdmFsaWRhdGVfcmVnZXhwKGV4cCwgaWRzdHJpbmcpOgot LSAgICAiIiJDb21waWxlIGV4cCBpbnRvIGEgY29tcGlsZXIgcmVndWxhciBleHByZXNzaW9uIG9i amVjdC4KLSsgICAgIiIiQ29tcGlsZSBleHAgaW50byBhIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVz c2lvbiBvYmplY3QuCi0gCi0gICAgIEFyZ3VtZW50czoKLSAgICAgICAgIGV4cDogVGhlIHN0cmlu ZyB0byBjb21waWxlIGludG8gYSByZS5QYXR0ZXJuIG9iamVjdC4KLUBAIC0zMywxNCArMzMsMTUg QEAgZGVmIHZhbGlkYXRlX3JlZ2V4cChleHAsIGlkc3RyaW5nKToKLSAgICAgUmFpc2VzOgotICAg ICAgICAgU3ludGF4RXJyb3I6IElmIGV4cCBpcyBhbiBpbnZhbGlkIHJlZ2V4cC4KLSAgICAgIiIi Ci0rCi0gICAgIHRyeToKLSAgICAgICAgIHJldHVybiByZS5jb21waWxlKGV4cCkKLSAgICAgZXhj ZXB0IFN5bnRheEVycm9yOgotICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIkludmFsaWQgJXMg cmVnZXhwOiAlcy4iICUgKGlkc3RyaW5nLCBleHApKQotIAotIAotLWRlZiBwYXJzZV9taXNzaW5n X2RlYnVnX2NvbW1hbmRfYXJncyhhcmcpOgotLSAgICAiIiJJbnRlcm5hbCB1dGlsaXR5IHRvIHBh cnNlIG1pc3NpbmcgZGVidWcgaGFuZGxlciBjb21tYW5kIGFyZ3YuCi0rZGVmIHBhcnNlX21pc3Np bmdfZmlsZV9jb21tYW5kX2FyZ3MoYXJnKToKLSsgICAgIiIiSW50ZXJuYWwgdXRpbGl0eSB0byBw YXJzZSBtaXNzaW5nIGZpbGUgaGFuZGxlciBjb21tYW5kIGFyZ3YuCi0gCi0gICAgIEFyZ3VtZW50 czoKLSAgICAgICAgIGFyZzogVGhlIGFyZ3VtZW50cyB0byB0aGUgY29tbWFuZC4gVGhlIGZvcm1h dCBpczoKLUBAIC01Miw2ICs1Myw3IEBAIGRlZiBwYXJzZV9taXNzaW5nX2RlYnVnX2NvbW1hbmRf YXJncyhhcmcpOgotICAgICBSYWlzZXM6Ci0gICAgICAgICBTeW50YXhFcnJvcjogYW4gZXJyb3Ig cHJvY2Vzc2luZyBBUkcKLSAgICAgIiIiCi0rCi0gICAgIGFyZ3YgPSBnZGIuc3RyaW5nX3RvX2Fy Z3YoYXJnKQotICAgICBhcmdjID0gbGVuKGFyZ3YpCi0gICAgIGlmIGFyZ2MgPiAyOgotQEAgLTY4 LDEwICs3MCwxMCBAQCBkZWYgcGFyc2VfbWlzc2luZ19kZWJ1Z19jb21tYW5kX2FyZ3MoYXJnKToK LSAgICAgKQotIAotIAotLWNsYXNzIEluZm9NaXNzaW5nRGVidWdIYW5kZXJzKGdkYi5Db21tYW5k KToKLS0gICAgIiIiR0RCIGNvbW1hbmQgdG8gbGlzdCBtaXNzaW5nIGRlYnVnIGhhbmRsZXJzLgot K2NsYXNzIEluZm9NaXNzaW5nRmlsZUhhbmRsZXJzKGdkYi5Db21tYW5kKToKLSsgICAgIiIiR0RC IGNvbW1hbmQgdG8gbGlzdCBtaXNzaW5nIEhUWVBFIGhhbmRsZXJzLgotIAotLSAgICBVc2FnZTog aW5mbyBtaXNzaW5nLWRlYnVnLWhhbmRsZXJzIFtMT0NVUy1SRUdFWFAgW05BTUUtUkVHRVhQXV0K LSsgICAgVXNhZ2U6IGluZm8gbWlzc2luZy1IVFlQRS1oYW5kbGVycyBbTE9DVVMtUkVHRVhQIFtO QU1FLVJFR0VYUF1dCi0gCi0gICAgIExPQ1VTLVJFR0VYUCBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lv biBtYXRjaGluZyB0aGUgbG9jYXRpb24gb2YgdGhlCi0gICAgIGhhbmRsZXIuICBJZiBpdCBpcyBv bWl0dGVkLCBhbGwgcmVnaXN0ZXJlZCBoYW5kbGVycyBmcm9tIGFsbAotQEAgLTc5LDM4ICs4MSw0 NyBAQCBjbGFzcyBJbmZvTWlzc2luZ0RlYnVnSGFuZGVycyhnZGIuQ29tbWFuZCk6Ci0gICAgIHRo ZSBoYW5kbGVycyBmcm9tIHRoZSBjdXJyZW50IHByb2dzcGFjZSwgb3IgYSByZWd1bGFyIGV4cHJl c3Npb24KLSAgICAgbWF0Y2hpbmcgZmlsZW5hbWVzIG9mIHByb2dzcGFjZXMuCi0gCi0tICAgIE5B TUUtUkVHRVhQIGlzIGEgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciBtaXNzaW5nIGRlYnVn Ci0rICAgIE5BTUUtUkVHRVhQIGlzIGEgcmVndWxhciBleHByZXNzaW9uIHRvIGZpbHRlciBtaXNz aW5nIEhUWVBFCi0gICAgIGhhbmRsZXIgbmFtZXMuICBJZiB0aGlzIG9taXR0ZWQgZm9yIGEgc3Bl Y2lmaWVkIGxvY3VzLCB0aGVuIGFsbAotICAgICByZWdpc3RlcmVkIGhhbmRsZXJzIGluIHRoZSBs b2N1cyBhcmUgbGlzdGVkLgotICAgICAiIiIKLSAKLS0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgot LSAgICAgICAgc3VwZXIoKS5fX2luaXRfXygiaW5mbyBtaXNzaW5nLWRlYnVnLWhhbmRsZXJzIiwg Z2RiLkNPTU1BTkRfRklMRVMpCi0rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYW5kbGVyX3R5cGUp OgotKyAgICAgICAgIyBVcGRhdGUgdGhlIGRvYyBzdHJpbmcgYmVmb3JlIGNhbGxpbmcgdGhlIHBh cmVudCBjb25zdHJ1Y3RvciwKLSsgICAgICAgICMgcmVwbGFjaW5nIHRoZSBzdHJpbmcgJ0hUWVBF JyB3aXRoIHRoZSB2YWx1ZSBvZiBIQU5ETEVSX1RZUEUuCi0rICAgICAgICAjIFRoZSBwYXJlbnQg Y29uc3RydWN0b3Igd2lsbCBncmFiIGEgY29weSBvZiB0aGlzIHN0cmluZyB0bwotKyAgICAgICAg IyB1c2UgYXMgdGhlIGNvbW1hbmRzIGhlbHAgdGV4dC4KLSsgICAgICAgIHNlbGYuX19kb2NfXyA9 IHNlbGYuX19kb2NfXy5yZXBsYWNlKCJIVFlQRSIsIGhhbmRsZXJfdHlwZSkKLSsgICAgICAgIHN1 cGVyKCkuX19pbml0X18oCi0rICAgICAgICAgICAgImluZm8gbWlzc2luZy0iICsgaGFuZGxlcl90 eXBlICsgIi1oYW5kbGVycyIsIGdkYi5DT01NQU5EX0ZJTEVTCi0rICAgICAgICApCi0rICAgICAg ICBzZWxmLmhhbmRsZXJfdHlwZSA9IGhhbmRsZXJfdHlwZQotIAotICAgICBkZWYgbGlzdF9oYW5k bGVycyhzZWxmLCB0aXRsZSwgaGFuZGxlcnMsIG5hbWVfcmUpOgotLSAgICAgICAgIiIiTGlzdHMg dGhlIG1pc3NpbmcgZGVidWcgaGFuZGxlcnMgd2hvc2UgbmFtZSBtYXRjaGVzIHJlZ2V4cC4KLSsg ICAgICAgICIiIkxpc3RzIHRoZSBtaXNzaW5nIGZpbGUgaGFuZGxlcnMgd2hvc2UgbmFtZSBtYXRj aGVzIHJlZ2V4cC4KLSAKLSAgICAgICAgIEFyZ3VtZW50czoKLSAgICAgICAgICAgICB0aXRsZTog VGhlIGxpbmUgdG8gcHJpbnQgYmVmb3JlIHRoZSBsaXN0LgotLSAgICAgICAgICAgIGhhbmRsZXJz OiBUaGUgbGlzdCBvZiB0aGUgbWlzc2luZyBkZWJ1ZyBoYW5kbGVycy4KLSsgICAgICAgICAgICBo YW5kbGVyczogVGhlIGxpc3Qgb2YgdGhlIG1pc3NpbmcgZmlsZSBoYW5kbGVycy4KLSAgICAgICAg ICAgICBuYW1lX3JlOiBoYW5kbGVyIG5hbWUgZmlsdGVyLgotICAgICAgICAgIiIiCi0rCi0gICAg ICAgICBpZiBub3QgaGFuZGxlcnM6Ci0gICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICBwcmlu dCh0aXRsZSkKLS0gICAgICAgIGZvciBoYW5kbGVyIGluIGhhbmRsZXJzOgotKyAgICAgICAgZm9y IGhhbmRsZXIgaW4gZ2RiLl9maWx0ZXJfbWlzc2luZ19maWxlX2hhbmRsZXJzKGhhbmRsZXJzLCBz ZWxmLmhhbmRsZXJfdHlwZSk6Ci0gICAgICAgICAgICAgaWYgbmFtZV9yZS5tYXRjaChoYW5kbGVy Lm5hbWUpOgotICAgICAgICAgICAgICAgICBwcmludCgKLSAgICAgICAgICAgICAgICAgICAgICIg ICVzJXMiICUgKGhhbmRsZXIubmFtZSwgIiIgaWYgaGFuZGxlci5lbmFibGVkIGVsc2UgIiBbZGlz YWJsZWRdIikKLSAgICAgICAgICAgICAgICAgKQotIAotICAgICBkZWYgaW52b2tlKHNlbGYsIGFy ZywgZnJvbV90dHkpOgotLSAgICAgICAgbG9jdXNfcmUsIG5hbWVfcmUgPSBwYXJzZV9taXNzaW5n X2RlYnVnX2NvbW1hbmRfYXJncyhhcmcpCi0rICAgICAgICBsb2N1c19yZSwgbmFtZV9yZSA9IHBh cnNlX21pc3NpbmdfZmlsZV9jb21tYW5kX2FyZ3MoYXJnKQotIAotICAgICAgICAgaWYgbG9jdXNf cmUubWF0Y2goInByb2dzcGFjZSIpIGFuZCBsb2N1c19yZS5wYXR0ZXJuICE9ICIiOgotICAgICAg ICAgICAgIGNwID0gZ2RiLmN1cnJlbnRfcHJvZ3NwYWNlKCkKLSAgICAgICAgICAgICBzZWxmLmxp c3RfaGFuZGxlcnMoCi0tICAgICAgICAgICAgICAgICJQcm9nc3BhY2UgJXM6IiAlIGNwLmZpbGVu YW1lLCBjcC5taXNzaW5nX2RlYnVnX2hhbmRsZXJzLCBuYW1lX3JlCi0rICAgICAgICAgICAgICAg ICJQcm9nc3BhY2UgJXM6IiAlIGNwLmZpbGVuYW1lLCBjcC5taXNzaW5nX2ZpbGVfaGFuZGxlcnMs IG5hbWVfcmUKLSAgICAgICAgICAgICApCi0gCi0gICAgICAgICBmb3IgcHJvZ3NwYWNlIGluIGdk Yi5wcm9nc3BhY2VzKCk6Ci1AQCAtMTI1LDU4ICsxMzYsNzEgQEAgY2xhc3MgSW5mb01pc3NpbmdE ZWJ1Z0hhbmRlcnMoZ2RiLkNvbW1hbmQpOgotICAgICAgICAgICAgICAgICAgICAgbXNnID0gIlBy b2dzcGFjZSAlczoiICUgZmlsZW5hbWUKLSAgICAgICAgICAgICAgICAgc2VsZi5saXN0X2hhbmRs ZXJzKAotICAgICAgICAgICAgICAgICAgICAgbXNnLAotLSAgICAgICAgICAgICAgICAgICAgcHJv Z3NwYWNlLm1pc3NpbmdfZGVidWdfaGFuZGxlcnMsCi0rICAgICAgICAgICAgICAgICAgICBwcm9n c3BhY2UubWlzc2luZ19maWxlX2hhbmRsZXJzLAotICAgICAgICAgICAgICAgICAgICAgbmFtZV9y ZSwKLSAgICAgICAgICAgICAgICAgKQotIAotICAgICAgICAgIyBQcmludCBnbG9iYWwgaGFuZGxl cnMgbGFzdCwgYXMgdGhlc2UgYXJlIGludm9rZWQgbGFzdC4KLSAgICAgICAgIGlmIGxvY3VzX3Jl Lm1hdGNoKCJnbG9iYWwiKToKLS0gICAgICAgICAgICBzZWxmLmxpc3RfaGFuZGxlcnMoIkdsb2Jh bDoiLCBnZGIubWlzc2luZ19kZWJ1Z19oYW5kbGVycywgbmFtZV9yZSkKLSsgICAgICAgICAgICBz ZWxmLmxpc3RfaGFuZGxlcnMoIkdsb2JhbDoiLCBnZGIubWlzc2luZ19maWxlX2hhbmRsZXJzLCBu YW1lX3JlKQotIAotIAotLWRlZiBkb19lbmFibGVfaGFuZGxlcjEoaGFuZGxlcnMsIG5hbWVfcmUs IGZsYWcpOgotLSAgICAiIiJFbmFibGUvZGlzYWJsZSBtaXNzaW5nIGRlYnVnIGhhbmRsZXJzIHdo b3NlIG5hbWVzIG1hdGNoIGdpdmVuIHJlZ2V4LgotK2RlZiBkb19lbmFibGVfaGFuZGxlcjEoaGFu ZGxlcnMsIG5hbWVfcmUsIGZsYWcsIGhhbmRsZXJfdHlwZSk6Ci0rICAgICIiIkVuYWJsZS9kaXNh YmxlIG1pc3NpbmcgZmlsZSBoYW5kbGVycyB3aG9zZSBuYW1lcyBtYXRjaCBnaXZlbiByZWdleC4K LSAKLSAgICAgQXJndW1lbnRzOgotLSAgICAgICAgaGFuZGxlcnM6IFRoZSBsaXN0IG9mIG1pc3Np bmcgZGVidWcgaGFuZGxlcnMuCi0rICAgICAgICBoYW5kbGVyczogVGhlIGxpc3Qgb2YgbWlzc2lu ZyBmaWxlIGhhbmRsZXJzLgotICAgICAgICAgbmFtZV9yZTogSGFuZGxlciBuYW1lIGZpbHRlci4K LSAgICAgICAgIGZsYWc6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHdlIHNob3VsZCBlbmFibGUg b3IgZGlzYWJsZS4KLSsgICAgICAgIGhhbmRsZXJfdHlwZTogQSBzdHJpbmcsIGVpdGhlciAnZGVi dWcnIG9yICdvYmpmaWxlJywgdXNlIHRvIGNvbnRyb2wKLSsgICAgICAgICAgICB3aGljaCBoYW5k bGVycyBhcmUgbW9kaWZpZWQuCi0gCi0gICAgIFJldHVybnM6Ci0gICAgICAgICBUaGUgbnVtYmVy IG9mIGhhbmRsZXJzIGFmZmVjdGVkLgotICAgICAiIiIKLSsKLSAgICAgdG90YWwgPSAwCi0tICAg IGZvciBoYW5kbGVyIGluIGhhbmRsZXJzOgotKyAgICBmb3IgaGFuZGxlciBpbiBnZGIuX2ZpbHRl cl9taXNzaW5nX2ZpbGVfaGFuZGxlcnMoaGFuZGxlcnMsIGhhbmRsZXJfdHlwZSk6Ci0gICAgICAg ICBpZiBuYW1lX3JlLm1hdGNoKGhhbmRsZXIubmFtZSkgYW5kIGhhbmRsZXIuZW5hYmxlZCAhPSBm bGFnOgotICAgICAgICAgICAgIGhhbmRsZXIuZW5hYmxlZCA9IGZsYWcKLSAgICAgICAgICAgICB0 b3RhbCArPSAxCi0gICAgIHJldHVybiB0b3RhbAotIAotIAotLWRlZiBkb19lbmFibGVfaGFuZGxl cihhcmcsIGZsYWcpOgotLSAgICAiIiJFbmFibGUgb3IgZGlzYWJsZSBtaXNzaW5nIGRlYnVnIGhh bmRsZXJzLiIiIgotLSAgICAobG9jdXNfcmUsIG5hbWVfcmUpID0gcGFyc2VfbWlzc2luZ19kZWJ1 Z19jb21tYW5kX2FyZ3MoYXJnKQotK2RlZiBkb19lbmFibGVfaGFuZGxlcihhcmcsIGZsYWcsIGhh bmRsZXJfdHlwZSk6Ci0rICAgICIiIkVuYWJsZSBvciBkaXNhYmxlIG1pc3NpbmcgZmlsZSBoYW5k bGVycy4iIiIKLSsKLSsgICAgKGxvY3VzX3JlLCBuYW1lX3JlKSA9IHBhcnNlX21pc3NpbmdfZmls ZV9jb21tYW5kX2FyZ3MoYXJnKQotICAgICB0b3RhbCA9IDAKLSAgICAgaWYgbG9jdXNfcmUubWF0 Y2goImdsb2JhbCIpOgotLSAgICAgICAgdG90YWwgKz0gZG9fZW5hYmxlX2hhbmRsZXIxKGdkYi5t aXNzaW5nX2RlYnVnX2hhbmRsZXJzLCBuYW1lX3JlLCBmbGFnKQotKyAgICAgICAgdG90YWwgKz0g ZG9fZW5hYmxlX2hhbmRsZXIxKAotKyAgICAgICAgICAgIGdkYi5taXNzaW5nX2ZpbGVfaGFuZGxl cnMsIG5hbWVfcmUsIGZsYWcsIGhhbmRsZXJfdHlwZQotKyAgICAgICAgKQotICAgICBpZiBsb2N1 c19yZS5tYXRjaCgicHJvZ3NwYWNlIikgYW5kIGxvY3VzX3JlLnBhdHRlcm4gIT0gIiI6Ci0gICAg ICAgICB0b3RhbCArPSBkb19lbmFibGVfaGFuZGxlcjEoCi0tICAgICAgICAgICAgZ2RiLmN1cnJl bnRfcHJvZ3NwYWNlKCkubWlzc2luZ19kZWJ1Z19oYW5kbGVycywgbmFtZV9yZSwgZmxhZwotKyAg ICAgICAgICAgIGdkYi5jdXJyZW50X3Byb2dzcGFjZSgpLm1pc3NpbmdfZmlsZV9oYW5kbGVycywg bmFtZV9yZSwgZmxhZywgaGFuZGxlcl90eXBlCi0gICAgICAgICApCi0gICAgIGZvciBwcm9nc3Bh Y2UgaW4gZ2RiLnByb2dzcGFjZXMoKToKLSAgICAgICAgIGZpbGVuYW1lID0gcHJvZ3NwYWNlLmZp bGVuYW1lIG9yICIiCi0gICAgICAgICBpZiBsb2N1c19yZS5tYXRjaChmaWxlbmFtZSk6Ci0tICAg ICAgICAgICAgdG90YWwgKz0gZG9fZW5hYmxlX2hhbmRsZXIxKHByb2dzcGFjZS5taXNzaW5nX2Rl YnVnX2hhbmRsZXJzLCBuYW1lX3JlLCBmbGFnKQotKyAgICAgICAgICAgIHRvdGFsICs9IGRvX2Vu YWJsZV9oYW5kbGVyMSgKLSsgICAgICAgICAgICAgICAgcHJvZ3NwYWNlLm1pc3NpbmdfZmlsZV9o YW5kbGVycywgbmFtZV9yZSwgZmxhZywgaGFuZGxlcl90eXBlCi0rICAgICAgICAgICAgKQotICAg ICBwcmludCgKLS0gICAgICAgICIlZCBtaXNzaW5nIGRlYnVnIGhhbmRsZXIlcyAlcyIKLS0gICAg ICAgICUgKHRvdGFsLCAiIiBpZiB0b3RhbCA9PSAxIGVsc2UgInMiLCAiZW5hYmxlZCIgaWYgZmxh ZyBlbHNlICJkaXNhYmxlZCIpCi0rICAgICAgICAiJWQgbWlzc2luZyAlcyBoYW5kbGVyJXMgJXMi Ci0rICAgICAgICAlICgKLSsgICAgICAgICAgICB0b3RhbCwKLSsgICAgICAgICAgICBoYW5kbGVy X3R5cGUsCi0rICAgICAgICAgICAgIiIgaWYgdG90YWwgPT0gMSBlbHNlICJzIiwKLSsgICAgICAg ICAgICAiZW5hYmxlZCIgaWYgZmxhZyBlbHNlICJkaXNhYmxlZCIsCi0rICAgICAgICApCi0gICAg ICkKLSAKLSAKLS1jbGFzcyBFbmFibGVNaXNzaW5nRGVidWdIYW5kbGVyKGdkYi5Db21tYW5kKToK LS0gICAgIiIiR0RCIGNvbW1hbmQgdG8gZW5hYmxlIG1pc3NpbmcgZGVidWcgaGFuZGxlcnMuCi0r Y2xhc3MgRW5hYmxlTWlzc2luZ0ZpbGVIYW5kbGVyKGdkYi5Db21tYW5kKToKLSsgICAgIiIiR0RC IGNvbW1hbmQgdG8gZW5hYmxlIG1pc3NpbmcgSFRZUEUgaGFuZGxlcnMuCi0gCi0tICAgIFVzYWdl OiBlbmFibGUgbWlzc2luZy1kZWJ1Zy1oYW5kbGVyIFtMT0NVUy1SRUdFWFAgW05BTUUtUkVHRVhQ XV0KLSsgICAgVXNhZ2U6IGVuYWJsZSBtaXNzaW5nLUhUWVBFLWhhbmRsZXIgW0xPQ1VTLVJFR0VY UCBbTkFNRS1SRUdFWFBdXQotIAotICAgICBMT0NVUy1SRUdFWFAgaXMgYSByZWd1bGFyIGV4cHJl c3Npb24gc3BlY2lmeWluZyB0aGUgaGFuZGxlcnMgdG8KLSAgICAgZW5hYmxlLiAgSXQgY2FuIGJl ICdnbG9iYWwnLCAncHJvZ3NwYWNlJyBmb3IgdGhlIGN1cnJlbnQKLUBAIC0xODcsMTggKzIxMSwy NiBAQCBjbGFzcyBFbmFibGVNaXNzaW5nRGVidWdIYW5kbGVyKGdkYi5Db21tYW5kKToKLSAgICAg aW4gdGhlIGxvY3VzIGFyZSBhZmZlY3RlZC4KLSAgICAgIiIiCi0gCi0tICAgIGRlZiBfX2luaXRf XyhzZWxmKToKLS0gICAgICAgIHN1cGVyKCkuX19pbml0X18oImVuYWJsZSBtaXNzaW5nLWRlYnVn LWhhbmRsZXIiLCBnZGIuQ09NTUFORF9GSUxFUykKLSsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhh bmRsZXJfdHlwZSk6Ci0rICAgICAgICAjIFVwZGF0ZSB0aGUgZG9jIHN0cmluZyBiZWZvcmUgY2Fs bGluZyB0aGUgcGFyZW50IGNvbnN0cnVjdG9yLAotKyAgICAgICAgIyByZXBsYWNpbmcgdGhlIHN0 cmluZyAnSFRZUEUnIHdpdGggdGhlIHZhbHVlIG9mIEhBTkRMRVJfVFlQRS4KLSsgICAgICAgICMg VGhlIHBhcmVudCBjb25zdHJ1Y3RvciB3aWxsIGdyYWIgYSBjb3B5IG9mIHRoaXMgc3RyaW5nIHRv Ci0rICAgICAgICAjIHVzZSBhcyB0aGUgY29tbWFuZHMgaGVscCB0ZXh0LgotKyAgICAgICAgc2Vs Zi5fX2RvY19fID0gc2VsZi5fX2RvY19fLnJlcGxhY2UoIkhUWVBFIiwgaGFuZGxlcl90eXBlKQot KyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygKLSsgICAgICAgICAgICAiZW5hYmxlIG1pc3Npbmct IiArIGhhbmRsZXJfdHlwZSArICItaGFuZGxlciIsIGdkYi5DT01NQU5EX0ZJTEVTCi0rICAgICAg ICApCi0rICAgICAgICBzZWxmLmhhbmRsZXJfdHlwZSA9IGhhbmRsZXJfdHlwZQotIAotICAgICBk ZWYgaW52b2tlKHNlbGYsIGFyZywgZnJvbV90dHkpOgotICAgICAgICAgIiIiR0RCIGNhbGxzIHRo aXMgdG8gcGVyZm9ybSB0aGUgY29tbWFuZC4iIiIKLS0gICAgICAgIGRvX2VuYWJsZV9oYW5kbGVy KGFyZywgVHJ1ZSkKLSsgICAgICAgIGRvX2VuYWJsZV9oYW5kbGVyKGFyZywgVHJ1ZSwgc2VsZi5o YW5kbGVyX3R5cGUpCi0gCi0gCi0tY2xhc3MgRGlzYWJsZU1pc3NpbmdEZWJ1Z0hhbmRsZXIoZ2Ri LkNvbW1hbmQpOgotLSAgICAiIiJHREIgY29tbWFuZCB0byBkaXNhYmxlIG1pc3NpbmcgZGVidWcg aGFuZGxlcnMuCi0rY2xhc3MgRGlzYWJsZU1pc3NpbmdGaWxlSGFuZGxlcihnZGIuQ29tbWFuZCk6 Ci0rICAgICIiIkdEQiBjb21tYW5kIHRvIGRpc2FibGUgbWlzc2luZyBIVFlQRSBoYW5kbGVycy4K LSAKLS0gICAgVXNhZ2U6IGRpc2FibGUgbWlzc2luZy1kZWJ1Zy1oYW5kbGVyIFtMT0NVUy1SRUdF WFAgW05BTUUtUkVHRVhQXV0KLSsgICAgVXNhZ2U6IGRpc2FibGUgbWlzc2luZy1IVFlQRS1oYW5k bGVyIFtMT0NVUy1SRUdFWFAgW05BTUUtUkVHRVhQXV0KLSAKLSAgICAgTE9DVVMtUkVHRVhQIGlz IGEgcmVndWxhciBleHByZXNzaW9uIHNwZWNpZnlpbmcgdGhlIGhhbmRsZXJzIHRvCi0gICAgIGVu YWJsZS4gIEl0IGNhbiBiZSAnZ2xvYmFsJywgJ3Byb2dzcGFjZScgZm9yIHRoZSBjdXJyZW50Ci1A QCAtMjA5LDE5ICsyNDEsMjggQEAgY2xhc3MgRGlzYWJsZU1pc3NpbmdEZWJ1Z0hhbmRsZXIoZ2Ri LkNvbW1hbmQpOgotICAgICBpbiB0aGUgbG9jdXMgYXJlIGFmZmVjdGVkLgotICAgICAiIiIKLSAK LS0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotLSAgICAgICAgc3VwZXIoKS5fX2luaXRfXygiZGlz YWJsZSBtaXNzaW5nLWRlYnVnLWhhbmRsZXIiLCBnZGIuQ09NTUFORF9GSUxFUykKLSsgICAgZGVm IF9faW5pdF9fKHNlbGYsIGhhbmRsZXJfdHlwZSk6Ci0rICAgICAgICAjIFVwZGF0ZSB0aGUgZG9j IHN0cmluZyBiZWZvcmUgY2FsbGluZyB0aGUgcGFyZW50IGNvbnN0cnVjdG9yLAotKyAgICAgICAg IyByZXBsYWNpbmcgdGhlIHN0cmluZyAnSFRZUEUnIHdpdGggdGhlIHZhbHVlIG9mIEhBTkRMRVJf VFlQRS4KLSsgICAgICAgICMgVGhlIHBhcmVudCBjb25zdHJ1Y3RvciB3aWxsIGdyYWIgYSBjb3B5 IG9mIHRoaXMgc3RyaW5nIHRvCi0rICAgICAgICAjIHVzZSBhcyB0aGUgY29tbWFuZHMgaGVscCB0 ZXh0LgotKyAgICAgICAgc2VsZi5fX2RvY19fID0gc2VsZi5fX2RvY19fLnJlcGxhY2UoIkhUWVBF IiwgaGFuZGxlcl90eXBlKQotKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygKLSsgICAgICAgICAg ICAiZGlzYWJsZSBtaXNzaW5nLSIgKyBoYW5kbGVyX3R5cGUgKyAiLWhhbmRsZXIiLCBnZGIuQ09N TUFORF9GSUxFUwotKyAgICAgICAgKQotKyAgICAgICAgc2VsZi5oYW5kbGVyX3R5cGUgPSBoYW5k bGVyX3R5cGUKLSAKLSAgICAgZGVmIGludm9rZShzZWxmLCBhcmcsIGZyb21fdHR5KToKLSAgICAg ICAgICIiIkdEQiBjYWxscyB0aGlzIHRvIHBlcmZvcm0gdGhlIGNvbW1hbmQuIiIiCi0tICAgICAg ICBkb19lbmFibGVfaGFuZGxlcihhcmcsIEZhbHNlKQotKyAgICAgICAgZG9fZW5hYmxlX2hhbmRs ZXIoYXJnLCBGYWxzZSwgc2VsZi5oYW5kbGVyX3R5cGUpCi0gCi0gCi0tZGVmIHJlZ2lzdGVyX21p c3NpbmdfZGVidWdfaGFuZGxlcl9jb21tYW5kcygpOgotLSAgICAiIiJJbnN0YWxscyB0aGUgbWlz c2luZyBkZWJ1ZyBoYW5kbGVyIGNvbW1hbmRzLiIiIgotLSAgICBJbmZvTWlzc2luZ0RlYnVnSGFu ZGVycygpCi0tICAgIEVuYWJsZU1pc3NpbmdEZWJ1Z0hhbmRsZXIoKQotLSAgICBEaXNhYmxlTWlz c2luZ0RlYnVnSGFuZGxlcigpCi0rZGVmIHJlZ2lzdGVyX21pc3NpbmdfZmlsZV9oYW5kbGVyX2Nv bW1hbmRzKCk6Ci0rICAgICIiIkluc3RhbGxzIHRoZSBtaXNzaW5nIGZpbGUgaGFuZGxlciBjb21t YW5kcy4iIiIKLSsgICAgZm9yIGhhbmRsZXJfdHlwZSBpbiBbImRlYnVnIiwgIm9iamZpbGUiXToK LSsgICAgICAgIEluZm9NaXNzaW5nRmlsZUhhbmRsZXJzKGhhbmRsZXJfdHlwZSkKLSsgICAgICAg IEVuYWJsZU1pc3NpbmdGaWxlSGFuZGxlcihoYW5kbGVyX3R5cGUpCi0rICAgICAgICBEaXNhYmxl TWlzc2luZ0ZpbGVIYW5kbGVyKGhhbmRsZXJfdHlwZSkKLSAKLSAKLS1yZWdpc3Rlcl9taXNzaW5n X2RlYnVnX2hhbmRsZXJfY29tbWFuZHMoKQotK3JlZ2lzdGVyX21pc3NpbmdfZmlsZV9oYW5kbGVy X2NvbW1hbmRzKCkKLWRpZmYgLS1naXQgYS9nZGIvcHl0aG9uL2xpYi9nZGIvbWlzc2luZ19kZWJ1 Zy5weSBiL2dkYi9weXRob24vbGliL2dkYi9taXNzaW5nX2RlYnVnLnB5Ci0tLS0gYS9nZGIvcHl0 aG9uL2xpYi9nZGIvbWlzc2luZ19kZWJ1Zy5weQotKysrIGIvZ2RiL3B5dGhvbi9saWIvZ2RiL21p c3NpbmdfZGVidWcucHkKLUBAIC0xNyw0OCArMTcsMTEgQEAKLSBNaXNzaW5nRGVidWdIYW5kbGVy IGJhc2UgY2xhc3MsIGFuZCByZWdpc3Rlcl9oYW5kbGVyIGZ1bmN0aW9uLgotICIiIgotIAotLWlt cG9ydCBzeXMKLS0KLSBpbXBvcnQgZ2RiCi0rZnJvbSBnZGIubWlzc2luZ19maWxlcyBpbXBvcnQg TWlzc2luZ0ZpbGVIYW5kbGVyCi0gCi0taWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNyk6Ci0t ICAgICMgRnVuY3Rpb25zIHN0ci5pc2FzY2lpKCkgYW5kIHN0ci5pc2FsbnVtIGFyZSBhdmFpbGFi bGUgc3RhcnRpbmcgUHl0aG9uCi0tICAgICMgMy43LgotLSAgICBkZWYgaXNhc2NpaShjaCk6Ci0t ICAgICAgICByZXR1cm4gY2guaXNhc2NpaSgpCi0tCi0tICAgIGRlZiBpc2FsbnVtKGNoKToKLS0g ICAgICAgIHJldHVybiBjaC5pc2FsbnVtKCkKLS0KLS1lbHNlOgotLSAgICAjIEZhbGwgYmFjayB0 byBjdXJzZXMuYXNjaWkuaXNhc2NpaSgpIGFuZCBjdXJzZXMuYXNjaWkuaXNhbG51bSgpIGZvcgot LSAgICAjIGVhcmxpZXIgdmVyc2lvbnMuCi0tICAgIGZyb20gY3Vyc2VzLmFzY2lpIGltcG9ydCBp c2FsbnVtLCBpc2FzY2lpCi0tCi0tCi0tZGVmIF92YWxpZGF0ZV9uYW1lKG5hbWUpOgotLSAgICAi IiJWYWxpZGF0ZSBhIG1pc3NpbmcgZGVidWcgaGFuZGxlciBuYW1lIHN0cmluZy4KLS0KLS0gICAg SWYgbmFtZSBpcyB2YWxpZCBhcyBhIG1pc3NpbmcgZGVidWcgaGFuZGxlciBuYW1lLCB0aGVuIHRo aXMKLS0gICAgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiAgSWYgbmFtZSBpcyBub3QgdmFsaWQgdGhl biBhbiBleGNlcHRpb24gaXMKLS0gICAgcmFpc2VkLgotLQotLSAgICBBcmd1bWVudHM6Ci0tICAg ICAgICBuYW1lOiBBIHN0cmluZywgdGhlIG5hbWUgb2YgYSBtaXNzaW5nIGRlYnVnIGhhbmRsZXIu Ci0tCi0tICAgIFJldHVybnM6Ci0tICAgICAgICBOb3RoaW5nLgotIAotLSAgICBSYWlzZXM6Ci0t ICAgICAgICBWYWx1ZUVycm9yOiBJZiBuYW1lIGlzIGludmFsaWQgYXMgYSBtaXNzaW5nIGRlYnVn IGhhbmRsZXIKLS0gICAgICAgICAgICAgICAgICAgIG5hbWUuCi0tICAgICIiIgotLSAgICBmb3Ig Y2ggaW4gbmFtZToKLS0gICAgICAgIGlmIG5vdCBpc2FzY2lpKGNoKSBvciBub3QgKGlzYWxudW0o Y2gpIG9yIGNoIGluICJfLSIpOgotLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFs aWQgY2hhcmFjdGVyICclcycgaW4gaGFuZGxlciBuYW1lOiAlcyIgJSAoY2gsIG5hbWUpKQotLQot LQotLWNsYXNzIE1pc3NpbmdEZWJ1Z0hhbmRsZXIob2JqZWN0KToKLStjbGFzcyBNaXNzaW5nRGVi dWdIYW5kbGVyKE1pc3NpbmdGaWxlSGFuZGxlcik6Ci0gICAgICIiIkJhc2UgY2xhc3MgZm9yIG1p c3NpbmcgZGVidWcgaGFuZGxlcnMgd3JpdHRlbiBpbiBQeXRob24uCi0gCi0gICAgIEEgbWlzc2lu ZyBkZWJ1ZyBoYW5kbGVyIGhhcyBhIHNpbmdsZSBtZXRob2QgX19jYWxsX18gYWxvbmcgd2l0aAot QEAgLTY5LDQxICszMiw4IEBAIGNsYXNzIE1pc3NpbmdEZWJ1Z0hhbmRsZXIob2JqZWN0KToKLSAg ICAgICAgIGVuYWJsZWQ6IFdoZW4gdHJ1ZSB0aGlzIGhhbmRsZXIgaXMgZW5hYmxlZC4KLSAgICAg IiIiCi0gCi0tICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLS0gICAgICAgICIiIkNvbnN0 cnVjdG9yLgotLQotLSAgICAgICAgQXJnczoKLS0gICAgICAgICAgICBuYW1lOiBBbiBpZGVudGlm eWluZyBuYW1lIGZvciB0aGlzIGhhbmRsZXIuCi0tCi0tICAgICAgICBSYWlzZXM6Ci0tICAgICAg ICAgICAgVHlwZUVycm9yOiBuYW1lIGlzIG5vdCBhIHN0cmluZy4KLS0gICAgICAgICAgICBWYWx1 ZUVycm9yOiBuYW1lIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4KLS0gICAgICAgICIiIgot LQotLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKLS0gICAgICAgICAgICBy YWlzZSBUeXBlRXJyb3IoImluY29ycmVjdCB0eXBlIGZvciBuYW1lOiAlcyIgJSB0eXBlKG5hbWUp KQotLQotLSAgICAgICAgX3ZhbGlkYXRlX25hbWUobmFtZSkKLS0KLS0gICAgICAgIHNlbGYuX25h bWUgPSBuYW1lCi0tICAgICAgICBzZWxmLl9lbmFibGVkID0gVHJ1ZQotLQotLSAgICBAcHJvcGVy dHkKLS0gICAgZGVmIG5hbWUoc2VsZik6Ci0tICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQotLQot LSAgICBAcHJvcGVydHkKLS0gICAgZGVmIGVuYWJsZWQoc2VsZik6Ci0tICAgICAgICByZXR1cm4g c2VsZi5fZW5hYmxlZAotLQotLSAgICBAZW5hYmxlZC5zZXR0ZXIKLS0gICAgZGVmIGVuYWJsZWQo c2VsZiwgdmFsdWUpOgotLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOgot LSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaW5jb3JyZWN0IHR5cGUgZm9yIGVuYWJsZWQg YXR0cmlidXRlOiAlcyIgJSB0eXBlKHZhbHVlKSkKLS0gICAgICAgIHNlbGYuX2VuYWJsZWQgPSB2 YWx1ZQotLQotICAgICBkZWYgX19jYWxsX18oc2VsZiwgb2JqZmlsZSk6Ci0tICAgICAgICAiIiJH REIgaGFuZGxlIG1pc3NpbmcgZGVidWcgaW5mb3JtYXRpb24gZm9yIGFuIG9iamZpbGUuCi0rICAg ICAgICAiIiJIYW5kbGUgbWlzc2luZyBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IgYW4gb2JqZmlsZS4K LSAKLSAgICAgICAgIEFyZ3VtZW50czoKLSAgICAgICAgICAgICBvYmpmaWxlOiBBIGdkYi5PYmpm aWxlIGZvciB3aGljaCBHREIgY291bGQgbm90IGZpbmQgYW55Ci1AQCAtMTI0LDYyICs1NCw1IEBA IGNsYXNzIE1pc3NpbmdEZWJ1Z0hhbmRsZXIob2JqZWN0KToKLSAKLSAKLSBkZWYgcmVnaXN0ZXJf aGFuZGxlcihsb2N1cywgaGFuZGxlciwgcmVwbGFjZT1GYWxzZSk6Ci0tICAgICIiIlJlZ2lzdGVy IGhhbmRsZXIgaW4gZ2l2ZW4gbG9jdXMuCi0tCi0tICAgIFRoZSBoYW5kbGVyIGlzIHByZXBlbmRl ZCB0byB0aGUgbG9jdXMncyBtaXNzaW5nIGRlYnVnIGhhbmRsZXJzCi0tICAgIGxpc3QuIFRoZSBu YW1lIG9mIGhhbmRsZXIgc2hvdWxkIGJlIHVuaXF1ZSAob3IgcmVwbGFjZSBtdXN0IGJlCi0tICAg IFRydWUpLgotLQotLSAgICBBcmd1bWVudHM6Ci0tICAgICAgICBsb2N1czogRWl0aGVyIGEgcHJv Z3NwYWNlLCBvciBOb25lIChpbiB3aGljaCBjYXNlIHRoZSB1bndpbmRlcgotLSAgICAgICAgICAg ICAgIGlzIHJlZ2lzdGVyZWQgZ2xvYmFsbHkpLgotLSAgICAgICAgaGFuZGxlcjogQW4gb2JqZWN0 IG9mIGEgZ2RiLk1pc3NpbmdEZWJ1Z0hhbmRsZXIgc3ViY2xhc3MuCi0tCi0tICAgICAgICByZXBs YWNlOiBJZiBUcnVlLCByZXBsYWNlcyBleGlzdGluZyBoYW5kbGVyIHdpdGggdGhlIHNhbWUgbmFt ZQotLSAgICAgICAgICAgICAgICAgd2l0aGluIGxvY3VzLiAgT3RoZXJ3aXNlLCByYWlzZXMgUnVu dGltZUV4Y2VwdGlvbiBpZgotLSAgICAgICAgICAgICAgICAgdW53aW5kZXIgd2l0aCB0aGUgc2Ft ZSBuYW1lIGFscmVhZHkgZXhpc3RzLgotLQotLSAgICBSZXR1cm5zOgotLSAgICAgICAgTm90aGlu Zy4KLS0KLS0gICAgUmFpc2VzOgotLSAgICAgICAgUnVudGltZUVycm9yOiBUaGUgbmFtZSBvZiBo YW5kbGVyIGlzIG5vdCB1bmlxdWUuCi0tICAgICAgICBUeXBlRXJyb3I6IEJhZCBsb2N1cyB0eXBl LgotLSAgICAgICAgQXR0cmlidXRlRXJyb3I6IFJlcXVpcmVkIGF0dHJpYnV0ZXMgb2YgaGFuZGxl ciBhcmUgbWlzc2luZy4KLS0gICAgIiIiCi0tCi0tICAgIGlmIGxvY3VzIGlzIE5vbmU6Ci0tICAg ICAgICBpZiBnZGIucGFyYW1ldGVyKCJ2ZXJib3NlIik6Ci0tICAgICAgICAgICAgZ2RiLndyaXRl KCJSZWdpc3RlcmluZyBnbG9iYWwgJXMgaGFuZGxlciAuLi5cbiIgJSBoYW5kbGVyLm5hbWUpCi0t ICAgICAgICBsb2N1cyA9IGdkYgotLSAgICBlbGlmIGlzaW5zdGFuY2UobG9jdXMsIGdkYi5Qcm9n c3BhY2UpOgotLSAgICAgICAgaWYgZ2RiLnBhcmFtZXRlcigidmVyYm9zZSIpOgotLSAgICAgICAg ICAgIGdkYi53cml0ZSgKLS0gICAgICAgICAgICAgICAgIlJlZ2lzdGVyaW5nICVzIGhhbmRsZXIg Zm9yICVzIC4uLlxuIiAlIChoYW5kbGVyLm5hbWUsIGxvY3VzLmZpbGVuYW1lKQotLSAgICAgICAg ICAgICkKLS0gICAgZWxzZToKLS0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigibG9jdXMgc2hvdWxk IGJlIGdkYi5Qcm9nc3BhY2Ugb3IgTm9uZSIpCi0tCi0tICAgICMgU29tZSBzYW5pdHkgY2hlY2tz IG9uIEhBTkRMRVIuICBDYWxsaW5nIGdldGF0dHIgd2lsbCByYWlzZSBhbgotLSAgICAjIGV4Y2Vw dGlvbiBpZiB0aGUgYXR0cmlidXRlIGRvZXNuJ3QgZXhpc3QsIHdoaWNoIGlzIHdoYXQgd2Ugd2Fu dC4KLS0gICAgIyBUaGVzZSBjaGVja3MgYXJlIG5vdCBleGhhdXN0aXZlOyB3ZSBkb24ndCBjaGVj ayB0aGUgYXR0cmlidXRlcwotLSAgICAjIGhhdmUgdGhlIGNvcnJlY3QgdHlwZXMsIG9yIHRoZSBt ZXRob2QgaGFzIHRoZSBjb3JyZWN0IHNpZ25hdHVyZSwKLS0gICAgIyBidXQgdGhpcyBzaG91bGQg Y2F0Y2ggc29tZSBiYXNpYyBtaXN0YWtlcy4KLS0gICAgZ2V0YXR0cihoYW5kbGVyLCAibmFtZSIp Ci0tICAgIGdldGF0dHIoaGFuZGxlciwgImVuYWJsZWQiKQotLSAgICBjYWxsX21ldGhvZCA9IGdl dGF0dHIoaGFuZGxlciwgIl9fY2FsbF9fIikKLS0gICAgaWYgbm90IGNhbGxhYmxlKGNhbGxfbWV0 aG9kKToKLS0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAotLSAgICAgICAgICAgICInJXMn IG9iamVjdCdzICdfX2NhbGxfXycgYXR0cmlidXRlIGlzIG5vdCBjYWxsYWJsZSIKLS0gICAgICAg ICAgICAlIHR5cGUoaGFuZGxlcikuX19uYW1lX18KLS0gICAgICAgICkKLS0KLS0gICAgaSA9IDAK LS0gICAgZm9yIG5lZWRsZSBpbiBsb2N1cy5taXNzaW5nX2RlYnVnX2hhbmRsZXJzOgotLSAgICAg ICAgaWYgbmVlZGxlLm5hbWUgPT0gaGFuZGxlci5uYW1lOgotLSAgICAgICAgICAgIGlmIHJlcGxh Y2U6Ci0tICAgICAgICAgICAgICAgIGRlbCBsb2N1cy5taXNzaW5nX2RlYnVnX2hhbmRsZXJzW2ld Ci0tICAgICAgICAgICAgZWxzZToKLS0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9y KCJIYW5kbGVyICVzIGFscmVhZHkgZXhpc3RzLiIgJSBoYW5kbGVyLm5hbWUpCi0tICAgICAgICBp ICs9IDEKLS0gICAgbG9jdXMubWlzc2luZ19kZWJ1Z19oYW5kbGVycy5pbnNlcnQoMCwgaGFuZGxl cikKLSsgICAgIiIiU2VlIGdkYi5taXNzaW5nX2ZpbGVzLnJlZ2lzdGVyX2hhbmRsZXIuIiIiCi0r ICAgIGdkYi5taXNzaW5nX2ZpbGVzLnJlZ2lzdGVyX2hhbmRsZXIoImRlYnVnIiwgbG9jdXMsIGhh bmRsZXIsIHJlcGxhY2UpCi1kaWZmIC0tZ2l0IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL21pc3Npbmdf ZmlsZXMucHkgYi9nZGIvcHl0aG9uL2xpYi9nZGIvbWlzc2luZ19maWxlcy5weQotbmV3IGZpbGUg bW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi9weXRob24vbGliL2dkYi9taXNz aW5nX2ZpbGVzLnB5Ci1AQCAtMCwwICsxLDIwNCBAQAotKyMgQ29weXJpZ2h0IChDKSAyMDIzLTIw MjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rIyBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyMg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKLSsjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgotKyMKLSsjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsjIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsjIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rIwotKyMgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsjIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LgotKwotKyIiIgotK01pc3NpbmdGaWxlSGFuZGxlciBiYXNlIGNsYXNzLCBhbmQg c3VwcG9ydCBmdW5jdGlvbnMgdXNlZCBieSB0aGUKLSttaXNzaW5nX2RlYnVnLnB5IGFuZCBtaXNz aW5nX29iamZpbGUucHkgbW9kdWxlcy4KLSsiIiIKLSsKLStpbXBvcnQgc3lzCi0rCi0raW1wb3J0 IGdkYgotKwotK2lmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDcpOgotKyAgICAjIEZ1bmN0aW9u cyBzdHIuaXNhc2NpaSgpIGFuZCBzdHIuaXNhbG51bSBhcmUgYXZhaWxhYmxlIHN0YXJ0aW5nIFB5 dGhvbgotKyAgICAjIDMuNy4KLSsgICAgZGVmIGlzYXNjaWkoY2gpOgotKyAgICAgICAgcmV0dXJu IGNoLmlzYXNjaWkoKQotKwotKyAgICBkZWYgaXNhbG51bShjaCk6Ci0rICAgICAgICByZXR1cm4g Y2guaXNhbG51bSgpCi0rCi0rZWxzZToKLSsgICAgIyBPbGRlciB2ZXJzaW9uIG9mIFB5dGhvbiBk b2Vzbid0IGhhdmUgc3RyLmlzYXNjaWkoKSBhbmQKLSsgICAgIyBzdHIuaXNhbG51bSgpIHNvIHBy b3ZpZGUgb3VyIG93bi4KLSsgICAgIwotKyAgICAjIFdlIGNvdWxkIGltcG9ydCBpc2FsbnVtKCkg YW5kIGlzYXNjaWkoKSBmcm9tIHRoZSBjdXJzZXMgbGlicmFyeSwKLSsgICAgIyBidXQgdGhhdCBh ZGRzIGFuIGV4dHJhIGRlcGVuZGVuY3kuICBHaXZlbiB0aGVzZSBmdW5jdGlvbnMgYXJlCi0rICAg ICMgYm90aCBzbWFsbCBhbmQgdHJpdmlhbCBsZXRzIGltcGxlbWVudCB0aGVtIGhlcmUuCi0rICAg ICMKLSsgICAgIyBUaGVzZSBkZWZpbml0aW9ucyBhcmUgYmFzZWQgb24gdGhvc2UgaW4gdGhlIGN1 cnNlcyBsaWJyYXJ5LCBidXQKLSsgICAgIyBzaW1wbGlmaWVkIGFzIHdlIGtub3cgQyB3aWxsIGFs d2F5cyBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIgJ3N0cicuCi0rCi0rICAgIGRlZiBpc2RpZ2l0KGMp OgotKyAgICAgICAgcmV0dXJuIDQ4IDw9IG9yZChjKSA8PSA1NwotKwotKyAgICBkZWYgaXNsb3dl cihjKToKLSsgICAgICAgIHJldHVybiA5NyA8PSBvcmQoYykgPD0gMTIyCi0rCi0rICAgIGRlZiBp c3VwcGVyKGMpOgotKyAgICAgICAgcmV0dXJuIDY1IDw9IG9yZChjKSA8PSA5MAotKwotKyAgICBk ZWYgaXNhbHBoYShjKToKLSsgICAgICAgIHJldHVybiBpc3VwcGVyKGMpIG9yIGlzbG93ZXIoYykK LSsKLSsgICAgZGVmIGlzYWxudW0oYyk6Ci0rICAgICAgICByZXR1cm4gaXNhbHBoYShjKSBvciBp c2RpZ2l0KGMpCi0rCi0rICAgIGRlZiBpc2FzY2lpKGMpOgotKyAgICAgICAgcmV0dXJuIDAgPD0g b3JkKGMpIDw9IDEyNwotKwotKwotK2RlZiBfdmFsaWRhdGVfbmFtZShuYW1lKToKLSsgICAgIiIi VmFsaWRhdGUgYSBtaXNzaW5nIGZpbGUgaGFuZGxlciBuYW1lIHN0cmluZy4KLSsKLSsgICAgSWYg bmFtZSBpcyB2YWxpZCBhcyBhIG1pc3NpbmcgZmlsZSBoYW5kbGVyIG5hbWUsIHRoZW4gdGhpcwot KyAgICBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuICBJZiBuYW1lIGlzIG5vdCB2YWxpZCB0aGVuIGFu IGV4Y2VwdGlvbiBpcwotKyAgICByYWlzZWQuCi0rCi0rICAgIEFyZ3VtZW50czoKLSsgICAgICAg IG5hbWU6IEEgc3RyaW5nLCB0aGUgbmFtZSBvZiBhIG1pc3NpbmcgZmlsZSBoYW5kbGVyLgotKwot KyAgICBSZXR1cm5zOgotKyAgICAgICAgTm90aGluZy4KLSsKLSsgICAgUmFpc2VzOgotKyAgICAg ICAgVmFsdWVFcnJvcjogSWYgbmFtZSBpcyBpbnZhbGlkIGFzIGEgbWlzc2luZyBmaWxlIGhhbmRs ZXIKLSsgICAgICAgICAgICAgICAgICAgIG5hbWUuCi0rICAgICIiIgotKwotKyAgICBmb3IgY2gg aW4gbmFtZToKLSsgICAgICAgIGlmIG5vdCBpc2FzY2lpKGNoKSBvciBub3QgKGlzYWxudW0oY2gp IG9yIGNoIGluICJfLSIpOgotKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQg Y2hhcmFjdGVyICclcycgaW4gaGFuZGxlciBuYW1lOiAlcyIgJSAoY2gsIG5hbWUpKQotKwotKwot K2NsYXNzIE1pc3NpbmdGaWxlSGFuZGxlcihvYmplY3QpOgotKyAgICAiIiJCYXNlIGNsYXNzIGZv ciBtaXNzaW5nIGZpbGUgaGFuZGxlcnMgd3JpdHRlbiBpbiBQeXRob24uCi0rCi0rICAgIEEgbWlz c2luZyBmaWxlIGhhbmRsZXIgaGFzIGEgc2luZ2xlIG1ldGhvZCBfX2NhbGxfXyBhbG9uZyB3aXRo IHRoZQotKyAgICByZWFkL3dyaXRlIGF0dHJpYnV0ZSBlbmFibGVkLCBhbmQgYSByZWFkLW9ubHkg YXR0cmlidXRlIG5hbWUuICBUaGUKLSsgICAgYXR0cmlidXRlcyBhcmUgcHJvdmlkZWQgYnkgdGhp cyBjbGFzcyB3aGlsZSB0aGUgX19jYWxsX18gbWV0aG9kIGlzCi0rICAgIHByb3ZpZGVkIGJ5IGEg c3ViLWNsYXNzLiAgRWFjaCBzdWItY2xhc3NlcyBfX2NhbGxfXyBtZXRob2Qgd2lsbAotKyAgICBo YXZlIGEgZGlmZmVyZW50IHNpZ25hdHVyZS4KLSsKLSsgICAgQXR0cmlidXRlczoKLSsgICAgICAg IG5hbWU6IFJlYWQtb25seSBhdHRyaWJ1dGUsIHRoZSBuYW1lIG9mIHRoaXMgaGFuZGxlci4KLSsg ICAgICAgIGVuYWJsZWQ6IFdoZW4gdHJ1ZSB0aGlzIGhhbmRsZXIgaXMgZW5hYmxlZC4KLSsgICAg IiIiCi0rCi0rICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLSsgICAgICAgICIiIkNvbnN0 cnVjdG9yLgotKwotKyAgICAgICAgQXJnczoKLSsgICAgICAgICAgICBuYW1lOiBBbiBpZGVudGlm eWluZyBuYW1lIGZvciB0aGlzIGhhbmRsZXIuCi0rCi0rICAgICAgICBSYWlzZXM6Ci0rICAgICAg ICAgICAgVHlwZUVycm9yOiBuYW1lIGlzIG5vdCBhIHN0cmluZy4KLSsgICAgICAgICAgICBWYWx1 ZUVycm9yOiBuYW1lIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4KLSsgICAgICAgICIiIgot KwotKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKLSsgICAgICAgICAgICBy YWlzZSBUeXBlRXJyb3IoImluY29ycmVjdCB0eXBlIGZvciBuYW1lOiAlcyIgJSB0eXBlKG5hbWUp KQotKwotKyAgICAgICAgX3ZhbGlkYXRlX25hbWUobmFtZSkKLSsKLSsgICAgICAgIHNlbGYuX25h bWUgPSBuYW1lCi0rICAgICAgICBzZWxmLl9lbmFibGVkID0gVHJ1ZQotKwotKyAgICBAcHJvcGVy dHkKLSsgICAgZGVmIG5hbWUoc2VsZik6Ci0rICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQotKwot KyAgICBAcHJvcGVydHkKLSsgICAgZGVmIGVuYWJsZWQoc2VsZik6Ci0rICAgICAgICByZXR1cm4g c2VsZi5fZW5hYmxlZAotKwotKyAgICBAZW5hYmxlZC5zZXR0ZXIKLSsgICAgZGVmIGVuYWJsZWQo c2VsZiwgdmFsdWUpOgotKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOgot KyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaW5jb3JyZWN0IHR5cGUgZm9yIGVuYWJsZWQg YXR0cmlidXRlOiAlcyIgJSB0eXBlKHZhbHVlKSkKLSsgICAgICAgIHNlbGYuX2VuYWJsZWQgPSB2 YWx1ZQotKwotKwotK2RlZiByZWdpc3Rlcl9oYW5kbGVyKGhhbmRsZXJfdHlwZSwgbG9jdXMsIGhh bmRsZXIsIHJlcGxhY2U9RmFsc2UpOgotKyAgICAiIiJSZWdpc3RlciBoYW5kbGVyIGluIGdpdmVu IGxvY3VzLgotKwotKyAgICBUaGUgaGFuZGxlciBpcyBwcmVwZW5kZWQgdG8gdGhlIGxvY3VzJ3Mg bWlzc2luZyBmaWxlIGhhbmRsZXJzCi0rICAgIGxpc3QuIFRoZSBuYW1lIG9mIGhhbmRsZXIgc2hv dWxkIGJlIHVuaXF1ZSAob3IgcmVwbGFjZSBtdXN0IGJlCi0rICAgIFRydWUpLCBhbmQgdGhlIG5h bWUgbXVzdCBwYXNzIHRoZSBfdmFsaWRhdGVfbmFtZSBjaGVjay4KLSsKLSsgICAgQXJndW1lbnRz OgotKyAgICAgICAgaGFuZGxlcl90eXBlOiBBIHN0cmluZywgZWl0aGVyICdkZWJ1Zycgb3IgJ29i amZpbGUnIGluZGljYXRpbmcgdGhlCi0rICAgICAgICAgICAgdHlwZSBvZiBoYW5kbGVyIHRvIGJl IHJlZ2lzdGVyZWQuCi0rICAgICAgICBsb2N1czogRWl0aGVyIGEgcHJvZ3NwYWNlLCBvciBOb25l IChpbiB3aGljaCBjYXNlIHRoZSB1bndpbmRlcgotKyAgICAgICAgICAgICAgIGlzIHJlZ2lzdGVy ZWQgZ2xvYmFsbHkpLgotKyAgICAgICAgaGFuZGxlcjogQW4gb2JqZWN0IHVzZWQgYXMgYSBtaXNz aW5nIGZpbGUgaGFuZGxlci4gIFVzdWFsbHkgYQotKyAgICAgICAgICAgIHN1Yi1jbGFzcyBvZiBN aXNzaW5nRmlsZUhhbmRsZXIuCi0rICAgICAgICByZXBsYWNlOiBJZiBUcnVlLCByZXBsYWNlcyBl eGlzdGluZyBoYW5kbGVyIHdpdGggdGhlIHNhbWUgbmFtZQotKyAgICAgICAgICAgICAgICAgd2l0 aGluIGxvY3VzLiAgT3RoZXJ3aXNlLCByYWlzZXMgUnVudGltZUV4Y2VwdGlvbiBpZgotKyAgICAg ICAgICAgICAgICAgdW53aW5kZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLgot KwotKyAgICBSZXR1cm5zOgotKyAgICAgICAgTm90aGluZy4KLSsKLSsgICAgUmFpc2VzOgotKyAg ICAgICAgUnVudGltZUVycm9yOiBUaGUgbmFtZSBvZiBoYW5kbGVyIGlzIG5vdCB1bmlxdWUuCi0r ICAgICAgICBUeXBlRXJyb3I6IEJhZCBsb2N1cyB0eXBlLgotKyAgICAgICAgQXR0cmlidXRlRXJy b3I6IFJlcXVpcmVkIGF0dHJpYnV0ZXMgb2YgaGFuZGxlciBhcmUgbWlzc2luZy4KLSsgICAgICAg IFZhbHVlRXJyb3I6IElmIHRoZSBuYW1lIG9mIHRoZSBoYW5kbGVyIGlzIGludmFsaWQsIG9yIGlm Ci0rICAgICAgICAgICAgaGFuZGxlcl90eXBlIGlzIG5laXRoZXIgJ2RlYnVnJyBvciAnb2JqZmls ZScuCi0rICAgICIiIgotKwotKyAgICBpZiBoYW5kbGVyX3R5cGUgIT0gImRlYnVnIiBhbmQgaGFu ZGxlcl90eXBlICE9ICJvYmpmaWxlIjoKLSsgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImhhbmRs ZXJfdHlwZSBtdXN0IGJlICdkZWJ1Zycgb3IgJ29iamZpbGUnIikKLSsKLSsgICAgaWYgbG9jdXMg aXMgTm9uZToKLSsgICAgICAgIGlmIGdkYi5wYXJhbWV0ZXIoInZlcmJvc2UiKToKLSsgICAgICAg ICAgICBnZGIud3JpdGUoIlJlZ2lzdGVyaW5nIGdsb2JhbCAlcyBoYW5kbGVyIC4uLlxuIiAlIGhh bmRsZXIubmFtZSkKLSsgICAgICAgIGxvY3VzID0gZ2RiCi0rICAgIGVsaWYgaXNpbnN0YW5jZShs b2N1cywgZ2RiLlByb2dzcGFjZSk6Ci0rICAgICAgICBpZiBnZGIucGFyYW1ldGVyKCJ2ZXJib3Nl Iik6Ci0rICAgICAgICAgICAgZ2RiLndyaXRlKAotKyAgICAgICAgICAgICAgICAiUmVnaXN0ZXJp bmcgJXMgaGFuZGxlciBmb3IgJXMgLi4uXG4iICUgKGhhbmRsZXIubmFtZSwgbG9jdXMuZmlsZW5h bWUpCi0rICAgICAgICAgICAgKQotKyAgICBlbHNlOgotKyAgICAgICAgcmFpc2UgVHlwZUVycm9y KCJsb2N1cyBzaG91bGQgYmUgZ2RiLlByb2dzcGFjZSBvciBOb25lIikKLSsKLSsgICAgIyBTb21l IHNhbml0eSBjaGVja3Mgb24gSEFORExFUi4gIENhbGxpbmcgZ2V0YXR0ciB3aWxsIHJhaXNlIGFu Ci0rICAgICMgZXhjZXB0aW9uIGlmIHRoZSBhdHRyaWJ1dGUgZG9lc24ndCBleGlzdCwgd2hpY2gg aXMgd2hhdCB3ZSB3YW50LgotKyAgICAjIFRoZXNlIGNoZWNrcyBhcmUgbm90IGV4aGF1c3RpdmU7 IHdlIGRvbid0IGNoZWNrIHRoZSBhdHRyaWJ1dGVzCi0rICAgICMgaGF2ZSB0aGUgY29ycmVjdCB0 eXBlcywgb3IgdGhlIG1ldGhvZCBoYXMgdGhlIGNvcnJlY3Qgc2lnbmF0dXJlLAotKyAgICAjIGJ1 dCB0aGlzIHNob3VsZCBjYXRjaCBzb21lIGJhc2ljIG1pc3Rha2VzLgotKyAgICBuYW1lID0gZ2V0 YXR0cihoYW5kbGVyLCAibmFtZSIpCi0rICAgIF92YWxpZGF0ZV9uYW1lKG5hbWUpCi0rCi0rICAg IGdldGF0dHIoaGFuZGxlciwgImVuYWJsZWQiKQotKwotKyAgICBjYWxsX21ldGhvZCA9IGdldGF0 dHIoaGFuZGxlciwgIl9fY2FsbF9fIikKLSsgICAgaWYgbm90IGNhbGxhYmxlKGNhbGxfbWV0aG9k KToKLSsgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKAotKyAgICAgICAgICAgICInJXMnIG9i amVjdCdzICdfX2NhbGxfXycgYXR0cmlidXRlIGlzIG5vdCBjYWxsYWJsZSIKLSsgICAgICAgICAg ICAlIHR5cGUoaGFuZGxlcikuX19uYW1lX18KLSsgICAgICAgICkKLSsKLSsgICAgaSA9IDAKLSsg ICAgZm9yIG5lZWRsZSBpbiBsb2N1cy5taXNzaW5nX2ZpbGVfaGFuZGxlcnM6Ci0rICAgICAgICBp ZiBuZWVkbGVbMF0gPT0gaGFuZGxlcl90eXBlIGFuZCBuZWVkbGVbMV0ubmFtZSA9PSBoYW5kbGVy Lm5hbWU6Ci0rICAgICAgICAgICAgaWYgcmVwbGFjZToKLSsgICAgICAgICAgICAgICAgZGVsIGxv Y3VzLm1pc3NpbmdfZmlsZV9oYW5kbGVyc1tpXQotKyAgICAgICAgICAgIGVsc2U6Ci0rICAgICAg ICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiSGFuZGxlciAlcyBhbHJlYWR5IGV4aXN0cy4i ICUgaGFuZGxlci5uYW1lKQotKyAgICAgICAgaSArPSAxCi0rICAgIGxvY3VzLm1pc3NpbmdfZmls ZV9oYW5kbGVycy5pbnNlcnQoMCwgKGhhbmRsZXJfdHlwZSwgaGFuZGxlcikpCi1kaWZmIC0tZ2l0 IGEvZ2RiL3B5dGhvbi9saWIvZ2RiL21pc3Npbmdfb2JqZmlsZS5weSBiL2dkYi9weXRob24vbGli L2dkYi9taXNzaW5nX29iamZpbGUucHkKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLS0gL2Rldi9u dWxsCi0rKysgYi9nZGIvcHl0aG9uL2xpYi9nZGIvbWlzc2luZ19vYmpmaWxlLnB5Ci1AQCAtMCww ICsxLDY3IEBACi0rIyBDb3B5cmlnaHQgKEMpIDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBJbmMuCi0rCi0rIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsjIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0r IyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKyMKLSsjIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyMg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKLSsjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKLSsjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0rIwotKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotKwotKyIiIgotK01pc3Np bmdPYmpmaWxlSGFuZGxlciBiYXNlIGNsYXNzLCBhbmQgcmVnaXN0ZXJfaGFuZGxlciBmdW5jdGlv bi4KLSsiIiIKLSsKLStpbXBvcnQgZ2RiCi0rZnJvbSBnZGIubWlzc2luZ19maWxlcyBpbXBvcnQg TWlzc2luZ0ZpbGVIYW5kbGVyCi0rCi0rCi0rY2xhc3MgTWlzc2luZ09iamZpbGVIYW5kbGVyKE1p c3NpbmdGaWxlSGFuZGxlcik6Ci0rICAgICIiIkJhc2UgY2xhc3MgZm9yIG1pc3Npbmcgb2JqZmls ZSBoYW5kbGVycyB3cml0dGVuIGluIFB5dGhvbi4KLSsKLSsgICAgQSBtaXNzaW5nIG9iamZpbGUg aGFuZGxlciBoYXMgYSBzaW5nbGUgbWV0aG9kIF9fY2FsbF9fIGFsb25nIHdpdGgKLSsgICAgdGhl IHJlYWQvd3JpdGUgYXR0cmlidXRlIGVuYWJsZWQsIGFuZCBhIHJlYWQtb25seSBhdHRyaWJ1dGUg bmFtZS4KLSsKLSsgICAgQXR0cmlidXRlczoKLSsgICAgICAgIG5hbWU6IFJlYWQtb25seSBhdHRy aWJ1dGUsIHRoZSBuYW1lIG9mIHRoaXMgaGFuZGxlci4KLSsgICAgICAgIGVuYWJsZWQ6IFdoZW4g dHJ1ZSB0aGlzIGhhbmRsZXIgaXMgZW5hYmxlZC4KLSsgICAgIiIiCi0rCi0rICAgIGRlZiBfX2Nh bGxfXyhzZWxmLCBidWlsZGlkLCBmaWxlbmFtZSk6Ci0rICAgICAgICAiIiJIYW5kbGUgYSBtaXNz aW5nIG9iamZpbGUgd2hlbiBHREIgY2FuIGtub3dzIHRoZSBidWlsZC1pZC4KLSsKLSsgICAgICAg IEFyZ3VtZW50czoKLSsKLSsgICAgICAgICAgICBidWlsZGlkOiBBIHN0cmluZyBjb250YWluaW5n IHRoZSBidWlsZC1pZCBmb3IgdGhlIG9iamZpbGUKLSsgICAgICAgICAgICAgICAgR0RCIGlzIHNl YXJjaGluZyBmb3IuCi0rICAgICAgICAgICAgZmlsZW5hbWU6IEEgc3RyaW5nIGNvbnRhaW5pbmcg dGhlIG5hbWUgb2YgdGhlIGZpbGUgR0RCIGlzCi0rICAgICAgICAgICAgICAgIHNlYXJjaGluZyBm b3IuICBUaGlzIGlzIHByb3ZpZGVkIG9ubHkgZm9yIHRoZSBwdXJwb3NlCi0rICAgICAgICAgICAg ICAgIG9mIGNyZWF0aW5nIGRpYWdub3N0aWMgbWVzc2FnZXMuICBJZiB0aGUgZmlsZSBpcyBmb3Vu ZAotKyAgICAgICAgICAgICAgICBpdCBkb2VzIG5vdCBoYXZlIHRvIGJlIHBsYWNlZCBoZXJlLCBh bmQgdGhpcyBmaWxlCi0rICAgICAgICAgICAgICAgIG1pZ2h0IGFscmVhZHkgZXhpc3QgYnV0IEdE QiBoYXMgZGV0ZXJtaW5lZCBpdCBpcyBub3QKLSsgICAgICAgICAgICAgICAgc3VpdGFibGUgZm9y IHVzZSwgZS5nLiBpZiB0aGUgYnVpbGQtaWQgZG9lc24ndCBtYXRjaC4KLSsKLSsgICAgICAgIFJl dHVybnM6Ci0rCi0rICAgICAgICAgICAgVHJ1ZTogR0RCIHNob3VsZCB0cnkgYWdhaW4gdG8gbG9j YXRlIHRoZSBtaXNzaW5nIG9iamZpbGUsCi0rICAgICAgICAgICAgICAgIHRoZSBoYW5kbGVyIG1h eSBoYXZlIGluc3RhbGxlZCB0aGUgbWlzc2luZyBmaWxlLgotKyAgICAgICAgICAgIEZhbHNlOiBH REIgc2hvdWxkIG1vdmUgb24gd2l0aG91dCB0aGUgb2JqZmlsZS4gIFRoZQotKyAgICAgICAgICAg ICAgICBoYW5kbGVyIGhhcyBkZXRlcm1pbmVkIHRoYXQgdGhpcyBvYmpmaWxlIGlzIG5vdAotKyAg ICAgICAgICAgICAgICBhdmFpbGFibGUuCi0rICAgICAgICAgICAgQSBzdHJpbmc6IEdEQiBzaG91 bGQgbG9hZCB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aDsgaXQKLSsgICAgICAgICAgICAgICAg Y29udGFpbnMgdGhlIHJlcXVlc3RlZCBvYmpmaWxlLgotKyAgICAgICAgICAgIE5vbmU6IFRoaXMg aGFuZGxlciBjYW4ndCBoZWxwIHdpdGggdGhpcyBvYmpmaWxlLiAgR0RCCi0rICAgICAgICAgICAg ICAgIHNob3VsZCB0cnkgYW55IG90aGVyIHJlZ2lzdGVyZWQgaGFuZGxlcnMuCi0rCi0rICAgICAg ICAiIiIKLSsgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIk1pc3NpbmdPYmpmaWxl SGFuZGxlci5fX2NhbGxfXygpIikKLSsKLSsKLStkZWYgcmVnaXN0ZXJfaGFuZGxlcihsb2N1cywg aGFuZGxlciwgcmVwbGFjZT1GYWxzZSk6Ci0rICAgICIiIlNlZSBnZGIubWlzc2luZ19maWxlcy5y ZWdpc3Rlcl9oYW5kbGVyLiIiIgotKyAgICBnZGIubWlzc2luZ19maWxlcy5yZWdpc3Rlcl9oYW5k bGVyKCJvYmpmaWxlIiwgbG9jdXMsIGhhbmRsZXIsIHJlcGxhY2UpCi1kaWZmIC0tZ2l0IGEvZ2Ri L3B5dGhvbi9weS1wcm9nc3BhY2UuYyBiL2dkYi9weXRob24vcHktcHJvZ3NwYWNlLmMKLS0tLSBh L2dkYi9weXRob24vcHktcHJvZ3NwYWNlLmMKLSsrKyBiL2dkYi9weXRob24vcHktcHJvZ3NwYWNl LmMKLUBAIC01NSw4ICs1NSw4IEBAIHN0cnVjdCBwc3BhY2Vfb2JqZWN0Ci0gICAvKiBUaGUgZGVi dWcgbWV0aG9kIGxpc3QuICAqLwotICAgUHlPYmplY3QgKnhtZXRob2RzOwotIAotLSAgLyogVGhl IG1pc3NpbmcgZGVidWcgaGFuZGxlciBsaXN0LiAgKi8KLS0gIFB5T2JqZWN0ICptaXNzaW5nX2Rl YnVnX2hhbmRsZXJzOwotKyAgLyogVGhlIG1pc3NpbmcgZmlsZSBoYW5kbGVyIGxpc3QuICAqLwot KyAgUHlPYmplY3QgKm1pc3NpbmdfZmlsZV9oYW5kbGVyczsKLSB9OwotIAotIGV4dGVybiBQeVR5 cGVPYmplY3QgcHNwYWNlX29iamVjdF90eXBlCi1AQCAtMTY2LDcgKzE2Niw3IEBAIHBzcHlfZGVh bGxvYyAoUHlPYmplY3QgKnNlbGYpCi0gICBQeV9YREVDUkVGIChwc19zZWxmLT5mcmFtZV91bndp bmRlcnMpOwotICAgUHlfWERFQ1JFRiAocHNfc2VsZi0+dHlwZV9wcmludGVycyk7Ci0gICBQeV9Y REVDUkVGIChwc19zZWxmLT54bWV0aG9kcyk7Ci0tICBQeV9YREVDUkVGIChwc19zZWxmLT5taXNz aW5nX2RlYnVnX2hhbmRsZXJzKTsKLSsgIFB5X1hERUNSRUYgKHBzX3NlbGYtPm1pc3NpbmdfZmls ZV9oYW5kbGVycyk7Ci0gICBQeV9UWVBFIChzZWxmKS0+dHBfZnJlZSAoc2VsZik7Ci0gfQotIAot QEAgLTIwMiw4ICsyMDIsOCBAQCBwc3B5X2luaXRpYWxpemUgKHBzcGFjZV9vYmplY3QgKnNlbGYp Ci0gICBpZiAoc2VsZi0+eG1ldGhvZHMgPT0gTlVMTCkKLSAgICAgcmV0dXJuIDA7Ci0gCi0tICBz ZWxmLT5taXNzaW5nX2RlYnVnX2hhbmRsZXJzID0gUHlMaXN0X05ldyAoMCk7Ci0tICBpZiAoc2Vs Zi0+bWlzc2luZ19kZWJ1Z19oYW5kbGVycyA9PSBudWxscHRyKQotKyAgc2VsZi0+bWlzc2luZ19m aWxlX2hhbmRsZXJzID0gUHlMaXN0X05ldyAoMCk7Ci0rICBpZiAoc2VsZi0+bWlzc2luZ19maWxl X2hhbmRsZXJzID09IG51bGxwdHIpCi0gICAgIHJldHVybiAwOwotIAotICAgcmV0dXJuIDE7Ci1A QCAtMzQ5LDE4ICszNDksMTggQEAgcHNweV9nZXRfeG1ldGhvZHMgKFB5T2JqZWN0ICpvLCB2b2lk ICppZ25vcmUpCi0gLyogUmV0dXJuIHRoZSBsaXN0IG9mIG1pc3NpbmcgZGVidWcgaGFuZGxlcnMg Zm9yIHRoaXMgcHJvZ3JhbSBzcGFjZS4gICovCi0gCi0gc3RhdGljIFB5T2JqZWN0ICoKLS1wc3B5 X2dldF9taXNzaW5nX2RlYnVnX2hhbmRsZXJzIChQeU9iamVjdCAqbywgdm9pZCAqaWdub3JlKQot K3BzcHlfZ2V0X21pc3NpbmdfZmlsZV9oYW5kbGVycyAoUHlPYmplY3QgKm8sIHZvaWQgKmlnbm9y ZSkKLSB7Ci0gICBwc3BhY2Vfb2JqZWN0ICpzZWxmID0gKHBzcGFjZV9vYmplY3QgKikgbzsKLSAK LS0gIFB5X0lOQ1JFRiAoc2VsZi0+bWlzc2luZ19kZWJ1Z19oYW5kbGVycyk7Ci0tICByZXR1cm4g c2VsZi0+bWlzc2luZ19kZWJ1Z19oYW5kbGVyczsKLSsgIFB5X0lOQ1JFRiAoc2VsZi0+bWlzc2lu Z19maWxlX2hhbmRsZXJzKTsKLSsgIHJldHVybiBzZWxmLT5taXNzaW5nX2ZpbGVfaGFuZGxlcnM7 Ci0gfQotIAotIC8qIFNldCB0aGlzIHByb2dyYW0gc3BhY2UncyBsaXN0IG9mIG1pc3NpbmcgZGVi dWcgaGFuZGxlcnMgdG8gSEFORExFUlMuICAqLwotIAotIHN0YXRpYyBpbnQKLS1wc3B5X3NldF9t aXNzaW5nX2RlYnVnX2hhbmRsZXJzIChQeU9iamVjdCAqbywgUHlPYmplY3QgKmhhbmRsZXJzLAot K3BzcHlfc2V0X21pc3NpbmdfZmlsZV9oYW5kbGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpo YW5kbGVycywKLSAJCQkJIHZvaWQgKmlnbm9yZSkKLSB7Ci0gICBwc3BhY2Vfb2JqZWN0ICpzZWxm ID0gKHBzcGFjZV9vYmplY3QgKikgbzsKLUBAIC0zODAsOSArMzgwLDkgQEAgcHNweV9zZXRfbWlz c2luZ19kZWJ1Z19oYW5kbGVycyAoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpoYW5kbGVycywKLSAg ICAgfQotIAotICAgLyogVGFrZSBjYXJlIGluIGNhc2UgdGhlIExIUyBhbmQgUkhTIGFyZSByZWxh dGVkIHNvbWVob3cuICAqLwotLSAgZ2RicHlfcmVmPD4gdG1wIChzZWxmLT5taXNzaW5nX2RlYnVn X2hhbmRsZXJzKTsKLSsgIGdkYnB5X3JlZjw+IHRtcCAoc2VsZi0+bWlzc2luZ19maWxlX2hhbmRs ZXJzKTsKLSAgIFB5X0lOQ1JFRiAoaGFuZGxlcnMpOwotLSAgc2VsZi0+bWlzc2luZ19kZWJ1Z19o YW5kbGVycyA9IGhhbmRsZXJzOwotKyAgc2VsZi0+bWlzc2luZ19maWxlX2hhbmRsZXJzID0gaGFu ZGxlcnM7Ci0gCi0gICByZXR1cm4gMDsKLSB9Ci1AQCAtNzc5LDggKzc3OSw4IEBAIHN0YXRpYyBn ZGJfUHlHZXRTZXREZWYgcHNwYWNlX2dldHNldFtdID0KLSAgICAgIlR5cGUgcHJpbnRlcnMuIiwg TlVMTCB9LAotICAgeyAieG1ldGhvZHMiLCBwc3B5X2dldF94bWV0aG9kcywgTlVMTCwKLSAgICAg IkRlYnVnIG1ldGhvZHMuIiwgTlVMTCB9LAotLSAgeyAibWlzc2luZ19kZWJ1Z19oYW5kbGVycyIs IHBzcHlfZ2V0X21pc3NpbmdfZGVidWdfaGFuZGxlcnMsCi0tICAgIHBzcHlfc2V0X21pc3Npbmdf ZGVidWdfaGFuZGxlcnMsICJNaXNzaW5nIGRlYnVnIGhhbmRsZXJzLiIsIE5VTEwgfSwKLSsgIHsg Im1pc3NpbmdfZmlsZV9oYW5kbGVycyIsIHBzcHlfZ2V0X21pc3NpbmdfZmlsZV9oYW5kbGVycywK LSsgICAgcHNweV9zZXRfbWlzc2luZ19maWxlX2hhbmRsZXJzLCAiTWlzc2luZyBmaWxlIGhhbmRs ZXJzLiIsIE5VTEwgfSwKLSAgIHsgTlVMTCB9Ci0gfTsKLSAKLWRpZmYgLS1naXQgYS9nZGIvcHl0 aG9uL3B5dGhvbi5jIGIvZ2RiL3B5dGhvbi9weXRob24uYwotLS0tIGEvZ2RiL3B5dGhvbi9weXRo b24uYwotKysrIGIvZ2RiL3B5dGhvbi9weXRob24uYwotQEAgLTM1LDYgKzM1LDcgQEAKLSAjaW5j bHVkZSAibG9jYXRpb24uaCIKLSAjaW5jbHVkZSAicnVuLW9uLW1haW4tdGhyZWFkLmgiCi0gI2lu Y2x1ZGUgIm9ic2VydmFibGUuaCIKLSsjaW5jbHVkZSAiYnVpbGQtaWQuaCIKLSAKLSAjaWYgR0RC X1NFTEZfVEVTVAotICNpbmNsdWRlICJnZGJzdXBwb3J0L3NlbGZ0ZXN0LmgiCi1AQCAtMTI4LDgg KzEyOSwxMSBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnN0cmluZz4gZ2RicHlfY29sb3Jp emUKLSAgIChjb25zdCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUsIGNvbnN0IHN0ZDo6c3RyaW5nICZj b250ZW50cyk7Ci0gc3RhdGljIHN0ZDo6b3B0aW9uYWw8c3RkOjpzdHJpbmc+IGdkYnB5X2NvbG9y aXplX2Rpc2FzbQotIChjb25zdCBzdGQ6OnN0cmluZyAmY29udGVudCwgZ2RiYXJjaCAqZ2RiYXJj aCk7Ci0tc3RhdGljIGV4dF9sYW5nX21pc3NpbmdfZGVidWdpbmZvX3Jlc3VsdCBnZGJweV9oYW5k bGVfbWlzc2luZ19kZWJ1Z2luZm8KLStzdGF0aWMgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3Vs dCBnZGJweV9oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8KLSAgIChjb25zdCBzdHJ1Y3QgZXh0ZW5z aW9uX2xhbmd1YWdlX2RlZm4gKmV4dGxhbmcsIHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKTsKLStz dGF0aWMgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCBnZGJweV9maW5kX29iamZpbGVfZnJv bV9idWlsZGlkCi0rICAoY29uc3Qgc3RydWN0IGV4dGVuc2lvbl9sYW5ndWFnZV9kZWZuICpleHRs YW5nLCBwcm9ncmFtX3NwYWNlICpwc3BhY2UsCi0rICAgY29uc3Qgc3RydWN0IGJmZF9idWlsZF9p ZCAqYnVpbGRfaWQsIGNvbnN0IGNoYXIgKm1pc3NpbmdfZmlsZW5hbWUpOwotIAotIC8qIFRoZSBp bnRlcmZhY2UgYmV0d2VlbiBnZGIgcHJvcGVyIGFuZCBsb2FkaW5nIG9mIHB5dGhvbiBzY3JpcHRz LiAgKi8KLSAKLUBAIC0xNzcsNyArMTgxLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBleHRlbnNp b25fbGFuZ3VhZ2Vfb3BzIHB5dGhvbl9leHRlbnNpb25fb3BzID0KLSAKLSAgIGdkYnB5X3ByaW50 X2luc24sCi0gCi0tICBnZGJweV9oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8KLSsgIGdkYnB5X2hh bmRsZV9taXNzaW5nX2RlYnVnaW5mbywKLSsgIGdkYnB5X2ZpbmRfb2JqZmlsZV9mcm9tX2J1aWxk aWQKLSB9OwotIAotICNlbmRpZiAvKiBIQVZFX1BZVEhPTiAqLwotQEAgLTE3NjEsMTAgKzE3NjYs MTAgQEAgZ2RicHlfZ2V0X2N1cnJlbnRfb2JqZmlsZSAoUHlPYmplY3QgKnVudXNlZDEsIFB5T2Jq ZWN0ICp1bnVzZWQyKQotIC8qIEltcGxlbWVudCB0aGUgJ2hhbmRsZV9taXNzaW5nX2RlYnVnaW5m bycgaG9vayBmb3IgUHl0aG9uLiAgR0RCIGhhcwotICAgIGZhaWxlZCB0byBmaW5kIGFueSBkZWJ1 ZyBpbmZvcm1hdGlvbiBmb3IgT0JKRklMRS4gIFRoZSBleHRlbnNpb24gaGFzIGEKLSAgICBjaGFu Y2UgdG8gcmVjb3JkIHRoaXMsIG9yIGV2ZW4gaW5zdGFsbCB0aGUgcmVxdWlyZWQgZGVidWcgaW5m b3JtYXRpb24uCi0tICAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBleHRfbGFuZ19taXNzaW5nX2Rl YnVnaW5mb19yZXN1bHQgaW4KLS0gICBleHRlbnNpb24tcHJpdi5oIGZvciBkZXRhaWxzIG9mIHRo ZSByZXR1cm4gdmFsdWUuICAqLwotKyAgIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgZXh0X2xhbmdf bWlzc2luZ19maWxlX3Jlc3VsdCBpbiBleHRlbnNpb24tcHJpdi5oCi0rICAgZm9yIGRldGFpbHMg b2YgdGhlIHJldHVybiB2YWx1ZS4gICovCi0gCi0tc3RhdGljIGV4dF9sYW5nX21pc3NpbmdfZGVi dWdpbmZvX3Jlc3VsdAotK3N0YXRpYyBleHRfbGFuZ19taXNzaW5nX2ZpbGVfcmVzdWx0Ci0gZ2Ri cHlfaGFuZGxlX21pc3NpbmdfZGVidWdpbmZvIChjb25zdCBzdHJ1Y3QgZXh0ZW5zaW9uX2xhbmd1 YWdlX2RlZm4gKmV4dGxhbmcsCi0gCQkJCXN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQotIHsKLUBA IC0xODEyLDcgKzE4MTcsNyBAQCBnZGJweV9oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8gKGNvbnN0 IHN0cnVjdCBleHRlbnNpb25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFuZywKLSAgIGlmIChQeUJvb2xf Q2hlY2sgKHB5b19leGVjdXRlX3JldC5nZXQgKCkpKQotICAgICB7Ci0gICAgICAgYm9vbCB0cnlf YWdhaW4gPSBQeU9iamVjdF9Jc1RydWUgKHB5b19leGVjdXRlX3JldC5nZXQgKCkpOwotLSAgICAg IHJldHVybiBleHRfbGFuZ19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQgKHRyeV9hZ2Fpbik7Ci0r ICAgICAgcmV0dXJuIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgKHRyeV9hZ2Fpbik7Ci0g ICAgIH0KLSAKLSAgIGlmICghZ2RicHlfaXNfc3RyaW5nIChweW9fZXhlY3V0ZV9yZXQuZ2V0ICgp KSkKLUBAIC0xODMyLDcgKzE4MzcsMTA4IEBAIGdkYnB5X2hhbmRsZV9taXNzaW5nX2RlYnVnaW5m byAoY29uc3Qgc3RydWN0IGV4dGVuc2lvbl9sYW5ndWFnZV9kZWZuICpleHRsYW5nLAotICAgICAg IHJldHVybiB7fTsKLSAgICAgfQotIAotLSAgcmV0dXJuIGV4dF9sYW5nX21pc3NpbmdfZGVidWdp bmZvX3Jlc3VsdCAoc3RkOjpzdHJpbmcgKGZpbGVuYW1lLmdldCAoKSkpOwotKyAgcmV0dXJuIGV4 dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgKHN0ZDo6c3RyaW5nIChmaWxlbmFtZS5nZXQgKCkp KTsKLSt9Ci0rCi0rLyogSW1wbGVtZW50IHRoZSBmaW5kX29iamZpbGVfZnJvbV9idWlsZGlkIGhv b2sgZm9yIFB5dGhvbi4gIFBTUEFDRSBpcyB0aGUKLSsgICBwcm9ncmFtIHNwYWNlIGluIHdoaWNo IEdEQiBpcyB0cnlpbmcgdG8gZmluZCBhbiBvYmpmaWxlLCBCVUlMRF9JRCBpcyB0aGUKLSsgICBi dWlsZC1pZCBmb3IgdGhlIG1pc3Npbmcgb2JqZmlsZSwgYW5kIEVYUEVDVEVEX0ZJTEVOQU1FIGlz IGEgbm9uLU5VTEwKLSsgICBzdHJpbmcgd2hpY2ggY2FuIGJlIHVzZWQgKGlmIG5lZWRlZCkgaW4g bWVzc2FnZXMgdG8gdGhlIHVzZXIsIGFuZAotKyAgIHJlcHJlc2VudHMgdGhlIGZpbGUgR0RCIGlz IGxvb2tpbmcgZm9yLiAgKi8KLSsKLStzdGF0aWMgZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3Vs dAotK2dkYnB5X2ZpbmRfb2JqZmlsZV9mcm9tX2J1aWxkaWQgKGNvbnN0IHN0cnVjdCBleHRlbnNp b25fbGFuZ3VhZ2VfZGVmbiAqZXh0bGFuZywKLSsJCQkJIHByb2dyYW1fc3BhY2UgKnBzcGFjZSwK LSsJCQkJIGNvbnN0IHN0cnVjdCBiZmRfYnVpbGRfaWQgKmJ1aWxkX2lkLAotKwkJCQkgY29uc3Qg Y2hhciAqbWlzc2luZ19maWxlbmFtZSkKLSt7Ci0rICBnZGJfYXNzZXJ0IChwc3BhY2UgIT0gbnVs bHB0cik7Ci0rICBnZGJfYXNzZXJ0IChidWlsZF9pZCAhPSBudWxscHRyKTsKLSsgIGdkYl9hc3Nl cnQgKG1pc3NpbmdfZmlsZW5hbWUgIT0gbnVsbHB0cik7Ci0rCi0rICAvKiBFYXJseSBleGl0IGlm IFB5dGhvbiBpcyBub3QgaW5pdGlhbGlzZWQuICAqLwotKyAgaWYgKCFnZGJfcHl0aG9uX2luaXRp YWxpemVkIHx8IGdkYl9weXRob25fbW9kdWxlID09IG51bGxwdHIpCi0rICAgIHJldHVybiB7fTsK LSsKLSsgIGdkYnB5X2VudGVyIGVudGVyX3B5OwotKwotKyAgLyogQ29udmVydCBCVUlMRF9JRCBp bnRvIGEgUHl0aG9uIG9iamVjdC4gICovCi0rICBzdGQ6OnN0cmluZyBoZXhfZm9ybSA9IGJpbjJo ZXggKGJ1aWxkX2lkLT5kYXRhLCBidWlsZF9pZC0+c2l6ZSk7Ci0rICBnZGJweV9yZWY8PiBweW9f YnVpbGRpZCA9IGhvc3Rfc3RyaW5nX3RvX3B5dGhvbl9zdHJpbmcgKGhleF9mb3JtLmNfc3RyICgp KTsKLSsgIGlmIChweW9fYnVpbGRpZCA9PSBudWxscHRyKQotKyAgICB7Ci0rICAgICAgZ2RicHlf cHJpbnRfc3RhY2sgKCk7Ci0rICAgICAgcmV0dXJuIHt9OwotKyAgICB9Ci0rCi0rICAvKiBDb252 ZXJ0IE1JU1NJTkdfRklMRU5BTUUgdG8gYSBQeXRob24gb2JqZWN0LiAgKi8KLSsgIGdkYnB5X3Jl Zjw+IHB5b19maWxlbmFtZSA9IGhvc3Rfc3RyaW5nX3RvX3B5dGhvbl9zdHJpbmcgKG1pc3Npbmdf ZmlsZW5hbWUpOwotKyAgaWYgKHB5b19maWxlbmFtZSA9PSBudWxscHRyKQotKyAgICB7Ci0rICAg ICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7Ci0rICAgICAgcmV0dXJuIHt9OwotKyAgICB9Ci0rCi0r ICAvKiBDb252ZXJ0IFBTUEFDRSB0byBhIFB5dGhvbiBvYmplY3QuICAqLwotKyAgZ2RicHlfcmVm PD4gcHlvX3BzcGFjZSA9IHBzcGFjZV90b19wc3BhY2Vfb2JqZWN0IChwc3BhY2UpOwotKyAgaWYg KHB5b19wc3BhY2UgPT0gbnVsbHB0cikKLSsgICAgewotKyAgICAgIGdkYnB5X3ByaW50X3N0YWNr ICgpOwotKyAgICAgIHJldHVybiB7fTsKLSsgICAgfQotKwotKyAgLyogTG9va3VwIHRoZSBoZWxw ZXIgZnVuY3Rpb24gd2l0aGluIHRoZSBHREIgbW9kdWxlLiAgKi8KLSsgIGdkYnB5X3JlZjw+IHB5 b19oYW5kbGVyCi0rICAgIChQeU9iamVjdF9HZXRBdHRyU3RyaW5nIChnZGJfcHl0aG9uX21vZHVs ZSwgIl9oYW5kbGVfbWlzc2luZ19vYmpmaWxlIikpOwotKyAgaWYgKHB5b19oYW5kbGVyID09IG51 bGxwdHIpCi0rICAgIHsKLSsgICAgICBnZGJweV9wcmludF9zdGFjayAoKTsKLSsgICAgICByZXR1 cm4ge307Ci0rICAgIH0KLSsKLSsgIC8qIENhbGwgdGhlIGZ1bmN0aW9uLCBwYXNzaW5nIGluIHRo ZSBQeXRob24gb2JqZmlsZSBvYmplY3QuICAqLwotKyAgZ2RicHlfcmVmPD4gcHlvX2V4ZWN1dGVf cmV0Ci0rICAgIChQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzIChweW9faGFuZGxlci5nZXQg KCksIHB5b19wc3BhY2UuZ2V0ICgpLAotKwkJCQkgICBweW9fYnVpbGRpZC5nZXQgKCksIHB5b19m aWxlbmFtZS5nZXQgKCksCi0rCQkJCSAgIG51bGxwdHIpKTsKLSsgIGlmIChweW9fZXhlY3V0ZV9y ZXQgPT0gbnVsbHB0cikKLSsgICAgewotKyAgICAgIC8qIElmIHRoZSBoYW5kbGVyIGlzIGNhbmNl bGxlZCBkdWUgdG8gYSBDdHJsLUMsIHRoZW4gcHJvcGFnYXRlCi0rCSB0aGUgQ3RybC1DIGFzIGEg R0RCIGV4Y2VwdGlvbiBpbnN0ZWFkIG9mIHN3YWxsb3dpbmcgaXQuICAqLwotKyAgICAgIGdkYnB5 X3ByaW50X3N0YWNrX29yX3F1aXQgKCk7Ci0rICAgICAgcmV0dXJuIHt9OwotKyAgICB9Ci0rCi0r ICAvKiBQYXJzZSB0aGUgcmVzdWx0LCBhbmQgY29udmVydCBpdCBiYWNrIHRvIHRoZSBDKysgb2Jq ZWN0LiAgKi8KLSsgIGlmIChweW9fZXhlY3V0ZV9yZXQgPT0gUHlfTm9uZSkKLSsgICAgcmV0dXJu IHt9OwotKwotKyAgaWYgKFB5Qm9vbF9DaGVjayAocHlvX2V4ZWN1dGVfcmV0LmdldCAoKSkpCi0r ICAgIHsKLSsgICAgICAvKiBXZSBrbm93IHRoZSB2YWx1ZSBpcyBhIGJvb2wsIHNvIGl0IG11c3Qg YmUgZWl0aGVyIFB5X1RydWUgb3IKLSsJIFB5X0ZhbHNlLiAgQW55dGhpbmcgZWxzZSB3b3VsZCBu b3QgZ2V0IHBhc3QgdGhlIGFib3ZlIGNoZWNrLiAgKi8KLSsgICAgICBib29sIHRyeV9hZ2FpbiA9 IHB5b19leGVjdXRlX3JldC5nZXQgKCkgPT0gUHlfVHJ1ZTsKLSsgICAgICByZXR1cm4gZXh0X2xh bmdfbWlzc2luZ19maWxlX3Jlc3VsdCAodHJ5X2FnYWluKTsKLSsgICAgfQotKwotKyAgaWYgKCFn ZGJweV9pc19zdHJpbmcgKHB5b19leGVjdXRlX3JldC5nZXQgKCkpKQotKyAgICB7Ci0rICAgICAg UHlFcnJfU2V0U3RyaW5nIChQeUV4Y19WYWx1ZUVycm9yLAotKwkJICAgICAgICJyZXR1cm4gdmFs dWUgZnJvbSBfZmluZF9vYmpmaWxlX2J5X2J1aWxkaWQgc2hvdWxkICIKLSsJCSAgICAgICAiYmUg Tm9uZSwgYSBib29sLCBvciBhIHN0ciIpOwotKyAgICAgIGdkYnB5X3ByaW50X3N0YWNrICgpOwot KyAgICAgIHJldHVybiB7fTsKLSsgICAgfQotKwotKyAgZ2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8 Y2hhcj4gZmlsZW5hbWUKLSsgICAgPSBweXRob25fc3RyaW5nX3RvX2hvc3Rfc3RyaW5nIChweW9f ZXhlY3V0ZV9yZXQuZ2V0ICgpKTsKLSsgIGlmIChmaWxlbmFtZSA9PSBudWxscHRyKQotKyAgICB7 Ci0rICAgICAgZ2RicHlfcHJpbnRfc3RhY2sgKCk7Ci0rICAgICAgcmV0dXJuIHt9OwotKyAgICB9 Ci0rCi0rICByZXR1cm4gZXh0X2xhbmdfbWlzc2luZ19maWxlX3Jlc3VsdCAoc3RkOjpzdHJpbmcg KGZpbGVuYW1lLmdldCAoKSkpOwotIH0KLSAKLSAvKiBDb21wdXRlIHRoZSBsaXN0IG9mIGFjdGl2 ZSBweXRob24gdHlwZSBwcmludGVycyBhbmQgc3RvcmUgdGhlbSBpbgotZGlmZiAtLWdpdCBhL2dk Yi9yZW1vdGUuYyBiL2dkYi9yZW1vdGUuYwotLS0tIGEvZ2RiL3JlbW90ZS5jCi0rKysgYi9nZGIv cmVtb3RlLmMKLUBAIC0yNDYsNiArMjQ2LDcgQEAgZW51bSB7Ci0gICBQQUNLRVRfdkZpbGVfdW5s aW5rLAotICAgUEFDS0VUX3ZGaWxlX3JlYWRsaW5rLAotICAgUEFDS0VUX3ZGaWxlX2ZzdGF0LAot KyAgUEFDS0VUX3ZGaWxlX3N0YXQsCi0gICBQQUNLRVRfcVhmZXJfYXV4diwKLSAgIFBBQ0tFVF9x WGZlcl9mZWF0dXJlcywKLSAgIFBBQ0tFVF9xWGZlcl9leGVjX2ZpbGUsCi1AQCAtOTk2LDYgKzk5 Nyw5IEBAIGNsYXNzIHJlbW90ZV90YXJnZXQgOiBwdWJsaWMgcHJvY2Vzc19zdHJhdHVtX3Rhcmdl dAotIAotICAgaW50IGZpbGVpb19mc3RhdCAoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc2IsIGZpbGVp b19lcnJvciAqdGFyZ2V0X2Vycm5vKSBvdmVycmlkZTsKLSAKLSsgIGludCBmaWxlaW9fc3RhdCAo c3RydWN0IGluZmVyaW9yICppbmYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotKwkJICAgc3RydWN0 IHN0YXQgKnNiLCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubykgb3ZlcnJpZGU7Ci0rCi0gICBp bnQgZmlsZWlvX2Nsb3NlIChpbnQgZmQsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKSBvdmVy cmlkZTsKLSAKLSAgIGludCBmaWxlaW9fdW5saW5rIChzdHJ1Y3QgaW5mZXJpb3IgKmluZiwKLUBA IC0xMjY2MSw2ICsxMjY2NSw5IEBAIHJlbW90ZV90YXJnZXQ6OnJlbW90ZV9ob3N0aW9fc2VuZF9j b21tYW5kIChpbnQgY29tbWFuZF9ieXRlcywgaW50IHdoaWNoX3BhY2tldCwKLSAgICAgICByZXR1 cm4gLTE7Ci0gICAgIH0KLSAKLSsgIGlmICgqcmVtb3RlX2Vycm5vICE9IEZJTEVJT19TVUNDRVNT KQotKyAgICByZXR1cm4gLTE7Ci0rCi0gICAvKiBNYWtlIHN1cmUgd2Ugc2F3IGFuIGF0dGFjaG1l bnQgaWYgYW5kIG9ubHkgaWYgd2UgZXhwZWN0ZWQgb25lLiAgKi8KLSAgIGlmICgoYXR0YWNobWVu dF90bXAgPT0gTlVMTCAmJiBhdHRhY2htZW50ICE9IE5VTEwpCi0gICAgICAgfHwgKGF0dGFjaG1l bnRfdG1wICE9IE5VTEwgJiYgYXR0YWNobWVudCA9PSBOVUxMKSkKLUBAIC0xMzAyNyw2ICsxMzAz NCw0MSBAQCByZW1vdGVfdGFyZ2V0OjpmaWxlaW9fcmVhZGxpbmsgKHN0cnVjdCBpbmZlcmlvciAq aW5mLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLSAgIHJldHVybiByZXQ7Ci0gfQotIAotKy8qIEhl bHBlciBmdW5jdGlvbiB0byBoYW5kbGUgOjpmaWxlaW9fZnN0YXQgYW5kIDo6ZmlsZWlvX3N0YXQg cmVzdWx0Ci0rICAgcHJvY2Vzc2luZy4gIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdGhl IHJlbW90ZSBzeXNjYWxsIGhhcyBiZWVuCi0rICAgcGVyZm9ybWVkIGFuZCB3ZSBrbm93IHdlIGRp ZG4ndCBnZXQgYW4gZXJyb3IgYmFjay4KLSsKLSsgICBBVFRBQ0hNRU5UIGFuZCBBVFRBQ0hNRU5U X0xFTiBhcmUgdGhlIGF0dGFjaG1lbnQgZGF0YSBleHRyYWN0ZWQgZnJvbSB0aGUKLSsgICByZW1v dGUgc3lzY2FsbCByZXBseS4gIEVYUEVDVEVEX0xFTiBpcyB0aGUgbGVuZ3RoIHJldHVybmVkIGZy b20gdGhlCi0rICAgZnN0YXQgb3Igc3RhdCBjYWxsLCB0aGlzIHRoZSBsZW5ndGggb2YgdGhlIHJl dHVybmVkIGRhdGEgKGluIEFUVEFDSE1FTlQpCi0rICAgb25jZSBpdCBoYXMgYmVlbiBkZWNvZGVk LiAgVGhlIGZzdGF0L3N0YXQgcmVzdWx0IChmcm9tIHRoZSBBVFRBQ0hNRU5UCi0rICAgZGF0YSkg aXMgdG8gYmUgcGxhY2VkIGluIFNULiAgKi8KLSsKLStzdGF0aWMgaW50Ci0rZmlsZWlvX3Byb2Nl c3NfZnN0YXRfYW5kX3N0YXRfcmVwbHkgKGNvbnN0IGNoYXIgKmF0dGFjaG1lbnQsCi0rCQkJCSAg ICAgaW50IGF0dGFjaG1lbnRfbGVuLAotKwkJCQkgICAgIGludCBleHBlY3RlZF9sZW4sCi0rCQkJ CSAgICAgc3RydWN0IHN0YXQgKnN0KQotK3sKLSsgIHN0cnVjdCBmaW9fc3RhdCBmc3Q7Ci0rCi0r ICBpbnQgcmVhZF9sZW4KLSsgICAgPSByZW1vdGVfdW5lc2NhcGVfaW5wdXQgKChnZGJfYnl0ZSAq KSBhdHRhY2htZW50LCBhdHRhY2htZW50X2xlbiwKLSsJCQkgICAgIChnZGJfYnl0ZSAqKSAmZnN0 LCBzaXplb2YgKGZzdCkpOwotKwotKyAgaWYgKHJlYWRfbGVuICE9IGV4cGVjdGVkX2xlbikKLSsg ICAgZXJyb3IgKF8oInZGaWxlOmZzdGF0IHJldHVybmVkICVkLCBidXQgJWQgYnl0ZXMuIiksCi0r CSAgIGV4cGVjdGVkX2xlbiwgcmVhZF9sZW4pOwotKwotKyAgaWYgKHJlYWRfbGVuICE9IHNpemVv ZiAoZnN0KSkKLSsgICAgZXJyb3IgKF8oInZGaWxlOmZzdGF0IHJldHVybmVkICVkIGJ5dGVzLCBi dXQgZXhwZWN0aW5nICVkLiIpLAotKwkgICByZWFkX2xlbiwgKGludCkgc2l6ZW9mIChmc3QpKTsK LSsKLSsgIHJlbW90ZV9maWxlaW9fdG9faG9zdF9zdGF0ICgmZnN0LCBzdCk7Ci0rCi0rICByZXR1 cm4gMDsKLSt9Ci0rCi0gLyogSW1wbGVtZW50YXRpb24gb2YgdG9fZmlsZWlvX2ZzdGF0LiAgKi8K LSAKLSBpbnQKLUBAIC0xMzAzNyw4ICsxMzA3OSw2IEBAIHJlbW90ZV90YXJnZXQ6OmZpbGVpb19m c3RhdCAoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc3QsIGZpbGVpb19lcnJvciAqcmVtb3RlX2Vycm5v Ci0gICBpbnQgbGVmdCA9IGdldF9yZW1vdGVfcGFja2V0X3NpemUgKCk7Ci0gICBpbnQgYXR0YWNo bWVudF9sZW4sIHJldDsKLSAgIGNvbnN0IGNoYXIgKmF0dGFjaG1lbnQ7Ci0tICBzdHJ1Y3QgZmlv X3N0YXQgZnN0OwotLSAgaW50IHJlYWRfbGVuOwotIAotICAgcmVtb3RlX2J1ZmZlcl9hZGRfc3Ry aW5nICgmcCwgJmxlZnQsICJ2RmlsZTpmc3RhdDoiKTsKLSAKLUBAIC0xMzA3MCwxOSArMTMxMTAs NDEgQEAgcmVtb3RlX3RhcmdldDo6ZmlsZWlvX2ZzdGF0IChpbnQgZmQsIHN0cnVjdCBzdGF0ICpz dCwgZmlsZWlvX2Vycm9yICpyZW1vdGVfZXJybm8KLSAgICAgICByZXR1cm4gMDsKLSAgICAgfQot IAotLSAgcmVhZF9sZW4gPSByZW1vdGVfdW5lc2NhcGVfaW5wdXQgKChnZGJfYnl0ZSAqKSBhdHRh Y2htZW50LCBhdHRhY2htZW50X2xlbiwKLS0JCQkJICAgIChnZGJfYnl0ZSAqKSAmZnN0LCBzaXpl b2YgKGZzdCkpOwotKyAgcmV0dXJuIGZpbGVpb19wcm9jZXNzX2ZzdGF0X2FuZF9zdGF0X3JlcGx5 IChhdHRhY2htZW50LCBhdHRhY2htZW50X2xlbiwKLSsJCQkJCSAgICAgIHJldCwgc3QpOwotK30K LSAKLS0gIGlmIChyZWFkX2xlbiAhPSByZXQpCi0tICAgIGVycm9yIChfKCJ2RmlsZTpmc3RhdCBy ZXR1cm5lZCAlZCwgYnV0ICVkIGJ5dGVzLiIpLCByZXQsIHJlYWRfbGVuKTsKLSsvKiBJbXBsZW1l bnRhdGlvbiBvZiB0b19maWxlaW9fc3RhdC4gICovCi0gCi0tICBpZiAocmVhZF9sZW4gIT0gc2l6 ZW9mIChmc3QpKQotLSAgICBlcnJvciAoXygidkZpbGU6ZnN0YXQgcmV0dXJuZWQgJWQgYnl0ZXMs IGJ1dCBleHBlY3RpbmcgJWQuIiksCi0tCSAgIHJlYWRfbGVuLCAoaW50KSBzaXplb2YgKGZzdCkp OwotK2ludAotK3JlbW90ZV90YXJnZXQ6OmZpbGVpb19zdGF0IChzdHJ1Y3QgaW5mZXJpb3IgKmlu ZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0rCQkJICAgIHN0cnVjdCBzdGF0ICpzdCwgZmlsZWlv X2Vycm9yICpyZW1vdGVfZXJybm8pCi0rewotKyAgc3RydWN0IHJlbW90ZV9zdGF0ZSAqcnMgPSBn ZXRfcmVtb3RlX3N0YXRlICgpOwotKyAgY2hhciAqcCA9IHJzLT5idWYuZGF0YSAoKTsKLSsgIGlu dCBsZWZ0ID0gZ2V0X3JlbW90ZV9wYWNrZXRfc2l6ZSAoKSAtIDE7Ci0gCi0tICByZW1vdGVfZmls ZWlvX3RvX2hvc3Rfc3RhdCAoJmZzdCwgc3QpOwotKyAgaWYgKHJlbW90ZV9ob3N0aW9fc2V0X2Zp bGVzeXN0ZW0gKGluZiwgcmVtb3RlX2Vycm5vKSAhPSAwKQotKyAgICByZXR1cm4ge307Ci0gCi0t ICByZXR1cm4gMDsKLSsgIHJlbW90ZV9idWZmZXJfYWRkX3N0cmluZyAoJnAsICZsZWZ0LCAidkZp bGU6c3RhdDoiKTsKLSsKLSsgIHJlbW90ZV9idWZmZXJfYWRkX2J5dGVzICgmcCwgJmxlZnQsIChj b25zdCBnZGJfYnl0ZSAqKSBmaWxlbmFtZSwKLSsJCQkgICBzdHJsZW4gKGZpbGVuYW1lKSk7Ci0r Ci0rICBpbnQgYXR0YWNobWVudF9sZW47Ci0rICBjb25zdCBjaGFyICphdHRhY2htZW50OwotKyAg aW50IHJldCA9IHJlbW90ZV9ob3N0aW9fc2VuZF9jb21tYW5kIChwIC0gcnMtPmJ1Zi5kYXRhICgp LCBQQUNLRVRfdkZpbGVfc3RhdCwKLSsJCQkJCXJlbW90ZV9lcnJubywgJmF0dGFjaG1lbnQsCi0r CQkJCQkmYXR0YWNobWVudF9sZW4pOwotKwotKyAgLyogVW5saWtlIDo6ZmlsZWlvX2ZzdGF0LCB0 aGUgc3RhdCBmaWxlaW8gY2FsbCB3YXMgYWRkZWQgbGF0ZXIgb24sIGFuZAotKyAgICAgaGFzIG5v bmUgb2YgdGhlIGxlZ2FjeSBiZmQgaXNzdWVzLCBzbyB3ZSBjYW4ganVzdCByZXR1cm4gdGhlIGVy cm9yLiAgKi8KLSsgIGlmIChyZXQgPCAwKQotKyAgICByZXR1cm4gcmV0OwotKwotKyAgcmV0dXJu IGZpbGVpb19wcm9jZXNzX2ZzdGF0X2FuZF9zdGF0X3JlcGx5IChhdHRhY2htZW50LCBhdHRhY2ht ZW50X2xlbiwKLSsJCQkJCSAgICAgIHJldCwgc3QpOwotIH0KLSAKLSAvKiBJbXBsZW1lbnRhdGlv biBvZiB0b19maWxlc3lzdGVtX2lzX2xvY2FsLiAgKi8KLUBAIC0xNjE1Nyw2ICsxNjIxOSw4IEBA IFNob3cgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgYWRkcmVzcyAoaW4gYml0cykgaW4gYSBtZW1v cnkgcGFja2V0LiIpLCBOVUxMLAotIAotICAgYWRkX3BhY2tldF9jb25maWdfY21kIChQQUNLRVRf dkZpbGVfZnN0YXQsICJ2RmlsZTpmc3RhdCIsICJob3N0aW8tZnN0YXQiLCAwKTsKLSAKLSsgIGFk ZF9wYWNrZXRfY29uZmlnX2NtZCAoUEFDS0VUX3ZGaWxlX3N0YXQsICJ2RmlsZTpzdGF0IiwgImhv c3Rpby1zdGF0IiwgMCk7Ci0rCi0gICBhZGRfcGFja2V0X2NvbmZpZ19jbWQgKFBBQ0tFVF92QXR0 YWNoLCAidkF0dGFjaCIsICJhdHRhY2giLCAwKTsKLSAKLSAgIGFkZF9wYWNrZXRfY29uZmlnX2Nt ZCAoUEFDS0VUX3ZSdW4sICJ2UnVuIiwgInJ1biIsIDApOwotZGlmZiAtLWdpdCBhL2dkYi9zb2xp Yi1haXguYyBiL2dkYi9zb2xpYi1haXguYwotLS0tIGEvZ2RiL3NvbGliLWFpeC5jCi0rKysgYi9n ZGIvc29saWItYWl4LmMKLUBAIC02ODksNiArNjg5LDExIEBAIGNvbnN0IHNvbGliX29wcyBzb2xp Yl9haXhfc29fb3BzID0KLSAgIHNvbGliX2FpeF9vcGVuX3N5bWJvbF9maWxlX29iamVjdCwKLSAg IHNvbGliX2FpeF9pbl9keW5zeW1fcmVzb2x2ZV9jb2RlLAotICAgc29saWJfYWl4X2JmZF9vcGVu LAotKyAgbnVsbHB0ciwKLSsgIG51bGxwdHIsCi0rICBudWxscHRyLAotKyAgbnVsbHB0ciwKLSsg IGRlZmF1bHRfZmluZF9zb2xpYl9hZGRyLAotIH07Ci0gCi0gdm9pZCBfaW5pdGlhbGl6ZV9zb2xp Yl9haXggKCk7Ci1kaWZmIC0tZ2l0IGEvZ2RiL3NvbGliLWRhcndpbi5jIGIvZ2RiL3NvbGliLWRh cndpbi5jCi0tLS0gYS9nZGIvc29saWItZGFyd2luLmMKLSsrKyBiL2dkYi9zb2xpYi1kYXJ3aW4u YwotQEAgLTY2NSw0ICs2NjUsOSBAQCBjb25zdCBzb2xpYl9vcHMgZGFyd2luX3NvX29wcyA9Ci0g ICBvcGVuX3N5bWJvbF9maWxlX29iamVjdCwKLSAgIGRhcndpbl9pbl9keW5zeW1fcmVzb2x2ZV9j b2RlLAotICAgZGFyd2luX2JmZF9vcGVuLAotKyAgbnVsbHB0ciwKLSsgIG51bGxwdHIsCi0rICBu dWxscHRyLAotKyAgbnVsbHB0ciwKLSsgIGRlZmF1bHRfZmluZF9zb2xpYl9hZGRyLAotIH07Ci1k aWZmIC0tZ2l0IGEvZ2RiL3NvbGliLWRzYnQuYyBiL2dkYi9zb2xpYi1kc2J0LmMKLS0tLSBhL2dk Yi9zb2xpYi1kc2J0LmMKLSsrKyBiL2dkYi9zb2xpYi1kc2J0LmMKLUBAIC05MTQsNiArOTE0LDEx IEBAIGNvbnN0IHNvbGliX29wcyBkc2J0X3NvX29wcyA9Ci0gICBvcGVuX3N5bWJvbF9maWxlX29i amVjdCwKLSAgIGRzYnRfaW5fZHluc3ltX3Jlc29sdmVfY29kZSwKLSAgIHNvbGliX2JmZF9vcGVu LAotKyAgbnVsbHB0ciwKLSsgIG51bGxwdHIsCi0rICBudWxscHRyLAotKyAgbnVsbHB0ciwKLSsg IGRlZmF1bHRfZmluZF9zb2xpYl9hZGRyLAotIH07Ci0gCi0gdm9pZCBfaW5pdGlhbGl6ZV9kc2J0 X3NvbGliICgpOwotZGlmZiAtLWdpdCBhL2dkYi9zb2xpYi1mcnYuYyBiL2dkYi9zb2xpYi1mcnYu YwotLS0tIGEvZ2RiL3NvbGliLWZydi5jCi0rKysgYi9nZGIvc29saWItZnJ2LmMKLUBAIC0xMDg2 LDQgKzEwODYsOSBAQCBjb25zdCBzb2xpYl9vcHMgZnJ2X3NvX29wcyA9Ci0gICBvcGVuX3N5bWJv bF9maWxlX29iamVjdCwKLSAgIGZydl9pbl9keW5zeW1fcmVzb2x2ZV9jb2RlLAotICAgc29saWJf YmZkX29wZW4sCi0rICBudWxscHRyLAotKyAgbnVsbHB0ciwKLSsgIG51bGxwdHIsCi0rICBudWxs cHRyLAotKyAgZGVmYXVsdF9maW5kX3NvbGliX2FkZHIsCi0gfTsKLWRpZmYgLS1naXQgYS9nZGIv c29saWItc3ZyNC5jIGIvZ2RiL3NvbGliLXN2cjQuYwotLS0tIGEvZ2RiL3NvbGliLXN2cjQuYwot KysrIGIvZ2RiL3NvbGliLXN2cjQuYwotQEAgLTMzNTMsNiArMzM1MywxNSBAQCBzdnI0X2l0ZXJh dGVfb3Zlcl9vYmpmaWxlc19pbl9zZWFyY2hfb3JkZXIKLSAgICAgfQotIH0KLSAKLSsvKiBTZWUg c29saWJfb3BzOjpmaW5kX3NvbGliX2FkZHIgaW4gc29saXN0LmguICAqLwotKwotK3N0YXRpYyBz dGQ6Om9wdGlvbmFsPENPUkVfQUREUj4KLStzdnI0X2ZpbmRfc29saWJfYWRkciAoc29saWIgJnNv KQotK3sKLSsgIGF1dG8gKmxpID0gZ2RiOjpjaGVja2VkX3N0YXRpY19jYXN0PGxtX2luZm9fc3Zy NCAqPiAoc28ubG1faW5mby5nZXQgKCkpOwotKyAgcmV0dXJuIGxpLT5sX2FkZHJfaW5mZXJpb3I7 Ci0rfQotKwotIGNvbnN0IHN0cnVjdCBzb2xpYl9vcHMgc3ZyNF9zb19vcHMgPQotIHsKLSAgIHN2 cjRfcmVsb2NhdGVfc2VjdGlvbl9hZGRyZXNzZXMsCi1AQCAtMzM2MywxMSArMzM3MiwxMSBAQCBj b25zdCBzdHJ1Y3Qgc29saWJfb3BzIHN2cjRfc29fb3BzID0KLSAgIG9wZW5fc3ltYm9sX2ZpbGVf b2JqZWN0LAotICAgc3ZyNF9pbl9keW5zeW1fcmVzb2x2ZV9jb2RlLAotICAgc29saWJfYmZkX29w ZW4sCi0tICBudWxscHRyLAotICAgc3ZyNF9zYW1lLAotICAgc3ZyNF9rZWVwX2RhdGFfaW5fY29y ZSwKLSAgIHN2cjRfdXBkYXRlX3NvbGliX2V2ZW50X2JyZWFrcG9pbnRzLAotICAgc3ZyNF9oYW5k bGVfc29saWJfZXZlbnQsCi0rICBzdnI0X2ZpbmRfc29saWJfYWRkciwKLSB9OwotIAotIHZvaWQg X2luaXRpYWxpemVfc3ZyNF9zb2xpYiAoKTsKLWRpZmYgLS1naXQgYS9nZGIvc29saWItdGFyZ2V0 LmMgYi9nZGIvc29saWItdGFyZ2V0LmMKLS0tLSBhL2dkYi9zb2xpYi10YXJnZXQuYwotKysrIGIv Z2RiL3NvbGliLXRhcmdldC5jCi1AQCAtNDEyLDQgKzQxMiw5IEBAIGNvbnN0IHNvbGliX29wcyBz b2xpYl90YXJnZXRfc29fb3BzID0KLSAgIHNvbGliX3RhcmdldF9vcGVuX3N5bWJvbF9maWxlX29i amVjdCwKLSAgIHNvbGliX3RhcmdldF9pbl9keW5zeW1fcmVzb2x2ZV9jb2RlLAotICAgc29saWJf YmZkX29wZW4sCi0rICBudWxscHRyLAotKyAgbnVsbHB0ciwKLSsgIG51bGxwdHIsCi0rICBudWxs cHRyLAotKyAgZGVmYXVsdF9maW5kX3NvbGliX2FkZHIsCi0gfTsKLWRpZmYgLS1naXQgYS9nZGIv c29saWIuYyBiL2dkYi9zb2xpYi5jCi0tLS0gYS9nZGIvc29saWIuYwotKysrIGIvZ2RiL3NvbGli LmMKLUBAIC00NSw3ICs0NSw2IEBACi0gI2luY2x1ZGUgImdkYl9iZmQuaCIKLSAjaW5jbHVkZSAi Z2Ric3VwcG9ydC9maWxlc3R1ZmYuaCIKLSAjaW5jbHVkZSAiZ2Ric3VwcG9ydC9zY29wZWRfZmQu aCIKLS0jaW5jbHVkZSAiZGVidWdpbmZvZC1zdXBwb3J0LmgiCi0gI2luY2x1ZGUgInNvdXJjZS5o IgotICNpbmNsdWRlICJjbGkvY2xpLXN0eWxlLmgiCi0gCi1AQCAtMTEzLDcgKzExMiw2IEBAIHNo b3dfc29saWJfc2VhcmNoX3BhdGggKHN0cnVjdCB1aV9maWxlICpmaWxlLCBpbnQgZnJvbV90dHks Ci0gc3RhdGljIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+Ci0gc29saWJfZmluZF8xIChj b25zdCBjaGFyICppbl9wYXRobmFtZSwgaW50ICpmZCwgYm9vbCBpc19zb2xpYikKLSB7Ci0tICBj b25zdCBzb2xpYl9vcHMgKm9wcyA9IGdkYmFyY2hfc29fb3BzIChjdXJyZW50X2luZmVyaW9yICgp LT5hcmNoICgpKTsKLSAgIGludCBmb3VuZF9maWxlID0gLTE7Ci0gICBnZGI6OnVuaXF1ZV94bWFs bG9jX3B0cjxjaGFyPiB0ZW1wX3BhdGhuYW1lOwotICAgY29uc3QgY2hhciAqZnNraW5kID0gZWZm ZWN0aXZlX3RhcmdldF9maWxlX3N5c3RlbV9raW5kICgpOwotQEAgLTI5NiwxMiArMjk0LDYgQEAg c29saWJfZmluZF8xIChjb25zdCBjaGFyICppbl9wYXRobmFtZSwgaW50ICpmZCwgYm9vbCBpc19z b2xpYikKLSAJCQl0YXJnZXRfbGJhc2VuYW1lIChmc2tpbmQsIGluX3BhdGhuYW1lKSwKLSAJCQlP X1JET05MWSB8IE9fQklOQVJZLCAmdGVtcF9wYXRobmFtZSk7Ci0gCi0tICAvKiBJZiBub3QgZm91 bmQsIGFuZCB3ZSdyZSBsb29raW5nIGZvciBhIHNvbGliLCB0cnkgdG8gdXNlIHRhcmdldAotLSAg ICAgc3VwcGxpZWQgc29saWIgc2VhcmNoIG1ldGhvZC4gICovCi0tICBpZiAoaXNfc29saWIgJiYg Zm91bmRfZmlsZSA8IDAgJiYgb3BzLT5maW5kX2FuZF9vcGVuX3NvbGliKQotLSAgICBmb3VuZF9m aWxlID0gb3BzLT5maW5kX2FuZF9vcGVuX3NvbGliIChpbl9wYXRobmFtZSwgT19SRE9OTFkgfCBP X0JJTkFSWSwKLS0JCQkJCSAgICZ0ZW1wX3BhdGhuYW1lKTsKLS0KLSAgIC8qIElmIG5vdCBmb3Vu ZCwgbmV4dCBzZWFyY2ggdGhlIGluZmVyaW9yJ3MgJFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUu ICAqLwotICAgaWYgKGZvdW5kX2ZpbGUgPCAwICYmIHN5c3Jvb3QgPT0gTlVMTCkKLSAgICAgZm91 bmRfZmlsZSA9IG9wZW5wIChjdXJyZW50X2luZmVyaW9yICgpLT5lbnZpcm9ubWVudC5nZXQgKCJQ QVRIIiksCi1AQCAtNDc1LDU4ICs0NjcsNiBAQCBzb2xpYl9iZmRfb3BlbiAoY29uc3QgY2hhciAq cGF0aG5hbWUpCi0gICByZXR1cm4gYWJmZDsKLSB9Ci0gCi0tLyogTWFwcGluZyBvZiBhIGNvcmUg ZmlsZSdzIHNoYXJlZCBsaWJyYXJ5IHNvbmFtZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZQotLSAgIGJ1 aWxkLWlkcy4gIEFkZGVkIHRvIHRoZSByZWdpc3RyaWVzIG9mIGNvcmUgZmlsZSBiZmRzLiAgKi8K LS0KLS10eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+ IHNvbmFtZV9idWlsZF9pZF9tYXA7Ci0tCi0tLyogS2V5IHVzZWQgdG8gYXNzb2NpYXRlIGEgc29u YW1lX2J1aWxkX2lkX21hcCB0byBhIGNvcmUgZmlsZSBiZmQuICAqLwotLQotLXN0YXRpYyBjb25z dCBzdHJ1Y3QgcmVnaXN0cnk8YmZkPjo6a2V5PHNvbmFtZV9idWlsZF9pZF9tYXA+Ci0tICBjYmZk X3NvbmFtZV9idWlsZF9pZF9kYXRhX2tleTsKLS0KLS0vKiBTZWUgc29saWIuaC4gICovCi0tCi0t dm9pZAotLXNldF9jYmZkX3NvbmFtZV9idWlsZF9pZCAoZ2RiX2JmZF9yZWZfcHRyIGFiZmQsIGNv bnN0IGNoYXIgKnNvbmFtZSwKLS0JCQkgIGNvbnN0IGJmZF9idWlsZF9pZCAqYnVpbGRfaWQpCi0t ewotLSAgZ2RiX2Fzc2VydCAoYWJmZC5nZXQgKCkgIT0gbnVsbHB0cik7Ci0tICBnZGJfYXNzZXJ0 IChzb25hbWUgIT0gbnVsbHB0cik7Ci0tICBnZGJfYXNzZXJ0IChidWlsZF9pZCAhPSBudWxscHRy KTsKLS0KLS0gIHNvbmFtZV9idWlsZF9pZF9tYXAgKm1hcHB0cgotLSAgICA9IGNiZmRfc29uYW1l X2J1aWxkX2lkX2RhdGFfa2V5LmdldCAoYWJmZC5nZXQgKCkpOwotLQotLSAgaWYgKG1hcHB0ciA9 PSBudWxscHRyKQotLSAgICBtYXBwdHIgPSBjYmZkX3NvbmFtZV9idWlsZF9pZF9kYXRhX2tleS5l bXBsYWNlIChhYmZkLmdldCAoKSk7Ci0tCi0tICAoKm1hcHB0cilbc29uYW1lXSA9IGJ1aWxkX2lk X3RvX3N0cmluZyAoYnVpbGRfaWQpOwotLX0KLS0KLS0vKiBJZiBTT05BTUUgaGFkIGEgYnVpbGQt aWQgYXNzb2NpYXRlZCB3aXRoIGl0IGluIEFCRkQncyByZWdpc3RyeSBieSBhCi0tICAgcHJldmlv dXMgY2FsbCB0byBzZXRfY2JmZF9zb25hbWVfYnVpbGRfaWQgdGhlbiByZXR1cm4gdGhlIGJ1aWxk LWlkCi0tICAgYXMgYSBOVUxMLXRlcm1pbmF0ZWQgaGV4IHN0cmluZy4gICovCi0tCi0tc3RhdGlj IGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+Ci0tZ2V0X2NiZmRfc29uYW1lX2J1aWxkX2lk IChnZGJfYmZkX3JlZl9wdHIgYWJmZCwgY29uc3QgY2hhciAqc29uYW1lKQotLXsKLS0gIGlmIChh YmZkLmdldCAoKSA9PSBudWxscHRyIHx8IHNvbmFtZSA9PSBudWxscHRyKQotLSAgICByZXR1cm4g e307Ci0tCi0tICBzb25hbWVfYnVpbGRfaWRfbWFwICptYXBwdHIKLS0gICAgPSBjYmZkX3NvbmFt ZV9idWlsZF9pZF9kYXRhX2tleS5nZXQgKGFiZmQuZ2V0ICgpKTsKLS0KLS0gIGlmIChtYXBwdHIg PT0gbnVsbHB0cikKLS0gICAgcmV0dXJuIHt9OwotLQotLSAgYXV0byBpdCA9IG1hcHB0ci0+Zmlu ZCAobGJhc2VuYW1lIChzb25hbWUpKTsKLS0gIGlmIChpdCA9PSBtYXBwdHItPmVuZCAoKSkKLS0g ICAgcmV0dXJuIHt9OwotLQotLSAgcmV0dXJuIG1ha2VfdW5pcXVlX3hzdHJkdXAgKGl0LT5zZWNv bmQuY19zdHIgKCkpOwotLX0KLS0KLSAvKiBHaXZlbiBhIHBvaW50ZXIgdG8gb25lIG9mIHRoZSBz aGFyZWQgb2JqZWN0cyBpbiBvdXIgbGlzdCBvZiBtYXBwZWQKLSAgICBvYmplY3RzLCB1c2UgdGhl IHJlY29yZGVkIG5hbWUgdG8gb3BlbiBhIGJmZCBkZXNjcmlwdG9yIGZvciB0aGUKLSAgICBvYmpl Y3QsIGJ1aWxkIGEgc2VjdGlvbiB0YWJsZSwgcmVsb2NhdGUgYWxsIHRoZSBzZWN0aW9uIGFkZHJl c3NlcwotQEAgLTU0NiwzNiArNDg2LDU1IEBAIHNvbGliX21hcF9zZWN0aW9ucyAoc29saWIgJnNv KQotIAotICAgZ2RiOjp1bmlxdWVfeG1hbGxvY19wdHI8Y2hhcj4gZmlsZW5hbWUgKHRpbGRlX2V4 cGFuZCAoc28uc29fbmFtZS5jX3N0ciAoKSkpOwotICAgZ2RiX2JmZF9yZWZfcHRyIGFiZmQgKG9w cy0+YmZkX29wZW4gKGZpbGVuYW1lLmdldCAoKSkpOwotLSAgZ2RiOjp1bmlxdWVfeG1hbGxvY19w dHI8Y2hhcj4gYnVpbGRfaWRfaGV4c3RyCi0tICAgID0gZ2V0X2NiZmRfc29uYW1lX2J1aWxkX2lk IChjdXJyZW50X3Byb2dyYW1fc3BhY2UtPmNiZmQsCi0tCQkJCXNvLnNvX25hbWUuY19zdHIgKCkp OwotKwotKyAgLyogSWYgd2UgaGF2ZSBhIGNvcmUgdGFyZ2V0IHRoZW4gdGhlIGNvcmUgdGFyZ2V0 IG1pZ2h0IGhhdmUgc29tZSBoZWxwZnVsCi0rICAgICBpbmZvcm1hdGlvbiAoaS5lLiBidWlsZC1p ZHMpIGFib3V0IHRoZSBzaGFyZWQgbGlicmFyaWVzIHdlIGFyZSB0cnlpbmcKLSsgICAgIHRvIGxv YWQuICBHcmFiIHRob3NlIGhpbnRzIG5vdyBhbmQgdXNlIHRoZSBiZWxvdyB0byB2YWxpZGF0ZSBv ciBmaW5kCi0rICAgICB0aGUgc2hhcmVkIGxpYnJhcmllcy4KLSsKLSsgICAgIElmIHdlIGRvbid0 IGhhdmUgYSBjb3JlIHRhcmdldCB0aGVuIHRoaXMgd2lsbCByZXR1cm4gYW4gZW1wdHkgc3RydWN0 Ci0rICAgICB3aXRoIG5vIGhpbnQgaW5mb3JtYXRpb24sIHdlIHRoZW4gbG9va3VwIHRoZSBzaGFy ZWQgbGlicmFyeSBiYXNlZCBvbgotKyAgICAgaXRzIGZpbGVuYW1lLiAgKi8KLSsgIHN0ZDo6b3B0 aW9uYWw8Q09SRV9BRERSPiBzb2xpYl9hZGRyID0gb3BzLT5maW5kX3NvbGliX2FkZHIgKHNvKTsK LSsgIHN0ZDo6b3B0aW9uYWwgPGNvbnN0IGNvcmVfdGFyZ2V0X21hcHBlZF9maWxlX2luZm8+IG1h cHBlZF9maWxlX2luZm8KLSsgICAgPSBjb3JlX3RhcmdldF9maW5kX21hcHBlZF9maWxlIChzby5z b19uYW1lLmNfc3RyICgpLCBzb2xpYl9hZGRyKTsKLSAKLSAgIC8qIElmIHdlIGFscmVhZHkga25v dyB0aGUgYnVpbGQtaWQgb2YgdGhpcyBzb2xpYiBmcm9tIGEgY29yZSBmaWxlLCB2ZXJpZnkKLSAg ICAgIGl0IG1hdGNoZXMgQUJGRCdzIGJ1aWxkLWlkLiAgSWYgdGhlcmUgaXMgYSBtaXNtYXRjaCBv ciB0aGUgc29saWIgd2Fzbid0Ci0gICAgICBmb3VuZCwgYXR0ZW1wdCB0byBxdWVyeSBkZWJ1Z2lu Zm9kIGZvciB0aGUgY29ycmVjdCBzb2xpYi4gICovCi0tICBpZiAoYnVpbGRfaWRfaGV4c3RyLmdl dCAoKSAhPSBudWxscHRyKQotKyAgaWYgKG1hcHBlZF9maWxlX2luZm8uaGFzX3ZhbHVlICgpKQot ICAgICB7Ci0tICAgICAgYm9vbCBtaXNtYXRjaCA9IGZhbHNlOwotKyAgICAgIGJvb2wgbWlzbWF0 Y2ggPSAoYWJmZCAhPSBudWxscHRyCi0rCQkgICAgICAgJiYgYnVpbGRfaWRfYmZkX2dldCAoYWJm ZC5nZXQgKCkpICE9IG51bGxwdHIKLSsJCSAgICAgICAmJiAhYnVpbGRfaWRfZXF1YWwgKG1hcHBl ZF9maWxlX2luZm8tPmJ1aWxkX2lkICgpLAotKwkJCQkJICAgYnVpbGRfaWRfYmZkX2dldCAoYWJm ZC5nZXQgKCkpKSk7Ci0gCi0tICAgICAgaWYgKGFiZmQgIT0gbnVsbHB0ciAmJiBhYmZkLT5idWls ZF9pZCAhPSBudWxscHRyKQotLQl7Ci0tCSAgc3RkOjpzdHJpbmcgYnVpbGRfaWQgPSBidWlsZF9p ZF90b19zdHJpbmcgKGFiZmQtPmJ1aWxkX2lkKTsKLS0KLS0JICBpZiAoYnVpbGRfaWQgIT0gYnVp bGRfaWRfaGV4c3RyLmdldCAoKSkKLS0JICAgIG1pc21hdGNoID0gdHJ1ZTsKLS0JfQotICAgICAg IGlmIChhYmZkID09IG51bGxwdHIgfHwgbWlzbWF0Y2gpCi0gCXsKLS0JICBzY29wZWRfZmQgZmQg PSBkZWJ1Z2luZm9kX2V4ZWNfcXVlcnkgKAotLQkgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikg YnVpbGRfaWRfaGV4c3RyLmdldCAoKSwgMCwKLS0JICAgIHNvLnNvX25hbWUuY19zdHIgKCksICZm aWxlbmFtZSk7Ci0tCi0tCSAgaWYgKGZkLmdldCAoKSA+PSAwKQotLQkgICAgYWJmZCA9IG9wcy0+ YmZkX29wZW4gKGZpbGVuYW1lLmdldCAoKSk7Ci0tCSAgZWxzZSBpZiAobWlzbWF0Y2gpCi0tCSAg ICB3YXJuaW5nIChfICgiQnVpbGQtaWQgb2YgJXBzIGRvZXMgbm90IG1hdGNoIGNvcmUgZmlsZS4i KSwKLS0JCSAgICAgc3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLAotLQkJ CQkgICAgZmlsZW5hbWUuZ2V0ICgpKSk7Ci0rCSAgLyogSWYgR0RCIGZvdW5kIGEgc3VpdGFibGUg ZmlsZSBkdXJpbmcgdGhlIGZpbGUgbWFwcGluZwotKwkgICAgIHByb2Nlc3Npbmcgc3RhZ2UgdGhl biBsZXRzIHVzZSB0aGF0LiAgV2UgZG9uJ3QgY2hlY2sgdGhlCi0rCSAgICAgYnVpbGQtaWQgYWZ0 ZXIgb3BlbmluZyB0aGlzIGZpbGUsIGVpdGhlciB0aGlzIGZpbGUgd2FzIGZvdW5kCi0rCSAgICAg YnkgYnVpbGQtaWQsIGluIHdoaWNoIGNhc2UgaXQncyBnb2luZyB0byBtYXRjaCwgb3IgdGhpcyBm aWxlCi0rCSAgICAgZG9lc24ndCBoYXZlIGEgYnVpbGQtaWQsIHNvIGNoZWNraW5nIHRlbGxzIHVz IG5vdGhpbmcuCi0rCSAgICAgSG93ZXZlciwgaWYgaXQgd2FzIGdvb2QgZW5vdWdoIGR1cmluZyB0 aGUgbWFwcGVkIGZpbGUKLSsJICAgICBwcm9jZXNzaW5nLCB3ZSBhc3N1bWUgaXQncyBnb29kIGVu b3VnaCBub3cuICAqLwotKwkgIGlmICghbWFwcGVkX2ZpbGVfaW5mby0+ZmlsZW5hbWUgKCkuZW1w dHkgKCkpCi0rCSAgICBhYmZkID0gb3BzLT5iZmRfb3BlbiAobWFwcGVkX2ZpbGVfaW5mby0+Zmls ZW5hbWUgKCkuY19zdHIgKCkpOwotKwkgIGVsc2UKLSsJICAgIGFiZmQgPSBudWxscHRyOwotKwot KwkgIGlmIChhYmZkID09IG51bGxwdHIpCi0rCSAgICBhYmZkID0gZmluZF9vYmpmaWxlX2J5X2J1 aWxkX2lkIChjdXJyZW50X3Byb2dyYW1fc3BhY2UsCi0rCQkJCQkgICAgIG1hcHBlZF9maWxlX2lu Zm8tPmJ1aWxkX2lkICgpLAotKwkJCQkJICAgICBzby5zb19uYW1lLmNfc3RyICgpKTsKLSsKLSsJ ICBpZiAoYWJmZCA9PSBudWxscHRyICYmIG1pc21hdGNoKQotKwkgICAgewotKwkgICAgICB3YXJu aW5nIChfICgiQnVpbGQtaWQgb2YgJXBzIGRvZXMgbm90IG1hdGNoIGNvcmUgZmlsZS4iKSwKLSsJ CSAgICAgICBzdHlsZWRfc3RyaW5nIChmaWxlX25hbWVfc3R5bGUuc3R5bGUgKCksCi0rCQkJCSAg ICAgIGZpbGVuYW1lLmdldCAoKSkpOwotKwkgICAgICBhYmZkID0gbnVsbHB0cjsKLSsJICAgIH0K LSAJfQotICAgICB9Ci0gCi1AQCAtMTcwNSw2ICsxNjY0LDE0IEBAIHJlbW92ZV91c2VyX2FkZGVk X29iamZpbGUgKHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlKQotICAgICB9Ci0gfQotIAotKy8qIFNl ZSBzb2xpc3QuaC4gICovCi0rCi0rc3RkOjpvcHRpb25hbDxDT1JFX0FERFI+Ci0rZGVmYXVsdF9m aW5kX3NvbGliX2FkZHIgKHNvbGliICZzbykKLSt7Ci0rICByZXR1cm4ge307Ci0rfQotKwotIHZv aWQgX2luaXRpYWxpemVfc29saWIgKCk7Ci0gCi0gdm9pZAotZGlmZiAtLWdpdCBhL2dkYi9zb2xp Yi5oIGIvZ2RiL3NvbGliLmgKLS0tLSBhL2dkYi9zb2xpYi5oCi0rKysgYi9nZGIvc29saWIuaAot QEAgLTEzNiwxMSArMTM2LDQgQEAgZXh0ZXJuIHZvaWQgdXBkYXRlX3NvbGliX2JyZWFrcG9pbnRz ICh2b2lkKTsKLSAKLSBleHRlcm4gdm9pZCBoYW5kbGVfc29saWJfZXZlbnQgKHZvaWQpOwotIAot LS8qIEFzc29jaWF0ZSBTT05BTUUgd2l0aCBCVUlMRF9JRCBpbiBBQkZEJ3MgcmVnaXN0cnkgc28g dGhhdCBpdCBjYW4gYmUKLS0gICByZXRyaWV2ZWQgd2l0aCBnZXRfY2JmZF9zb25hbWVfYnVpbGRf aWQuICAqLwotLQotLWV4dGVybiB2b2lkIHNldF9jYmZkX3NvbmFtZV9idWlsZF9pZCAoZ2RiX2Jm ZF9yZWZfcHRyIGFiZmQsCi0tCQkJCSAgICAgIGNvbnN0IGNoYXIgKnNvbmFtZSwKLS0JCQkJICAg ICAgY29uc3QgYmZkX2J1aWxkX2lkICpidWlsZF9pZCk7Ci0tCi0gI2VuZGlmIC8qIFNPTElCX0gg Ki8KLWRpZmYgLS1naXQgYS9nZGIvc29saXN0LmggYi9nZGIvc29saXN0LmgKLS0tLSBhL2dkYi9z b2xpc3QuaAotKysrIGIvZ2RiL3NvbGlzdC5oCi1AQCAtMTMyLDE0ICsxMzIsNiBAQCBzdHJ1Y3Qg c29saWJfb3BzCi0gICAvKiBGaW5kIGFuZCBvcGVuIHNoYXJlZCBsaWJyYXJ5IGJpbmFyeSBmaWxl LiAgKi8KLSAgIGdkYl9iZmRfcmVmX3B0ciAoKmJmZF9vcGVuKSAoY29uc3QgY2hhciAqcGF0aG5h bWUpOwotIAotLSAgLyogT3B0aW9uYWwgZXh0cmEgaG9vayBmb3IgZmluZGluZyBhbmQgb3Blbmlu ZyBhIHNvbGliLgotLSAgICAgSWYgVEVNUF9QQVRITkFNRSBpcyBub24tTlVMTDogSWYgdGhlIGZp bGUgaXMgc3VjY2Vzc2Z1bGx5IG9wZW5lZCBhCi0tICAgICBwb2ludGVyIHRvIGEgbWFsbG9jJ2Qg YW5kIHJlYWxwYXRoJ2QgY29weSBvZiBTT05BTUUgaXMgc3RvcmVkIHRoZXJlLAotLSAgICAgb3Ro ZXJ3aXNlIE5VTEwgaXMgc3RvcmVkIHRoZXJlLiAgKi8KLS0gIGludCAoKmZpbmRfYW5kX29wZW5f c29saWIpIChjb25zdCBjaGFyICpzb25hbWUsCi0tCQkJICAgICAgdW5zaWduZWQgb19mbGFncywK LS0JCQkgICAgICBnZGI6OnVuaXF1ZV94bWFsbG9jX3B0cjxjaGFyPiAqdGVtcF9wYXRobmFtZSk7 Ci0tCi0gICAvKiBHaXZlbiB0d28gc29fbGlzdCBvYmplY3RzLCBvbmUgZnJvbSB0aGUgR0RCIHRo cmVhZCBsaXN0Ci0gICAgICBhbmQgYW5vdGhlciBmcm9tIHRoZSBsaXN0IHJldHVybmVkIGJ5IGN1 cnJlbnRfc29zLCByZXR1cm4gMQotICAgICAgaWYgdGhleSByZXByZXNlbnQgdGhlIHNhbWUgbGli cmFyeS4KLUBAIC0xNjcsNiArMTU5LDIzIEBAIHN0cnVjdCBzb2xpYl9vcHMKLSAgICAgIE5VTEws IGluIHdoaWNoIGNhc2Ugbm8gc3BlY2lmaWMgcHJlcHJvY2Vzc2luZyBpcyBuZWNlc3NhcnkKLSAg ICAgIGZvciB0aGlzIHRhcmdldC4gICovCi0gICB2b2lkICgqaGFuZGxlX2V2ZW50KSAodm9pZCk7 Ci0rCi0rICAvKiBSZXR1cm4gYW4gYWRkcmVzcyB3aXRoaW4gdGhlIGluZmVyaW9yJ3MgYWRkcmVz cyBzcGFjZSB3aGljaCBpcyBrbm93bgotKyAgICAgdG8gYmUgcGFydCBvZiBTTy4gIElmIHRoZXJl IGlzIG5vIHN1Y2ggYWRkcmVzcywgb3IgR0RCIGRvZXNuJ3Qga25vdwotKyAgICAgaG93IHRvIGZp Z3VyZSBvdXQgc3VjaCBhbiBhZGRyZXNzIHRoZW4gYW4gZW1wdHkgb3B0aW9uYWwgaXMKLSsgICAg IHJldHVybmVkLgotKwotKyAgICAgVGhlIHJldHVybmVkIGFkZHJlc3MgY2FuIGJlIHVzZWQgd2hl biBsb2FkaW5nIHRoZSBzaGFyZWQgbGlicmFyaWVzCi0rICAgICBmb3IgYSBjb3JlIGZpbGUuICBH REIga25vd3MgdGhlIGJ1aWxkLWlkcyBmb3IgKHNvbWUpIGZpbGVzIG1hcHBlZAotKyAgICAgaW50 byB0aGUgaW5mZXJpb3IncyBhZGRyZXNzIHNwYWNlLCBhbmQga25vd3MgdGhlIGFkZHJlc3MgcmFu Z2VzIHdoaWNoCi0rICAgICB0aG9zZSBtYXBwZWQgZmlsZXMgY292ZXIuICBJZiBHREIgY2FuIGZp Z3VyZSBvdXQgYSByZXByZXNlbnRhdGl2ZQotKyAgICAgYWRkcmVzcyBmb3IgdGhlIGxpYnJhcnkg dGhlbiB0aGlzIGNhbiBiZSB1c2VkIHRvIG1hdGNoIGEgbGlicmFyeSB0byBhCi0rICAgICBtYXBw ZWQgZmlsZSwgYW5kIHRodXMgdG8gYSBidWlsZC1pZC4gIEdEQiBjYW4gdGhlbiB1c2UgdGhpcwot KyAgICAgaW5mb3JtYXRpb24gdG8gaGVscCBsb2NhdGUgdGhlIHNoYXJlZCBsaWJyYXJ5IG9iamZp bGUsIGlmIHRoZSBvYmpmaWxlCi0rICAgICBpcyBub3QgaW4gdGhlIGV4cGVjdGVkIHBsYWNlIChh cyBkZWZpbmVkIGJ5IHRoZSBzaGFyZWQgbGlicmFyaWVzIGZpbGUKLSsgICAgIG5hbWUpLiAgKi8K LSsKLSsgIHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPiAoKmZpbmRfc29saWJfYWRkcikgKHNvbGli ICZzbyk7Ci0gfTsKLSAKLSAvKiBBIHVuaXF1ZSBwb2ludGVyIHRvIGEgc29fbGlzdC4gICovCi1A QCAtMTg2LDQgKzE5NSw5IEBAIGV4dGVybiBnZGJfYmZkX3JlZl9wdHIgc29saWJfYmZkX2ZvcGVu IChjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZkKTsKLSAvKiBGaW5kIHNvbGliIGJpbmFyeSBm aWxlIGFuZCBvcGVuIGl0LiAgKi8KLSBleHRlcm4gZ2RiX2JmZF9yZWZfcHRyIHNvbGliX2JmZF9v cGVuIChjb25zdCBjaGFyICppbl9wYXRobmFtZSk7Ci0gCi0rLyogQSBkZWZhdWx0IGltcGxlbWVu dGF0aW9uIG9mIHRoZSBzb2xpYl9vcHM6OmZpbmRfc29saWJfYWRkciBjYWxsYmFjay4KLSsgICBU aGlzIGp1c3QgcmV0dXJucyBhbiBlbXB0eSBzdGQ6Om9wdGlvbmFsPENPUkVfQUREUj4gaW5kaWNh dGluZyBHREIgaXMKLSsgICB1bmFibGUgdG8gZmluZCBhbiBhZGRyZXNzIHdpdGhpbiB0aGUgbGli cmFyeSBTTy4gICovCi0rZXh0ZXJuIHN0ZDo6b3B0aW9uYWw8Q09SRV9BRERSPiBkZWZhdWx0X2Zp bmRfc29saWJfYWRkciAoc29saWIgJnNvKTsKLSsKLSAjZW5kaWYKLWRpZmYgLS1naXQgYS9nZGIv c3ltZmlsZS1kZWJ1Zy5jIGIvZ2RiL3N5bWZpbGUtZGVidWcuYwotLS0tIGEvZ2RiL3N5bWZpbGUt ZGVidWcuYwotKysrIGIvZ2RiL3N5bWZpbGUtZGVidWcuYwotQEAgLTYzNyw3ICs2MzcsNyBAQCBv YmpmaWxlOjpmaW5kX2FuZF9hZGRfc2VwYXJhdGVfc3ltYm9sX2ZpbGUgKHN5bWZpbGVfYWRkX2Zs YWdzIHN5bWZpbGVfZmxhZ3MpCi0gCSAgICAgdGhlIHVzZXIgYSBzeXN0ZW0gc3BlY2lmaWMgbWVz c2FnZSB0aGF0IGd1aWRlcyB0aGVtIHRvIGZpbmRpbmcKLSAJICAgICB0aGUgbWlzc2luZyBkZWJ1 ZyBpbmZvLiAgKi8KLSAKLS0JICBleHRfbGFuZ19taXNzaW5nX2RlYnVnaW5mb19yZXN1bHQgZXh0 X3Jlc3VsdAotKwkgIGV4dF9sYW5nX21pc3NpbmdfZmlsZV9yZXN1bHQgZXh0X3Jlc3VsdAotIAkg ICAgPSBleHRfbGFuZ19oYW5kbGVfbWlzc2luZ19kZWJ1Z2luZm8gKHRoaXMpOwotIAkgIGlmICgh ZXh0X3Jlc3VsdC5maWxlbmFtZSAoKS5lbXB0eSAoKSkKLSAJICAgIHsKLWRpZmYgLS1naXQgYS9n ZGIvc3ltZmlsZS5jIGIvZ2RiL3N5bWZpbGUuYwotLS0tIGEvZ2RiL3N5bWZpbGUuYwotKysrIGIv Z2RiL3N5bWZpbGUuYwotQEAgLTEyMzcsNiArMTIzNyw4IEBAIHNlcGFyYXRlX2RlYnVnX2ZpbGVf ZXhpc3RzIChjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgbG9uZyBjcmMsCi0gCQkJ ICAgIHN0cnVjdCBvYmpmaWxlICpwYXJlbnRfb2JqZmlsZSwKLSAJCQkgICAgZGVmZXJyZWRfd2Fy bmluZ3MgKndhcm5pbmdzKQotIHsKLSsgIFNFUEFSQVRFX0RFQlVHX0ZJTEVfU0NPUEVEX0RFQlVH X0VOVEVSX0VYSVQ7Ci0rCi0gICB1bnNpZ25lZCBsb25nIGZpbGVfY3JjOwotICAgaW50IGZpbGVf Y3JjX3A7Ci0gICBzdHJ1Y3Qgc3RhdCBwYXJlbnRfc3RhdCwgYWJmZF9zdGF0OwotQEAgLTEyNTEs MTkgKzEyNTMsMTMgQEAgc2VwYXJhdGVfZGVidWdfZmlsZV9leGlzdHMgKGNvbnN0IHN0ZDo6c3Ry aW5nICZuYW1lLCB1bnNpZ25lZCBsb25nIGNyYywKLSAgIGlmIChmaWxlbmFtZV9jbXAgKG5hbWUu Y19zdHIgKCksIG9iamZpbGVfbmFtZSAocGFyZW50X29iamZpbGUpKSA9PSAwKQotICAgICByZXR1 cm4gMDsKLSAKLS0gIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQotLSAgICB7Ci0tICAg ICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgXygiICBUcnlpbmcgJXMuLi4iKSwgbmFtZS5jX3N0 ciAoKSk7Ci0tICAgICAgZ2RiX2ZsdXNoIChnZGJfc3RkbG9nKTsKLS0gICAgfQotKyAgc2VwYXJh dGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYgKCJUcnlpbmcgJXMuLi4iLCBuYW1lLmNfc3RyICgp KTsKLSAKLSAgIGdkYl9iZmRfcmVmX3B0ciBhYmZkIChnZGJfYmZkX29wZW4gKG5hbWUuY19zdHIg KCksIGdudXRhcmdldCkpOwotIAotICAgaWYgKGFiZmQgPT0gTlVMTCkKLSAgICAgewotLSAgICAg IGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQotLQlnZGJfcHJpbnRmIChnZGJfc3RkbG9n LCBfKCIgbm8sIHVuYWJsZSB0byBvcGVuLlxuIikpOwotLQotKyAgICAgIHNlcGFyYXRlX2RlYnVn X2ZpbGVfZGVidWdfcHJpbnRmICgidW5hYmxlIHRvIG9wZW4gZmlsZSIpOwotICAgICAgIHJldHVy biAwOwotICAgICB9Ci0gCi1AQCAtMTI4NSwxMCArMTI4MSw3IEBAIHNlcGFyYXRlX2RlYnVnX2Zp bGVfZXhpc3RzIChjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgbG9uZyBjcmMsCi0g ICAgICAgaWYgKGFiZmRfc3RhdC5zdF9kZXYgPT0gcGFyZW50X3N0YXQuc3RfZGV2Ci0gCSAgJiYg YWJmZF9zdGF0LnN0X2lubyA9PSBwYXJlbnRfc3RhdC5zdF9pbm8pCi0gCXsKLS0JICBpZiAoc2Vw YXJhdGVfZGVidWdfZmlsZV9kZWJ1ZykKLS0JICAgIGdkYl9wcmludGYgKGdkYl9zdGRsb2csCi0t CQkJXygiIG5vLCBzYW1lIGZpbGUgYXMgdGhlIG9iamZpbGUuXG4iKSk7Ci0tCi0rCSAgc2VwYXJh dGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYgKCJzYW1lIGZpbGUgYXMgdGhlIG9iamZpbGUiKTsK LSAJICByZXR1cm4gMDsKLSAJfQotICAgICAgIHZlcmlmaWVkX2FzX2RpZmZlcmVudCA9IDE7Ci1A QCAtMTMwMCw5ICsxMjkzLDcgQEAgc2VwYXJhdGVfZGVidWdfZmlsZV9leGlzdHMgKGNvbnN0IHN0 ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBsb25nIGNyYywKLSAKLSAgIGlmICghZmlsZV9jcmNf cCkKLSAgICAgewotLSAgICAgIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQotLQlnZGJf cHJpbnRmIChnZGJfc3RkbG9nLCBfKCIgbm8sIGVycm9yIGNvbXB1dGluZyBDUkMuXG4iKSk7Ci0t Ci0rICAgICAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYgKCJlcnJvciBjb21wdXRp bmcgQ1JDIik7Ci0gICAgICAgcmV0dXJuIDA7Ci0gICAgIH0KLSAKLUBAIC0xMzE4LDIwICsxMzA5 LDE4IEBAIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzIChjb25zdCBzdGQ6OnN0cmluZyAmbmFt ZSwgdW5zaWduZWQgbG9uZyBjcmMsCi0gCXsKLSAJICBpZiAoIWdkYl9iZmRfY3JjIChwYXJlbnRf b2JqZmlsZS0+b2JmZC5nZXQgKCksICZwYXJlbnRfY3JjKSkKLSAJICAgIHsKLS0JICAgICAgaWYg KHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcpCi0tCQlnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAot LQkJCSAgICBfKCIgbm8sIGVycm9yIGNvbXB1dGluZyBDUkMuXG4iKSk7Ci0tCi0rCSAgICAgIHNl cGFyYXRlX2RlYnVnX2ZpbGVfZGVidWdfcHJpbnRmICgiZXJyb3IgY29tcHV0aW5nIENSQyIpOwot IAkgICAgICByZXR1cm4gMDsKLSAJICAgIH0KLSAJfQotIAotICAgICAgIGlmICh2ZXJpZmllZF9h c19kaWZmZXJlbnQgfHwgcGFyZW50X2NyYyAhPSBmaWxlX2NyYykKLSAJewotLQkgIGlmIChzZXBh cmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQotLQkgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGxvZywgInRo ZSBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3VuZCBpbiBcIiVzXCIiCi0tCQkJIiBkb2VzIG5vdCBtYXRj aCBcIiVzXCIgKENSQyBtaXNtYXRjaCkuXG4iLAotLQkJCW5hbWUuY19zdHIgKCksIG9iamZpbGVf bmFtZSAocGFyZW50X29iamZpbGUpKTsKLSsJICBzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnX3By aW50ZgotKwkgICAgKCJ0aGUgZGVidWcgaW5mb3JtYXRpb24gZm91bmQgaW4gXCIlc1wiIGRvZXMg bm90IG1hdGNoICIKLSsJICAgICAiXCIlc1wiIChDUkMgbWlzbWF0Y2gpLiIsIG5hbWUuY19zdHIg KCksCi0rCSAgICAgb2JqZmlsZV9uYW1lIChwYXJlbnRfb2JqZmlsZSkpOwotKwotIAkgIHdhcm5p bmdzLT53YXJuIChfKCJ0aGUgZGVidWcgaW5mb3JtYXRpb24gZm91bmQgaW4gXCIlcHNcIiIKLSAJ CQkgICAgIiBkb2VzIG5vdCBtYXRjaCBcIiVwc1wiIChDUkMgbWlzbWF0Y2gpLiIpLAotIAkJCSAg c3R5bGVkX3N0cmluZyAoZmlsZV9uYW1lX3N0eWxlLnN0eWxlICgpLAotQEAgLTEzNDMsOCArMTMz Miw3IEBAIHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzIChjb25zdCBzdGQ6OnN0cmluZyAmbmFt ZSwgdW5zaWduZWQgbG9uZyBjcmMsCi0gICAgICAgcmV0dXJuIDA7Ci0gICAgIH0KLSAKLS0gIGlm IChzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnKQotLSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9n LCBfKCIgeWVzIVxuIikpOwotKyAgc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1Z19wcmludGYgKCJm b3VuZCBhIG1hdGNoIik7Ci0gCi0gICByZXR1cm4gMTsKLSB9Ci1AQCAtMTM4NSwyMyArMTM3Mywx OCBAQCBmaW5kX3NlcGFyYXRlX2RlYnVnX2ZpbGUgKGNvbnN0IGNoYXIgKmRpciwKLSAJCQkgIHVu c2lnbmVkIGxvbmcgY3JjMzIsIHN0cnVjdCBvYmpmaWxlICpvYmpmaWxlLAotIAkJCSAgZGVmZXJy ZWRfd2FybmluZ3MgKndhcm5pbmdzKQotIHsKLS0gIGlmIChzZXBhcmF0ZV9kZWJ1Z19maWxlX2Rl YnVnKQotLSAgICBnZGJfcHJpbnRmIChnZGJfc3RkbG9nLAotLQkJXygiXG5Mb29raW5nIGZvciBz ZXBhcmF0ZSBkZWJ1ZyBpbmZvIChkZWJ1ZyBsaW5rKSBmb3IgIgotLQkJICAiJXNcbiIpLCBvYmpm aWxlX25hbWUgKG9iamZpbGUpKTsKLSsgIFNFUEFSQVRFX0RFQlVHX0ZJTEVfU0NPUEVEX0RFQlVH X1NUQVJUX0VORAotKyAgICAoImxvb2tpbmcgZm9yIHNlcGFyYXRlIGRlYnVnIGluZm8gKGRlYnVn IGxpbmspIGZvciAlcyIsCi0rICAgICBvYmpmaWxlX25hbWUgKG9iamZpbGUpKTsKLSAKLSAgIC8q IEZpcnN0IHRyeSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIG9yaWdpbmFsIGZpbGUuICAq LwotLSAgc3RkOjpzdHJpbmcgZGVidWdmaWxlID0gZGlyOwotLSAgZGVidWdmaWxlICs9IGRlYnVn bGluazsKLSsgIHN0ZDo6c3RyaW5nIGRlYnVnZmlsZSA9IHBhdGhfam9pbiAoZGlyLCBkZWJ1Z2xp bmspOwotIAotICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzIChkZWJ1Z2ZpbGUsIGNy YzMyLCBvYmpmaWxlLCB3YXJuaW5ncykpCi0gICAgIHJldHVybiBkZWJ1Z2ZpbGU7Ci0gCi0gICAv KiBUaGVuIHRyeSBpbiB0aGUgc3ViZGlyZWN0b3J5IG5hbWVkIERFQlVHX1NVQkRJUkVDVE9SWS4g ICovCi0tICBkZWJ1Z2ZpbGUgPSBkaXI7Ci0tICBkZWJ1Z2ZpbGUgKz0gREVCVUdfU1VCRElSRUNU T1JZOwotLSAgZGVidWdmaWxlICs9ICIvIjsKLS0gIGRlYnVnZmlsZSArPSBkZWJ1Z2xpbms7Ci0r ICBkZWJ1Z2ZpbGUgPSBwYXRoX2pvaW4gKGRpciwgREVCVUdfU1VCRElSRUNUT1JZLCBkZWJ1Z2xp bmspOwotIAotICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZXhpc3RzIChkZWJ1Z2ZpbGUsIGNy YzMyLCBvYmpmaWxlLCB3YXJuaW5ncykpCi0gICAgIHJldHVybiBkZWJ1Z2ZpbGU7Ci1AQCAtMTQx NCwxMCArMTM5NywxMyBAQCBmaW5kX3NlcGFyYXRlX2RlYnVnX2ZpbGUgKGNvbnN0IGNoYXIgKmRp ciwKLSAgIGJvb2wgdGFyZ2V0X3ByZWZpeCA9IGlzX3RhcmdldF9maWxlbmFtZSAoZGlyKTsKLSAg IGNvbnN0IGNoYXIgKmRpcl9ub3RhcmdldAotICAgICA9IHRhcmdldF9wcmVmaXggPyBkaXIgKyBz dHJsZW4gKFRBUkdFVF9TWVNST09UX1BSRUZJWCkgOiBkaXI7Ci0rICBjb25zdCBjaGFyICp0YXJn ZXRfcHJlZml4X3N0ciA9IHRhcmdldF9wcmVmaXggPyBUQVJHRVRfU1lTUk9PVF9QUkVGSVggOiAi IjsKLSAgIHN0ZDo6dmVjdG9yPGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+PiBkZWJ1Z2Rp cl92ZWMKLSAgICAgPSBkaXJuYW1lc190b19jaGFyX3B0cl92ZWMgKGRlYnVnX2ZpbGVfZGlyZWN0 b3J5LmNfc3RyICgpKTsKLS0gIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+IGNhbm9uX3N5 c3Jvb3QKLS0gICAgPSBnZGJfcmVhbHBhdGggKGdkYl9zeXNyb290LmNfc3RyICgpKTsKLSsgIGNv bnN0IGNoYXIgKnN5c3Jvb3Rfc3RyID0gZ2RiX3N5c3Jvb3QuY19zdHIgKCk7Ci0rICBpZiAoaXNf dGFyZ2V0X2ZpbGVuYW1lIChzeXNyb290X3N0cikgJiYgdGFyZ2V0X2ZpbGVzeXN0ZW1faXNfbG9j YWwgKCkpCi0rICAgIHN5c3Jvb3Rfc3RyICs9IHN0cmxlbiAoVEFSR0VUX1NZU1JPT1RfUFJFRklY KTsKLSsgIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+IGNhbm9uX3N5c3Jvb3QgPSBnZGJf cmVhbHBhdGggKHN5c3Jvb3Rfc3RyKTsKLSAKLSAgLyogTVMtV2luZG93cy9NUy1ET1MgZG9uJ3Qg YWxsb3cgY29sb25zIGluIGZpbGUgbmFtZXM7IHdlIG11c3QKLSAgICAgY29udmVydCB0aGUgZHJp dmUgbGV0dGVyIGludG8gYSBvbmUtbGV0dGVyIGRpcmVjdG9yeSwgc28gdGhhdCB0aGUKLUBAIC0x NDQyLDEyICsxNDI4LDggQEAgZmluZF9zZXBhcmF0ZV9kZWJ1Z19maWxlIChjb25zdCBjaGFyICpk aXIsCi0gCi0gICBmb3IgKGNvbnN0IGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+ICZkZWJ1 Z2RpciA6IGRlYnVnZGlyX3ZlYykKLSAgICAgewotLSAgICAgIGRlYnVnZmlsZSA9IHRhcmdldF9w cmVmaXggPyBUQVJHRVRfU1lTUk9PVF9QUkVGSVggOiAiIjsKLS0gICAgICBkZWJ1Z2ZpbGUgKz0g ZGVidWdkaXI7Ci0tICAgICAgZGVidWdmaWxlICs9ICIvIjsKLS0gICAgICBkZWJ1Z2ZpbGUgKz0g ZHJpdmU7Ci0tICAgICAgZGVidWdmaWxlICs9IGRpcl9ub3RhcmdldDsKLS0gICAgICBkZWJ1Z2Zp bGUgKz0gZGVidWdsaW5rOwotKyAgICAgIGRlYnVnZmlsZSA9IHBhdGhfam9pbiAodGFyZ2V0X3By ZWZpeF9zdHIsIGRlYnVnZGlyLmdldCAoKSwKLSsJCQkgICAgIGRyaXZlLmNfc3RyICgpLCBkaXJf bm90YXJnZXQsIGRlYnVnbGluayk7Ci0gCi0gICAgICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVf ZXhpc3RzIChkZWJ1Z2ZpbGUsIGNyYzMyLCBvYmpmaWxlLCB3YXJuaW5ncykpCi0gCXJldHVybiBk ZWJ1Z2ZpbGU7Ci1AQCAtMTQ2NCwzOSArMTQ0NiwxOCBAQCBmaW5kX3NlcGFyYXRlX2RlYnVnX2Zp bGUgKGNvbnN0IGNoYXIgKmRpciwKLSAJewotIAkgIC8qIElmIHRoZSBmaWxlIGlzIGluIHRoZSBz eXNyb290LCB0cnkgdXNpbmcgaXRzIGJhc2UgcGF0aCBpbgotIAkgICAgIHRoZSBnbG9iYWwgZGVi dWdmaWxlIGRpcmVjdG9yeS4gICovCi0tCSAgZGVidWdmaWxlID0gdGFyZ2V0X3ByZWZpeCA/IFRB UkdFVF9TWVNST09UX1BSRUZJWCA6ICIiOwotLQkgIGRlYnVnZmlsZSArPSBkZWJ1Z2RpcjsKLS0J ICBkZWJ1Z2ZpbGUgKz0gIi8iOwotLQkgIGRlYnVnZmlsZSArPSBiYXNlX3BhdGg7Ci0tCSAgZGVi dWdmaWxlICs9ICIvIjsKLS0JICBkZWJ1Z2ZpbGUgKz0gZGVidWdsaW5rOwotKwkgIGRlYnVnZmls ZSA9IHBhdGhfam9pbiAodGFyZ2V0X3ByZWZpeF9zdHIsIGRlYnVnZGlyLmdldCAoKSwKLSsJCQkJ IGJhc2VfcGF0aCwgZGVidWdsaW5rKTsKLSAKLSAJICBpZiAoc2VwYXJhdGVfZGVidWdfZmlsZV9l eGlzdHMgKGRlYnVnZmlsZSwgY3JjMzIsIG9iamZpbGUsIHdhcm5pbmdzKSkKLSAJICAgIHJldHVy biBkZWJ1Z2ZpbGU7Ci0gCi0gCSAgLyogSWYgdGhlIGZpbGUgaXMgaW4gdGhlIHN5c3Jvb3QsIHRy eSB1c2luZyBpdHMgYmFzZSBwYXRoIGluCi0tCSAgICAgdGhlIHN5c3Jvb3QncyBnbG9iYWwgZGVi dWdmaWxlIGRpcmVjdG9yeS4gIEdEQl9TWVNST09UCi0tCSAgICAgbWlnaHQgcmVmZXIgdG8gYSB0 YXJnZXQ6IHBhdGg7IHdlIHN0cmlwIHRoZSAidGFyZ2V0OiIKLS0JICAgICBwcmVmaXggLS0gYnV0 IGlmIHRoYXQgd291bGQgeWllbGQgdGhlIGVtcHR5IHN0cmluZywgd2UKLS0JICAgICBkb24ndCBi b3RoZXIgYXQgYWxsLCBiZWNhdXNlIHRoYXQgd291bGQganVzdCBnaXZlIHRoZQotLQkgICAgIHNh bWUgcmVzdWx0IGFzIGFib3ZlLiAgKi8KLSsJICAgICB0aGUgc3lzcm9vdCdzIGdsb2JhbCBkZWJ1 Z2ZpbGUgZGlyZWN0b3J5LiAgKi8KLSAJICBpZiAoZ2RiX3N5c3Jvb3QgIT0gVEFSR0VUX1NZU1JP T1RfUFJFRklYKQotIAkgICAgewotLQkgICAgICBkZWJ1Z2ZpbGUgPSB0YXJnZXRfcHJlZml4ID8g VEFSR0VUX1NZU1JPT1RfUFJFRklYIDogIiI7Ci0tCSAgICAgIGlmIChpc190YXJnZXRfZmlsZW5h bWUgKGdkYl9zeXNyb290KSkKLS0JCXsKLS0JCSAgc3RkOjpzdHJpbmcgcm9vdAotLQkJICAgID0g Z2RiX3N5c3Jvb3Quc3Vic3RyIChzdHJsZW4gKFRBUkdFVF9TWVNST09UX1BSRUZJWCkpOwotLQkJ ICBnZGJfYXNzZXJ0ICghcm9vdC5lbXB0eSAoKSk7Ci0tCQkgIGRlYnVnZmlsZSArPSByb290Owot LQkJfQotLQkgICAgICBlbHNlCi0tCQlkZWJ1Z2ZpbGUgKz0gZ2RiX3N5c3Jvb3Q7Ci0tCSAgICAg IGRlYnVnZmlsZSArPSBkZWJ1Z2RpcjsKLS0JICAgICAgZGVidWdmaWxlICs9ICIvIjsKLS0JICAg ICAgZGVidWdmaWxlICs9IGJhc2VfcGF0aDsKLS0JICAgICAgZGVidWdmaWxlICs9ICIvIjsKLS0J ICAgICAgZGVidWdmaWxlICs9IGRlYnVnbGluazsKLSsJICAgICAgZGVidWdmaWxlID0gcGF0aF9q b2luIChnZGJfc3lzcm9vdC5jX3N0ciAoKSwgZGVidWdkaXIuZ2V0ICgpLAotKwkJCQkgICAgIGJh c2VfcGF0aCwgZGVidWdsaW5rKTsKLSAKLSAJICAgICAgaWYgKHNlcGFyYXRlX2RlYnVnX2ZpbGVf ZXhpc3RzIChkZWJ1Z2ZpbGUsIGNyYzMyLCBvYmpmaWxlLAotIAkJCQkJICAgICAgd2FybmluZ3Mp KQotZGlmZiAtLWdpdCBhL2dkYi9zeW1maWxlLmggYi9nZGIvc3ltZmlsZS5oCi0tLS0gYS9nZGIv c3ltZmlsZS5oCi0rKysgYi9nZGIvc3ltZmlsZS5oCi1AQCAtMzcxLDYgKzM3MSwyNSBAQCBleHRl cm4gZ2RiX2JmZF9yZWZfcHRyIGZpbmRfc2VwYXJhdGVfZGVidWdfZmlsZV9pbl9zZWN0aW9uIChz dHJ1Y3Qgb2JqZmlsZSAqKTsKLSAKLSBleHRlcm4gYm9vbCBzZXBhcmF0ZV9kZWJ1Z19maWxlX2Rl YnVnOwotIAotKy8qIFByaW50IGEgInNlcGFyYXRlLWRlYnVnLWZpbGUiIGRlYnVnIHN0YXRlbWVu dC4gICovCi0rCi0rI2RlZmluZSBzZXBhcmF0ZV9kZWJ1Z19maWxlX2RlYnVnX3ByaW50ZihmbXQs IC4uLikJCVwKLSsgIGRlYnVnX3ByZWZpeGVkX3ByaW50Zl9jb25kIChzZXBhcmF0ZV9kZWJ1Z19m aWxlX2RlYnVnLAlcCi0rCQkJICAgICAgInNlcGFyYXRlLWRlYnVnLWZpbGUiLAkJXAotKwkJCSAg ICAgIGZtdCwgIyNfX1ZBX0FSR1NfXykKLSsKLSsvKiBQcmludCAic2VwYXJhdGUtZGVidWctZmls ZSIgZW50ZXIvZXhpdCBkZWJ1ZyBzdGF0ZW1lbnRzLiAgKi8KLSsKLSsjZGVmaW5lIFNFUEFSQVRF X0RFQlVHX0ZJTEVfU0NPUEVEX0RFQlVHX0VOVEVSX0VYSVQgXAotKyAgc2NvcGVkX2RlYnVnX2Vu dGVyX2V4aXQgKHNlcGFyYXRlX2RlYnVnX2ZpbGVfZGVidWcsCVwKLSsJCQkgICAic2VwYXJhdGUt ZGVidWctZmlsZSIpCi0rCi0rLyogUHJpbnQgInNlcGFyYXRlLWRlYnVnLWZpbGUiIHN0YXJ0L2Vu ZCBkZWJ1ZyBzdGF0ZW1lbnRzLiAgKi8KLSsKLSsjZGVmaW5lIFNFUEFSQVRFX0RFQlVHX0ZJTEVf U0NPUEVEX0RFQlVHX1NUQVJUX0VORChmbXQsIC4uLikgXAotKyAgc2NvcGVkX2RlYnVnX3N0YXJ0 X2VuZCAoc2VwYXJhdGVfZGVidWdfZmlsZV9kZWJ1ZywJICAgICBcCi0rCQkJICAic2VwYXJhdGUt ZGVidWctZmlsZSIsIGZtdCwgIyNfX1ZBX0FSR1NfXykKLSsKLSAvKiBSZWFkIGZ1bGwgc3ltYm9s cyBpbW1lZGlhdGVseS4gICovCi0gCi0gZXh0ZXJuIGludCByZWFkbm93X3N5bWJvbF9maWxlczsK LWRpZmYgLS1naXQgYS9nZGIvdGFyZ2V0LmMgYi9nZGIvdGFyZ2V0LmMKLS0tLSBhL2dkYi90YXJn ZXQuYwotKysrIGIvZ2RiL3RhcmdldC5jCi1AQCAtMzE5Niw2ICszMTk2LDE0IEBAIHRhcmdldF9v cHM6OmZpbGVpb19mc3RhdCAoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc2IsIGZpbGVpb19lcnJvciAq dGFyZ2V0X2Vycm5vKQotICAgcmV0dXJuIC0xOwotIH0KLSAKLStpbnQKLSt0YXJnZXRfb3BzOjpm aWxlaW9fc3RhdCAoc3RydWN0IGluZmVyaW9yICppbmYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAot KwkJCSBzdHJ1Y3Qgc3RhdCAqc2IsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKQotK3sKLSsg ICp0YXJnZXRfZXJybm8gPSBGSUxFSU9fRU5PU1lTOwotKyAgcmV0dXJuIC0xOwotK30KLSsKLSBp bnQKLSB0YXJnZXRfb3BzOjpmaWxlaW9fY2xvc2UgKGludCBmZCwgZmlsZWlvX2Vycm9yICp0YXJn ZXRfZXJybm8pCi0gewotQEAgLTMzMTUsNiArMzMyMywyOSBAQCB0YXJnZXRfZmlsZWlvX2ZzdGF0 IChpbnQgZmQsIHN0cnVjdCBzdGF0ICpzYiwgZmlsZWlvX2Vycm9yICp0YXJnZXRfZXJybm8pCi0g Ci0gLyogU2VlIHRhcmdldC5oLiAgKi8KLSAKLStpbnQKLSt0YXJnZXRfZmlsZWlvX3N0YXQgKHN0 cnVjdCBpbmZlcmlvciAqaW5mLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLSsJCSAgICBzdHJ1Y3Qg c3RhdCAqc2IsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKQotK3sKLSsgIGZvciAodGFyZ2V0 X29wcyAqdCA9IGRlZmF1bHRfZmlsZWlvX3RhcmdldCAoKTsgdCAhPSBOVUxMOyB0ID0gdC0+YmVu ZWF0aCAoKSkKLSsgICAgewotKyAgICAgIGludCByZXQgPSB0LT5maWxlaW9fc3RhdCAoaW5mLCBm aWxlbmFtZSwgc2IsIHRhcmdldF9lcnJubyk7Ci0rCi0rICAgICAgaWYgKHJldCA9PSAtMSAmJiAq dGFyZ2V0X2Vycm5vID09IEZJTEVJT19FTk9TWVMpCi0rCWNvbnRpbnVlOwotKwotKyAgICAgIHRh cmdldF9kZWJ1Z19wcmludGZfbm9mdW5jICgidGFyZ2V0X2ZpbGVpb19zdGF0ICglcykgPSAlZCAo JWQpIiwKLSsJCQkJICBmaWxlbmFtZSwgcmV0LAotKwkJCQkgIHJldCAhPSAtMSA/IDAgOiAqdGFy Z2V0X2Vycm5vKTsKLSsgICAgICByZXR1cm4gcmV0OwotKyAgICB9Ci0rCi0rICAqdGFyZ2V0X2Vy cm5vID0gRklMRUlPX0VOT1NZUzsKLSsgIHJldHVybiAtMTsKLSt9Ci0rCi0rLyogU2VlIHRhcmdl dC5oLiAgKi8KLSsKLSBpbnQKLSB0YXJnZXRfZmlsZWlvX2Nsb3NlIChpbnQgZmQsIGZpbGVpb19l cnJvciAqdGFyZ2V0X2Vycm5vKQotIHsKLWRpZmYgLS1naXQgYS9nZGIvdGFyZ2V0LmggYi9nZGIv dGFyZ2V0LmgKLS0tLSBhL2dkYi90YXJnZXQuaAotKysrIGIvZ2RiL3RhcmdldC5oCi1AQCAtMTAx MSw2ICsxMDExLDE0IEBAIHN0cnVjdCB0YXJnZXRfb3BzCi0gICAgICAgICpUQVJHRVRfRVJSTk8p LiAgKi8KLSAgICAgdmlydHVhbCBpbnQgZmlsZWlvX2ZzdGF0IChpbnQgZmQsIHN0cnVjdCBzdGF0 ICpzYiwgZmlsZWlvX2Vycm9yICp0YXJnZXRfZXJybm8pOwotIAotKyAgICAvKiBHZXQgaW5mb3Jt YXRpb24gYWJvdXQgdGhlIGZpbGUgRklMRU5BTUUgYW5kIHB1dCBpdCBpbiBTQi4gIExvb2sgZm9y Ci0rICAgICAgIEZJTEVOQU1FIGluIHRoZSBmaWxlc3lzdGVtIGFzIHNlZW4gYnkgSU5GLiAgSWYg SU5GIGlzIE5VTEwsIHVzZSB0aGUKLSsgICAgICAgZmlsZXN5c3RlbSBzZWVuIGJ5IHRoZSBkZWJ1 Z2dlciAoR0RCIG9yLCBmb3IgcmVtb3RlIHRhcmdldHMsIHRoZQotKyAgICAgICByZW1vdGUgc3R1 YikuICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvciAtMSBpZiBhbiBlcnJvciBvY2N1cnMgKGFuZAot KyAgICAgICBzZXQgKlRBUkdFVF9FUlJOTykuICAqLwotKyAgICB2aXJ0dWFsIGludCBmaWxlaW9f c3RhdCAoc3RydWN0IGluZmVyaW9yICppbmYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotKwkJCSAg ICAgc3RydWN0IHN0YXQgKnNiLCBmaWxlaW9fZXJyb3IgKnRhcmdldF9lcnJubyk7Ci0rCi0gICAg IC8qIENsb3NlIEZEIG9uIHRoZSB0YXJnZXQuICBSZXR1cm4gMCwgb3IgLTEgaWYgYW4gZXJyb3Ig b2NjdXJzCi0gICAgICAgIChhbmQgc2V0ICpUQVJHRVRfRVJSTk8pLiAgKi8KLSAgICAgdmlydHVh bCBpbnQgZmlsZWlvX2Nsb3NlIChpbnQgZmQsIGZpbGVpb19lcnJvciAqdGFyZ2V0X2Vycm5vKTsK LUBAIC0yMjIwLDYgKzIyMjgsMTQgQEAgZXh0ZXJuIGludCB0YXJnZXRfZmlsZWlvX3ByZWFkIChp bnQgZmQsIGdkYl9ieXRlICpyZWFkX2J1ZiwgaW50IGxlbiwKLSBleHRlcm4gaW50IHRhcmdldF9m aWxlaW9fZnN0YXQgKGludCBmZCwgc3RydWN0IHN0YXQgKnNiLAotIAkJCQlmaWxlaW9fZXJyb3Ig KnRhcmdldF9lcnJubyk7Ci0gCi0rLyogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlIGF0 IEZJTEVOQU1FIG9uIHRoZSB0YXJnZXQgYW5kIHB1dCBpdCBpbgotKyAgIFNCLiAgTG9vayBpbiB0 aGUgZmlsZXN5c3RlbSBhcyBzZWVuIGJ5IElORi4gIElmIElORiBpcyBOVUxMLCB1c2UgdGhlCi0r ICAgZmlsZXN5c3RlbSBzZWVuIGJ5IHRoZSBkZWJ1Z2dlciAoR0RCIG9yLCBmb3IgcmVtb3RlIHRh cmdldHMsIHRoZSByZW1vdGUKLSsgICBzdHViKS4gIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG9yIC0x IGlmIGFuIGVycm9yIG9jY3VycyAoYW5kIHNldAotKyAgICpUQVJHRVRfRVJSTk8pLiAgKi8KLStl eHRlcm4gaW50IHRhcmdldF9maWxlaW9fc3RhdCAoc3RydWN0IGluZmVyaW9yICppbmYsIGNvbnN0 IGNoYXIgKmZpbGVuYW1lLAotKwkJCSAgICAgICBzdHJ1Y3Qgc3RhdCAqc2IsIGZpbGVpb19lcnJv ciAqdGFyZ2V0X2Vycm5vKTsKLSsKLSAvKiBDbG9zZSBGRCBvbiB0aGUgdGFyZ2V0LiAgUmV0dXJu IDAsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycwotICAgIChhbmQgc2V0ICpUQVJHRVRfRVJSTk8p LiAgKi8KLSBleHRlcm4gaW50IHRhcmdldF9maWxlaW9fY2xvc2UgKGludCBmZCwgZmlsZWlvX2Vy cm9yICp0YXJnZXRfZXJybm8pOwotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uv YnVpbGQtaWQtc2Vxbm8uYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnVpbGQtaWQtc2Vxbm8u YwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3Vp dGUvZ2RiLmJhc2UvYnVpbGQtaWQtc2Vxbm8uYwotQEAgLTAsMCArMSwyMiBAQAotKy8qIFRoaXMg dGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCi0rCi0rICAgQ29weXJp Z2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rICAgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKLSsgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQotKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICAgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsg ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKyAgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCi0rICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKwotK2ludAotK21haW4gKHZvaWQpCi0rewot KyAgcmV0dXJuIDA7Ci0rfQotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYnVp bGQtaWQtc2Vxbm8uZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9idWlsZC1pZC1zZXFuby5l eHAKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5iYXNlL2J1aWxkLWlkLXNlcW5vLmV4cAotQEAgLTAsMCArMSwxMzMgQEAKLSsjIFRo aXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCi0rIwotKyMgQ29w eXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rIwotKyMgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSsjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rIyBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rIyBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyMKLSsjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCi0rIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KLSsKLSsjIFNldHVwIGEgLmJ1aWxkLWlkLyBiYXNlZCBkZWJ1 ZyBkaXJlY3RvcnkgY29udGFpbmluZyBtdWx0aXBsZSBlbnRyaWVzCi0rIyBmb3IgdGhlIHNhbWUg YnVpbGQtaWQsIHdpdGggZWFjaCBlbnRyeSBnaXZlbiBhIGRpZmZlcmVudCBzZXF1ZW5jZQotKyMg bnVtYmVyLgotKyMKLSsjIEVuc3VyZSB0aGF0IEdEQiB3aWxsIHNjYW4gb3ZlciBicm9rZW4gc3lt bGlua3MgZm9yIHRoZSBzYW1lIGJ1aWxkLWlkCi0rIyAoYnV0IGRpZmZlcmVudCBzZXF1ZW5jZSBu dW1iZXIpIHRvIGZpbmQgbGF0ZXIgd29ya2luZyBzeW1saW5rcy4KLSsjCi0rIyBUaGlzIHRlc3Qg b25seSBwbGFjZXMgZGVidWcgaW5mb3JtYXRpb24gb24gdGhlIGhvc3QsIHNvIGl0IGlzIGFsd2F5 cwotKyMgbG9jYWwgdG8gR0RCLgotKwotK3JlcXVpcmUgeyFpc19yZW1vdGUgaG9zdH0KLSsKLStz dGFuZGFyZF90ZXN0ZmlsZQotKwotK2lmIHtbYnVpbGRfZXhlY3V0YWJsZSAiZmFpbGVkIHRvIHBy ZXBhcmUiICR0ZXN0ZmlsZSAkc3JjZmlsZV0gPT0gLTF9IHsKLSsgICAgcmV0dXJuIC0xCi0rfQot KwotKyMgU3BsaXQgb3V0IEJJTkZJTEUuZGVidWcuICBSZW1vdmUgZGVidWcgZnJvbSBCSU5GSUxF LgotK2lmIHtbZ2RiX2dudV9zdHJpcF9kZWJ1ZyAkYmluZmlsZV0gIT0gMH0gewotKyAgICByZXR1 cm4gLTEKLSt9Ci0rCi0rIyBHZXQgdGhlICcuYnVpbGQtaWQveHgveHh4Li4ueHh4JyBwYXJ0IG9m IHRoZSBmaWxlbmFtZS4KLStzZXQgYnVpbGRfaWRfZmlsZW5hbWUgW2J1aWxkX2lkX2RlYnVnX2Zp bGVuYW1lX2dldCAkYmluZmlsZV0KLSsKLSsjIEhpZGUgKHJlbmFtZSkgQklORklMRS5kZWJ1Zywg dGhpcyBzaG91bGQgZW5zdXJlIEdEQiBjYW4ndCBmaW5kIGl0Ci0rIyBkaXJlY3RseSBidXQgbmVl ZHMgdG8gbG9vayBmb3IgdGhlIGJ1aWxkLWlkIGJhc2VkIGZpbGUgaW4gdGhlIGRlYnVnCi0rIyBk aXJlY3RvcnkuCi0rc2V0IGhpZGRlbl9kZWJ1Z2luZm8gW3N0YW5kYXJkX291dHB1dF9maWxlICJo aWRkZW5fJHRlc3RmaWxlLmRlYnVnIl0KLStyZW1vdGVfZXhlYyBidWlsZCAibXYgJHtiaW5maWxl fS5kZWJ1ZyAkaGlkZGVuX2RlYnVnaW5mbyIKLSsKLSsjIEEgZmlsZW5hbWUgdGhhdCBkb2Vzbid0 IGV4aXN0LiAgU29tZSBzeW1saW5rcyB3aWxsIHBvaW50IGF0IHRoaXMKLSsjIGZpbGUuCi0rc2V0 IG1pc3NpbmdfZGVidWdpbmZvIFtob3N0X3N0YW5kYXJkX291dHB1dF9maWxlICJtaXNzaW5nX2Rl YnVnaW5mbyJdCi0rCi0rIyBDcmVhdGUgdGhlIGRlYnVnIGRpcmVjdG9yeSwgYW5kIHRoZSAuYnVp bGQtaWQgZGlyZWN0b3J5IHN0cnVjdHVyZQotKyMgd2l0aGluIGl0LgotK3NldCBkZWJ1Z2RpciBb aG9zdF9zdGFuZGFyZF9vdXRwdXRfZmlsZSAiZGVidWciXQotK3JlbW90ZV9leGVjIGhvc3QgIm1r ZGlyIC1wICRkZWJ1Z2Rpci9bZmlsZSBkaXJuYW1lICRidWlsZF9pZF9maWxlbmFtZV0iCi0rCi0r c2V0IGhvc3RfaGlkZGVuX2RlYnVnaW5mbyBbZ2RiX3JlbW90ZV9kb3dubG9hZCBob3N0ICRoaWRk ZW5fZGVidWdpbmZvXQotK3JlbW90ZV9leGVjIGhvc3QgImxuIC1mcyAkaG9zdF9oaWRkZW5fZGVi dWdpbmZvICRkZWJ1Z2Rpci8kYnVpbGRfaWRfZmlsZW5hbWUiCi0rCi0rIyBTdGFydCBHREIgYW5k IGxvYWQgZ2xvYmFsIEJJTkZJTEUuICBJZiBGSU5EX0RFQlVHSU5GTyBpcyB0cnVlIHRoZW4KLSsj IHdlIGV4cGVjdCBHREIgdG8gZmluZCB0aGUgZGVidWcgaW5mb3JtYXRpb24gbWF0Y2hpbmcgQklO RklMRSwKLSsjIG90aGVyd2lzZSwgd2UgZXhwZWN0IEdEQiBub3QgdG8gZmluZCB0aGUgZGVidWcg aW5mb3JtYXRpb24uCi0rcHJvYyBsb2FkX2JpbmZpbGVfY2hlY2tfZGVidWdfaXNfZm91bmQgeyBm aW5kX2RlYnVnaW5mbyB0ZXN0bmFtZSB9IHsKLSsgICAgd2l0aF90ZXN0X3ByZWZpeCAiJHRlc3Ru YW1lIiB7Ci0rCWNsZWFuX3Jlc3RhcnQKLSsKLSsJZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgZGVi dWctZmlsZS1kaXJlY3RvcnkgJDo6ZGVidWdkaXIiIFwKLSsJICAgICJzZXQgZGVidWctZmlsZS1k aXJlY3RvcnkiCi0rCi0rCWdkYl9maWxlX2NtZCAkOjpiaW5maWxlCi0rCi0rCWlmIHsgJGZpbmRf ZGVidWdpbmZvIH0gewotKwkgICAgZ2RiX2Fzc2VydCB7IFtyZWdleHAgW3N0cmluZ190b19yZWdl eHAgXAotKwkJCQkgICAgICAiUmVhZGluZyBzeW1ib2xzIGZyb20gJDo6aGlkZGVuX2RlYnVnaW5m by4uLiJdIFwKLSsJCQkgICAgICAkOjpnZGJfZmlsZV9jbWRfbXNnXSB9IFwKLSsJCSJkZWJ1Z2lu Zm8gd2FzIHJlYWQgdmlhIGJ1aWxkLWlkIgotKwl9IGVsc2UgewotKwkgICAgZ2RiX2Fzc2VydCB7 IFtyZWdleHAgIlxcKE5vIGRlYnVnZ2luZyBzeW1ib2xzIGZvdW5kIGluIFxbXlxyXG5cXSsvJDo6 dGVzdGZpbGVcXCkiIFwKLSsJCQkgICAgICAkOjpnZGJfZmlsZV9jbWRfbXNnXSB9IFwKLSsJICAg IH0KLSsgICAgfQotK30KLSsKLSsjIFJldHVybiBhIGNvcHkgb2YgRklMRU5BTUUsIHdoaWNoIHNo b3VsZCBlbmQgJy5kZWJ1ZycsIHdpdGggTlVNQkVSCi0rIyBhZGRlZCwgZS5nLiBhZGRfc2Vxbm8g MSAiZm9vLmRlYnVnIiAtLT4gImZvby4xLmRlYnVnIi4KLStwcm9jIGFkZF9zZXFubyB7IG51bWJl ciBmaWxlbmFtZSB9IHsKLSsgICAgcmV0dXJuIFtyZWdzdWIgIlwuZGVidWdcJCIgJGZpbGVuYW1l ICIuJHtudW1iZXJ9LmRlYnVnIl0KLSt9Ci0rCi0rbG9hZF9iaW5maWxlX2NoZWNrX2RlYnVnX2lz X2ZvdW5kIHRydWUgXAotKyAgICAiZmluZCBkZWJ1Z2luZm8gd2l0aCBhIHNpbmdsZSBidWlsZC1p ZCBmaWxlIgotKwotK3JlbW90ZV9leGVjIGhvc3QgImxuIC1mcyAkaG9zdF9oaWRkZW5fZGVidWdp bmZvIFwKLSsJCQkkZGVidWdkaXIvW2FkZF9zZXFubyAxICRidWlsZF9pZF9maWxlbmFtZV0iCi0r cmVtb3RlX2V4ZWMgaG9zdCAibG4gLWZzICRob3N0X2hpZGRlbl9kZWJ1Z2luZm8gXAotKwkJCSRk ZWJ1Z2Rpci9bYWRkX3NlcW5vIDIgJGJ1aWxkX2lkX2ZpbGVuYW1lXSIKLStyZW1vdGVfZXhlYyBo b3N0ICJsbiAtZnMgJGhvc3RfaGlkZGVuX2RlYnVnaW5mbyBcCi0rCQkJJGRlYnVnZGlyL1thZGRf c2Vxbm8gMyAkYnVpbGRfaWRfZmlsZW5hbWVdIgotKwotK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1 Z19pc19mb3VuZCB0cnVlIFwKLSsgICAgImZpbmQgZGVidWdpbmZvIHdpdGggNCBidWlsZC1pZCBm aWxlcyIKLSsKLStyZW1vdGVfZXhlYyBob3N0ICJsbiAtZnMgJG1pc3NpbmdfZGVidWdpbmZvICRk ZWJ1Z2Rpci8kYnVpbGRfaWRfZmlsZW5hbWUiCi0rCi0rbG9hZF9iaW5maWxlX2NoZWNrX2RlYnVn X2lzX2ZvdW5kIHRydWUgXAotKyAgICAiZmluZCBkZWJ1Z2luZm8sIGZpcnN0IGJ1aWxkLWlkIGZp bGUgaXMgYmFkIgotKwotK3JlbW90ZV9leGVjIGhvc3QgImxuIC1mcyAkbWlzc2luZ19kZWJ1Z2lu Zm8gXAotKwkJCSRkZWJ1Z2Rpci9bYWRkX3NlcW5vIDEgJGJ1aWxkX2lkX2ZpbGVuYW1lXSIKLSty ZW1vdGVfZXhlYyBob3N0ICJsbiAtZnMgJG1pc3NpbmdfZGVidWdpbmZvIFwKLSsJCQkkZGVidWdk aXIvW2FkZF9zZXFubyAzICRidWlsZF9pZF9maWxlbmFtZV0iCi0rCi0rbG9hZF9iaW5maWxlX2No ZWNrX2RlYnVnX2lzX2ZvdW5kIHRydWUgIFwKLSsgICAgImZpbmQgZGVidWdpbmZvLCBmaXJzdCAy IGJ1aWxkLWlkIGZpbGVzIGFyZSBiYWQiCi0rCi0rcmVtb3RlX2V4ZWMgaG9zdCAibG4gLWZzICRt aXNzaW5nX2RlYnVnaW5mbyBcCi0rCQkJJGRlYnVnZGlyL1thZGRfc2Vxbm8gMiAkYnVpbGRfaWRf ZmlsZW5hbWVdIgotKwotK2xvYWRfYmluZmlsZV9jaGVja19kZWJ1Z19pc19mb3VuZCBmYWxzZSAg XAotKyAgICAiY2Fubm90IGZpbmQgZGVidWdpbmZvLCBhbGwgYnVpbGQtaWQgZmlsZXMgYXJlIGJh ZCIKLSsKLStyZW1vdGVfZXhlYyBob3N0ICJsbiAtZnMgJGhvc3RfaGlkZGVuX2RlYnVnaW5mbyBc Ci0rCQkJJGRlYnVnZGlyL1thZGRfc2Vxbm8gMyAkYnVpbGRfaWRfZmlsZW5hbWVdIgotKwotK2xv YWRfYmluZmlsZV9jaGVja19kZWJ1Z19pc19mb3VuZCB0cnVlICBcCi0rICAgICJmaW5kIGRlYnVn aW5mbywgbGFzdCBidWlsZC1pZCBmaWxlIGlzIGdvb2QiCi0rCi0rcmVtb3RlX2V4ZWMgaG9zdCAi cm0gLWYgJGRlYnVnZGlyL1thZGRfc2Vxbm8gMSAkYnVpbGRfaWRfZmlsZW5hbWVdIgotKwotK2xv YWRfYmluZmlsZV9jaGVja19kZWJ1Z19pc19mb3VuZCBmYWxzZSAgXAotKyAgICAiY2Fubm90IGZp bmQgZGVidWdpbmZvLCBmaWxlIHdpdGggc2Vxbm8gMSBpcyBtaXNzaW5nIgotZGlmZiAtLWdpdCBh L2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvY29yZWZpbGUtYnVpbGRpZC5leHAgYi9nZGIvdGVzdHN1 aXRlL2dkYi5iYXNlL2NvcmVmaWxlLWJ1aWxkaWQuZXhwCi0tLS0gYS9nZGIvdGVzdHN1aXRlL2dk Yi5iYXNlL2NvcmVmaWxlLWJ1aWxkaWQuZXhwCi0rKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNl L2NvcmVmaWxlLWJ1aWxkaWQuZXhwCi1AQCAtMTcyLDExICsxNzIsOSBAQCBwcm9jIGxvY2F0ZV9l eGVjX2Zyb21fY29yZV9idWlsZF9pZCB7Y29yZWZpbGUgYnVpbGRpZCBzdWZmaXggXAotIAkibWtk aXIgLXAgW2ZpbGUgam9pbiAkZGVidWdkaXIgW2ZpbGUgZGlybmFtZSAkYnVpbGRpZF1dIgotIAot ICAgICBzZXQgZmlsZXNfbGlzdCB7fQotKyAgICBsYXBwZW5kIGZpbGVzX2xpc3QgJGJpbmZpbGUg JGJ1aWxkaWQKLSAgICAgaWYgeyRzZXBkZWJ1Z30gewotLQlsYXBwZW5kIGZpbGVzX2xpc3QgIiRi aW5maWxlLnN0cmlwcGVkIiAkYnVpbGRpZAotIAlsYXBwZW5kIGZpbGVzX2xpc3QgIiRiaW5maWxl LmRlYnVnIiAiJGJ1aWxkaWQuZGVidWciCi0tICAgIH0gZWxzZSB7Ci0tCWxhcHBlbmQgZmlsZXNf bGlzdCAkYmluZmlsZSAkYnVpbGRpZAotICAgICB9Ci0gICAgIGlmIHskc2hhcmVkfSB7Ci0gCWds b2JhbCBzaGFyZWRpcgotQEAgLTIwMCwxMiArMTk4LDcgQEAgcHJvYyBsb2NhdGVfZXhlY19mcm9t X2NvcmVfYnVpbGRfaWQge2NvcmVmaWxlIGJ1aWxkaWQgc3VmZml4IFwKLSAgICAgZ2RiX3Rlc3Qg ImNvcmUtZmlsZSAkY29yZWZpbGUiICJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCAuKiIgXAotIAki bG9hZCBjb3JlIGZpbGUiCi0gICAgIGlmIHskc3ltbGlua30gewotLQlpZiB7JHNlcGRlYnVnfSB7 Ci0tCSAgICBzZXQgZXhwZWN0ZWRfZmlsZSBbZmlsZSBqb2luICRidWlsZGRpciBcCi0tCQkJCSAg IFtmaWxlIHRhaWwgIiRiaW5maWxlLnN0cmlwcGVkIl1dCi0tCX0gZWxzZSB7Ci0tCSAgICBzZXQg ZXhwZWN0ZWRfZmlsZSBbZmlsZSBqb2luICRidWlsZGRpciBbZmlsZSB0YWlsICRiaW5maWxlXV0K LS0JfQotKwlzZXQgZXhwZWN0ZWRfZmlsZSBbZmlsZSBqb2luICRidWlsZGRpciBbZmlsZSB0YWls ICRiaW5maWxlXV0KLSAgICAgfSBlbHNlIHsKLSAJc2V0IGV4cGVjdGVkX2ZpbGUgJGJ1aWxkaWQK LSAgICAgfQotQEAgLTI0NSwxNSArMjM4LDEyIEBAIHByb2MgZG9fY29yZWZpbGVfYnVpbGRpZF90 ZXN0cyB7YXJnc30gewotIAotICAgICBpZiB7JHNlcGRlYnVnfSB7Ci0gCSMgU3RyaXAgZGVidWdp bmZvIGludG8gaXRzIG93biBmaWxlLgotLQlpZiB7W2dkYl9nbnVfc3RyaXBfZGVidWcgW3N0YW5k YXJkX291dHB1dF9maWxlICRwcm9ncmFtX3RvX3J1bl1dIFwKLS0JCSE9IDB9IHsKLSsJaWYge1tn ZGJfZ251X3N0cmlwX2RlYnVnIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAkcHJvZ3JhbV90b19ydW5d IFwKLSsJCSBuby1kZWJ1Z2xpbmtdICE9IDB9IHsKLSAJICAgIHVudGVzdGVkICJjb3VsZCBub3Qg c3RyaXAgZXhlY3V0YWJsZSAgZm9yIFtqb2luICRzdWZmaXggXCBdIgotIAkgICAgcmV0dXJuCi0g CX0KLSAKLS0JIyBSdW4gdGhlIHN0cmlwcGVkIHByb2dyYW0gaW5zdGVhZCBvZiB0aGUgb3JpZ2lu YWwuCi0tCXNldCBwcm9ncmFtX3RvX3J1biBbZmlsZSBqb2luICRidWlsZGRpciBcCi0tCQkJCVtm aWxlIHRhaWwgIiRiaW5maWxlLnN0cmlwcGVkIl1dCi0gCWxhcHBlbmQgc3VmZml4ICJzZXBkZWJ1 ZyIKLSAgICAgfQotIAotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvY29yZWZp bGUuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9jb3JlZmlsZS5leHAKLS0tLSBhL2dkYi90 ZXN0c3VpdGUvZ2RiLmJhc2UvY29yZWZpbGUuZXhwCi0rKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5i YXNlL2NvcmVmaWxlLmV4cAotQEAgLTE5OSw2ICsxOTksNDUgQEAgZ2RiX3Rlc3QgInVwIiAiI1xb MC05XF0qICooXFswLTl4YS1mSCdcXSogaW4pPyAuKiBcXCguKlxcKS4qIiAidXAgKHJlaW5pdCki Ci0gCi0gZ2RiX3Rlc3QgImNvcmUiICJObyBjb3JlIGZpbGUgbm93LiIKLSAKLSsjIFRlbXBvcmFy aWx5IG1vdmUgY29yZW1tYXAuZGF0YSBvdXQgb2YgdGhlIHdheSBhbmQgcmVsb2FkIHRoZSBjb3Jl Ci0rIyBmaWxlLiAgV2Ugc2hvdWxkIHN0aWxsIGJlIGFibGUgdG8gcmVhZCBidWYyIGFzIHRoZSBj b250ZW50cyBvZiB0aGlzCi0rIyBhcmUgd3JpdHRlbiBpbnRvIHRoZSBjb3JlIGZpbGUuICBJbiBj b250cmFzdCBidWYycm8gc2hvdWxkIG5vIGxvbmdlcgotKyMgYmUgcmVhZGFibGUgYXMgdGhlIGNv bnRlbnRzIG9mIHRoaXMgcmVnaW9uIGFyZSBub3Qgd2l0aGluIHRoZSBjb3JlCi0rIyBmaWxlLCBH REIgcmVsaWVzIG9uIHJlYWRpbmcgdGhpcyBmcm9tIHRoZSBjb3JlbW1hcC5kYXRhIGZpbGUsIHdo aWNoCi0rIyBjYW4gbm8gbG9uZ2VyIGJlIGZvdW5kLgotK3NldCBjb3JlbW1hcF9kYXRhX2ZpbGVu YW1lIFwKLSsgICAgW3N0YW5kYXJkX291dHB1dF9maWxlIGNvcmVkaXIuW2dldHBpZF0vY29yZW1t YXAuZGF0YV0KLStzZXQgY29yZW1tYXBfZGF0YV9iYWNrdXBfZmlsZW5hbWUgXAotKyAgICBbc3Rh bmRhcmRfb3V0cHV0X2ZpbGUgY29yZWRpci5bZ2V0cGlkXS9jb3JlbW1hcC5kYXRhLmJhY2t1cF0K LStyZW1vdGVfZXhlYyBob3N0ICJtdiAke2NvcmVtbWFwX2RhdGFfZmlsZW5hbWV9IFwKLSsJCSAg JHtjb3JlbW1hcF9kYXRhX2JhY2t1cF9maWxlbmFtZX0iCi0rCi0rY2xlYW5fcmVzdGFydCAkYmlu ZmlsZQotKwotKyMgTG9hZCB0aGUgY29yZSBmaWxlIGFuZCBjaGVjayB3ZSBnZXQgYSB3YXJuaW5n IGFib3V0IHRoZQotKyMgY29yZW1tYXAuZGF0YSBmaWxlIGJlaW5nIG1pc3NpbmcuCi0rZ2RiX3Rl c3RfbXVsdGlwbGUgImNvcmUtZmlsZSAkY29yZWZpbGUiICJ3YXJuIGFib3V0IGNvcmVtbWFwLmRh dGEgbWlzc2luZyIgewotKyAgICAtcmUgLXdyYXAgIndhcm5pbmc6IENhbid0IG9wZW4gZmlsZSBc W15cclxuXF0rL2NvcmVtbWFwLmRhdGEgZHVyaW5nIGZpbGUtYmFja2VkIG1hcHBpbmcgbm90ZSBw cm9jZXNzaW5nXHJcbi4qIiB7Ci0rCXBhc3MgJGdkYl90ZXN0X25hbWUKLSsgICAgfQotK30KLSsK LSsjIFRoaXMgeGZhaWwgd2FzIGp1c3QgY29waWVkIGZyb20gZWFybGllciBpbiB0aGUgc2NyaXB0 IHdoZXJlIHdlIGFsc28KLSsjIHJlYWQgZnJvbSBidWYyLgotK3NldHVwX3hmYWlsICIqLSotc3Vu b3MqIiAiKi0qLWFpeCoiCi0rZ2RiX3Rlc3QgIngvOGJkIGJ1ZjIiIFwKLSsgICAgIi4qOi4qMC4q MS4qMi4qMy4qNC4qNS4qNi4qNy4qIiBcCi0rICAgICJhY2Nlc3NpbmcgbW1hcHBlZCBkYXRhIGlu IGNvcmUgZmlsZSB3aXRoIGNvcmVtbWFwLmRhdGEgcmVtb3ZlZCIKLSsKLStnZGJfdGVzdCAieC84 YmQgYnVmMnJvIiBcCi0rICAgICIkaGV4XFteOlxdKjpcXHMrQ2Fubm90IGFjY2VzcyBtZW1vcnkg YXQgYWRkcmVzcyAkaGV4IiBcCi0rICAgICJhY2Nlc3NpbmcgcmVhZC1vbmx5IG1tYXBwZWQgZGF0 YSBpbiBjb3JlIGZpbGUgd2l0aCBjb3JlbW1hcC5kYXRhIHJlbW92ZWQiCi0rCi0rIyBSZXN0b3Jl IHRoZSBjb3JlbW1hcC5kYXRhIGZpbGUgc28gbGF0ZXIgdGVzdHMgZG9uJ3QgZ2l2ZSB3YXJuaW5n cwotKyMgd2hlbiB0aGUgY29yZSBmaWxlIGlzIHJlbG9hZGVkLgotK3JlbW90ZV9leGVjIGhvc3Qg Im12ICR7Y29yZW1tYXBfZGF0YV9iYWNrdXBfZmlsZW5hbWV9IFwKLSsJCSAgJHtjb3JlbW1hcF9k YXRhX2ZpbGVuYW1lfSIKLSsKLSAjIFRlc3QgdGhhdCB3ZSBjYW4gdW5sb2FkIHRoZSBjb3JlIHdp dGggdGhlICJkZXRhY2giIGNvbW1hbmQuCi0gCi0gcHJvY193aXRoX3ByZWZpeCBjb3JlZmlsZV9k ZXRhY2gge30gewotZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItc2Vh cmNoLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc29saWItc2VhcmNoLmV4cAotLS0tIGEv Z2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zb2xpYi1zZWFyY2guZXhwCi0rKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5iYXNlL3NvbGliLXNlYXJjaC5leHAKLUBAIC00Myw3ICs0MywxMSBAQCBzZXQgcmln aHRfYmluZmlsZTJfbGliIFwKLSBzZXQgYmluZmlsZTFfbGliIFtzdGFuZGFyZF9vdXRwdXRfZmls ZSAke2xpYm5hbWUxfS5zb10KLSBzZXQgYmluZmlsZTJfbGliIFtzdGFuZGFyZF9vdXRwdXRfZmls ZSAke2xpYm5hbWUyfS5zb10KLSAKLS1zZXQgbGliX2ZsYWdzIFtsaXN0IGRlYnVnIGxkZmxhZ3M9 LVdsLC1Cc3ltYm9saWNdCi0rIyBXaGVuIHRoaXMgdGVzdCB3YXMgd3JpdHRlbiwgR0RCJ3MgYWJp bGl0eSB0byB0cmFjayBkb3duIHNoYXJlZAotKyMgbGlicmFyaWVzIGZvciBhIGNvcmUgZmlsZSBi YXNlZCBvbiB0aGUgYnVpbGQtaWQgbXVjaCBwb29yZXIuICBBcyBHREIKLSsjIGhhcyBpbXByb3Zl ZCB3ZSBub3cgbmVlZCB0byBkaXNhYmxlIGJ1aWxkLWlkcyBpbiBvcmRlciBmb3IgdGhpcyB0ZXN0 Ci0rIyB0byBmdW5jdGlvbiBhcyBleHBlY3RlZC4KLStzZXQgbGliX2ZsYWdzIFtsaXN0IGRlYnVn IG5vLWJ1aWxkLWlkIGxkZmxhZ3M9LVdsLC1Cc3ltYm9saWNdCi0gc2V0IHdyb25nX2xpYl9mbGFn cyAiJGxpYl9mbGFncyBhZGRpdGlvbmFsX2ZsYWdzPS1EQVJSQVlfU0laRT0xIgotIHNldCByaWdo dF9saWJfZmxhZ3MgIiRsaWJfZmxhZ3MgYWRkaXRpb25hbF9mbGFncz0tREFSUkFZX1NJWkU9ODE5 MiBhZGRpdGlvbmFsX2ZsYWdzPS1EUklHSFQiCi0gCi1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0 ZS9nZGIuYmFzZS9zeXNyb290LWRlYnVnLWxvb2t1cC5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5i YXNlL3N5c3Jvb3QtZGVidWctbG9va3VwLmV4cAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAv ZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc3lzcm9vdC1kZWJ1Zy1sb29r dXAuZXhwCi1AQCAtMCwwICsxLDE4NCBAQAotKyMgQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCi0rIwotKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSsjIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0r IyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgotKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsjCi0r IyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKLSsjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCi0rIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgotKyMKLSsjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rIyBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSsK LSsjIFRlc3QgR0RCJ3MgYWJpbGl0eSB0byBmaW5kIGRlYnVnIGluZm9ybWF0aW9uIGJ5IGxvb2tp bmcgd2l0aGluIHRoZQotKyMgc3lzcm9vdC4KLSsjCi0rIyBXZSBjb21waWxlIGEgc3RhdGljIGJp bmFyeSAodG8gcmVkdWNlIHdoYXQgd2UgbmVlZCB0byBjb3B5IGludG8gdGhlCi0rIyBzeXNyb290 KSwgc3BsaXQgdGhlIGRlYnVnIGluZm9ybWF0aW9uIGZyb20gdGhlIGJpbmFyeSwgYW5kIHNldHVw IGEKLSsjIHN5c3Jvb3QuCi0rIwotKyMgVGhlIGRlYnVnLWZpbGUtZGlyZWN0b3J5IGlzIHNldCB0 byBqdXN0ICcvZGVidWcnLCBidXQgd2UncmUKLSsjIGV4cGVjdGluZyBHREIgdG8gYWN0dWFsbHkg bG9vayBpbiAnJFNZU1JPT1QvZGVidWcnLgotKyMKLSsjIFRoZXJlJ3MgYSB0ZXN0IGZvciB1c2lu ZyAuYnVpbGQtaWQgYmFzZWQgbG9va3VwLCBhbmQgYSB0ZXN0IGZvcgotKyMgZ251X2RlYnVnbGlu ayBiYXNlZCBsb29rdXAuCi0rCi0rcmVxdWlyZSB7IWlzX3JlbW90ZSBob3N0fQotKwotK3N0YW5k YXJkX3Rlc3RmaWxlIG1haW4uYwotKwotKyMgQ3JlYXRlIGEgY29weSBvZiBCSU5GSUxFLCBzcGxp dCBvdXQgdGhlIGRlYnVnIGluZm9ybWF0aW9uLCBhbmQgdGhlbgotKyMgc2V0dXAgYSBzeXNyb290 LiAgSGlkZSAoYnkgbW92aW5nKSB0aGUgYWN0dWFsIGRlYnVnIGluZm9ybWF0aW9uIGZpbGUKLSsj IGFuZCBjcmVhdGUgYSBzeW1saW5rIHRvIHRoZSBoaWRkZW4gZGVidWcgaW5mb3JtYXRpb24gZnJv bSB3aXRoaW4gdGhlCi0rIyBzeXNyb290LgotKyMKLSsjIFN0YXJ0IEdEQiwgc2V0IHRoZSBzeXNy b290LCBhbmQgdGhlbiBsb2FkIHRoZSBleGVjdXRhYmxlLCBlbnN1cmUgR0RCCi0rIyBmaW5kcyB0 aGUgZGVidWcgaW5mb3JtYXRpb24sIHdoaWNoIG11c3QgaGF2ZSBoYXBwZW5lZCBieSBsb29raW4g aW4KLSsjIHRoZSBzeXNyb290LgotK3Byb2Nfd2l0aF9wcmVmaXggbG9va3VwX3ZpYV9idWlsZF9p ZCB7fSB7Ci0rICAgIHNldCBmaWxlbmFtZSAkezo6YmluZmlsZX1fMQotKyAgICBpZiB7IFtidWls ZF9leGVjdXRhYmxlICJidWlsZCBleGVjIiAke2ZpbGVuYW1lfSAkOjpzcmNmaWxlIFwKLSsJICAg ICAge2FkZGl0aW9uYWxfZmxhZ3M9LXN0YXRpYyBkZWJ1ZyBidWlsZC1pZH1dIH0gewotKwlyZXR1 cm4KLSsgICAgfQotKwotKyAgICAjIFNwbGl0IGRlYnVnIGluZm9ybWF0aW9uIGludG8gYSAuZGVi dWcgZmlsZSwgcmVtb3ZlIGRlYnVnCi0rICAgICMgaW5mb3JtYXRpb24gZnJvbSBGSUxFTkFNRS4g IERvbid0IGFkZCBhIC5nbnVfZGVidWdsaW5rIHRvCi0rICAgICMgRklMRU5BTUUsIHdlIHJlbHkg b24gdGhlIGJ1aWxkLWlkLgotKyAgICBpZiB7W2dkYl9nbnVfc3RyaXBfZGVidWcgJGZpbGVuYW1l IHsgbm8tZGVidWdsaW5rIH1dICE9IDB9IHsKLSsJdW5zdXBwb3J0ZWQgImNhbm5vdCBzcGxpdCBk ZWJ1ZyBpbmZvcm1hdGlvbiBmcm9tIGV4ZWN1dGFibGUiCi0rCXJldHVybgotKyAgICB9Ci0rCi0r ICAgIHNldCBzeXNyb290IFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAic3lzcm9vdDEiXQotKyAgICBz ZXQgZGVidWdfZGlyICIvZGVidWciCi0rCi0rICAgIHNldCBkZWJ1Z19zeW1saW5rIFwKLSsJJHtz eXNyb290fSR7ZGVidWdfZGlyfS9bYnVpbGRfaWRfZGVidWdfZmlsZW5hbWVfZ2V0ICRmaWxlbmFt ZV0KLSsKLSsgICAgc2V0IGJ1aWxkX2lkX2RpciBbZmlsZSBkaXJuYW1lICRkZWJ1Z19zeW1saW5r XQotKwotKyAgICBzZXQgZGVidWdfZmlsZW5hbWUgJHtmaWxlbmFtZX1faGlkZGVuX2RlYnVnCi0r Ci0rICAgIHJlbW90ZV9leGVjIGJ1aWxkICJta2RpciAtcCAkYnVpbGRfaWRfZGlyIgotKyAgICBy ZW1vdGVfZXhlYyBidWlsZCAibXYgJGZpbGVuYW1lLmRlYnVnICRkZWJ1Z19maWxlbmFtZSIKLSsg ICAgcmVtb3RlX2V4ZWMgYnVpbGQgImxuIC1zZiAkZGVidWdfZmlsZW5hbWUgJGRlYnVnX3N5bWxp bmsiCi0rCi0rICAgIGZvcmVhY2hfd2l0aF9wcmVmaXggc3lzcm9vdF9wcmVmaXggeyAiIiAidGFy Z2V0OiIgfSB7Ci0rCWNsZWFuX3Jlc3RhcnQKLSsKLSsJZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQg c3lzcm9vdCAke3N5c3Jvb3RfcHJlZml4fSRzeXNyb290IiAic2V0IHN5c3Jvb3QiCi0rCWdkYl90 ZXN0X25vX291dHB1dCAic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5ICRkZWJ1Z19kaXIiCi0rCi0r CWdkYl9maWxlX2NtZCAkZmlsZW5hbWUKLSsKLSsJZ2RiX2Fzc2VydCB7ICQ6OmdkYl9maWxlX2Nt ZF9kZWJ1Z19pbmZvIGVxICJkZWJ1ZyIgfSBcCi0rCSAgICAiZW5zdXJlIGRlYnVnIGluZm9ybWF0 aW9uIHdhcyBmb3VuZCIKLSsKLSsJaWYgeyAkc3lzcm9vdF9wcmVmaXggZXEgInRhcmdldDoiCi0r CSAgICAgJiYgW3RhcmdldF9pbmZvIGdkYl9wcm90b2NvbF0gPT0gImV4dGVuZGVkLXJlbW90ZSJ9 IHsKLSsJICAgICMgT25seSB3aGVuIHVzaW5nIHRoZSBleHRlbmRlZC1yZW1vdGUgYm9hcmQgd2ls bCB3ZSBoYXZlCi0rCSAgICAjIHN0YXJ0ZWQgYSByZW1vdGUgdGFyZ2V0IGJ5IHRoaXMgcG9pbnQu ICBJbiB0aGlzIGNhc2UgR0RCCi0rCSAgICAjIHdpbGwgc2VlIHRoZSAndGFyZ2V0OicgcHJlZml4 IGFzIHJlbW90ZSwgYW5kIHNvIHRoZQotKwkgICAgIyByZXBvcnRlZCBmaWxlbmFtZSB3aWxsIGlu Y2x1ZGUgdGhlICd0YXJnZXQ6JyBwcmVmaXguCi0rCSAgICAjCi0rCSAgICAjIEluIGFsbCBvdGhl ciBjYXNlcyB3ZSB3aWxsIHN0aWxsIGJlIHVzaW5nIHRoZSBkZWZhdWx0LAotKwkgICAgIyBpbml0 aWFsIHRhcmdldCwgaW4gd2hpY2ggY2FzZSBHREIgY29uc2lkZXJzIHRoZQotKwkgICAgIyAndGFy Z2V0OicgcHJlZml4IHRvIGluZGljYXRlIHRoZSBsb2NhbCBmaWxlc3lzdGVtLgotKwkgICAgc2V0 IGxvb2t1cF9maWxlbmFtZSAkc3lzcm9vdF9wcmVmaXgkZGVidWdfc3ltbGluawotKwl9IGVsc2Ug ewotKwkgICAgc2V0IGxvb2t1cF9maWxlbmFtZSAkZGVidWdfZmlsZW5hbWUKLSsJfQotKwlzZXQg cmUgW3N0cmluZ190b19yZWdleHAgIlJlYWRpbmcgc3ltYm9scyBmcm9tICRsb29rdXBfZmlsZW5h bWUuLi4iXQotKwlnZGJfYXNzZXJ0IHtbcmVnZXhwICRyZSAkOjpnZGJfZmlsZV9jbWRfbXNnXX0g XAotKwkgICAgImRlYnVnIHN5bWJvbHMgcmVhZCBmcm9tIGNvcnJlY3QgZmlsZSIKLSsgICAgfQot K30KLSsKLSsjIENyZWF0ZSBhIGNvcHkgb2YgQklORklMRSwgc3BsaXQgb3V0IHRoZSBkZWJ1ZyBp bmZvcm1hdGlvbiwgYW5kIHRoZW4KLSsjIHNldHVwIGEgc3lzcm9vdC4gIEhpZGUgKGJ5IG1vdmlu ZykgdGhlIGFjdHVhbCBkZWJ1ZyBpbmZvcm1hdGlvbiBmaWxlCi0rIyBhbmQgY3JlYXRlIGEgc3lt bGluayB0byB0aGUgaGlkZGVuIGRlYnVnIGluZm9ybWF0aW9uIGZyb20gd2l0aGluIHRoZQotKyMg c3lzcm9vdC4KLSsjCi0rIyBDb3B5IHRoZSBleGVjdXRhYmxlIGludG8gdGhlIHN5c3Jvb3QgYW5k IHRoZW4gc3RhcnQgR0RCLCBzZXQgdGhlCi0rIyBzeXNyb290LCBhbmQgbG9hZCB0aGUgZXhlY3V0 YWJsZS4gIENoZWNrIHRoYXQgR0RCIGZpbmRzIHRoZSBkZWJ1ZwotKyMgaW5mb3JtYXRpb24sIHdo aWNoIG11c3QgaGF2ZSBoYXBwZW5lZCBieSBsb29raW4gaW4gdGhlIHN5c3Jvb3QuCi0rcHJvY193 aXRoX3ByZWZpeCBsb29rdXBfdmlhX2RlYnVnbGluayB7fSB7Ci0rICAgIHNldCBmaWxlbmFtZSAk ezo6YmluZmlsZX1fMgotKyAgICBpZiB7IFtidWlsZF9leGVjdXRhYmxlICJidWlsZCBleGVjIiAk e2ZpbGVuYW1lfSAkOjpzcmNmaWxlIFwKLSsJICAgICAge2FkZGl0aW9uYWxfZmxhZ3M9LXN0YXRp YyBkZWJ1ZyBuby1idWlsZC1pZH1dIH0gewotKwlyZXR1cm4KLSsgICAgfQotKwotKyAgICAjIFNw bGl0IGRlYnVnIGluZm9ybWF0aW9uIGludG8gYSAuZGVidWcgZmlsZSwgcmVtb3ZlIGRlYnVnCi0r ICAgICMgaW5mb3JtYXRpb24gZnJvbSBGSUxFTkFNRS4KLSsgICAgaWYge1tnZGJfZ251X3N0cmlw X2RlYnVnICRmaWxlbmFtZV0gIT0gMH0gewotKwl1bnN1cHBvcnRlZCAiY2Fubm90IHNwbGl0IGRl YnVnIGluZm9ybWF0aW9uIGZyb20gZXhlY3V0YWJsZSIKLSsJcmV0dXJuCi0rICAgIH0KLSsKLSsg ICAgIyBXZSdyZSBnb2luZyB0byBzZXR1cCB0aGUgc3lzcm9vdCBsaWtlIHRoaXM6Ci0rICAgICMK LSsgICAgIyBzeXNyb290Mi8KLSsgICAgIyAgICBiaW4vCi0rICAgICMgICAgICAkRklMRU5BTUUK LSsgICAgIyAgICBkZWJ1Zy8KLSsgICAgIyAgICAgIGJpbi8KLSsgICAgIyAgICAgICAgJEZJTEVO QU1FLmRlYnVnCi0rICAgICMKLSsgICAgIyBXaGVuIGxvb2tpbmcgdXAgZGVidWcgaW5mb3JtYXRp b24gdmlhIHRoZSBkZWJ1Z2xpbmssIEdEQiB3aWxsCi0rICAgICMgb25seSBzZWFyY2ggaW4gdGhl IHN5c3Jvb3QgaWYgdGhlIG9yaWdpbmFsIG9iamZpbGUgd2FzIGluIHRoZQotKyAgICAjIHN5c3Jv b3QuICBBbmQgR0RCIHdpbGwgcmVzb2x2ZSBzeW1saW5rcywgc28gaWYgdGhlIG9iamZpbGUgaXMK LSsgICAgIyBzeW1saW5rZWQgdG8gb3V0c2lkZSB0aGUgc3lzcm9vdCwgR0RCIHdpbGwgbm90IHNl YXJjaCBpbiB0aGUKLSsgICAgIyBzeXNyb290IGZvciB0aGUgZGVidWcgaW5mb3JtYXRpb24uCi0r ICAgICMKLSsgICAgIyBTbyB3ZSBoYXZlIHRvIGNvcHkgdGhlIGV4ZWN1dGFibGUgaW50byB0aGUg c3lzcm9vdC4KLSsgICAgIwotKyAgICAjIFdlIGFyZSBPSyB0byBzeW1saW5rIHRoZSBkZWJ1ZyBp bmZvcm1hdGlvbiB0byBhIGZpbGUgb3V0c2lkZSB0aGUKLSsgICAgIyBzeXNyb290IHRob3VnaC4K LSsKLSsgICAgc2V0IHN5c3Jvb3QgW3N0YW5kYXJkX291dHB1dF9maWxlICJzeXNyb290MiJdCi0r Ci0rICAgIGZvcmVhY2ggcGF0aCB7IGJpbiBkZWJ1Zy9iaW4gfSB7Ci0rCXJlbW90ZV9leGVjIGJ1 aWxkICJta2RpciAtcCAkc3lzcm9vdC8kcGF0aCIKLSsgICAgfQotKwotKyAgICAjIENvcHkgdGhl IGV4ZWN1dGFibGUgaW50byB0aGUgc3lzcm9vdC4KLSsgICAgc2V0IGZpbGVfYmFzZW5hbWUgW2Zp bGUgdGFpbCAkZmlsZW5hbWVdCi0rICAgIHNldCBleGVjX2luX3N5c3Jvb3QgJHtzeXNyb290fS9i aW4vJHtmaWxlX2Jhc2VuYW1lfQotKyAgICByZW1vdGVfZXhlYyBidWlsZCAiY3AgJGZpbGVuYW1l ICRleGVjX2luX3N5c3Jvb3QiCi0rCi0rICAgICMgUmVuYW1lIHRoZSBkZWJ1ZyBmaWxlIG91dHNp ZGUgb2YgdGhlIHN5c3Jvb3QsIHRoaXMgc2hvdWxkIHN0b3AKLSsgICAgIyBHREIgZmluZGluZyB0 aGlzIGZpbGUgImJ5IGFjY2lkZW50Ii4KLSsgICAgc2V0IGRlYnVnX2ZpbGVuYW1lICR7ZmlsZW5h bWV9X2hpZGRlbl9kZWJ1ZwotKyAgICByZW1vdGVfZXhlYyBidWlsZCAibXYgJGZpbGVuYW1lLmRl YnVnICRkZWJ1Z19maWxlbmFtZSIKLSsKLSsgICAgIyBTeW1saW5rIHRoZSBkZWJ1ZyBpbmZvcm1h dGlvbiBpbnRvIHRoZSBzeXNyb290LgotKyAgICBzZXQgZGVidWdfc3ltbGluayBcCi0rCSR7c3lz cm9vdH0vZGVidWcvYmluLyR7ZmlsZV9iYXNlbmFtZX0uZGVidWcKLSsgICAgcmVtb3RlX2V4ZWMg YnVpbGQgImxuIC1zZiAkZGVidWdfZmlsZW5hbWUgJGRlYnVnX3N5bWxpbmsiCi0rCi0rICAgIGZv cmVhY2hfd2l0aF9wcmVmaXggc3lzcm9vdF9wcmVmaXggeyAiIiAidGFyZ2V0OiIgfSB7Ci0rCSMg UmVzdGFydCBHREIgYW5kIHNldHVwIHRoZSBzeXNyb290IGFuZCBkZWJ1ZyBkaXJlY3RvcnkuCi0r CWNsZWFuX3Jlc3RhcnQKLSsJZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQgc3lzcm9vdCAke3N5c3Jv b3RfcHJlZml4fSRzeXNyb290IiAic2V0IHN5c3Jvb3QiCi0rCWdkYl90ZXN0X25vX291dHB1dCAi c2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5IC9kZWJ1ZyIKLSsKLSsJIyBMb2FkIHRoZSBleGVjdXRh YmxlLCB3ZSBleHBlY3QgR0RCIHRvIGZpbmQgdGhlIGRlYnVnIGluZm9ybWF0aW9uCi0rCSMgaW4g dGhlIHN5c3Jvb3QuCi0rCWdkYl9maWxlX2NtZCAke3N5c3Jvb3RfcHJlZml4fSRleGVjX2luX3N5 c3Jvb3QKLSsKLSsJZ2RiX2Fzc2VydCB7ICQ6OmdkYl9maWxlX2NtZF9kZWJ1Z19pbmZvIGVxICJk ZWJ1ZyIgfSBcCi0rCSAgICAiZW5zdXJlIGRlYnVnIGluZm9ybWF0aW9uIHdhcyBmb3VuZCIKLSsK LSsJc2V0IHJlIFtzdHJpbmdfdG9fcmVnZXhwICJSZWFkaW5nIHN5bWJvbHMgZnJvbSAke3N5c3Jv b3RfcHJlZml4fSRkZWJ1Z19zeW1saW5rLi4uIl0KLSsJZ2RiX2Fzc2VydCB7W3JlZ2V4cCAkcmUg JDo6Z2RiX2ZpbGVfY21kX21zZ119IFwKLSsJICAgICJkZWJ1ZyBzeW1ib2xzIHJlYWQgZnJvbSBj b3JyZWN0IGZpbGUiCi0rICAgIH0KLSt9Ci0rCi0rbG9va3VwX3ZpYV9idWlsZF9pZAotK2xvb2t1 cF92aWFfZGVidWdsaW5rCi1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZv ZC9idWlsZC1pZC1uby1kZWJ1Zy13YXJuaW5nLmV4cCBiL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVn aW5mb2QvYnVpbGQtaWQtbm8tZGVidWctd2FybmluZy5leHAKLS0tLSBhL2dkYi90ZXN0c3VpdGUv Z2RiLmRlYnVnaW5mb2QvYnVpbGQtaWQtbm8tZGVidWctd2FybmluZy5leHAKLSsrKyBiL2dkYi90 ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2QvYnVpbGQtaWQtbm8tZGVidWctd2FybmluZy5leHAKLUBA IC0zMCwxNCArMzAsMTEgQEAgaWYge1tidWlsZF9leGVjdXRhYmxlICJidWlsZCBleGVjdXRhYmxl IiAke3Rlc3RmaWxlfSAke3NyY2ZpbGV9IFwKLSAgICAgcmV0dXJuIC0xCi0gfQotIAotLSMgU3Bs aXQgQklORklMRSBpbnRvIEJJTkZJTEUuc3RyaXBwZWQgYW5kIEJJTkZJTEUuZGVidWcsIHRoZSBm aXJzdCBpcwotLSMgdGhlIGV4ZWN1dGFibGUgd2l0aCB0aGUgZGVidWcgaW5mb3JtYXRpb24gcmVt b3ZlZCwgYW5kIHRoZSBzZWNvbmQgaXMKLS0jIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbi4KLSsjIFNw bGl0IGRlYnVnIGluZm9ybWF0aW9uIGZyb20gQklORklMRSBpbnRvIEJJTkZJTEUuZGVidWcuCi0g IwotLSMgSG93ZXZlciwgYnkgcGFzc2luZyB0aGUgIm5vLWRlYnVnbGluayIgZmxhZyB3ZSBwcmV2 ZW50IHRoaXMgcHJvYwotLSMgZnJvbSBhZGRpbmcgYSAuZ251X2RlYnVnbGluayBzZWN0aW9uIHRv IHRoZSBleGVjdXRhYmxlLiAgQW55IGxvb2t1cAotLSMgb2YgdGhlIGRlYnVnIGluZm9ybWF0aW9u IGJ5IEdEQiB3aWxsIG5lZWQgdG8gYmUgZG9uZSBiYXNlZCBvbiB0aGUKLS0jIGJ1aWxkLWlkLgot KyMgQnkgcGFzc2luZyB0aGUgIm5vLWRlYnVnbGluayIgZmxhZyB3ZSBwcmV2ZW50IHRoaXMgcHJv YyBmcm9tIGFkZGluZwotKyMgYSAuZ251X2RlYnVnbGluayBzZWN0aW9uIHRvIEJJTkZJTEUuICBB bnkgbG9va3VwIG9mIHRoZSBkZWJ1ZwotKyMgaW5mb3JtYXRpb24gYnkgR0RCIHdpbGwgbmVlZCB0 byBiZSBkb25lIGJhc2VkIG9uIHRoZSBidWlsZC1pZC4KLSBpZiB7W2dkYl9nbnVfc3RyaXBfZGVi dWcgJGJpbmZpbGUgbm8tZGVidWdsaW5rXX0gewotICAgICB1bnN1cHBvcnRlZCAiY2Fubm90IHBy b2R1Y2Ugc2VwYXJhdGUgZGVidWcgaW5mbyBmaWxlcyIKLSAgICAgcmV0dXJuIC0xCi1AQCAtNTks MTIgKzU2LDYgQEAgc2V0IGRlYnVnaW5mb2RfZGVidWdkaXIgW3N0YW5kYXJkX291dHB1dF9maWxl ICJkZWJ1ZyJdCi0gcmVtb3RlX2V4ZWMgYnVpbGQgIm1rZGlyICRkZWJ1Z2luZm9kX2RlYnVnZGly IgotIHJlbW90ZV9leGVjIGJ1aWxkICJtdiAkZGVidWdmaWxlICRkZWJ1Z2luZm9kX2RlYnVnZGly IgotIAotLSMgVGhpcyBpcyBCSU5GSUxFIHdpdGggdGhlIGRlYnVnIGluZm9ybWF0aW9uIHJlbW92 ZWQuICBXZSBhcmUgZ29pbmcgdG8KLS0jIHBsYWNlIHRoaXMgaW4gdGhlIEJVSUxEX0lEX0RFQlVH X0ZJTEUgbG9jYXRpb24sIHRoaXMgd291bGQgdXN1YWxseQotLSMgcmVwcmVzZW50IGEgbWlzdGFr ZSBieSB0aGUgdXNlciwgYW5kIHdpbGwgdHJpZ2dlciBhIHdhcm5pbmcgZnJvbQotLSMgR0RCLCB0 aGlzIGlzIHRoZSB3YXJuaW5nIHdlIGFyZSBjaGVja2luZyBmb3IuCi0tc2V0IHN0cmlwcGVkX2Jp bmZpbGUgW3N0YW5kYXJkX291dHB1dF9maWxlICIke2JpbmZpbGV9LnN0cmlwcGVkIl0KLS0KLSAj IENyZWF0ZSB0aGUgLmJ1aWxkLWlkL1BSRUZJWCBkaXJlY3RvcnkgbmFtZSBmcm9tCi0gIyAuYnVp bGQtaWQvUFJFRklYL1NVRkZJWC5kZWJ1ZyBmaWxlbmFtZS4KLSBzZXQgZGVidWdkaXIgW2ZpbGUg ZGlybmFtZSAke2J1aWxkX2lkX2RlYnVnX2ZpbGV9XQotQEAgLTc2LDcgKzY3LDcgQEAgcmVtb3Rl X2V4ZWMgYnVpbGQgIm1rZGlyIC1wICRkZWJ1Z2RpciIKLSAjIGluZm9ybWF0aW9uLCB3aGljaCB3 aWxsIHBvaW50IGJhY2sgYXQgdGhpcyBmaWxlLCB3aGljaCBhbHNvIGRvZXNuJ3QKLSAjIGhhdmUg ZGVidWcgaW5mb3JtYXRpb24sIHdoaWNoIGNvdWxkIGNhdXNlIGEgbG9vcC4gIEJ1dCBHREIgd2ls bCBzcG90Ci0gIyB0aGlzIGFuZCBnaXZlIGEgd2FybmluZy4KLS1yZW1vdGVfZXhlYyBidWlsZCAi bXYgJHtzdHJpcHBlZF9iaW5maWxlfSAke2J1aWxkX2lkX2RlYnVnX2ZpbGV9IgotK3JlbW90ZV9l eGVjIGJ1aWxkICJtdiAke2JpbmZpbGV9ICR7YnVpbGRfaWRfZGVidWdfZmlsZX0iCi0gCi0gIyBO b3cgc3RhcnQgR0RCLgotIGNsZWFuX3Jlc3RhcnQKLWRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRl L2dkYi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1hcHBlZC1maWxlLTEuYyBiL2dkYi90ZXN0c3VpdGUv Z2RiLmRlYnVnaW5mb2QvY29yZWZpbGUtbWFwcGVkLWZpbGUtMS5jCi1uZXcgZmlsZSBtb2RlIDEw MDY0NAotLS0tIC9kZXYvbnVsbAotKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9j b3JlZmlsZS1tYXBwZWQtZmlsZS0xLmMKLUBAIC0wLDAgKzEsMjQgQEAKLSsvKiBDb3B5cmlnaHQg MjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLSsgICBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQot KyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsgICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgotKwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKLSsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0rCi0rLyogVGhpcyBpcyBpbiB0aGUgc2hhcmVkIGxp YnJhcnkuICAqLwotK2V4dGVybiBpbnQgZm9vICh2b2lkKTsKLSsKLStpbnQKLSttYWluICh2b2lk KQotK3sKLSsgIGludCByZXMgPSBmb28gKCk7Ci0rICByZXR1cm4gcmVzOwotK30KLWRpZmYgLS1n aXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1hcHBlZC1maWxlLTIu YyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2QvY29yZWZpbGUtbWFwcGVkLWZpbGUtMi5j Ci1uZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0tIC9kZXYvbnVsbAotKysrIGIvZ2RiL3Rlc3RzdWl0 ZS9nZGIuZGVidWdpbmZvZC9jb3JlZmlsZS1tYXBwZWQtZmlsZS0yLmMKLUBAIC0wLDAgKzEsMjIg QEAKLSsvKiBDb3B5cmlnaHQgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsK LSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsgICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyAgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Ci0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UKLSsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0rCi0rdm9sYXRpbGUg aW50ICpsaWJyYXJ5X3B0ciA9IChpbnQgKikgUE9JTlRFUl9WQUxVRTsKLSsKLStpbnQKLStmb28g KHZvaWQpCi0rewotKyAgcmV0dXJuICpsaWJyYXJ5X3B0cjsKLSt9Ci1kaWZmIC0tZ2l0IGEvZ2Ri L3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9jb3JlZmlsZS1tYXBwZWQtZmlsZS0zLmMgYi9nZGIv dGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1hcHBlZC1maWxlLTMuYwotbmV3IGZp bGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmRl YnVnaW5mb2QvY29yZWZpbGUtbWFwcGVkLWZpbGUtMy5jCi1AQCAtMCwwICsxLDQ1IEBACi0rLyog Q29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rICAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKLSsgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKLSsgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwot KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCi0rICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKwotKyNpbmNsdWRlIDxhc3NlcnQu aD4KLSsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSsjaW5jbHVkZSA8ZmNudGwuaD4KLSsjaW5jbHVk ZSA8c3lzL3R5cGVzLmg+Ci0rI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0rI2luY2x1ZGUgPHVuaXN0 ZC5oPgotKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgotKwotK3ZvbGF0aWxlIHZvaWQqIGxpYnJhcnlf YmFzZV9hZGRyZXNzID0gMDsKLSt2b2xhdGlsZSBpbnQgKnB0ciA9IDA7Ci0rCi0raW50Ci0rbWFp biAoKQotK3sKLSsgIHN0cnVjdCBzdGF0IGJ1ZjsKLSsgIGludCByZXM7Ci0rCi0rICBpbnQgZmQg PSBvcGVuIChTSExJQl9GSUxFTkFNRSwgT19SRE9OTFkpOwotKyAgYXNzZXJ0IChmZCAhPSAtMSk7 Ci0rCi0rICByZXMgPSBmc3RhdCAoZmQsICZidWYpOwotKyAgYXNzZXJ0IChyZXMgPT0gMCk7Ci0r Ci0rICBsaWJyYXJ5X2Jhc2VfYWRkcmVzcwotKyAgICA9IG1tYXAgKE5VTEwsIGJ1Zi5zdF9zaXpl LCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7Ci0rCi0rICByZXMgPSAqcHRyOwkvKiBV bmRlZmluZWQgYmVoYXZpb3VyIGhlcmUuICAqLwotKwotKyAgcmV0dXJuIDA7Ci0rfQotZGlmZiAt LWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2QvY29yZWZpbGUtbWFwcGVkLWZpbGUu ZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9jb3JlZmlsZS1tYXBwZWQtZmlsZS5l eHAKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nZGIvdGVzdHN1 aXRlL2dkYi5kZWJ1Z2luZm9kL2NvcmVmaWxlLW1hcHBlZC1maWxlLmV4cAotQEAgLTAsMCArMSwz ODAgQEAKLSsjIENvcHlyaWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgot KyMKLSsjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyMgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKLSsjIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0rIwotKyMgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rIyBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot KyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQotKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K LSsjCi0rIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQotKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKwotKyMgVGhpcyB0ZXN0IGNo ZWNrcyBHREIncyBhYmlsaXR5IHRvIHVzZSBidWlsZC1pZHMgd2hlbiBzZXR0aW5nIHVwIGZpbGUg YmFja2VkCi0rIyBtYXBwaW5ncyBhcyBwYXJ0IG9mIHJlYWRpbmcgYSBjb3JlLWZpbGUuCi0rIwot KyMgQSBjb3JlLWZpbGUgY29udGFpbnMgYSBsaXN0IG9mIHRoZSBmaWxlcyB0aGF0IHdlcmUgbWFw cGVkIGludG8gdGhlIHByb2Nlc3MKLSsjIGF0IHRoZSB0aW1lIG9mIHRoZSBjb3JlLWZpbGUgY3Jl YXRpb24uICBJZiB0aGUgZmlsZSB3YXMgbWFwcGVkIHJlYWQtb25seQotKyMgdGhlbiB0aGUgZmls ZSBjb250ZW50cyB3aWxsIG5vdCBiZSBwcmVzZW50IGluIHRoZSBjb3JlLWZpbGUsIGJ1dCBpbnN0 ZWFkIEdEQgotKyMgaXMgZXhwZWN0ZWQgdG8gb3BlbiB0aGUgbWFwcGVkIGZpbGUgYW5kIHJlYWQg dGhlIGNvbnRlbnRzIGZyb20gdGhlcmUgaWYKLSsjIG5lZWRlZC4gIEFuZCB0aGlzIGlzIHdoYXQg R0RCIGRvZXMuCi0rIwotKyMgR0RCICh2aWEgdGhlIEJGRCBsaWJyYXJ5KSB3aWxsIGFsc28gc3Bv dCBpZiBhIG1hcHBlZCBsb29rcyBsaWtlIGEgdmFsaWQgRUxGCi0rIyBhbmQgY29udGFpbnMgYSBi dWlsZC1pZCwgdGhpcyBidWlsZC1pZCBpcyBwYXNzZWQgYmFjayB0byBHREIgc28gdGhhdCBHREIg Y2FuCi0rIyB2YWxpZGF0ZSB0aGUgb24tZGlzayBmaWxlIGl0IGZpbmRzIG1hdGNoZXMgdGhlIGZp bGUgdGhhdCB3YXMgbWFwcGVkIHdoZW4gdGhlCi0rIyBjb3JlLWZpbGUgd2FzIGNyZWF0ZWQuCi0r IwotKyMgSW4gYWRkaXRpb24sIGlmIHRoZSBvbi1kaXNrIGZpbGUgaXMgZm91bmQgdG8gaGF2ZSBh IG5vbi1tYXRjaGluZyBidWlsZC1pZAotKyMgdGhlbiBHREIgY2FuIHVzZSBkZWJ1Z2luZm9kIHRv ICh0cnkpIGFuZCBkb3dubG9hZCBhIHN1aXRhYmxlIGZpbGUuCi0rIwotKyMgVGhpcyB0ZXN0IGlz IGFib3V0IGNoZWNraW5nIHRoYXQgdGhpcyBmaWxlIGJhY2tlZCBtYXBwaW5nIG1lY2hhbmlzbSB3 b3JrcwotKyMgY29ycmVjdGx5OyB0aGF0IEdEQiB3aWxsIHNwb3Qgd2hlbiB0aGUgYnVpbGQtaWRz IGZhaWwgdG8gbWF0Y2ggYW5kIHdpbGwKLSsjIHJlZnVzZSB0byBsb2FkIGFuIGluY29ycmVjdCBm aWxlLiAgQWRkaXRpb25hbGx5IHdlIGNoZWNrIHRoYXQgdGhlIGNvcnJlY3QKLSsjIGZpbGUgY2Fu IGJlIGRvd25sb2FkZWQgZnJvbSBkZWJ1Z2luZm9kLgotKyMKLSsjIFRoZSB0ZXN0IGlzIHJhdGhl ciBjb250cml2ZWQgdGhvdWdoLiAgSW5zdGVhZCBvZiByZWx5aW5nIG9uIGhhdmluZyBhIHNoYXJl ZAotKyMgbGlicmFyeSBtYXBwZWQgYXQgdGhlIHRpbWUgb2YgY3Jhc2ggd2UgbW1hcCBhIHNoYXJl ZCBsaWJyYXJ5IGludG8gdGhlCi0rIyBwcm9jZXNzIGFuZCB0aGVuIGNoZWNrIHRoaXMgbWFwcGlu ZyB3aXRoaW4gdGhlIHRlc3QuCi0rIwotKyMgVGhlIHByb2JsZW0gd2l0aCB1c2luZyBhIG5vcm1h bCBzaGFyZWQgbGlicmFyeSBsb2FkIGZvciB0aGlzIHRlc3QgaXMgdGhhdAotKyMgdGhlIHNoYXJl ZCBsaWJyYXJ5IGxpc3QgaXMgcHJvY2Vzc2VkIGFzIHBhcnQgb2YgYSBzZXBhcmF0ZSBzdGVwIHdo ZW4gb3BlbmluZwotKyMgdGhlIGNvcmUgZmlsZS4gIFJpZ2h0IG5vdyB0aGlzIHNlcGFyYXRlIHN0 ZXAgZG9lc24ndCBjaGVjayB0aGUgYnVpbGQtaWRzCi0rIyBjb3JyZWN0bHksIHNvIEdEQiB3aWxs IHBvdGVudGlhbGx5IG9wZW4gdGhlIHdyb25nIHNoYXJlZCBsaWJyYXJ5IGZpbGUuICBUaGUKLSsj IHNlY3Rpb25zIG9mIHRoaXMgaW5jb3JyZWN0IHNoYXJlZCBsaWJyYXJ5IGFyZSB0aGVuIGFkZGVk IHRvIEdEQidzIGxpc3Qgb2YKLSsjIHRhcmdldCBzZWN0aW9ucywgYW5kIGFyZSB1c2VkIHRvIHNh dGlzZnkgbWVtb3J5IHJlYWRzLCB3aGljaCBjYW4gZ2l2ZSB0aGUKLSsjIHdyb25nIHJlc3VsdHMu Ci0rIwotKyMgVGhpcyBvYnZpb3VzbHkgbmVlZHMgZml4aW5nLCBidXQgaXMgYSBzZXBhcmF0ZSBw cm9ibGVtIGZyb20gdGhlIG9uZSBiZWluZwotKyMgdGVzdGVkIGhlcmUsIHNvIHRoaXMgdGVzdCBk ZWxpYmVyYXRlbHkgY2hlY2tzIHRoZSBtYXBwaW5nIHVzaW5nIGEgZmlsZSB0aGF0Ci0rIyBpcyBt bWFwZWQgcmF0aGVyIHRoYW4gbG9hZGVkIGFzIGEgc2hhcmVkIGxpYnJhcnksIGFzIHN1Y2ggdGhl IGZpbGUgaXMgaW4gdGhlCi0rIyBjb3JlLWZpbGVzIGxpc3Qgb2YgbWFwcGVkIGZpbGVzLCBidXQg aXMgbm90IGluIHRoZSBzaGFyZWQgbGlicmFyeSBsaXN0LgotKyMKLSsjIERlc3BpdGUgdGhpcyB0 ZXN0IGxpdmluZyBpbiB0aGUgZ2RiLmRlYnVnaW5mb2QvIGRpcmVjdG9yeSwgb25seSB0aGUgbGFz dAotKyMgcGFydCBvZiB0aGlzIHRlc3QgYWN0dWFsbHkgdXNlcyBkZWJ1Z2luZm9kLCBldmVyeXRo aW5nIHVwIHRvIHRoYXQgcG9pbnQgaXMKLSsjIHByZXR0eSBnZW5lcmljLgotKwotK3JlcXVpcmUg eyFpc19yZW1vdGUgaG9zdH0KLStyZXF1aXJlIHshaXNfcmVtb3RlIHRhcmdldH0KLSsKLStsb2Fk X2xpYiBkZWJ1Z2luZm9kLXN1cHBvcnQuZXhwCi0rCi0rcmVxdWlyZSBhbGxvd19zaGxpYl90ZXN0 cwotKwotK3N0YW5kYXJkX3Rlc3RmaWxlIC0xLmMgLTIuYyAtMy5jCi0rCi0rIyBDb21waWxlIGFu IGV4ZWN1dGFibGUgdGhhdCBsb2FkcyB0aGUgc2hhcmVkIGxpYnJhcnkgYXMgYW4gYWN0dWFsCi0r IyBzaGFyZWQgbGlicmFyeSwgdGhlbiB1c2UgR0RCIHRvIGZpZ3VyZSBvdXQgdGhlIG9mZnNldCBv ZiB0aGUKLSsjIHZhcmlhYmxlICdsaWJyYXJ5X3B0cicgd2l0aGluIHRoZSBsaWJyYXJ5LgotK3Nl dCBsaWJyYXJ5X2ZpbGVuYW1lIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAibGliZm9vLnNvIl0KLStz ZXQgYmluZmlsZTIgW3N0YW5kYXJkX291dHB1dF9maWxlICJsaWJyYXJ5X2xvYWRlciJdCi0rCi0r aWYge1twcmVwYXJlX2Zvcl90ZXN0aW5nX2Z1bGwgImJ1aWxkIGV4ZWMgd2hpY2ggbG9hZHMgdGhl IHNoYXJlZCBsaWJyYXJ5IiBcCi0rCSBbbGlzdCAkbGlicmFyeV9maWxlbmFtZSBcCi0rCSAgICAg IHsgZGVidWcgc2hsaWIgYnVpbGQtaWQgXAotKwkJICAgIGFkZGl0aW9uYWxfZmxhZ3M9LURQT0lO VEVSX1ZBTFVFPTB4MTIzNDU2NzggfSBcCi0rCSAgICAgICRzcmNmaWxlMiB7fV0gXAotKwkgW2xp c3QgJGJpbmZpbGUyIFtsaXN0IGRlYnVnIHNobGliPSRsaWJyYXJ5X2ZpbGVuYW1lIF0gXAotKwkg ICAgICAkc3JjZmlsZSB7IGRlYnVnIH1dXSAhPSAwfSB7Ci0rICAgIHJldHVybgotK30KLSsKLStp ZiB7IVtydW50b19tYWluXX0gewotKyAgICByZXR1cm4KLSt9Ci0rCi0raWYgeyBbaXNfYWRkcmVz c196ZXJvX3JlYWRhYmxlXSB9IHsKLSsgICAgcmV0dXJuCi0rfQotKwotK3NldCBwdHJfYWRkcmVz cyBbZ2V0X2hleGFkZWNpbWFsX3ZhbHVlb2YgIiZsaWJyYXJ5X3B0ciIgInVua25vd24iXQotKwot K3NldCBwdHJfb2Zmc2V0ICJ1bmtub3duIgotK2dkYl90ZXN0X211bHRpcGxlICJpbmZvIHByb2Mg bWFwcGluZ3MiICIiIHsKLSsgICAgLXJlICJeXFxzKygkaGV4KVxccysoJGhleClcXHMrJGhleFxc cysoJGhleClcW15cclxuXF0rJGxpYnJhcnlfZmlsZW5hbWVcclxuIiB7Ci0rCXNldCBsb3dfYWRk ciAkZXhwZWN0X291dCgxLHN0cmluZykKLSsJc2V0IGhpZ2hfYWRkciAkZXhwZWN0X291dCgyLHN0 cmluZykKLSsJc2V0IGZpbGVfb2Zmc2V0ICRleHBlY3Rfb3V0KDMsc3RyaW5nKQotKwotKwlpZiB7 W2V4cHIgJHB0cl9hZGRyZXNzID49ICRsb3dfYWRkcl0gJiYgW2V4cHIgJHB0cl9hZGRyZXNzIDwg JGhpZ2hfYWRkcl19IHsKLSsJICAgIHNldCBtYXBwaW5nX29mZnNldCBbZXhwciAkcHRyX2FkZHJl c3MgLSAkbG93X2FkZHJdCi0rCSAgICBzZXQgcHRyX29mZnNldCBbZm9ybWF0IDB4JXggW2V4cHIg JGZpbGVfb2Zmc2V0ICsgJG1hcHBpbmdfb2Zmc2V0XV0KLSsJfQotKwotKwlleHBfY29udGludWUK LSsgICAgfQotKwotKyAgICAtcmUgIl4kZ2RiX3Byb21wdCAkIiB7Ci0rICAgIH0KLSsKLSsgICAg LXJlICIoXlxbXlxyXG5cXSopXHJcbiIgewotKwlzZXQgdG1wICRleHBlY3Rfb3V0KDEsc3RyaW5n KQotKwlleHBfY29udGludWUKLSsgICAgfQotK30KLSsKLStnZGJfYXNzZXJ0IHsgJHB0cl9vZmZz ZXQgbmUgInVua25vd24iIH0gXAotKyAgICAiZm91bmQgcG9pbnRlciBvZmZzZXQiCi0rCi0rc2V0 IHB0cl9zaXplIFtnZXRfaW50ZWdlcl92YWx1ZW9mICJzaXplb2YgKGxpYnJhcnlfcHRyKSIgInVu a25vd24iXQotK3NldCBwdHJfZm9ybWF0X2NoYXIgIiIKLStpZiB7ICRwdHJfc2l6ZSA9PSAyIH0g ewotKyAgICBzZXQgcHRyX2Zvcm1hdF9jaGFyICJiIgotK30gZWxzZWlmIHsgJHB0cl9zaXplID09 IDQgfSB7Ci0rICAgIHNldCBwdHJfZm9ybWF0X2NoYXIgInciCi0rfSBlbHNlaWYgeyAkcHRyX3Np emUgPT0gOCB9IHsKLSsgICAgc2V0IHB0cl9mb3JtYXRfY2hhciAiZyIKLSt9Ci0raWYgeyAkcHRy X2Zvcm1hdF9jaGFyIGVxICIiIH0gewotKyAgICB1bnRlc3RlZCAiY291bGQgbm90IGZpZ3VyZSBv dXQgc2l6ZSBvZiBsaWJyYXJ5X3B0ciB2YXJpYWJsZSIKLSsgICAgcmV0dXJuCi0rfQotKwotKyMg SGVscGVyIHByb2MgdG8gcmVhZCBhIHZhbHVlIGZyb20gaW5mZXJpb3IgbWVtb3J5LiAgUmVhZHMg YXQgYWRkcmVzcyBoZWxkIGluCi0rIyBnbG9iYWwgUFRSX0FERFJFU1MsIGFuZCB1c2UgUFRSX0ZP Uk1BVF9DSEFSIGZvciB0aGUgc2l6ZSBvZiB0aGUgcmVhZC4KLStwcm9jIHJlYWRfcHRyX3ZhbHVl IHsgfSB7Ci0rICAgIHNldCB2YWx1ZSAiIgotKyAgICBnZGJfdGVzdF9tdWx0aXBsZSAieC8xJHs6 OnB0cl9mb3JtYXRfY2hhcn14ICR7OjpwdHJfYWRkcmVzc30iICIiIHsKLSsJLXJlIC13cmFwICJe JHs6OmhleH0oPzpcXHMrPFxbXj5cXSs+KT86XFxzKygkOjpoZXgpIiB7Ci0rCSAgICBzZXQgdmFs dWUgJGV4cGVjdF9vdXQoMSxzdHJpbmcpCi0rCX0KLSsJLXJlIC13cmFwICJeJHs6OmhleH0oPzpc XHMrPFxbXj5cXSs+KT86XFxzK0Nhbm5vdCBhY2Nlc3MgbWVtb3J5IGF0IGFkZHJlc3MgJHs6Omhl eH0iIHsKLSsJICAgIHNldCB2YWx1ZSAidW5hdmFpbGFibGUiCi0rCX0KLSsgICAgfQotKyAgICBy ZXR1cm4gJHZhbHVlCi0rfQotKwotK3NldCBwdHJfZXhwZWN0ZWRfdmFsdWUgW3JlYWRfcHRyX3Zh bHVlXQotK2lmIHsgJHB0cl9leHBlY3RlZF92YWx1ZSBlcSAiIiB9IHsKLSsgICAgdW50ZXN0ZWQg ImNvdWxkIG5vdCBmaW5kIGV4cGVjdGVkIHZhbHVlIGZvciBsaWJyYXJ5X3B0ciIKLSsgICAgcmV0 dXJuCi0rfQotKwotKyMgTm93IGNvbXBpbGUgYSBzZWNvbmQgZXhlY3V0YWJsZS4gIFRoaXMgb25l IGRvZXNuJ3QgbG9hZCB0aGUgc2hhcmVkCi0rIyBsaWJyYXJ5IGFzIGFuIGFjdHVhbCBzaGFyZWQg bGlicmFyeSwgYnV0IGluc3RlYWQgbW1hcHMgdGhlIGxpYnJhcnkKLSsjIGludG8gdGhlIGV4ZWN1 dGFibGUuCi0rIwotKyMgTG9hZCB0aGlzIGV4ZWN1dGFibGUgd2l0aGluIEdEQiBhbmQgY29uZmly bSB0aGF0IHdlIGNhbiB1c2UgdGhlCi0rIyBvZmZzZXQgd2UgY2FsY3VsYXRlZCBwcmV2aW91c2x5 IHRvIHZpZXcgdGhlIHZhbHVlIG9mICdsaWJyYXJ5X3B0cicuCi0rc2V0IG9wdHMgW2xpc3QgZGVi dWcgYWRkaXRpb25hbF9mbGFncz0tRFNITElCX0ZJTEVOQU1FPVwiJGxpYnJhcnlfZmlsZW5hbWVc Il0KLStpZiB7W3ByZXBhcmVfZm9yX3Rlc3RpbmcgInByZXBhcmUgc2Vjb25kIGV4ZWN1dGFibGUi ICRiaW5maWxlIFwKLSsJICRzcmNmaWxlMyAkb3B0c10gIT0gMH0gewotKyAgICByZXR1cm4KLSt9 Ci0rCi0raWYgeyFbcnVudG9fbWFpbl19IHsKLSsgICAgcmV0dXJuCi0rfQotKwotK2dkYl9icmVh a3BvaW50IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJVbmRlZmluZWQgYmVoYXZpb3VyIGhlcmUiICRz cmNmaWxlM10KLStnZGJfY29udGludWVfdG9fYnJlYWtwb2ludCAicnVuIHRvIGJyZWFrcG9pbnQi Ci0rCi0rc2V0IGxpYnJhcnlfYmFzZV9hZGRyZXNzIFwKLSsgICAgW2dldF9oZXhhZGVjaW1hbF92 YWx1ZW9mICJsaWJyYXJ5X2Jhc2VfYWRkcmVzcyIgInVua25vd24iXQotK3NldCBwdHJfYWRkcmVz cyBbZm9ybWF0IDB4JXggW2V4cHIgJGxpYnJhcnlfYmFzZV9hZGRyZXNzICsgJHB0cl9vZmZzZXRd XQotKwotK3NldCBwdHJfdmFsdWUgW3JlYWRfcHRyX3ZhbHVlXQotK2dkYl9hc3NlcnQgeyAkcHRy X3ZhbHVlID09ICRwdHJfZXhwZWN0ZWRfdmFsdWUgfSBcCi0rICAgICJjaGVjayB2YWx1ZSBvZiBw b2ludGVyIHZhcmlhYmxlIgotKwotKyMgTm93IHJlcnVuIHRoZSBzZWNvbmQgZXhlY3V0YWJsZSBv dXRzaWRlIG9mIEdEQi4gIFRoZSBleGVjdXRhYmxlIHNob3VsZCBjcmFzaAotKyMgYW5kIGdlbmVy YXRlIGEgY29yZWZpbGUuCi0rc2V0IGNvcmVmaWxlIFtjb3JlX2ZpbmQgJGJpbmZpbGVdCi0raWYg eyRjb3JlZmlsZSBlcSAiIn0gewotKyAgICB1bnRlc3RlZCAiY291bGQgbm90IGdlbmVyYXRlIGNv cmUgZmlsZSIKLSsgICAgcmV0dXJuCi0rfQotKwotKyMgTG9hZCBhIGNvcmUgZmlsZSBmcm9tIHRo ZSBnbG9iYWwgQ09SRUZJTEUuICBVc2UgVEVTVE5BTUUgYXMgdGhlIG5hbWUKLSsjIG9mIHRoZSB0 ZXN0LgotKyMKLSsjIElmIExJTkVfUkUgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcgdGhlbiB0aGlz IGlzIGEgcmVnZXhwIGZvciBhIGxpbmUKLSsjIHRoYXQgd2UgZXhwZWN0IHRvIHNlZSBpbiB0aGUg b3V0cHV0IHdoZW4gbG9hZGluZyB0aGUgY29yZSBmaWxlLCBpZgotKyMgdGhlIGxpbmUgaXMgbm90 IHByZXNlbnQgdGhlbiB0aGlzIHRlc3Qgd2lsbCBmYWlsLgotKyMKLSsjIEFueSBsaW5lcyBiZWdp bm5pbmcgd2l0aCAnd2FybmluZzogJyB3aWxsIGNhdXNlIHRoaXMgdGVzdCB0byBmYWlsLgotKyMK LSsjIEEgY291cGxlIG9mIG90aGVyIHN0YW5kYXJkIGxpbmVzIHRoYXQgYXJlIHByb2R1Y2VkIHdo ZW4gbG9hZGluZyBhCi0rIyBjb3JlIGZpbGUgYXJlIGFsc28gY2hlY2tlZCBmb3IsIGp1c3QgdG8g bWFrZSBzdXJlIHRoZSBjb3JlIGZpbGUKLSsjIGxvYWRpbmcgaGFzIHByb2dyZXNzZWQgYXMgZXhw ZWN0ZWQuCi0rcHJvYyBsb2FkX2NvcmVfZmlsZSB7IHRlc3RuYW1lIHsgbGluZV9yZSAiIiB9IH0g ewotKyAgICBzZXQgY29kZSB7fQotKwotKyAgICBpZiB7ICRsaW5lX3JlIG5lICIiIH0gewotKwlh cHBlbmQgY29kZSB7Ci0rCSAgICAtcmUgIl4kbGluZV9yZVxyXG4iIHsKLSsJCXNldCBzYXdfZXhw ZWN0ZWRfbGluZSB0cnVlCi0rCQlleHBfY29udGludWUKLSsJICAgIH0KLSsJfQotKwlzZXQgc2F3 X2V4cGVjdGVkX2xpbmUgZmFsc2UKLSsgICAgfSBlbHNlIHsKLSsJc2V0IHNhd19leHBlY3RlZF9s aW5lIHRydWUKLSsgICAgfQotKwotKyAgICBzZXQgc2F3X3Vua25vd25fd2FybmluZyBmYWxzZQot KyAgICBzZXQgc2F3X2dlbmVyYXRlZF9ieV9saW5lIGZhbHNlCi0rICAgIHNldCBzYXdfcHJvZ190 ZXJtaW5hdGVkX2xpbmUgZmFsc2UKLSsKLSsgICAgYXBwZW5kIGNvZGUgewotKwktcmUgIl53YXJu aW5nOiBcW15cclxuXF0rXHJcbiIgewotKwkgICAgc2V0IHNhd191bmtub3duX3dhcm5pbmcgdHJ1 ZQotKwkgICAgZXhwX2NvbnRpbnVlCi0rCX0KLSsKLSsJLXJlICJeQ29yZSB3YXMgZ2VuZXJhdGVk IGJ5IFxbXlxyXG5cXStcclxuIiB7Ci0rCSAgICBzZXQgc2F3X2dlbmVyYXRlZF9ieV9saW5lIHRy dWUKLSsJICAgIGV4cF9jb250aW51ZQotKwl9Ci0rCi0rCS1yZSAiXlByb2dyYW0gdGVybWluYXRl ZCB3aXRoIHNpZ25hbCBTSUdTRUdWLCBTZWdtZW50YXRpb24gZmF1bHRcXC5cclxuIiB7Ci0rCSAg ICBzZXQgc2F3X3Byb2dfdGVybWluYXRlZF9saW5lIHRydWUKLSsJICAgIGV4cF9jb250aW51ZQot Kwl9Ci0rCi0rCS1yZSAiXiQ6OmdkYl9wcm9tcHQgJCIgewotKwkgICAgZ2RiX2Fzc2VydCB7JHNh d19nZW5lcmF0ZWRfYnlfbGluZSBcCi0rCQkJICAgICYmICRzYXdfcHJvZ190ZXJtaW5hdGVkX2xp bmUgXAotKwkJCSAgICAmJiAkc2F3X2V4cGVjdGVkX2xpbmUgXAotKwkJCSAgICAmJiAhJHNhd191 bmtub3duX3dhcm5pbmd9IFwKLSsJCSRnZGJfdGVzdF9uYW1lCi0rCX0KLSsKLSsJLXJlICJeXFte XHJcblxdKlxyXG4iIHsKLSsJICAgIGV4cF9jb250aW51ZQotKwl9Ci0rICAgIH0KLSsKLSsgICAg c2V0IHJlcyBbY2F0Y2ggeyByZXR1cm4gW2dkYl90ZXN0X211bHRpcGxlICJjb3JlLWZpbGUgJDo6 Y29yZWZpbGUiIFwKLSsJCQkJICIkdGVzdG5hbWUiICRjb2RlXSB9IHN0cmluZ10KLSsKLSsgICAg aWYgeyRyZXMgPT0gMX0gewotKwlnbG9iYWwgZXJyb3JJbmZvIGVycm9yQ29kZQotKwlyZXR1cm4g LWNvZGUgZXJyb3IgLWVycm9yaW5mbyAkZXJyb3JJbmZvIC1lcnJvcmNvZGUgJGVycm9yQ29kZSAk c3RyaW5nCi0rICAgIH0gZWxzZWlmIHskcmVzID09IDJ9IHsKLSsJcmV0dXJuICRzdHJpbmcKLSsg ICAgfSBlbHNlIHsKLSsJIyBXZSBleHBlY3QgUkVTIHRvIGJlIDIgKFRDTF9SRVRVUk4pIG9yIDEg KFRDTF9FUlJPUikuICBJZiB3ZSBnZXQKLSsJIyBoZXJlIHRoZW4gc29tZWhvdyB0aGUgJ2NhdGNo JyBhYm92ZSBmaW5pc2hlZCB3aXRob3V0IGhpdHRpbmcKLSsJIyBlaXRoZXIgb2YgdGhvc2UgY2Fz ZXMsIHdoaWNoIGlzIC4uLi4gd2VpcmQuCi0rCXBlcnJvciAidW5leGVwY3RlZCByZXR1cm4gdmFs dWUsIGNvZGUgPSAkcmVzLCB2YWx1ZSA9ICRzdHJpbmciCi0rCXJldHVybiAtMQotKyAgICB9Ci0r fQotKwotKyMgQW5kIG5vdyByZXN0YXJ0IEdEQiwgbG9hZCB0aGUgY29yZS1maWxlIGFuZCBjaGVj ayB0aGF0IHRoZSBsaWJyYXJ5IHNob3dzIGFzCi0rIyBiZWluZyBtYXBwZWQgaW4sIGFuZCB0aGF0 IHdlIGNhbiBzdGlsbCByZWFkIHRoZSBsaWJyYXJ5X3B0ciB2YWx1ZSBmcm9tCi0rIyBtZW1vcnku Ci0rY2xlYW5fcmVzdGFydCAkYmluZmlsZQotKwotK2xvYWRfY29yZV9maWxlICJsb2FkIGNvcmUg ZmlsZSIKLSsKLStzZXQgbGlicmFyeV9iYXNlX2FkZHJlc3MgW2dldF9oZXhhZGVjaW1hbF92YWx1 ZW9mICJsaWJyYXJ5X2Jhc2VfYWRkcmVzcyIgXAotKwkJCSAgICAgICJ1bmtub3duIiAiZ2V0IGxp YnJhcnlfYmFzZV9hZGRyZXNzIGluIGNvcmUtZmlsZSJdCi0rc2V0IHB0cl9hZGRyZXNzIFtmb3Jt YXQgMHgleCBbZXhwciAkbGlicmFyeV9iYXNlX2FkZHJlc3MgKyAkcHRyX29mZnNldF1dCi0rCi0r c2V0IHB0cl92YWx1ZSBbcmVhZF9wdHJfdmFsdWVdCi0rZ2RiX2Fzc2VydCB7ICRwdHJfdmFsdWUg PT0gJHB0cl9leHBlY3RlZF92YWx1ZSB9IFwKLSsgICAgImNoZWNrIHZhbHVlIG9mIHBvaW50ZXIg dmFyaWFibGUgZnJvbSBjb3JlLWZpbGUiCi0rCi0rIyBOb3cgbW92ZSB0aGUgc2hhcmVkIGxpYnJh cnkgZmlsZSBhd2F5IGFuZCByZXN0YXJ0IEdEQi4gIFRoaXMgdGltZSB3aGVuIHdlCi0rIyBsb2Fk IHRoZSBjb3JlLWZpbGUgd2Ugc2hvdWxkIHNlZSBhIHdhcm5pbmcgdGhhdCBHREIgaGFzIGZhaWxl ZCB0byBtYXAgaW4gdGhlCi0rIyBsaWJyYXJ5IGZpbGUuICBBbiBhdHRlbXB0IHRvIHJlYWQgdGhl IHZhcmlhYmxlIGZyb20gdGhlIGxpYnJhcnkgZmlsZSBzaG91bGQKLSsjIGZhaWwgLyBnaXZlIGEg d2FybmluZy4KLStzZXQgbGlicmFyeV9iYWNrdXBfZmlsZW5hbWUgW3N0YW5kYXJkX291dHB1dF9m aWxlICJsaWJmb28uc28uYmFja3VwIl0KLStyZW1vdGVfZXhlYyBidWlsZCAibXYgXCIkbGlicmFy eV9maWxlbmFtZVwiIFwiJGxpYnJhcnlfYmFja3VwX2ZpbGVuYW1lXCIiCi0rCi0rY2xlYW5fcmVz dGFydCAkYmluZmlsZQotKwotK2xvYWRfY29yZV9maWxlICJsb2FkIGNvcmVmaWxlIHdpdGggbGli cmFyeSBmaWxlIG1pc3NpbmciIFwKLSsgICAgIndhcm5pbmc6IENhbid0IG9wZW4gZmlsZSBbc3Ry aW5nX3RvX3JlZ2V4cCAkbGlicmFyeV9maWxlbmFtZV0gZHVyaW5nIGZpbGUtYmFja2VkIG1hcHBp bmcgbm90ZSBwcm9jZXNzaW5nIgotKwotK3NldCBwdHJfdmFsdWUgW3JlYWRfcHRyX3ZhbHVlXQot K2dkYl9hc3NlcnQgeyAkcHRyX3ZhbHVlIGVxICJ1bmF2YWlsYWJsZSIgfSBcCi0rICAgICJjaGVj ayB2YWx1ZSBvZiBwb2ludGVyIGlzIHVuYXZhaWxhYmxlIHdpdGggbGlicmFyeSBmaWxlIG1pc3Np bmciCi0rCi0rIyBOb3cgc3ltbGluayB0aGUgLmJ1aWxkLWlkL3h4L3h4eC4uLnh4eCBmaWxlbmFt ZSB3aXRoaW4gdGhlIGRlYnVnCi0rIyBkaXJlY3RvcnkgdG8gbGlicmFyeSB3ZSBqdXN0IG1vdmVk IGFzaWRlLiAgUmVzdGFydCBHREIgYW5kIHNldHVwIHRoZQotKyMgZGVidWctZmlsZS1kaXJlY3Rv cnkgYmVmb3JlIGxvYWRpbmcgdGhlIGNvcmUgZmlsZS4KLSsjCi0rIyBHREIgc2hvdWxkIGxvb2t1 cCB0aGUgZmlsZSB0byBtYXAgdmlhIHRoZSBidWlsZC1pZCBsaW5rIGluIHRoZQotKyMgLmJ1aWxk LWlkLyBkaXJlY3RvcnkuCi0rc2V0IGRlYnVnZGlyIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAiZGVi dWdkaXIiXQotK3NldCBidWlsZF9pZF9maWxlbmFtZSBcCi0rICAgICRkZWJ1Z2Rpci9bYnVpbGRf aWRfZGVidWdfZmlsZW5hbWVfZ2V0ICRsaWJyYXJ5X2JhY2t1cF9maWxlbmFtZSAiIl0KLSsKLSty ZW1vdGVfZXhlYyBidWlsZCAibWtkaXIgLXAgW2ZpbGUgZGlybmFtZSAkYnVpbGRfaWRfZmlsZW5h bWVdIgotK3JlbW90ZV9leGVjIGJ1aWxkICJsbiAtc2YgJGxpYnJhcnlfYmFja3VwX2ZpbGVuYW1l ICRidWlsZF9pZF9maWxlbmFtZSIKLSsKLStjbGVhbl9yZXN0YXJ0ICRiaW5maWxlCi0rCi0rZ2Ri X3Rlc3Rfbm9fb3V0cHV0ICJzZXQgZGVidWctZmlsZS1kaXJlY3RvcnkgJGRlYnVnZGlyIiBcCi0r ICAgICJzZXQgZGVidWctZmlsZS1kaXJlY3RvcnkiCi0rCi0rbG9hZF9jb3JlX2ZpbGUgImxvYWQg Y29yZWZpbGUsIGxvb2t1cCBpbiBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIKLSsKLStzZXQgcHRyX3Zh bHVlIFtyZWFkX3B0cl92YWx1ZV0KLStnZGJfYXNzZXJ0IHsgJHB0cl92YWx1ZSA9PSAkcHRyX2V4 cGVjdGVkX3ZhbHVlIH0gXAotKyAgICAiY2hlY2sgdmFsdWUgb2YgcG9pbnRlciB2YXJpYWJsZSBm cm9tIGNvcmUtZmlsZSwgbG9va3VwIGluIGRlYnVnLWZpbGUtZGlyZWN0b3J5IgotKwotKyMgQnVp bGQgYSBuZXcgdmVyc2lvbiBvZiB0aGUgc2hhcmVkIGxpYnJhcnksIGtlZXAgdGhlIGxpYnJhcnkg dGhlIHNhbWUgc2l6ZSwKLSsjIGJ1dCBjaGFuZ2UgdGhlIGNvbnRlbnRzIHNvIHRoZSBidWlsZC1p ZCBjaGFuZ2VzLiAgVGhlbiByZXN0YXJ0IEdEQiBhbmQgbG9hZAotKyMgdGhlIGNvcmUtZmlsZSBh Z2Fpbi4gIEdEQiBzaG91bGQgc3BvdCB0aGF0IHRoZSBidWlsZC1pZCBmb3IgdGhlIHNoYXJlZAot KyMgbGlicmFyeSBpcyBub3QgYXMgZXhwZWN0ZWQsIGFuZCBzaG91bGQgcmVmdXNlIHRvIG1hcCBp biB0aGUgc2hhcmVkIGxpYnJhcnkuCi0raWYge1tidWlsZF9leGVjdXRhYmxlICJidWlsZCBzZWNv bmQgdmVyc2lvbiBvZiBzaGFyZWQgbGlicmFyeSIgXAotKwkgJGxpYnJhcnlfZmlsZW5hbWUgJHNy Y2ZpbGUyIFwKLSsJIHsgZGVidWcgc2hsaWIgYnVpbGQtaWQgXAotKwkgICAgICAgYWRkaXRpb25h bF9mbGFncz0tRFBPSU5URVJfVkFMVUU9MHgxMTIyMzM0NCB9XSAhPSAwfSB7Ci0rICAgIHJldHVy bgotK30KLSsKLStjbGVhbl9yZXN0YXJ0ICRiaW5maWxlCi0rCi0rbG9hZF9jb3JlX2ZpbGUgImxv YWQgY29yZWZpbGUgd2l0aCB3cm9uZyBsaWJyYXJ5IGluIHBsYWNlIiBcCi0rICAgICJ3YXJuaW5n OiBGaWxlIFtzdHJpbmdfdG9fcmVnZXhwICRsaWJyYXJ5X2ZpbGVuYW1lXSBkb2Vzbid0IG1hdGNo IGJ1aWxkLWlkIGZyb20gY29yZS1maWxlIGR1cmluZyBmaWxlLWJhY2tlZCBtYXBwaW5nIHByb2Nl c3NpbmciCi0rCi0rc2V0IHB0cl92YWx1ZSBbcmVhZF9wdHJfdmFsdWVdCi0rZ2RiX2Fzc2VydCB7 ICRwdHJfdmFsdWUgZXEgInVuYXZhaWxhYmxlIiB9IFwKLSsgICAgImNoZWNrIHZhbHVlIG9mIHBv aW50ZXIgaXMgdW5hdmFpbGFibGUgd2l0aCB3cm9uZyBsaWJyYXJ5IGluIHBsYWNlIgotKwotKyMg U2V0dXAgYSBkZWJ1Z2luZm9kIHNlcnZlciB3aGljaCBjYW4gc2VydmUgdGhlIG9yaWdpbmFsIHNo YXJlZCBsaWJyYXJ5IGZpbGUuCi0rIyBUaGVuIHJlc3RhcnQgR0RCIGFuZCBsb2FkIHRoZSBjb3Jl LWZpbGUuICBHREIgc2hvdWxkIGRvd25sb2FkIHRoZSBvcmlnaW5hbAotKyMgc2hhcmVkIGxpYnJh cnkgZnJvbSBkZWJ1Z2luZm9kIGFuZCB1c2UgdGhhdCB0byBwcm92aWRlIHRoZSBmaWxlIGJhY2tl ZAotKyMgbWFwcGluZy4KLStpZiB7IVthbGxvd19kZWJ1Z2luZm9kX3Rlc3RzXX0gewotKyAgICB1 bnRlc3RlZCAic2tpcHBpZyBkZWJ1Z2luZm9kIHBhcnRzIG9mIHRoaXMgdGVzdCIKLSsgICAgcmV0 dXJuCi0rfQotKwotK3NldCBzZXJ2ZXJfZGlyIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAiZGVidWdp bmZvZC5zZXJ2ZXIiXQotK2ZpbGUgbWtkaXIgJHNlcnZlcl9kaXIKLStmaWxlIHJlbmFtZSAtZm9y Y2UgJGxpYnJhcnlfYmFja3VwX2ZpbGVuYW1lICRzZXJ2ZXJfZGlyCi0rCi0rcHJlcGFyZV9mb3Jf ZGVidWdpbmZvZCBjYWNoZSBkYgotKwotK3NldCB1cmwgW3N0YXJ0X2RlYnVnaW5mb2QgJGRiICRz ZXJ2ZXJfZGlyXQotK2lmIHsgJHVybCBlcSAiIiB9IHsKLSsgICAgdW5yZXNvbHZlZCAiZmFpbGVk IHRvIHN0YXJ0IGRlYnVnaW5mb2Qgc2VydmVyIgotKyAgICByZXR1cm4KLSt9Ci0rCi0rd2l0aF9k ZWJ1Z2luZm9kX2VudiAkY2FjaGUgewotKyAgICBzZXRlbnYgREVCVUdJTkZPRF9VUkxTICR1cmwK LSsKLSsgICAgY2xlYW5fcmVzdGFydAotKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInNldCBkZWJ1 Z2luZm9kIGVuYWJsZWQgb24iIFwKLSsJImVuYWJsZWQgZGVidWdpbmZvZCBmb3IgaW5pdGlhbCB0 ZXN0IgotKyAgICBnZGJfbG9hZCAkYmluZmlsZQotKwotKyAgICBsb2FkX2NvcmVfZmlsZSAibG9h ZCBjb3JlZmlsZSwgZG93bmxvYWQgbGlicmFyeSBmcm9tIGRlYnVnaW5mb2QiIFwKLSsJIkRvd25s b2FkaW5nXFteXHJcblxdKiBmaWxlIFtzdHJpbmdfdG9fcmVnZXhwICRsaWJyYXJ5X2ZpbGVuYW1l XVxcLlxcLlxcLiIKLSsKLSsgICAgc2V0IHB0cl92YWx1ZSBbcmVhZF9wdHJfdmFsdWVdCi0rICAg IGdkYl9hc3NlcnQgeyAkcHRyX3ZhbHVlID09ICRwdHJfZXhwZWN0ZWRfdmFsdWUgfSBcCi0rCSJj aGVjayB2YWx1ZSBvZiBwb2ludGVyIHZhcmlhYmxlIGFmdGVyIGRvd25sb2FkaW5nIGxpYnJhcnkg ZmlsZSIKLSt9Ci0rCi0rc3RvcF9kZWJ1Z2luZm9kCi1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0 ZS9nZGIuZGVidWdpbmZvZC9zb2xpYi13aXRoLXNvbmFtZS0xLmMgYi9nZGIvdGVzdHN1aXRlL2dk Yi5kZWJ1Z2luZm9kL3NvbGliLXdpdGgtc29uYW1lLTEuYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQK LS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2Qvc29saWIt d2l0aC1zb25hbWUtMS5jCi1AQCAtMCwwICsxLDM5IEBACi0rLyogQ29weXJpZ2h0IDIwMjQgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSsgICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQotKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAgIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsgICBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKyAgIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rICAg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uICAqLwotKwotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsKLSsvKiBJdCBpcyBp bXBvcnRhbnQgdGhhdCB0aGVzZSB0d28gdmFyaWFibGVzIGhhdmUgbmFtZXMgb2YgdGhlIHNhbWUg bGVuZ3RoCi0rICAgc28gdGhhdCB0aGUgZGVidWcgaW5mb3JtYXRpb24gaW4gdGhlIHR3byBsaWJy YXJ5IHZlcnNpb25zIGlzIGxhaWQgb3V0Ci0rICAgdGhlIHNhbWUuICBJZiB0aGV5IGRpZmZlciB0 aGVuIHRoZSAuZHluYW1pYyBzZWN0aW9uIG1pZ2h0IG1vdmUsIHdoaWNoCi0rICAgd2lsbCB0cmln Z2VyIGEgZGlmZmVyZW50IGNoZWNrIHdpdGhpbiBHREIgdGhhbiB0aGUgb25lIHdlIGFjdHVhbGx5 IHdhbnQKLSsgICB0byBjaGVjay4gICovCi0rCi0rI2lmIExJQl9WRVJTSU9OID09IDEKLSt2b2xh dGlsZSBpbnQgKmxpYnJhcnlfMV92YXIgPSAodm9sYXRpbGUgaW50ICopIDB4MTIzNDU2Nzg7Ci0r I2VsaWYgTElCX1ZFUlNJT04gPT0gMgotK3ZvbGF0aWxlIGludCAqbGlicmFyeV8yX3ZhciA9ICh2 b2xhdGlsZSBpbnQgKikgMHgxMTIyMzM0NDsKLSsjZWxzZQotKyMgZXJyb3IgVW5rbm93biBsaWJy YXJ5IHZlcnNpb24KLSsjZW5kaWYKLSsKLStpbnQKLStmb28gKHZvaWQpCi0rewotKyAgLyogVGhp cyBzaG91bGQgdHJpZ2dlciBhIGNvcmUgZHVtcC4gICovCi0rICBhYm9ydCAoKTsKLSsKLSsgIHJl dHVybiAwOwotK30KLWRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL3Nv bGliLXdpdGgtc29uYW1lLTIuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmRlYnVnaW5mb2Qvc29saWIt d2l0aC1zb25hbWUtMi5jCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0tIC9kZXYvbnVsbAotKysr IGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9zb2xpYi13aXRoLXNvbmFtZS0yLmMKLUBA IC0wLDAgKzEsNDEgQEAKLSsvKiBDb3B5cmlnaHQgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKLSsgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKyAgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsgICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0r Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxkbGZjbi5oPgotKyNpbmNsdWRlIDxz dGRkZWYuaD4KLSsKLSsvKiBUaGlzIGlzIGluIHRoZSBzaGFyZWQgbGlicmFyeS4gICovCi0rZXh0 ZXJuIGludCBmb28gKHZvaWQpOwotKwotKy8qIFRoaXMgaXMgdXBkYXRlZCBieSB0aGUgLmV4cCBm aWxlLiAgKi8KLStjaGFyICpsaWJuYW1lID0gImxpYmZvb18yLnNvIjsKLSsKLStpbnQKLSttYWlu ICh2b2lkKQotK3sKLSsgIHZvaWQgKmhhbmRsZTsKLSsgIGludCByZXMsIHRtcDsKLSsKLSsgIGhh bmRsZSA9IGRsb3BlbiAobGlibmFtZSwgUlRMRF9MQVpZKTsKLSsgIGFzc2VydCAoaGFuZGxlICE9 IE5VTEwpOwotKwotKyAgcmVzID0gZm9vICgpOwotKwotKyAgdG1wID0gZGxjbG9zZSAoaGFuZGxl KTsKLSsgIGFzc2VydCAodG1wID09IDApOwotKwotKyAgcmV0dXJuIHJlczsKLSt9Ci1kaWZmIC0t Z2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuZGVidWdpbmZvZC9zb2xpYi13aXRoLXNvbmFtZS5leHAg Yi9nZGIvdGVzdHN1aXRlL2dkYi5kZWJ1Z2luZm9kL3NvbGliLXdpdGgtc29uYW1lLmV4cAotbmV3 IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2Ri LmRlYnVnaW5mb2Qvc29saWItd2l0aC1zb25hbWUuZXhwCi1AQCAtMCwwICsxLDI5MCBAQAotKyMg Q29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rIwotKyMgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKLSsjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rIyBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0r IyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyMKLSsjIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCi0rIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0rCi0rIyBUaGlzIHRlc3QgZXhlcmNpc2VzIEdE QidzIGFiaWxpdHkgdG8gdmFsaWRhdGUgYnVpbGQtaWRzIHdoZW4gbG9hZGluZwotKyMgc2hhcmVk IGxpYnJhcmllcyBmb3IgYSBjb3JlIGZpbGUuCi0rIwotKyMgVGhlIHRlc3QgY3JlYXRlcyB0d28g InZlcnNpb25zIiBvZiBhIHNoYXJlZCBsaWJyYXJ5LCBzZXRzIHVwIGEKLSsjIHN5bWxpbmsgdG8g cG9pbnQgdG8gb25lIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGFuZCBjcmVhdGVzIGEgY29yZSBm aWxlLgotKyMKLSsjIFdlIHRoZW4gdHJ5IHJlLWxvYWRpbmcgdGhlIGNvcmUgZmlsZSBhbmQgZXhl Y3V0YWJsZSBhbmQgY2hlY2sgdGhhdAotKyMgR0RCIGlzIGFibGUgdG8gY29ycmVjdGx5IGxvYWQg dGhlIHNoYXJlZCBsaWJyYXJ5LiAgVG8gY29uZnVzZSB0aGluZ3MKLSsjIHdlIHJldGFyZ2V0IHRo ZSBsaWJyYXJ5IHN5bWxpbmsgYXQgdGhlIG90aGVyIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCi0r IwotKyMgQWZ0ZXIgdGhhdCB3ZSByZXBlYXQgdGhlIHRlc3QsIGJ1dCB0aGlzIHRpbWUgZGVsZXRp bmcgdGhlIHN5bWxpbmsKLSsjIGNvbXBsZXRlbHkuCi0rIwotKyMgVGhlbiB3ZSByZW1vdmUgdGhl IHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgY29tcGxldGVseSwgYXQgdGhpcyBwb2ludAotKyMgd2Ug ZG8gZXhwZWN0IEdEQiB0byBnaXZlIGEgd2FybmluZyBhYm91dCBiZWluZyB1bmFibGUgdG8gbG9h ZCB0aGUgbGlicmFyeS4KLSsjCi0rIyBBbmQgZmluYWxseSwgd2Ugc2V0dXAgZGVidWdpbmZvZCBh bmQgaGF2ZSBpdCBzZXJ2ZSB0aGUgbWlzc2luZwotKyMgbGlicmFyeSBmaWxlLCBHREIgc2hvdWxk IGNvcnJlY3RseSBkb3dubG9hZCB0aGUgbGlicmFyeSBmaWxlLgotKyMKLSsjIERlc3BpdGUgdGhp cyB0ZXN0IGxpdmluZyBpbiB0aGUgZ2RiLmRlYnVnaW5mb2QvIGRpcmVjdG9yeSwgb25seSB0aGUg bGFzdAotKyMgcGFydCBvZiB0aGlzIHRlc3QgYWN0dWFsbHkgdXNlcyBkZWJ1Z2luZm9kLCBldmVy eXRoaW5nIHVwIHRvIHRoYXQgcG9pbnQgaXMKLSsjIHByZXR0eSBnZW5lcmljLgotKwotK2xvYWRf bGliIGRlYnVnaW5mb2Qtc3VwcG9ydC5leHAKLSsKLStyZXF1aXJlIGFsbG93X3NobGliX3Rlc3Rz Ci0rcmVxdWlyZSB7aXN0YXJnZXQgIiotbGludXgqIn0KLStyZXF1aXJlIHshaXNfcmVtb3RlIGhv c3R9Ci0rcmVxdWlyZSB7IXVzaW5nX2Zpc3Npb259Ci0rCi0rc3RhbmRhcmRfdGVzdGZpbGUgLTEu YyAtMi5jCi0rCi0rIyBCdWlsZCB0d28gc2ltaWxhciwgYnV0IHNsaWdodGx5IGRpZmZlcmVudCB2 ZXJzaW9ucyBvZiB0aGUgc2hhcmVkCi0rIyBsaWJyYXJ5LiAgQm90aCBsaWJyYXJpZXMgaGF2ZSBE VF9TT05BTUUgc2V0IHRvIHRoZSBnZW5lcmljCi0rIyBsaWJmb28uc28sIHdlJ2xsIGNyZWF0ZSBh IHN5bWxpbmsgd2l0aCB0aGF0IG5hbWUgbGF0ZXIuCi0rc2V0IGxpYnJhcnlfMV9maWxlbmFtZSBb c3RhbmRhcmRfb3V0cHV0X2ZpbGUgImxpYmZvb18xLnNvIl0KLStzZXQgbGlicmFyeV8yX2ZpbGVu YW1lIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAibGliZm9vXzIuc28iXQotKwotKyMgVGhlIGdlbmVy aWMgbmFtZSBmb3IgdGhlIGxpYnJhcnkuCi0rc2V0IGxpYnJhcnlfZmlsZW5hbWUgW3N0YW5kYXJk X291dHB1dF9maWxlICJsaWJmb28uc28iXQotKwotKyMgV2hlbiBjb21waWxpbmcgYSBzaGFyZWQg bGlicmFyeSB0aGUgLVdsLC1zb25hbWUsTkFNRSBvcHRpb24gaXMKLSsjIGF1dG9tYXRpY2FsbHkg YWRkZWQgYmFzZWQgb24gdGhlIGZpbmFsIG5hbWUgb2YgdGhlIGxpYnJhcnkuICBXZSB3YW50Ci0r IyB0byBjb21waWxlIGxpYmZvb18xLnNvLCBidXQgc2V0IHRoZSBzb25hbWUgdG8gbGliZm9vLnNv LiAgVG8gYWNoaWV2ZQotKyMgdGhpcyB3ZSBmaXJzdCBjb21waWxlIGludG8gbGliZm9vLnNvLCBh bmQgdGhlbiByZW5hbWUgdGhlIGxpYnJhcnkgdG8KLSsjIGxpYmZvb18xLnNvLgotK2lmIHtbYnVp bGRfZXhlY3V0YWJsZSAiYnVpbGQgbGliZm9vXzEuc28iICRsaWJyYXJ5X2ZpbGVuYW1lIFwKLSsJ ICRzcmNmaWxlIFwKLSsJICAgICAgeyBkZWJ1ZyBzaGxpYiBidWlsZC1pZCBcCi0rCQkgICAgYWRk aXRpb25hbF9mbGFncz0tRExJQl9WRVJTSU9OPTEgfV0gPT0gLTF9IHsKLSsgICAgcmV0dXJuCi0r fQotK3JlbW90ZV9leGVjIGJ1aWxkICJtdiAke2xpYnJhcnlfZmlsZW5hbWV9ICR7bGlicmFyeV8x X2ZpbGVuYW1lfSIKLSsKLSsjIFNlZSB0aGUgY29tbWVudCBhYm92ZSwgYnV0IHRoaXMgdGltZSB3 ZSByZW5hbWUgdG8gbGliZm9vXzIuc28uCi0raWYge1tidWlsZF9leGVjdXRhYmxlICJidWlsZCBs aWJmb29fMi5zbyIgJGxpYnJhcnlfZmlsZW5hbWUgXAotKwkgJHNyY2ZpbGUgXAotKwkgICAgICB7 IGRlYnVnIHNobGliIGJ1aWxkLWlkIFwKLSsJCSAgICBhZGRpdGlvbmFsX2ZsYWdzPS1ETElCX1ZF UlNJT049MiB9XSA9PSAtMX0gewotKyAgICByZXR1cm4KLSt9Ci0rcmVtb3RlX2V4ZWMgYnVpbGQg Im12ICR7bGlicmFyeV9maWxlbmFtZX0gJHtsaWJyYXJ5XzJfZmlsZW5hbWV9IgotKwotKyMgQ3Jl YXRlIGxpYmZvby5zbyBzeW1saW5rIHRvIHRoZSBsaWJmb29fMS5zbyBsaWJyYXJ5LiAgSWYgdGhp cwotKyMgc3ltbGluayBjcmVhdGlvbiBmYWlscyB0aGVuIHdlIGFzc3VtZSB3ZSBjYW4ndCBjcmVh dGUgc3ltbGlua3Mgb24KLSsjIHRoaXMgaG9zdC4gIElmIHRoaXMgc3VjY2VlZHMgdGhlbiBsYXRl ciBzeW1saW5rIGNyZWF0aW9uIGlzIHJlcXVpcmVkCi0rIyB0byBzdWNjZWVkLCBhbmQgd2lsbCB0 cmlnZ2VyIGFuIEZBSUwgaWYgaXQgZG9lc24ndC4KLStzZXQgc3RhdHVzIFwKLSsgICAgW3JlbW90 ZV9leGVjIGJ1aWxkIFwKLSsJICJsbiAtc2YgJHtsaWJyYXJ5XzFfZmlsZW5hbWV9ICR7bGlicmFy eV9maWxlbmFtZX0iXQotK2lmIHtbbGluZGV4ICRzdGF0dXMgMF0gIT0gMH0gewotKyAgICB1bnN1 cHBvcnRlZCAiaG9zdCBkb2VzIG5vdCBzdXBwb3J0IHN5bWJvbGljIGxpbmtzIgotKyAgICByZXR1 cm4KLSt9Ci0rCi0rIyBCdWlsZCB0aGUgZXhlY3V0YWJsZS4gIFRoaXMgbGlua3MgYWdhaW5zdCBs aWJmb28uc28sIHdoaWNoIGlzCi0rIyBwb2luaW5nIGF0IGxpYmZvb18xLnNvLiAgSnVzdCB0byBj b25mdXNlIHRoaW5ncyBldmVuIG1vcmUsIHRoaXMKLSsjIGV4ZWN1dGFibGUgdXNlcyBkbG9wZW4g dG8gbG9hZCBsaWJmb29fMi5zby4gIFdlaXJkIQotK2lmIHsgW2J1aWxkX2V4ZWN1dGFibGUgImJ1 aWxkIGV4ZWN1dGFibGUiICR7YmluZmlsZX0gJHtzcmNmaWxlMn0gXAotKwkgIFtsaXN0IGRlYnVn IHNobGliPSR7bGlicmFyeV9maWxlbmFtZX0gc2hsaWJfbG9hZF1dID09IC0xIH0gewotKyAgICBy ZXR1cm4KLSt9Ci0rCi0rIyBJZiB0aGUgYm9hcmQgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IHNwbGl0 dGluZyB0aGUgZGVidWcgaW5mb3JtYXRpb24KLSsjIGludG8gYSBzZXBhcmF0ZSBmaWxlIChlLmcu IHRoZSBjYy13aXRoLWdudS1kZWJ1Z2xpbmsuZXhwIGJvYXJkKSB0aGVuCi0rIyB0aGlzIHRlc3Qg aXNuJ3QgZ29pbmcgdG8gd29yay4KLStjbGVhbl9yZXN0YXJ0Ci0rZ2RiX2ZpbGVfY21kICRiaW5m aWxlCi0raWYgeyRnZGJfZmlsZV9jbWRfZGVidWdfaW5mbyBuZSAiZGVidWcifSB7Ci0rICAgIHVu c3VwcG9ydGVkICJmYWlsZWQgdG8gZmluZCBkZWJ1ZyBpbmZvcm1hdGlvbiIKLSsgICAgcmV0dXJu Ci0rfQotK2lmIHtbcmVnZXhwICIke3Rlc3RmaWxlfS5kZWJ1ZyIgJGdkYl9maWxlX2NtZF9tc2dd fSB7Ci0rICAgIHVuc3VwcG9ydGVkICJkZWJ1ZyBpbmZvcm1hdGlvbiBoYXMgYmVlbiBzcGxpdCB0 byBhIHNlcGFyYXRlIGZpbGUiCi0rICAgIHJldHVybgotK30KLSsKLSsjIFJ1biBCSU5GSUxFIHdo aWNoIHdpbGwgZ2VuZXJhdGUgYSBjb3JlZmlsZS4KLStzZXQgY29yZWZpbGUgW2NvcmVfZmluZCAk YmluZmlsZV0KLStpZiB7JGNvcmVmaWxlIGVxICIifSB7Ci0rICAgIHVudGVzdGVkICJjb3VsZCBu b3QgZ2VuZXJhdGUgY29yZSBmaWxlIgotKyAgICByZXR1cm4KLSt9Ci0rCi0rIyBIZWxwZXIgcHJv YyB0byBsb2FkIGdsb2JhbCBCSU5GSUxFIGFuZCB0aGVuIGxvYWQgZ2xvYmFsIENPUkVGSUxFLgot KyMKLSsjIElmIEVYUEVDVF9XQVJOSU5HIGlzIHRydWUgdGhlbiB3ZSByZXF1aXJlIGEgd2Fybmlu ZyBhYm91dCBiZWluZwotKyMgdW5hYmxlIHRvIGxvYWQgdGhlIHNoYXJlZCBsaWJyYXJ5IHN5bWJv bHMsIG90aGVyd2lzZSwgRVhQRUNUX1dBUk5JTkcKLSsjIGlzIGZhbHNlIGFuZCB3ZSByZXF1aXJl IG5vIHdhcm5pbmcuCi0rIwotKyMgSWYgRVhQRUNUX0RPV05MT0FEIGlzIHRydWUgdGhlbiB3ZSBy ZXF1aXJlIGEgbGluZSBpbmRpY2F0aW5nIHRoYXQKLSsjIHRoZSBzaGFyZWQgbGlicmFyeSBpcyBi ZWluZyBkb3dubG9hZGVkIGZyb20gZGVidWdpbmZvZCwgb3RoZXJ3aXNlCi0rIyB0aGUgc2hhcmVk IGxpYnJhcnkgc2hvdWxkIG5vdCBiZSBkb3dubG9hZGVkLgotKyMKLSsjIElmIERFQlVHRElSIGlz IG5vdCB0aGUgZW1wdHkgc3RyaW5nIHRoZW4gJ2RlYnVnLWZpbGUtZGlyZWN0b3J5JyBpcwotKyMg c2V0IHRvIHRoZSB2YWx1ZSBvZiBERUJVR0RJUi4KLStwcm9jIGxvYWRfZXhlY19hbmRfY29yZV9m aWxlIHsgZXhwZWN0X3dhcm5pbmcgZXhwZWN0X2Rvd25sb2FkIHRlc3RuYW1lIFwKLSsJCQkJICAg e2RlYnVnZGlyICIifSB9IHsKLSsgICAgd2l0aF90ZXN0X3ByZWZpeCAkdGVzdG5hbWUgewotKwlj bGVhbl9yZXN0YXJ0ICQ6OmJpbmZpbGUKLSsKLSsJaWYgeyAkZGVidWdkaXIgbmUgIiIgfSB7Ci0r CSAgICBnZGJfdGVzdF9ub19vdXRwdXQgInNldCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSAkZGVidWdk aXIiIFwKLSsJCSJzZXQgZGVidWcgZGlyZWN0b3J5IgotKwl9Ci0rCi0rCXNldCBzYXdfd2Fybmlu ZyBmYWxzZQotKwlzZXQgc2F3X2Rvd25sb2FkIGZhbHNlCi0rCXNldCBzYXdfZ2VuZXJhdGVkIGZh bHNlCi0rCXNldCBzYXdfdGVybWluYXRlZCBmYWxzZQotKwotKwlnZGJfdGVzdF9tdWx0aXBsZSAi Y29yZS1maWxlICQ6OmNvcmVmaWxlIiAibG9hZCBjb3JlIGZpbGUiIHsKLSsJICAgIC1yZSAiXkNv cmUgd2FzIGdlbmVyYXRlZCBieSBcW15cclxuXF0rXHJcbiIgewotKwkJc2V0IHNhd19nZW5lcmF0 ZWQgdHJ1ZQotKwkJZXhwX2NvbnRpbnVlCi0rCSAgICB9Ci0rCSAgICAtcmUgIl5Qcm9ncmFtIHRl cm1pbmF0ZWQgd2l0aCBzaWduYWwgXFteXHJcblxdK1xyXG4iIHsKLSsJCXNldCBzYXdfdGVybWlu YXRlZCB0cnVlCi0rCQlleHBfY29udGludWUKLSsJICAgIH0KLSsJICAgIC1yZSAiXndhcm5pbmc6 IENhbid0IG9wZW4gZmlsZSBcW15cclxuXF0rIGR1cmluZyBmaWxlLWJhY2tlZCBtYXBwaW5nIG5v dGUgcHJvY2Vzc2luZ1xyXG4iIHsKLSsJCSMgSWdub3JlIHdhcm5pbmdzIGZyb20gdGhlIGZpbGUg YmFja2VkIG1hcHBpbmcgcGhhc2UuCi0rCQlleHBfY29udGludWUKLSsJICAgIH0KLSsJICAgIC1y ZSAiXndhcm5pbmc6IENvdWxkIG5vdCBsb2FkIHNoYXJlZCBsaWJyYXJ5IHN5bWJvbHMgZm9yIFxb XlxyXG5cXSsvbGliZm9vXFwuc29cXC5cclxuIiB7Ci0rCQlzZXQgc2F3X3dhcm5pbmcgdHJ1ZQot KwkJZXhwX2NvbnRpbnVlCi0rCSAgICB9Ci0rCSAgICAtcmUgIl5Eb3dubG9hZGluZyBmaWxlIFxb XlxyXG5cXSsvbGliZm9vXzFcXC5zb1xcLlxcLlxcLlxyXG4iIHsKLSsJCXNldCBzYXdfZG93bmxv YWQgdHJ1ZQotKwkJZXhwX2NvbnRpbnVlCi0rCSAgICB9Ci0rCSAgICAtcmUgIl4kOjpnZGJfcHJv bXB0ICQiIHsKLSsJCWdkYl9hc3NlcnQgeyAkc2F3X2dlbmVyYXRlZCAmJiAkc2F3X3Rlcm1pbmF0 ZWQgXAotKwkJCQkgJiYgJHNhd193YXJuaW5nID09ICRleHBlY3Rfd2FybmluZyBcCi0rCQkJCSAm JiAkc2F3X2Rvd25sb2FkID09ICRleHBlY3RfZG93bmxvYWQgfSBcCi0rCQkgICAgJGdkYl90ZXN0 X25hbWUKLSsJICAgIH0KLSsJICAgIC1yZSAiXlxbXlxyXG5cXSpcclxuIiB7Ci0rCQlleHBfY29u dGludWUKLSsJICAgIH0KLSsJfQotKwotKwkjIElmIHdlIGRvbid0IGV4cGVjdCBhIHdhcm5pbmcg dGhlbiBkZWJ1ZyBzeW1ib2xzIGZyb20gdGhlCi0rCSMgc2hhcmVkIGxpYnJhcnkgc2hvdWxkIGJl IGF2YWlsYWJsZS4gIENvbmZpcm0gd2UgY2FuIHJlYWQgYQotKwkjIHZhcmlhYmxlIGZyb20gdGhl IHNoYXJlZCBsaWJyYXJ5LiAgSWYgd2UgZG8gZXhwZWN0IGEgd2FybmluZwotKwkjIHRoZW4gdGhl IHNoYXJlZCBsaWJyYXJ5IGRlYnVnIHN5bWJvbHMgaGF2ZSBub3QgbG9hZGVkLCBhbmQKLSsJIyB0 aGUgbGlicmFyeSB2YXJpYWJsZSBzaG91bGQgbm90IGJlIGF2YWlsYWJsZS4KLSsJaWYgeyAhJGV4 cGVjdF93YXJuaW5nIH0gewotKwkgICAgZ2RiX3Rlc3QgInByaW50L3ggbGlicmFyeV8xX3ZhciIg IiA9IDB4MTIzNDU2NzgiIFwKLSsJCSJjaGVjayBsaWJyYXJ5XzFfdmFyIGNhbiBiZSByZWFkIgot Kwl9IGVsc2UgewotKwkgICAgZ2RiX3Rlc3QgInByaW50L3ggbGlicmFyeV8xX3ZhciIgXAotKwkJ Il5ObyBzeW1ib2wgXCJsaWJyYXJ5XzFfdmFyXCIgaW4gY3VycmVudCBjb250ZXh0XFwuIiBcCi0r CQkiY2hlY2sgbGlicmFyeV8xX3ZhciBjYW5ub3QgYmUgcmVhZCIKLSsJfQotKyAgICB9Ci0rfQot KwotKyMgSW5pdGlhbCB0ZXN0LCBqdXN0IGxvYWQgdGhlIGV4ZWN1dGFibGUgYW5kIGNvcmUgZmls ZS4gIEF0IHRoaXMgcG9pbnQKLSsjIGV2ZXJ5dGhpbmcgc2hvdWxkIGxvYWQgZmluZSBhcyBldmVy eXRoaW5nIGlzIHdoZXJlIHdlIGV4cGVjdCB0byBmaW5kCi0rIyBpdC4KLStsb2FkX2V4ZWNfYW5k X2NvcmVfZmlsZSBmYWxzZSBmYWxzZSBcCi0rICAgICJsb2FkIGNvcmUgZmlsZSwgYWxsIGxpYnJh cmllcyBhcyBleHBlY3RlZCIKLSsKLSsjIFVwZGF0ZSBsaWJmb28uc28gc3ltbGluayB0byBwb2lu dCBhdCB0aGUgc2Vjb25kIGxpYnJhcnkgdGhlbiByZWxvYWQKLSsjIHRoZSBjb3JlIGZpbGUuICBH REIgc2hvdWxkIHNwb3QgdGhhdCB0aGUgc3ltbGluayBwb2ludHMgdG8gdGhlIHdyb25nCi0rIyBm aWxlLCBidXQgc2hvdWxkIGJlIGFibGUgdG8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBmaWxlIHRv IGxvYWQgYXMKLSsjIHRoZSByaWdodCBmaWxlIHdpbGwgYmUgaW4gdGhlIG1hcHBlZCBmaWxlIGxp c3QuCi0rc2V0IHN0YXR1cyBbcmVtb3RlX2V4ZWMgYnVpbGQgXAotKwkJImxuIC1zZiAke2xpYnJh cnlfMl9maWxlbmFtZX0gJHtsaWJyYXJ5X2ZpbGVuYW1lfSJdCi0rZ2RiX2Fzc2VydCB7IFtsaW5k ZXggJHN0YXR1cyAwXSA9PSAwIH0gXAotKyAgICAidXBkYXRlIGxpYnJhcnkgc3ltbGluayB0byBw b2ludCB0byB0aGUgd3JvbmcgZmlsZSIKLSsKLStsb2FkX2V4ZWNfYW5kX2NvcmVfZmlsZSBmYWxz ZSBmYWxzZSBcCi0rICAgICJsb2FkIGNvcmUgZmlsZSwgc3ltbGluayBwb2ludHMgdG8gd3Jvbmcg ZmlsZSIKLSsKLSsjIFJlbW92ZSBsaWJmb28uc28gc3ltbGluayBhbmQgcmVsb2FkIHRoZSBjb3Jl IGZpbGUuICBBcyBpbiB0aGUKLSsjIHByZXZpb3VzIHRlc3QgR0RCIHNob3VsZCBiZSBhYmxlIHRv IGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgZmlsZSB0bwotKyMgbG9hZCBhcyB0aGUgY29ycmVjdCBm aWxlIHdpbGwgc3RpbGwgYXBwZWFyIGluIHRoZSBtYXBwZWQgZmlsZSBsaXN0LgotK3NldCBzdGF0 dXMgW3JlbW90ZV9leGVjIGJ1aWxkICJybSAtZiAke2xpYnJhcnlfZmlsZW5hbWV9Il0KLStnZGJf YXNzZXJ0IHsgW2xpbmRleCAkc3RhdHVzIDBdID09IDAgfSAicmVtb3ZlIGxpYnJhcnkgc3ltbGlu ayIKLSsKLStsb2FkX2V4ZWNfYW5kX2NvcmVfZmlsZSBmYWxzZSBmYWxzZSBcCi0rICAgICJsb2Fk IGNvcmUgZmlsZSwgc3ltbGluayByZW1vdmVkIgotKwotKyMgUmVtb3ZlIExJQlJBUllfMV9GSUxF TkFNRS4gIFdlJ2xsIG5vdyBzZWUgYSB3YXJuaW5nIHRoYXQgdGhlIG1hcHBlZAotKyMgZmlsZSBj YW4ndCBiZSBsb2FkZWQgKHdlIGlnbm9yZSB0aGF0IHdhcm5pbmcpLCBhbmQgd2UnbGwgc2VlIGEK LSsjIHdhcm5pbmcgdGhhdCB0aGUgc2hhcmVkIGxpYnJhcnkgY2FuJ3QgYmUgbG9hZGVkLgotK3Nl dCBsaWJyYXJ5XzFfYmFja3VwX2ZpbGVuYW1lICR7bGlicmFyeV8xX2ZpbGVuYW1lfS5iYWNrdXAK LStzZXQgc3RhdHVzIFwKLSsgICAgW3JlbW90ZV9leGVjIGJ1aWxkIFwKLSsJICJtdiAke2xpYnJh cnlfMV9maWxlbmFtZX0gJHtsaWJyYXJ5XzFfYmFja3VwX2ZpbGVuYW1lfSJdCi0rZ2RiX2Fzc2Vy dCB7IFtsaW5kZXggJHN0YXR1cyAwXSA9PSAwIH0gXAotKyAgICAicmVtb3ZlIGxpYmZvb18xLnNv IgotKwotK2xvYWRfZXhlY19hbmRfY29yZV9maWxlIHRydWUgZmFsc2UgXAotKyAgICAibG9hZCBj b3JlIGZpbGUsIGxpYmZvb18xLnNvIHJlbW92ZWQiCi0rCi0rIyBTeW1saW5rIHRoZSAuYnVpbGQt aWQveHgveHh4Li4ueHh4IGZpbGVuYW1lIHdpdGhpbiB0aGUgZGVidWcKLSsjIGRpcmVjdG9yeSB0 byBMSUJSQVJZXzFfQkFDS1VQX0ZJTEVOQU1FLCBub3cgd2hlbiB3ZSByZXN0YXJ0IEdEQiBpdAot KyMgc2hvdWxkIGZpbmQgdGhlIG1pc3NpbmcgbGlicmFyeSB3aXRoaW4gdGhlIGRlYnVnIGRpcmVj dG9yeS4KLStzZXQgZGVidWdkaXIgW3N0YW5kYXJkX291dHB1dF9maWxlICJkZWJ1Z2RpciJdCi0r c2V0IGJ1aWxkX2lkX2ZpbGVuYW1lIFwKLSsgICAgJGRlYnVnZGlyL1tidWlsZF9pZF9kZWJ1Z19m aWxlbmFtZV9nZXQgJGxpYnJhcnlfMV9iYWNrdXBfZmlsZW5hbWUgIiJdCi0rc2V0IHN0YXR1cyBc Ci0rICAgIFtyZW1vdGVfZXhlYyBidWlsZCBcCi0rCSAibWtkaXIgLXAgW2ZpbGUgZGlybmFtZSAk YnVpbGRfaWRfZmlsZW5hbWVdIl0KLStnZGJfYXNzZXJ0IHsgW2xpbmRleCAkc3RhdHVzIDBdID09 IDAgfSBcCi0rICAgICJjcmVhdGUgc3ViLWRpcmVjdG9yeSB3aXRoaW4gdGhlIGRlYnVnIGRpcmVj dG9yeSIKLStzZXQgc3RhdHVzIFwKLSsgICAgW3JlbW90ZV9leGVjIGJ1aWxkIFwKLSsJICJsbiAt c2YgJGxpYnJhcnlfMV9iYWNrdXBfZmlsZW5hbWUgJGJ1aWxkX2lkX2ZpbGVuYW1lIl0KLStnZGJf YXNzZXJ0IHsgW2xpbmRleCAkc3RhdHVzIDBdID09IDAgfSBcCi0rICAgICJjcmVhdGUgc3ltbGlu ayB3aXRoaW4gdGhlIGRlYnVnIGRpcmVjdG9yeSAiCi0rCi0rbG9hZF9leGVjX2FuZF9jb3JlX2Zp bGUgZmFsc2UgZmFsc2UgXAotKyAgICAibG9hZCBjb3JlIGZpbGUsIGZpbmQgbGliZm9vXzEuc28g dGhyb3VnaCBkZWJ1Zy1maWxlLWRpcmVjdG9yeSIgXAotKyAgICAkZGVidWdkaXIKLSsKLSsjIFNl dHVwIGEgZGVidWdpbmZvZCBzZXJ2ZXIgd2hpY2ggY2FuIHNlcnZlIHRoZSBvcmlnaW5hbCBzaGFy ZWQKLSsjIGxpYnJhcnkgZmlsZS4KLStpZiB7IVthbGxvd19kZWJ1Z2luZm9kX3Rlc3RzXX0gewot KyAgICB1bnRlc3RlZCAic2tpcHBpZyBkZWJ1Z2luZm9kIHBhcnRzIG9mIHRoaXMgdGVzdCIKLSsg ICAgcmV0dXJuCi0rfQotKwotK3NldCBzZXJ2ZXJfZGlyIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAi ZGVidWdpbmZvZC5zZXJ2ZXIiXQotK2ZpbGUgbWtkaXIgJHNlcnZlcl9kaXIKLStmaWxlIHJlbmFt ZSAtZm9yY2UgJGxpYnJhcnlfMV9iYWNrdXBfZmlsZW5hbWUgJHNlcnZlcl9kaXIKLSsKLStwcmVw YXJlX2Zvcl9kZWJ1Z2luZm9kIGNhY2hlIGRiCi0rCi0rc2V0IHVybCBbc3RhcnRfZGVidWdpbmZv ZCAkZGIgJHNlcnZlcl9kaXJdCi0raWYgeyAkdXJsIGVxICIiIH0gewotKyAgICB1bnJlc29sdmVk ICJmYWlsZWQgdG8gc3RhcnQgZGVidWdpbmZvZCBzZXJ2ZXIiCi0rICAgIHJldHVybgotK30KLSsK LSt3aXRoX2RlYnVnaW5mb2RfZW52ICRjYWNoZSB7Ci0rICAgIHNldGVudiBERUJVR0lORk9EX1VS TFMgJHVybAotKwotKyAgICBzYXZlX3ZhcnMgeyBHREJGTEFHUyB9IHsKLSsJYXBwZW5kIEdEQkZM QUdTICIgLWV4IFwic2V0IGRlYnVnaW5mb2QgZW5hYmxlZCBvblwiIgotKwotKwkjIFJlbG9hZCB0 aGUgZXhlY3V0YWJsZSBhbmQgY29yZSBmaWxlLiAgR0RCIHNob3VsZCBkb3dubG9hZAotKwkjIHRo ZSBmaWxlIGxpYmZvb18xLnNvIHVzaW5nIGRlYnVnaW5mb2QgZHVyaW5nIHRoZSBtYXBwZWQgZmls ZQotKwkjIHBoYXNlLCBidXQgc2hvdWxkIHRoZW4gcmV1c2UgdGhhdCBkb3dubG9hZCBkdXJpbmcg dGhlIHNoYXJlZAotKwkjIGxpYnJhcnkgcGhhc2UuCi0rCWxvYWRfZXhlY19hbmRfY29yZV9maWxl IGZhbHNlIHRydWUgXAotKwkgICAgImxvYWQgY29yZSBmaWxlLCB1c2UgZGVidWdpbmZvZCIKLSsg ICAgfQotK30KLSsKLStzdG9wX2RlYnVnaW5mb2QKLWRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRl L2dkYi5kd2FyZjIvc2hvcnQtYnVpbGQtaWQuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuZHdhcmYy L3Nob3J0LWJ1aWxkLWlkLmV4cAotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwK LSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmR3YXJmMi9zaG9ydC1idWlsZC1pZC5leHAKLUBAIC0w LDAgKzEsMTE5IEBACi0rIyBDb3B5cmlnaHQgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsjIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0r IyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKyMKLSsjIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyMg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKLSsjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKLSsjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0rIwotKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYg bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotKwotKyMgQ3JlYXRlIGEg ZmlsZSB3aXRoIGFuIGFydGlmaWNpYWxseSBzaG9ydCAoMS1ieXRlKSBidWlsZC1pZCwgYW5kCi0r IyBjaGVjayB0aGF0IEdEQiBkb2Vzbid0IHRyeSB0byBsb2FkIGRlYnVnIGluZm9ybWF0aW9uLiAg SWYgd2UgZG8gdHJ5Ci0rIyB0aGVuIHdlIGVuZCB1cCBsb2FkaW5nIGZyb206IGBkZWJ1Zy1kaXJl Y3RvcnkvLmJ1aWxkLWlkL3h4Ly5kZWJ1Z2AKLSsjIHdoaWNoIGlzbid0IHJpZ2h0LgotKwotK2xv YWRfbGliIGR3YXJmLmV4cAotKwotKyMgVGhpcyB0ZXN0IGNhbiBvbmx5IGJlIHJ1biBvbiB0YXJn ZXRzIHdoaWNoIHN1cHBvcnQgRFdBUkYtMiBhbmQgdXNlIGdhcy4KLStyZXF1aXJlIGR3YXJmMl9z dXBwb3J0Ci0rCi0rIyBObyByZW1vdGUgaG9zdCB0ZXN0aW5nIGVpdGhlci4KLStyZXF1aXJlIHsh aXNfcmVtb3RlIGhvc3R9Ci0rCi0rc3RhbmRhcmRfdGVzdGZpbGUgbWFpbi5jCi0rCi0rIyBDcmVh dGUgYW4gYXNzZW1ibGVyIGZpbGUgd2hpY2ggZW5jb2RlcyBCVUlMRElEIGFzIHRoZSBidWlsZC1p ZC4gIENvbXBpbGUKLSsjIHRoaXMgYWxvbmcgd2l0aCB0aGUgZ2xvYmFsIFNSQ0ZJTEUgdG8gY3Jl YXRlIGEgdGVzdCBleGVjdXRhYmxlLgotKyMKLSsjIFNwbGl0IHRoZSBkZWJ1ZyBpbmZvcm1hdGlv biBvdXQgZnJvbSB0aGUgbmV3bHkgY3JlYXRlZCBleGVjdXRhYmxlIGFuZCBwbGFjZQotKyMgaXQg aW50byB0aGUgZGVidWcgZmlsZSBkaXJlY3RvcnkuCi0rIwotKyMgTG9hZCB0aGUgZXhlY3V0YWJs ZSBpbnRvIEdEQiBhbmQgY2hlY2sgdG8gc2VlIGlmIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiB3YXMK LSsjIGxvYWRlZCBvciBub3QuICBGb3IgdGhpcyB0ZXN0IHdlIGFyZSBleHBlY3RpbmcgdGhhdCB0 aGUgZGVidWcgaW5mb3JtYXRpb24KLSsjIHdhcyBub3QgbG9hZGVkLiAgVGhlIHJlYXNvbiBpcyB0 aGF0LCB3aXRoIHNob3J0IHZhbHVlcyBmb3IgQlVJTERJRCwgR0RCIGVuZHMKLSsjIHVwIGxvb2tp bmcgZm9yIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpbiB3ZWlyZCBsb2NhdGlvbnMuCi0rcHJvYyBy dW5fdGVzdCB7IGJ1aWxkaWQgfSB7Ci0rICAgIHNldCBsZW4gW3N0cmluZyBsZW5ndGggJGJ1aWxk aWRdCi0rCi0rICAgIHNldCBhc21fZmlsZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgIiQ6OnRlc3Rm aWxlLiRsZW4uUyJdCi0rICAgIER3YXJmOjphc3NlbWJsZSAkYXNtX2ZpbGUgewotKwlkZWNsYXJl X2xhYmVscyBpbnRfbGFiZWwgaW50X2xhYmVsMgotKwotKwl1cHZhciBidWlsZGlkIGJ1aWxkaWQK LSsKLSsJYnVpbGRfaWQgJGJ1aWxkaWQKLSsKLSsJY3UgeyBsYWJlbCBjdV9zdGFydCB9IHsKLSsJ ICAgIGNvbXBpbGVfdW5pdCB7e2xhbmd1YWdlIEBEV19MQU5HX0N9fSB7Ci0rCQlpbnRfbGFiZWwy OiBiYXNlX3R5cGUgewotKwkJICAgIHtuYW1lIGludH0KLSsJCSAgICB7Ynl0ZV9zaXplIDQgc2Rh dGF9Ci0rCQkgICAge2VuY29kaW5nIEBEV19BVEVfc2lnbmVkfQotKwkJfQotKwotKwkJY29uc3Rh bnQgewotKwkJICAgIHtuYW1lIHRoZV9pbnR9Ci0rCQkgICAge3R5cGUgOiRpbnRfbGFiZWwyfQot KwkJICAgIHtjb25zdF92YWx1ZSA5OSBkYXRhMX0KLSsJCX0KLSsJICAgIH0KLSsJfQotKwotKwlh cmFuZ2VzIHt9IGN1X3N0YXJ0IHsKLSsJICAgIGFyYW5nZSB7fSAwIDAKLSsJfQotKyAgICB9Ci0r Ci0rICAgIHNldCBleGVjZmlsZSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgJDo6dGVzdGZpbGUuJGxl bl0KLSsKLSsgICAgaWYgeyBbYnVpbGRfZXhlY3V0YWJsZV9mcm9tX3NwZWNzICJmYWlsZWQgdG8g YnVpbGQiIFwKLSsJICAgICAgJGV4ZWNmaWxlIHtkZWJ1ZyBuby1idWlsZC1pZH0gXAotKwkgICAg ICAkOjpzcmNmaWxlIGRlYnVnIFwKLSsJICAgICAgJGFzbV9maWxlIHt9XSB9IHsKLSsJcmV0dXJu Ci0rICAgIH0KLSsKLSsgICAgIyBDcmVhdGUgdGhlIGRlYnVnIGRpcmVjdG9yeS4KLSsgICAgc2V0 IGRlYnVnZGlyIFtzdGFuZGFyZF9vdXRwdXRfZmlsZSAiZGVidWdkaXIuJGxlbiJdCi0rICAgIHNl dCBidWlsZF9pZF9kaXIgJGRlYnVnZGlyLy5idWlsZC1pZC8kYnVpbGRpZAotKyAgICByZW1vdGVf ZXhlYyBob3N0ICJta2RpciAtcCAkYnVpbGRfaWRfZGlyIgotKwotKyAgICAjIFNwbGl0IG91dCB0 aGUgZGVidWcgaW5mb3JtYXRpb24uCi0rICAgIGlmIHtbZ2RiX2dudV9zdHJpcF9kZWJ1ZyAkZXhl Y2ZpbGUgbm8tZGVidWdsaW5rXX0gewotKwl1bnJlc29sdmVkICJmYWlsZWQgdG8gc3BsaXQgb3V0 IGRlYnVnIGluZm9ybWF0aW9uIgotKwlyZXR1cm4KLSsgICAgfQotKwotKyAgICAjIE1vdmUgdGhl IGRlYnVnIGluZm9ybWF0aW9uIGludG8gdGhlIGRlYnVnIGRpcmVjdG9yeS4gIFdlIHBsYWNlIHRo ZSBkZWJ1ZwotKyAgICAjIGluZm9ybWF0aW9uIGludG8gYSBmaWxlIGNhbGxlZCBqdXN0ICcuZGVi dWcnLiAgR0RCIHNob3VsZCBub3QgY2hlY2sgdGhpcwotKyAgICAjIGZpbGUsIGJ1dCBhdCBvbmUg cG9pbnQgR0RCIHdvdWxkIGNoZWNrIHRoaXMgZmlsZSwgZXZlbiB0aG91Z2ggdGhpcwotKyAgICAj IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlLgotKyAgICBzZXQgZXhlY2ZpbGVfZGVidWcgJHtleGVj ZmlsZX0uZGVidWcKLSsgICAgcmVtb3RlX2V4ZWMgaG9zdCAibXYgJGV4ZWNmaWxlX2RlYnVnICRi dWlsZF9pZF9kaXIvLmRlYnVnIgotKwotKyAgICAjIFN0YXJ0IEdEQiwgc2V0IHRoZSBkZWJ1Zy1m aWxlLWRpcmVjdG9yeSwgYW5kIHRyeSBsb2FkaW5nIHRoZSBmaWxlLgotKyAgICBjbGVhbl9yZXN0 YXJ0Ci0rCi0rICAgIGdkYl90ZXN0X25vX291dHB1dCAic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5 ICRkZWJ1Z2RpciIgXAotKwkic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5IgotKwotKyAgICBnZGJf ZmlsZV9jbWQgJGV4ZWNmaWxlCi0rCi0rICAgIGdkYl9hc3NlcnQgeyAkOjpnZGJfZmlsZV9jbWRf ZGVidWdfaW5mbyBlcSAibm9kZWJ1ZyIgfSBcCi0rCSJubyBkZWJ1ZyBzaG91bGQgYmUgbG9hZGVk IgotKwotKyAgICAjIEZvciBzYW5pdHksIHJlYWQgc29tZXRoaW5nIHRoYXQgd2FzIGVuY29kZWQg aW4gdGhlIGRlYnVnCi0rICAgICMgaW5mb3JtYXRpb24sIHRoaXMgc2hvdWxkIGZhaWwuCi0rICAg IGdkYl90ZXN0ICJwcmludCB0aGVfaW50IiBcCi0rCSIoPzpObyBzeW1ib2wgdGFibGUgaXMgbG9h ZGVkfE5vIHN5bWJvbCBcInRoZV9pbnRcIiBpbiBjdXJyZW50IGNvbnRleHQpLioiCi0rfQotKwot K2ZvcmVhY2hfd2l0aF9wcmVmaXggYnVpbGRpZCB7IGE0ICIiIH0gewotKyAgICBydW5fdGVzdCAk YnVpbGRpZAotK30KLWRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktbWlz c2luZy1vYmpmaWxlLWxpYi5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3Npbmct b2JqZmlsZS1saWIuYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBi L2dkYi90ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUtbGliLmMKLUBAIC0w LDAgKzEsMzUgQEAKLSsvKiBUaGlzIHRlc3QgcHJvZ3JhbSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdO VSBkZWJ1Z2dlci4KLSsKLSsgICBDb3B5cmlnaHQgMjAyNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rICAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKLSsgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKwotKyAgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsgICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0r Ci0rc3RydWN0IGxpYl90eXBlCi0rewotKyAgaW50IGE7Ci0rICBpbnQgYjsKLSt9OwotKwotK3Zv bGF0aWxlIHN0cnVjdCBsaWJfdHlwZSBnbG9iYWxfbGliX3ZhciA9IHsgMCwgMCB9OwotKwotK2lu dAotK2ZvbyAodm9pZCkKLSt7Ci0rICBpbnQgcmVzID0gMDsKLSsKLSsgIHJlcyArPSBnbG9iYWxf bGliX3Zhci5hOwotKyAgcmVzICs9IGdsb2JhbF9saWJfdmFyLmI7Ci0rCi0rICByZXR1cm4gMDsK LSt9Ci1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3Npbmctb2Jq ZmlsZS5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3Npbmctb2JqZmlsZS5jCi1u ZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0tIC9kZXYvbnVsbAotKysrIGIvZ2RiL3Rlc3RzdWl0ZS9n ZGIucHl0aG9uL3B5LW1pc3Npbmctb2JqZmlsZS5jCi1AQCAtMCwwICsxLDQ5IEBACi0rLyogVGhp cyB0ZXN0IHByb2dyYW0gaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCi0rCi0rICAg Q29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rICAgVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKLSsgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICAgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKLSsgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwot KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCi0rICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotKwotKyNpbmNsdWRlIDxzdGRsaWIu aD4KLSsKLStzdHJ1Y3QgZXhlY190eXBlCi0rewotKyAgaW50IGE7Ci0rICBpbnQgYjsKLSsgIGlu dCBjOwotK307Ci0rCi0rdm9sYXRpbGUgc3RydWN0IGV4ZWNfdHlwZSBnbG9iYWxfZXhlY192YXIg PSB7IDAsIDAsIDAgfTsKLSsKLStleHRlcm4gaW50IGZvbyAodm9pZCk7Ci0rCi0rdm9pZAotK2R1 bXBfY29yZSAodm9pZCkKLSt7Ci0rICBhYm9ydCAoKTsKLSt9Ci0rCi0raW50Ci0rbWFpbiAodm9p ZCkKLSt7Ci0rICBpbnQgcmVzID0gZm9vICgpOwotKwotKyAgcmVzICs9IGdsb2JhbF9leGVjX3Zh ci5hOwotKyAgcmVzICs9IGdsb2JhbF9leGVjX3Zhci5iOwotKyAgcmVzICs9IGdsb2JhbF9leGVj X3Zhci5jOwotKwotKyAgZHVtcF9jb3JlICgpOwotKwotKyAgcmV0dXJuIHJlczsKLSt9Ci1kaWZm IC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3Npbmctb2JqZmlsZS5leHAg Yi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHktbWlzc2luZy1vYmpmaWxlLmV4cAotbmV3IGZp bGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnB5 dGhvbi9weS1taXNzaW5nLW9iamZpbGUuZXhwCi1AQCAtMCwwICsxLDU2NSBAQAotKyMgQ29weXJp Z2h0IChDKSAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKwotKyMgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSsjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rIyBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rIyBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyMKLSsjIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCi0rIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4KLSsKLStsb2FkX2xpYiBnZGItcHl0aG9uLmV4cAotKwotK3Jl cXVpcmUgYWxsb3dfcHl0aG9uX3Rlc3RzCi0rcmVxdWlyZSB7IWlzX3JlbW90ZSBob3N0fQotKwot K3N0YW5kYXJkX3Rlc3RmaWxlIC5jIC1saWIuYwotKwotKyMgQnVpbGQgdGhlIGxpYnJhcnkuCi0r c2V0IGxpYm5hbWUgJHt0ZXN0ZmlsZX0tbGliCi0rc2V0IGxpYmZpbGUgW3N0YW5kYXJkX291dHB1 dF9maWxlICRsaWJuYW1lXQotK2lmIHsgW2J1aWxkX2V4ZWN1dGFibGUgImJ1aWxkIHNobGliIiAk bGliZmlsZSAkc3JjZmlsZTIgXAotKwkgIHtkZWJ1ZyBzaGxpYiBidWlsZC1pZH1dID09IC0xfSB7 Ci0rICAgIHJldHVybgotK30KLSsKLSsjIEJ1aWxkIHRoZSBleGVjdXRhYmxlLgotK3NldCBvcHRz IFtsaXN0IGRlYnVnIGJ1aWxkLWlkIHNobGliPSR7bGliZmlsZX1dCi0raWYgeyBbYnVpbGRfZXhl Y3V0YWJsZSAiYnVpbGQgZXhlYyIgJGJpbmZpbGUgJHNyY2ZpbGUgJG9wdHNdID09IC0xfSB7Ci0r ICAgIHJldHVybgotK30KLSsKLSsjIFRoZSBjYy13aXRoLWdudS1kZWJ1Z2xpbmsgYm9hcmQgd2ls bCBzcGxpdCB0aGUgZGVidWcgb3V0IGludG8gdGhlCi0rIyAuZGVidWcgZGlyZWN0b3J5LiAgVGhp cyB0ZXN0IHNjcmlwdCByZWxpZXMgb24gaGF2aW5nIEdEQiBsb29rdXAgdGhlCi0rIyBvYmpmaWxl IGFuZCBkZWJ1ZyB2aWEgdGhlIGJ1aWxkLWlkLCB3aGljaCB0aGlzIHRlc3Qgc2V0cyB1cC4gIFRy eWluZwotKyMgdG8gZG8gdGhhdCwgd2hpbGUgYWxzbyBzdXBwb3J0aW5nIHRoZSBjYy13aXRoLWdu dS1kZWJ1Z2xpbmsgYm9hcmQgaXMKLSsjIGp1c3QgdG9vIGNvbXBsaWNhdGVkLgotK2lmIHtbZmls ZSBpc2RpcmVjdG9yeSBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgIi5kZWJ1ZyJdXX0gewotKyAgICB1 bnN1cHBvcnRlZCAic3BsaXQgZGVidWcgdGVzdGluZyBub3Qgc3VwcG9ydGVkIgotKyAgICByZXR1 cm4KLSt9Ci0rCi0rc2V0IHJlbW90ZV9weXRob25fZmlsZSBcCi0rICAgIFtnZGJfcmVtb3RlX2Rv d25sb2FkIGhvc3QgJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfS5weV0KLSsKLSsjIEdl bmVyYXRlIGEgY29yZSBmaWxlLgotK3NldCBjb3JlZmlsZSBbY29yZV9maW5kICRiaW5maWxlIHt9 XQotK2lmIHskY29yZWZpbGUgPT0gIiJ9IHsKLSsgICAgdW5zdXBwb3J0ZWQgImNvcmUgZmlsZSBu b3QgZ2VuZXJhdGVkIgotKyAgICByZXR1cm4gMAotK30KLSsKLSsjIENyZWF0ZSBhIGRpcmVjdG9y eSBuYW1lZCBESVJOQU1FIGZvciB1c2UgYXMgdGhlCi0rIyBkZWJ1Zy1maWxlLWRpcmVjdG9yeS4g IFBvcHVsYXRlIHRoZSBkaXJlY3Rvcnkgd2l0aCBsaW5rcyAoYmFzZWQgb24KLSsjIHRoZSBidWls ZC1pZHMpIHRvIGVhY2ggZmlsZSBpbiB0aGUgbGlzdCBGSUxFUy4KLSsjCi0rIyBSZXR1cm4gdGhl IGZ1bGwgZmlsZW5hbWUgb2YgRElSTkFNRSBvbiB0aGUgaG9zdC4KLStwcm9jIHNldHVwX2RlYnVn ZGlyIHsgZGlybmFtZSBmaWxlcyB9IHsKLSsgICAgc2V0IGRlYnVnZGlyIFtob3N0X3N0YW5kYXJk X291dHB1dF9maWxlICRkaXJuYW1lXQotKwotKyAgICAjIENyZWF0ZSBiYXNpYyBlbXB0eSBkaXJl Y3Rvcnkgc3RydWN0dXJlIChpbiBjYXNlIEZJTEVTIGlzIGVtcHR5KS4KLSsgICAgcmVtb3RlX2V4 ZWMgaG9zdCAibWtkaXIgLXAgJGRlYnVnZGlyLy5idWlsZC1pZC8iCi0rCi0rICAgIGZvcmVhY2gg ZmlsZSAkZmlsZXMgewotKwlzZXQgYnVpbGRfaWRfZmlsZW5hbWUgW2J1aWxkX2lkX2RlYnVnX2Zp bGVuYW1lX2dldCAkZmlsZSAiIl0KLSsKLSsJcmVtb3RlX2V4ZWMgaG9zdCAibWtkaXIgLXAgJGRl YnVnZGlyL1tmaWxlIGRpcm5hbWUgJGJ1aWxkX2lkX2ZpbGVuYW1lXSIKLSsJcmVtb3RlX2V4ZWMg aG9zdCAibG4gLXMgJGZpbGUgJGRlYnVnZGlyLyRidWlsZF9pZF9maWxlbmFtZSIKLSsgICAgfQot KwotKyAgICByZXR1cm4gJGRlYnVnZGlyCi0rfQotKwotKyMgUXVlcnkgc29tZSBzeW1ib2xzIGlu IHRoZSBpbmZlcmlvciB0byBzZWUgaWYgR0RCIG1hbmFnZWQgdG8gZmluZCB0aGUKLSsjIGV4ZWN1 dGFibGUgKHdoZW4gRVhFQ19MT0FERUQgaXMgdHJ1ZSkgYW5kL29yIHRoZSBsaWJyYXJ5ICh3aGVu IExJQl9MT0FERUQKLSsjIGlzIHRydWUpLgotK3Byb2MgY2hlY2tfbG9hZGVkX2RlYnVnIHsgZXhl Y19sb2FkZWQgbGliX2xvYWRlZCB9IHsKLSsgICAgaWYgeyAkZXhlY19sb2FkZWQgfSB7Ci0rCWdk Yl90ZXN0ICJ3aGF0aXMgZ2xvYmFsX2V4ZWNfdmFyIiAiXnR5cGUgPSB2b2xhdGlsZSBzdHJ1Y3Qg ZXhlY190eXBlIgotKwotKwlpZiB7ICRsaWJfbG9hZGVkIH0gewotKwkgICAgZ2RiX3Rlc3QgIndo YXRpcyBnbG9iYWxfbGliX3ZhciIgIl50eXBlID0gdm9sYXRpbGUgc3RydWN0IGxpYl90eXBlIgot Kwl9IGVsc2UgewotKwkgICAgZ2RiX3Rlc3QgIndoYXRpcyBnbG9iYWxfbGliX3ZhciIgXAotKwkJ Il5ObyBzeW1ib2wgXCJnbG9iYWxfbGliX3ZhclwiIGluIGN1cnJlbnQgY29udGV4dFxcLiIKLSsJ fQotKyAgICB9IGVsc2UgewotKwlnZGJfdGVzdCAid2hhdGlzIGdsb2JhbF9leGVjX3ZhciIgXAot KwkgICAgIl5ObyBzeW1ib2wgdGFibGUgaXMgbG9hZGVkXFwuICBVc2UgdGhlIFwiZmlsZVwiIGNv bW1hbmRcXC4iCi0rCWdkYl90ZXN0ICJ3aGF0aXMgZ2xvYmFsX2xpYl92YXIiIFwKLSsJICAgICJe Tm8gc3ltYm9sIHRhYmxlIGlzIGxvYWRlZFxcLiAgVXNlIHRoZSBcImZpbGVcIiBjb21tYW5kXFwu IgotKyAgICB9Ci0rfQotKwotKyMgTG9hZCB0aGUgZ2xvYmFsIGNvcmVmaWxlLiAgVGhlIEVYVFJB X1JFIGlzIGNoZWNrZWQgZm9yIHByaW9yIHRvIEdEQgotKyMgYW5ub3VuY2luZyB0aGF0IHRoZSBj b3JlLWZpbGUgaGFzIGJlZW4gbG9hZGVkLgotK3Byb2MgbG9hZF9jb3JlX2ZpbGUgeyB7ZXh0cmFf cmUgIi4qIn0gfSB7Ci0rICAgIGdkYl90ZXN0ICJjb3JlLWZpbGUgJDo6Y29yZWZpbGUiIFwKLSsJ W211bHRpX2xpbmUgXAotKwkgICAgICIkZXh0cmFfcmUiIFwKLSsJICAgICAiQ29yZSB3YXMgZ2Vu ZXJhdGVkIGJ5IFxbXlxyXG5cXSsiIFwKLSsJICAgICAiUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGgg c2lnbmFsIFNJR0FCUlQsIEFib3J0ZWRcXC4iIFwKLSsJICAgICAiXFteXHJcblxdKyg/OlxyXG5c W15cclxuXF0rKT8iXSBcCi0rCSJsb2FkZWQgdGhlIGNvcmUgZmlsZSIKLSt9Ci0rCi0rIyBTZXQg dGhlIGRlYnVnLWZpbGUtZGlyZWN0b3J5IHRvIERJUk5BTUUuCi0rcHJvYyBzZXRfZGVidWdfZmls ZV9kaXIgeyBkaXJuYW1lIH0gewotKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInNldCBkZWJ1Zy1m aWxlLWRpcmVjdG9yeSAkZGlybmFtZSIgXAotKwkic2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5Igot K30KLSsKLSsjIFJlc3RhcnQgR0RCIGFuZCBsb2FkIHRoZSBzdXBwb3J0IFB5dGhvbiBzY3JpcHQu Ci0rcHJvYyBjbGVhbl9yZXN0YXJ0X2xvYWRfcHl0aG9uIHt9IHsKLSsgICAgY2xlYW5fcmVzdGFy dAotKyAgICBnZGJfdGVzdCAic291cmNlICQ6OnJlbW90ZV9weXRob25fZmlsZSIgIl5TdWNjZXNz IiBcCi0rCSJsb2FkIHB5dGhvbiBzY3JpcHQiCi0rfQotKwotKyMgRm9yIHNhbml0eSwgbGV0cyBj aGVjayB0aGF0IHdlIGNhbiBsb2FkIHRoZSBzcGVjaWZ5IHRoZSBleGVjdXRhYmxlCi0rIyBhbmQg dGhlbiBsb2FkIHRoZSBjb3JlLWZpbGUgdGhlIGVhc3kgd2F5LgotK3dpdGhfdGVzdF9wcmVmaXgg ImluaXRpYWwgc2FuaXR5IGNoZWNrIiB7Ci0rICAgIGNsZWFuX3Jlc3RhcnQgJGJpbmZpbGUKLSsg ICAgbG9hZF9jb3JlX2ZpbGUKLSsgICAgY2hlY2tfbG9hZGVkX2RlYnVnIHRydWUgdHJ1ZQotK30K LSsKLSsjIE1vdmUgdGhlIGV4ZWN1dGFibGUgYW5kIGxpYnJhcnkgaW50byBhIGxvY2F0aW9uIHRo YXQgdGhlIGNvcmUtZmlsZQotKyMgY2FuJ3QgcG9zc2libHkga25vdyBhYm91dC4gIEFmdGVyIHRo aXMgdGhlIG9ubHkgd2F5IEdEQiBjYW4gdHJhY2sKLSsjIGRvd24gdGhlc2UgZmlsZXMgd2lsbCBi ZSBieSBsb29raW5nIGluIHRoZSBkZWJ1Zy1maWxlLWRpcmVjdG9yeS4KLStzZXQgaGlkZGVuX2Rp ciBbaG9zdF9zdGFuZGFyZF9vdXRwdXRfZmlsZSAiaGlkZGVuIl0KLStzZXQgaGlkZGVuX2JpbmZp bGUgIiRoaWRkZW5fZGlyLyR0ZXN0ZmlsZSIKLStzZXQgaGlkZGVuX2xpYmZpbGUgIiRoaWRkZW5f ZGlyLyRsaWJuYW1lIgotK3JlbW90ZV9leGVjIGhvc3QgIm1rZGlyIC1wICRoaWRkZW5fZGlyIgot K3JlbW90ZV9leGVjIGhvc3QgIm12ICRsaWJmaWxlICRoaWRkZW5fbGliZmlsZSIKLStyZW1vdGVf ZXhlYyBob3N0ICJtdiAkYmluZmlsZSAkaGlkZGVuX2JpbmZpbGUiCi0rCi0rIyBJZiB1c2luZyB0 aGUgZmlzc2lvbi1kd3AgYm9hcmQgdGhlbiB3ZSdsbCBoYXZlIC5kd3AgZmlsZXMgdGhhdCBhbHNv Ci0rIyBuZWVkIHRvIGJlIG1vdmVkLgotK2lmIHtbcmVtb3RlX2ZpbGUgaG9zdCBleGlzdHMgJHts aWJmaWxlfS5kd3BdfSB7Ci0rICAgIHJlbW90ZV9leGVjIGhvc3QgIm12ICR7bGliZmlsZX0uZHdw ICR7aGlkZGVuX2xpYmZpbGV9LmR3cCIKLSt9Ci0rCi0raWYge1tyZW1vdGVfZmlsZSBob3N0IGV4 aXN0cyAke2JpbmZpbGV9LmR3cF19IHsKLSsgICAgcmVtb3RlX2V4ZWMgaG9zdCAibXYgJHtiaW5m aWxlfS5kd3AgJHtoaWRkZW5fYmluZmlsZX0uZHdwIgotK30KLSsKLSt3aXRoX3Rlc3RfcHJlZml4 ICJubyBvYmpmaWxlcywgbm8gZGVidWctZmlsZS1kaXJlY3RvcnkiIHsKLSsgICAgY2xlYW5fcmVz dGFydAotKyAgICBsb2FkX2NvcmVfZmlsZQotKyAgICBjaGVja19sb2FkZWRfZGVidWcgZmFsc2Ug ZmFsc2UKLSt9Ci0rCi0rIyBTZXR1cCBzb21lIGRlYnVnLWZpbGUtZGlyZWN0b3JpZXMuCi0rc2V0 IGRlYnVnZGlyX25vX2xpYiBcCi0rICAgIFtzZXR1cF9kZWJ1Z2RpciAiZGVidWdkaXIubm8tbGli IiBbbGlzdCAiJGhpZGRlbl9iaW5maWxlIl1dCi0rc2V0IGRlYnVnZGlyX2VtcHR5IFwKLSsgICAg W3NldHVwX2RlYnVnZGlyICJkZWJ1Z2Rpci5lbXB0eSIge31dCi0rc2V0IGRlYnVnZGlyX2FsbCBc Ci0rICAgIFtzZXR1cF9kZWJ1Z2RpciAiZGVidWdkaXIuYWxsIiBbbGlzdCAiJGhpZGRlbl9saWJm aWxlIiBcCi0rCQkJCQkiJGhpZGRlbl9iaW5maWxlIl1dCi0rCi0rd2l0aF90ZXN0X3ByZWZpeCAi bm8gb2JqZmlsZXMgYXZhaWxhYmxlIiB7Ci0rICAgICMgQW5vdGhlciBzYW5pdHkgY2hlY2sgdGhh dCBHREIgY2FuIGZpbmQgdGhlIGZpbGVzIHZpYSB0aGUKLSsgICAgIyBkZWJ1Zy1maWxlLWRpcmVj dG9yeS4KLSsgICAgY2xlYW5fcmVzdGFydAotKyAgICBzZXRfZGVidWdfZmlsZV9kaXIgJGRlYnVn ZGlyX2VtcHR5Ci0rICAgIGxvYWRfY29yZV9maWxlCi0rICAgIGNoZWNrX2xvYWRlZF9kZWJ1ZyBm YWxzZSBmYWxzZQotK30KLSsKLSt3aXRoX3Rlc3RfcHJlZml4ICJhbGwgb2JqZmlsZXMgYXZhaWxh YmxlIiB7Ci0rICAgICMgQW5vdGhlciBzYW5pdHkgY2hlY2sgdGhhdCBHREIgY2FuIGZpbmQgdGhl IGZpbGVzIHZpYSB0aGUKLSsgICAgIyBkZWJ1Zy1maWxlLWRpcmVjdG9yeS4KLSsgICAgc2V0X2Rl YnVnX2ZpbGVfZGlyICRkZWJ1Z2Rpcl9hbGwKLSsgICAgbG9hZF9jb3JlX2ZpbGUKLSsgICAgY2hl Y2tfbG9hZGVkX2RlYnVnIHRydWUgdHJ1ZQotK30KLSsKLSt3aXRoX3Rlc3RfcHJlZml4ICJsaWIg b2JqZmlsZSBtaXNzaW5nIiB7Ci0rICAgICMgQW5vdGhlciBzYW5pdHkgY2hlY2sgdGhhdCBHREIg Y2FuIGZpbmQgdGhlIGZpbGVzIHZpYSB0aGUKLSsgICAgIyBkZWJ1Zy1maWxlLWRpcmVjdG9yeS4K LSsgICAgc2V0X2RlYnVnX2ZpbGVfZGlyICRkZWJ1Z2Rpcl9ub19saWIKLSsgICAgbG9hZF9jb3Jl X2ZpbGUKLSsgICAgY2hlY2tfbG9hZGVkX2RlYnVnIHRydWUgZmFsc2UKLSt9Ci0rCi0rd2l0aF90 ZXN0X3ByZWZpeCAiYWxsIG9iamZpbGVzIG1pc3NpbmcsIGhhbmRsZXIgcmV0dXJucyBOb25lIiB7 Ci0rICAgIGNsZWFuX3Jlc3RhcnRfbG9hZF9weXRob24KLSsgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0 IFwKLSsJInB5dGhvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIoTm9uZSwg aGFuZGxlcl9vYmopIiBcCi0rCSJyZWdpc3RlciBpbml0aWFsIGhhbmRsZXIiCi0rICAgIGxvYWRf Y29yZV9maWxlCi0rCi0rICAgIGNoZWNrX2xvYWRlZF9kZWJ1ZyBmYWxzZSBmYWxzZQotKwotKyAg ICAjIFRoZSBoYW5kbGVyIHNob3VsZCBiZSBjYWxsZWQgdGhyZWUgdGltZXMsIG9uY2UgZm9yIHRo ZQotKyAgICAjIG1hcHBlZC1maWxlLCBvbmNlIGZvciB0aGUgY29yZS1maWxlJ3MgZXhlYywgYW5k IG9uY2UgZm9yIHRoZQotKyAgICAjIHNoYXJlZCBsaWJyYXJ5LgotKyAgICBnZGJfdGVzdCAicHl0 aG9uIHByaW50KGhhbmRsZXJfb2JqLmNhbGxfY291bnQpIiAiXjMiIFwKLSsJImNoZWNrIGhhbmRs ZXIgd2FzIGNhbGxlZCB0aHJlZSB0aW1lcyIKLSt9Ci0rCi0rd2l0aF90ZXN0X3ByZWZpeCAibGli IG9iamZpbGUgbWlzc2luZywgaGFuZGxlciByZXR1cm5zIE5vbmUiIHsKLSsgICAgIyBSZXNldCBo YW5kbGVyX29iai4KLSsgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJweXRob24gaGFuZGxlcl9vYmou c2V0X21vZGUoTW9kZS5SRVRVUk5fTk9ORSkiCi0rCi0rICAgIHNldF9kZWJ1Z19maWxlX2RpciAk ZGVidWdkaXJfbm9fbGliCi0rICAgIGxvYWRfY29yZV9maWxlCi0rICAgIGNoZWNrX2xvYWRlZF9k ZWJ1ZyB0cnVlIGZhbHNlCi0rCi0rICAgICMgVGhlIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgdHdp Y2UsIG9uY2Ugd2hlbiBHREIgdHJpZXMgdG8KLSsgICAgIyBsb2FkIHRoZSBzaGFyZWQgbGlicmFy eSBkdXJpbmcgdGhlIG1lbW9yeS1tYXBwZWQgZmlsZSBwaGFzZSwKLSsgICAgIyB0aGVuIGFnYWlu IGZvciB0aGUgc2hhcmVkIGxpYnJhcnkgbG9hZGluZy4KLSsgICAgZ2RiX3Rlc3QgInB5dGhvbiBw cmludChoYW5kbGVyX29iai5jYWxsX2NvdW50KSIgIl4yIiBcCi0rCSJjaGVjayBoYW5kbGVyIHdh cyBjYWxsZWQgdGhyZWUgdGltZXMiCi0rfQotKwotK3dpdGhfdGVzdF9wcmVmaXggImhhbmRsZXIg aW5zdGFsbHMgbGliIG9iamZpbGUiIHsKLSsgICAgc2V0IGJ1aWxkX2lkX2ZpbGVuYW1lIFtidWls ZF9pZF9kZWJ1Z19maWxlbmFtZV9nZXQgXAotKwkJCQkgICAkaGlkZGVuX2xpYmZpbGUgIiJdCi0r ICAgIHJlbW90ZV9leGVjIGhvc3QgXAotKwkibWtkaXIgLXAgJGRlYnVnZGlyX25vX2xpYi9bZmls ZSBkaXJuYW1lICRidWlsZF9pZF9maWxlbmFtZV0iCi0rICAgIGdkYl90ZXN0X25vX291dHB1dCAi cHl0aG9uIGhhbmRsZXJfb2JqLnNldF9tb2RlKE1vZGUuUkVUVVJOX1RSVUUsIFwKLSsgICAgCVwi JGhpZGRlbl9saWJmaWxlXCIsIFwiJGRlYnVnZGlyX25vX2xpYi8kYnVpbGRfaWRfZmlsZW5hbWVc IikiIFwKLSsJImNvbmZpZ3VyZSBoYW5kbGVyIgotKwotKyAgICBsb2FkX2NvcmVfZmlsZQotKyAg ICBjaGVja19sb2FkZWRfZGVidWcgdHJ1ZSB0cnVlCi0rCi0rICAgICMgQ2xlYW51cCBzbyB0aGUg dGVzdCBjYW4gYmUgcmVwcm9kdWNlZCBhZ2FpbiBsYXRlciBpZiBuZWVkZWQuCi0rICAgIHJlbW90 ZV9leGVjIGhvc3QgInJtICRkZWJ1Z2Rpcl9ub19saWIvJGJ1aWxkX2lkX2ZpbGVuYW1lIgotK30K LSsKLSt3aXRoX3Rlc3RfcHJlZml4ICJoYW5kbGVyIHBvaW50cyB0byBsaWIgb2JqZmlsZSIgewot KyAgICBzZXQgYnVpbGRfaWRfZmlsZW5hbWUgW2J1aWxkX2lkX2RlYnVnX2ZpbGVuYW1lX2dldCBc Ci0rCQkJICAgICAgICRoaWRkZW5fbGliZmlsZSAiIl0KLSsgICAgcmVtb3RlX2V4ZWMgaG9zdCBc Ci0rCSJta2RpciAtcCAkZGVidWdkaXJfbm9fbGliL1tmaWxlIGRpcm5hbWUgJGJ1aWxkX2lkX2Zp bGVuYW1lXSIKLSsgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJweXRob24gaGFuZGxlcl9vYmouc2V0 X21vZGUoTW9kZS5SRVRVUk5fU1RSSU5HLCBcCi0rCQkJCQkJXCIkaGlkZGVuX2xpYmZpbGVcIiki IFwKLSsJImNvbmZpZ3VyZSBoYW5kbGVyIgotKwotKyAgICBsb2FkX2NvcmVfZmlsZQotKyAgICBj aGVja19sb2FkZWRfZGVidWcgdHJ1ZSB0cnVlCi0rCi0rICAgICMgQ2xlYW51cCBzbyB0aGUgdGVz dCBjYW4gYmUgcmVwcm9kdWNlZCBhZ2FpbiBsYXRlciBpZiBuZWVkZWQuCi0rICAgIHJlbW90ZV9l eGVjIGhvc3QgInJtICRkZWJ1Z2Rpcl9ub19saWIvJGJ1aWxkX2lkX2ZpbGVuYW1lIgotKwotKyAg ICAjIFRoZSBoYW5kbGVyIHdpbGwgb25seSBoYXZlIGJlZW4gY2FsbGVkIG9uY2Ugd2hlbiBsb2Fk aW5nIHRoZQotKyAgICAjIG1lbW9yeS1tYXBwZWQgZmlsZS4gIEdEQiBpcyBzbWFydCBlbm91Z2gg dG8gcmV1c2UgdGhlIHByZXZpb3VzbHkKLSsgICAgIyBkaXNjb3ZlcmVkIEJGRCBvYmplY3QgYXMg dGhlIHNoYXJlZCBsaWJyYXJ5LgotKyAgICBnZGJfdGVzdCAicHl0aG9uIHByaW50KGhhbmRsZXJf b2JqLmNhbGxfY291bnQpIiAiXjEiIFwKLSsJImNoZWNrIGdvb2QgaGFuZGxlciBoYXNuJ3QgYmVl biBjYWxsZWQgYWdhaW4iCi0rCi0rICAgICMgVmFsaWRhdGUgdGhlIGZpbGVuYW1lIGFuZCBidWls ZC1pZCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBoYW5kbGVyLgotKyAgICBzZXQgZXhwZWN0ZWRf YnVpbGRpZCBbZ2V0X2J1aWxkX2lkICRoaWRkZW5fbGliZmlsZV0KLSsgICAgZ2RiX3Rlc3QgInB5 dGhvbiBwcmludChoYW5kbGVyX2xhc3RfYnVpbGRpZCkiICJeJGV4cGVjdGVkX2J1aWxkaWQiCi0r ICAgIGdkYl90ZXN0ICJweXRob24gcHJpbnQoaGFuZGxlcl9sYXN0X2ZpbGVuYW1lKSIgXAotKwki XltzdHJpbmdfdG9fcmVnZXhwICRsaWJmaWxlXSIKLSt9Ci0rCi0rIyBSZWdpc3RlciBhbm90aGVy IGdsb2JhbCBoYW5kbGVyLCB0aGlzIG9uZSByYWlzZXMgYW4gZXhjZXB0aW9uLiAgUmVsb2FkIHRo ZQotKyMgY29yZS1maWxlLCB0aGUgYmFkIGhhbmRsZXIgc2hvdWxkIGJlIGludm9rZWQgZmlyc3Qs IHdoaWNoIHJhaXNlcyBhbgotKyMgZXhjZXRwdGlvbiwgYXQgd2hpY2ggcG9pbnQgR0RCIHNob3Vs ZCBza2lwIGZ1cnRoZXIgUHl0aG9uIGhhbmRsZXJzLgotK3dpdGhfdGVzdF9wcmVmaXggImhhbmRs ZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiIgewotKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgXAotKwki cHl0aG9uIGdkYi5taXNzaW5nX29iamZpbGUucmVnaXN0ZXJfaGFuZGxlcihOb25lLCByaGFuZGxl cikiCi0rCi0rICAgIGZvcmVhY2hfd2l0aF9wcmVmaXggZXhjZXB0aW9uX3R5cGUge2dkYi5HZGJF cnJvciBUeXBlRXJyb3J9IHsKLSsJZ2RiX3Rlc3Rfbm9fb3V0cHV0IFwKLSsJICAgICJweXRob24g cmhhbmRsZXIuZXhjZXB0aW9uX3R5cGUgPSAkZXhjZXB0aW9uX3R5cGUiCi0rCi0rCSMgTG9hZCB0 aGUgY29yZSBmaWxlLiAgV2UgZXhwZWN0IHRoZSBleGNlcHRpb24gbWVzc2FnZSB0byBhcHBlYXIg YXQKLSsJIyBsZWFzdCBvbmNlIGluIHRoZSBvdXRwdXQuCi0rCXNldCByZSBbc3RyaW5nX3RvX3Jl Z2V4cCBcCi0rCQkgICAgIlB5dGhvbiBFeGNlcHRpb24gPGNsYXNzICckZXhjZXB0aW9uX3R5cGUn PjogbWVzc2FnZSJdCi0rCWxvYWRfY29yZV9maWxlICIke3JlfS4qIgotKwotKwkjIE91ciBvcmln aW5hbCBoYW5kbGVyIGlzIHN0aWxsIHJlZ2lzdGVyZWQsIGJ1dCBzaG91bGQgbm90IGhhdmUgYmVl bgotKwkjIGNhbGxlZCBhZ2FpbiAoYXMgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgZmlyc3QpLgotKwln ZGJfdGVzdCAicHl0aG9uIHByaW50KGhhbmRsZXJfb2JqLmNhbGxfY291bnQpIiAiXjEiIFwKLSsJ ICAgICJjaGVjayBnb29kIGhhbmRsZXIgaGFzbid0IGJlZW4gY2FsbGVkIGFnYWluIgotKyAgICB9 Ci0rfQotKwotKyMgUmUtc3RhcnQgR0RCLgotK2NsZWFuX3Jlc3RhcnRfbG9hZF9weXRob24KLSsK LSsjIEF0dGVtcHQgdG8gcmVnaXN0ZXIgYSBtaXNzaW5nLWRlYnVnLWhhbmRsZXIgd2l0aCBOQU1F LiAgVGhlIGV4cGVjdGF0aW9uIGlzCi0rIyB0aGF0IHRoaXMgc2hvdWxkIGZhaWwgYXMgTkFNRSBj b250YWlucyBzb21lIGludmFsaWQgY2hhcmFjdGVycy4KLStwcm9jIGNoZWNrX2JhZF9uYW1lIHtu YW1lfSB7Ci0rICAgIHNldCBuYW1lX3JlIFtzdHJpbmdfdG9fcmVnZXhwICRuYW1lXQotKyAgICBz ZXQgcmUgXAotKwlbbXVsdGlfbGluZSBcCi0rCSAgICAgIlZhbHVlRXJyb3IuKjogaW52YWxpZCBj aGFyYWN0ZXIgJy4nIGluIGhhbmRsZXIgbmFtZTogJG5hbWVfcmUiIFwKLSsJICAgICAiRXJyb3Ig b2NjdXJyZWQgaW4gUHl0aG9uLioiXQotKwotKyAgICBnZGJfdGVzdCAicHl0aG9uIHJlZ2lzdGVy KFwiJG5hbWVcIikiICRyZSBcCi0rCSJjaGVjayB0aGF0ICckbmFtZScgaXMgbm90IGFjY2VwdGVk IgotK30KLSsKLSsjIFdlIGRvbid0IGF0dGVtcHQgdG8gYmUgZXhoYXVzdGl2ZSBoZXJlLCBqdXN0 IGNoZWNrIGEgZmV3IHJhbmRvbSBleGFtcGxlcwotKyMgb2YgaW52YWxpZCBuYW1lcy4KLStjaGVj a19iYWRfbmFtZSAiISEgQmFkIE5hbWUiCi0rY2hlY2tfYmFkX25hbWUgIkJhZCBOYW1lIgotK2No ZWNrX2JhZF9uYW1lICIoQmFkIE5hbWUpIgotK2NoZWNrX2JhZF9uYW1lICJCYWQgXFtOYW1lXF0i Ci0rY2hlY2tfYmFkX25hbWUgIkJhZCxOYW1lIgotK2NoZWNrX2JhZF9uYW1lICJCYWQ7TmFtZSIK LSsKLSsjIENoZWNrIHRoYXQgdGhlcmUgYXJlIG5vIGhhbmRsZXJzIHJlZ2lzdGVyZWQuCi0rZ2Ri X3Rlc3Rfbm9fb3V0cHV0ICJpbmZvIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVycyIgXAotKyAgICAi Y2hlY2sgbm8gaGFuZGxlcnMgYXJlIHJlZ2lzdGVyZWQiCi0rCi0rIyBHcmFiIHRoZSBjdXJyZW50 IHByb2dyYW0gc3BhY2Ugb2JqZWN0LCB1c2VkIGZvciByZWdpc3RlcmluZyBoYW5kbGVyIGxhdGVy LgotK2dkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIHBzcGFjZSA9IGdkYi5zZWxlY3RlZF9pbmZl cmlvcigpLnByb2dzcGFjZSIKLSsKLSsjIE5vdyByZWdpc3RlciBzb21lIGhhbmRsZXJzLgotK2Zv cmVhY2ggaHNwZWMge3tcIkZvb1wiIE5vbmV9Ci0rICAgIHtcIi1iYXJcIiBOb25lfQotKyAgICB7 XCJiYXotXCIgcHNwYWNlfQotKyAgICB7XCJhYmMtZGVmXCIgcHNwYWNlfX0gewotKyAgICBsYXNz aWduICRoc3BlYyBuYW1lIGxvY3VzCi0rICAgIGdkYl90ZXN0ICJweXRob24gcmVnaXN0ZXIoJG5h bWUsICRsb2N1cykiCi0rfQotKwotK3dpdGhfdGVzdF9wcmVmaXggImFsbCBoYW5kbGVycyBlbmFi bGVkIiB7Ci0rICAgIGdkYl90ZXN0ICJpbmZvIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVycyIgXAot KwlbbXVsdGlfbGluZSBcCi0rCSAgICAgIkN1cnJlbnQgUHJvZ3NwYWNlOiIgXAotKwkgICAgICIg IGFiYy1kZWYiIFwKLSsJICAgICAiICBiYXotIiBcCi0rCSAgICAgIkdsb2JhbDoiIFwKLSsJICAg ICAiICAtYmFyIiBcCi0rCSAgICAgIiAgRm9vIl0KLSsKLSsgICAgc2V0X2RlYnVnX2ZpbGVfZGly ICRkZWJ1Z2Rpcl9ub19saWIKLSsgICAgbG9hZF9jb3JlX2ZpbGUKLSsKLSsgICAgIyBBcyB3ZSBw ZXJmb3JtIHR3byBsb29rIHVwcywgZmlyc3QgZm9yIHRoZSBtYXBwZWQtZmlsZSB0aGVuIGZvciB0 aGUKLSsgICAgIyBzaGFyZWQgbGlicmFyeSwgZWFjaCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIHR3 aWNlLgotKyAgICBnZGJfdGVzdCAicHl0aG9uIHByaW50KGhhbmRsZXJfY2FsbF9sb2cpIiBcCi0r CVtzdHJpbmdfdG9fcmVnZXhwIHtbJ2FiYy1kZWYnLCAnYmF6LScsICctYmFyJywgJ0ZvbycsICdh YmMtZGVmJywgJ2Jhei0nLCAnLWJhcicsICdGb28nXX1dCi0rICAgIGdkYl90ZXN0X25vX291dHB1 dCAicHl0aG9uIGhhbmRsZXJfY2FsbF9sb2cgPSBcW1xdIiBcCi0rCSJyZXNldCBjYWxsIGxvZyIK LSt9Ci0rCi0rd2l0aF90ZXN0X3ByZWZpeCAiZGlzYWJsZSAnYmF6LSciIHsKLSsgICAgZ2RiX3Rl c3QgImRpc2FibGUgbWlzc2luZy1vYmpmaWxlLWhhbmRsZXIgcHJvZ3NwYWNlIGJhei0iIFwKLSsJ Il4xIG1pc3Npbmcgb2JqZmlsZSBoYW5kbGVyIGRpc2FibGVkIgotKwotKyAgICBnZGJfdGVzdCAi aW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcnMiIFwKLSsJW211bHRpX2xpbmUgXAotKwkgICAg ICJQcm9nc3BhY2UgXFteXHJcblxdKzoiIFwKLSsJICAgICAiICBhYmMtZGVmIiBcCi0rCSAgICAg IiAgYmF6LSBcXFxbZGlzYWJsZWRcXFxdIiBcCi0rCSAgICAgIkdsb2JhbDoiIFwKLSsJICAgICAi ICAtYmFyIiBcCi0rCSAgICAgIiAgRm9vIl0KLSsKLSsgICAgbG9hZF9jb3JlX2ZpbGUKLSsgICAg Z2RiX3Rlc3QgInB5dGhvbiBwcmludChoYW5kbGVyX2NhbGxfbG9nKSIgXAotKwlbc3RyaW5nX3Rv X3JlZ2V4cCB7WydhYmMtZGVmJywgJy1iYXInLCAnRm9vJywgJ2FiYy1kZWYnLCAnLWJhcicsICdG b28nXX1dCi0rICAgIGdkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGhhbmRsZXJfY2FsbF9sb2cg PSBcW1xdIiBcCi0rCSJyZXNldCBjYWxsIGxvZyIKLSt9Ci0rCi0rd2l0aF90ZXN0X3ByZWZpeCAi ZGlzYWJsZSAnRm9vJyIgewotKyAgICBnZGJfdGVzdCAiZGlzYWJsZSBtaXNzaW5nLW9iamZpbGUt aGFuZGxlciAuKiBGb28iIFwKLSsJIl4xIG1pc3Npbmcgb2JqZmlsZSBoYW5kbGVyIGRpc2FibGVk IgotKwotKyAgICBnZGJfdGVzdCAiaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcnMiIFwKLSsJ W211bHRpX2xpbmUgXAotKwkgICAgICJQcm9nc3BhY2UgXFteXHJcblxdKzoiIFwKLSsJICAgICAi ICBhYmMtZGVmIiBcCi0rCSAgICAgIiAgYmF6LSBcXFxbZGlzYWJsZWRcXFxdIiBcCi0rCSAgICAg Ikdsb2JhbDoiIFwKLSsJICAgICAiICAtYmFyIiBcCi0rCSAgICAgIiAgRm9vIFxcXFtkaXNhYmxl ZFxcXF0iXQotKwotKyAgICBsb2FkX2NvcmVfZmlsZQotKyAgICBnZGJfdGVzdCAicHl0aG9uIHBy aW50KGhhbmRsZXJfY2FsbF9sb2cpIiBcCi0rCVtzdHJpbmdfdG9fcmVnZXhwIHtbJ2FiYy1kZWYn LCAnLWJhcicsICdhYmMtZGVmJywgJy1iYXInXX1dCi0rICAgIGdkYl90ZXN0X25vX291dHB1dCAi cHl0aG9uIGhhbmRsZXJfY2FsbF9sb2cgPSBcW1xdIiBcCi0rCSJyZXNldCBjYWxsIGxvZyIKLSt9 Ci0rCi0rd2l0aF90ZXN0X3ByZWZpeCAiZGlzYWJsZSBldmVyeXRoaW5nIiB7Ci0rICAgIGdkYl90 ZXN0ICJkaXNhYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIC4qIC4qIiBcCi0rCSJeMiBtaXNz aW5nIG9iamZpbGUgaGFuZGxlcnMgZGlzYWJsZWQiCi0rCi0rICAgIGdkYl90ZXN0ICJpbmZvIG1p c3Npbmctb2JqZmlsZS1oYW5kbGVycyIgXAotKwlbbXVsdGlfbGluZSBcCi0rCSAgICAgIlByb2dz cGFjZSBcW15cclxuXF0rOiIgXAotKwkgICAgICIgIGFiYy1kZWYgXFxcW2Rpc2FibGVkXFxcXSIg XAotKwkgICAgICIgIGJhei0gXFxcW2Rpc2FibGVkXFxcXSIgXAotKwkgICAgICJHbG9iYWw6IiBc Ci0rCSAgICAgIiAgLWJhciBcXFxbZGlzYWJsZWRcXFxdIiBcCi0rCSAgICAgIiAgRm9vIFxcXFtk aXNhYmxlZFxcXF0iXQotKwotKyAgICBsb2FkX2NvcmVfZmlsZQotKyAgICBnZGJfdGVzdCAicHl0 aG9uIHByaW50KGhhbmRsZXJfY2FsbF9sb2cpIiBcCi0rCVtzdHJpbmdfdG9fcmVnZXhwIHtbXX1d Ci0rICAgIGdkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGhhbmRsZXJfY2FsbF9sb2cgPSBcW1xd IiBcCi0rCSJyZXNldCBjYWxsIGxvZyIKLSt9Ci0rCi0rd2l0aF90ZXN0X3ByZWZpeCAiZW5hYmxl ICdhYmMtZGVmJyIgewotKyAgICBzZXQgcmUgW3N0cmluZ190b19yZWdleHAgJGhpZGRlbl9iaW5m aWxlXQotKwotKyAgICBnZGJfdGVzdCAiZW5hYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIFwi JHJlXCIgYWJjLWRlZiIgXAotKwkiXjEgbWlzc2luZyBvYmpmaWxlIGhhbmRsZXIgZW5hYmxlZCIg XAotKwkiZW5hYmxlIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVyIgotKwotKyAgICBnZGJfdGVzdCAi aW5mbyBtaXNzaW5nLW9iamZpbGUtaGFuZGxlcnMiIFwKLSsJW211bHRpX2xpbmUgXAotKwkgICAg ICJQcm9nc3BhY2UgXFteXHJcblxdKzoiIFwKLSsJICAgICAiICBhYmMtZGVmIiBcCi0rCSAgICAg IiAgYmF6LSBcXFxbZGlzYWJsZWRcXFxdIiBcCi0rCSAgICAgIkdsb2JhbDoiIFwKLSsJICAgICAi ICAtYmFyIFxcXFtkaXNhYmxlZFxcXF0iIFwKLSsJICAgICAiICBGb28gXFxcW2Rpc2FibGVkXFxc XSJdCi0rCi0rICAgIGxvYWRfY29yZV9maWxlCi0rICAgIGdkYl90ZXN0ICJweXRob24gcHJpbnQo aGFuZGxlcl9jYWxsX2xvZykiIFwKLSsJW3N0cmluZ190b19yZWdleHAge1snYWJjLWRlZicsICdh YmMtZGVmJ119XQotKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInB5dGhvbiBoYW5kbGVyX2NhbGxf bG9nID0gXFtcXSIgXAotKwkicmVzZXQgY2FsbCBsb2ciCi0rfQotKwotK3dpdGhfdGVzdF9wcmVm aXggImVuYWJsZSBnbG9iYWwgaGFuZGxlcnMiIHsKLSsgICAgZ2RiX3Rlc3QgImVuYWJsZSBtaXNz aW5nLW9iamZpbGUtaGFuZGxlciBnbG9iYWwiIFwKLSsJIl4yIG1pc3Npbmcgb2JqZmlsZSBoYW5k bGVycyBlbmFibGVkIgotKwotKyAgICBnZGJfdGVzdCAiaW5mbyBtaXNzaW5nLW9iamZpbGUtaGFu ZGxlcnMiIFwKLSsJW211bHRpX2xpbmUgXAotKwkgICAgICJQcm9nc3BhY2UgXFteXHJcblxdKzoi IFwKLSsJICAgICAiICBhYmMtZGVmIiBcCi0rCSAgICAgIiAgYmF6LSBcXFxbZGlzYWJsZWRcXFxd IiBcCi0rCSAgICAgIkdsb2JhbDoiIFwKLSsJICAgICAiICAtYmFyIiBcCi0rCSAgICAgIiAgRm9v Il0KLSsKLSsgICAgbG9hZF9jb3JlX2ZpbGUKLSsgICAgZ2RiX3Rlc3QgInB5dGhvbiBwcmludCho YW5kbGVyX2NhbGxfbG9nKSIgXAotKwlbc3RyaW5nX3RvX3JlZ2V4cCB7WydhYmMtZGVmJywgJy1i YXInLCAnRm9vJywgJ2FiYy1kZWYnLCAnLWJhcicsICdGb28nXX1dCi0rICAgIGdkYl90ZXN0X25v X291dHB1dCAicHl0aG9uIGhhbmRsZXJfY2FsbF9sb2cgPSBcW1xdIiBcCi0rCSJyZXNldCBjYWxs IGxvZyIKLSt9Ci0rCi0rIyBBZGQgaGFuZGxlcl9vYmogdG8gdGhlIGdsb2JhbCBoYW5kbGVyIGxp c3QsIGFuZCBjb25maWd1cmUgaXQgdG8KLSsjIHJldHVybiBGYWxzZS4gIFdlIHNob3VsZCBjYWxs IGFsbCBvZiB0aGUgcHJvZ3JhbSBzcGFjZSBzcGVjaWZpYwotKyMgaGFuZGxlcnMgKHdoaWNoIHJl dHVybiBOb25lKSwgYW5kIHRoZW4gY2FsbCBoYW5kbGVyX29iaiBmcm9tIHRoZQotKyMgZ2xvYmFs IGxpc3QsIHdoaWNoIHJldHVybnMgRmFsc2UsIGF0IHdoaWNoIHBvaW50IHdlIHNob3VsZG4ndCBj YWxsCi0rIyBhbnlvbmUgZWxzZS4KLSt3aXRoX3Rlc3RfcHJlZml4ICJyZXR1cm4gRmFsc2UgaGFu ZGxlciBpbiBnbG9iYWwgbGlzdCIgewotKyAgICBnZGJfdGVzdCAiZW5hYmxlIG1pc3Npbmctb2Jq ZmlsZS1oYW5kbGVyIHByb2dzcGFjZSIgXAotKwkiXjEgbWlzc2luZyBvYmpmaWxlIGhhbmRsZXIg ZW5hYmxlZCIKLSsKLSsgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0IFwKLSsJInB5dGhvbiBnZGIubWlz c2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIoTm9uZSwgaGFuZGxlcl9vYmopIiBcCi0rCSJy ZWdpc3RlciBoYW5kbGVyX29iaiBpbiBnbG9iYWwgbGlzdCIKLSsKLSsgICAgZ2RiX3Rlc3QgImlu Zm8gbWlzc2luZy1vYmpmaWxlLWhhbmRsZXJzIiBcCi0rCVttdWx0aV9saW5lIFwKLSsJICAgICAi UHJvZ3NwYWNlIFxbXlxyXG5cXSs6IiBcCi0rCSAgICAgIiAgYWJjLWRlZiIgXAotKwkgICAgICIg IGJhei0iIFwKLSsJICAgICAiR2xvYmFsOiIgXAotKwkgICAgICIgIGhhbmRsZXIiIFwKLSsJICAg ICAiICAtYmFyIiBcCi0rCSAgICAgIiAgRm9vIl0KLSsKLSsgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0 ICJweXRob24gaGFuZGxlcl9vYmouc2V0X21vZGUoTW9kZS5SRVRVUk5fRkFMU0UpIiBcCi0rCSJj b25maXJndXJlIGhhbmRsZXIiCi0rCi0rICAgIGxvYWRfY29yZV9maWxlCi0rICAgIGdkYl90ZXN0 ICJweXRob24gcHJpbnQoaGFuZGxlcl9jYWxsX2xvZykiIFwKLSsJW3N0cmluZ190b19yZWdleHAg e1snYWJjLWRlZicsICdiYXotJywgJ2hhbmRsZXInLCAnYWJjLWRlZicsICdiYXotJywgJ2hhbmRs ZXInXX1dCi0rICAgIGdkYl90ZXN0X25vX291dHB1dCAicHl0aG9uIGhhbmRsZXJfY2FsbF9sb2cg PSBcW1xdIiBcCi0rCSJyZXNldCBjYWxsIGxvZyIKLSt9Ci0rCi0rIyBOb3cgYWRkIGhhbmRsZXJf b2JqIHRvIHRoZSBjdXJyZW50IHByb2dyYW0gc3BhY2UncyBoYW5kbGVyIGxpc3QuICBXZQotKyMg dXNlIHRoZSBzYW1lIGhhbmRsZXIgb2JqZWN0IGhlcmUsIHRoYXQncyBmaW5lLiAgV2Ugc2hvdWxk IG9ubHkgc2VlIGEKLSsjIGNhbGwgdG8gdGhlIGZpcnN0IGhhbmRsZXIgb2JqZWN0IGluIHRoZSBj YWxsIGxvZy4KLSt3aXRoX3Rlc3RfcHJlZml4ICJyZXR1cm4gRmFsc2UgaGFuZGxlciBpbiBwcm9n c3BhY2UgbGlzdCIgewotKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgXAotKwkicHl0aG9uIGdkYi5t aXNzaW5nX29iamZpbGUucmVnaXN0ZXJfaGFuZGxlcihwc3BhY2UsIGhhbmRsZXJfb2JqKSIgXAot KwkicmVnaXN0ZXIgaGFuZGxlcl9vYmogaW4gcHJvZ3NwYWNlIGxpc3QiCi0rCi0rICAgIGdkYl90 ZXN0ICJpbmZvIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVycyIgXAotKwlbbXVsdGlfbGluZSBcCi0r CSAgICAgIlByb2dzcGFjZSBcW15cclxuXF0rOiIgXAotKwkgICAgICIgIGhhbmRsZXIiIFwKLSsJ ICAgICAiICBhYmMtZGVmIiBcCi0rCSAgICAgIiAgYmF6LSIgXAotKwkgICAgICJHbG9iYWw6IiBc Ci0rCSAgICAgIiAgaGFuZGxlciIgXAotKwkgICAgICIgIC1iYXIiIFwKLSsJICAgICAiICBGb28i XQotKwotKyAgICBsb2FkX2NvcmVfZmlsZQotKyAgICBnZGJfdGVzdCAicHl0aG9uIHByaW50KGhh bmRsZXJfY2FsbF9sb2cpIiBcCi0rCVtzdHJpbmdfdG9fcmVnZXhwIHtbJ2hhbmRsZXInLCAnaGFu ZGxlciddfV0KLSsgICAgZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJweXRob24gaGFuZGxlcl9jYWxsX2xv ZyA9IFxbXF0iIFwKLSsJInJlc2V0IGNhbGwgbG9nIgotK30KLSsKLSt3aXRoX3Rlc3RfcHJlZml4 ICJjaGVjayBoYW5kbGVyIHJlcGxhY2VtZW50IiB7Ci0rICAgICMgRmlyc3QsIGNoZWNrIHdlIGNh biBoYXZlIHRoZSBzYW1lIG5hbWUgYXBwZWFyIGluIGJvdGggcHJvZ3JhbQotKyAgICAjIHNwYWNl IGFuZCBnbG9iYWwgbGlzdHMgd2l0aG91dCBnaXZpbmcgYW4gZXJyb3IuCi0rICAgIGdkYl90ZXN0 X25vX291dHB1dCAicHl0aG9uIHJlZ2lzdGVyKFwiRm9vXCIsIHBzcGFjZSkiCi0rCi0rICAgIGdk Yl90ZXN0ICJpbmZvIG1pc3Npbmctb2JqZmlsZS1oYW5kbGVycyIgXAotKwlbbXVsdGlfbGluZSBc Ci0rCSAgICAgIlByb2dzcGFjZSBcW15cclxuXF0rOiIgXAotKwkgICAgICIgIEZvbyIgXAotKwkg ICAgICIgIGhhbmRsZXIiIFwKLSsJICAgICAiICBhYmMtZGVmIiBcCi0rCSAgICAgIiAgYmF6LSIg XAotKwkgICAgICJHbG9iYWw6IiBcCi0rCSAgICAgIiAgaGFuZGxlciIgXAotKwkgICAgICIgIC1i YXIiIFwKLSsJICAgICAiICBGb28iXQotKwotKyAgICAjIE5vdyBjaGVjayB0aGF0IHdlIGdldCBh biBlcnJvciBpZiB3ZSB0cnkgdG8gYWRkIGEgaGFuZGxlciB3aXRoCi0rICAgICMgdGhlIHNhbWUg bmFtZS4KLSsgICAgZ2RiX3Rlc3QgInB5dGhvbiBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVy X2hhbmRsZXIocHNwYWNlLCBsb2dfaGFuZGxlcihcIkZvb1wiKSkiIFwKLSsJW211bHRpX2xpbmUg XAotKwkgICAgICJSdW50aW1lRXJyb3IuKjogSGFuZGxlciBGb28gYWxyZWFkeSBleGlzdHNcXC4i IFwKLSsJICAgICAiRXJyb3Igb2NjdXJyZWQgaW4gUHl0aG9uLioiXQotKwotKyAgICBnZGJfdGVz dCAicHl0aG9uIGdkYi5taXNzaW5nX29iamZpbGUucmVnaXN0ZXJfaGFuZGxlcihoYW5kbGVyPWxv Z19oYW5kbGVyKFwiRm9vXCIpLCBsb2N1cz1wc3BhY2UpIiBcCi0rCVttdWx0aV9saW5lIFwKLSsJ ICAgICAiUnVudGltZUVycm9yLio6IEhhbmRsZXIgRm9vIGFscmVhZHkgZXhpc3RzXFwuIiBcCi0r CSAgICAgIkVycm9yIG9jY3VycmVkIGluIFB5dGhvbi4qIl0KLSsKLSsgICAgIyBBbmQgbm93IHRy eSBhZ2FpbiwgYnV0IHRoaXMgdGltZSB3aXRoICdyZXBsYWNlPVRydWUnLCB3ZQotKyAgICAjIHNo b3VsZG4ndCBnZXQgYW4gZXJyb3IgaW4gdGhpcyBjYXNlLgotKyAgICBnZGJfdGVzdF9ub19vdXRw dXQgXAotKwkicHl0aG9uIGdkYi5taXNzaW5nX29iamZpbGUucmVnaXN0ZXJfaGFuZGxlcihwc3Bh Y2UsIGxvZ19oYW5kbGVyKFwiRm9vXCIpLCByZXBsYWNlPVRydWUpIgotKwotKyAgICBnZGJfdGVz dF9ub19vdXRwdXQgXAotKwkicHl0aG9uIGdkYi5taXNzaW5nX29iamZpbGUucmVnaXN0ZXJfaGFu ZGxlcihoYW5kbGVyPWxvZ19oYW5kbGVyKFwiRm9vXCIpLCBsb2N1cz1Ob25lLCByZXBsYWNlPVRy dWUpIgotKwotKyAgICAjIE5vdyBkaXNhYmxlIGEgaGFuZGxlciBhbmQgY2hlY2sgd2Ugc3RpbGwg bmVlZCB0byB1c2UgJ3JlcGxhY2U9VHJ1ZScuCi0rICAgIGdkYl90ZXN0ICJkaXNhYmxlIG1pc3Np bmctb2JqZmlsZS1oYW5kbGVyIHByb2dzcGFjZSBGb28iIFwKLSsJIl4xIG1pc3Npbmcgb2JqZmls ZSBoYW5kbGVyIGRpc2FibGVkIgotKwotKyAgICBnZGJfdGVzdCAicHl0aG9uIGdkYi5taXNzaW5n X29iamZpbGUucmVnaXN0ZXJfaGFuZGxlcihwc3BhY2UsIGxvZ19oYW5kbGVyKFwiRm9vXCIpKSIg XAotKwlbbXVsdGlfbGluZSBcCi0rCSAgICAgIlJ1bnRpbWVFcnJvci4qOiBIYW5kbGVyIEZvbyBh bHJlYWR5IGV4aXN0c1xcLiIgXAotKwkgICAgICJFcnJvciBvY2N1cnJlZCBpbiBQeXRob24uKiJd IFwKLSsJInN0aWxsIGdldCBhbiBlcnJvciB3aGVuIGhhbmRsZXIgaXMgZGlzYWJsZWQiCi0rCi0r ICAgIGdkYl90ZXN0X25vX291dHB1dCBcCi0rCSJweXRob24gZ2RiLm1pc3Npbmdfb2JqZmlsZS5y ZWdpc3Rlcl9oYW5kbGVyKHBzcGFjZSwgbG9nX2hhbmRsZXIoXCJGb29cIiksIHJlcGxhY2U9VHJ1 ZSkiIFwKLSsJImNhbiByZXBsYWNlIGEgZGlzYWJsZWQgaGFuZGxlciIKLSt9Ci1kaWZmIC0tZ2l0 IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIucHl0aG9uL3B5LW1pc3Npbmctb2JqZmlsZS5weSBiL2dkYi90 ZXN0c3VpdGUvZ2RiLnB5dGhvbi9weS1taXNzaW5nLW9iamZpbGUucHkKLW5ldyBmaWxlIG1vZGUg MTAwNjQ0Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5weXRob24vcHkt bWlzc2luZy1vYmpmaWxlLnB5Ci1AQCAtMCwwICsxLDE2NyBAQAotKyMgQ29weXJpZ2h0IChDKSAy MDI0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotKwotKyMgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSsj IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rIyBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rIyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyMKLSsjIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rIyBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4KLSsKLStpbXBvcnQgc2h1dGlsCi0raW1wb3J0IG9zCi0rZnJvbSBlbnVtIGlt cG9ydCBFbnVtCi0rCi0raW1wb3J0IGdkYgotK2Zyb20gZ2RiLm1pc3Npbmdfb2JqZmlsZSBpbXBv cnQgTWlzc2luZ09iamZpbGVIYW5kbGVyCi0rCi0rIyBBIGdsb2JhbCBsb2cgdGhhdCBpcyBmaWxs ZWQgaW4gYnkgaW5zdGFuY2VzIG9mIHRoZSBMT0dfSEFORExFUiBjbGFzcwotKyMgd2hlbiB0aGV5 IGFyZSBjYWxsZWQuCi0raGFuZGxlcl9jYWxsX2xvZyA9IFtdCi0rCi0rIyBBIGdsb2JhbCBob2xk aW5nIGEgc3RyaW5nLCB0aGUgYnVpbGQtaWQgb2YgdGhlIGxhc3QgbWlzc2luZyBvYmpmaWxlCi0r IyB3aGljaCB0cmlnZ2VyZWQgdGhlICdoYW5kbGVyJyBjbGFzcyBiZWxvdy4gIFRoaXMgaXMgc2V0 IGluIHRoZQotKyMgX19jYWxsX18gbWV0aG9kIG9mIHRoZSAnaGFuZGxlcicgY2xhc3MgYW5kIHRo ZW4gY2hlY2tlZCBmcm9tIHRoZQotKyMgZXhwZWN0IHNjcmlwdC4KLStoYW5kbGVyX2xhc3RfYnVp bGRpZCA9IE5vbmUKLSsKLSsKLSsjIEEgZ2xvYmFsIGhvbGRpbmcgYSBzdHJpbmcsIHRoZSBmaWxl bmFtZSBvZiB0aGUgbGFzdCBtaXNzaW5nIG9iamZpbGUKLSsjIHdoaWNoIHRyaWdnZXJlZCB0aGUg J2hhbmRsZXInIGNsYXNzIGJlbG93LiAgVGhpcyBpcyBzZXQgaW4gdGhlCi0rIyBfX2NhbGxfXyBt ZXRob2Qgb2YgdGhlICdoYW5kbGVyJyBjbGFzcyBhbmQgdGhlbiBjaGVja2VkIGZyb20gdGhlCi0r IyBleHBlY3Qgc2NyaXB0LgotK2hhbmRsZXJfbGFzdF9maWxlbmFtZSA9IE5vbmUKLSsKLSsKLSsj IEEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgbWFrZXMgc29tZSBhc3NlcnRpb25zIGFib3V0IHRoZSBh cmd1bWVudHMKLSsjIHBhc3NlZCB0byBhIE1pc3NpbmdPYmpmaWxlSGFuZGxlci5fX2NhbGxfXygp IG1ldGhvZC4KLStkZWYgY2hlY2tfYXJncyhwc3BhY2UsIGJ1aWxkaWQsIGZpbGVuYW1lKToKLSsg ICAgYXNzZXJ0IHR5cGUoZmlsZW5hbWUpID09IHN0cgotKyAgICBhc3NlcnQgZmlsZW5hbWUgIT0g IiIKLSsgICAgYXNzZXJ0IHR5cGUocHNwYWNlKSA9PSBnZGIuUHJvZ3NwYWNlCi0rICAgIGFzc2Vy dCB0eXBlKGJ1aWxkaWQpID09IHN0cgotKyAgICBhc3NlcnQgYnVpbGRpZCAhPSAiIgotKwotKwot KyMgRW51bSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgJ2hhbmRsZXInIGNsYXNzIGZyb20gdGhlIHRl c3Qgc2NyaXB0LgotK2NsYXNzIE1vZGUoRW51bSk6Ci0rICAgIFJFVFVSTl9OT05FID0gMAotKyAg ICBSRVRVUk5fVFJVRSA9IDEKLSsgICAgUkVUVVJOX0ZBTFNFID0gMgotKyAgICBSRVRVUk5fU1RS SU5HID0gMwotKwotKwotKyMgQSBtaXNzaW5nIG9iamZpbGUgaGFuZGxlciB3aGljaCBjYW4gYmUg Y29uZmlndXJlZCB0byByZXR1cm4gZWFjaCBvZgotKyMgdGhlIGRpZmZlcmVudCBwb3NzaWJsZSBy ZXR1cm4gdHlwZXMuCi0rY2xhc3MgaGFuZGxlcihNaXNzaW5nT2JqZmlsZUhhbmRsZXIpOgotKyAg ICBkZWYgX19pbml0X18oc2VsZik6Ci0rICAgICAgICBzdXBlcigpLl9faW5pdF9fKCJoYW5kbGVy IikKLSsgICAgICAgIHNlbGYuX2NhbGxfY291bnQgPSAwCi0rICAgICAgICBzZWxmLl9tb2RlID0g TW9kZS5SRVRVUk5fTk9ORQotKwotKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcHNwYWNlLCBidWls ZGlkLCBmaWxlbmFtZSk6Ci0rICAgICAgICBnbG9iYWwgaGFuZGxlcl9jYWxsX2xvZywgaGFuZGxl cl9sYXN0X2J1aWxkaWQsIGhhbmRsZXJfbGFzdF9maWxlbmFtZQotKyAgICAgICAgY2hlY2tfYXJn cyhwc3BhY2UsIGJ1aWxkaWQsIGZpbGVuYW1lKQotKyAgICAgICAgaGFuZGxlcl9jYWxsX2xvZy5h cHBlbmQoc2VsZi5uYW1lKQotKyAgICAgICAgaGFuZGxlcl9sYXN0X2J1aWxkaWQgPSBidWlsZGlk Ci0rICAgICAgICBoYW5kbGVyX2xhc3RfZmlsZW5hbWUgPSBmaWxlbmFtZQotKyAgICAgICAgc2Vs Zi5fY2FsbF9jb3VudCArPSAxCi0rICAgICAgICBpZiBzZWxmLl9tb2RlID09IE1vZGUuUkVUVVJO X05PTkU6Ci0rICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSsKLSsgICAgICAgIGlmIHNlbGYuX21v ZGUgPT0gTW9kZS5SRVRVUk5fVFJVRToKLSsgICAgICAgICAgICBzaHV0aWwuY29weShzZWxmLl9z cmMsIHNlbGYuX2Rlc3QpCi0rCi0rICAgICAgICAgICAgIyBJZiB3ZSdyZSB1c2luZyB0aGUgZmlz c2lvbi1kd3AgYm9hcmQgdGhlbiB0aGVyZSB3aWxsCi0rICAgICAgICAgICAgIyBhbHNvIGJlIGEg LmR3cCBmaWxlIHRoYXQgbmVlZHMgdG8gYmUgY29waWVkLgotKyAgICAgICAgICAgIGR3cF9zcmMg PSBzZWxmLl9zcmMgKyAiLmR3cCIKLSsgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkd3Bf c3JjKToKLSsgICAgICAgICAgICAgICAgZHdwX2Rlc3QgPSBzZWxmLl9kZXN0ICsgIi5kd3AiCi0r ICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KGR3cF9zcmMsIGR3cF9kZXN0KQotKwotKyAgICAg ICAgICAgIHJldHVybiBUcnVlCi0rCi0rICAgICAgICBpZiBzZWxmLl9tb2RlID09IE1vZGUuUkVU VVJOX0ZBTFNFOgotKyAgICAgICAgICAgIHJldHVybiBGYWxzZQotKwotKyAgICAgICAgaWYgc2Vs Zi5fbW9kZSA9PSBNb2RlLlJFVFVSTl9TVFJJTkc6Ci0rICAgICAgICAgICAgcmV0dXJuIHNlbGYu X2Rlc3QKLSsKLSsgICAgICAgIGFzc2VydCBGYWxzZQotKwotKyAgICBAcHJvcGVydHkKLSsgICAg ZGVmIGNhbGxfY291bnQoc2VsZik6Ci0rICAgICAgICAiIiJSZXR1cm4gYSBjb3VudCwgdGhlIG51 bWJlciBvZiBjYWxscyB0byBfX2NhbGxfXyBzaW5jZSB0aGUgbGFzdAotKyAgICAgICAgY2FsbCB0 byBzZXRfbW9kZS4KLSsgICAgICAgICIiIgotKyAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGxfY291 bnQKLSsKLSsgICAgZGVmIHNldF9tb2RlKHNlbGYsIG1vZGUsICphcmdzKToKLSsgICAgICAgIHNl bGYuX2NhbGxfY291bnQgPSAwCi0rICAgICAgICBzZWxmLl9tb2RlID0gbW9kZQotKwotKyAgICAg ICAgaWYgbW9kZSA9PSBNb2RlLlJFVFVSTl9OT05FOgotKyAgICAgICAgICAgIGFzc2VydCBsZW4o YXJncykgPT0gMAotKyAgICAgICAgICAgIHJldHVybgotKwotKyAgICAgICAgaWYgbW9kZSA9PSBN b2RlLlJFVFVSTl9UUlVFOgotKyAgICAgICAgICAgIGFzc2VydCBsZW4oYXJncykgPT0gMgotKyAg ICAgICAgICAgIHNlbGYuX3NyYyA9IGFyZ3NbMF0KLSsgICAgICAgICAgICBzZWxmLl9kZXN0ID0g YXJnc1sxXQotKyAgICAgICAgICAgIHJldHVybgotKwotKyAgICAgICAgaWYgbW9kZSA9PSBNb2Rl LlJFVFVSTl9GQUxTRToKLSsgICAgICAgICAgICBhc3NlcnQgbGVuKGFyZ3MpID09IDAKLSsgICAg ICAgICAgICByZXR1cm4KLSsKLSsgICAgICAgIGlmIG1vZGUgPT0gTW9kZS5SRVRVUk5fU1RSSU5H OgotKyAgICAgICAgICAgIGFzc2VydCBsZW4oYXJncykgPT0gMQotKyAgICAgICAgICAgIHNlbGYu X2Rlc3QgPSBhcmdzWzBdCi0rICAgICAgICAgICAgcmV0dXJuCi0rCi0rICAgICAgICBhc3NlcnQg RmFsc2UKLSsKLSsKLSsjIEEgbWlzc2luZyBvYmpmaWxlIGhhbmRsZXIgd2hpY2ggcmFpc2VzIGFu IGV4Y2VwdGlvbi4gIFRoZSB0eXBlIG9mCi0rIyBleGNlcHRpb24gdG8gYmUgcmFpc2VkIGlzIGNv bmZpZ3VyZWQgZnJvbSB0aGUgdGVzdCBzY3JpcHQuCi0rY2xhc3MgZXhjZXB0aW9uX2hhbmRsZXIo TWlzc2luZ09iamZpbGVIYW5kbGVyKToKLSsgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotKyAgICAg ICAgc3VwZXIoKS5fX2luaXRfXygiZXhjZXB0aW9uX2hhbmRsZXIiKQotKyAgICAgICAgc2VsZi5l eGNlcHRpb25fdHlwZSA9IE5vbmUKLSsKLSsgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBzcGFjZSwg YnVpbGRpZCwgZmlsZW5hbWUpOgotKyAgICAgICAgZ2xvYmFsIGhhbmRsZXJfY2FsbF9sb2cKLSsg ICAgICAgIGNoZWNrX2FyZ3MocHNwYWNlLCBidWlsZGlkLCBmaWxlbmFtZSkKLSsgICAgICAgIGhh bmRsZXJfY2FsbF9sb2cuYXBwZW5kKHNlbGYubmFtZSkKLSsgICAgICAgIGFzc2VydCBzZWxmLmV4 Y2VwdGlvbl90eXBlIGlzIG5vdCBOb25lCi0rICAgICAgICByYWlzZSBzZWxmLmV4Y2VwdGlvbl90 eXBlKCJtZXNzYWdlIikKLSsKLSsKLSsjIEEgdmVyeSBzaW1wbGUgbG9nZ2luZyBtaXNzaW5nIG9i amZpbGUgaGFuZGxlci4gIEFsd2F5cyByZXR1cm5zIE5vbmUKLSsjIHNvIHRoYXQgR0RCIHdpbGwg dHJ5IGFueSBvdGhlciByZWdpc3RlcmVkIGhhbmRsZXJzLCBidXQgZmlyc3QgbG9ncwotKyMgdGhl IG5hbWUgb2YgdGhpcyBoYW5kbGVyIGludG8gdGhlIGdsb2JhbCBIQU5ETEVSX0NBTExfTE9HLCB3 aGljaCBjYW4KLSsjIHRoZW4gYmUgY2hlY2tlZCBmcm9tIHRoZSB0ZXN0IHNjcmlwdC4KLStjbGFz cyBsb2dfaGFuZGxlcihNaXNzaW5nT2JqZmlsZUhhbmRsZXIpOgotKyAgICBkZWYgX19jYWxsX18o c2VsZiwgcHNwYWNlLCBidWlsZGlkLCBmaWxlbmFtZSk6Ci0rICAgICAgICBnbG9iYWwgaGFuZGxl cl9jYWxsX2xvZwotKyAgICAgICAgY2hlY2tfYXJncyhwc3BhY2UsIGJ1aWxkaWQsIGZpbGVuYW1l KQotKyAgICAgICAgaGFuZGxlcl9jYWxsX2xvZy5hcHBlbmQoc2VsZi5uYW1lKQotKyAgICAgICAg cmV0dXJuIE5vbmUKLSsKLSsKLSsjIEEgYmFzaWMgaGVscGVyIGZ1bmN0aW9uLCB0aGlzIGtlZXBz IGxpbmVzIHNob3J0ZXIgaW4gdGhlIFRDTCBzY3JpcHQuCi0rZGVmIHJlZ2lzdGVyKG5hbWUsIGxv Y3VzPU5vbmUpOgotKyAgICBnZGIubWlzc2luZ19vYmpmaWxlLnJlZ2lzdGVyX2hhbmRsZXIobG9j dXMsIGxvZ19oYW5kbGVyKG5hbWUpKQotKwotKwotKyMgQ3JlYXRlIGluc3RhbmNlcyBvZiB0aGUg aGFuZGxlcnMsIGJ1dCBkb24ndCBpbnN0YWxsIGFueS4gIFdlIGluc3RhbGwKLSsjIHRoZXNlIGFz IG5lZWRlZCBmcm9tIHRoZSBUQ0wgc2NyaXB0LgotK3JoYW5kbGVyID0gZXhjZXB0aW9uX2hhbmRs ZXIoKQotK2hhbmRsZXJfb2JqID0gaGFuZGxlcigpCi0rCi0rcHJpbnQoIlN1Y2Nlc3MiKQotZGlm ZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnNlcnZlci9idWlsZC1pZC1zZXFuby5jIGIvZ2Ri L3Rlc3RzdWl0ZS9nZGIuc2VydmVyL2J1aWxkLWlkLXNlcW5vLmMKLW5ldyBmaWxlIG1vZGUgMTAw NjQ0Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5zZXJ2ZXIvYnVpbGQt aWQtc2Vxbm8uYwotQEAgLTAsMCArMSwyMiBAQAotKy8qIFRoaXMgdGVzdGNhc2UgaXMgcGFydCBv ZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCi0rCi0rICAgQ29weXJpZ2h0IDIwMjQgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSsgICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQotKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2Yg dGhlIExpY2Vuc2UsIG9yCi0rICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K LSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKLSsgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsgICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKwotKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rICAgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uICAqLwotKwotK2ludAotK21haW4gKHZvaWQpCi0rewotKyAgcmV0dXJuIDA7Ci0rfQot ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnNlcnZlci9idWlsZC1pZC1zZXFuby5leHAg Yi9nZGIvdGVzdHN1aXRlL2dkYi5zZXJ2ZXIvYnVpbGQtaWQtc2Vxbm8uZXhwCi1uZXcgZmlsZSBt b2RlIDEwMDY0NAotLS0tIC9kZXYvbnVsbAotKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuc2VydmVy L2J1aWxkLWlkLXNlcW5vLmV4cAotQEAgLTAsMCArMSwxOTggQEAKLSsjIFRoaXMgdGVzdGNhc2Ug aXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdnZXIuCi0rIwotKyMgQ29weXJpZ2h0IDIwMjQg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rIwotKyMgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSsjIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5Ci0rIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KLSsjCi0rIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rIyBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyMKLSsjIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0rIyBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4KLSsKLSsjIFNldHVwIGEgLmJ1aWxkLWlkLyBiYXNlZCBkZWJ1ZyBkaXJlY3Rvcnkg Y29udGFpbmluZyBtdWx0aXBsZSBlbnRyaWVzCi0rIyBmb3IgdGhlIHNhbWUgYnVpbGQtaWQsIHdp dGggZWFjaCBlbnRyeSBnaXZlbiBhIGRpZmZlcmVudCBzZXF1ZW5jZQotKyMgbnVtYmVyLgotKyMK LSsjIEVuc3VyZSB0aGF0IEdEQiB3aWxsIHNjYW4gb3ZlciBicm9rZW4gc3ltbGlua3MgZm9yIHRo ZSBzYW1lIGJ1aWxkLWlkCi0rIyAoYnV0IGRpZmZlcmVudCBzZXF1ZW5jZSBudW1iZXIpIHRvIGZp bmQgbGF0ZXIgd29ya2luZyBzeW1saW5rcy4KLSsjCi0rIyBUaGlzIHRlc3QgcGxhY2VzIHRoZSBi dWlsZC1pZCBmaWxlcyB3aXRoaW4gYSBkaXJlY3RvcnkgbmV4dCB0byB3aGVyZQotKyMgZ2Ric2Vy dmVyIGlzIHN0YXJ0ZWQsIGFuZCBwbGFjZXMgYSByZWxhdGl2ZSBhZGRyZXNzIGluIHRoZQotKyMg ZGVidWctZmlsZS1kaXJlY3RvcnksIGluIHRoaXMgd2F5IHdlIHJlcXVpcmUgR0RCIHRvIGZpbmQg dGhlIGRlYnVnCi0rIyBpbmZvcm1hdGlvbiB2aWEgZ2Ric2VydmVyLgotKwotK3JlcXVpcmUgeyFp c19yZW1vdGUgaG9zdH0KLSsKLStsb2FkX2xpYiBnZGJzZXJ2ZXItc3VwcG9ydC5leHAKLSsKLStz dGFuZGFyZF90ZXN0ZmlsZQotKwotK2lmIHtbYnVpbGRfZXhlY3V0YWJsZSAiZmFpbGVkIHRvIHBy ZXBhcmUiICR0ZXN0ZmlsZSAkc3JjZmlsZV0gPT0gLTF9IHsKLSsgICAgcmV0dXJuIC0xCi0rfQot KwotKyMgU3BsaXQgb3V0IEJJTkZJTEUuZGVidWcuICBSZW1vdmUgZGVidWcgZnJvbSBCSU5GSUxF LgotK2lmIHtbZ2RiX2dudV9zdHJpcF9kZWJ1ZyAkYmluZmlsZV0gIT0gMH0gewotKyAgICByZXR1 cm4gLTEKLSt9Ci0rCi0rIyBHZXQgdGhlICcuYnVpbGQtaWQveHgveHh4Li4ueHh4JyBwYXJ0IG9m IHRoZSBmaWxlbmFtZS4KLStzZXQgYnVpbGRfaWRfZmlsZW5hbWUgW2J1aWxkX2lkX2RlYnVnX2Zp bGVuYW1lX2dldCAkYmluZmlsZV0KLSsKLSsjIEhpZGUgKHJlbmFtZSkgQklORklMRS5kZWJ1Zywg dGhpcyBzaG91bGQgZW5zdXJlIEdEQiBjYW4ndCBmaW5kIGl0Ci0rIyBkaXJlY3RseSBidXQgbmVl ZHMgdG8gbG9vayBmb3IgdGhlIGJ1aWxkLWlkIGJhc2VkIGZpbGUgaW4gdGhlIGRlYnVnCi0rIyBk aXJlY3RvcnkuCi0rc2V0IGhpZGRlbl9kZWJ1Z2luZm8gW3N0YW5kYXJkX291dHB1dF9maWxlICJo aWRkZW5fJHRlc3RmaWxlLmRlYnVnIl0KLStyZW1vdGVfZXhlYyBidWlsZCAibXYgJHtiaW5maWxl fS5kZWJ1ZyAkaGlkZGVuX2RlYnVnaW5mbyIKLSsKLSsjIEEgZmlsZW5hbWUgdGhhdCBkb2Vzbid0 IGV4aXN0LiAgU29tZSBzeW1saW5rcyB3aWxsIHBvaW50IGF0IHRoaXMKLSsjIGZpbGUuCi0rc2V0 IG1pc3NpbmdfZGVidWdpbmZvICJtaXNzaW5nX2RlYnVnaW5mbyIKLSsKLSsjIEhlbHBlciBjYWxs ZWQgZnJvbSBnZGJfZmluaXNoIHdoZW4gdGhlICd0YXJnZXQnIGlzIHJlbW90ZS4gIEVuc3VyZSB0 aGUKLSsjIGRlYnVnIGRpcmVjdG9yeSB3ZSBjcmVhdGUgaXMgZGVsZXRlZC4KLStwcm9jIGNsZWFu dXBfcmVtb3RlX3RhcmdldCB7fSB7Ci0rICAgIHJlbW90ZV9leGVjIHRhcmdldCAicm0gLWZyIGRl YnVnLyIKLSt9Ci0rCi0raWYgeyAhW2lzX3JlbW90ZSB0YXJnZXRdIH0gewotKyAgICBzZXQgZ2Ri c2VydmVyX2RpciBbc3RhbmRhcmRfb3V0cHV0X2ZpbGUgImdkYnNlcnZlci1kaXIiXS8KLSt9IGVs c2UgewotKyAgICBsYXBwZW5kIGdkYl9maW5pc2hfaG9va3MgY2xlYW51cF9yZW1vdGVfdGFyZ2V0 Ci0rICAgIHNldCBnZGJzZXJ2ZXJfZGlyICIiCi0rfQotKwotKyMgQ29weSBmaWxlcyB0byB0aGUg dGFyZ2V0IChpZiBuZWVkZWQpLgotK3NldCB0YXJnZXRfYmluZmlsZSBbZ2RiX3JlbW90ZV9kb3du bG9hZCB0YXJnZXQgJGJpbmZpbGVdCi0rc2V0IHRhcmdldF9kZWJ1Z2luZm8gW2dkYl9yZW1vdGVf ZG93bmxvYWQgdGFyZ2V0ICRoaWRkZW5fZGVidWdpbmZvXQotKwotKyMgU2V0dXAgdGhlIGRlYnVn IGluZm9ybWF0aW9uIG9uIHRoZSB0YXJnZXQuCi0rc2V0IGRlYnVnZGlyICIke2dkYnNlcnZlcl9k aXJ9ZGVidWciCi0rcmVtb3RlX2V4ZWMgdGFyZ2V0IFwKLSsgICAgIm1rZGlyIC1wICRkZWJ1Z2Rp ci9bZmlsZSBkaXJuYW1lICRidWlsZF9pZF9maWxlbmFtZV0iCi0rcmVtb3RlX2V4ZWMgdGFyZ2V0 IFwKLSsgICAgImxuIC1zZiAkdGFyZ2V0X2RlYnVnaW5mbyAkZGVidWdkaXIvJGJ1aWxkX2lkX2Zp bGVuYW1lIgotKwotKyMgU3RhcnQgR0RCIGFuZCBsb2FkIGdsb2JhbCBCSU5GSUxFLiAgSWYgREVC VUdJTkZPX0ZJTEUgaXMgbm90IHRoZQotKyMgZW1wdHkgc3RyaW5nIHRoZW4gdGhpcyBjb250YWlu cyB0aGUgJy5idWlsZC1pZC94eC94eHguLi4ueHh4eCcgcGFydAotKyMgb2YgdGhlIGZpbGVuYW1l IHdoaWNoIHdlIGV4cGVjdCBHREIgdG8gcmVhZCBmcm9tIHRoZSByZW1vdGUgdGFyZ2V0LgotKyMg SWYgREVCVUdJTkZPX0ZJTEUgaXMgdGhlIGVtcHR5IHN0cmluZyB0aGVuIHdlIGRvbid0IGV4cGVj dCBHREIgdG8KLSsjIGZpbmQgYW55IGRlYnVnIGluZm9ybWF0aW9uLgotK3Byb2MgbG9hZF9iaW5m aWxlX2NoZWNrX2RlYnVnX2lzX2ZvdW5kIHsgZGVidWdpbmZvX2ZpbGUgdGVzdG5hbWUgfSB7Ci0r ICAgIHdpdGhfdGVzdF9wcmVmaXggIiR0ZXN0bmFtZSIgewotKwl3aXRoX3RpbWVvdXRfZmFjdG9y IDUgewotKwkgICAgIyBQcm9iaW5nIGZvciAuYnVpbGQtaWQgYmFzZWQgZGVidWcgZmlsZXMgb24g cmVtb3RlCi0rCSAgICAjIHRhcmdldHMgdXNlcyB0aGUgdkZpbGU6c3RhdCBwYWNrZXQgYnkgZGVm YXVsdCwgdGhvdWdoCi0rCSAgICAjIHRoZXJlIGlzIGEgd29yayBhcm91bmQgdGhhdCBhdm9pZHMg dGhpcyB3aGljaCBjYW4gYmUKLSsJICAgICMgdXNlZCBpZiBHREIgaXMgY29ubmVjdGVkIHRvIGFu IG9sZGVyIGdkYnNlcnZlciB3aXRob3V0Ci0rCSAgICAjICdzdGF0JyBzdXBwb3J0LgotKwkgICAg IwotKwkgICAgIyBDaGVjayB0aGUgd29yayBhcm91bmQgd29ya3MgYnkgZGlzYWJsaW5nIHVzZSBv ZiB0aGUKLSsJICAgICMgdkZpbGU6c3RhdCBwYWNrZXQuCi0rCSAgICBmb3JlYWNoX3dpdGhfcHJl Zml4IHN0YXRfcGt0IHthdXRvIG9mZn0gewotKwkJY2xlYW5fcmVzdGFydAotKwotKwkJZ2RiX3Rl c3Rfbm9fb3V0cHV0ICJzZXQgZGVidWctZmlsZS1kaXJlY3RvcnkgZGVidWciIFwKLSsJCSAgICAi c2V0IGRlYnVnLWZpbGUtZGlyZWN0b3J5IgotKwotKwkJZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJzZXQg c3lzcm9vdCB0YXJnZXQ6IgotKwotKwkJZ2RiX3Rlc3QgInNldCByZW1vdGUgaG9zdGlvLXN0YXQt cGFja2V0ICRzdGF0X3BrdCIKLSsKLSsJCSMgTWFrZSBzdXJlIHdlJ3JlIGRpc2Nvbm5lY3RlZCwg aW4gY2FzZSB3ZSdyZSB0ZXN0aW5nIHdpdGggYW4KLSsJCSMgZXh0ZW5kZWQtcmVtb3RlIGJvYXJk LCB0aGVyZWZvcmUgYWxyZWFkeSBjb25uZWN0ZWQuCi0rCQlnZGJfdGVzdCAiZGlzY29ubmVjdCIg Ii4qIgotKwotKwkJIyBTdGFydCBnZGJzZXJ2ZXIuICBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgYWZ0 ZXIgc3RhcnRpbmcgR0RCLiAgV2hlbgotKwkJIyBnZGJzZXJ2ZXIgaXMgcnVubmluZyBsb2NhbCB0 byBHREIsIHN0YXJ0IGdkYnNlcnZlciBpbiBhIHN1Yi1kaXJlY3RvcnksCi0rCQkjIHRoaXMgcHJl dmVudHMgR0RCIGZyb20gZmluZGluZyB0aGUgZGVidWcgaW5mb3JtYXRpb24gaXRzZWxmLgotKwkJ aWYgeyAhW2lzX3JlbW90ZSB0YXJnZXRdIH0gewotKwkJICAgIHdpdGhfY3dkICQ6OmdkYnNlcnZl cl9kaXIgewotKwkJCXNldCByZXMgW2dkYnNlcnZlcl9zdGFydCAiIiAkOjp0YXJnZXRfYmluZmls ZV0KLSsJCSAgICB9Ci0rCQl9IGVsc2UgewotKwkJICAgIHNldCByZXMgW2dkYnNlcnZlcl9zdGFy dCAiIiAkOjp0YXJnZXRfYmluZmlsZV0KLSsJCX0KLSsJCXNldCBnZGJzZXJ2ZXJfcHJvdG9jb2wg W2xpbmRleCAkcmVzIDBdCi0rCQlzZXQgZ2Ric2VydmVyX2dkYnBvcnQgW2xpbmRleCAkcmVzIDFd Ci0rCi0rCQkjIENvbm5lY3QgdG8gZ2Ric2VydmVyLiAgVGhlIG91dHB1dCB3aWxsIGJlIHBsYWNl ZCBpbnRvIHRoZSBnbG9iYWwKLSsJCSMgR0RCX1RBUkdFVF9SRU1PVEVfQ01EX01TRywgYW5kIHdl J2xsIG1hdGNoIGFnYWluc3QgdGhpcyBiZWxvdy4KLSsJCWdkYl9hc3NlcnQge1tnZGJfdGFyZ2V0 X2NtZCAkZ2Ric2VydmVyX3Byb3RvY29sICRnZGJzZXJ2ZXJfZ2RicG9ydF0gPT0gMH0gXAotKwkJ ICAgICJjb25uZWN0IHRvIGdkYnNlcnZlciIKLSsKLSsJCWlmIHsgJGRlYnVnaW5mb19maWxlIG5l ICIiIH0gewotKwkJICAgIGdkYl9hc3NlcnQgeyBbcmVnZXhwICJSZWFkaW5nIHN5bWJvbHMgZnJv bSB0YXJnZXQ6ZGVidWcvW3N0cmluZ190b19yZWdleHAgJGRlYnVnaW5mb19maWxlXVxcLlxcLlxc LiIgXAotKwkJCQkgICAgICAkOjpnZGJfdGFyZ2V0X3JlbW90ZV9jbWRfbXNnXSB9IFwKLSsJCQki ZGVidWdpbmZvIHdhcyByZWFkIHZpYSBidWlsZC1pZCIKLSsJCSAgICBnZGJfYXNzZXJ0IHsgW3Jl Z2V4cCAiUmVhZGluZyBkZWJ1Zy9bc3RyaW5nX3RvX3JlZ2V4cCAkZGVidWdpbmZvX2ZpbGVdIGZy b20gcmVtb3RlIHRhcmdldFxcLlxcLlxcLiIgXAotKwkJCQkgICAgICAkOjpnZGJfdGFyZ2V0X3Jl bW90ZV9jbWRfbXNnXSB9IFwKLSsJCQkiZGVidWdpbmZvIHdhcyByZWFkIGZyb20gcmVtb3RlIHRh cmdldCIKLSsJCX0gZWxzZSB7Ci0rCQkgICAgZ2RiX2Fzc2VydCB7IFtyZWdleHAgIlxcKE5vIGRl YnVnZ2luZyBzeW1ib2xzIGZvdW5kIGluIFxbXlxyXG5cXSsvJDo6dGVzdGZpbGVcXCkiIFwKLSsJ CQkJICAgICAgJDo6Z2RiX3RhcmdldF9yZW1vdGVfY21kX21zZ10gfQotKwkJfQotKwkgICAgfQot Kwl9Ci0rICAgIH0KLSt9Ci0rCi0rIyBSZXR1cm4gYSBjb3B5IG9mIEZJTEVOQU1FLCB3aGljaCBz aG91bGQgZW5kICcuZGVidWcnLCB3aXRoIE5VTUJFUgotKyMgYWRkZWQsIGUuZy4gYWRkX3NlcW5v IDEgImZvby5kZWJ1ZyIgLS0+ICJmb28uMS5kZWJ1ZyIuCi0rcHJvYyBhZGRfc2Vxbm8geyBudW1i ZXIgZmlsZW5hbWUgfSB7Ci0rICAgIHJldHVybiBbcmVnc3ViICJcLmRlYnVnXCQiICRmaWxlbmFt ZSAiLiR7bnVtYmVyfS5kZWJ1ZyJdCi0rfQotKwotKyMgUHJlY29tcHV0ZSBzZXF1ZW5jZSBudW1i ZXJlZCBidWlsZC1pZCBmaWxlbmFtZXMuCi0rc2V0IGJ1aWxkX2lkXzFfZmlsZW5hbWUgW2FkZF9z ZXFubyAxICRidWlsZF9pZF9maWxlbmFtZV0KLStzZXQgYnVpbGRfaWRfMl9maWxlbmFtZSBbYWRk X3NlcW5vIDIgJGJ1aWxkX2lkX2ZpbGVuYW1lXQotK3NldCBidWlsZF9pZF8zX2ZpbGVuYW1lIFth ZGRfc2Vxbm8gMyAkYnVpbGRfaWRfZmlsZW5hbWVdCi0rCi0rbG9hZF9iaW5maWxlX2NoZWNrX2Rl YnVnX2lzX2ZvdW5kICRidWlsZF9pZF9maWxlbmFtZSBcCi0rICAgICJmaW5kIGRlYnVnaW5mbyB3 aXRoIGEgc2luZ2xlIGJ1aWxkLWlkIGZpbGUiCi0rCi0rcmVtb3RlX2V4ZWMgdGFyZ2V0ICJsbiAt ZnMgJHRhcmdldF9kZWJ1Z2luZm8gXAotKwkJCSRkZWJ1Z2Rpci8kYnVpbGRfaWRfMV9maWxlbmFt ZSIKLStyZW1vdGVfZXhlYyB0YXJnZXQgImxuIC1mcyAkdGFyZ2V0X2RlYnVnaW5mbyBcCi0rCQkJ JGRlYnVnZGlyLyRidWlsZF9pZF8yX2ZpbGVuYW1lIgotK3JlbW90ZV9leGVjIHRhcmdldCAibG4g LWZzICR0YXJnZXRfZGVidWdpbmZvIFwKLSsJCQkkZGVidWdkaXIvJGJ1aWxkX2lkXzNfZmlsZW5h bWUiCi0rCi0rbG9hZF9iaW5maWxlX2NoZWNrX2RlYnVnX2lzX2ZvdW5kICRidWlsZF9pZF9maWxl bmFtZSBcCi0rICAgICJmaW5kIGRlYnVnaW5mbyB3aXRoIDQgYnVpbGQtaWQgZmlsZXMiCi0rCi0r cmVtb3RlX2V4ZWMgdGFyZ2V0ICJsbiAtZnMgJG1pc3NpbmdfZGVidWdpbmZvICRkZWJ1Z2Rpci8k YnVpbGRfaWRfZmlsZW5hbWUiCi0rCi0rbG9hZF9iaW5maWxlX2NoZWNrX2RlYnVnX2lzX2ZvdW5k ICRidWlsZF9pZF8xX2ZpbGVuYW1lIFwKLSsgICAgImZpbmQgZGVidWdpbmZvLCBmaXJzdCBidWls ZC1pZCBmaWxlIGlzIGJhZCIKLSsKLStyZW1vdGVfZXhlYyB0YXJnZXQgImxuIC1mcyAkbWlzc2lu Z19kZWJ1Z2luZm8gXAotKwkJCSRkZWJ1Z2Rpci8kYnVpbGRfaWRfMV9maWxlbmFtZSIKLStyZW1v dGVfZXhlYyB0YXJnZXQgImxuIC1mcyAkbWlzc2luZ19kZWJ1Z2luZm8gXAotKwkJCSRkZWJ1Z2Rp ci8kYnVpbGRfaWRfM19maWxlbmFtZSIKLSsKLStsb2FkX2JpbmZpbGVfY2hlY2tfZGVidWdfaXNf Zm91bmQgJGJ1aWxkX2lkXzJfZmlsZW5hbWUgIFwKLSsgICAgImZpbmQgZGVidWdpbmZvLCBmaXJz dCAyIGJ1aWxkLWlkIGZpbGVzIGFyZSBiYWQiCi0rCi0rcmVtb3RlX2V4ZWMgdGFyZ2V0ICJsbiAt ZnMgJG1pc3NpbmdfZGVidWdpbmZvIFwKLSsJCQkkZGVidWdkaXIvJGJ1aWxkX2lkXzJfZmlsZW5h bWUiCi0rCi0rbG9hZF9iaW5maWxlX2NoZWNrX2RlYnVnX2lzX2ZvdW5kICIiICBcCi0rICAgICJj YW5ub3QgZmluZCBkZWJ1Z2luZm8sIGFsbCBidWlsZC1pZCBmaWxlcyBhcmUgYmFkIgotKwotK3Jl bW90ZV9leGVjIHRhcmdldCAibG4gLWZzICR0YXJnZXRfZGVidWdpbmZvIFwKLSsJCQkkZGVidWdk aXIvJGJ1aWxkX2lkXzNfZmlsZW5hbWUiCi0rCi0rbG9hZF9iaW5maWxlX2NoZWNrX2RlYnVnX2lz X2ZvdW5kICRidWlsZF9pZF8zX2ZpbGVuYW1lICBcCi0rICAgICJmaW5kIGRlYnVnaW5mbywgbGFz dCBidWlsZC1pZCBmaWxlIGlzIGdvb2QiCi0rCi0rcmVtb3RlX2V4ZWMgdGFyZ2V0ICJybSAtZiAk ZGVidWdkaXIvJGJ1aWxkX2lkXzFfZmlsZW5hbWUiCi0rCi0rbG9hZF9iaW5maWxlX2NoZWNrX2Rl YnVnX2lzX2ZvdW5kICIiICBcCi0rICAgICJjYW5ub3QgZmluZCBkZWJ1Z2luZm8sIGZpbGUgd2l0 aCBzZXFubyAxIGlzIG1pc3NpbmciCi1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9saWIvZHdh cmYuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZHdhcmYuZXhwCi0tLS0gYS9nZGIvdGVzdHN1aXRl L2xpYi9kd2FyZi5leHAKLSsrKyBiL2dkYi90ZXN0c3VpdGUvbGliL2R3YXJmLmV4cAotQEAgLTI5 OTMsMjUgKzI5OTMsMzIgQEAgbmFtZXNwYWNlIGV2YWwgRHdhcmYgewotIAotICAgICBwcm9jIF9u b3RlIHt0eXBlIG5hbWUgaGV4ZGF0YX0gewotIAlzZXQgbmFtZWxlbiBbZXhwciBbc3RyaW5nIGxl bmd0aCAkbmFtZV0gKyAxXQotKwlzZXQgZGF0YWxlbiBbZXhwciBbc3RyaW5nIGxlbmd0aCAkaGV4 ZGF0YV0gLyAyXQotIAotIAkjIE5hbWUgc2l6ZS4KLSAJX29wIC40Ynl0ZSAkbmFtZWxlbgotIAkj IERhdGEgc2l6ZS4KLS0JX29wIC40Ynl0ZSBbZXhwciBbc3RyaW5nIGxlbmd0aCAkaGV4ZGF0YV0g LyAyXQotKwlfb3AgLjRieXRlICRkYXRhbGVuCi0gCSMgVHlwZS4KLSAJX29wIC40Ynl0ZSAkdHlw ZQotIAkjIFRoZSBuYW1lLgotIAlfb3AgLmFzY2lpIFtfcXVvdGUgJG5hbWVdCi0tCSMgQWxpZ25t ZW50LgotKwkjIEFsaWdubWVudCAodG8gNC1ieXRlIGJvdW5kYXJ5KS4KLSAJc2V0IGFsaWduIDIK LSAJc2V0IHRvdGFsIFtleHByIHsoJG5hbWVsZW4gKyAoMSA8PCAkYWxpZ24pIC0gMSkgJiAtKDEg PDwgJGFsaWduKX1dCi0gCWZvciB7c2V0IGkgJG5hbWVsZW59IHskaSA8ICR0b3RhbH0ge2luY3Ig aX0gewotLQkgICAgX29wIC5ieXRlIDAKLSsJICAgIF9vcCAuYnl0ZSAwIHBhZGRpbmcKLSAJfQot IAkjIFRoZSBkYXRhLgotIAlmb3JlYWNoIHthIGJ9IFtzcGxpdCAkaGV4ZGF0YSB7fV0gewotIAkg ICAgX29wIC5ieXRlIDB4JGEkYgotIAl9Ci0rCSMgQWxpZ25tZW50ICh0byA0LWJ5dGUgYm91bmRh cnkpLgotKwlzZXQgYWxpZ24gMgotKwlzZXQgdG90YWwgW2V4cHIgeygkZGF0YWxlbiArICgxIDw8 ICRhbGlnbikgLSAxKSAmIC0oMSA8PCAkYWxpZ24pfV0KLSsJZm9yIHtzZXQgaSAkZGF0YWxlbn0g eyRpIDwgJHRvdGFsfSB7aW5jciBpfSB7Ci0rCSAgICBfb3AgLmJ5dGUgMCBwYWRkaW5nCi0rCX0K LSAgICAgfQotIAotICAgICAjIEVtaXQgYSBub3RlIHNlY3Rpb24gaG9sZGluZyB0aGUgZ2l2ZW4g YnVpbGQtaWQuCi1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9saWIvZ2RiLmV4cCBiL2dkYi90 ZXN0c3VpdGUvbGliL2dkYi5leHAKLS0tLSBhL2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAKLSsr KyBiL2dkYi90ZXN0c3VpdGUvbGliL2dkYi5leHAKLUBAIC01MzM3LDYgKzUzMzcsNyBAQCBwcm9j IHF1b3RlX2Zvcl9ob3N0IHsgYXJncyB9IHsKLSAjICAgICBkZWJ1ZyBpbmZvcm1hdGlvbgotICMg ICAtIHRleHRfc2VnbWVudD1hZGRyOiBUZWxsIHRoZSBsaW5rZXIgdG8gcGxhY2UgdGhlIHRleHQg c2VnbWVudCBhdCBBRERSLgotICMgICAtIGJ1aWxkLWlkOiBFbnN1cmUgdGhlIGZpbmFsIGJpbmFy eSBpbmNsdWRlcyBhIGJ1aWxkLWlkLgotKyMgICAtIG5vLWJ1aWxkLWlkOiBFbnN1cmUgdGhlIGZp bmFsIGJpbmFyeSBkb2VzIG5vdCBpbmNsdWRlIGEgYnVpbGQtaWQuCi0gIyAgIC0gY29sdW1uLWlu Zm8vbm8tY29sdW1uLWluZm86IEVuYWJsZS9EaXNhYmxlIGdlbmVyYXRpb24gb2YgY29sdW1uIHRh YmxlCi0gIyAgICAgaW5mb3JtYXRpb24uCi0gIwotQEAgLTU0NDgsNiArNTQ0OSwxOCBAQCBwcm9j IGdkYl9jb21waWxlIHtzb3VyY2UgZGVzdCB0eXBlIG9wdGlvbnN9IHsKLSAJbGFwcGVuZCBuZXdf b3B0aW9ucyAiYWRkaXRpb25hbF9mbGFncz0tV2wsLS1idWlsZC1pZCIKLSAgICAgfQotIAotKyAg ICAjIElmIHRoZSAnbm8tYnVpbGQtaWQnIG9wdGlvbiBpcyB1c2VkIHRoZW4gZGlzYWJsZSB0aGUg YnVpbGQtaWQuCi0rICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJG9wdGlvbnMgbm8tYnVpbGQtaWRd ID4gMH0gewotKwlsYXBwZW5kIG5ld19vcHRpb25zICJhZGRpdGlvbmFsX2ZsYWdzPS1XbCwtLWJ1 aWxkLWlkPW5vbmUiCi0rICAgIH0KLSsKLSsgICAgIyBTYW5pdHkgY2hlY2suICBJZiBib3RoICdi dWlsZC1pZCcgYW5kICduby1idWlsZC1pZCcgYXJlIHVzZWQKLSsgICAgIyB0aGVuIHdoYXQgaXMg ZXhwZWN0ZWQgZnJvbSB1cyEKLSsgICAgaWYge1tsc2VhcmNoIC1leGFjdCAkb3B0aW9ucyBidWls ZC1pZF0gPiAwCi0rCSYmIFtsc2VhcmNoIC1leGFjdCAkb3B0aW9ucyBuby1idWlsZC1pZF0gPiAw fSB7Ci0rCWVycm9yICJjYW5ub3QgdXNlIGJ1aWxkLWlkIGFuZCBuby1idWlsZC1pZCBvcHRpb25z IgotKyAgICB9Ci0rCi0gICAgICMgVHJlYXRpbmcgLmMgaW5wdXQgZmlsZXMgYXMgQysrIGlzIGRl cHJlY2F0ZWQgaW4gQ2xhbmcsIHNvCi0gICAgICMgZXhwbGljaXRseSBmb3JjZSBDKysgbGFuZ3Vh Z2UuCi0gICAgIGlmIHsgISRnZXR0aW5nX2NvbXBpbGVyX2luZm8KLUBAIC04MTQ0LDIxICs4MTU3 LDI1IEBAIHByb2MgZ2V0X2J1aWxkX2lkIHsgZmlsZW5hbWUgfSB7Ci0gCi0gIyBSZXR1cm4gdGhl IGJ1aWxkLWlkIGhleCBzdHJpbmcgKHVzdWFsbHkgMTYwIGJpdHMgYXMgNDAgaGV4IGNoYXJhY3Rl cnMpCi0gIyBjb252ZXJ0ZWQgdG8gdGhlIGZvcm06IC5idWlsZC1pZC9hYi9jZGVmMTIzNC4uLjg5 LmRlYnVnCi0rIwotKyMgVGhlICcuZGVidWcnIHN1ZmZpeCBjYW4gYmUgY2hhbmdlZCBieSBwYXNz aW5nIHRoZSBTVUZGSVggYXJndW1lbnQuCi0rIwotICMgUmV0dXJuICIiIGlmIG5vIGJ1aWxkLWlk IGZvdW5kLgotLXByb2MgYnVpbGRfaWRfZGVidWdfZmlsZW5hbWVfZ2V0IHsgZmlsZW5hbWUgfSB7 Ci0rcHJvYyBidWlsZF9pZF9kZWJ1Z19maWxlbmFtZV9nZXQgeyBmaWxlbmFtZSB7c3VmZml4ICIu ZGVidWcifSB9IHsKLSAgICAgc2V0IGRhdGEgW2dldF9idWlsZF9pZCAkZmlsZW5hbWVdCi0gICAg IGlmIHsgJGRhdGEgPT0gIiIgfSB7Ci0gCXJldHVybiAiIgotICAgICB9Ci0gICAgIHJlZ3N1YiB7 Xi4ufSAkZGF0YSB7XDAvfSBkYXRhCi0tICAgIHJldHVybiAiLmJ1aWxkLWlkLyR7ZGF0YX0uZGVi dWciCi0rICAgIHJldHVybiAiLmJ1aWxkLWlkLyR7ZGF0YX0ke3N1ZmZpeH0iCi0gfQotIAotICMg REVTVCBzaG91bGQgYmUgYSBmaWxlIGNvbXBpbGVkIHdpdGggZGVidWcgaW5mb3JtYXRpb24uICBU aGlzIHByb2MKLS0jIGNyZWF0ZXMgdHdvIG5ldyBmaWxlcyBERVNULmRlYnVnIHdoaWNoIGNvbnRh aW5zIHRoZSBkZWJ1ZwotLSMgaW5mb3JtYXRpb24gZXh0cmFjdGVkIGZyb20gREVTVCwgYW5kIERF U1Quc3RyaXBwZWQsIHdoaWNoIGlzIGEgY29weQotLSMgb2YgREVTVCB3aXRoIHRoZSBkZWJ1ZyBp bmZvcm1hdGlvbiByZW1vdmVkLiAgQSAnLmdudV9kZWJ1Z2xpbmsnCi0tIyBzZWN0aW9uIHdpbGwg YmUgYWRkZWQgdG8gREVTVC5zdHJpcHBlZCB0aGF0IHBvaW50cyB0byBERVNULmRlYnVnLgotKyMg Y3JlYXRlcyBERVNULmRlYnVnIHdoaWNoIGNvbnRhaW5zIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBl eHRyYWN0ZWQKLSsjIGZyb20gREVTVCwgYW5kIERFU1QgaXMgdXBkYXRlZCB3aXRoIHRoZSBkZWJ1 ZyBpbmZvcm1hdGlvbiByZW1vdmVkLgotKyMKLSsjIEJ5IGRlZmF1bHQgYSAnLmdudV9kZWJ1Z2xp bmsnIHNlY3Rpb24gd2lsbCBiZSBhZGRlZCB0byBERVNUIHRoYXQKLSsjIHBvaW50cyB0byBERVNU LmRlYnVnLgotICMKLSAjIElmIEFSR1MgaXMgcGFzc2VkLCBpdCBpcyBhIGxpc3Qgb2Ygb3B0aW9u YWwgZmxhZ3MuICBUaGUgY3VycmVudGx5Ci0gIyBzdXBwb3J0ZWQgZmxhZ3MgYXJlOgotQEAgLTgx NjYsNyArODE4Myw3IEBAIHByb2MgYnVpbGRfaWRfZGVidWdfZmlsZW5hbWVfZ2V0IHsgZmlsZW5h bWUgfSB7Ci0gIyAgIC0gbm8tbWFpbiA6IHJlbW92ZSB0aGUgc3ltYm9sIGVudHJ5IGZvciBtYWlu IGZyb20gdGhlIHNlcGFyYXRlCi0gIyAgICAgICAgICAgICAgIGRlYnVnIGZpbGUgREVTVC5kZWJ1 ZywKLSAjICAgLSBuby1kZWJ1Z2xpbmsgOiBkb24ndCBhZGQgdGhlICcuZ251X2RlYnVnbGluaycg c2VjdGlvbiB0bwotLSMgICAgICAgICAgICAgICAgICAgIERFU1Quc3RyaXBwZWQuCi0rIyAgICAg ICAgICAgICAgICAgICAgREVTVC4KLSAjCi0gIyBGdW5jdGlvbiByZXR1cm5zIHplcm8gb24gc3Vj Y2Vzcy4gIEZ1bmN0aW9uIHdpbGwgcmV0dXJuIG5vbi16ZXJvIGZhaWx1cmUgY29kZQotICMgb24g c29tZSB0YXJnZXRzIG5vdCBzdXBwb3J0aW5nIHNlcGFyYXRlIGRlYnVnIGluZm8gKHN1Y2ggYXMg aTM4Ni1tc2RvcykuCi1AQCAtODIyNSwyMCArODI0MiwyNiBAQCBwcm9jIGdkYl9nbnVfc3RyaXBf ZGVidWcgeyBkZXN0IGFyZ3MgfSB7Ci0gICAgICMgVW5sZXNzIHRoZSAibm8tZGVidWdsaW5rIiBm bGFnIGlzIHBhc3NlZCwgdGhlbiBsaW5rIHRoZSB0d28KLSAgICAgIyBwcmV2aW91cyBvdXRwdXQg ZmlsZXMgdG9nZXRoZXIsIGFkZGluZyB0aGUgLmdudV9kZWJ1Z2xpbmsKLSAgICAgIyBzZWN0aW9u IHRvIHRoZSBzdHJpcHBlZF9maWxlLCBjb250YWluaW5nIGEgcG9pbnRlciB0byB0aGUKLS0gICAg IyBkZWJ1Z19maWxlLCBzYXZlIHRoZSBuZXcgZmlsZSBpbiBkZXN0LgotKyAgICAjIGRlYnVnX2Zp bGUuCi0gICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJGFyZ3MgIm5vLWRlYnVnbGluayJdID09IC0x fSB7Ci0tCXNldCByZXN1bHQgW2NhdGNoICJleGVjICRvYmpjb3B5X3Byb2dyYW0gLS1hZGQtZ251 LWRlYnVnbGluaz0ke2RlYnVnX2ZpbGV9ICR7c3RyaXBwZWRfZmlsZX0gJHtkZXN0fSIgb3V0cHV0 XQotKwlzZXQgcmVzdWx0IFtjYXRjaCAiZXhlYyAkb2JqY29weV9wcm9ncmFtIC0tYWRkLWdudS1k ZWJ1Z2xpbms9JHtkZWJ1Z19maWxlfSAke3N0cmlwcGVkX2ZpbGV9ICR7c3RyaXBwZWRfZmlsZX0t dG1wIiBvdXRwdXRdCi0gCXZlcmJvc2UgInJlc3VsdCBpcyAkcmVzdWx0IgotIAl2ZXJib3NlICJv dXRwdXQgaXMgJG91dHB1dCIKLSAJaWYgeyRyZXN1bHQgPT0gMX0gewotIAkgICAgcmV0dXJuIDEK LSAJfQotKwlmaWxlIGRlbGV0ZSAiJHtzdHJpcHBlZF9maWxlfSIKLSsJZmlsZSByZW5hbWUgIiR7 c3RyaXBwZWRfZmlsZX0tdG1wIiAiJHtzdHJpcHBlZF9maWxlfSIKLSAgICAgfQotIAotICAgICAj IFdvcmthcm91bmQgUFIgYmludXRpbHMvMTA4MDI6Ci0gICAgICMgUHJlc2VydmUgdGhlICd4JyBi aXQgYWxzbyBmb3IgUElFcyAoUG9zaXRpb24gSW5kZXBlbmRlbnQgRXhlY3V0YWJsZXMpLgotLSAg ICBzZXQgcGVybSBbZmlsZSBhdHRyaWJ1dGVzICR7c3RyaXBwZWRfZmlsZX0gLXBlcm1pc3Npb25z XQotLSAgICBmaWxlIGF0dHJpYnV0ZXMgJHtkZXN0fSAtcGVybWlzc2lvbnMgJHBlcm0KLSsgICAg c2V0IHBlcm0gW2ZpbGUgYXR0cmlidXRlcyAke2Rlc3R9IC1wZXJtaXNzaW9uc10KLSsgICAgZmls ZSBhdHRyaWJ1dGVzICR7c3RyaXBwZWRfZmlsZX0gLXBlcm1pc3Npb25zICRwZXJtCi0rCi0rICAg ICMgTW92ZSB0aGUgc3RyaXBwZWRfZmlsZSBiYWNrIGludG8gZGVzdC4KLSsgICAgZmlsZSBkZWxl dGUgJHtkZXN0fQotKyAgICBmaWxlIHJlbmFtZSAke3N0cmlwcGVkX2ZpbGV9ICR7ZGVzdH0KLSAK LSAgICAgcmV0dXJuIDAKLSB9Ci1kaWZmIC0tZ2l0IGEvZ2Ric2VydmVyL2hvc3Rpby5jYyBiL2dk YnNlcnZlci9ob3N0aW8uY2MKLS0tLSBhL2dkYnNlcnZlci9ob3N0aW8uY2MKLSsrKyBiL2dkYnNl cnZlci9ob3N0aW8uY2MKLUBAIC00ODYsNiArNDg2LDQyIEBAIGhhbmRsZV9mc3RhdCAoY2hhciAq b3duX2J1ZiwgaW50ICpuZXdfcGFja2V0X2xlbikKLSAgICAgd3JpdGVfZW5uIChvd25fYnVmKTsK LSB9Ci0gCi0rc3RhdGljIHZvaWQKLStoYW5kbGVfc3RhdCAoY2hhciAqb3duX2J1ZiwgaW50ICpu ZXdfcGFja2V0X2xlbikKLSt7Ci0rICBpbnQgYnl0ZXNfc2VudDsKLSsgIGNoYXIgKnA7Ci0rICBz dHJ1Y3Qgc3RhdCBzdDsKLSsgIHN0cnVjdCBmaW9fc3RhdCBmc3Q7Ci0rICBjaGFyIGZpbGVuYW1l W0hPU1RJT19QQVRIX01BWF07Ci0rCi0rICBwID0gb3duX2J1ZiArIHN0cmxlbiAoInZGaWxlOnN0 YXQ6Iik7Ci0rCi0rICBpZiAocmVxdWlyZV9maWxlbmFtZSAoJnAsIGZpbGVuYW1lKQotKyAgICAg IHx8IHJlcXVpcmVfZW5kIChwKSkKLSsgICAgewotKyAgICAgIGhvc3Rpb19wYWNrZXRfZXJyb3Ig KG93bl9idWYpOwotKyAgICAgIHJldHVybjsKLSsgICAgfQotKwotKyAgaWYgKGxzdGF0IChmaWxl bmFtZSwgJnN0KSA9PSAtMSkKLSsgICAgewotKyAgICAgIGhvc3Rpb19lcnJvciAob3duX2J1Zik7 Ci0rICAgICAgcmV0dXJuOwotKyAgICB9Ci0rCi0rICBob3N0X3RvX2ZpbGVpb19zdGF0ICgmc3Qs ICZmc3QpOwotKwotKyAgYnl0ZXNfc2VudCA9IGhvc3Rpb19yZXBseV93aXRoX2RhdGEgKG93bl9i dWYsCi0rCQkJCSAgICAgICAoY2hhciAqKSAmZnN0LCBzaXplb2YgKGZzdCksCi0rCQkJCSAgICAg ICBuZXdfcGFja2V0X2xlbik7Ci0rCi0rICAvKiBJZiB0aGUgcmVzcG9uc2UgZG9lcyBub3QgZml0 IGludG8gYSBzaW5nbGUgcGFja2V0LCBkbyBub3QgYXR0ZW1wdAotKyAgICAgdG8gcmV0dXJuIGEg cGFydGlhbCByZXNwb25zZSwgYnV0IHNpbXBseSBmYWlsLiAgKi8KLSsgIGlmIChieXRlc19zZW50 IDwgc2l6ZW9mIChmc3QpKQotKyAgICB3cml0ZV9lbm4gKG93bl9idWYpOwotK30KLSsKLSBzdGF0 aWMgdm9pZAotIGhhbmRsZV9jbG9zZSAoY2hhciAqb3duX2J1ZikKLSB7Ci1AQCAtNjAzLDYgKzYz OSw4IEBAIGhhbmRsZV92RmlsZSAoY2hhciAqb3duX2J1ZiwgaW50IHBhY2tldF9sZW4sIGludCAq bmV3X3BhY2tldF9sZW4pCi0gICAgIGhhbmRsZV9wd3JpdGUgKG93bl9idWYsIHBhY2tldF9sZW4p OwotICAgZWxzZSBpZiAoc3RhcnRzd2l0aCAob3duX2J1ZiwgInZGaWxlOmZzdGF0OiIpKQotICAg ICBoYW5kbGVfZnN0YXQgKG93bl9idWYsIG5ld19wYWNrZXRfbGVuKTsKLSsgIGVsc2UgaWYgKHN0 YXJ0c3dpdGggKG93bl9idWYsICJ2RmlsZTpzdGF0OiIpKQotKyAgICBoYW5kbGVfc3RhdCAob3du X2J1ZiwgbmV3X3BhY2tldF9sZW4pOwotICAgZWxzZSBpZiAoc3RhcnRzd2l0aCAob3duX2J1Ziwg InZGaWxlOmNsb3NlOiIpKQotICAgICBoYW5kbGVfY2xvc2UgKG93bl9idWYpOwotICAgZWxzZSBp ZiAoc3RhcnRzd2l0aCAob3duX2J1ZiwgInZGaWxlOnVubGluazoiKSkKLWRpZmYgLS1naXQgYS9n ZGJzdXBwb3J0L3BhdGhzdHVmZi5jYyBiL2dkYnN1cHBvcnQvcGF0aHN0dWZmLmNjCi0tLS0gYS9n ZGJzdXBwb3J0L3BhdGhzdHVmZi5jYwotKysrIGIvZ2Ric3VwcG9ydC9wYXRoc3R1ZmYuY2MKLUBA IC0xOTgsMTEgKzE5OCwxNyBAQCBwYXRoX2pvaW4gKGdkYjo6YXJyYXlfdmlldzxjb25zdCBjaGFy ICo+IHBhdGhzKQotICAgICB7Ci0gICAgICAgY29uc3QgY2hhciAqcGF0aCA9IHBhdGhzW2ldOwot IAotLSAgICAgIGlmIChpID4gMCkKLS0JZ2RiX2Fzc2VydCAoc3RybGVuIChwYXRoKSA9PSAwIHx8 ICFJU19BQlNPTFVURV9QQVRIIChwYXRoKSk7Ci0tCi0tICAgICAgaWYgKCFyZXQuZW1wdHkgKCkg JiYgIUlTX0RJUl9TRVBBUkFUT1IgKHJldC5iYWNrICgpKSkKLS0JICByZXQgKz0gJy8nOwotKyAg ICAgIGlmICghcmV0LmVtcHR5ICgpKQotKwl7Ci0rCSAgLyogSWYgUkVUIGRvZXNuJ3QgYWxyZWFk eSBlbmQgd2l0aCBhIHNlcGFyYXRvciB0aGVuIGFkZCBvbmUuICAqLwotKwkgIGlmICghSVNfRElS X1NFUEFSQVRPUiAocmV0LmJhY2sgKCkpKQotKwkgICAgcmV0ICs9ICcvJzsKLSsKLSsJICAvKiBO b3cgdGhhdCBSRVQgZW5kcyB3aXRoIGEgc2VwYXJhdG9yLCBpZ25vcmUgYW55IGF0IHRoZSBzdGFy dCBvZgotKwkgICAgIFBBVEguICAqLwotKwkgIHdoaWxlIChJU19ESVJfU0VQQVJBVE9SIChwYXRo WzBdKSkKLSsJICAgICsrcGF0aDsKLSsJfQotIAotICAgICAgIHJldC5hcHBlbmQgKHBhdGgpOwot ICAgICB9Ci1kaWZmIC0tZ2l0IGEvZ2Ric3VwcG9ydC9wYXRoc3R1ZmYuaCBiL2dkYnN1cHBvcnQv cGF0aHN0dWZmLmgKLS0tLSBhL2dkYnN1cHBvcnQvcGF0aHN0dWZmLmgKLSsrKyBiL2dkYnN1cHBv cnQvcGF0aHN0dWZmLmgKLUBAIC02NCw4ICs2NCwxMCBAQCBleHRlcm4gY29uc3QgY2hhciAqY2hp bGRfcGF0aCAoY29uc3QgY2hhciAqcGFyZW50LCBjb25zdCBjaGFyICpjaGlsZCk7Ci0gCi0gLyog Sm9pbiBlbGVtZW50cyBpbiBQQVRIUyBpbnRvIGEgc2luZ2xlIHBhdGguCi0gCi0tICAgVGhlIGZp cnN0IGVsZW1lbnQgY2FuIGJlIGFic29sdXRlIG9yIHJlbGF0aXZlLiAgQWxsIHRoZSBvdGhlcnMg bXVzdCBiZQotLSAgIHJlbGF0aXZlLiAgKi8KLSsgICBUaGUgZmlyc3QgZWxlbWVudCBjYW4gYmUg YWJzb2x1dGUgb3IgcmVsYXRpdmUuICBPbmx5IGEgc2luZ2xlIGRpcmVjdG9yeQotKyAgIHNlcGFy YXRvciB3aWxsIGJlIHBsYWNlZCBiZXR3ZWVuIGVsZW1lbnRzIG9mIFBBVEhTLCBpZiBvbmUgZWxl bWVudCBlbmRzCi0rICAgd2l0aCBhIGRpcmVjdG9yeSBzZXBhcmF0b3IsIG9yIGFuIGVsZW1lbnQg c3RhcnRzIHdpdGggYSBkaXJlY3RvcnkKLSsgICBzZXBhcmF0b3IsIHRoZW4gdGhlc2Ugd2lsbCBi ZSBjb2xsYXBzZWQgaW50byBhIHNpbmdsZSBzZXBhcmF0b3IuICAqLwotIAotIGV4dGVybiBzdGQ6 OnN0cmluZyBwYXRoX2pvaW4gKGdkYjo6YXJyYXlfdmlldzxjb25zdCBjaGFyICo+IHBhdGhzKTsK LSAKCmRpZmYgLS1naXQgYS9nZGItY2F0Y2hwb2ludC1yZS1zZXQucGF0Y2ggYi9nZGItY2F0Y2hw b2ludC1yZS1zZXQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ODk3MDAu LjAwMDAwMDAKLS0tIGEvZ2RiLWNhdGNocG9pbnQtcmUtc2V0LnBhdGNoCisrKyAvZGV2L251bGwK QEAgLTEsNTc1ICswLDAgQEAKLUZyb20gRkVET1JBX1BBVENIRVMgTW9uIFNlcCAxNyAwMDowMDow MCAyMDAxCi1Gcm9tOiBBbmRyZXcgQnVyZ2VzcyA8YWJ1cmdlc3NAcmVkaGF0LmNvbT4KLURhdGU6 IFdlZCwgMTQgQXVnIDIwMjQgMTU6MTY6NDYgKzAxMDAKLVN1YmplY3Q6IGdkYi1jYXRjaHBvaW50 LXJlLXNldC5wYXRjaAotCi0gICAgOzsgQmFja3BvcnQgdXBzdHJlYW0gY29tbWl0IGE5MmU5NDMw MTRmIHRvIGZpeCByaGJ6MjMwNDI5Ni4KLQotZ2RiOiBpbXBsZW1lbnQgOjpyZV9zZXQgbWV0aG9k IGZvciBjYXRjaHBvaW50IGNsYXNzCi0KLUl0IGlzIHBvc3NpYmxlIHRvIGF0dGFjaCBhIGNvbmRp dGlvbiB0byBhIGNhdGNocG9pbnQuICBUaGlzIGNhbid0IGJlCi1kb25lIHdoZW4gdGhlIGNhdGNo cG9pbnQgaXMgY3JlYXRlZCwgYnV0IGNhbiBiZSBkb25lIHdpdGggdGhlCi0nY29uZGl0aW9uJyBj b21tYW5kLCB0aGlzIGlzIGRvY3VtZW50ZWQgaW4gdGhlIEdEQiBtYW51YWw6Ci0KLSAgICAgWW91 IGNhbiBhbHNvIHVzZSB0aGUgJ2lmJyBrZXl3b3JkIHdpdGggdGhlICd3YXRjaCcgY29tbWFuZC4g IFRoZQotICAnY2F0Y2gnIGNvbW1hbmQgZG9lcyBub3QgcmVjb2duaXplIHRoZSAnaWYnIGtleXdv cmQ7ICdjb25kaXRpb24nIGlzIHRoZQotICBvbmx5IHdheSB0byBpbXBvc2UgYSBmdXJ0aGVyIGNv bmRpdGlvbiBvbiBhIGNhdGNocG9pbnQuCi0KLUEgR0RCIGNyYXNoIHdhcyByZXBvcnRlZCBhZ2Fp bnN0IEZlZG9yYSBHREIgd2hlcmUgYSB1c2VyIGhhZCBhdHRhY2hlZAotYSBjb25kaXRpb24gdG8g YSBjYXRjaHBvaW50IGFuZCB0aGVuIHJlc3RhcnRlZCB0aGUgaW5mZXJpb3IuICBXaGVuIHRoZQot Y2F0Y2hwb2ludCB3YXMgaGl0IEdEQiB3b3VsZCBpbW1lZGlhdGVseSBzZWdmYXVsdC4gIEkgd2Fz IGFibGUgdG8KLXJlcHJvZHVjZSB0aGUgZmFpbHVyZSBvbiB1cHN0cmVhbSBHREI6Ci0KLSAgKGdk YikgZmlsZSAuL3NvbWUvYmluYXJ5Ci0gIChnZGIpIGNhdGNoIHN5c2NhbGwgd3JpdGUKLSAgKGdk YikgcnVuCi0gIC4uLgotICBDYXRjaHBvaW50IDEgKHJldHVybmVkIGZyb20gc3lzY2FsbCB3cml0 ZSksIDB4MDAwMDdmZmZmN2I1OTRhNyBpbiB3cml0ZSAoKSBmcm9tIC9saWI2NC9saWJjLnNvLjYK LSAgKGdkYikgY29uZGl0aW9uIDEgJF9zdHJlcSgoY2hhciAqKSAkcnNpLCAiZm9vYmFyIikgPT0g MAotICAoZ2RiKSBydW4KLSAgLi4uCi0gIEZhdGFsIHNpZ25hbDogU2VnbWVudGF0aW9uIGZhdWx0 Ci0gIC4uLgotCi1XaGF0IGhhcHBlbmVkIGhlcmUgaXMgdGhhdCBvbiB0aGUgc3lzdGVtIGluIHF1 ZXN0aW9uIHdlIGhhZCBkZWJ1ZwotaW5mb3JtYXRpb24gYXZhaWxhYmxlIGZvciBib3RoIHRoZSBt YWluIGFwcGxpY2F0aW9uIGFuZCBhbHNvIGZvcgotbGliYy4KLQotV2hlbiB0aGUgY29uZGl0aW9u IHdhcyBhdHRhY2hlZCBHREIgd2FzIHN0b3BwZWQgaW5zaWRlIGxpYmMgYW5kIGFzIHRoZQotZGVi dWcgaW5mb3JtYXRpb24gd2FzIGF2YWlsYWJsZSBHREIgZm91bmQgYSByZWZlcmVuY2UgdG8gdGhl ICdjaGFyJwotdHlwZSAoZm9yIHRoZSBjYXN0KSBpbnNpZGUgbGliYydzIGRlYnVnIGluZm9ybWF0 aW9uLgotCi1XaGVuIHRoZSBpbmZlcmlvciBpcyByZXN0YXJ0ZWQgR0RCIGRpc2NhcmRzIGFsbCBv ZiB0aGUgb2JqZmlsZXMKLWFzc29jaWF0ZWQgd2l0aCBzaGFyZWQgbGlicmFyaWVzLCBhbmQgdGhp cyBpbmNsdWRlcyBsaWJjLiAgQXMgc3VjaCB0aGUKLSdjaGFyJyB0eXBlLCB3aGljaCBpcyBvYmpm aWxlIG93bmVkLCBpcyBkaXNjYXJkZWQgYW5kIHRoZSByZWZlcmVuY2UgdG8KLWl0IGZyb20gdGhl IGNhdGNocG9pbnQncyBjb25kaXRpb24gZXhwcmVzc2lvbiBiZWNvbWVzIGludmFsaWQuCi0KLU5v dywgaWYgaXQgd2VyZSBhIGJyZWFrcG9pbnQgaW5zdGVhZCBvZiBhIGNhdGNocG9pbnQsIHdoYXQg d291bGQKLWhhcHBlbiBpcyB0aGF0IGFmdGVyIHRoZSBzaGFyZWQgbGlicmFyeSBvYmpmaWxlcyBo YWQgYmVlbiBkaXNjYXJkZWQKLXdlJ2QgY2FsbCB0aGUgdmlydHVhbCBicmVha3BvaW50OjpyZV9z ZXQgbWV0aG9kIG9uIHRoZSBicmVha3BvaW50LCBhbmQKLXRoaXMgd291bGQgdXBkYXRlIHRoZSBi cmVha3BvaW50J3MgY29uZGl0aW9uIGV4cHJlc3Npb24uICBUaGlzIGlzCi1iZWNhdXNlIHVzZXIg YnJlYWtwb2ludHMgYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiB0aGUgY29kZV9icmVha3BvaW50 Ci1jbGFzcyBhbmQgdGhlIGNvZGVfYnJlYWtwb2ludDo6cmVfc2V0IG1ldGhvZCBjb250YWlucyB0 aGUgY29kZSB0bwotcmVjb21wdXRlIHRoZSBicmVha3BvaW50J3MgY29uZGl0aW9uIGV4cHJlc3Np b24uCi0KLUhvd2V2ZXIsIGNhdGNocG9pbnRzIGFyZSBpbnN0YW5jZXMgb2YgdGhlIGNhdGNocG9p bnQgY2xhc3Mgd2hpY2gKLWluaGVyaXRzIGZyb20gdGhlIGJhc2UgYnJlYWtwb2ludCBjbGFzcy4g IFRoZSBjYXRjaHBvaW50IGNsYXNzIGRvZXMKLW5vdCBvdmVycmlkZSBicmVha3BvaW50OjpyZV9z ZXQsIGFuZCBicmVha3BvaW50OjpyZV9zZXQgaXMgZW1wdHkhCi0KLVRoZSBjb25zZXF1ZW5jZSBv ZiB0aGlzIGlzIHRoYXQgY2F0Y2hwb2ludCBjb25kaXRpb24gZXhwcmVzc2lvbnMgYXJlCi1uZXZl ciByZWNvbXB1dGVkLCBhbmQgdGhlIGRhbmdsaW5nIHBvaW50ZXIgdG8gdGhlIG5vdyBkZWxldGVk LCBvYmpmaWxlCi1vd25lZCB0eXBlICdjaGFyJyBpcyBsZWZ0IGFyb3VuZCwgYW5kLCB3aGVuIHRo ZSBjYXRjaHBvaW50IGlzIGhpdCwgdGhlCi1pbnZhbGlkIHBvaW50ZXIgaXMgdXNlZCB3aGVuIEdE QiB0cmllcyB0byBldmFsdWF0ZSB0aGUgY29uZGl0aW9uCi1leHByZXNzaW9uLgotCi1JbiB0aGlz IGNvbW1pdCBJIGhhdmUgaW1wbGVtZW50ZWQgY2F0Y2hwb2ludDo6cmVfc2V0LiAgVGhpcyBpcyBw cmV0dHkKLXNpbXBsZSBhbmQganVzdCByZWNvbXB1dGVzIHRoZSBjb25kaXRpb24gZXhwcmVzc2lv biBhcyB5b3UnZCBleHBlY3QuCi1JZiB0aGUgY29uZGl0aW9uIGRvZXNuJ3QgZXZhbHVhdGUgdGhl biB0aGUgY2F0Y2hwb2ludCBpcyBtYXJrZWQgYXMKLWRpc2FibGVkX2J5X2NvbmQuCi0KLUkgaGF2 ZSBhbHNvIG1hZGUgYnJlYWtwb2ludDo6cmVfc2V0IHB1cmUgdmlydHVhbC4gIFdpdGggdGhlIGFk ZGl0aW9uCi1vZiBjYXRjaHBvaW50OjpyZV9zZXQgZXZlcnkgc3ViLWNsYXNzIG9mIGJyZWFrcG9p bnQgbm93IGltcGxlbWVudHMgdGhlCi06OnJlX3NldCBtZXRob2QsIGFuZCBpZiBuZXcgc3ViLWNs YXNzZXMgYXJlIGFkZGVkIGluIHRoZSBmdXR1cmUgSQotdGhpbmsgdGhhdCB0aGV5IF9tdXN0XyBp bXBsZW1lbnQgOjpyZV9zZXQgaW4gb3JkZXIgdG8gYXZvaWQgdGhpcwotcHJvYmxlbS4gIEFzIHN1 Y2ggZmFsbGluZyBiYWNrIHRvIGFuIGVtcHR5IGJyZWFrcG9pbnQ6OnJlX3NldCBkb2Vzbid0Ci1z ZWVtIGhlbHBmdWwuCi0KLUZvciB0ZXN0aW5nIEkgaGF2ZSBub3QgcmVsaWVkIG9uIHN0b3BwaW5n IGluIGxpYmMgYW5kIGhhdmluZyBsaWJjCi1kZWJ1ZyBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIHRo aXMgZG9lc24ndCBzZWVtIGxpa2UgYSBnb29kIGlkZWEgZm9yCi10aGUgR0RCIHRlc3RzdWl0ZS4g IEluc3RlYWQgSSBjcmVhdGUgYSAocmF0aGVyIHBvaW50bGVzcykgY29uZGl0aW9uCi1jaGVjayB0 aGF0IHVzZXMgYSB0eXBlIGRlZmluZWQgb25seSB3aXRoaW4gYSBzaGFyZWQgbGlicmFyeS4gIFdo ZW4gdGhlCi1pbmZlcmlvciBpcyByZXN0YXJ0ZWQgdGhlIGNhdGNocG9pbnQgd2lsbCB0ZW1wb3Jh cmlseSBiZSBtYXJrZWQgYXMKLWRpc2FibGVkX2J5X2NvbmQgKGR1ZSB0byB0aGUgdHlwZSBub3Qg YmVpbmcgYXZhaWxhYmxlKSwgYnV0IG9uY2UgdGhlCi1zaGFyZWQgbGlicmFyeSBpcyBsb2FkZWQg YWdhaW4gdGhlIGNhdGNocG9pbnQgd2lsbCBiZSByZS1lbmFibGVkLgotV2l0aG91dCB0aGUgZml4 ZXMgYWJvdmUgdGhlbiB0aGUgc2FtZSBjcmFzaGluZyBiZWhhdmlvdXIgY2FuIGJlCi1vYnNlcnZl ZC4KLQotT25lIHBvaW50IG9mIG5vdGU6IHRoZSBkYW5nbGluZyBwb2ludGVyIG9mIGNvdXJzZSBl eHBvc2VzIHVuZGVmaW5lZAotYmVoYXZpb3VyLCB3aXRoIG5vIGd1YXJhbnRlZSBvZiBhIGNyYXNo LiAgVGhvdWdoIGEgY3Jhc2ggaXMgd2hhdCBJCi11c3VhbGx5IHNlZSBJIGhhdmUgc2VlIEdEQiB0 aHJvdyByYW5kb20gZXJyb3JzIGZyb20gdGhlIGV4cHJlc3Npb24KLWV2YWx1YXRpb24gY29kZSwg YW5kIG9uY2UsIEkgc2F3IG5vIHByb2JsZW0gYXQgYWxsISAgSWYgeW91IHJlY29tcGlsZQotR0RC IHdpdGggdGhlIGFkZHJlc3Mgc2FuaXRpemVyLCBvciBydW4gdW5kZXIgdmFsZ3JpbmQsIHRoZW4g dGhlIGJ1Zwotd2lsbCBiZSBleHBvc2VkIGV2ZXJ5IHRpbWUuCi0KLUFmdGVyIGZpeGluZyB0aGlz IGJ1ZyBJIGNoZWNrZWQgYnVnemlsbGEgYW5kIGZvdW5kIFBSIGdkYi8yOTk2MCB3aGljaAotaXMg dGhlIHNhbWUgYnVnLiAgSSB3YXMgYWJsZSB0byByZXByb2R1Y2UgdGhlIGJ1ZyBiZWZvcmUgdGhp cyBjb21taXQsCi1hbmQgYWZ0ZXIgdGhpcyBjb21taXQgR0RCIGlzIG5vIGxvbmdlciBjcmFzaGlu Zy4KLQotQmVmb3JlOgotCi0gIChnZGIpIGZpbGUgL3RtcC9oZWxsby54Ci0gIFJlYWRpbmcgc3lt Ym9scyBmcm9tIC90bXAvaGVsbG8ueC4uLgotICAoZ2RiKSBydW4KLSAgU3RhcnRpbmcgcHJvZ3Jh bTogL3RtcC9oZWxsby54Ci0gIEhlbGxvIFdvcmxkCi0gIFtJbmZlcmlvciAxIChwcm9jZXNzIDEx MDE4NTUpIGV4aXRlZCBub3JtYWxseV0KLSAgKGdkYikgY2F0Y2ggc3lzY2FsbCAxCi0gIENhdGNo cG9pbnQgMSAoc3lzY2FsbCAnd3JpdGUnIFsxXSkKLSAgKGdkYikgY29uZGl0aW9uIDEgd3JpdGUu ZmQgPT0gMQotICAoZ2RiKSBydW4KLSAgU3RhcnRpbmcgcHJvZ3JhbTogL3RtcC9oZWxsby54Ci0K LSAgRmF0YWwgc2lnbmFsOiBTZWdtZW50YXRpb24gZmF1bHQKLSAgLi4uCi0KLUFuZCBhZnRlcjoK LQotICAoZ2RiKSBmaWxlIC90bXAvaGVsbG8ueAotICBSZWFkaW5nIHN5bWJvbHMgZnJvbSAvdG1w L2hlbGxvLnguLi4KLSAgKGdkYikgcnVuCi0gIFN0YXJ0aW5nIHByb2dyYW06IC90bXAvaGVsbG8u eAotICBIZWxsbyBXb3JsZAotICBBcmdzOiAoIDAgLCAxICwgMiAsIDMgLCA0ICwgNSAsIDYgLCA3 ICkKLSAgW0luZmVyaW9yIDEgKHByb2Nlc3MgMTEwMjM3MykgZXhpdGVkIG5vcm1hbGx5XQotICAo Z2RiKSBjYXRjaCBzeXNjYWxsIDEKLSAgQ2F0Y2hwb2ludCAxIChzeXNjYWxsICd3cml0ZScgWzFd KQotICAoZ2RiKSBjb25kaXRpb24gMSB3cml0ZS5mZCA9PSAxCi0gIChnZGIpIHIKLSAgU3RhcnRp bmcgcHJvZ3JhbTogL3RtcC9oZWxsby54Ci0gIEVycm9yIGluIHRlc3RpbmcgY29uZGl0aW9uIGZv ciBicmVha3BvaW50IDE6Ci0gIEF0dGVtcHQgdG8gZXh0cmFjdCBhIGNvbXBvbmVudCBvZiBhIHZh bHVlIHRoYXQgaXMgbm90IGEgc3RydWN0dXJlLgotCi0gIENhdGNocG9pbnQgMSAoY2FsbCB0byBz eXNjYWxsIHdyaXRlKSwgMHgwMDAwN2ZmZmY3ZWI5NGE3IGluIHdyaXRlICgpCi0gICAgIGZyb20g L2xpYjY0L2xpYmMuc28uNgotICAoZ2RiKSBwdHlwZSB3cml0ZQotICB0eXBlID0gPHVua25vd24g cmV0dXJuIHR5cGU+ICgpCi0gIChnZGIpCi0KLU5vdGljZSB3ZSBnZXQgdGhlIGVycm9yIG5vdyB3 aGVuIHRoZSBjb25kaXRpb24gZmFpbHMgdG8gZXZhbHVhdGUuCi1UaGlzIHNlZW1zIHJlYXNvbmFi bGUgZ2l2ZW4gdGhhdCAnd3JpdGUnIHdpbGwgYmUgYSBmdW5jdGlvbiwgYW5kCi1pbmRlZWQgdGhl IGZpbmFsICdwdHlwZScgc2hvd3MgdGhhdCBpdCdzIGEgZnVuY3Rpb24sIG5vdCBhIHN0cnVjdC4K LQotQnVnOiBodHRwczovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0y OTk2MAotCi1SZXZpZXdlZC1CeTogVG9tIGRlIFZyaWVzIDx0ZGV2cmllc0BzdXNlLmRlPgotCi1k aWZmIC0tZ2l0IGEvZ2RiL2JyZWFrcG9pbnQuYyBiL2dkYi9icmVha3BvaW50LmMKLS0tLSBhL2dk Yi9icmVha3BvaW50LmMKLSsrKyBiL2dkYi9icmVha3BvaW50LmMKLUBAIC04MTQ2LDYgKzgxNDYs NjAgQEAgY2F0Y2hwb2ludDo6Y2F0Y2hwb2ludCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGJv b2wgdGVtcCwKLSAgIHBzcGFjZSA9IGN1cnJlbnRfcHJvZ3JhbV9zcGFjZTsKLSB9Ci0gCi0rLyog U2VlIGJyZWFrcG9pbnQuaC4gICovCi0rCi0rdm9pZAotK2NhdGNocG9pbnQ6OnJlX3NldCAoKQot K3sKLSsgIC8qIEFsbCBjYXRjaHBvaW50cyBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMg cHJvZ3JhbV9zcGFjZS4gICovCi0rICBnZGJfYXNzZXJ0IChwc3BhY2UgIT0gbnVsbHB0cik7Ci0r Ci0rICAvKiBDYXRjaHBvaW50cyBoYXZlIGEgc2luZ2xlIGR1bW15IGxvY2F0aW9uLiAgKi8KLSsg IGdkYl9hc3NlcnQgKGxvY2F0aW9ucyAoKS5zaXplICgpID09IDEpOwotKyAgYnBfbG9jYXRpb24g JmJsID0gbV9sb2NhdGlvbnMuZnJvbnQgKCk7Ci0rCi0rICBpZiAoY29uZF9zdHJpbmcgPT0gbnVs bHB0cikKLSsgICAgewotKyAgICAgIC8qIEl0IHNob3VsZG4ndCBiZSBwb3NzaWJsZSB0byBoYXZl IGEgcGFyc2VkIGNvbmRpdGlvbiBleHByZXNzaW9uCi0rCSBjYWNoZWQgb24gdGhpcyBsb2NhdGlv biBpZiB0aGUgY2F0Y2hwb2ludCBkb2Vzbid0IGhhdmUgYSBjb25kaXRpb24KLSsJIHN0cmluZyBz ZXQuICAqLwotKyAgICAgIGdkYl9hc3NlcnQgKGJsLmNvbmQgPT0gbnVsbHB0cik7Ci0rCi0rICAg ICAgLyogTm90aGluZyB0byByZS1jb21wdXRlLCBhbmQgdGhlIGNhdGNocG9pbnQgY2Fubm90IGNo YW5nZS4gICovCi0rICAgICAgcmV0dXJuOwotKyAgICB9Ci0rCi0rICBib29sIHByZXZpb3VzX2Rp c2FibGVkX2J5X2NvbmQgPSBibC5kaXNhYmxlZF9ieV9jb25kOwotKwotKyAgLyogU3RhcnQgYnkg bWFya2luZyB0aGUgbG9jYXRpb24gZGlzYWJsZWQgYW5kIGRpc2NhcmRpbmcgdGhlIHByZXZpb3Vz bHkKLSsgICAgIGNvbXB1dGVkIGNvbmRpdGlvbiBleHByZXNzaW9uLiAgTm93IGlmIHdlIGdldCBh biBleGNlcHRpb24sIGV2ZW4gaWYKLSsgICAgIGl0J3MgYSBxdWl0IGV4Y2VwdGlvbiwgd2UnbGwg bGVhdmUgdGhlIGxvY2F0aW9uIGRpc2FibGVkIGFuZCB0aGVyZQotKyAgICAgd2lsbCBiZSBubyAo cG9zc2libHkgaW52YWxpZCkgZXhwcmVzc2lvbiBjYWNoZWQuICAqLwotKyAgYmwuZGlzYWJsZWRf YnlfY29uZCA9IHRydWU7Ci0rICBibC5jb25kID0gbnVsbHB0cjsKLSsKLSsgIGNvbnN0IGNoYXIg KnMgPSBjb25kX3N0cmluZy5nZXQgKCk7Ci0rICB0cnkKLSsgICAgewotKyAgICAgIHN3aXRjaF90 b19wcm9ncmFtX3NwYWNlX2FuZF90aHJlYWQgKHBzcGFjZSk7Ci0rCi0rICAgICAgYmwuY29uZCA9 IHBhcnNlX2V4cF8xICgmcywgYmwuYWRkcmVzcywgYmxvY2tfZm9yX3BjIChibC5hZGRyZXNzKSwK LSsJCQkgICAgIG51bGxwdHIpOwotKyAgICAgIGJsLmRpc2FibGVkX2J5X2NvbmQgPSBmYWxzZTsK LSsgICAgfQotKyAgY2F0Y2ggKGNvbnN0IGdkYl9leGNlcHRpb25fZXJyb3IgJmUpCi0rICAgIHsK LSsgICAgICAvKiBBbnkgZXhjZXB0aW9uIHRocm93biBtdXN0IGJlIGZyb20gZWl0aGVyIHRoZSBw YXJzZV9leHBfMSBvcgotKwkgZWFybGllciBpbiB0aGUgdHJ5IGJsb2NrLiAgQXMgc3VjaCB0aGUg Zm9sbG93aW5nIHR3byBhc3NlcnRzCi0rCSBzaG91bGQgYmUgdHJ1ZS4gICovCi0rICAgICAgZ2Ri X2Fzc2VydCAoYmwuZGlzYWJsZWRfYnlfY29uZCk7Ci0rICAgICAgZ2RiX2Fzc2VydCAoYmwuY29u ZCA9PSBudWxscHRyKTsKLSsgICAgfQotKwotKyAgaWYgKHByZXZpb3VzX2Rpc2FibGVkX2J5X2Nv bmQgIT0gYmwuZGlzYWJsZWRfYnlfY29uZCkKLSsgICAgbm90aWZ5X2JyZWFrcG9pbnRfbW9kaWZp ZWQgKHRoaXMpOwotK30KLSsKLSAvKiBOb3RpZnkgaW50ZXJwcmV0ZXJzIGFuZCBvYnNlcnZlcnMg dGhhdCBicmVha3BvaW50IEIgd2FzIGNyZWF0ZWQuICAqLwotIAotIHN0YXRpYyB2b2lkCi1kaWZm IC0tZ2l0IGEvZ2RiL2JyZWFrcG9pbnQuaCBiL2dkYi9icmVha3BvaW50LmgKLS0tLSBhL2dkYi9i cmVha3BvaW50LmgKLSsrKyBiL2dkYi9icmVha3BvaW50LmgKLUBAIC03MDIsMTEgKzcwMiwxMCBA QCBzdHJ1Y3QgYnJlYWtwb2ludCA6IHB1YmxpYyBpbnRydXNpdmVfbGlzdF9ub2RlPGJyZWFrcG9p bnQ+Ci0gCi0gICAvKiBSZWV2YWx1YXRlIGEgYnJlYWtwb2ludC4gIFRoaXMgaXMgbmVjZXNzYXJ5 IGFmdGVyIHN5bWJvbHMgY2hhbmdlCi0gICAgICAoZS5nLiwgYW4gZXhlY3V0YWJsZSBvciBEU08g d2FzIGxvYWRlZCwgb3IgdGhlIGluZmVyaW9yIGp1c3QKLS0gICAgIHN0YXJ0ZWQpLiAgKi8KLS0g IHZpcnR1YWwgdm9pZCByZV9zZXQgKCkKLS0gIHsKLS0gICAgLyogTm90aGluZyB0byByZS1zZXQu ICAqLwotLSAgfQotKyAgICAgc3RhcnRlZCkuICBUaGlzIGlzIHB1cmUgdmlydHVhbCBhcywgYXQg YSBtaW5pbXVtLCBlYWNoIHN1Yi1jbGFzcyBtdXN0Ci0rICAgICByZWNvbXB1dGUgYW55IGNhY2hl ZCBjb25kaXRpb24gZXhwcmVzc2lvbnMgYmFzZWQgb2ZmIG9mIHRoZQotKyAgICAgY29uZF9zdHJp bmcgbWVtYmVyIHZhcmlhYmxlLiAgKi8KLSsgIHZpcnR1YWwgdm9pZCByZV9zZXQgKCkgPSAwOwot IAotICAgLyogSW5zZXJ0IHRoZSBicmVha3BvaW50IG9yIHdhdGNocG9pbnQgb3IgYWN0aXZhdGUg dGhlIGNhdGNocG9pbnQuCi0gICAgICBSZXR1cm4gMCBmb3Igc3VjY2VzcywgMSBpZiB0aGUgYnJl YWtwb2ludCwgd2F0Y2hwb2ludCBvcgotQEAgLTExMjAsNiArMTExOSwxMCBAQCBzdHJ1Y3QgY2F0 Y2hwb2ludCA6IHB1YmxpYyBicmVha3BvaW50Ci0gICBjYXRjaHBvaW50IChzdHJ1Y3QgZ2RiYXJj aCAqZ2RiYXJjaCwgYm9vbCB0ZW1wLCBjb25zdCBjaGFyICpjb25kX3N0cmluZyk7Ci0gCi0gICB+ Y2F0Y2hwb2ludCAoKSBvdmVycmlkZSA9IDA7Ci0rCi0rICAvKiBJZiB0aGUgY2F0Y2hwb2ludCBo YXMgYSBjb25kaXRpb24gc2V0IHRoZW4gcmVjb21wdXRlIHRoZSBjYWNoZWQKLSsgICAgIGV4cHJl c3Npb24gd2l0aGluIHRoZSBzaW5nbGUgZHVtbXkgbG9jYXRpb24uICAqLwotKyAgdm9pZCByZV9z ZXQgKCkgb3ZlcnJpZGU7Ci0gfTsKLSAKLSAMCi1kaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9n ZGIuYmFzZS9yZXNldC1jYXRjaHBvaW50LWNvbmQtbGliLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5i YXNlL3Jlc2V0LWNhdGNocG9pbnQtY29uZC1saWIuYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0t LSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvcmVzZXQtY2F0Y2hwb2lu dC1jb25kLWxpYi5jCi1AQCAtMCwwICsxLDc2IEBACi0rLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0 IG9mIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KLSsKLSsgICBDb3B5cmlnaHQgMjAyNCBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsKLSsgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyAgIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5Ci0rICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBv ZiB0aGUgTGljZW5zZSwgb3IKLSsgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgotKwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rCi0rICAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsgICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHNpZ25hbC5o PgotKyNpbmNsdWRlIDx1bmlzdGQuaD4KLSsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rI2luY2x1 ZGUgPHN5cy93YWl0Lmg+Ci0rI2luY2x1ZGUgPHVuaXN0ZC5oPgotKyNpbmNsdWRlIDxhc3NlcnQu aD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rCi0rLyogVGhpcyB0eXBlIGlzIHVzZWQgYnkgR0RC LiAgKi8KLStzdHJ1Y3QgbGliX3R5cGUKLSt7Ci0rICBpbnQgYTsKLSsgIGludCBiOwotKyAgaW50 IGM7Ci0rfTsKLSsKLSsvKiBFbnN1cmUgdGhlIHR5cGUgYWJvdmUgaXMgdXNlZC4gICovCi0rdm9s YXRpbGUgc3RydWN0IGxpYl90eXBlIGdsb2JhbF9saWJfb2JqZWN0ID0geyAxLCAyLCAzIH07Ci0r Ci0rLyogVGhpcyBwb2ludGVyIGlzIGNoZWNrZWQgYnkgR0RCLiAgKi8KLSt2b2xhdGlsZSB2b2lk ICpvcGFxdWVfcHRyID0gMDsKLSsKLSt2b2lkCi0rbGliX2Z1bmNfdGVzdF9zeXNjYWxsICh2b2lk KQotK3sKLSsgIHB1dHMgKCJJbnNpZGUgbGlicmFyeVxuIik7Ci0rICBmZmx1c2ggKHN0ZG91dCk7 Ci0rfQotKwotK3N0YXRpYyB2b2lkCi0rc2lnX2hhbmRsZXIgKGludCBzaWdubykKLSt7Ci0rICAv KiBOb3RoaW5nLiAgKi8KLSt9Ci0rCi0rdm9pZAotK2xpYl9mdW5jX3Rlc3Rfc2lnbmFsICh2b2lk KQotK3sKLSsgIHNpZ25hbCAoU0lHVVNSMSwgc2lnX2hhbmRsZXIpOwotKwotKyAga2lsbCAoZ2V0 cGlkICgpLCBTSUdVU1IxKTsKLSt9Ci0rCi0rdm9pZAotK2xpYl9mdW5jX3Rlc3RfZm9yayAodm9p ZCkKLSt7Ci0rICBwaWRfdCBwaWQgPSBmb3JrICgpOwotKyAgYXNzZXJ0IChwaWQgIT0gLTEpOwot KwotKyAgaWYgKHBpZCA9PSAwKQotKyAgICB7Ci0rICAgICAgLyogQ2hpbGQ6IGp1c3QgZXhpdC4g ICovCi0rICAgICAgZXhpdCAoMCk7Ci0rICAgIH0KLSsKLSsgIC8qIFBhcmVudC4gICovCi0rICB3 YWl0cGlkIChwaWQsIE5VTEwsIDApOwotK30KLWRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dk Yi5iYXNlL3Jlc2V0LWNhdGNocG9pbnQtY29uZC5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9y ZXNldC1jYXRjaHBvaW50LWNvbmQuYwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tLSAvZGV2L251 bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvcmVzZXQtY2F0Y2hwb2ludC1jb25kLmMK LUBAIC0wLDAgKzEsNTAgQEAKLSsvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUg R05VIGRlYnVnZ2VyLgotKwotKyAgIENvcHlyaWdodCAyMDI0IEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgotKwotKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0rICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSsgICB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNl LCBvcgotKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0rCi0rICAgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCi0rICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKLSsgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KLSsKLSsgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyAgIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8K LSsKLStleHRlcm4gdm9pZCBsaWJfZnVuY190ZXN0X3N5c2NhbGwgKHZvaWQpOwotK2V4dGVybiB2 b2lkIGxpYl9mdW5jX3Rlc3Rfc2lnbmFsICh2b2lkKTsKLStleHRlcm4gdm9pZCBsaWJfZnVuY190 ZXN0X2ZvcmsgKHZvaWQpOwotKwotKy8qIFdlIHVzZSB0aGlzIHRvIHBlcmZvcm0gc29tZSBmaWxs ZXIgd29yay4gICovCi0rdm9sYXRpbGUgaW50IGdsb2JhbF92YXIgPSAwOwotKwotKy8qIEp1c3Qg c29tZXdoZXJlIGZvciBHREIgdG8gcHV0IGEgYnJlYWtwb2ludC4gICovCi0rdm9pZAotK2JyZWFr cHRfYmVmb3JlX2V4aXQgKHZvaWQpCi0rewotKyAgLyogTm90aGluZy4gICovCi0rfQotKwotK2lu dAotK21haW4gKHZvaWQpCi0rewotKyNpZiBkZWZpbmVkIFRFU1RfU1lTQ0FMTAotKyAgbGliX2Z1 bmNfdGVzdF9zeXNjYWxsICgpOwotKyNlbGlmIGRlZmluZWQgVEVTVF9TSUdOQUwKLSsgIGxpYl9m dW5jX3Rlc3Rfc2lnbmFsICgpOwotKyNlbGlmIGRlZmluZWQgVEVTVF9GT1JLCi0rICBsaWJfZnVu Y190ZXN0X2ZvcmsgKCk7Ci0rI2Vsc2UKLSsjIGVycm9yIGNvbXBpbGUgd2l0aCBzdWl0YWJsZSAt RFRFU1RfeHh4IG1hY3JvIGRlZmluZWQKLSsjZW5kaWYKLSsKLSsgICsrZ2xvYmFsX3ZhcjsKLSsK LSsgIGJyZWFrcHRfYmVmb3JlX2V4aXQgKCk7Ci0rCi0rICByZXR1cm4gMDsKLSt9Ci1kaWZmIC0t Z2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9yZXNldC1jYXRjaHBvaW50LWNvbmQuZXhwIGIv Z2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9yZXNldC1jYXRjaHBvaW50LWNvbmQuZXhwCi1uZXcgZmls ZSBtb2RlIDEwMDY0NAotLS0tIC9kZXYvbnVsbAotKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFz ZS9yZXNldC1jYXRjaHBvaW50LWNvbmQuZXhwCi1AQCAtMCwwICsxLDE2OSBAQAotKyMgQ29weXJp Z2h0IDIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rIyBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQotKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKLSsjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rIyAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgotKyMKLSsjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsjIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsjIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rIwotKyMgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK LSsjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgotKwotKyMgVGVzdCB0aGF0IHRoZSBjb25kaXRpb24gZm9yIGEgY2F0 Y2hwb2ludCBpcyBjb3JyZWN0bHkgcmVzZXQgYWZ0ZXIKLSsjIHNoYXJlZCBsaWJyYXJpZXMgYXJl IHVubG9hZGVkLCBhcyBoYXBwZW5zIHdoZW4gYW4gaW5mZXJpb3IgaXMKLSsjIHJlc3RhcnRlZC4K LSsjCi0rIyBJZiB0aGlzIGlzIG5vdCBkb25lIHRoZW4sIHdoZW4gdGhlIGNhdGNocG9pbnQgaXMg aGl0IG9uIHRoZSBzZWNvbmQKLSsjIHJ1biwgd2UnbGwgZXZhbHVhdGUgdGhlIHBhcnNlZCBleHBy ZXNzaW9uIGZyb20gdGhlIGZpcnN0IHJ1biwgd2hpY2gKLSsjIG1pZ2h0IGluY2x1ZGUgcmVmZXJl bmNlcyB0byB0eXBlcyBvd25lZCBieSB0aGUgbm93IGRlbGV0ZWQgb2JqZmlsZQotKyMgKGZvciB0 aGUgc2hhcmVkIGxpYnJhcnkgbG9hZGVkIGluIHRoZSBmaXJzdCBydW4pLgotKyMKLSsjIFRoaXMg c2NyaXB0cyB0ZXN0cyBhIG51bWJlciBvZiBkaWZmZXJlbnQgY2F0Y2hwb2ludCB0eXBlcy4gIElu c2lkZQotKyMgR0RCIHRoZXNlIGFyZSBhbGwgc3ViLWNsYXNzZXMgb2YgdGhlICdjYXRjaHBvaW50 JyB0eXBlLCB3aGljaCBpcwotKyMgd2hlcmUgdGhlIGZpeCBmb3IgdGhlIGFib3ZlIGlzc3VlIHJl c2lkZXMsIHNvIGFsbCBjYXRjaHBvaW50IHR5cGVzCi0rIyBzaG91bGQgd29yayBjb3JyZWN0bHku Ci0rCi0rc3RhbmRhcmRfdGVzdGZpbGUgLmMgLWxpYi5jCi0rCi0rc2V0IGxpYmZpbGUgJGJpbmZp bGUtbGliLnNvCi0rCi0rc2V0IHB5ZmlsZSBbZ2RiX3JlbW90ZV9kb3dubG9hZCBob3N0ICR7c3Jj ZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0ucHldCi0rCi0raWYge1tidWlsZF9leGVjdXRhYmxl ICJidWlsZCBzaGFyZWQgbGlicmFyeSIgJGxpYmZpbGUgJHNyY2ZpbGUyIFwKLSsJIHtkZWJ1ZyBz aGxpYn1dID09IC0xfSB7Ci0rICAgIHJldHVybgotK30KLSsKLSsjIERlcGVuZGluZyBvbiB3aGV0 aGVyIG9yIG5vdCBsaWJjIGRlYnVnIGluZm8gaXMgaW5zdGFsbGVkLCB3aGVuIHdlCi0rIyBoaXQg YSBzeXNjYWxsIGNhdGNocG9pbnQgaW5zaWRlIGxpYmMgdGhlcmUgbWlnaHQgYmUgYSBzb3VyY2Ug bGluZQotKyMgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4KLSsjCi0rIyBUaGlzIHJlZ2V4cCB3aWxs IG1hdGNoIGFuIG9wdGlvbmFsIGxpbmUgYW5kIGNhbiBiZSBhZGRlZCB0byB0aGUKLSsjIGV4cGVj dGVkIGNhdGNocG9pbnQgb3V0cHV0IHRvIGlnbm9yZSB0aGUgKHBvc3NpYmx5IG1pc3NpbmcpIHNv dXJjZQotKyMgbGluZS4KLStzZXQgbGliY19zcmNfbGluZV9yZSAiKD86XHJcblxbXlxyXG5cXSsp PyIKLSsKLSsjIENoZWNrIHRoZSBQeXRob24gYnBfbW9kaWZpZWRfbGlzdCBhbmQgdGhlbiByZXNl dCB0aGUgbGlzdCBiYWNrIHRvCi0rIyBlbXB0eS4gIFRFU1ROQU1FIGlzIGp1c3QgYSBzdHJpbmcu ICBCUF9OVU0gaXMgYSBsaXN0IG9mIGJyZWFrcG9pbnQKLSsjIG51bWJlcnMgdGhhdCBhcmUgZXhw ZWN0ZWQgdG8gYXBwZWFyIChpbiB0aGUgZ2l2ZW4gb3JkZXIpIGluIHRoZQotKyMgYnBfbW9kaWZp ZWRfbGlzdC4KLSsKLStwcm9jIGNoZWNrX21vZGlmaWVkX2JwX2xpc3QgeyB0ZXN0bmFtZSBicF9u dW0gfSB7Ci0rICAgIGlmIHsgW2FsbG93X3B5dGhvbl90ZXN0c10gfSB7Ci0rCXNldCBleHBlY3Rl ZCBbam9pbiAkYnBfbnVtICIsICJdCi0rCi0rCWdkYl90ZXN0ICJweXRob24gcHJpbnQoYnBfbW9k aWZpZWRfbGlzdCkiICJcXFxbJGV4cGVjdGVkXFxcXSIgXAotKwkgICAgJHRlc3RuYW1lCi0rCWdk Yl90ZXN0X25vX291dHB1dCAtbm9wYXNzICJweXRob24gYnBfbW9kaWZpZWRfbGlzdD1cW1xdIiBc Ci0rCSAgICAicmVzZXQgYnBfbW9kaWZpZWRfbGlzdCBhZnRlciAkdGVzdG5hbWUiCi0rICAgIH0K LSt9Ci0rCi0rIyBCdWlsZCBhbiBleGVjdXRhYmxlIGFuZCBydW4gdGVzdHMgb24gJ2NhdGNoIE1P REUnLgotKwotK3Byb2MgcnVuX3Rlc3QgeyBtb2RlIH0gewotKyAgICBzZXQgZXhlY19uYW1lICR7 OjpiaW5maWxlfS0ke21vZGV9Ci0rCi0rICAgIHNldCBtYWNybyBURVNUX1tzdHJpbmcgdG91cHBl ciAkbW9kZV0KLSsKLSsgICAgaWYge1tidWlsZF9leGVjdXRhYmxlICJidWlsZCB0ZXN0IGV4ZWN1 dGFibGUiICRleGVjX25hbWUgJDo6c3JjZmlsZSBcCi0rCSAgICAgW2xpc3QgZGVidWcgc2hsaWI9 JDo6bGliZmlsZSBhZGRpdGlvbmFsX2ZsYWdzPS1EJHttYWNyb31dXSA9PSAtMX0gewotKwlyZXR1 cm4KLSsgICAgfQotKwotKyAgICBjbGVhbl9yZXN0YXJ0ICRleGVjX25hbWUKLSsgICAgZ2RiX2xv YWRfc2hsaWIgJDo6bGliZmlsZQotKwotKyAgICBpZiB7IVtydW50b19tYWluXX0gewotKwlyZXR1 cm4KLSsgICAgfQotKwotKyAgICBpZiB7ICRtb2RlIGVxICJzeXNjYWxsIiB9IHsKLSsJZ2RiX3Rl c3QgImNhdGNoIHN5c2NhbGwgd3JpdGUiIFwKLSsJICAgICJDYXRjaHBvaW50ICQ6OmRlY2ltYWwg XFwoc3lzY2FsbCAnd3JpdGUnIFxbXilcXStcXCkiCi0rCXNldCBjYXRjaF9yZSAiY2FsbCB0byBz eXNjYWxsIHdyaXRlIgotKyAgICB9IGVsc2VpZiB7ICRtb2RlIGVxICJzaWduYWwiIH0gewotKwln ZGJfdGVzdCAiY2F0Y2ggc2lnbmFsIFNJR1VTUjEiIFwKLSsJICAgICJDYXRjaHBvaW50ICQ6OmRl Y2ltYWwgXFwoc2lnbmFsIFNJR1VTUjFcXCkiCi0rCXNldCBjYXRjaF9yZSAic2lnbmFsIFNJR1VT UjEiCi0rICAgIH0gZWxzZWlmIHsgJG1vZGUgZXEgImZvcmsiIH0gewotKwlnZGJfdGVzdCAiY2F0 Y2ggZm9yayIgXAotKwkgICAgIkNhdGNocG9pbnQgJDo6ZGVjaW1hbCBcXChmb3JrXFwpIgotKwlz ZXQgY2F0Y2hfcmUgImZvcmtlZCBwcm9jZXNzICQ6OmRlY2ltYWwiCi0rICAgIH0gZWxzZSB7Ci0r CWVycm9yICJ1bmtub3duIG1vZGUgJG1vZGUiCi0rICAgIH0KLSsgICAgc2V0IGNwX251bSBbZ2V0 X2ludGVnZXJfdmFsdWVvZiAiXCRicG51bSIgIipVTktOT1dOKiJdCi0rCi0rICAgIGdkYl9icmVh a3BvaW50ICJicmVha3B0X2JlZm9yZV9leGl0IgotKwotKyAgICBnZGJfdGVzdCAiY29udGludWUi IFwKLSsJIkNhdGNocG9pbnQgJHtjcF9udW19IFxbXlxyXG5cXSskOjpsaWJjX3NyY19saW5lX3Jl IgotKwotKyAgICBpZiB7IFthbGxvd19weXRob25fdGVzdHNdIH0gewotKwlnZGJfdGVzdF9ub19v dXRwdXQgInNvdXJjZSAkOjpweWZpbGUiICJpbXBvcnQgcHl0aG9uIHNjcmlwdHMiCi0rCWNoZWNr X21vZGlmaWVkX2JwX2xpc3QgXAotKwkgICAgImNoZWNrIGIvcCBtb2RpZmllZCBvYnNlcnZlciBo YXMgbm90IHlldCB0cmlnZ2VyZWQiIHt9Ci0rICAgIH0KLSsKLSsgICAgd2l0aF90ZXN0X3ByZWZp eCAid2l0aCBmYWxzZSBjb25kaXRpb24iIHsKLSsJZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJjb25kaXRp b24gJGNwX251bSAoKHN0cnVjdCBsaWJfdHlwZSAqKSBvcGFxdWVfcHRyKSAhPSAwIiBcCi0rCSAg ICAic2V0IGNhdGNocG9pbnQgY29uZGl0aW9uIgotKwotKwljaGVja19tb2RpZmllZF9icF9saXN0 IFwKLSsJICAgICJjYXRjaHBvaW50IG1vZGlmaWVkIG9uY2UgYnkgc2V0dGluZyBjb25kaXRpb24i IFwKLSsJICAgIFtsaXN0ICRjcF9udW1dCi0rCi0rCWdkYl9ydW5fY21kCi0rCWdkYl90ZXN0ICIi IFttdWx0aV9saW5lIFwKLSsJCQkgIkJyZWFrcG9pbnQgJDo6ZGVjaW1hbCwgbWFpbiBcXChcXCkg XFteXHJcblxdKyIgXAotKwkJCSAiJDo6ZGVjaW1hbFxccytcW15cclxuXF0rIl0KLSsKLSsJY2hl Y2tfbW9kaWZpZWRfYnBfbGlzdCAiY2F0Y2hwb2ludCBtb2RpZmllZCB0d2ljZSBhdCBzdGFydHVw IiBcCi0rCSAgICBbbGlzdCAkY3BfbnVtICRjcF9udW0gIiQ6OmRlY2ltYWwiXQotKwotKwlnZGJf dGVzdCAiY29udGludWUiIFwKLSsJICAgIFttdWx0aV9saW5lIFwKLSsJCSAiQnJlYWtwb2ludCAk OjpkZWNpbWFsLCBicmVha3B0X2JlZm9yZV9leGl0IFxcKFxcKSBhdCBcW15cclxuXF0rIiBcCi0r CQkgIiQ6OmRlY2ltYWxcXHMrXFteXHJcblxdKyJdIFwKLSsJICAgICJjb250aW51ZSB0byBicmVh a3B0X2JlZm9yZV9leGl0IgotKyAgICB9Ci0rCi0rICAgICMgQ2hlY2sgdGhlIGJwX21vZGlmaWVk X2xpc3QgYWdhaW5zdCAnLionLiAgV2UgZG9uJ3QgY2FyZSBhdCB0aGlzCi0rICAgICMgcG9pbnQg d2hhdCdzIGluIHRoZSBsaXN0IChub3RoaW5nIHJlbGV2YW50IGhhcyBoYXBwZW5lZCBzaW5jZSB3 ZQotKyAgICAjIGxhc3QgY2hlY2tlZCksIGJ1dCB0aGlzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2Yg Y2xlYXJpbmcgdGhlIGxpc3QuCi0rICAgIGNoZWNrX21vZGlmaWVkX2JwX2xpc3QgImNsZWFyIGJw IG1vZGlmaWVkIGxpc3QiIHsgLiogfQotKwotKyAgICB3aXRoX3Rlc3RfcHJlZml4ICJ3aXRoIHRy dWUgY29uZGl0aW9uIiB7Ci0rCWdkYl90ZXN0X25vX291dHB1dCAiY29uZGl0aW9uICRjcF9udW0g KChzdHJ1Y3QgbGliX3R5cGUgKikgb3BhcXVlX3B0cikgPT0gMCIgXAotKwkgICAgInNldCBjYXRj aHBvaW50IGNvbmRpdGlvbiIKLSsKLSsJY2hlY2tfbW9kaWZpZWRfYnBfbGlzdCBcCi0rCSAgICAi Y2F0Y2hwb2ludCBtb2RpZmllZCBvbmNlIGJ5IHNldHRpbmcgY29uZGl0aW9uIiBcCi0rCSAgICBb bGlzdCAkY3BfbnVtXQotKwotKwlnZGJfcnVuX2NtZAotKwlnZGJfdGVzdCAiIiBbbXVsdGlfbGlu ZSBcCi0rCQkJICJCcmVha3BvaW50ICQ6OmRlY2ltYWwsIG1haW4gXFwoXFwpIFxbXlxyXG5cXSsi IFwKLSsJCQkgIiQ6OmRlY2ltYWxcXHMrXFteXHJcblxdKyJdCi0rCi0rCWNoZWNrX21vZGlmaWVk X2JwX2xpc3QgImNhdGNocG9pbnQgbW9kaWZpZWQgdHdpY2UgYXQgc3RhcnR1cCIgXAotKwkgICAg W2xpc3QgJGNwX251bSAkY3BfbnVtICIkOjpkZWNpbWFsIl0KLSsKLSsJZ2RiX3Rlc3QgImNvbnRp bnVlIiBcCi0rCSAgICAiQ2F0Y2hwb2ludCAkY3BfbnVtIFxcKCRjYXRjaF9yZVxcKSwgXFteXHJc blxdKyQ6OmxpYmNfc3JjX2xpbmVfcmUiIFwKLSsJICAgICJjb250aW51ZSB1bnRpbCBjYXRjaHBv aW50IGhpdCIKLSsKLSsJY2hlY2tfbW9kaWZpZWRfYnBfbGlzdCAiY2F0Y2hwb2ludCBtb2RpZmll ZCBhZ2FpbiB3aGVuIGhpdCIgXAotKwkgICAgW2xpc3QgJGNwX251bV0KLSsgICAgfQotK30KLSsK LSsjIFJ1biB0aGUgdGVzdHMuCi0rZm9yZWFjaF93aXRoX3ByZWZpeCBtb2RlIHsgc3lzY2FsbCBz aWduYWwgZm9yayB9IHsKLSsgICAgcnVuX3Rlc3QgJG1vZGUKLSt9Ci1kaWZmIC0tZ2l0IGEvZ2Ri L3Rlc3RzdWl0ZS9nZGIuYmFzZS9yZXNldC1jYXRjaHBvaW50LWNvbmQucHkgYi9nZGIvdGVzdHN1 aXRlL2dkYi5iYXNlL3Jlc2V0LWNhdGNocG9pbnQtY29uZC5weQotbmV3IGZpbGUgbW9kZSAxMDA2 NDQKLS0tLSAvZGV2L251bGwKLSsrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvcmVzZXQtY2F0 Y2hwb2ludC1jb25kLnB5Ci1AQCAtMCwwICsxLDIxIEBACi0rIyBDb3B5cmlnaHQgKEMpIDIwMjQg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0rCi0rIyBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyMgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKLSsjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgotKyMKLSsjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAotKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSsjIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rIwotKyMgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSsjIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgotKwotK2JwX21vZGlmaWVkX2xpc3QgPSBbXQotKwotK2RlZiBicF9tb2RpZmllZChi cCk6Ci0rICAgIGJwX21vZGlmaWVkX2xpc3QuYXBwZW5kIChicC5udW1iZXIpCi0rCi0rZ2RiLmV2 ZW50cy5icmVha3BvaW50X21vZGlmaWVkLmNvbm5lY3QoYnBfbW9kaWZpZWQpCgpkaWZmIC0tZ2l0 IGEvZ2RiLXJlbW92ZS1xbngtbmV1dHJpbm8tc3VwcG9ydC5wYXRjaCBiL2dkYi1yZW1vdmUtcW54 LW5ldXRyaW5vLXN1cHBvcnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQx M2M5YTEuLjAwMDAwMDAKLS0tIGEvZ2RiLXJlbW92ZS1xbngtbmV1dHJpbm8tc3VwcG9ydC5wYXRj aAorKysgL2Rldi9udWxsCkBAIC0xLDI5MjMgKzAsMCBAQAotRnJvbSBGRURPUkFfUEFUQ0hFUyBN b24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKLUZyb206IFNpbW9uIE1hcmNoaSA8c2ltb24ubWFyY2hp QHBvbHltdGwuY2E+Ci1EYXRlOiBUaHUsIDI1IEp1bCAyMDI0IDEzOjQxOjM1IC0wNDAwCi1TdWJq ZWN0OiBnZGItcmVtb3ZlLXFueC1uZXV0cmluby1zdXBwb3J0LnBhdGNoCi0KLTs7IEJhY2twb3J0 IG9mIHVwc3RyZWFtIGNvbW1pdCAzNmZiMjBmYTkzNDg0YjEwNGQuICBUaGlzIGlzIG5vdCByZWFs bHkKLTs7IHJlbGV2YW50IGZvciBvdXIgYnJhbmNoLCBidXQgbGF0ZXIgY29tbWl0cyB0aGF0IGFy ZSBpbXBvcnRhbnQsIGFuZAotOzsgd2hpY2ggd2Ugd2FudCB0byBiYWNrcG9ydCwgY29uZmxpY3Qg dW5sZXNzIHRoZSBjbGVhbnVwIGluIHRoaXMKLTs7IHBhdGNoIGlzIGluIHBsYWNlLgotOzsKLTs7 IFRoaXMgY29tbWl0IHdpbGwgYmUgcGFydCBvZiBHREIgMTYsIHNvIHRoaXMgYmFjay1wb3J0IHNo b3VsZCBkcm9wCi07OyBvdXQgd2hlbiB3ZSByZWJhc2Ugb250byBHREIgMTYuCi07OwotOzsgZ2Ri OiByZW1vdmUgUU5YIE5ldXRyaW5vIHN1cHBvcnQKLTs7Ci07OyBSZW1vdmUgdGhlIHN1cHBvcnQg Zm9yIHRoZSBRTlggTmV1dHJpbm8gT1MgKHRkZXAgYW5kIG5hdGl2ZSBiaXRzKS4gIFRoaXMKLTs7 IGhhcyBiZWVuIHVubWFpbnRhaW5lZCBmb3IgeWVhcnMsIGFuZCB3ZSBkb24ndCBoYXZlIGEgd2F5 IHRvIHNlZSBpZiBpdAotOzsgd29ya3MgKG9yIGV2ZW4gYnVpbGRzLCBmb3IgdGhlIG5hdGl2ZSBw YXJ0cykuICBXaXRob3V0IHNvbWVib2R5IGFjdGl2ZWx5Ci07OyBtYWludGFpbmluZyBpdCwgdGhp cyBpcyBqdXN0IGEgYnVyZGVuIGZvciBkZXZlbG9wZXJzLCBlc3BlY2lhbGx5IHRoYXQKLTs7IHRo aXMgcG9ydCBkb2VzIGEgZmV3IHdlaXJkIHVuaXF1ZSB0aGluZ3MgdGhhdCByZXF1aXJlIHJlYXNv bmluZyBhYm91dAotOzsgd2hlbiBkb2luZyBiaWcgY2hhbmdlLgotOzsKLTs7IFN1cHBvcnQgZm9y IEdEQnNlcnZlciB3YXMgcmVtb3ZlZCBpbiAyMDIwLCBjb21taXQgNjEzZjE0OWE5MGQ2Ci07OyAo ImdkYnNlcnZlcjogcmVtb3ZlIHN1cHBvcnQgZm9yIE5ldXRyaW5vIikuCi07OwotOzsgQ2hhbmdl LUlkOiBJNGUyNWVjMjZhYjA2NjM2NjI5YWRlYmQwMmNlYjE2MWVlMzFjMjMyZAotOzsgQXBwcm92 ZWQtYnk6IEtldmluIEJ1ZXR0bmVyIDxrZXZpbmJAcmVkaGF0LmNvbT4KLQotZGlmZiAtLWdpdCBh L2dkYi9NYWtlZmlsZS5pbiBiL2dkYi9NYWtlZmlsZS5pbgotLS0tIGEvZ2RiL01ha2VmaWxlLmlu Ci0rKysgYi9nZGIvTWFrZWZpbGUuaW4KLUBAIC04MjgsNyArODI4LDYgQEAgQUxMX1RBUkdFVF9P QlMgPSBcCi0gCWkzODYtZ28zMi10ZGVwLm8gXAotIAlpMzg2LWxpbnV4LXRkZXAubyBcCi0gCWkz ODYtbmV0YnNkLXRkZXAubyBcCi0tCWkzODYtbnRvLXRkZXAubyBcCi0gCWkzODYtb2JzZC10ZGVw Lm8gXAotIAlpMzg2LXNvbDItdGRlcC5vIFwKLSAJaTM4Ni10ZGVwLm8gXAotQEAgLTg1Niw3ICs4 NTUsNiBAQCBBTExfVEFSR0VUX09CUyA9IFwKLSAJbmRzMzItdGRlcC5vIFwKLSAJbmlvczItbGlu dXgtdGRlcC5vIFwKLSAJbmlvczItdGRlcC5vIFwKLS0JbnRvLXRkZXAubyBcCi0gCW9ic2QtdGRl cC5vIFwKLSAJb3Ixay1saW51eC10ZGVwLm8gXAotIAlvcjFrLXRkZXAubyBcCi1AQCAtMTQ0MSw3 ICsxNDM5LDYgQEAgSEZJTEVTX05PX1NSQ0RJUiA9IFwKLSAJbmRzMzItdGRlcC5oIFwKLSAJbmlv czItdGRlcC5oIFwKLSAJZWxmLW5vbmUtdGRlcC5oIFwKLS0JbnRvLXRkZXAuaCBcCi0gCW9iamMt bGFuZy5oIFwKLSAJb2JqZmlsZXMuaCBcCi0gCW9ic2QtbmF0LmggXAotQEAgLTE1NzMsNyArMTU3 MCw2IEBAIEhGSUxFU19OT19TUkNESVIgPSBcCi0gCWNvbXBpbGUvZ2NjLWMtcGx1Z2luLmggXAot IAljb21waWxlL2djYy1jcC1wbHVnaW4uaCBcCi0gCWNvbmZpZy9ubS1saW51eC5oIFwKLS0JY29u ZmlnL25tLW50by5oIFwKLSAJY29uZmlnL2RqZ3BwL2xhbmdpbmZvLmggXAotIAljb25maWcvZGpn cHAvbmxfdHlwZXMuaCBcCi0gCWNvbmZpZy9pMzg2L25tLWkzODZnbnUuaCBcCi1kaWZmIC0tZ2l0 IGEvZ2RiL2NvbmZpZy9ubS1udG8uaCBiL2dkYi9jb25maWcvbm0tbnRvLmgKLWRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAotLS0tIGEvZ2RiL2NvbmZpZy9ubS1udG8uaAotKysrIC9kZXYvbnVsbAot QEAgLTEsMjkgKzAsMCBAQAotLS8qIE5hdGl2ZSBzdXBwb3J0IGZvciBRTlggTmV1dHJpbm8gdmVy c2lvbiA2LgotLQotLSAgIENvcHlyaWdodCAoQykgMjAwMy0yMDI0IEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgotLQotLSAgIFRoaXMgY29kZSB3YXMgZG9uYXRlZCBieSBRTlggU29mdHdh cmUgU3lzdGVtcyBMdGQuCi0tCi0tICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgotLQotLSAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5Ci0tICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLS0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotLSAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0tCi0tICAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0tICAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLS0g ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCi0tICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K LS0KLS0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQotLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLS0KLS0jaWZuZGVmIENPTkZJ R19OTV9OVE9fSAotLSNkZWZpbmUgQ09ORklHX05NX05UT19ICi0tCi0tLyogU2V0dXAgdGhlIHZh bGlkIHJlYWx0aW1lIHNpZ25hbCByYW5nZS4gICovCi0tI2RlZmluZSBSRUFMVElNRV9MTyA0MQot LSNkZWZpbmUgUkVBTFRJTUVfSEkgNTYKLS0KLS0jZW5kaWYgLyogQ09ORklHX05NX05UT19IICov Ci1kaWZmIC0tZ2l0IGEvZ2RiL2NvbmZpZ3VyZS5ob3N0IGIvZ2RiL2NvbmZpZ3VyZS5ob3N0Ci0t LS0gYS9nZGIvY29uZmlndXJlLmhvc3QKLSsrKyBiL2dkYi9jb25maWd1cmUuaG9zdAotQEAgLTEx MCw3ICsxMTAsNiBAQCBpWzM0NTY3XTg2LSotbWluZ3czMiopCWdkYl9ob3N0PW1pbmd3Ci0gaVsz NDU2N104Ni0qLW1zZG9zZGpncHAqKSBnZGJfaG9zdD1nbzMyIDs7Ci0gaVszNDU2N104Ni0qLWxp bnV4KikJZ2RiX2hvc3Q9bGludXggOzsKLSBpWzM0NTY3XTg2LSotZ251KikJZ2RiX2hvc3Q9aTM4 NmdudSA7OwotLWlbMzQ1Nl04Ni0qLW50byopIAlnZGJfaG9zdD1udG8gOzsKLSBpWzM0NTY3XTg2 LSotb3BlbmJzZCopCWdkYl9ob3N0PW9ic2QgOzsKLSBpWzM0NTY3XTg2LSotc29sYXJpczIqIHwg eDg2XzY0LSotc29sYXJpczIqKQotIAkJCWdkYl9ob3N0PXNvbDIgOzsKLWRpZmYgLS1naXQgYS9n ZGIvY29uZmlndXJlLm5hdCBiL2dkYi9jb25maWd1cmUubmF0Ci0tLS0gYS9nZGIvY29uZmlndXJl Lm5hdAotKysrIGIvZ2RiL2NvbmZpZ3VyZS5uYXQKLUBAIC00MjEsMTUgKzQyMSw2IEBAIGNhc2Ug JHtnZGJfaG9zdH0gaW4KLSAKLSAJZXNhYwotIAk7OwotLSAgICBudG8pCi0tCWNhc2UgJHtnZGJf aG9zdF9jcHV9IGluCi0tCSAgICBpMzg2KQotLQkJIyBIb3N0OiBJbnRlbCAzODYgcnVubmluZyBR TlguCi0tCQlOQVRERVBGSUxFUz0nbnRvLXByb2Nmcy5vJwotLQkJTkFUX0ZJTEU9J2NvbmZpZy9u bS1udG8uaCcKLS0JCTs7Ci0tCWVzYWMKLS0JOzsKLSAgICAgb2JzZCkKLSAJY2FzZSAke2dkYl9o b3N0X2NwdX0gaW4KLSAJICAgIGkzODYpCi1kaWZmIC0tZ2l0IGEvZ2RiL2NvbmZpZ3VyZS50Z3Qg Yi9nZGIvY29uZmlndXJlLnRndAotLS0tIGEvZ2RiL2NvbmZpZ3VyZS50Z3QKLSsrKyBiL2dkYi9j b25maWd1cmUudGd0Ci1AQCAtMzA0LDExICszMDQsNiBAQCBpWzM0NTY3XTg2LSotb3BlbmJzZCop Ci0gCSMgVGFyZ2V0OiBPcGVuQlNEL2kzODYKLSAJZ2RiX3RhcmdldF9vYnM9ImkzODYtYnNkLXRk ZXAubyBpMzg2LW9ic2QtdGRlcC5vIGJzZC11dGhyZWFkLm8iCi0gCTs7Ci0taVszNDU2N104Ni0q LW50byopCi0tCSMgVGFyZ2V0OiBJbnRlbCAzODYgcnVubmluZyBxbng2LgotLQlnZGJfdGFyZ2V0 X29icz0ic29saWItc3ZyNC5vIFwKLS0JCQlpMzg2LW50by10ZGVwLm8gbnRvLXRkZXAubyIKLS0J OzsKLSBpWzM0NTY3XTg2LSotc29sYXJpczIqIHwgeDg2XzY0LSotc29sYXJpczIqKQotIAkjIFRh cmdldDogU29sYXJpcyB4ODZfNjQKLSAJZ2RiX3RhcmdldF9vYnM9IiR7aTM4Nl90b2Jqc30gJHth bWQ2NF90b2Jqc30gXAotQEAgLTgwMyw3ICs3OTgsNiBAQCBjYXNlICIke3Rhcmd9IiBpbgotIAkJ Z2RiX29zYWJpPUdEQl9PU0FCSV9GUkVFQlNEIDs7Ci0gKi0qLWxpbnV4KiB8ICotKi11Y2xpbnV4 KikKLSAJCWdkYl9vc2FiaT1HREJfT1NBQklfTElOVVggOzsKLS0qLSotbnRvKikJZ2RiX29zYWJp PUdEQl9PU0FCSV9RTlhOVE8gOzsKLSBtNjgqLSotb3BlbmJzZCogfCBtODgqLSotb3BlbmJzZCog fCB2YXgtKi1vcGVuYnNkKikgOzsKLSAqLSotb3BlbmJzZCopCWdkYl9vc2FiaT1HREJfT1NBQklf T1BFTkJTRCA7OwotICotKi1zb2xhcmlzKikJZ2RiX29zYWJpPUdEQl9PU0FCSV9TT0xBUklTIDs7 Ci1kaWZmIC0tZ2l0IGEvZ2RiL2RvYy9nZGIudGV4aW5mbyBiL2dkYi9kb2MvZ2RiLnRleGluZm8K LS0tLSBhL2dkYi9kb2MvZ2RiLnRleGluZm8KLSsrKyBiL2dkYi9kb2MvZ2RiLnRleGluZm8KLUBA IC0yNzQyLDcgKzI3NDIsNyBAQCBlbnZpcm9ubWVudDoKLSBAZW5kIHNtYWxsZXhhbXBsZQotIAot IFRoaXMgY29tbWFuZCBpcyBhdmFpbGFibGUgd2hlbiBkZWJ1Z2dpbmcgbG9jYWxseSBvbiBtb3N0 IHRhcmdldHMsIGV4Y2x1ZGluZwotLUBzY3tkamdwcH0sIEN5Z3dpbiwgTVMgV2luZG93cywgYW5k IFFOWCBOZXV0cmluby4KLStAc2N7ZGpncHB9LCBDeWd3aW4sIGFuZCBNUyBXaW5kb3dzLgotIAot IEBraW5kZXggc2V0IHN0YXJ0dXAtd2l0aC1zaGVsbAotIEBhbmNob3J7c2V0IHN0YXJ0dXAtd2l0 aC1zaGVsbH0KLUBAIC0yMjAxMSw3ICsyMjAxMSw3IEBAIG5hbWUgYW5kIHJlbWVtYmVycyBpdCB0 aGF0IHdheS4KLSBAY2luZGV4IHNoYXJlZCBsaWJyYXJpZXMKLSBAYW5jaG9ye1NoYXJlZCBMaWJy YXJpZXN9Ci0gQHZhbHVle0dEQk59IHN1cHBvcnRzIEBzY3tnbnV9L0xpbnV4LCBNUy1XaW5kb3dz LCBTdW5PUywKLS1EYXJ3aW4vTWFjaC1PLCBTVnI0LCBJQk0gUlMvNjAwMCBBSVgsIFFOWCBOZXV0 cmlubywgRkRQSUMgKEZSLVYpLCBhbmQKLStEYXJ3aW4vTWFjaC1PLCBTVnI0LCBJQk0gUlMvNjAw MCBBSVgsIEZEUElDIChGUi1WKSwgYW5kCi0gRFNCVCAoVElDNlgpIHNoYXJlZCBsaWJyYXJpZXMu Ci0gCi0gT24gTVMtV2luZG93cyBAdmFsdWV7R0RCTn0gbXVzdCBiZSBsaW5rZWQgd2l0aCB0aGUg RXhwYXQgbGlicmFyeSB0byBzdXBwb3J0Ci1AQCAtMjUyMDMsMTYgKzI1MjAzLDYgQEAgU2hvdyB0 aGUgZmlsZSB0byB3aGljaCBAY29kZXtwcm9jZnN9IEFQSSB0cmFjZSBpcyB3cml0dGVuLgotIFRo ZXNlIGNvbW1hbmRzIGVuYWJsZSBhbmQgZGlzYWJsZSB0cmFjaW5nIG9mIGVudHJpZXMgaW50byBh bmQgZXhpdHMKLSBmcm9tIHRoZSBAY29kZXtzeXNjYWxsfSBpbnRlcmZhY2UuCi0gCi0tQGl0ZW0g aW5mbyBwaWRsaXN0Ci0tQGtpbmRleCBpbmZvIHBpZGxpc3QKLS1AY2luZGV4IHByb2Nlc3MgbGlz dCwgUU5YIE5ldXRyaW5vCi0tRm9yIFFOWCBOZXV0cmlubyBvbmx5LCB0aGlzIGNvbW1hbmQgZGlz cGxheXMgdGhlIGxpc3Qgb2YgYWxsIHRoZQotLXByb2Nlc3NlcyBhbmQgYWxsIHRoZSB0aHJlYWRz IHdpdGhpbiBlYWNoIHByb2Nlc3MuCi0tCi0tQGl0ZW0gaW5mbyBtZW1pbmZvCi0tQGtpbmRleCBp bmZvIG1lbWluZm8KLS1AY2luZGV4IG1hcGluZm8gbGlzdCwgUU5YIE5ldXRyaW5vCi0tRm9yIFFO WCBOZXV0cmlubyBvbmx5LCB0aGlzIGNvbW1hbmQgZGlzcGxheXMgdGhlIGxpc3Qgb2YgYWxsIG1h cGluZm9zLgotIEBlbmQgdGFibGUKLSAKLSBAbm9kZSBESkdQUCBOYXRpdmUKLWRpZmYgLS1naXQg YS9nZGIvaTM4Ni1udG8tdGRlcC5jIGIvZ2RiL2kzODYtbnRvLXRkZXAuYwotZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0Ci0tLS0gYS9nZGIvaTM4Ni1udG8tdGRlcC5jCi0rKysgL2Rldi9udWxsCi1A QCAtMSwzNzkgKzAsMCBAQAotLS8qIFRhcmdldC1kZXBlbmRlbnQgY29kZSBmb3IgUU5YIE5ldXRy aW5vIHg4Ni4KLS0KLS0gICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyNCBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KLS0KLS0gICBDb250cmlidXRlZCBieSBRTlggU29mdHdhcmUgU3lzdGVt cyBMdGQuCi0tCi0tICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0RCLgotLQotLSAgIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5Ci0tICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKLS0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotLSAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCi0tCi0tICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0tICAgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLS0gICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0t ICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLS0KLS0gICBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQotLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KLS0KLS0jaW5jbHVkZSAiZXh0cmFjdC1zdG9y ZS1pbnRlZ2VyLmgiCi0tI2luY2x1ZGUgImZyYW1lLmgiCi0tI2luY2x1ZGUgIm9zYWJpLmgiCi0t I2luY2x1ZGUgInJlZ2NhY2hlLmgiCi0tI2luY2x1ZGUgInRhcmdldC5oIgotLQotLSNpbmNsdWRl ICJpMzg2LXRkZXAuaCIKLS0jaW5jbHVkZSAiaTM4Ny10ZGVwLmgiCi0tI2luY2x1ZGUgIm50by10 ZGVwLmgiCi0tI2luY2x1ZGUgInNvbGliLmgiCi0tI2luY2x1ZGUgInNvbGliLXN2cjQuaCIKLS0K LS0jaWZuZGVmIFg4Nl9DUFVfRlhTUgotLSNkZWZpbmUgWDg2X0NQVV9GWFNSICgxTCA8PCAxMikK LS0jZW5kaWYKLS0KLS0vKiBXaHkgMTM/ICBMb29rIGluIG91ciAvdXNyL2luY2x1ZGUveDg2L2Nv bnRleHQuaCBoZWFkZXIgYXQgdGhlCi0tICAgeDg2X2NwdV9yZWdpc3RlcnMgc3RydWN0dXJlIGFu ZCB5b3UnbGwgc2VlIGFuICdleHgnIGp1bmsgcmVnaXN0ZXIKLS0gICB0aGF0IGlzIGp1c3QgZmls bGVyLiAgRG9uJ3QgYXNrIG1lLCBhc2sgdGhlIGtlcm5lbCBndXlzLiAgKi8KLS0jZGVmaW5lIE5V TV9HUFJFR1MgMTMKLS0KLS0vKiBNYXBwaW5nIGJldHdlZW4gdGhlIGdlbmVyYWwtcHVycG9zZSBy ZWdpc3RlcnMgaW4gYHN0cnVjdCB4eHgnCi0tICAgZm9ybWF0IGFuZCBHREIncyByZWdpc3RlciBj YWNoZSBsYXlvdXQuICAqLwotLQotLS8qIEZyb20gPHg4Ni9jb250ZXh0Lmg+LiAgKi8KLS1zdGF0 aWMgaW50IGkzODZudG9fZ3JlZ3NldF9yZWdfb2Zmc2V0W10gPQotLXsKLS0gIDcgKiA0LAkJCS8q ICVlYXggKi8KLS0gIDYgKiA0LAkJCS8qICVlY3ggKi8KLS0gIDUgKiA0LAkJCS8qICVlZHggKi8K LS0gIDQgKiA0LAkJCS8qICVlYnggKi8KLS0gIDExICogNCwJCQkvKiAlZXNwICovCi0tICAyICog NCwJCQkvKiAlZXBiICovCi0tICAxICogNCwJCQkvKiAlZXNpICovCi0tICAwICogNCwJCQkvKiAl ZWRpICovCi0tICA4ICogNCwJCQkvKiAlZWlwICovCi0tICAxMCAqIDQsCQkJLyogJWVmbGFncyAq LwotLSAgOSAqIDQsCQkJLyogJWNzICovCi0tICAxMiAqIDQsCQkJLyogJXNzICovCi0tICAtMQkJ CQkvKiBmaWxsZXIgKi8KLS19OwotLQotLS8qIEdpdmVuIGEgR0RCIHJlZ2lzdGVyIG51bWJlciBS RUdOVU0sIHJldHVybiB0aGUgb2Zmc2V0IGludG8KLS0gICBOZXV0cmlubydzIHJlZ2lzdGVyIHN0 cnVjdHVyZSBvciAtMSBpZiB0aGUgcmVnaXN0ZXIgaXMgdW5rbm93bi4gICovCi0tCi0tc3RhdGlj IGludAotLW50b19yZWdfb2Zmc2V0IChpbnQgcmVnbnVtKQotLXsKLS0gIGlmIChyZWdudW0gPj0g MCAmJiByZWdudW0gPCBBUlJBWV9TSVpFIChpMzg2bnRvX2dyZWdzZXRfcmVnX29mZnNldCkpCi0t ICAgIHJldHVybiBpMzg2bnRvX2dyZWdzZXRfcmVnX29mZnNldFtyZWdudW1dOwotLQotLSAgcmV0 dXJuIC0xOwotLX0KLS0KLS1zdGF0aWMgdm9pZAotLWkzODZudG9fc3VwcGx5X2dyZWdzZXQgKHN0 cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGNoYXIgKmdwcmVncykKLS17Ci0tICBzdHJ1Y3QgZ2Ri YXJjaCAqZ2RiYXJjaCA9IHJlZ2NhY2hlLT5hcmNoICgpOwotLSAgaTM4Nl9nZGJhcmNoX3RkZXAg KnRkZXAgPSBnZGJhcmNoX3RkZXA8aTM4Nl9nZGJhcmNoX3RkZXA+IChnZGJhcmNoKTsKLS0KLS0g IGdkYl9hc3NlcnQgKHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldCA9PSBpMzg2bnRvX2dyZWdzZXRf cmVnX29mZnNldCk7Ci0tICBpMzg2X2dyZWdzZXQuc3VwcGx5X3JlZ3NldCAoJmkzODZfZ3JlZ3Nl dCwgcmVnY2FjaGUsIC0xLAotLQkJCSAgICAgIGdwcmVncywgTlVNX0dQUkVHUyAqIDQpOwotLX0K LS0KLS1zdGF0aWMgdm9pZAotLWkzODZudG9fc3VwcGx5X2ZwcmVnc2V0IChzdHJ1Y3QgcmVnY2Fj aGUgKnJlZ2NhY2hlLCBjaGFyICpmcHJlZ3MpCi0tewotLSAgaWYgKG50b19jcHVpbmZvX3ZhbGlk ICYmIG50b19jcHVpbmZvX2ZsYWdzIHwgWDg2X0NQVV9GWFNSKQotLSAgICBpMzg3X3N1cHBseV9m eHNhdmUgKHJlZ2NhY2hlLCAtMSwgZnByZWdzKTsKLS0gIGVsc2UKLS0gICAgaTM4N19zdXBwbHlf ZnNhdmUgKHJlZ2NhY2hlLCAtMSwgZnByZWdzKTsKLS19Ci0tCi0tc3RhdGljIHZvaWQKLS1pMzg2 bnRvX3N1cHBseV9yZWdzZXQgKHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsIGludCByZWdzZXQs IGNoYXIgKmRhdGEpCi0tewotLSAgc3dpdGNoIChyZWdzZXQpCi0tICAgIHsKLS0gICAgY2FzZSBO VE9fUkVHX0dFTkVSQUw6Ci0tICAgICAgaTM4Nm50b19zdXBwbHlfZ3JlZ3NldCAocmVnY2FjaGUs IGRhdGEpOwotLSAgICAgIGJyZWFrOwotLSAgICBjYXNlIE5UT19SRUdfRkxPQVQ6Ci0tICAgICAg aTM4Nm50b19zdXBwbHlfZnByZWdzZXQgKHJlZ2NhY2hlLCBkYXRhKTsKLS0gICAgICBicmVhazsK LS0gICAgfQotLX0KLS0KLS1zdGF0aWMgaW50Ci0taTM4Nm50b19yZWdzZXRfaWQgKGludCByZWdu bykKLS17Ci0tICBpZiAocmVnbm8gPT0gLTEpCi0tICAgIHJldHVybiBOVE9fUkVHX0VORDsKLS0g IGVsc2UgaWYgKHJlZ25vIDwgSTM4Nl9OVU1fR1JFR1MpCi0tICAgIHJldHVybiBOVE9fUkVHX0dF TkVSQUw7Ci0tICBlbHNlIGlmIChyZWdubyA8IEkzODZfTlVNX0dSRUdTICsgSTM4N19OVU1fUkVH UykKLS0gICAgcmV0dXJuIE5UT19SRUdfRkxPQVQ7Ci0tICBlbHNlIGlmIChyZWdubyA8IEkzODZf U1NFX05VTV9SRUdTKQotLSAgICByZXR1cm4gTlRPX1JFR19GTE9BVDsgLyogV2Ugc3RvcmUgeG1t IHJlZ2lzdGVycyBpbiBmeHNhdmVfYXJlYS4gICovCi0tCi0tICByZXR1cm4gLTE7CQkJLyogRXJy b3IuICAqLwotLX0KLS0KLS1zdGF0aWMgaW50Ci0taTM4Nm50b19yZWdpc3Rlcl9hcmVhIChzdHJ1 Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKLS0JCSAgICAgICBpbnQgcmVnbm8sIGludCByZWdzZXQsIHVu c2lnbmVkICpvZmYpCi0tewotLSAgaTM4Nl9nZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3Rk ZXA8aTM4Nl9nZGJhcmNoX3RkZXA+IChnZGJhcmNoKTsKLS0KLS0gICpvZmYgPSAwOwotLSAgaWYg KHJlZ3NldCA9PSBOVE9fUkVHX0dFTkVSQUwpCi0tICAgIHsKLS0gICAgICBpZiAocmVnbm8gPT0g LTEpCi0tCXJldHVybiBOVU1fR1BSRUdTICogNDsKLS0KLS0gICAgICAqb2ZmID0gbnRvX3JlZ19v ZmZzZXQgKHJlZ25vKTsKLS0gICAgICBpZiAoKm9mZiA9PSAtMSkKLS0JcmV0dXJuIDA7Ci0tICAg ICAgcmV0dXJuIDQ7Ci0tICAgIH0KLS0gIGVsc2UgaWYgKHJlZ3NldCA9PSBOVE9fUkVHX0ZMT0FU KQotLSAgICB7Ci0tICAgICAgdW5zaWduZWQgb2ZmX2FkanVzdCwgcmVnc2l6ZSwgcmVnc2V0X3Np emUsIHJlZ25vX2Jhc2U7Ci0tICAgICAgLyogVGhlIGZvbGxvd2luZyBhcmUgZmxhZ3MgaW5kaWNh dGluZyBudW1iZXIgaW4gb3VyIGZ4c2F2ZV9hcmVhLiAgKi8KLS0gICAgICBpbnQgZmlyc3RfZm91 ciA9IChyZWdubyA+PSBJMzg3X0ZDVFJMX1JFR05VTSAodGRlcCkKLS0JCQkmJiByZWdubyA8PSBJ Mzg3X0ZJU0VHX1JFR05VTSAodGRlcCkpOwotLSAgICAgIGludCBzZWNvbmRfZm91ciA9IChyZWdu byA+IEkzODdfRklTRUdfUkVHTlVNICh0ZGVwKQotLQkJCSAmJiByZWdubyA8PSBJMzg3X0ZPUF9S RUdOVU0gKHRkZXApKTsKLS0gICAgICBpbnQgc3RfcmVnID0gKHJlZ25vID49IEkzODdfU1QwX1JF R05VTSAodGRlcCkKLS0JCSAgICAmJiByZWdubyA8IEkzODdfU1QwX1JFR05VTSAodGRlcCkgKyA4 KTsKLS0gICAgICBpbnQgeG1tX3JlZyA9IChyZWdubyA+PSBJMzg3X1hNTTBfUkVHTlVNICh0ZGVw KQotLQkJICAgICAmJiByZWdubyA8IEkzODdfTVhDU1JfUkVHTlVNICh0ZGVwKSk7Ci0tCi0tICAg ICAgaWYgKG50b19jcHVpbmZvX3ZhbGlkICYmIG50b19jcHVpbmZvX2ZsYWdzIHwgWDg2X0NQVV9G WFNSKQotLQl7Ci0tCSAgb2ZmX2FkanVzdCA9IDMyOwotLQkgIHJlZ3NpemUgPSAxNjsKLS0JICBy ZWdzZXRfc2l6ZSA9IDUxMjsKLS0JICAvKiBmeHNhdmVfYXJlYSBzdHJ1Y3R1cmUuICAqLwotLQkg IGlmIChmaXJzdF9mb3VyKQotLQkgICAgewotLQkgICAgICAvKiBmcHVfY29udHJvbF93b3JkLCBm cHVfc3RhdHVzX3dvcmQsIGZwdV90YWdfd29yZCwgZnB1X29wZXJhbmQKLS0JCSByZWdpc3RlcnMu ICAqLwotLQkgICAgICByZWdzaXplID0gMjsgLyogVHdvIGJ5dGVzIGVhY2guICAqLwotLQkgICAg ICBvZmZfYWRqdXN0ID0gMDsKLS0JICAgICAgcmVnbm9fYmFzZSA9IEkzODdfRkNUUkxfUkVHTlVN ICh0ZGVwKTsKLS0JICAgIH0KLS0JICBlbHNlIGlmIChzZWNvbmRfZm91cikKLS0JICAgIHsKLS0J ICAgICAgLyogZnB1X2lwLCBmcHVfY3MsIGZwdV9vcCwgZnB1X2RzIHJlZ2lzdGVycy4gICovCi0t CSAgICAgIHJlZ3NpemUgPSA0OwotLQkgICAgICBvZmZfYWRqdXN0ID0gODsKLS0JICAgICAgcmVn bm9fYmFzZSA9IEkzODdfRklTRUdfUkVHTlVNICh0ZGVwKSArIDE7Ci0tCSAgICB9Ci0tCSAgZWxz ZSBpZiAoc3RfcmVnKQotLQkgICAgewotLQkgICAgICAvKiBTVCByZWdpc3RlcnMuICAqLwotLQkg ICAgICByZWdzaXplID0gMTY7Ci0tCSAgICAgIG9mZl9hZGp1c3QgPSAzMjsKLS0JICAgICAgcmVn bm9fYmFzZSA9IEkzODdfU1QwX1JFR05VTSAodGRlcCk7Ci0tCSAgICB9Ci0tCSAgZWxzZSBpZiAo eG1tX3JlZykKLS0JICAgIHsKLS0JICAgICAgLyogWE1NIHJlZ2lzdGVycy4gICovCi0tCSAgICAg IHJlZ3NpemUgPSAxNjsKLS0JICAgICAgb2ZmX2FkanVzdCA9IDE2MDsKLS0JICAgICAgcmVnbm9f YmFzZSA9IEkzODdfWE1NMF9SRUdOVU0gKHRkZXApOwotLQkgICAgfQotLQkgIGVsc2UgaWYgKHJl Z25vID09IEkzODdfTVhDU1JfUkVHTlVNICh0ZGVwKSkKLS0JICAgIHsKLS0JICAgICAgcmVnc2l6 ZSA9IDQ7Ci0tCSAgICAgIG9mZl9hZGp1c3QgPSAyNDsKLS0JICAgICAgcmVnbm9fYmFzZSA9IEkz ODdfTVhDU1JfUkVHTlVNICh0ZGVwKTsKLS0JICAgIH0KLS0JICBlbHNlCi0tCSAgICB7Ci0tCSAg ICAgIC8qIFdob2xlIHJlZ3NldC4gICovCi0tCSAgICAgIGdkYl9hc3NlcnQgKHJlZ25vID09IC0x KTsKLS0JICAgICAgb2ZmX2FkanVzdCA9IDA7Ci0tCSAgICAgIHJlZ25vX2Jhc2UgPSAwOwotLQkg ICAgICByZWdzaXplID0gcmVnc2V0X3NpemU7Ci0tCSAgICB9Ci0tCX0KLS0gICAgICBlbHNlCi0t CXsKLS0JICByZWdzZXRfc2l6ZSA9IDEwODsKLS0JICAvKiBmc2F2ZV9hcmVhIHN0cnVjdHVyZS4g ICovCi0tCSAgaWYgKGZpcnN0X2ZvdXIgfHwgc2Vjb25kX2ZvdXIpCi0tCSAgICB7Ci0tCSAgICAg IC8qIGZwdV9jb250cm9sX3dvcmQsIC4uLiAsIGZwdV9kcyByZWdpc3RlcnMuICAqLwotLQkgICAg ICByZWdzaXplID0gNDsKLS0JICAgICAgb2ZmX2FkanVzdCA9IDA7Ci0tCSAgICAgIHJlZ25vX2Jh c2UgPSBJMzg3X0ZDVFJMX1JFR05VTSAodGRlcCk7Ci0tCSAgICB9Ci0tCSAgZWxzZSBpZiAoc3Rf cmVnKQotLQkgICAgewotLQkgICAgICAvKiBPbmUgb2YgU1QgcmVnaXN0ZXJzLiAgKi8KLS0JICAg ICAgcmVnc2l6ZSA9IDEwOwotLQkgICAgICBvZmZfYWRqdXN0ID0gNyAqIDQ7Ci0tCSAgICAgIHJl Z25vX2Jhc2UgPSBJMzg3X1NUMF9SRUdOVU0gKHRkZXApOwotLQkgICAgfQotLQkgIGVsc2UKLS0J ICAgIHsKLS0JICAgICAgLyogV2hvbGUgcmVnc2V0LiAgKi8KLS0JICAgICAgZ2RiX2Fzc2VydCAo cmVnbm8gPT0gLTEpOwotLQkgICAgICBvZmZfYWRqdXN0ID0gMDsKLS0JICAgICAgcmVnbm9fYmFz ZSA9IDA7Ci0tCSAgICAgIHJlZ3NpemUgPSByZWdzZXRfc2l6ZTsKLS0JICAgIH0KLS0JfQotLQot LSAgICAgIGlmIChyZWdubyAhPSAtMSkKLS0JKm9mZiA9IG9mZl9hZGp1c3QgKyAocmVnbm8gLSBy ZWdub19iYXNlKSAqIHJlZ3NpemU7Ci0tICAgICAgZWxzZQotLQkqb2ZmID0gMDsKLS0gICAgICBy ZXR1cm4gcmVnc2l6ZTsKLS0gICAgfQotLSAgcmV0dXJuIC0xOwotLX0KLS0KLS1zdGF0aWMgaW50 Ci0taTM4Nm50b19yZWdzZXRfZmlsbCAoY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwg aW50IHJlZ3NldCwgY2hhciAqZGF0YSkKLS17Ci0tICBpZiAocmVnc2V0ID09IE5UT19SRUdfR0VO RVJBTCkKLS0gICAgewotLSAgICAgIGludCByZWdubzsKLS0KLS0gICAgICBmb3IgKHJlZ25vID0g MDsgcmVnbm8gPCBOVU1fR1BSRUdTOyByZWdubysrKQotLQl7Ci0tCSAgaW50IG9mZnNldCA9IG50 b19yZWdfb2Zmc2V0IChyZWdubyk7Ci0tCSAgaWYgKG9mZnNldCAhPSAtMSkKLS0JICAgIHJlZ2Nh Y2hlLT5yYXdfY29sbGVjdCAocmVnbm8sIGRhdGEgKyBvZmZzZXQpOwotLQl9Ci0tICAgIH0KLS0g IGVsc2UgaWYgKHJlZ3NldCA9PSBOVE9fUkVHX0ZMT0FUKQotLSAgICB7Ci0tICAgICAgaWYgKG50 b19jcHVpbmZvX3ZhbGlkICYmIG50b19jcHVpbmZvX2ZsYWdzIHwgWDg2X0NQVV9GWFNSKQotLQlp Mzg3X2NvbGxlY3RfZnhzYXZlIChyZWdjYWNoZSwgLTEsIGRhdGEpOwotLSAgICAgIGVsc2UKLS0J aTM4N19jb2xsZWN0X2ZzYXZlIChyZWdjYWNoZSwgLTEsIGRhdGEpOwotLSAgICB9Ci0tICBlbHNl Ci0tICAgIHJldHVybiAtMTsKLS0KLS0gIHJldHVybiAwOwotLX0KLS0KLS0vKiBSZXR1cm4gd2hl dGhlciBUSElTX0ZSQU1FIGNvcnJlc3BvbmRzIHRvIGEgUU5YIE5ldXRyaW5vIHNpZ3RyYW1wCi0t ICAgcm91dGluZS4gICovCi0tCi0tc3RhdGljIGludAotLWkzODZudG9fc2lndHJhbXBfcCAoY29u c3QgZnJhbWVfaW5mb19wdHIgJnRoaXNfZnJhbWUpCi0tewotLSAgQ09SRV9BRERSIHBjID0gZ2V0 X2ZyYW1lX3BjICh0aGlzX2ZyYW1lKTsKLS0gIGNvbnN0IGNoYXIgKm5hbWU7Ci0tCi0tICBmaW5k X3BjX3BhcnRpYWxfZnVuY3Rpb24gKHBjLCAmbmFtZSwgTlVMTCwgTlVMTCk7Ci0tICByZXR1cm4g bmFtZSAmJiBzdHJjbXAgKCJfX3NpZ25hbHN0dWIiLCBuYW1lKSA9PSAwOwotLX0KLS0KLS0vKiBB c3N1bWluZyBUSElTX0ZSQU1FIGlzIGEgUU5YIE5ldXRyaW5vIHNpZ3RyYW1wIHJvdXRpbmUsIHJl dHVybiB0aGUKLS0gICBhZGRyZXNzIG9mIHRoZSBhc3NvY2lhdGVkIHNpZ2NvbnRleHQgc3RydWN0 dXJlLiAgKi8KLS0KLS1zdGF0aWMgQ09SRV9BRERSCi0taTM4Nm50b19zaWdjb250ZXh0X2FkZHIg KGNvbnN0IGZyYW1lX2luZm9fcHRyICZ0aGlzX2ZyYW1lKQotLXsKLS0gIHN0cnVjdCBnZGJhcmNo ICpnZGJhcmNoID0gZ2V0X2ZyYW1lX2FyY2ggKHRoaXNfZnJhbWUpOwotLSAgZW51bSBiZmRfZW5k aWFuIGJ5dGVfb3JkZXIgPSBnZGJhcmNoX2J5dGVfb3JkZXIgKGdkYmFyY2gpOwotLSAgZ2RiX2J5 dGUgYnVmWzRdOwotLSAgQ09SRV9BRERSIHB0cmN0eDsKLS0KLS0gIC8qIFdlIHN0b3JlIF9fdWNv bnRleHRfdCBhZGRyIGluIEVESSByZWdpc3Rlci4gICovCi0tICBnZXRfZnJhbWVfcmVnaXN0ZXIg KHRoaXNfZnJhbWUsIEkzODZfRURJX1JFR05VTSwgYnVmKTsKLS0gIHB0cmN0eCA9IGV4dHJhY3Rf dW5zaWduZWRfaW50ZWdlciAoYnVmLCA0LCBieXRlX29yZGVyKTsKLS0gIHB0cmN0eCArPSAyNCAv KiBDb250ZXh0IHBvaW50ZXIgaXMgYXQgdGhpcyBvZmZzZXQuICAqLzsKLS0KLS0gIHJldHVybiBw dHJjdHg7Ci0tfQotLQotLXN0YXRpYyB2b2lkCi0taW5pdF9pMzg2bnRvX29wcyAodm9pZCkKLS17 Ci0tICBudG9fcmVnc2V0X2lkID0gaTM4Nm50b19yZWdzZXRfaWQ7Ci0tICBudG9fc3VwcGx5X2dy ZWdzZXQgPSBpMzg2bnRvX3N1cHBseV9ncmVnc2V0OwotLSAgbnRvX3N1cHBseV9mcHJlZ3NldCA9 IGkzODZudG9fc3VwcGx5X2ZwcmVnc2V0OwotLSAgbnRvX3N1cHBseV9hbHRyZWdzZXQgPSBudG9f ZHVtbXlfc3VwcGx5X3JlZ3NldDsKLS0gIG50b19zdXBwbHlfcmVnc2V0ID0gaTM4Nm50b19zdXBw bHlfcmVnc2V0OwotLSAgbnRvX3JlZ2lzdGVyX2FyZWEgPSBpMzg2bnRvX3JlZ2lzdGVyX2FyZWE7 Ci0tICBudG9fcmVnc2V0X2ZpbGwgPSBpMzg2bnRvX3JlZ3NldF9maWxsOwotLSAgbnRvX2ZldGNo X2xpbmtfbWFwX29mZnNldHMgPQotLSAgICBzdnI0X2lscDMyX2ZldGNoX2xpbmtfbWFwX29mZnNl dHM7Ci0tfQotLQotLXN0YXRpYyB2b2lkCi0taTM4Nm50b19pbml0X2FiaSAoc3RydWN0IGdkYmFy Y2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKLS17Ci0tICBpMzg2X2dkYmFy Y2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcDxpMzg2X2dkYmFyY2hfdGRlcD4gKGdkYmFyY2gp OwotLSAgc3RhdGljIHNvbGliX29wcyBudG9fc3ZyNF9zb19vcHM7Ci0tCi0tICAvKiBEZWFsIHdp dGggb3VyIHN0cmFuZ2Ugc2lnbmFscy4gICovCi0tICBudG9faW5pdGlhbGl6ZV9zaWduYWxzICgp OwotLQotLSAgLyogTlRPIHVzZXMgRUxGLiAgKi8KLS0gIGkzODZfZWxmX2luaXRfYWJpIChpbmZv LCBnZGJhcmNoKTsKLS0KLS0gIC8qIE5ldXRyaW5vIHJld2luZHMgdG8gbG9vayBtb3JlIG5vcm1h bC4gIE5lZWQgdG8gb3ZlcnJpZGUgdGhlIGkzODYKLS0gICAgIGRlZmF1bHQgd2hpY2ggaXMgW3Vu Zm9ydHVuYXRlbHldIHRvIGRlY3JlbWVudCB0aGUgUEMuICAqLwotLSAgc2V0X2dkYmFyY2hfZGVj cl9wY19hZnRlcl9icmVhayAoZ2RiYXJjaCwgMCk7Ci0tCi0tICB0ZGVwLT5ncmVnc2V0X3JlZ19v ZmZzZXQgPSBpMzg2bnRvX2dyZWdzZXRfcmVnX29mZnNldDsKLS0gIHRkZXAtPmdyZWdzZXRfbnVt X3JlZ3MgPSBBUlJBWV9TSVpFIChpMzg2bnRvX2dyZWdzZXRfcmVnX29mZnNldCk7Ci0tICB0ZGVw LT5zaXplb2ZfZ3JlZ3NldCA9IE5VTV9HUFJFR1MgKiA0OwotLQotLSAgdGRlcC0+c2lndHJhbXBf cCA9IGkzODZudG9fc2lndHJhbXBfcDsKLS0gIHRkZXAtPnNpZ2NvbnRleHRfYWRkciA9IGkzODZu dG9fc2lnY29udGV4dF9hZGRyOwotLSAgdGRlcC0+c2NfcmVnX29mZnNldCA9IGkzODZudG9fZ3Jl Z3NldF9yZWdfb2Zmc2V0OwotLSAgdGRlcC0+c2NfbnVtX3JlZ3MgPSBBUlJBWV9TSVpFIChpMzg2 bnRvX2dyZWdzZXRfcmVnX29mZnNldCk7Ci0tCi0tICAvKiBTZXRqbXAoKSdzIHJldHVybiBQQyBz YXZlZCBpbiBFRFggKDUpLiAgKi8KLS0gIHRkZXAtPmpiX3BjX29mZnNldCA9IDIwOwkvKiA1eDMy IGJpdCBpbnRzIGluLiAgKi8KLS0KLS0gIHNldF9zb2xpYl9zdnI0X2ZldGNoX2xpbmtfbWFwX29m ZnNldHMKLS0gICAgKGdkYmFyY2gsIHN2cjRfaWxwMzJfZmV0Y2hfbGlua19tYXBfb2Zmc2V0cyk7 Ci0tCi0tICAvKiBJbml0aWFsaXplIHRoaXMgbGF6aWx5LCB0byBhdm9pZCBhbiBpbml0aWFsaXph dGlvbiBvcmRlcgotLSAgICAgZGVwZW5kZW5jeSBvbiBzb2xpYi1zdnI0LmMncyBfaW5pdGlhbGl6 ZSByb3V0aW5lLiAgKi8KLS0gIGlmIChudG9fc3ZyNF9zb19vcHMuaW5fZHluc3ltX3Jlc29sdmVf Y29kZSA9PSBOVUxMKQotLSAgICB7Ci0tICAgICAgbnRvX3N2cjRfc29fb3BzID0gc3ZyNF9zb19v cHM7Ci0tCi0tICAgICAgLyogT3VyIGxvYWRlciBoYW5kbGVzIHNvbGliIHJlbG9jYXRpb25zIGRp ZmZlcmVudGx5IHRoYW4gc3ZyNC4gICovCi0tICAgICAgbnRvX3N2cjRfc29fb3BzLnJlbG9jYXRl X3NlY3Rpb25fYWRkcmVzc2VzCi0tCT0gbnRvX3JlbG9jYXRlX3NlY3Rpb25fYWRkcmVzc2VzOwot LQotLSAgICAgIC8qIFN1cHBseSBhIG5pY2UgZnVuY3Rpb24gdG8gZmluZCBvdXIgc29saWJzLiAg Ki8KLS0gICAgICBudG9fc3ZyNF9zb19vcHMuZmluZF9hbmRfb3Blbl9zb2xpYgotLQk9IG50b19m aW5kX2FuZF9vcGVuX3NvbGliOwotLQotLSAgICAgIC8qIE91ciBsaW5rZXIgY29kZSBpcyBpbiBs aWJjLiAgKi8KLS0gICAgICBudG9fc3ZyNF9zb19vcHMuaW5fZHluc3ltX3Jlc29sdmVfY29kZQot LQk9IG50b19pbl9keW5zeW1fcmVzb2x2ZV9jb2RlOwotLSAgICB9Ci0tICBzZXRfZ2RiYXJjaF9z b19vcHMgKGdkYmFyY2gsICZudG9fc3ZyNF9zb19vcHMpOwotLQotLSAgc2V0X2dkYmFyY2hfd2No YXJfYml0IChnZGJhcmNoLCAzMik7Ci0tICBzZXRfZ2RiYXJjaF93Y2hhcl9zaWduZWQgKGdkYmFy Y2gsIDApOwotLX0KLS0KLS12b2lkIF9pbml0aWFsaXplX2kzODZudG9fdGRlcCAoKTsKLS12b2lk Ci0tX2luaXRpYWxpemVfaTM4Nm50b190ZGVwICgpCi0tewotLSAgaW5pdF9pMzg2bnRvX29wcyAo KTsKLS0gIGdkYmFyY2hfcmVnaXN0ZXJfb3NhYmkgKGJmZF9hcmNoX2kzODYsIDAsIEdEQl9PU0FC SV9RTlhOVE8sCi0tCQkJICBpMzg2bnRvX2luaXRfYWJpKTsKLS0gIGdkYmFyY2hfcmVnaXN0ZXJf b3NhYmlfc25pZmZlciAoYmZkX2FyY2hfaTM4NiwgYmZkX3RhcmdldF9lbGZfZmxhdm91ciwKLS0J CQkJICBudG9fZWxmX29zYWJpX3NuaWZmZXIpOwotLX0KLWRpZmYgLS1naXQgYS9nZGIvbnRvLXBy b2Nmcy5jIGIvZ2RiL250by1wcm9jZnMuYwotZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci0tLS0g YS9nZGIvbnRvLXByb2Nmcy5jCi0rKysgL2Rldi9udWxsCi1AQCAtMSwxNTg4ICswLDAgQEAKLS0v KiBNYWNoaW5lIGluZGVwZW5kZW50IHN1cHBvcnQgZm9yIFFOWCBOZXV0cmlubyAvcHJvYyAocHJv Y2VzcyBmaWxlIHN5c3RlbSkKLS0gICBmb3IgR0RCLiAgV3JpdHRlbiBieSBDb2xpbiBCdXJnZXNz IGF0IFFOWCBTb2Z0d2FyZSBTeXN0ZW1zIExpbWl0ZWQuCi0tCi0tICAgQ29weXJpZ2h0IChDKSAy MDAzLTIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0tCi0tICAgQ29udHJpYnV0 ZWQgYnkgUU5YIFNvZnR3YXJlIFN5c3RlbXMgTHRkLgotLQotLSAgIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEdEQi4KLS0KLS0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0tICAgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwg b3IKLS0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotLQotLSAgIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCi0tICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCi0tCi0tICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLS0gICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCi0t Ci0tCi0tI2luY2x1ZGUgPGZjbnRsLmg+Ci0tI2luY2x1ZGUgPHNwYXduLmg+Ci0tI2luY2x1ZGUg PHN5cy9kZWJ1Zy5oPgotLSNpbmNsdWRlIDxzeXMvcHJvY2ZzLmg+Ci0tI2luY2x1ZGUgPHN5cy9u ZXV0cmluby5oPgotLSNpbmNsdWRlIDxzeXMvc3lzcGFnZS5oPgotLSNpbmNsdWRlIDxkaXJlbnQu aD4KLS0jaW5jbHVkZSA8c3lzL25ldG1nci5oPgotLSNpbmNsdWRlIDxzeXMvYXV4di5oPgotLQot LSNpbmNsdWRlICJnZGJjb3JlLmgiCi0tI2luY2x1ZGUgImluZmVyaW9yLmgiCi0tI2luY2x1ZGUg InRhcmdldC5oIgotLSNpbmNsdWRlICJvYmpmaWxlcy5oIgotLSNpbmNsdWRlICJnZGJ0aHJlYWQu aCIKLS0jaW5jbHVkZSAibnRvLXRkZXAuaCIKLS0jaW5jbHVkZSAiY29tbWFuZC5oIgotLSNpbmNs dWRlICJyZWdjYWNoZS5oIgotLSNpbmNsdWRlICJzb2xpYi5oIgotLSNpbmNsdWRlICJpbmYtY2hp bGQuaCIKLS0jaW5jbHVkZSAiZ2Ric3VwcG9ydC9maWxlc3R1ZmYuaCIKLS0jaW5jbHVkZSAiZ2Ri c3VwcG9ydC9zY29wZWRfZmQuaCIKLS0KLS0jZGVmaW5lIE5VTExfUElECQkwCi0tI2RlZmluZSBf REVCVUdfRkxBR19UUkFDRQkoX0RFQlVHX0ZMQUdfVFJBQ0VfRVhFQ3xfREVCVUdfRkxBR19UUkFD RV9SRHxcCi0tCQlfREVCVUdfRkxBR19UUkFDRV9XUnxfREVCVUdfRkxBR19UUkFDRV9NT0RJRlkp Ci0tCi0taW50IGN0bF9mZDsKLS0KLS1zdGF0aWMgc2lnaGFuZGxlcl90IG9mdW5jOwotLQotLXN0 YXRpYyBwcm9jZnNfcnVuIHJ1bjsKLS0KLS0vKiBDcmVhdGUgdGhlICJuYXRpdmUiIGFuZCAicHJv Y2ZzIiB0YXJnZXRzLiAgKi8KLS0KLS1zdHJ1Y3QgbnRvX3Byb2Nmc190YXJnZXQgOiBwdWJsaWMg aW5mX2NoaWxkX3RhcmdldAotLXsKLS0gIHZvaWQgb3BlbiAoY29uc3QgY2hhciAqYXJnLCBpbnQg ZnJvbV90dHkpIG92ZXJyaWRlOwotLQotLSAgdm9pZCBhdHRhY2ggKGNvbnN0IGNoYXIgKiwgaW50 KSBvdmVycmlkZSA9IDA7Ci0tCi0tICB2b2lkIHBvc3RfYXR0YWNoIChpbnQpOwotLQotLSAgdm9p ZCBkZXRhY2ggKGluZmVyaW9yICosIGludCkgb3ZlcnJpZGU7Ci0tCi0tICB2b2lkIHJlc3VtZSAo cHRpZF90LCBpbnQsIGVudW0gZ2RiX3NpZ25hbCkgb3ZlcnJpZGU7Ci0tCi0tICBwdGlkX3Qgd2Fp dCAocHRpZF90LCBzdHJ1Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKiwgdGFyZ2V0X3dhaXRfZmxhZ3Mp IG92ZXJyaWRlOwotLQotLSAgdm9pZCBmZXRjaF9yZWdpc3RlcnMgKHN0cnVjdCByZWdjYWNoZSAq LCBpbnQpIG92ZXJyaWRlOwotLSAgdm9pZCBzdG9yZV9yZWdpc3RlcnMgKHN0cnVjdCByZWdjYWNo ZSAqLCBpbnQpIG92ZXJyaWRlOwotLQotLSAgZW51bSB0YXJnZXRfeGZlcl9zdGF0dXMgeGZlcl9w YXJ0aWFsIChlbnVtIHRhcmdldF9vYmplY3Qgb2JqZWN0LAotLQkJCQkJY29uc3QgY2hhciAqYW5u ZXgsCi0tCQkJCQlnZGJfYnl0ZSAqcmVhZGJ1ZiwKLS0JCQkJCWNvbnN0IGdkYl9ieXRlICp3cml0 ZWJ1ZiwKLS0JCQkJCVVMT05HRVNUIG9mZnNldCwgVUxPTkdFU1QgbGVuLAotLQkJCQkJVUxPTkdF U1QgKnhmZXJlZF9sZW4pIG92ZXJyaWRlOwotLQotLSAgdm9pZCBmaWxlc19pbmZvICgpIG92ZXJy aWRlOwotLQotLSAgaW50IGluc2VydF9icmVha3BvaW50IChzdHJ1Y3QgZ2RiYXJjaCAqLCBzdHJ1 Y3QgYnBfdGFyZ2V0X2luZm8gKikgb3ZlcnJpZGU7Ci0tCi0tICBpbnQgcmVtb3ZlX2JyZWFrcG9p bnQgKHN0cnVjdCBnZGJhcmNoICosIHN0cnVjdCBicF90YXJnZXRfaW5mbyAqLAotLQkJCSBlbnVt IHJlbW92ZV9icF9yZWFzb24pIG92ZXJyaWRlOwotLQotLSAgaW50IGNhbl91c2VfaHdfYnJlYWtw b2ludCAoZW51bSBicHR5cGUsIGludCwgaW50KSBvdmVycmlkZTsKLS0KLS0gIGludCBpbnNlcnRf aHdfYnJlYWtwb2ludCAoc3RydWN0IGdkYmFyY2ggKiwgc3RydWN0IGJwX3RhcmdldF9pbmZvICop IG92ZXJyaWRlOwotLQotLSAgaW50IHJlbW92ZV9od19icmVha3BvaW50IChzdHJ1Y3QgZ2RiYXJj aCAqLCBzdHJ1Y3QgYnBfdGFyZ2V0X2luZm8gKikgb3ZlcnJpZGU7Ci0tCi0tICBpbnQgaW5zZXJ0 X3dhdGNocG9pbnQgKENPUkVfQUREUiwgaW50LCBlbnVtIHRhcmdldF9od19icF90eXBlLAotLQkJ CSBzdHJ1Y3QgZXhwcmVzc2lvbiAqKSBvdmVycmlkZTsKLS0KLS0gIGludCByZW1vdmVfd2F0Y2hw b2ludCAoQ09SRV9BRERSLCBpbnQsIGVudW0gdGFyZ2V0X2h3X2JwX3R5cGUsCi0tCQkJIHN0cnVj dCBleHByZXNzaW9uICopIG92ZXJyaWRlOwotLQotLSAgYm9vbCBzdG9wcGVkX2J5X3dhdGNocG9p bnQgKCkgb3ZlcnJpZGU7Ci0tCi0tICB2b2lkIGtpbGwgKCkgb3ZlcnJpZGU7Ci0tCi0tICB2b2lk IGNyZWF0ZV9pbmZlcmlvciAoY29uc3QgY2hhciAqLCBjb25zdCBzdGQ6OnN0cmluZyAmLAotLQkJ CWNoYXIgKiosIGludCkgb3ZlcnJpZGU7Ci0tCi0tICB2b2lkIG1vdXJuX2luZmVyaW9yICgpIG92 ZXJyaWRlOwotLQotLSAgdm9pZCBwYXNzX3NpZ25hbHMgKGdkYjo6YXJyYXlfdmlldzxjb25zdCB1 bnNpZ25lZCBjaGFyPikgb3ZlcnJpZGU7Ci0tCi0tICBib29sIHRocmVhZF9hbGl2ZSAocHRpZF90 IHB0aWQpIG92ZXJyaWRlOwotLQotLSAgdm9pZCB1cGRhdGVfdGhyZWFkX2xpc3QgKCkgb3ZlcnJp ZGU7Ci0tCi0tICBzdGQ6OnN0cmluZyBwaWRfdG9fc3RyIChwdGlkX3QpIG92ZXJyaWRlOwotLQot LSAgdm9pZCBpbnRlcnJ1cHQgKCkgb3ZlcnJpZGU7Ci0tCi0tICBjb25zdCBjaGFyICpleHRyYV90 aHJlYWRfaW5mbyAoc3RydWN0IHRocmVhZF9pbmZvICopIG92ZXJyaWRlOwotLQotLSAgY29uc3Qg Y2hhciAqcGlkX3RvX2V4ZWNfZmlsZSAoaW50IHBpZCkgb3ZlcnJpZGU7Ci0tfTsKLS0KLS0vKiBG b3IgInRhcmdldCBuYXRpdmUiLiAgKi8KLS0KLS1zdGF0aWMgY29uc3QgdGFyZ2V0X2luZm8gbnRv X25hdGl2ZV90YXJnZXRfaW5mbyA9IHsKLS0gICJuYXRpdmUiLAotLSAgTl8oIlFOWCBOZXV0cmlu byBsb2NhbCBwcm9jZXNzIiksCi0tICBOXygiUU5YIE5ldXRyaW5vIGxvY2FsIHByb2Nlc3MgKHN0 YXJ0ZWQgYnkgdGhlIFwicnVuXCIgY29tbWFuZCkuIikKLS19OwotLQotLWNsYXNzIG50b19wcm9j ZnNfdGFyZ2V0X25hdGl2ZSBmaW5hbCA6IHB1YmxpYyBudG9fcHJvY2ZzX3RhcmdldAotLXsKLS0g IGNvbnN0IHRhcmdldF9pbmZvICZpbmZvICgpIGNvbnN0IG92ZXJyaWRlCi0tICB7IHJldHVybiBu dG9fbmF0aXZlX3RhcmdldF9pbmZvOyB9Ci0tfTsKLS0KLS0vKiBGb3IgInRhcmdldCBwcm9jZnMg PG5vZGU+Ii4gICovCi0tCi0tc3RhdGljIGNvbnN0IHRhcmdldF9pbmZvIG50b19wcm9jZnNfdGFy Z2V0X2luZm8gPSB7Ci0tICAicHJvY2ZzIiwKLS0gIE5fKCJRTlggTmV1dHJpbm8gbG9jYWwgb3Ig cmVtb3RlIHByb2Nlc3MiKSwKLS0gIE5fKCJRTlggTmV1dHJpbm8gcHJvY2Vzcy4gIHRhcmdldCBw cm9jZnMgTk9ERSIpCi0tfTsKLS0KLS1zdHJ1Y3QgbnRvX3Byb2Nmc190YXJnZXRfcHJvY2ZzIGZp bmFsIDogcHVibGljIG50b19wcm9jZnNfdGFyZ2V0Ci0tewotLSAgY29uc3QgdGFyZ2V0X2luZm8g JmluZm8gKCkgY29uc3Qgb3ZlcnJpZGUKLS0gIHsgcmV0dXJuIG50b19wcm9jZnNfdGFyZ2V0X2lu Zm87IH0KLS19OwotLQotLXN0YXRpYyBwdGlkX3QgZG9fYXR0YWNoIChwdGlkX3QgcHRpZCk7Ci0t Ci0tLyogVGhlc2UgdHdvIGdsb2JhbHMgYXJlIG9ubHkgZXZlciBzZXQgaW4gcHJvY2ZzX29wZW5f MSwgYnV0IGFyZQotLSAgIHJlZmVyZW5jZWQgZWxzZXdoZXJlLiAgJ250b19wcm9jZnNfbm9kZScg aXMgYSBmbGFnIHVzZWQgdG8gc2F5Ci0tICAgd2hldGhlciB3ZSBhcmUgbG9jYWwsIG9yIHdlIHNo b3VsZCBnZXQgdGhlIGN1cnJlbnQgbm9kZSBkZXNjcmlwdG9yCi0tICAgZm9yIHRoZSByZW1vdGUg UU5YIG5vZGUuICAqLwotLXN0YXRpYyBjaGFyICpub2Rlc3RyOwotLXN0YXRpYyB1bnNpZ25lZCBu dG9fcHJvY2ZzX25vZGUgPSBORF9MT0NBTF9OT0RFOwotLQotLS8qIFJldHVybiB0aGUgY3VycmVu dCBRTlggTm9kZSwgb3IgZXJyb3Igb3V0LiAgVGhpcyBpcyBhIHNpbXBsZQotLSAgIHdyYXBwZXIg Zm9yIHRoZSBuZXRtZ3Jfc3RydG9uZCgpIGZ1bmN0aW9uLiAgVGhlIHJlYXNvbiB0aGlzCi0tICAg aXMgcmVxdWlyZWQgaXMgYmVjYXVzZSBRTlggbm9kZSBkZXNjcmlwdG9ycyBhcmUgdHJhbnNpZW50 IHNvCi0tICAgd2UgaGF2ZSB0byByZS1hY3F1aXJlIHRoZW0gZXZlcnkgdGltZS4gICovCi0tc3Rh dGljIHVuc2lnbmVkCi0tbnRvX25vZGUgKHZvaWQpCi0tewotLSAgdW5zaWduZWQgbm9kZTsKLS0K LS0gIGlmIChORF9OT0RFX0NNUCAobnRvX3Byb2Nmc19ub2RlLCBORF9MT0NBTF9OT0RFKSA9PSAw Ci0tICAgICAgfHwgbm9kZXN0ciA9PSBOVUxMKQotLSAgICByZXR1cm4gTkRfTE9DQUxfTk9ERTsK LS0KLS0gIG5vZGUgPSBuZXRtZ3Jfc3RydG9uZCAobm9kZXN0ciwgMCk7Ci0tICBpZiAobm9kZSA9 PSAtMSkKLS0gICAgZXJyb3IgKF8oIkxvc3QgdGhlIFFOWCBub2RlLiAgRGVidWcgc2Vzc2lvbiBw cm9iYWJseSBvdmVyLiIpKTsKLS0KLS0gIHJldHVybiAobm9kZSk7Ci0tfQotLQotLXN0YXRpYyBl bnVtIGdkYl9vc2FiaQotLXByb2Nmc19pc19udG9fdGFyZ2V0IChiZmQgKmFiZmQpCi0tewotLSAg cmV0dXJuIEdEQl9PU0FCSV9RTlhOVE87Ci0tfQotLQotLS8qIFRoaXMgaXMgY2FsbGVkIHdoZW4g d2UgY2FsbCAndGFyZ2V0IG5hdGl2ZScgb3IgJ3RhcmdldCBwcm9jZnMKLS0gICA8YXJnPicgZnJv bSB0aGUgKGdkYikgcHJvbXB0LiAgRm9yIFFOWDYgKG50byksIHRoZSBvbmx5IHZhbGlkIGFyZwot LSAgIHdpbGwgYmUgYSBRTlggbm9kZSBzdHJpbmcsIGVnOiAiL25ldC9zb21lX25vZGUiLiAgSWYg YXJnIGlzIG5vdCBhCi0tICAgdmFsaWQgUU5YIG5vZGUsIHdlIHdpbGwgZGVmYXVsdCB0byBsb2Nh bC4gICovCi0tdm9pZAotLW50b19wcm9jZnNfdGFyZ2V0OjpvcGVuIChjb25zdCBjaGFyICphcmcs IGludCBmcm9tX3R0eSkKLS17Ci0tICBjaGFyICplbmRzdHI7Ci0tICBjaGFyIGJ1ZmZlcls1MF07 Ci0tICBpbnQgdG90YWxfc2l6ZTsKLS0gIHByb2Nmc19zeXNpbmZvICpzeXNpbmZvOwotLSAgY2hh ciBudG9fcHJvY2ZzX3BhdGhbUEFUSF9NQVhdOwotLQotLSAgLyogT2ZmZXIgdG8ga2lsbCBwcmV2 aW91cyBpbmZlcmlvcnMgYmVmb3JlIG9wZW5pbmcgdGhpcyB0YXJnZXQuICAqLwotLSAgdGFyZ2V0 X3ByZW9wZW4gKGZyb21fdHR5KTsKLS0KLS0gIG50b19pc19udG9fdGFyZ2V0ID0gcHJvY2ZzX2lz X250b190YXJnZXQ7Ci0tCi0tICAvKiBTZXQgdGhlIGRlZmF1bHQgbm9kZSB1c2VkIGZvciBzcGF3 bmluZyB0byB0aGlzIG9uZSwKLS0gICAgIGFuZCBvbmx5IG92ZXJyaWRlIGl0IGlmIHRoZXJlIGlz IGEgdmFsaWQgYXJnLiAgKi8KLS0KLS0gIHhmcmVlIChub2Rlc3RyKTsKLS0gIG5vZGVzdHIgPSBO VUxMOwotLQotLSAgbnRvX3Byb2Nmc19ub2RlID0gTkRfTE9DQUxfTk9ERTsKLS0gIG5vZGVzdHIg PSAoYXJnICE9IE5VTEwpID8geHN0cmR1cCAoYXJnKSA6IE5VTEw7Ci0tCi0tICBpZiAobm9kZXN0 cikKLS0gICAgewotLSAgICAgIG50b19wcm9jZnNfbm9kZSA9IG5ldG1ncl9zdHJ0b25kIChub2Rl c3RyLCAmZW5kc3RyKTsKLS0gICAgICBpZiAobnRvX3Byb2Nmc19ub2RlID09IC0xKQotLQl7Ci0t CSAgaWYgKGVycm5vID09IEVOT1RTVVApCi0tCSAgICBnZGJfcHJpbnRmICgiUU5YIE5ldCBNYW5h Z2VyIG5vdCBmb3VuZC5cbiIpOwotLQkgIGdkYl9wcmludGYgKCJJbnZhbGlkIFFOWCBub2RlICVz OiBlcnJvciAlZCAoJXMpLlxuIiwgbm9kZXN0ciwKLS0JCSAgICAgIGVycm5vLCBzYWZlX3N0cmVy cm9yIChlcnJubykpOwotLQkgIHhmcmVlIChub2Rlc3RyKTsKLS0JICBub2Rlc3RyID0gTlVMTDsK LS0JICBudG9fcHJvY2ZzX25vZGUgPSBORF9MT0NBTF9OT0RFOwotLQl9Ci0tICAgICAgZWxzZSBp ZiAoKmVuZHN0cikKLS0JewotLQkgIGlmICgqKGVuZHN0ciAtIDEpID09ICcvJykKLS0JICAgICoo ZW5kc3RyIC0gMSkgPSAwOwotLQkgIGVsc2UKLS0JICAgICplbmRzdHIgPSAwOwotLQl9Ci0tICAg IH0KLS0gIHNucHJpbnRmIChudG9fcHJvY2ZzX3BhdGgsIFBBVEhfTUFYIC0gMSwgIiVzJXMiLAot LQkgICAgKG5vZGVzdHIgIT0gTlVMTCkgPyBub2Rlc3RyIDogIiIsICIvcHJvYyIpOwotLQotLSAg c2NvcGVkX2ZkIGZkIChvcGVuIChudG9fcHJvY2ZzX3BhdGgsIE9fUkRPTkxZKSk7Ci0tICBpZiAo ZmQuZ2V0ICgpID09IC0xKQotLSAgICB7Ci0tICAgICAgZ2RiX3ByaW50ZiAoIkVycm9yIG9wZW5p bmcgJXMgOiAlZCAoJXMpXG4iLCBudG9fcHJvY2ZzX3BhdGgsIGVycm5vLAotLQkJICBzYWZlX3N0 cmVycm9yIChlcnJubykpOwotLSAgICAgIGVycm9yIChfKCJJbnZhbGlkIHByb2NmcyBhcmciKSk7 Ci0tICAgIH0KLS0KLS0gIHN5c2luZm8gPSAodm9pZCAqKSBidWZmZXI7Ci0tICBpZiAoZGV2Y3Rs IChmZC5nZXQgKCksIERDTURfUFJPQ19TWVNJTkZPLCBzeXNpbmZvLCBzaXplb2YgYnVmZmVyLCAw KSAhPSBFT0spCi0tICAgIHsKLS0gICAgICBnZGJfcHJpbnRmICgiRXJyb3IgZ2V0dGluZyBzaXpl OiAlZCAoJXMpXG4iLCBlcnJubywKLS0JCSAgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsKLS0gICAg ICBlcnJvciAoXygiRGV2Y3RsIGZhaWxlZC4iKSk7Ci0tICAgIH0KLS0gIGVsc2UKLS0gICAgewot LSAgICAgIHRvdGFsX3NpemUgPSBzeXNpbmZvLT50b3RhbF9zaXplOwotLSAgICAgIHN5c2luZm8g PSBhbGxvY2EgKHRvdGFsX3NpemUpOwotLSAgICAgIGlmIChzeXNpbmZvID09IE5VTEwpCi0tCXsK LS0JICBnZGJfcHJpbnRmICgiTWVtb3J5IGVycm9yOiAlZCAoJXMpXG4iLCBlcnJubywKLS0JCSAg ICAgIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7Ci0tCSAgZXJyb3IgKF8oImFsbG9jYSBmYWlsZWQu IikpOwotLQl9Ci0tICAgICAgZWxzZQotLQl7Ci0tCSAgaWYgKGRldmN0bCAoZmQuZ2V0ICgpLCBE Q01EX1BST0NfU1lTSU5GTywgc3lzaW5mbywgdG90YWxfc2l6ZSwgMCkKLS0JICAgICAgIT0gRU9L KQotLQkgICAgewotLQkgICAgICBnZGJfcHJpbnRmICgiRXJyb3IgZ2V0dGluZyBzeXNpbmZvOiAl ZCAoJXMpXG4iLCBlcnJubywKLS0JCQkgIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7Ci0tCSAgICAg IGVycm9yIChfKCJEZXZjdGwgZmFpbGVkLiIpKTsKLS0JICAgIH0KLS0JICBlbHNlCi0tCSAgICB7 Ci0tCSAgICAgIGlmIChzeXNpbmZvLT50eXBlICE9Ci0tCQkgIG50b19tYXBfYXJjaF90b19jcHV0 eXBlCi0tCQkgICAgKGdkYmFyY2hfYmZkX2FyY2hfaW5mbwotLQkJICAgICAoY3VycmVudF9pbmZl cmlvciAoKS0+YXJjaCAoKSktPmFyY2hfbmFtZSkpCi0tCQllcnJvciAoXygiSW52YWxpZCB0YXJn ZXQgQ1BVLiIpKTsKLS0JICAgIH0KLS0JfQotLSAgICB9Ci0tCi0tICBpbmZfY2hpbGRfdGFyZ2V0 OjpvcGVuIChhcmcsIGZyb21fdHR5KTsKLS0gIGdkYl9wcmludGYgKCJEZWJ1Z2dpbmcgdXNpbmcg JXNcbiIsIG50b19wcm9jZnNfcGF0aCk7Ci0tfQotLQotLXN0YXRpYyB2b2lkCi0tcHJvY2ZzX3Nl dF90aHJlYWQgKHB0aWRfdCBwdGlkKQotLXsKLS0gIHBpZF90IHRpZDsKLS0KLS0gIHRpZCA9IHB0 aWQudGlkICgpOwotLSAgZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19DVVJUSFJFQUQsICZ0aWQs IHNpemVvZiAodGlkKSwgMCk7Ci0tfQotLQotLS8qICBSZXR1cm4gdHJ1ZSBpZiB0aGUgdGhyZWFk IFRIIGlzIHN0aWxsIGFsaXZlLiAgKi8KLS0KLS1ib29sCi0tbnRvX3Byb2Nmc190YXJnZXQ6OnRo cmVhZF9hbGl2ZSAocHRpZF90IHB0aWQpCi0tewotLSAgcGlkX3QgdGlkOwotLSAgcGlkX3QgcGlk OwotLSAgcHJvY2ZzX3N0YXR1cyBzdGF0dXM7Ci0tICBpbnQgZXJyOwotLQotLSAgdGlkID0gcHRp ZC50aWQgKCk7Ci0tICBwaWQgPSBwdGlkLnBpZCAoKTsKLS0KLS0gIGlmIChraWxsIChwaWQsIDAp ID09IC0xKQotLSAgICByZXR1cm4gZmFsc2U7Ci0tCi0tICBzdGF0dXMudGlkID0gdGlkOwotLSAg aWYgKChlcnIgPSBkZXZjdGwgKGN0bF9mZCwgRENNRF9QUk9DX1RJRFNUQVRVUywKLS0JCSAgICAg JnN0YXR1cywgc2l6ZW9mIChzdGF0dXMpLCAwKSkgIT0gRU9LKQotLSAgICByZXR1cm4gZmFsc2U7 Ci0tCi0tICAvKiBUaHJlYWQgaXMgYWxpdmUgb3IgZGVhZCBidXQgbm90IHlldCBqb2luZWQsCi0t ICAgICBvciBkZWFkIGFuZCB0aGVyZSBpcyBhbiBhbGl2ZSAob3IgZGVhZCB1bmpvaW5lZCkgdGhy ZWFkIHdpdGgKLS0gICAgIGhpZ2hlciB0aWQuCi0tCi0tICAgICBJZiB0aGUgdGlkIGlzIG5vdCB0 aGUgc2FtZSBhcyByZXF1ZXN0ZWQsIHJlcXVlc3RlZCB0aWQgaXMgZGVhZC4gICovCi0tICByZXR1 cm4gKHN0YXR1cy50aWQgPT0gdGlkKSAmJiAoc3RhdHVzLnN0YXRlICE9IFNUQVRFX0RFQUQpOwot LX0KLS0KLS1zdGF0aWMgdm9pZAotLXVwZGF0ZV90aHJlYWRfcHJpdmF0ZV9kYXRhX25hbWUgKHN0 cnVjdCB0aHJlYWRfaW5mbyAqbmV3X3RocmVhZCwKLS0JCQkJIGNvbnN0IGNoYXIgKm5ld25hbWUp Ci0tewotLSAgbnRvX3RocmVhZF9pbmZvICpwdGkgPSBnZXRfbnRvX3RocmVhZF9pbmZvIChuZXdf dGhyZWFkKTsKLS0KLS0gIGdkYl9hc3NlcnQgKG5ld25hbWUgIT0gTlVMTCk7Ci0tICBnZGJfYXNz ZXJ0IChuZXdfdGhyZWFkICE9IE5VTEwpOwotLQotLSAgaWYgKHB0aSkKLS0gICAgewotLSAgICAg IHB0aSA9IG5ldyBudG9fdGhyZWFkX2luZm87Ci0tICAgICAgbmV3X3RocmVhZC0+cHJpdi5yZXNl dCAocHRpKTsKLS0gICAgfQotLQotLSAgcHRpLT5uYW1lID0gbmV3bmFtZTsKLS19Ci0tCi0tc3Rh dGljIHZvaWQgCi0tdXBkYXRlX3RocmVhZF9wcml2YXRlX2RhdGEgKHN0cnVjdCB0aHJlYWRfaW5m byAqbmV3X3RocmVhZCwgCi0tCQkJICAgIHB0aHJlYWRfdCB0aWQsIGludCBzdGF0ZSwgaW50IGZs YWdzKQotLXsKLS0gIHByb2Nmc19pbmZvIHBpZGluZm87Ci0tICBzdHJ1Y3QgX3RocmVhZF9uYW1l ICp0bjsKLS0gIHByb2Nmc190aHJlYWRjdGwgdGN0bDsKLS0KLS0jaWYgX05UT19WRVJTSU9OID4g NjMwCi0tICBnZGJfYXNzZXJ0IChuZXdfdGhyZWFkICE9IE5VTEwpOwotLQotLSAgaWYgKGRldmN0 bCAoY3RsX2ZkLCBEQ01EX1BST0NfSU5GTywgJnBpZGluZm8sCi0tCSAgICAgIHNpemVvZihwaWRp bmZvKSwgMCkgIT0gRU9LKQotLSAgICByZXR1cm47Ci0tCi0tICBtZW1zZXQgKCZ0Y3RsLCAwLCBz aXplb2YgKHRjdGwpKTsKLS0gIHRjdGwuY21kID0gX05UT19UQ1RMX05BTUU7Ci0tICB0biA9IChz dHJ1Y3QgX3RocmVhZF9uYW1lICopICgmdGN0bC5kYXRhKTsKLS0KLS0gIC8qIEZldGNoIG5hbWUg Zm9yIHRoZSBnaXZlbiB0aHJlYWQuICAqLwotLSAgdGN0bC50aWQgPSB0aWQ7Ci0tICB0bi0+bmFt ZV9idWZfbGVuID0gc2l6ZW9mICh0Y3RsLmRhdGEpIC0gc2l6ZW9mICgqdG4pOwotLSAgdG4tPm5l d19uYW1lX2xlbiA9IC0xOyAvKiBHZXR0aW5nLCBub3Qgc2V0dGluZy4gICovCi0tICBpZiAoZGV2 Y3RsIChjdGxfZmQsIERDTURfUFJPQ19USFJFQURDVEwsICZ0Y3RsLCBzaXplb2YgKHRjdGwpLCBO VUxMKSAhPSBFT0spCi0tICAgIHRuLT5uYW1lX2J1ZlswXSA9ICdcMCc7Ci0tCi0tICB0bi0+bmFt ZV9idWZbX05UT19USFJFQURfTkFNRV9NQVhdID0gJ1wwJzsKLS0KLS0gIHVwZGF0ZV90aHJlYWRf cHJpdmF0ZV9kYXRhX25hbWUgKG5ld190aHJlYWQsIHRuLT5uYW1lX2J1Zik7Ci0tCi0tICBudG9f dGhyZWFkX2luZm8gKnB0aSA9IGdldF9udG9fdGhyZWFkX2luZm8gKG5ld190aHJlYWQpOwotLSAg cHRpLT50aWQgPSB0aWQ7Ci0tICBwdGktPnN0YXRlID0gc3RhdGU7Ci0tICBwdGktPmZsYWdzID0g ZmxhZ3M7Ci0tI2VuZGlmIC8qIF9OVE9fVkVSU0lPTiAqLwotLX0KLS0KLS12b2lkCi0tbnRvX3By b2Nmc190YXJnZXQ6OnVwZGF0ZV90aHJlYWRfbGlzdCAoKQotLXsKLS0gIHByb2Nmc19zdGF0dXMg c3RhdHVzOwotLSAgcGlkX3QgcGlkOwotLSAgcHRpZF90IHB0aWQ7Ci0tICBwdGhyZWFkX3QgdGlk OwotLSAgc3RydWN0IHRocmVhZF9pbmZvICpuZXdfdGhyZWFkOwotLQotLSAgaWYgKGN0bF9mZCA9 PSAtMSkKLS0gICAgcmV0dXJuOwotLQotLSAgcHJ1bmVfdGhyZWFkcyAoKTsKLS0KLS0gIHBpZCA9 IGN1cnJlbnRfaW5mZXJpb3IgKCktPnBpZDsKLS0KLS0gIHN0YXR1cy50aWQgPSAxOwotLQotLSAg Zm9yICh0aWQgPSAxOzsgKyt0aWQpCi0tICAgIHsKLS0gICAgICBpZiAoc3RhdHVzLnRpZCA9PSB0 aWQgCi0tCSAgJiYgKGRldmN0bCAoY3RsX2ZkLCBEQ01EX1BST0NfVElEU1RBVFVTLCAmc3RhdHVz LCBzaXplb2YgKHN0YXR1cyksIDApCi0tCSAgICAgICE9IEVPSykpCi0tCWJyZWFrOwotLSAgICAg IGlmIChzdGF0dXMudGlkICE9IHRpZCkKLS0JLyogVGhlIHJlYXNvbiB3aHkgdGhpcyB3b3VsZCBu b3QgYmUgZXF1YWwgaXMgdGhhdCBkZXZjdGwgbWlnaHQgaGF2ZSAKLS0JICAgcmV0dXJuZWQgZGlm ZmVyZW50IHRpZCwgbWVhbmluZyB0aGUgcmVxdWVzdGVkIHRpZCBubyBsb25nZXIgZXhpc3RzCi0t CSAgIChlLmcuIHRocmVhZCBleGl0ZWQpLiAgKi8KLS0JY29udGludWU7Ci0tICAgICAgcHRpZCA9 IHB0aWRfdCAocGlkLCAwLCB0aWQpOwotLSAgICAgIG5ld190aHJlYWQgPSB0aGlzLT5maW5kX3Ro cmVhZCAocHRpZCk7Ci0tICAgICAgaWYgKCFuZXdfdGhyZWFkKQotLQluZXdfdGhyZWFkID0gYWRk X3RocmVhZCAocHRpZCk7Ci0tICAgICAgdXBkYXRlX3RocmVhZF9wcml2YXRlX2RhdGEgKG5ld190 aHJlYWQsIHRpZCwgc3RhdHVzLnN0YXRlLCAwKTsKLS0gICAgICBzdGF0dXMudGlkKys7Ci0tICAg IH0KLS0gIHJldHVybjsKLS19Ci0tCi0tc3RhdGljIHZvaWQKLS1wcm9jZnNfcGlkbGlzdCAoY29u c3QgY2hhciAqYXJncywgaW50IGZyb21fdHR5KQotLXsKLS0gIHN0cnVjdCBkaXJlbnQgKmRpcnAg PSBOVUxMOwotLSAgY2hhciBidWZbUEFUSF9NQVhdOwotLSAgcHJvY2ZzX2luZm8gKnBpZGluZm8g PSBOVUxMOwotLSAgcHJvY2ZzX2RlYnVnaW5mbyAqaW5mbyA9IE5VTEw7Ci0tICBwcm9jZnNfc3Rh dHVzICpzdGF0dXMgPSBOVUxMOwotLSAgcGlkX3QgbnVtX3RocmVhZHMgPSAwOwotLSAgcGlkX3Qg cGlkOwotLSAgY2hhciBuYW1lWzUxMl07Ci0tICBjaGFyIHByb2Nmc19kaXJbUEFUSF9NQVhdOwot LQotLSAgc25wcmludGYgKHByb2Nmc19kaXIsIHNpemVvZiAocHJvY2ZzX2RpciksICIlcyVzIiwK LS0JICAgIChub2Rlc3RyICE9IE5VTEwpID8gbm9kZXN0ciA6ICIiLCAiL3Byb2MiKTsKLS0KLS0g IGdkYl9kaXJfdXAgZHAgKG9wZW5kaXIgKHByb2Nmc19kaXIpKTsKLS0gIGlmIChkcCA9PSBOVUxM KQotLSAgICB7Ci0tICAgICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGVyciwgImZhaWxlZCB0byBvcGVu ZGlyIFwiJXNcIiAtICVkICglcykiLAotLQkJICBwcm9jZnNfZGlyLCBlcnJubywgc2FmZV9zdHJl cnJvciAoZXJybm8pKTsKLS0gICAgICByZXR1cm47Ci0tICAgIH0KLS0KLS0gIC8qIFN0YXJ0IHNj YW4gYXQgZmlyc3QgcGlkLiAgKi8KLS0gIHJld2luZGRpciAoZHAuZ2V0ICgpKTsKLS0KLS0gIGRv Ci0tICAgIHsKLS0gICAgICAvKiBHZXQgdGhlIHJpZ2h0IHBpZCBhbmQgcHJvY2ZzIHBhdGggZm9y IHRoZSBwaWQuICAqLwotLSAgICAgIGRvCi0tCXsKLS0JICBkaXJwID0gcmVhZGRpciAoZHAuZ2V0 ICgpKTsKLS0JICBpZiAoZGlycCA9PSBOVUxMKQotLQkgICAgcmV0dXJuOwotLQkgIHNucHJpbnRm IChidWYsIHNpemVvZiAoYnVmKSwgIiVzJXMvJXMvYXMiLAotLQkJICAgIChub2Rlc3RyICE9IE5V TEwpID8gbm9kZXN0ciA6ICIiLAotLQkJICAgICIvcHJvYyIsIGRpcnAtPmRfbmFtZSk7Ci0tCSAg cGlkID0gYXRvaSAoZGlycC0+ZF9uYW1lKTsKLS0JfQotLSAgICAgIHdoaWxlIChwaWQgPT0gMCk7 Ci0tCi0tICAgICAgLyogT3BlbiB0aGUgcHJvY2ZzIHBhdGguICAqLwotLSAgICAgIHNjb3BlZF9m ZCBmZCAob3BlbiAoYnVmLCBPX1JET05MWSkpOwotLSAgICAgIGlmIChmZC5nZXQgKCkgPT0gLTEp Ci0tCXsKLS0JICBnZGJfcHJpbnRmIChnZGJfc3RkZXJyLCAiZmFpbGVkIHRvIG9wZW4gJXMgLSAl ZCAoJXMpXG4iLAotLQkJICAgICAgYnVmLCBlcnJubywgc2FmZV9zdHJlcnJvciAoZXJybm8pKTsK LS0JICBjb250aW51ZTsKLS0JfQotLQotLSAgICAgIHBpZGluZm8gPSAocHJvY2ZzX2luZm8gKikg YnVmOwotLSAgICAgIGlmIChkZXZjdGwgKGZkLmdldCAoKSwgRENNRF9QUk9DX0lORk8sIHBpZGlu Zm8sIHNpemVvZiAoYnVmKSwgMCkgIT0gRU9LKQotLQl7Ci0tCSAgZ2RiX3ByaW50ZiAoZ2RiX3N0 ZGVyciwKLS0JCSAgICAgICJkZXZjdGwgRENNRF9QUk9DX0lORk8gZmFpbGVkIC0gJWQgKCVzKVxu IiwKLS0JCSAgICAgIGVycm5vLCBzYWZlX3N0cmVycm9yIChlcnJubykpOwotLQkgIGJyZWFrOwot LQl9Ci0tICAgICAgbnVtX3RocmVhZHMgPSBwaWRpbmZvLT5udW1fdGhyZWFkczsKLS0KLS0gICAg ICBpbmZvID0gKHByb2Nmc19kZWJ1Z2luZm8gKikgYnVmOwotLSAgICAgIGlmIChkZXZjdGwgKGZk LmdldCAoKSwgRENNRF9QUk9DX01BUERFQlVHX0JBU0UsIGluZm8sIHNpemVvZiAoYnVmKSwgMCkK LS0JICAhPSBFT0spCi0tCXN0cmNweSAobmFtZSwgInVuYXZhaWxhYmxlIik7Ci0tICAgICAgZWxz ZQotLQlzdHJjcHkgKG5hbWUsIGluZm8tPnBhdGgpOwotLQotLSAgICAgIC8qIENvbGxlY3Qgc3Rh dGUgaW5mbyBvbiBhbGwgdGhlIHRocmVhZHMuICAqLwotLSAgICAgIHN0YXR1cyA9IChwcm9jZnNf c3RhdHVzICopIGJ1ZjsKLS0gICAgICBmb3IgKHN0YXR1cy0+dGlkID0gMTsgc3RhdHVzLT50aWQg PD0gbnVtX3RocmVhZHM7IHN0YXR1cy0+dGlkKyspCi0tCXsKLS0JICBjb25zdCBpbnQgZXJyCi0t CSAgICA9IGRldmN0bCAoZmQuZ2V0ICgpLCBEQ01EX1BST0NfVElEU1RBVFVTLCBzdGF0dXMsIHNp emVvZiAoYnVmKSwgMCk7Ci0tCSAgZ2RiX3ByaW50ZiAoIiVzIC0gJWQiLCBuYW1lLCBwaWQpOwot LQkgIGlmIChlcnIgPT0gRU9LICYmIHN0YXR1cy0+dGlkICE9IDApCi0tCSAgICBnZGJfcHJpbnRm ICgiLyVkXG4iLCBzdGF0dXMtPnRpZCk7Ci0tCSAgZWxzZQotLQkgICAgewotLQkgICAgICBnZGJf cHJpbnRmICgiXG4iKTsKLS0JICAgICAgYnJlYWs7Ci0tCSAgICB9Ci0tCX0KLS0gICAgfQotLSAg d2hpbGUgKGRpcnAgIT0gTlVMTCk7Ci0tfQotLQotLXN0YXRpYyB2b2lkCi0tcHJvY2ZzX21lbWlu Zm8gKGNvbnN0IGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKLS17Ci0tICBwcm9jZnNfbWFwaW5m byAqbWFwaW5mb3MgPSBOVUxMOwotLSAgc3RhdGljIGludCBudW1fbWFwaW5mb3MgPSAwOwotLSAg cHJvY2ZzX21hcGluZm8gKm1hcGluZm9fcCwgKm1hcGluZm9fcDI7Ci0tICBpbnQgZmxhZ3MgPSB+ MCwgZXJyLCBudW0sIGksIGo7Ci0tCi0tICBzdHJ1Y3QKLS0gIHsKLS0gICAgcHJvY2ZzX2RlYnVn aW5mbyBpbmZvOwotLSAgICBjaGFyIGJ1ZmZbX1BPU0lYX1BBVEhfTUFYXTsKLS0gIH0gbWFwOwot LQotLSAgc3RydWN0IGluZm8KLS0gIHsKLS0gICAgdW5zaWduZWQgYWRkcjsKLS0gICAgdW5zaWdu ZWQgc2l6ZTsKLS0gICAgdW5zaWduZWQgZmxhZ3M7Ci0tICAgIHVuc2lnbmVkIGRlYnVnX3ZhZGRy OwotLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0OwotLSAgfTsKLS0KLS0gIHN0cnVjdCBw cmludGluZm8KLS0gIHsKLS0gICAgdW5zaWduZWQgbG9uZyBsb25nIGlubzsKLS0gICAgdW5zaWdu ZWQgZGV2OwotLSAgICBzdHJ1Y3QgaW5mbyB0ZXh0OwotLSAgICBzdHJ1Y3QgaW5mbyBkYXRhOwot LSAgICBjaGFyIG5hbWVbMjU2XTsKLS0gIH0gcHJpbnRtZTsKLS0KLS0gIC8qIEdldCB0aGUgbnVt YmVyIG9mIG1hcCBlbnRyeXMuICAqLwotLSAgZXJyID0gZGV2Y3RsIChjdGxfZmQsIERDTURfUFJP Q19NQVBJTkZPLCBOVUxMLCAwLCAmbnVtKTsKLS0gIGlmIChlcnIgIT0gRU9LKQotLSAgICB7Ci0t ICAgICAgcHJpbnRmICgiZmFpbGVkIGRldmN0bCBudW0gbWFwaW5mb3MgLSAlZCAoJXMpXG4iLCBl cnIsCi0tCSAgICAgIHNhZmVfc3RyZXJyb3IgKGVycikpOwotLSAgICAgIHJldHVybjsKLS0gICAg fQotLQotLSAgbWFwaW5mb3MgPSBYTkVXVkVDIChwcm9jZnNfbWFwaW5mbywgbnVtKTsKLS0KLS0g IG51bV9tYXBpbmZvcyA9IG51bTsKLS0gIG1hcGluZm9fcCA9IG1hcGluZm9zOwotLQotLSAgLyog RmlsbCB0aGUgbWFwIGVudHJ5cy4gICovCi0tICBlcnIgPSBkZXZjdGwgKGN0bF9mZCwgRENNRF9Q Uk9DX01BUElORk8sIG1hcGluZm9fcCwgbnVtCi0tCQkqIHNpemVvZiAocHJvY2ZzX21hcGluZm8p LCAmbnVtKTsKLS0gIGlmIChlcnIgIT0gRU9LKQotLSAgICB7Ci0tICAgICAgcHJpbnRmICgiZmFp bGVkIGRldmN0bCBtYXBpbmZvcyAtICVkICglcylcbiIsIGVyciwgc2FmZV9zdHJlcnJvciAoZXJy KSk7Ci0tICAgICAgeGZyZWUgKG1hcGluZm9zKTsKLS0gICAgICByZXR1cm47Ci0tICAgIH0KLS0K LS0gIG51bSA9IHN0ZDo6bWluIChudW0sIG51bV9tYXBpbmZvcyk7Ci0tCi0tICAvKiBSdW4gdGhy b3VnaCB0aGUgbGlzdCBvZiBtYXBpbmZvcywgYW5kIHN0b3JlIHRoZSBkYXRhIGFuZCB0ZXh0IGlu Zm8KLS0gICAgIHNvIHdlIGNhbiBwcmludCBpdCBhdCB0aGUgYm90dG9tIG9mIHRoZSBsb29wLiAg Ki8KLS0gIGZvciAobWFwaW5mb19wID0gbWFwaW5mb3MsIGkgPSAwOyBpIDwgbnVtOyBpKyssIG1h cGluZm9fcCsrKQotLSAgICB7Ci0tICAgICAgaWYgKCEobWFwaW5mb19wLT5mbGFncyAmIGZsYWdz KSkKLS0JbWFwaW5mb19wLT5pbm8gPSAwOwotLQotLSAgICAgIGlmIChtYXBpbmZvX3AtPmlubyA9 PSAwKQkvKiBBbHJlYWR5IHZpc2l0ZWQuICAqLwotLQljb250aW51ZTsKLS0KLS0gICAgICBtYXAu aW5mby52YWRkciA9IG1hcGluZm9fcC0+dmFkZHI7Ci0tCi0tICAgICAgZXJyID0gZGV2Y3RsIChj dGxfZmQsIERDTURfUFJPQ19NQVBERUJVRywgJm1hcCwgc2l6ZW9mIChtYXApLCAwKTsKLS0gICAg ICBpZiAoZXJyICE9IEVPSykKLS0JY29udGludWU7Ci0tCi0tICAgICAgbWVtc2V0ICgmcHJpbnRt ZSwgMCwgc2l6ZW9mIHByaW50bWUpOwotLSAgICAgIHByaW50bWUuZGV2ID0gbWFwaW5mb19wLT5k ZXY7Ci0tICAgICAgcHJpbnRtZS5pbm8gPSBtYXBpbmZvX3AtPmlubzsKLS0gICAgICBwcmludG1l LnRleHQuYWRkciA9IG1hcGluZm9fcC0+dmFkZHI7Ci0tICAgICAgcHJpbnRtZS50ZXh0LnNpemUg PSBtYXBpbmZvX3AtPnNpemU7Ci0tICAgICAgcHJpbnRtZS50ZXh0LmZsYWdzID0gbWFwaW5mb19w LT5mbGFnczsKLS0gICAgICBwcmludG1lLnRleHQub2Zmc2V0ID0gbWFwaW5mb19wLT5vZmZzZXQ7 Ci0tICAgICAgcHJpbnRtZS50ZXh0LmRlYnVnX3ZhZGRyID0gbWFwLmluZm8udmFkZHI7Ci0tICAg ICAgc3RyY3B5IChwcmludG1lLm5hbWUsIG1hcC5pbmZvLnBhdGgpOwotLQotLSAgICAgIC8qIENo ZWNrIGZvciBtYXRjaGluZyBkYXRhLiAgKi8KLS0gICAgICBmb3IgKG1hcGluZm9fcDIgPSBtYXBp bmZvcywgaiA9IDA7IGogPCBudW07IGorKywgbWFwaW5mb19wMisrKQotLQl7Ci0tCSAgaWYgKG1h cGluZm9fcDItPnZhZGRyICE9IG1hcGluZm9fcC0+dmFkZHIKLS0JICAgICAgJiYgbWFwaW5mb19w Mi0+aW5vID09IG1hcGluZm9fcC0+aW5vCi0tCSAgICAgICYmIG1hcGluZm9fcDItPmRldiA9PSBt YXBpbmZvX3AtPmRldikKLS0JICAgIHsKLS0JICAgICAgbWFwLmluZm8udmFkZHIgPSBtYXBpbmZv X3AyLT52YWRkcjsKLS0JICAgICAgZXJyID0KLS0JCWRldmN0bCAoY3RsX2ZkLCBEQ01EX1BST0Nf TUFQREVCVUcsICZtYXAsIHNpemVvZiAobWFwKSwgMCk7Ci0tCSAgICAgIGlmIChlcnIgIT0gRU9L KQotLQkJY29udGludWU7Ci0tCi0tCSAgICAgIGlmIChzdHJjbXAgKG1hcC5pbmZvLnBhdGgsIHBy aW50bWUubmFtZSkpCi0tCQljb250aW51ZTsKLS0KLS0JICAgICAgLyogTG93ZXIgZGVidWdfdmFk ZHIgaXMgYWx3YXlzIHRleHQsIGlmIG5lY2Vzc2FyeSwgc3dhcC4gICovCi0tCSAgICAgIGlmICgo aW50KSBtYXAuaW5mby52YWRkciA8IChpbnQpIHByaW50bWUudGV4dC5kZWJ1Z192YWRkcikKLS0J CXsKLS0JCSAgbWVtY3B5ICgmKHByaW50bWUuZGF0YSksICYocHJpbnRtZS50ZXh0KSwKLS0JCQkg IHNpemVvZiAocHJpbnRtZS5kYXRhKSk7Ci0tCQkgIHByaW50bWUudGV4dC5hZGRyID0gbWFwaW5m b19wMi0+dmFkZHI7Ci0tCQkgIHByaW50bWUudGV4dC5zaXplID0gbWFwaW5mb19wMi0+c2l6ZTsK LS0JCSAgcHJpbnRtZS50ZXh0LmZsYWdzID0gbWFwaW5mb19wMi0+ZmxhZ3M7Ci0tCQkgIHByaW50 bWUudGV4dC5vZmZzZXQgPSBtYXBpbmZvX3AyLT5vZmZzZXQ7Ci0tCQkgIHByaW50bWUudGV4dC5k ZWJ1Z192YWRkciA9IG1hcC5pbmZvLnZhZGRyOwotLQkJfQotLQkgICAgICBlbHNlCi0tCQl7Ci0t CQkgIHByaW50bWUuZGF0YS5hZGRyID0gbWFwaW5mb19wMi0+dmFkZHI7Ci0tCQkgIHByaW50bWUu ZGF0YS5zaXplID0gbWFwaW5mb19wMi0+c2l6ZTsKLS0JCSAgcHJpbnRtZS5kYXRhLmZsYWdzID0g bWFwaW5mb19wMi0+ZmxhZ3M7Ci0tCQkgIHByaW50bWUuZGF0YS5vZmZzZXQgPSBtYXBpbmZvX3Ay LT5vZmZzZXQ7Ci0tCQkgIHByaW50bWUuZGF0YS5kZWJ1Z192YWRkciA9IG1hcC5pbmZvLnZhZGRy OwotLQkJfQotLQkgICAgICBtYXBpbmZvX3AyLT5pbm8gPSAwOwotLQkgICAgfQotLQl9Ci0tICAg ICAgbWFwaW5mb19wLT5pbm8gPSAwOwotLQotLSAgICAgIGdkYl9wcmludGYgKCIlc1xuIiwgcHJp bnRtZS5uYW1lKTsKLS0gICAgICBnZGJfcHJpbnRmICgiXHR0ZXh0PSUwOHggYnl0ZXMgQCAweCUw OHhcbiIsIHByaW50bWUudGV4dC5zaXplLAotLQkJICBwcmludG1lLnRleHQuYWRkcik7Ci0tICAg ICAgZ2RiX3ByaW50ZiAoIlx0XHRmbGFncz0lMDh4XG4iLCBwcmludG1lLnRleHQuZmxhZ3MpOwot LSAgICAgIGdkYl9wcmludGYgKCJcdFx0ZGVidWc9JTA4eFxuIiwgcHJpbnRtZS50ZXh0LmRlYnVn X3ZhZGRyKTsKLS0gICAgICBnZGJfcHJpbnRmICgiXHRcdG9mZnNldD0lc1xuIiwgcGhleCAocHJp bnRtZS50ZXh0Lm9mZnNldCwgOCkpOwotLSAgICAgIGlmIChwcmludG1lLmRhdGEuc2l6ZSkKLS0J ewotLQkgIGdkYl9wcmludGYgKCJcdGRhdGE9JTA4eCBieXRlcyBAIDB4JTA4eFxuIiwgcHJpbnRt ZS5kYXRhLnNpemUsCi0tCQkgICAgICBwcmludG1lLmRhdGEuYWRkcik7Ci0tCSAgZ2RiX3ByaW50 ZiAoIlx0XHRmbGFncz0lMDh4XG4iLCBwcmludG1lLmRhdGEuZmxhZ3MpOwotLQkgIGdkYl9wcmlu dGYgKCJcdFx0ZGVidWc9JTA4eFxuIiwgcHJpbnRtZS5kYXRhLmRlYnVnX3ZhZGRyKTsKLS0JICBn ZGJfcHJpbnRmICgiXHRcdG9mZnNldD0lc1xuIiwgcGhleCAocHJpbnRtZS5kYXRhLm9mZnNldCwg OCkpOwotLQl9Ci0tICAgICAgZ2RiX3ByaW50ZiAoIlx0ZGV2PTB4JXhcbiIsIHByaW50bWUuZGV2 KTsKLS0gICAgICBnZGJfcHJpbnRmICgiXHRpbm89MHgleFxuIiwgKHVuc2lnbmVkIGludCkgcHJp bnRtZS5pbm8pOwotLSAgICB9Ci0tICB4ZnJlZSAobWFwaW5mb3MpOwotLSAgcmV0dXJuOwotLX0K LS0KLS0vKiBQcmludCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB3ZSdyZSBhY2Nlc3Np bmcuICAqLwotLXZvaWQKLS1udG9fcHJvY2ZzX3RhcmdldDo6ZmlsZXNfaW5mbyAoKQotLXsKLS0g IHN0cnVjdCBpbmZlcmlvciAqaW5mID0gY3VycmVudF9pbmZlcmlvciAoKTsKLS0KLS0gIGdkYl9w cmludGYgKCJcdFVzaW5nIHRoZSBydW5uaW5nIGltYWdlIG9mICVzICVzIHZpYSAlcy5cbiIsCi0t CSAgICAgIGluZi0+YXR0YWNoX2ZsYWcgPyAiYXR0YWNoZWQiIDogImNoaWxkIiwKLS0JICAgICAg dGFyZ2V0X3BpZF90b19zdHIgKHB0aWRfdCAoaW5mLT5waWQpKS5jX3N0ciAoKSwKLS0JICAgICAg KG5vZGVzdHIgIT0gTlVMTCkgPyBub2Rlc3RyIDogImxvY2FsIG5vZGUiKTsKLS19Ci0tCi0tLyog VGFyZ2V0IHRvX3BpZF90b19leGVjX2ZpbGUgaW1wbGVtZW50YXRpb24uICAqLwotLQotLWNvbnN0 IGNoYXIgKgotLW50b19wcm9jZnNfdGFyZ2V0OjpwaWRfdG9fZXhlY19maWxlIChjb25zdCBpbnQg cGlkKQotLXsKLS0gIGludCBwcm9jX2ZkOwotLSAgc3RhdGljIGNoYXIgcHJvY19wYXRoW1BBVEhf TUFYXTsKLS0gIHNzaXplX3QgcmQ7Ci0tCi0tICAvKiBSZWFkIGV4ZSBmaWxlIG5hbWUuICAqLwot LSAgc25wcmludGYgKHByb2NfcGF0aCwgc2l6ZW9mIChwcm9jX3BhdGgpLCAiJXMvcHJvYy8lZC9l eGVmaWxlIiwKLS0JICAgIChub2Rlc3RyICE9IE5VTEwpID8gbm9kZXN0ciA6ICIiLCBwaWQpOwot LSAgcHJvY19mZCA9IG9wZW4gKHByb2NfcGF0aCwgT19SRE9OTFkpOwotLSAgaWYgKHByb2NfZmQg PT0gLTEpCi0tICAgIHJldHVybiBOVUxMOwotLQotLSAgcmQgPSByZWFkIChwcm9jX2ZkLCBwcm9j X3BhdGgsIHNpemVvZiAocHJvY19wYXRoKSAtIDEpOwotLSAgY2xvc2UgKHByb2NfZmQpOwotLSAg aWYgKHJkIDw9IDApCi0tICAgIHsKLS0gICAgICBwcm9jX3BhdGhbMF0gPSAnXDAnOwotLSAgICAg IHJldHVybiBOVUxMOwotLSAgICB9Ci0tICBwcm9jX3BhdGhbcmRdID0gJ1wwJzsKLS0gIHJldHVy biBwcm9jX3BhdGg7Ci0tfQotLQotLS8qIEF0dGFjaCB0byBwcm9jZXNzIFBJRCwgdGhlbiBpbml0 aWFsaXplIGZvciBkZWJ1Z2dpbmcgaXQuICAqLwotLXZvaWQKLS1udG9fcHJvY2ZzX3RhcmdldDo6 YXR0YWNoIChjb25zdCBjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCi0tewotLSAgaW50IHBpZDsK LS0gIHN0cnVjdCBpbmZlcmlvciAqaW5mOwotLQotLSAgcGlkID0gcGFyc2VfcGlkX3RvX2F0dGFj aCAoYXJncyk7Ci0tCi0tICBpZiAocGlkID09IGdldHBpZCAoKSkKLS0gICAgZXJyb3IgKF8oIkF0 dGFjaGluZyBHREIgdG8gaXRzZWxmIGlzIG5vdCBhIGdvb2QgaWRlYS4uLiIpKTsKLS0KLS0gIHRh cmdldF9hbm5vdW5jZV9hdHRhY2ggKGZyb21fdHR5LCBwaWQpOwotLQotLSAgcHRpZF90IHB0aWQg PSBkb19hdHRhY2ggKHB0aWRfdCAocGlkKSk7Ci0tICBpbmYgPSBjdXJyZW50X2luZmVyaW9yICgp OwotLSAgaW5mZXJpb3JfYXBwZWFyZWQgKGluZiwgcGlkKTsKLS0gIGluZi0+YXR0YWNoX2ZsYWcg PSB0cnVlOwotLQotLSAgaWYgKCFpbmYtPnRhcmdldF9pc19wdXNoZWQgKG9wcykpCi0tICAgIGlu Zi0+cHVzaF90YXJnZXQgKG9wcyk7Ci0tCi0tICB1cGRhdGVfdGhyZWFkX2xpc3QgKCk7Ci0tCi0t ICBzd2l0Y2hfdG9fdGhyZWFkICh0aGlzLT5maW5kX3RocmVhZCAocHRpZCkpOwotLX0KLS0KLS12 b2lkCi0tbnRvX3Byb2Nmc190YXJnZXQ6OnBvc3RfYXR0YWNoIChwaWRfdCBwaWQpCi0tewotLSAg aWYgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+ZXhlY19iZmQgKCkpCi0tICAgIHNvbGliX2NyZWF0 ZV9pbmZlcmlvcl9ob29rICgwKTsKLS19Ci0tCi0tc3RhdGljIHB0aWRfdAotLWRvX2F0dGFjaCAo cHRpZF90IHB0aWQpCi0tewotLSAgcHJvY2ZzX3N0YXR1cyBzdGF0dXM7Ci0tICBzdHJ1Y3Qgc2ln ZXZlbnQgZXZlbnQ7Ci0tICBjaGFyIHBhdGhbUEFUSF9NQVhdOwotLQotLSAgc25wcmludGYgKHBh dGgsIFBBVEhfTUFYIC0gMSwgIiVzJXMvJWQvYXMiLAotLQkgICAgKG5vZGVzdHIgIT0gTlVMTCkg PyBub2Rlc3RyIDogIiIsICIvcHJvYyIsIHB0aWQucGlkICgpKTsKLS0gIGN0bF9mZCA9IG9wZW4g KHBhdGgsIE9fUkRXUik7Ci0tICBpZiAoY3RsX2ZkID09IC0xKQotLSAgICBlcnJvciAoXygiQ291 bGRuJ3Qgb3BlbiBwcm9jIGZpbGUgJXMsIGVycm9yICVkICglcykiKSwgcGF0aCwgZXJybm8sCi0t CSAgIHNhZmVfc3RyZXJyb3IgKGVycm5vKSk7Ci0tICBpZiAoZGV2Y3RsIChjdGxfZmQsIERDTURf UFJPQ19TVE9QLCAmc3RhdHVzLCBzaXplb2YgKHN0YXR1cyksIDApICE9IEVPSykKLS0gICAgZXJy b3IgKF8oIkNvdWxkbid0IHN0b3AgcHJvY2VzcyIpKTsKLS0KLS0gIC8qIERlZmluZSBhIHNpZ2V2 ZW50IGZvciBwcm9jZXNzIHN0b3BwZWQgbm90aWZpY2F0aW9uLiAgKi8KLS0gIGV2ZW50LnNpZ2V2 X25vdGlmeSA9IFNJR0VWX1NJR05BTF9USFJFQUQ7Ci0tICBldmVudC5zaWdldl9zaWdubyA9IFNJ R1VTUjE7Ci0tICBldmVudC5zaWdldl9jb2RlID0gMDsKLS0gIGV2ZW50LnNpZ2V2X3ZhbHVlLnNp dmFsX3B0ciA9IE5VTEw7Ci0tICBldmVudC5zaWdldl9wcmlvcml0eSA9IC0xOwotLSAgZGV2Y3Rs IChjdGxfZmQsIERDTURfUFJPQ19FVkVOVCwgJmV2ZW50LCBzaXplb2YgKGV2ZW50KSwgMCk7Ci0t Ci0tICBpZiAoZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19TVEFUVVMsICZzdGF0dXMsIHNpemVv ZiAoc3RhdHVzKSwgMCkgPT0gRU9LCi0tICAgICAgJiYgc3RhdHVzLmZsYWdzICYgX0RFQlVHX0ZM QUdfU1RPUFBFRCkKLS0gICAgU2lnbmFsS2lsbCAobnRvX25vZGUgKCksIHB0aWQucGlkICgpLCAw LCBTSUdDT05ULCAwLCAwKTsKLS0gIG50b19pbml0X3NvbGliX2Fic29sdXRlX3ByZWZpeCAoKTsK LS0gIHJldHVybiBwdGlkX3QgKHB0aWQucGlkICgpLCAwLCBzdGF0dXMudGlkKTsKLS19Ci0tCi0t LyogQXNrIHRoZSB1c2VyIHdoYXQgdG8gZG8gd2hlbiBhbiBpbnRlcnJ1cHQgaXMgcmVjZWl2ZWQu ICAqLwotLXN0YXRpYyB2b2lkCi0taW50ZXJydXB0X3F1ZXJ5ICh2b2lkKQotLXsKLS0gIGlmIChx dWVyeSAoXygiSW50ZXJydXB0ZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIHByb2dyYW0uXG5cCi0t R2l2ZSB1cCAoYW5kIHN0b3AgZGVidWdnaW5nIGl0KT8gIikpKQotLSAgICB7Ci0tICAgICAgdGFy Z2V0X21vdXJuX2luZmVyaW9yIChpbmZlcmlvcl9wdGlkKTsKLS0gICAgICBxdWl0ICgpOwotLSAg ICB9Ci0tfQotLQotLS8qIFRoZSB1c2VyIHR5cGVkIF5DIHR3aWNlLiAgKi8KLS1zdGF0aWMgdm9p ZAotLW50b19oYW5kbGVfc2lnaW50X3R3aWNlIChpbnQgc2lnbm8pCi0tewotLSAgc2lnbmFsIChz aWdubywgb2Z1bmMpOwotLSAgaW50ZXJydXB0X3F1ZXJ5ICgpOwotLSAgc2lnbmFsIChzaWdubywg bnRvX2hhbmRsZV9zaWdpbnRfdHdpY2UpOwotLX0KLS0KLS1zdGF0aWMgdm9pZAotLW50b19oYW5k bGVfc2lnaW50IChpbnQgc2lnbm8pCi0tewotLSAgLyogSWYgdGhpcyBkb2Vzbid0IHdvcmssIHRy eSBtb3JlIHNldmVyZSBzdGVwcy4gICovCi0tICBzaWduYWwgKHNpZ25vLCBudG9faGFuZGxlX3Np Z2ludF90d2ljZSk7Ci0tCi0tICB0YXJnZXRfaW50ZXJydXB0ICgpOwotLX0KLS0KLS1zcHRpZF90 Ci0tbnRvX3Byb2Nmc190YXJnZXQ6OndhaXQgKHB0aWRfdCBwdGlkLCBzdHJ1Y3QgdGFyZ2V0X3dh aXRzdGF0dXMgKm91cnN0YXR1cywKLS0JCQkgdGFyZ2V0X3dhaXRfZmxhZ3Mgb3B0aW9ucykKLS17 Ci0tICBzaWdzZXRfdCBzZXQ7Ci0tICBzaWdpbmZvX3QgaW5mbzsKLS0gIHByb2Nmc19zdGF0dXMg c3RhdHVzOwotLSAgc3RhdGljIGludCBleGl0X3NpZ25vID0gMDsJLyogVG8gdHJhY2sgc2lnbmFs cyB0aGF0IGNhdXNlIHRlcm1pbmF0aW9uLiAgKi8KLS0KLS0gIG91cnN0YXR1cy0+c2V0X3NwdXJp b3VzICgpOwotLQotLSAgaWYgKGluZmVyaW9yX3B0aWQgPT0gbnVsbF9wdGlkKQotLSAgICB7Ci0t ICAgICAgb3Vyc3RhdHVzLT5zZXRfc3RvcHBlZCAoR0RCX1NJR05BTF8wKTsKLS0gICAgICBleGl0 X3NpZ25vID0gMDsKLS0gICAgICByZXR1cm4gbnVsbF9wdGlkOwotLSAgICB9Ci0tCi0tICBzaWdl bXB0eXNldCAoJnNldCk7Ci0tICBzaWdhZGRzZXQgKCZzZXQsIFNJR1VTUjEpOwotLQotLSAgZGV2 Y3RsIChjdGxfZmQsIERDTURfUFJPQ19TVEFUVVMsICZzdGF0dXMsIHNpemVvZiAoc3RhdHVzKSwg MCk7Ci0tICB3aGlsZSAoIShzdGF0dXMuZmxhZ3MgJiBfREVCVUdfRkxBR19JU1RPUCkpCi0tICAg IHsKLS0gICAgICBvZnVuYyA9IHNpZ25hbCAoU0lHSU5ULCBudG9faGFuZGxlX3NpZ2ludCk7Ci0t ICAgICAgc2lnd2FpdGluZm8gKCZzZXQsICZpbmZvKTsKLS0gICAgICBzaWduYWwgKFNJR0lOVCwg b2Z1bmMpOwotLSAgICAgIGRldmN0bCAoY3RsX2ZkLCBEQ01EX1BST0NfU1RBVFVTLCAmc3RhdHVz LCBzaXplb2YgKHN0YXR1cyksIDApOwotLSAgICB9Ci0tCi0tICBudG9faW5mZXJpb3JfZGF0YSAo TlVMTCktPnN0b3BwZWRfZmxhZ3MgPSBzdGF0dXMuZmxhZ3M7Ci0tICBudG9faW5mZXJpb3JfZGF0 YSAoTlVMTCktPnN0b3BwZWRfcGMgPSBzdGF0dXMuaXA7Ci0tCi0tICBpZiAoc3RhdHVzLmZsYWdz ICYgX0RFQlVHX0ZMQUdfU1NURVApCi0tICAgIG91cnN0YXR1cy0+c2V0X3N0b3BwZWQgKEdEQl9T SUdOQUxfVFJBUCk7Ci0tICAvKiBXYXMgaXQgYSBicmVha3BvaW50PyAgKi8KLS0gIGVsc2UgaWYg KHN0YXR1cy5mbGFncyAmIF9ERUJVR19GTEFHX1RSQUNFKQotLSAgICBvdXJzdGF0dXMtPnNldF9z dG9wcGVkIChHREJfU0lHTkFMX1RSQVApOwotLSAgZWxzZSBpZiAoc3RhdHVzLmZsYWdzICYgX0RF QlVHX0ZMQUdfSVNUT1ApCi0tICAgIHsKLS0gICAgICBzd2l0Y2ggKHN0YXR1cy53aHkpCi0tCXsK LS0JY2FzZSBfREVCVUdfV0hZX1NJR05BTExFRDoKLS0JICBvdXJzdGF0dXMtPnNldF9zdG9wcGVk IChnZGJfc2lnbmFsX2Zyb21faG9zdCAoc3RhdHVzLmluZm8uc2lfc2lnbm8pKTsKLS0JICBleGl0 X3NpZ25vID0gMDsKLS0JICBicmVhazsKLS0JY2FzZSBfREVCVUdfV0hZX0ZBVUxURUQ6Ci0tCSAg aWYgKHN0YXR1cy5pbmZvLnNpX3NpZ25vID09IFNJR1RSQVApCi0tCSAgICB7Ci0tCSAgICAgIG91 cnN0YXR1cy0+c2V0X3N0b3BwZWQgKDApOwotLQkgICAgICBleGl0X3NpZ25vID0gMDsKLS0JICAg IH0KLS0JICBlbHNlCi0tCSAgICB7Ci0tCSAgICAgIG91cnN0YXR1cy0+c2V0X3N0b3BwZWQKLS0J CShnZGJfc2lnbmFsX2Zyb21faG9zdCAoc3RhdHVzLmluZm8uc2lfc2lnbm8pKTsKLS0JICAgICAg ZXhpdF9zaWdubyA9IG91cnN0YXR1cy0+c2lnICgpOwotLQkgICAgfQotLQkgIGJyZWFrOwotLQot LQljYXNlIF9ERUJVR19XSFlfVEVSTUlOQVRFRDoKLS0JICB7Ci0tCSAgICBpbnQgd2FpdHZhbCA9 IDA7Ci0tCi0tCSAgICB3YWl0cGlkIChpbmZlcmlvcl9wdGlkLnBpZCAoKSwgJndhaXR2YWwsIFdO T0hBTkcpOwotLQkgICAgaWYgKGV4aXRfc2lnbm8pCi0tCSAgICAgIHsKLS0JCS8qIEFibm9ybWFs IGRlYXRoLiAgKi8KLS0JCW91cnN0YXR1cy0+c2V0X3NpZ25hbGxlZCAoZXhpdF9zaWdubyk7Ci0t CSAgICAgIH0KLS0JICAgIGVsc2UKLS0JICAgICAgewotLQkJLyogTm9ybWFsIGRlYXRoLiAgKi8K LS0JCW91cnN0YXR1cy0+c2V0X2V4aXRlZCAoV0VYSVRTVEFUVVMgKHdhaXR2YWwpKTsKLS0JICAg ICAgfQotLQkgICAgZXhpdF9zaWdubyA9IDA7Ci0tCSAgICBicmVhazsKLS0JICB9Ci0tCi0tCWNh c2UgX0RFQlVHX1dIWV9SRVFVRVNURUQ6Ci0tCSAgLyogV2UgYXJlIGFzc3VtaW5nIGEgcmVxdWVz dGVkIHN0b3AgaXMgZHVlIHRvIGEgU0lHSU5ULiAgKi8KLS0JICBvdXJzdGF0dXMtPnNldF9zdG9w cGVkIChHREJfU0lHTkFMX0lOVCk7Ci0tCSAgZXhpdF9zaWdubyA9IDA7Ci0tCSAgYnJlYWs7Ci0t CX0KLS0gICAgfQotLQotLSAgcmV0dXJuIHB0aWRfdCAoc3RhdHVzLnBpZCwgMCwgc3RhdHVzLnRp ZCk7Ci0tfQotLQotLS8qIFJlYWQgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIHRoZSBpbmZlcmlvcidz IHJlZ2lzdGVycywgYm90aCB0aGUKLS0gICBnZW5lcmFsIHJlZ2lzdGVyIHNldCBhbmQgZmxvYXRp bmcgcG9pbnQgcmVnaXN0ZXJzIChpZiBzdXBwb3J0ZWQpCi0tICAgYW5kIHVwZGF0ZSBnZGIncyBp ZGVhIG9mIHRoZWlyIGN1cnJlbnQgdmFsdWVzLiAgKi8KLS12b2lkCi0tbnRvX3Byb2Nmc190YXJn ZXQ6OmZldGNoX3JlZ2lzdGVycyAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwgaW50IHJlZ25v KQotLXsKLS0gIHVuaW9uCi0tICB7Ci0tICAgIHByb2Nmc19ncmVnIGdyZWc7Ci0tICAgIHByb2Nm c19mcHJlZyBmcHJlZzsKLS0gICAgcHJvY2ZzX2FsdHJlZyBhbHRyZWc7Ci0tICB9Ci0tICByZWc7 Ci0tICBpbnQgcmVnc2l6ZTsKLS0KLS0gIHByb2Nmc19zZXRfdGhyZWFkIChyZWdjYWNoZS0+cHRp ZCAoKSk7Ci0tICBpZiAoZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19HRVRHUkVHLCAmcmVnLCBz aXplb2YgKHJlZyksICZyZWdzaXplKSA9PSBFT0spCi0tICAgIG50b19zdXBwbHlfZ3JlZ3NldCAo cmVnY2FjaGUsIChjaGFyICopICZyZWcuZ3JlZyk7Ci0tICBpZiAoZGV2Y3RsIChjdGxfZmQsIERD TURfUFJPQ19HRVRGUFJFRywgJnJlZywgc2l6ZW9mIChyZWcpLCAmcmVnc2l6ZSkKLS0gICAgICA9 PSBFT0spCi0tICAgIG50b19zdXBwbHlfZnByZWdzZXQgKHJlZ2NhY2hlLCAoY2hhciAqKSAmcmVn LmZwcmVnKTsKLS0gIGlmIChkZXZjdGwgKGN0bF9mZCwgRENNRF9QUk9DX0dFVEFMVFJFRywgJnJl Zywgc2l6ZW9mIChyZWcpLCAmcmVnc2l6ZSkKLS0gICAgICA9PSBFT0spCi0tICAgIG50b19zdXBw bHlfYWx0cmVnc2V0IChyZWdjYWNoZSwgKGNoYXIgKikgJnJlZy5hbHRyZWcpOwotLX0KLS0KLS0v KiBIZWxwZXIgZm9yIHByb2Nmc194ZmVyX3BhcnRpYWwgdGhhdCBoYW5kbGVzIG1lbW9yeSB0cmFu c2ZlcnMuCi0tICAgQXJndW1lbnRzIGFyZSBsaWtlIHRhcmdldF94ZmVyX3BhcnRpYWwuICAqLwot LQotLXN0YXRpYyBlbnVtIHRhcmdldF94ZmVyX3N0YXR1cwotLXByb2Nmc194ZmVyX21lbW9yeSAo Z2RiX2J5dGUgKnJlYWRidWYsIGNvbnN0IGdkYl9ieXRlICp3cml0ZWJ1ZiwKLS0JCSAgICBVTE9O R0VTVCBtZW1hZGRyLCBVTE9OR0VTVCBsZW4sIFVMT05HRVNUICp4ZmVyZWRfbGVuKQotLXsKLS0g IGludCBuYnl0ZXM7Ci0tCi0tICBpZiAobHNlZWsgKGN0bF9mZCwgKG9mZl90KSBtZW1hZGRyLCBT RUVLX1NFVCkgIT0gKG9mZl90KSBtZW1hZGRyKQotLSAgICByZXR1cm4gVEFSR0VUX1hGRVJfRV9J TzsKLS0KLS0gIGlmICh3cml0ZWJ1ZiAhPSBOVUxMKQotLSAgICBuYnl0ZXMgPSB3cml0ZSAoY3Rs X2ZkLCB3cml0ZWJ1ZiwgbGVuKTsKLS0gIGVsc2UKLS0gICAgbmJ5dGVzID0gcmVhZCAoY3RsX2Zk LCByZWFkYnVmLCBsZW4pOwotLSAgaWYgKG5ieXRlcyA8PSAwKQotLSAgICByZXR1cm4gVEFSR0VU X1hGRVJfRV9JTzsKLS0gICp4ZmVyZWRfbGVuID0gbmJ5dGVzOwotLSAgcmV0dXJuIFRBUkdFVF9Y RkVSX09LOwotLX0KLS0KLS0vKiBUYXJnZXQgdG9feGZlcl9wYXJ0aWFsIGltcGxlbWVudGF0aW9u LiAgKi8KLS0KLS1lbnVtIHRhcmdldF94ZmVyX3N0YXR1cwotLW50b19wcm9jZnNfdGFyZ2V0Ojp4 ZmVyX3BhcnRpYWwgKGVudW0gdGFyZ2V0X29iamVjdCBvYmplY3QsCi0tCQkJCSBjb25zdCBjaGFy ICphbm5leCwgZ2RiX2J5dGUgKnJlYWRidWYsCi0tCQkJCSBjb25zdCBnZGJfYnl0ZSAqd3JpdGVi dWYsIFVMT05HRVNUIG9mZnNldCwKLS0JCQkJIFVMT05HRVNUIGxlbiwgVUxPTkdFU1QgKnhmZXJl ZF9sZW4pCi0tewotLSAgc3dpdGNoIChvYmplY3QpCi0tICAgIHsKLS0gICAgY2FzZSBUQVJHRVRf T0JKRUNUX01FTU9SWToKLS0gICAgICByZXR1cm4gcHJvY2ZzX3hmZXJfbWVtb3J5IChyZWFkYnVm LCB3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4sIHhmZXJlZF9sZW4pOwotLSAgICBjYXNlIFRBUkdFVF9P QkpFQ1RfQVVYVjoKLS0gICAgICBpZiAocmVhZGJ1ZiAhPSBOVUxMKQotLQl7Ci0tCSAgaW50IGVy cjsKLS0JICBDT1JFX0FERFIgaW5pdGlhbF9zdGFjazsKLS0JICBkZWJ1Z19wcm9jZXNzX3QgcHJv Y2luZm87Ci0tCSAgLyogRm9yIDMyLWJpdCBhcmNoaXRlY3R1cmUsIHNpemUgb2YgYXV4dl90IGlz IDggYnl0ZXMuICAqLwotLQkgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplb2ZfYXV4dl90ID0gc2l6 ZW9mIChhdXh2X3QpOwotLQkgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplb2ZfdGVtcGJ1ZiA9IDIw ICogc2l6ZW9mX2F1eHZfdDsKLS0JICBpbnQgdGVtcHJlYWQ7Ci0tCSAgZ2RiX2J5dGUgKmNvbnN0 IHRlbXBidWYgPSBhbGxvY2EgKHNpemVvZl90ZW1wYnVmKTsKLS0KLS0JICBpZiAodGVtcGJ1ZiA9 PSBOVUxMKQotLQkgICAgcmV0dXJuIFRBUkdFVF9YRkVSX0VfSU87Ci0tCi0tCSAgZXJyID0gZGV2 Y3RsIChjdGxfZmQsIERDTURfUFJPQ19JTkZPLCAmcHJvY2luZm8sCi0tCQkJc2l6ZW9mIHByb2Np bmZvLCAwKTsKLS0JICBpZiAoZXJyICE9IEVPSykKLS0JICAgIHJldHVybiBUQVJHRVRfWEZFUl9F X0lPOwotLQotLQkgIGluaXRpYWxfc3RhY2sgPSBwcm9jaW5mby5pbml0aWFsX3N0YWNrOwotLQot LQkgIC8qIHByb2NmcyBpcyBhbHdheXMgJ3NlbGYtaG9zdGVkJywgbm8gYnl0ZS1vcmRlciBtYW5p cHVsYXRpb24uICAqLwotLQkgIHRlbXByZWFkID0gbnRvX3JlYWRfYXV4dl9mcm9tX2luaXRpYWxf c3RhY2sgKGluaXRpYWxfc3RhY2ssIHRlbXBidWYsCi0tCQkJCQkJICAgICAgIHNpemVvZl90ZW1w YnVmLAotLQkJCQkJCSAgICAgICBzaXplb2YgKGF1eHZfdCkpOwotLQkgIHRlbXByZWFkID0gc3Rk OjptaW4gKHRlbXByZWFkLCBsZW4pIC0gb2Zmc2V0OwotLQkgIG1lbWNweSAocmVhZGJ1ZiwgdGVt cGJ1ZiArIG9mZnNldCwgdGVtcHJlYWQpOwotLQkgICp4ZmVyZWRfbGVuID0gdGVtcHJlYWQ7Ci0t CSAgcmV0dXJuIHRlbXByZWFkID8gVEFSR0VUX1hGRVJfT0sgOiBUQVJHRVRfWEZFUl9FT0Y7Ci0t CX0KLS0JLyogRmFsbHRocnUgKi8KLS0gICAgZGVmYXVsdDoKLS0gICAgICByZXR1cm4gdGhpcy0+ YmVuZWF0aCAoKS0+eGZlcl9wYXJ0aWFsIChvYmplY3QsIGFubmV4LAotLQkJCQkJICAgICByZWFk YnVmLCB3cml0ZWJ1Ziwgb2Zmc2V0LCBsZW4sCi0tCQkJCQkgICAgIHhmZXJlZF9sZW4pOwotLSAg ICB9Ci0tfQotLQotLS8qIFRha2UgYSBwcm9ncmFtIHByZXZpb3VzbHkgYXR0YWNoZWQgdG8gYW5k IGRldGFjaGVzIGl0LgotLSAgIFRoZSBwcm9ncmFtIHJlc3VtZXMgZXhlY3V0aW9uIGFuZCB3aWxs IG5vIGxvbmdlciBzdG9wCi0tICAgb24gc2lnbmFscywgZXRjLiAgV2UnZCBiZXR0ZXIgbm90IGhh dmUgbGVmdCBhbnkgYnJlYWtwb2ludHMKLS0gICBpbiB0aGUgcHJvZ3JhbSBvciBpdCdsbCBkaWUg d2hlbiBpdCBoaXRzIG9uZS4gICovCi0tdm9pZAotLW50b19wcm9jZnNfdGFyZ2V0OjpkZXRhY2gg KGluZmVyaW9yICppbmYsIGludCBmcm9tX3R0eSkKLS17Ci0tICB0YXJnZXRfYW5ub3VuY2VfZGV0 YWNoICgpOwotLQotLSAgaWYgKHNpZ2duYWwpCi0tICAgIFNpZ25hbEtpbGwgKG50b19ub2RlICgp LCBpbmYtPnBpZCwgMCwgMCwgMCwgMCk7Ci0tCi0tICBjbG9zZSAoY3RsX2ZkKTsKLS0gIGN0bF9m ZCA9IC0xOwotLQotLSAgc3dpdGNoX3RvX25vX3RocmVhZCAoKTsKLS0gIGRldGFjaF9pbmZlcmlv ciAoaW5mLT5waWQpOwotLSAgaW5pdF90aHJlYWRfbGlzdCAoKTsKLS0gIGluZl9jaGlsZF9tYXli ZV91bnB1c2hfdGFyZ2V0IChvcHMpOwotLX0KLS0KLS1zdGF0aWMgaW50Ci0tcHJvY2ZzX2JyZWFr cG9pbnQgKENPUkVfQUREUiBhZGRyLCBpbnQgdHlwZSwgaW50IHNpemUpCi0tewotLSAgcHJvY2Zz X2JyZWFrIGJyazsKLS0KLS0gIGJyay50eXBlID0gdHlwZTsKLS0gIGJyay5hZGRyID0gYWRkcjsK LS0gIGJyay5zaXplID0gc2l6ZTsKLS0gIGVycm5vID0gZGV2Y3RsIChjdGxfZmQsIERDTURfUFJP Q19CUkVBSywgJmJyaywgc2l6ZW9mIChicmspLCAwKTsKLS0gIGlmIChlcnJubyAhPSBFT0spCi0t ICAgIHJldHVybiAxOwotLSAgcmV0dXJuIDA7Ci0tfQotLQotLWludAotLW50b19wcm9jZnNfdGFy Z2V0OjppbnNlcnRfYnJlYWtwb2ludCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCi0tCQkJCSAg ICAgIHN0cnVjdCBicF90YXJnZXRfaW5mbyAqYnBfdGd0KQotLXsKLS0gIGJwX3RndC0+cGxhY2Vk X2FkZHJlc3MgPSBicF90Z3QtPnJlcXN0ZF9hZGRyZXNzOwotLSAgcmV0dXJuIHByb2Nmc19icmVh a3BvaW50IChicF90Z3QtPnBsYWNlZF9hZGRyZXNzLCBfREVCVUdfQlJFQUtfRVhFQywgMCk7Ci0t fQotLQotLWludAotLW50b19wcm9jZnNfdGFyZ2V0OjpyZW1vdmVfYnJlYWtwb2ludCAoc3RydWN0 IGdkYmFyY2ggKmdkYmFyY2gsCi0tCQkJCSAgICAgIHN0cnVjdCBicF90YXJnZXRfaW5mbyAqYnBf dGd0LAotLQkJCQkgICAgICBlbnVtIHJlbW92ZV9icF9yZWFzb24gcmVhc29uKQotLXsKLS0gIHJl dHVybiBwcm9jZnNfYnJlYWtwb2ludCAoYnBfdGd0LT5wbGFjZWRfYWRkcmVzcywgX0RFQlVHX0JS RUFLX0VYRUMsIC0xKTsKLS19Ci0tCi0taW50Ci0tbnRvX3Byb2Nmc190YXJnZXQ6Omluc2VydF9o d19icmVha3BvaW50IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwKLS0JCQkJCSBzdHJ1Y3QgYnBf dGFyZ2V0X2luZm8gKmJwX3RndCkKLS17Ci0tICBicF90Z3QtPnBsYWNlZF9hZGRyZXNzID0gYnBf dGd0LT5yZXFzdGRfYWRkcmVzczsKLS0gIHJldHVybiBwcm9jZnNfYnJlYWtwb2ludCAoYnBfdGd0 LT5wbGFjZWRfYWRkcmVzcywKLS0JCQkgICAgX0RFQlVHX0JSRUFLX0VYRUMgfCBfREVCVUdfQlJF QUtfSFcsIDApOwotLX0KLS0KLS1pbnQKLS1udG9fcHJvY2ZzX3RhcmdldDo6cmVtb3ZlX2h3X2Jy ZWFrcG9pbnQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAotLQkJCQkJIHN0cnVjdCBicF90YXJn ZXRfaW5mbyAqYnBfdGd0KQotLXsKLS0gIHJldHVybiBwcm9jZnNfYnJlYWtwb2ludCAoYnBfdGd0 LT5wbGFjZWRfYWRkcmVzcywKLS0JCQkgICAgX0RFQlVHX0JSRUFLX0VYRUMgfCBfREVCVUdfQlJF QUtfSFcsIC0xKTsKLS19Ci0tCi0tdm9pZAotLW50b19wcm9jZnNfdGFyZ2V0OjpyZXN1bWUgKHB0 aWRfdCBwdGlkLCBpbnQgc3RlcCwgZW51bSBnZGJfc2lnbmFsIHNpZ25vKQotLXsKLS0gIGludCBz aWduYWxfdG9fcGFzczsKLS0gIHByb2Nmc19zdGF0dXMgc3RhdHVzOwotLSAgc2lnc2V0X3QgKnJ1 bl9mYXVsdCA9IChzaWdzZXRfdCAqKSAodm9pZCAqKSAmcnVuLmZhdWx0OwotLQotLSAgaWYgKGlu ZmVyaW9yX3B0aWQgPT0gbnVsbF9wdGlkKQotLSAgICByZXR1cm47Ci0tCi0tICBwcm9jZnNfc2V0 X3RocmVhZCAocHRpZCA9PSBtaW51c19vbmVfcHRpZCA/IGluZmVyaW9yX3B0aWQgOgotLQkJICAg ICBwdGlkKTsKLS0KLS0gIHJ1bi5mbGFncyA9IF9ERUJVR19SVU5fRkFVTFQgfCBfREVCVUdfUlVO X1RSQUNFOwotLSAgaWYgKHN0ZXApCi0tICAgIHJ1bi5mbGFncyB8PSBfREVCVUdfUlVOX1NURVA7 Ci0tCi0tICBzaWdlbXB0eXNldCAocnVuX2ZhdWx0KTsKLS0gIHNpZ2FkZHNldCAocnVuX2ZhdWx0 LCBGTFRCUFQpOwotLSAgc2lnYWRkc2V0IChydW5fZmF1bHQsIEZMVFRSQUNFKTsKLS0gIHNpZ2Fk ZHNldCAocnVuX2ZhdWx0LCBGTFRJTEwpOwotLSAgc2lnYWRkc2V0IChydW5fZmF1bHQsIEZMVFBS SVYpOwotLSAgc2lnYWRkc2V0IChydW5fZmF1bHQsIEZMVEJPVU5EUyk7Ci0tICBzaWdhZGRzZXQg KHJ1bl9mYXVsdCwgRkxUSU9WRik7Ci0tICBzaWdhZGRzZXQgKHJ1bl9mYXVsdCwgRkxUSVpESVYp OwotLSAgc2lnYWRkc2V0IChydW5fZmF1bHQsIEZMVEZQRSk7Ci0tICAvKiBQZXRlciBWIHdpbGwg YmUgY2hhbmdpbmcgdGhpcyBhdCBzb21lIHBvaW50LiAgKi8KLS0gIHNpZ2FkZHNldCAocnVuX2Zh dWx0LCBGTFRQQUdFKTsKLS0KLS0gIHJ1bi5mbGFncyB8PSBfREVCVUdfUlVOX0FSTTsKLS0KLS0g IHNpZ25hbF90b19wYXNzID0gZ2RiX3NpZ25hbF90b19ob3N0IChzaWdubyk7Ci0tCi0tICBpZiAo c2lnbmFsX3RvX3Bhc3MpCi0tICAgIHsKLS0gICAgICBkZXZjdGwgKGN0bF9mZCwgRENNRF9QUk9D X1NUQVRVUywgJnN0YXR1cywgc2l6ZW9mIChzdGF0dXMpLCAwKTsKLS0gICAgICBzaWduYWxfdG9f cGFzcyA9IGdkYl9zaWduYWxfdG9faG9zdCAoc2lnbm8pOwotLSAgICAgIGlmIChzdGF0dXMud2h5 ICYgKF9ERUJVR19XSFlfU0lHTkFMTEVEIHwgX0RFQlVHX1dIWV9GQVVMVEVEKSkKLS0JewotLQkg IGlmIChzaWduYWxfdG9fcGFzcyAhPSBzdGF0dXMuaW5mby5zaV9zaWdubykKLS0JICAgIHsKLS0J ICAgICAgU2lnbmFsS2lsbCAobnRvX25vZGUgKCksIGluZmVyaW9yX3B0aWQucGlkICgpLCAwLAot LQkJCSAgc2lnbmFsX3RvX3Bhc3MsIDAsIDApOwotLQkgICAgICBydW4uZmxhZ3MgfD0gX0RFQlVH X1JVTl9DTFJGTFQgfCBfREVCVUdfUlVOX0NMUlNJRzsKLS0JICAgIH0KLS0JICBlbHNlCQkvKiBM ZXQgaXQga2lsbCB0aGUgcHJvZ3JhbSB3aXRob3V0IHRlbGxpbmcgdXMuICAqLwotLQkgICAgc2ln ZGVsc2V0ICgmcnVuLnRyYWNlLCBzaWduYWxfdG9fcGFzcyk7Ci0tCX0KLS0gICAgfQotLSAgZWxz ZQotLSAgICBydW4uZmxhZ3MgfD0gX0RFQlVHX1JVTl9DTFJTSUcgfCBfREVCVUdfUlVOX0NMUkZM VDsKLS0KLS0gIGVycm5vID0gZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19SVU4sICZydW4sIHNp emVvZiAocnVuKSwgMCk7Ci0tICBpZiAoZXJybm8gIT0gRU9LKQotLSAgICB7Ci0tICAgICAgcGVy cm9yIChfKCJydW4gZXJyb3IhXG4iKSk7Ci0tICAgICAgcmV0dXJuOwotLSAgICB9Ci0tfQotLQot LXZvaWQKLS1udG9fcHJvY2ZzX3RhcmdldDo6bW91cm5faW5mZXJpb3IgKCkKLS17Ci0tICBpZiAo aW5mZXJpb3JfcHRpZCAhPSBudWxsX3B0aWQpCi0tICAgIHsKLS0gICAgICBTaWduYWxLaWxsIChu dG9fbm9kZSAoKSwgaW5mZXJpb3JfcHRpZC5waWQgKCksIDAsIFNJR0tJTEwsIDAsIDApOwotLSAg ICAgIGNsb3NlIChjdGxfZmQpOwotLSAgICB9Ci0tICBzd2l0Y2hfdG9fbm9fdGhyZWFkICgpOwot LSAgaW5pdF90aHJlYWRfbGlzdCAoKTsKLS0gIGluZl9jaGlsZF9tb3Vybl9pbmZlcmlvciAob3Bz KTsKLS19Ci0tCi0tLyogVGhpcyBmdW5jdGlvbiBicmVha3MgdXAgYW4gYXJndW1lbnQgc3RyaW5n IGludG8gYW4gYXJndW1lbnQKLS0gICB2ZWN0b3Igc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gZXhl Y3ZwKCkuCi0tICAgRS5nLiwgb24gInJ1biBhIGIgYyBkIiB0aGlzIHJvdXRpbmUgd291bGQgZ2V0 IGFzIGlucHV0Ci0tICAgdGhlIHN0cmluZyAiYSBiIGMgZCIsIGFuZCBhcyBvdXRwdXQgaXQgd291 bGQgZmlsbCBpbiBhcmd2IHdpdGgKLS0gICB0aGUgZm91ciBhcmd1bWVudHMgImEiLCAiYiIsICJj IiwgImQiLiAgVGhlIG9ubHkgYWRkaXRpb25hbAotLSAgIGZ1bmN0aW9uYWxpdHkgaXMgc2ltcGxl IHF1b3RpbmcuICBUaGUgZ2RiIGNvbW1hbmQ6Ci0tCXJ1biBhICJiIGMgZCIgZgotLSAgIHdpbGwg ZmlsbCBpbiBhcmd2IHdpdGggdGhlIHRocmVlIGFyZ3MgImEiLCAiYiBjIGQiLCAiZSIuICAqLwot LXN0YXRpYyB2b2lkCi0tYnJlYWt1cF9hcmdzIChjaGFyICpzY3JhdGNoLCBjaGFyICoqYXJndikK LS17Ci0tICBjaGFyICpwcCwgKmNwID0gc2NyYXRjaDsKLS0gIGNoYXIgcXVvdGluZyA9IDA7Ci0t Ci0tICBmb3IgKDs7KQotLSAgICB7Ci0tICAgICAgLyogU2NhbiBwYXN0IGxlYWRpbmcgc2VwYXJh dG9ycy4gICovCi0tICAgICAgcXVvdGluZyA9IDA7Ci0tICAgICAgd2hpbGUgKCpjcCA9PSAnICcg fHwgKmNwID09ICdcdCcgfHwgKmNwID09ICdcbicpCi0tCWNwKys7Ci0tCi0tICAgICAgLyogQnJl YWsgaWYgYXQgZW5kIG9mIHN0cmluZy4gICovCi0tICAgICAgaWYgKCpjcCA9PSAnXDAnKQotLQli cmVhazsKLS0KLS0gICAgICAvKiBUYWtlIGFuIGFyZy4gICovCi0tICAgICAgaWYgKCpjcCA9PSAn IicpCi0tCXsKLS0JICBjcCsrOwotLQkgIHF1b3RpbmcgPSBzdHJjaHIgKGNwLCAnIicpID8gMSA6 IDA7Ci0tCX0KLS0KLS0gICAgICAqYXJndisrID0gY3A7Ci0tCi0tICAgICAgLyogU2NhbiBmb3Ig bmV4dCBhcmcgc2VwYXJhdG9yLiAgKi8KLS0gICAgICBwcCA9IGNwOwotLSAgICAgIGlmIChxdW90 aW5nKQotLQljcCA9IHN0cmNociAocHAsICciJyk7Ci0tICAgICAgaWYgKChjcCA9PSBOVUxMKSB8 fCAoIXF1b3RpbmcpKQotLQljcCA9IHN0cmNociAocHAsICcgJyk7Ci0tICAgICAgaWYgKGNwID09 IE5VTEwpCi0tCWNwID0gc3RyY2hyIChwcCwgJ1x0Jyk7Ci0tICAgICAgaWYgKGNwID09IE5VTEwp Ci0tCWNwID0gc3RyY2hyIChwcCwgJ1xuJyk7Ci0tCi0tICAgICAgLyogTm8gc2VwYXJhdG9ycyA9 PiBlbmQgb2Ygc3RyaW5nID0+IGJyZWFrLiAgKi8KLS0gICAgICBpZiAoY3AgPT0gTlVMTCkKLS0J ewotLQkgIHBwID0gY3A7Ci0tCSAgYnJlYWs7Ci0tCX0KLS0KLS0gICAgICAvKiBSZXBsYWNlIHRo ZSBzZXBhcmF0b3Igd2l0aCBhIHRlcm1pbmF0b3IuICAqLwotLSAgICAgICpjcCsrID0gJ1wwJzsK LS0gICAgfQotLQotLSAgLyogRXhlY3YgcmVxdWlyZXMgYSBudWxsLXRlcm1pbmF0ZWQgYXJnIHZl Y3Rvci4gICovCi0tICAqYXJndiA9IE5VTEw7Ci0tfQotLQotLXZvaWQKLS1udG9fcHJvY2ZzX3Rh cmdldDo6Y3JlYXRlX2luZmVyaW9yIChjb25zdCBjaGFyICpleGVjX2ZpbGUsCi0tCQkJCSAgICBj b25zdCBzdGQ6OnN0cmluZyAmYWxsYXJncywKLS0JCQkJICAgIGNoYXIgKiplbnYsIGludCBmcm9t X3R0eSkKLS17Ci0tICBzdHJ1Y3QgaW5oZXJpdGFuY2UgaW5oZXJpdDsKLS0gIHBpZF90IHBpZDsK LS0gIGludCBmbGFncywgZXJybjsKLS0gIGNoYXIgKiphcmd2LCAqYXJnczsKLS0gIGNvbnN0IGNo YXIgKmluID0gIiIsICpvdXQgPSAiIiwgKmVyciA9ICIiOwotLSAgaW50IGZkLCBmZHNbM107Ci0t ICBzaWdzZXRfdCBzZXQ7Ci0tICBzdHJ1Y3QgaW5mZXJpb3IgKmluZjsKLS0KLS0gIGFyZ3YgPSB4 bWFsbG9jICgoYWxsYXJncy5zaXplICgpIC8gKHVuc2lnbmVkKSAyICsgMikgKgotLQkJICBzaXpl b2YgKCphcmd2KSk7Ci0tICBhcmd2WzBdID0gY29uc3RfY2FzdDxjaGFyICo+IChnZXRfZXhlY19m aWxlICgxKSk7Ci0tICBpZiAoIWFyZ3ZbMF0pCi0tICAgIHsKLS0gICAgICBpZiAoZXhlY19maWxl KQotLQlhcmd2WzBdID0gZXhlY19maWxlOwotLSAgICAgIGVsc2UKLS0JcmV0dXJuOwotLSAgICB9 Ci0tCi0tICBhcmdzID0geHN0cmR1cCAoYWxsYXJncy5jX3N0ciAoKSk7Ci0tICBicmVha3VwX2Fy Z3MgKGFyZ3MsIChleGVjX2ZpbGUgIT0gTlVMTCkgPyAmYXJndlsxXSA6ICZhcmd2WzBdKTsKLS0K LS0gIGFyZ3YgPSBudG9fcGFyc2VfcmVkaXJlY3Rpb24gKGFyZ3YsICZpbiwgJm91dCwgJmVycik7 Ci0tCi0tICBmZHNbMF0gPSBTVERJTl9GSUxFTk87Ci0tICBmZHNbMV0gPSBTVERPVVRfRklMRU5P OwotLSAgZmRzWzJdID0gU1RERVJSX0ZJTEVOTzsKLS0KLS0gIC8qIElmIHRoZSB1c2VyIHNwZWNp ZmllZCBJL08gdmlhIGdkYidzIC0tdHR5PSBhcmcsIHVzZSBpdCwgYnV0IG9ubHkKLS0gICAgIGlm IHRoZSBpL28gaXMgbm90IGFsc28gYmVpbmcgc3BlY2lmaWVkIHZpYSByZWRpcmVjdGlvbi4gICov Ci0tICBjb25zdCBjaGFyICppbmZlcmlvcl90dHkgPSBjdXJyZW50X2luZmVyaW9yICgpLT50dHkg KCk7Ci0tICBpZiAoaW5mZXJpb3JfdHR5ICE9IG51bGxwdHIpCi0tICAgIHsKLS0gICAgICBpZiAo IWluWzBdKQotLQlpbiA9IGluZmVyaW9yX3R0eTsKLS0gICAgICBpZiAoIW91dFswXSkKLS0Jb3V0 ID0gaW5mZXJpb3JfdHR5OwotLSAgICAgIGlmICghZXJyWzBdKQotLQllcnIgPSBpbmZlcmlvcl90 dHk7Ci0tICAgIH0KLS0KLS0gIGlmIChpblswXSkKLS0gICAgewotLSAgICAgIGZkID0gb3BlbiAo aW4sIE9fUkRPTkxZKTsKLS0gICAgICBpZiAoZmQgPT0gLTEpCi0tCXBlcnJvciAoaW4pOwotLSAg ICAgIGVsc2UKLS0JZmRzWzBdID0gZmQ7Ci0tICAgIH0KLS0gIGlmIChvdXRbMF0pCi0tICAgIHsK LS0gICAgICBmZCA9IG9wZW4gKG91dCwgT19XUk9OTFkpOwotLSAgICAgIGlmIChmZCA9PSAtMSkK LS0JcGVycm9yIChvdXQpOwotLSAgICAgIGVsc2UKLS0JZmRzWzFdID0gZmQ7Ci0tICAgIH0KLS0g IGlmIChlcnJbMF0pCi0tICAgIHsKLS0gICAgICBmZCA9IG9wZW4gKGVyciwgT19XUk9OTFkpOwot LSAgICAgIGlmIChmZCA9PSAtMSkKLS0JcGVycm9yIChlcnIpOwotLSAgICAgIGVsc2UKLS0JZmRz WzJdID0gZmQ7Ci0tICAgIH0KLS0KLS0gIC8qIENsZWFyIGFueSBwZW5kaW5nIFNJR1VTUjEncyBi dXQga2VlcCB0aGUgYmVoYXZpb3IgdGhlIHNhbWUuICAqLwotLSAgc2lnbmFsIChTSUdVU1IxLCBz aWduYWwgKFNJR1VTUjEsIFNJR19JR04pKTsKLS0KLS0gIHNpZ2VtcHR5c2V0ICgmc2V0KTsKLS0g IHNpZ2FkZHNldCAoJnNldCwgU0lHVVNSMSk7Ci0tICBzaWdwcm9jbWFzayAoU0lHX1VOQkxPQ0ss ICZzZXQsIE5VTEwpOwotLQotLSAgbWVtc2V0ICgmaW5oZXJpdCwgMCwgc2l6ZW9mIChpbmhlcml0 KSk7Ci0tCi0tICBpZiAoTkRfTk9ERV9DTVAgKG50b19wcm9jZnNfbm9kZSwgTkRfTE9DQUxfTk9E RSkgIT0gMCkKLS0gICAgewotLSAgICAgIGluaGVyaXQubmQgPSBudG9fbm9kZSAoKTsKLS0gICAg ICBpbmhlcml0LmZsYWdzIHw9IFNQQVdOX1NFVE5EOwotLSAgICAgIGluaGVyaXQuZmxhZ3MgJj0g flNQQVdOX0VYRUM7Ci0tICAgIH0KLS0gIGluaGVyaXQuZmxhZ3MgfD0gU1BBV05fU0VUR1JPVVAg fCBTUEFXTl9IT0xEOwotLSAgaW5oZXJpdC5wZ3JvdXAgPSBTUEFXTl9ORVdQR1JPVVA7Ci0tICBw aWQgPSBzcGF3bnAgKGFyZ3ZbMF0sIDMsIGZkcywgJmluaGVyaXQsIGFyZ3YsCi0tCQlORF9OT0RF X0NNUCAobnRvX3Byb2Nmc19ub2RlLCBORF9MT0NBTF9OT0RFKSA9PSAwID8gZW52IDogMCk7Ci0t ICB4ZnJlZSAoYXJncyk7Ci0tCi0tICBzaWdwcm9jbWFzayAoU0lHX0JMT0NLLCAmc2V0LCBOVUxM KTsKLS0KLS0gIGlmIChwaWQgPT0gLTEpCi0tICAgIGVycm9yIChfKCJFcnJvciBzcGF3bmluZyAl czogJWQgKCVzKSIpLCBhcmd2WzBdLCBlcnJubywKLS0JICAgc2FmZV9zdHJlcnJvciAoZXJybm8p KTsKLS0KLS0gIGlmIChmZHNbMF0gIT0gU1RESU5fRklMRU5PKQotLSAgICBjbG9zZSAoZmRzWzBd KTsKLS0gIGlmIChmZHNbMV0gIT0gU1RET1VUX0ZJTEVOTykKLS0gICAgY2xvc2UgKGZkc1sxXSk7 Ci0tICBpZiAoZmRzWzJdICE9IFNUREVSUl9GSUxFTk8pCi0tICAgIGNsb3NlIChmZHNbMl0pOwot LQotLSAgcHRpZF90IHB0aWQgPSBkb19hdHRhY2ggKHB0aWRfdCAocGlkKSk7Ci0tICB1cGRhdGVf dGhyZWFkX2xpc3QgKCk7Ci0tICBzd2l0Y2hfdG9fdGhyZWFkICh0aGlzLT5maW5kX3RocmVhZCAo cHRpZCkpOwotLQotLSAgaW5mID0gY3VycmVudF9pbmZlcmlvciAoKTsKLS0gIGluZmVyaW9yX2Fw cGVhcmVkIChpbmYsIHBpZCk7Ci0tICBpbmYtPmF0dGFjaF9mbGFnID0gZmFsc2U7Ci0tCi0tICBm bGFncyA9IF9ERUJVR19GTEFHX0tMQzsJLyogS2lsbC1vbi1MYXN0LUNsb3NlIGZsYWcuICAqLwot LSAgZXJybiA9IGRldmN0bCAoY3RsX2ZkLCBEQ01EX1BST0NfU0VUX0ZMQUcsICZmbGFncywgc2l6 ZW9mIChmbGFncyksIDApOwotLSAgaWYgKGVycm4gIT0gRU9LKQotLSAgICB7Ci0tICAgICAgLyog RklYTUU6IGV4cGVjdGVkIHdhcm5pbmc/ICAqLwotLSAgICAgIC8qIHdhcm5pbmcoICJGYWlsZWQg dG8gc2V0IEtpbGwtb24tTGFzdC1DbG9zZSBmbGFnOiBlcnJubyA9ICVkKCVzKVxuIiwKLS0JIGVy cm4sIHNhZmVfc3RyZXJyb3IoZXJybikgKTsgKi8KLS0gICAgfQotLSAgaWYgKCFpbmYtPnRhcmdl dF9pc19wdXNoZWQgKG9wcykpCi0tICAgIGluZi0+cHVzaF90YXJnZXQgKG9wcyk7Ci0tICB0YXJn ZXRfdGVybWluYWw6OmluaXQgKCk7Ci0tCi0tICBpZiAoY3VycmVudF9wcm9ncmFtX3NwYWNlLT5l eGVjX2JmZCAoKSAhPSBOVUxMCi0tICAgICAgfHwgKGN1cnJlbnRfcHJvZ3JhbV9zcGFjZS0+c3lt ZmlsZV9vYmplY3RfZmlsZSAhPSBOVUxMCi0tCSAgJiYgY3VycmVudF9wcm9ncmFtX3NwYWNlLT5z eW1maWxlX29iamVjdF9maWxlLT5vYmZkICE9IE5VTEwpKQotLSAgICBzb2xpYl9jcmVhdGVfaW5m ZXJpb3JfaG9vayAoMCk7Ci0tfQotLQotLXZvaWQKLS1udG9fcHJvY2ZzX3RhcmdldDo6aW50ZXJy dXB0ICgpCi0tewotLSAgZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19TVE9QLCBOVUxMLCAwLCAw KTsKLS19Ci0tCi0tdm9pZAotLW50b19wcm9jZnNfdGFyZ2V0OjpraWxsICgpCi0tewotLSAgdGFy Z2V0X21vdXJuX2luZmVyaW9yIChpbmZlcmlvcl9wdGlkKTsKLS19Ci0tCi0tLyogRmlsbCBidWYg d2l0aCByZWdzZXQgYW5kIHJldHVybiBkZXZjdGwgY21kIHRvIGRvIHRoZSBzZXR0aW5nLiAgUmV0 dXJuCi0tICAgLTEgaWYgd2UgZmFpbCB0byBnZXQgdGhlIHJlZ3NldC4gIFN0b3JlIHNpemUgb2Yg cmVnc2V0IGluIHJlZ3NpemUuICAqLwotLXN0YXRpYyBpbnQKLS1nZXRfcmVnc2V0IChpbnQgcmVn c2V0LCBjaGFyICpidWYsIGludCBidWZzaXplLCBpbnQgKnJlZ3NpemUpCi0tewotLSAgaW50IGRl dl9nZXQsIGRldl9zZXQ7Ci0tICBzd2l0Y2ggKHJlZ3NldCkKLS0gICAgewotLSAgICBjYXNlIE5U T19SRUdfR0VORVJBTDoKLS0gICAgICBkZXZfZ2V0ID0gRENNRF9QUk9DX0dFVEdSRUc7Ci0tICAg ICAgZGV2X3NldCA9IERDTURfUFJPQ19TRVRHUkVHOwotLSAgICAgIGJyZWFrOwotLQotLSAgICBj YXNlIE5UT19SRUdfRkxPQVQ6Ci0tICAgICAgZGV2X2dldCA9IERDTURfUFJPQ19HRVRGUFJFRzsK LS0gICAgICBkZXZfc2V0ID0gRENNRF9QUk9DX1NFVEZQUkVHOwotLSAgICAgIGJyZWFrOwotLQot LSAgICBjYXNlIE5UT19SRUdfQUxUOgotLSAgICAgIGRldl9nZXQgPSBEQ01EX1BST0NfR0VUQUxU UkVHOwotLSAgICAgIGRldl9zZXQgPSBEQ01EX1BST0NfU0VUQUxUUkVHOwotLSAgICAgIGJyZWFr OwotLQotLSAgICBjYXNlIE5UT19SRUdfU1lTVEVNOgotLSAgICBkZWZhdWx0OgotLSAgICAgIHJl dHVybiAtMTsKLS0gICAgfQotLSAgaWYgKGRldmN0bCAoY3RsX2ZkLCBkZXZfZ2V0LCBidWYsIGJ1 ZnNpemUsIHJlZ3NpemUpICE9IEVPSykKLS0gICAgcmV0dXJuIC0xOwotLQotLSAgcmV0dXJuIGRl dl9zZXQ7Ci0tfQotLQotLXZvaWQKLS1udG9fcHJvY2ZzX3RhcmdldDo6c3RvcmVfcmVnaXN0ZXJz IChzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBpbnQgcmVnbm8pCi0tewotLSAgdW5pb24KLS0g IHsKLS0gICAgcHJvY2ZzX2dyZWcgZ3JlZzsKLS0gICAgcHJvY2ZzX2ZwcmVnIGZwcmVnOwotLSAg ICBwcm9jZnNfYWx0cmVnIGFsdHJlZzsKLS0gIH0KLS0gIHJlZzsKLS0gIHVuc2lnbmVkIG9mZjsK LS0gIGludCBsZW4sIHJlZ3NldCwgcmVnc2l6ZSwgZGV2X3NldCwgZXJyOwotLSAgY2hhciAqZGF0 YTsKLS0gIHB0aWRfdCBwdGlkID0gcmVnY2FjaGUtPnB0aWQgKCk7Ci0tCi0tICBpZiAocHRpZCA9 PSBudWxsX3B0aWQpCi0tICAgIHJldHVybjsKLS0gIHByb2Nmc19zZXRfdGhyZWFkIChwdGlkKTsK LS0KLS0gIGlmIChyZWdubyA9PSAtMSkKLS0gICAgewotLSAgICAgIGZvciAocmVnc2V0ID0gTlRP X1JFR19HRU5FUkFMOyByZWdzZXQgPCBOVE9fUkVHX0VORDsgcmVnc2V0KyspCi0tCXsKLS0JICBk ZXZfc2V0ID0gZ2V0X3JlZ3NldCAocmVnc2V0LCAoY2hhciAqKSAmcmVnLAotLQkJCQlzaXplb2Yg KHJlZyksICZyZWdzaXplKTsKLS0JICBpZiAoZGV2X3NldCA9PSAtMSkKLS0JICAgIGNvbnRpbnVl OwotLQotLQkgIGlmIChudG9fcmVnc2V0X2ZpbGwgKHJlZ2NhY2hlLCByZWdzZXQsIChjaGFyICop ICZyZWcpID09IC0xKQotLQkgICAgY29udGludWU7Ci0tCi0tCSAgZXJyID0gZGV2Y3RsIChjdGxf ZmQsIGRldl9zZXQsICZyZWcsIHJlZ3NpemUsIDApOwotLQkgIGlmIChlcnIgIT0gRU9LKQotLQkg ICAgZ2RiX3ByaW50ZiAoZ2RiX3N0ZGVyciwKLS0JCQkiV2FybmluZyB1bmFibGUgdG8gd3JpdGUg cmVnc2V0ICVkOiAlc1xuIiwKLS0JCQlyZWdubywgc2FmZV9zdHJlcnJvciAoZXJyKSk7Ci0tCX0K LS0gICAgfQotLSAgZWxzZQotLSAgICB7Ci0tICAgICAgcmVnc2V0ID0gbnRvX3JlZ3NldF9pZCAo cmVnbm8pOwotLSAgICAgIGlmIChyZWdzZXQgPT0gLTEpCi0tCXJldHVybjsKLS0KLS0gICAgICBk ZXZfc2V0ID0gZ2V0X3JlZ3NldCAocmVnc2V0LCAoY2hhciAqKSAmcmVnLCBzaXplb2YgKHJlZyks ICZyZWdzaXplKTsKLS0gICAgICBpZiAoZGV2X3NldCA9PSAtMSkKLS0JcmV0dXJuOwotLQotLSAg ICAgIGxlbiA9IG50b19yZWdpc3Rlcl9hcmVhIChyZWdjYWNoZS0+YXJjaCAoKSwKLS0JCQkgICAg ICAgcmVnbm8sIHJlZ3NldCwgJm9mZik7Ci0tCi0tICAgICAgaWYgKGxlbiA8IDEpCi0tCXJldHVy bjsKLS0KLS0gICAgICByZWdjYWNoZS0+cmF3X2NvbGxlY3QgKHJlZ25vLCAoY2hhciAqKSAmcmVn ICsgb2ZmKTsKLS0KLS0gICAgICBlcnIgPSBkZXZjdGwgKGN0bF9mZCwgZGV2X3NldCwgJnJlZywg cmVnc2l6ZSwgMCk7Ci0tICAgICAgaWYgKGVyciAhPSBFT0spCi0tCWdkYl9wcmludGYgKGdkYl9z dGRlcnIsCi0tCQkgICAgIldhcm5pbmcgdW5hYmxlIHRvIHdyaXRlIHJlZ3NldCAlZDogJXNcbiIs IHJlZ25vLAotLQkJICAgIHNhZmVfc3RyZXJyb3IgKGVycikpOwotLSAgICB9Ci0tfQotLQotLS8q IFNldCBsaXN0IG9mIHNpZ25hbHMgdG8gYmUgaGFuZGxlZCBpbiB0aGUgdGFyZ2V0LiAgKi8KLS0K LS12b2lkCi0tbnRvX3Byb2Nmc190YXJnZXQ6OnBhc3Nfc2lnbmFscwotLSAgKGdkYjo6YXJyYXlf dmlldzxjb25zdCB1bnNpZ25lZCBjaGFyPiBwYXNzX3NpZ25hbHMpCi0tewotLSAgaW50IHNpZ25v OwotLQotLSAgc2lnZmlsbHNldCAoJnJ1bi50cmFjZSk7Ci0tCi0tICBmb3IgKHNpZ25vID0gMTsg c2lnbm8gPCBOU0lHOyBzaWdubysrKQotLSAgICB7Ci0tICAgICAgaW50IHRhcmdldF9zaWdubyA9 IGdkYl9zaWduYWxfZnJvbV9ob3N0IChzaWdubyk7Ci0tICAgICAgaWYgKHRhcmdldF9zaWdubyA8 IHBhc3Nfc2lnbmFscy5zaXplICgpICYmIHBhc3Nfc2lnbmFsc1t0YXJnZXRfc2lnbm9dKQotLQlz aWdkZWxzZXQgKCZydW4udHJhY2UsIHNpZ25vKTsKLS0gICAgfQotLX0KLS0KLS1zdGQ6OnN0cmlu ZwotLW50b19wcm9jZnNfdGFyZ2V0OjpwaWRfdG9fc3RyIChwdGlkX3QgcHRpZCkKLS17Ci0tICBp bnQgcGlkLCB0aWQ7Ci0tICBzdHJ1Y3QgdGlkaW5mbyAqdGlwOwotLQotLSAgcGlkID0gcHRpZC5w aWQgKCk7Ci0tICB0aWQgPSBwdGlkLnRpZCAoKTsKLS0KLS0jaWYgMAkJCQkvKiBOWUkgKi8KLS0g IHRpcCA9IHByb2Nmc190aHJlYWRfaW5mbyAocGlkLCB0aWQpOwotLSAgaWYgKHRpcCAhPSBOVUxM KQotLSAgICBzbnByaW50ZiAoJmJ1ZltuXSwgMTAyMywgIiAoc3RhdGUgPSAweCUwMngpIiwgdGlw LT5zdGF0ZSk7Ci0tI2VuZGlmCi0tCi0tICByZXR1cm4gc3RyaW5nX3ByaW50ZiAoInByb2Nlc3Mg JWQiLCBwaWQpOwotLX0KLS0KLS0vKiB0b19jYW5fcnVuIGltcGxlbWVudGF0aW9uIGZvciAidGFy Z2V0IHByb2NmcyIuICBOb3RlIHRoaXMgcmVhbGx5Ci0tICBtZWFucyAiY2FuIHRoaXMgdGFyZ2V0 IGJlIHRoZSBkZWZhdWx0IHJ1biB0YXJnZXQiLCB3aGljaCB0aGVyZSBjYW4KLS0gIGJlIG9ubHkg b25lLCBhbmQgd2UgbWFrZSBpdCBiZSAidGFyZ2V0IG5hdGl2ZSIgbGlrZSBvdGhlciBwb3J0cy4K LS0gICJ0YXJnZXQgcHJvY2ZzIDxub2RlPiIgd291bGRuJ3QgbWFrZSBzZW5zZSBhcyBkZWZhdWx0 IHJ1biB0YXJnZXQsIGFzCi0tICBpdCBuZWVkcyA8bm9kZT4uICAqLwotLQotLWludAotLW50b19w cm9jZnNfdGFyZ2V0OjpjYW5fcnVuICgpCi0tewotLSAgcmV0dXJuIDA7Ci0tfQotLQotLS8qICJ0 YXJnZXQgcHJvY2ZzIi4gICovCi0tc3RhdGljIG50b19wcm9jZnNfdGFyZ2V0X3Byb2NmcyBudG9f cHJvY2ZzX29wczsKLS0KLS0vKiAidGFyZ2V0IG5hdGl2ZSIuICAqLwotLXN0YXRpYyBudG9fcHJv Y2ZzX3RhcmdldF9uYXRpdmUgbnRvX25hdGl2ZV9vcHM7Ci0tCi0tLyogQ3JlYXRlIHRoZSAibmF0 aXZlIiBhbmQgInByb2NmcyIgdGFyZ2V0cy4gICovCi0tCi0tc3RhdGljIHZvaWQKLS1pbml0X3By b2Nmc190YXJnZXRzICh2b2lkKQotLXsKLS0gIC8qIFJlZ2lzdGVyICJ0YXJnZXQgbmF0aXZlIi4g IFRoaXMgaXMgdGhlIGRlZmF1bHQgcnVuIHRhcmdldC4gICovCi0tICBhZGRfdGFyZ2V0IChudG9f bmF0aXZlX3RhcmdldF9pbmZvLCBpbmZfY2hpbGRfb3Blbl90YXJnZXQpOwotLSAgc2V0X25hdGl2 ZV90YXJnZXQgKCZudG9fbmF0aXZlX29wcyk7Ci0tCi0tICAvKiBSZWdpc3RlciAidGFyZ2V0IHBy b2NmcyA8bm9kZT4iLiAgKi8KLS0gIGFkZF90YXJnZXQgKG50b19wcm9jZnNfdGFyZ2V0X2luZm8s IGluZl9jaGlsZF9vcGVuX3RhcmdldCk7Ci0tfQotLQotLSNkZWZpbmUgT1NUWVBFX05UTyAxCi0t Ci0tdm9pZCBfaW5pdGlhbGl6ZV9wcm9jZnMgKCk7Ci0tdm9pZAotLV9pbml0aWFsaXplX3Byb2Nm cyAoKQotLXsKLS0gIHNpZ3NldF90IHNldDsKLS0KLS0gIGluaXRfcHJvY2ZzX3RhcmdldHMgKCk7 Ci0tCi0tICAvKiBXZSB1c2UgU0lHVVNSMSB0byBnYWluIGNvbnRyb2wgYWZ0ZXIgd2UgYmxvY2sg d2FpdGluZyBmb3IgYSBwcm9jZXNzLgotLSAgICAgV2UgdXNlIHNpZ3dhaXRldmVudCB0byB3YWl0 LiAgKi8KLS0gIHNpZ2VtcHR5c2V0ICgmc2V0KTsKLS0gIHNpZ2FkZHNldCAoJnNldCwgU0lHVVNS MSk7Ci0tICBzaWdwcm9jbWFzayAoU0lHX0JMT0NLLCAmc2V0LCBOVUxMKTsKLS0KLS0gIC8qIElu aXRpYWxseSwgbWFrZSBzdXJlIGFsbCBzaWduYWxzIGFyZSByZXBvcnRlZC4gICovCi0tICBzaWdm aWxsc2V0ICgmcnVuLnRyYWNlKTsKLS0KLS0gIC8qIFN0dWZmIHNvbWUgaW5mb3JtYXRpb24uICAq LwotLSAgbnRvX2NwdWluZm9fZmxhZ3MgPSBTWVNQQUdFX0VOVFJZIChjcHVpbmZvKS0+ZmxhZ3M7 Ci0tICBudG9fY3B1aW5mb192YWxpZCA9IDE7Ci0tCi0tICBhZGRfaW5mbyAoInBpZGxpc3QiLCBw cm9jZnNfcGlkbGlzdCwgXygicGlkbGlzdCIpKTsKLS0gIGFkZF9pbmZvICgibWVtaW5mbyIsIHBy b2Nmc19tZW1pbmZvLCBfKCJtZW1vcnkgaW5mb3JtYXRpb24iKSk7Ci0tCi0tICBudG9faXNfbnRv X3RhcmdldCA9IHByb2Nmc19pc19udG9fdGFyZ2V0OwotLX0KLS0KLS0KLS1zdGF0aWMgaW50Ci0t cHJvY2ZzX2h3X3dhdGNocG9pbnQgKGludCBhZGRyLCBpbnQgbGVuLCBlbnVtIHRhcmdldF9od19i cF90eXBlIHR5cGUpCi0tewotLSAgcHJvY2ZzX2JyZWFrIGJyazsKLS0KLS0gIHN3aXRjaCAodHlw ZSkKLS0gICAgewotLSAgICBjYXNlIGh3X3JlYWQ6Ci0tICAgICAgYnJrLnR5cGUgPSBfREVCVUdf QlJFQUtfUkQ7Ci0tICAgICAgYnJlYWs7Ci0tICAgIGNhc2UgaHdfYWNjZXNzOgotLSAgICAgIGJy ay50eXBlID0gX0RFQlVHX0JSRUFLX1JXOwotLSAgICAgIGJyZWFrOwotLSAgICBkZWZhdWx0OgkJ CS8qIE1vZGlmeS4gICovCi0tLyogRklYTUU6IGJyay50eXBlID0gX0RFQlVHX0JSRUFLX1JXTSBn aXZlcyBFSU5WQUwgZm9yIHNvbWUgcmVhc29uLiAgKi8KLS0gICAgICBicmsudHlwZSA9IF9ERUJV R19CUkVBS19SVzsKLS0gICAgfQotLSAgYnJrLnR5cGUgfD0gX0RFQlVHX0JSRUFLX0hXOwkvKiBB bHdheXMgYXNrIGZvciBIVy4gICovCi0tICBicmsuYWRkciA9IGFkZHI7Ci0tICBicmsuc2l6ZSA9 IGxlbjsKLS0KLS0gIGVycm5vID0gZGV2Y3RsIChjdGxfZmQsIERDTURfUFJPQ19CUkVBSywgJmJy aywgc2l6ZW9mIChicmspLCAwKTsKLS0gIGlmIChlcnJubyAhPSBFT0spCi0tICAgIHsKLS0gICAg ICBwZXJyb3IgKF8oIkZhaWxlZCB0byBzZXQgaGFyZHdhcmUgd2F0Y2hwb2ludCIpKTsKLS0gICAg ICByZXR1cm4gLTE7Ci0tICAgIH0KLS0gIHJldHVybiAwOwotLX0KLS0KLS1ib29sCi0tbnRvX3By b2Nmc190YXJnZXQ6OmNhbl91c2VfaHdfYnJlYWtwb2ludCAoZW51bSBicHR5cGUgdHlwZSwKLS0J CQkJCSAgaW50IGNudCwgaW50IG90aGVydHlwZSkKLS17Ci0tICByZXR1cm4gMTsKLS19Ci0tCi0t aW50Ci0tbnRvX3Byb2Nmc190YXJnZXQ6OnJlbW92ZV9od193YXRjaHBvaW50IChDT1JFX0FERFIg YWRkciwgaW50IGxlbiwKLS0JCQkJCSBlbnVtIHRhcmdldF9od19icF90eXBlIHR5cGUsCi0tCQkJ CQkgc3RydWN0IGV4cHJlc3Npb24gKmNvbmQpCi0tewotLSAgcmV0dXJuIHByb2Nmc19od193YXRj aHBvaW50IChhZGRyLCAtMSwgdHlwZSk7Ci0tfQotLQotLWludAotLW50b19wcm9jZnNfdGFyZ2V0 OjppbnNlcnRfaHdfd2F0Y2hwb2ludCAoQ09SRV9BRERSIGFkZHIsIGludCBsZW4sCi0tCQkJCQkg ZW51bSB0YXJnZXRfaHdfYnBfdHlwZSB0eXBlLAotLQkJCQkJIHN0cnVjdCBleHByZXNzaW9uICpj b25kKQotLXsKLS0gIHJldHVybiBwcm9jZnNfaHdfd2F0Y2hwb2ludCAoYWRkciwgbGVuLCB0eXBl KTsKLS19Ci0tCi0tYm9vbAotLW50b19wcm9jZnNfdGFyZ2V0OjpzdG9wcGVkX2J5X3dhdGNocG9p bnQgKCkKLS17Ci0tICAvKiBOT1RFOiBudG9fc3RvcHBlZF9ieV93YXRjaHBvaW50IHdpbGwgYmUg Y2FsbGVkIE9OTFkgd2hpbGUgd2UgYXJlCi0tICAgICBzdG9wcGVkIGR1ZSB0byBhIFNJR1RSQVAu ICBUaGlzIGFzc3VtZXMgZ2RiIHdvcmtzIGluICdhbGwtc3RvcCcgbW9kZTsKLS0gICAgIGZ1dHVy ZSBnZGIgdmVyc2lvbnMgd2lsbCBsaWtlbHkgcnVuIGluICdub24tc3RvcCcgbW9kZSBpbiB3aGlj aCBjYXNlCi0tICAgICB3ZSB3aWxsIGhhdmUgdG8gc3RvcmUvZXhhbWluZSBzdGF0dXNlcyBwZXIg dGhyZWFkIGluIHF1ZXN0aW9uLgotLSAgICAgVW50aWwgdGhlbiwgdGhpcyB3aWxsIHdvcmsgZmlu ZS4gICovCi0tCi0tICBzdHJ1Y3QgaW5mZXJpb3IgKmluZiA9IGN1cnJlbnRfaW5mZXJpb3IgKCk7 Ci0tICBzdHJ1Y3QgbnRvX2luZmVyaW9yX2RhdGEgKmluZl9kYXRhOwotLQotLSAgZ2RiX2Fzc2Vy dCAoaW5mICE9IE5VTEwpOwotLQotLSAgaW5mX2RhdGEgPSBudG9faW5mZXJpb3JfZGF0YSAoaW5m KTsKLS0KLS0gIHJldHVybiBpbmZfZGF0YS0+c3RvcHBlZF9mbGFncwotLQkgJiAoX0RFQlVHX0ZM QUdfVFJBQ0VfUkQKLS0JICAgIHwgX0RFQlVHX0ZMQUdfVFJBQ0VfV1IKLS0JICAgIHwgX0RFQlVH X0ZMQUdfVFJBQ0VfTU9ESUZZKTsKLS19Ci1kaWZmIC0tZ2l0IGEvZ2RiL250by10ZGVwLmMgYi9n ZGIvbnRvLXRkZXAuYwotZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci0tLS0gYS9nZGIvbnRvLXRk ZXAuYwotKysrIC9kZXYvbnVsbAotQEAgLTEsNTIxICswLDAgQEAKLS0vKiBudG8tdGRlcC5jIC0g Z2VuZXJhbCBRTlggTmV1dHJpbm8gdGFyZ2V0IGZ1bmN0aW9uYWxpdHkuCi0tCi0tICAgQ29weXJp Z2h0IChDKSAyMDAzLTIwMjQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0tCi0tICAg Q29udHJpYnV0ZWQgYnkgUU5YIFNvZnR3YXJlIFN5c3RlbXMgTHRkLgotLQotLSAgIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEdEQi4KLS0KLS0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotLSAgIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0t ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKLS0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotLQot LSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAotLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0tICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0tCi0tICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLS0gICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4gICovCi0tCi0tI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0tI2luY2x1ZGUgIm50by10ZGVwLmgi Ci0tI2luY2x1ZGUgImV4dHJhY3Qtc3RvcmUtaW50ZWdlci5oIgotLSNpbmNsdWRlICJ0b3AuaCIK LS0jaW5jbHVkZSAiaW5mZXJpb3IuaCIKLS0jaW5jbHVkZSAiaW5mcnVuLmgiCi0tI2luY2x1ZGUg ImdkYmFyY2guaCIKLS0jaW5jbHVkZSAiYmZkLmgiCi0tI2luY2x1ZGUgImVsZi1iZmQuaCIKLS0j aW5jbHVkZSAic29saWItc3ZyNC5oIgotLSNpbmNsdWRlICJnZGJjb3JlLmgiCi0tI2luY2x1ZGUg Im9iamZpbGVzLmgiCi0tI2luY2x1ZGUgInNvdXJjZS5oIgotLSNpbmNsdWRlICJnZGJzdXBwb3J0 L3BhdGhzdHVmZi5oIgotLQotLSNkZWZpbmUgUU5YX05PVEVfTkFNRQkiUU5YIgotLSNkZWZpbmUg UU5YX0lORk9fU0VDVF9OQU1FICJRTlhfaW5mbyIKLS0KLS0jaWZkZWYgX19DWUdXSU5fXwotLSNp bmNsdWRlIDxzeXMvY3lnd2luLmg+Ci0tI2VuZGlmCi0tCi0tI2lmZGVmIF9fQ1lHV0lOX18KLS1z dGF0aWMgY2hhciBkZWZhdWx0X250b190YXJnZXRbXSA9ICJDOlxcUU5Yc2RrXFx0YXJnZXRcXHFu eDYiOwotLSNlbGlmIGRlZmluZWQoX19zdW5fXykgfHwgZGVmaW5lZChsaW51eCkKLS1zdGF0aWMg Y2hhciBkZWZhdWx0X250b190YXJnZXRbXSA9ICIvb3B0L1FOWHNkay90YXJnZXQvcW54NiI7Ci0t I2Vsc2UKLS1zdGF0aWMgY2hhciBkZWZhdWx0X250b190YXJnZXRbXSA9ICIiOwotLSNlbmRpZgot LQotLXN0cnVjdCBudG9fdGFyZ2V0X29wcyBjdXJyZW50X250b190YXJnZXQ7Ci0tCi0tc3RhdGlj IGNvbnN0IHJlZ2lzdHJ5PGluZmVyaW9yPjo6a2V5PHN0cnVjdCBudG9faW5mZXJpb3JfZGF0YT4K LS0gIG50b19pbmZlcmlvcl9kYXRhX3JlZzsKLS0KLS1zdGF0aWMgY2hhciAqCi0tbnRvX3Rhcmdl dCAodm9pZCkKLS17Ci0tICBjaGFyICpwID0gZ2V0ZW52ICgiUU5YX1RBUkdFVCIpOwotLQotLSNp ZmRlZiBfX0NZR1dJTl9fCi0tICBzdGF0aWMgY2hhciBidWZbUEFUSF9NQVhdOwotLSAgaWYgKHAp Ci0tICAgIGN5Z3dpbl9jb252X3BhdGggKENDUF9XSU5fQV9UT19QT1NJWCwgcCwgYnVmLCBQQVRI X01BWCk7Ci0tICBlbHNlCi0tICAgIGN5Z3dpbl9jb252X3BhdGggKENDUF9XSU5fQV9UT19QT1NJ WCwgZGVmYXVsdF9udG9fdGFyZ2V0LCBidWYsIFBBVEhfTUFYKTsKLS0gIHJldHVybiBidWY7Ci0t I2Vsc2UKLS0gIHJldHVybiBwID8gcCA6IGRlZmF1bHRfbnRvX3RhcmdldDsKLS0jZW5kaWYKLS19 Ci0tCi0tLyogVGFrZSBhIHN0cmluZyBzdWNoIGFzIGkzODYsIHJzNjAwMCwgZXRjLiBhbmQgbWFw IGl0IG9udG8gQ1BVVFlQRV9YODYsCi0tICAgQ1BVVFlQRV9QUEMsIGV0Yy4gYXMgZGVmaW5lZCBp biBudG8tc2hhcmUvZHNtc2dzLmguICAqLwotLWludAotLW50b19tYXBfYXJjaF90b19jcHV0eXBl IChjb25zdCBjaGFyICphcmNoKQotLXsKLS0gIGlmICghc3RyY21wIChhcmNoLCAiaTM4NiIpIHx8 ICFzdHJjbXAgKGFyY2gsICJ4ODYiKSkKLS0gICAgcmV0dXJuIENQVVRZUEVfWDg2OwotLSAgaWYg KCFzdHJjbXAgKGFyY2gsICJyczYwMDAiKSB8fCAhc3RyY21wIChhcmNoLCAicG93ZXJwYyIpKQot LSAgICByZXR1cm4gQ1BVVFlQRV9QUEM7Ci0tICBpZiAoIXN0cmNtcCAoYXJjaCwgIm1pcHMiKSkK LS0gICAgcmV0dXJuIENQVVRZUEVfTUlQUzsKLS0gIGlmICghc3RyY21wIChhcmNoLCAiYXJtIikp Ci0tICAgIHJldHVybiBDUFVUWVBFX0FSTTsKLS0gIGlmICghc3RyY21wIChhcmNoLCAic2giKSkK LS0gICAgcmV0dXJuIENQVVRZUEVfU0g7Ci0tICByZXR1cm4gQ1BVVFlQRV9VTktOT1dOOwotLX0K LS0KLS1pbnQKLS1udG9fZmluZF9hbmRfb3Blbl9zb2xpYiAoY29uc3QgY2hhciAqc29saWIsIHVu c2lnbmVkIG9fZmxhZ3MsCi0tCQkJIGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+ICp0ZW1w X3BhdGhuYW1lKQotLXsKLS0gIGNoYXIgKmJ1ZiwgKmFyY2hfcGF0aCwgKm50b19yb290OwotLSAg Y29uc3QgY2hhciAqZW5kaWFuOwotLSAgY29uc3QgY2hhciAqYmFzZTsKLS0gIGNvbnN0IGNoYXIg KmFyY2g7Ci0tICBpbnQgYXJjaF9sZW4sIGxlbiwgcmV0OwotLSNkZWZpbmUgUEFUSF9GTVQgXAot LSAgIiVzL2xpYjolcy91c3IvbGliOiVzL3Vzci9waG90b24vbGliOiVzL3Vzci9waG90b24vZGxs OiVzL2xpYi9kbGwiCi0tCi0tICBudG9fcm9vdCA9IG50b190YXJnZXQgKCk7Ci0tICBnZGJhcmNo ICpnZGJhcmNoID0gY3VycmVudF9pbmZlcmlvciAoKS0+YXJjaCAoKTsKLS0gIGlmIChzdHJjbXAg KGdkYmFyY2hfYmZkX2FyY2hfaW5mbyAoZ2RiYXJjaCktPmFyY2hfbmFtZSwgImkzODYiKSA9PSAw KQotLSAgICB7Ci0tICAgICAgYXJjaCA9ICJ4ODYiOwotLSAgICAgIGVuZGlhbiA9ICIiOwotLSAg ICB9Ci0tICBlbHNlIGlmIChzdHJjbXAgKGdkYmFyY2hfYmZkX2FyY2hfaW5mbyAoZ2RiYXJjaCkt PmFyY2hfbmFtZSwKLS0JCSAgICJyczYwMDAiKSA9PSAwCi0tCSAgIHx8IHN0cmNtcCAoZ2RiYXJj aF9iZmRfYXJjaF9pbmZvIChnZGJhcmNoKS0+YXJjaF9uYW1lLAotLQkJICAgInBvd2VycGMiKSA9 PSAwKQotLSAgICB7Ci0tICAgICAgYXJjaCA9ICJwcGMiOwotLSAgICAgIGVuZGlhbiA9ICJiZSI7 Ci0tICAgIH0KLS0gIGVsc2UKLS0gICAgewotLSAgICAgIGFyY2ggPSBnZGJhcmNoX2JmZF9hcmNo X2luZm8gKGdkYmFyY2gpLT5hcmNoX25hbWU7Ci0tICAgICAgZW5kaWFuID0gZ2RiYXJjaF9ieXRl X29yZGVyIChnZGJhcmNoKQotLQkgICAgICAgPT0gQkZEX0VORElBTl9CSUcgPyAiYmUiIDogImxl IjsKLS0gICAgfQotLQotLSAgLyogSW4gY2FzZSBudG9fcm9vdCBpcyBzaG9ydCwgYWRkIHN0cmxl bihzb2xpYikKLS0gICAgIHNvIHdlIGNhbiByZXVzZSBhcmNoX3BhdGggYmVsb3cuICAqLwotLQot LSAgYXJjaF9sZW4gPSAoc3RybGVuIChudG9fcm9vdCkgKyBzdHJsZW4gKGFyY2gpICsgc3RybGVu IChlbmRpYW4pICsgMgotLQkgICAgICArIHN0cmxlbiAoc29saWIpKTsKLS0gIGFyY2hfcGF0aCA9 IChjaGFyICopIGFsbG9jYSAoYXJjaF9sZW4pOwotLSAgeHNucHJpbnRmIChhcmNoX3BhdGgsIGFy Y2hfbGVuLCAiJXMvJXMlcyIsIG50b19yb290LCBhcmNoLCBlbmRpYW4pOwotLQotLSAgbGVuID0g c3RybGVuIChQQVRIX0ZNVCkgKyBzdHJsZW4gKGFyY2hfcGF0aCkgKiA1ICsgMTsKLS0gIGJ1ZiA9 IChjaGFyICopIGFsbG9jYSAobGVuKTsKLS0gIHhzbnByaW50ZiAoYnVmLCBsZW4sIFBBVEhfRk1U LCBhcmNoX3BhdGgsIGFyY2hfcGF0aCwgYXJjaF9wYXRoLCBhcmNoX3BhdGgsCi0tCSAgICAgYXJj aF9wYXRoKTsKLS0KLS0gIGJhc2UgPSBsYmFzZW5hbWUgKHNvbGliKTsKLS0gIHJldCA9IG9wZW5w IChidWYsIE9QRl9UUllfQ1dEX0ZJUlNUIHwgT1BGX1JFVFVSTl9SRUFMUEFUSCwgYmFzZSwgb19m bGFncywKLS0JICAgICAgIHRlbXBfcGF0aG5hbWUpOwotLSAgaWYgKHJldCA8IDAgJiYgYmFzZSAh PSBzb2xpYikKLS0gICAgewotLSAgICAgIHhzbnByaW50ZiAoYXJjaF9wYXRoLCBhcmNoX2xlbiwg Ii8lcyIsIHNvbGliKTsKLS0gICAgICByZXQgPSBvcGVuIChhcmNoX3BhdGgsIG9fZmxhZ3MsIDAp OwotLSAgICAgIGlmICh0ZW1wX3BhdGhuYW1lKQotLQl7Ci0tCSAgaWYgKHJldCA+PSAwKQotLQkg ICAgKnRlbXBfcGF0aG5hbWUgPSBnZGJfcmVhbHBhdGggKGFyY2hfcGF0aCk7Ci0tCSAgZWxzZQot LQkgICAgdGVtcF9wYXRobmFtZS0+cmVzZXQgKE5VTEwpOwotLQl9Ci0tICAgIH0KLS0gIHJldHVy biByZXQ7Ci0tfQotLQotLXZvaWQKLS1udG9faW5pdF9zb2xpYl9hYnNvbHV0ZV9wcmVmaXggKHZv aWQpCi0tewotLSAgY2hhciBidWZbUEFUSF9NQVggKiAyXSwgYXJjaF9wYXRoW1BBVEhfTUFYXTsK LS0gIGNoYXIgKm50b19yb290OwotLSAgY29uc3QgY2hhciAqZW5kaWFuOwotLSAgY29uc3QgY2hh ciAqYXJjaDsKLS0KLS0gIG50b19yb290ID0gbnRvX3RhcmdldCAoKTsKLS0gIGdkYmFyY2ggKmdk YmFyY2ggPSBjdXJyZW50X2luZmVyaW9yICgpLT5hcmNoICgpOwotLSAgaWYgKHN0cmNtcCAoZ2Ri YXJjaF9iZmRfYXJjaF9pbmZvIChnZGJhcmNoKS0+YXJjaF9uYW1lLCAiaTM4NiIpID09IDApCi0t ICAgIHsKLS0gICAgICBhcmNoID0gIng4NiI7Ci0tICAgICAgZW5kaWFuID0gIiI7Ci0tICAgIH0K LS0gIGVsc2UgaWYgKHN0cmNtcCAoZ2RiYXJjaF9iZmRfYXJjaF9pbmZvIChnZGJhcmNoKS0+YXJj aF9uYW1lLAotLQkJICAgInJzNjAwMCIpID09IDAKLS0JICAgfHwgc3RyY21wIChnZGJhcmNoX2Jm ZF9hcmNoX2luZm8gKGdkYmFyY2gpLT5hcmNoX25hbWUsCi0tCQkgICAicG93ZXJwYyIpID09IDAp Ci0tICAgIHsKLS0gICAgICBhcmNoID0gInBwYyI7Ci0tICAgICAgZW5kaWFuID0gImJlIjsKLS0g ICAgfQotLSAgZWxzZQotLSAgICB7Ci0tICAgICAgYXJjaCA9IGdkYmFyY2hfYmZkX2FyY2hfaW5m byAoZ2RiYXJjaCktPmFyY2hfbmFtZTsKLS0gICAgICBlbmRpYW4gPSBnZGJhcmNoX2J5dGVfb3Jk ZXIgKGdkYmFyY2gpCi0tCSAgICAgICA9PSBCRkRfRU5ESUFOX0JJRyA/ICJiZSIgOiAibGUiOwot LSAgICB9Ci0tCi0tICB4c25wcmludGYgKGFyY2hfcGF0aCwgc2l6ZW9mIChhcmNoX3BhdGgpLCAi JXMvJXMlcyIsIG50b19yb290LCBhcmNoLCBlbmRpYW4pOwotLQotLSAgeHNucHJpbnRmIChidWYs IHNpemVvZiAoYnVmKSwgInNldCBzb2xpYi1hYnNvbHV0ZS1wcmVmaXggJXMiLCBhcmNoX3BhdGgp OwotLSAgZXhlY3V0ZV9jb21tYW5kIChidWYsIDApOwotLX0KLS0KLS1jaGFyICoqCi0tbnRvX3Bh cnNlX3JlZGlyZWN0aW9uIChjaGFyICpwYXJndltdLCBjb25zdCBjaGFyICoqcGluLCBjb25zdCBj aGFyICoqcG91dCwgCi0tCQkgICAgICAgY29uc3QgY2hhciAqKnBlcnIpCi0tewotLSAgY2hhciAq KmFyZ3Y7Ci0tICBjb25zdCBjaGFyICppbiwgKm91dCwgKmVyciwgKnA7Ci0tICBpbnQgYXJnYywg aSwgbjsKLS0KLS0gIGZvciAobiA9IDA7IHBhcmd2W25dOyBuKyspOwotLSAgaWYgKG4gPT0gMCkK LS0gICAgcmV0dXJuIE5VTEw7Ci0tICBpbiA9ICIiOwotLSAgb3V0ID0gIiI7Ci0tICBlcnIgPSAi IjsKLS0KLS0gIGFyZ3YgPSBYQ05FV1ZFQyAoY2hhciAqLCBuICsgMSk7Ci0tICBhcmdjID0gbjsK LS0gIGZvciAoaSA9IDAsIG4gPSAwOyBuIDwgYXJnYzsgbisrKQotLSAgICB7Ci0tICAgICAgcCA9 IHBhcmd2W25dOwotLSAgICAgIGlmICgqcCA9PSAnPicpCi0tCXsKLS0JICBwKys7Ci0tCSAgaWYg KCpwKQotLQkgICAgb3V0ID0gcDsKLS0JICBlbHNlCi0tCSAgICBvdXQgPSBwYXJndlsrK25dOwot LQl9Ci0tICAgICAgZWxzZSBpZiAoKnAgPT0gJzwnKQotLQl7Ci0tCSAgcCsrOwotLQkgIGlmICgq cCkKLS0JICAgIGluID0gcDsKLS0JICBlbHNlCi0tCSAgICBpbiA9IHBhcmd2Wysrbl07Ci0tCX0K LS0gICAgICBlbHNlIGlmICgqcCsrID09ICcyJyAmJiAqcCsrID09ICc+JykKLS0JewotLQkgIGlm ICgqcCA9PSAnJicgJiYgKihwICsgMSkgPT0gJzEnKQotLQkgICAgZXJyID0gb3V0OwotLQkgIGVs c2UgaWYgKCpwKQotLQkgICAgZXJyID0gcDsKLS0JICBlbHNlCi0tCSAgICBlcnIgPSBwYXJndlsr K25dOwotLQl9Ci0tICAgICAgZWxzZQotLQlhcmd2W2krK10gPSBwYXJndltuXTsKLS0gICAgfQot LSAgKnBpbiA9IGluOwotLSAgKnBvdXQgPSBvdXQ7Ci0tICAqcGVyciA9IGVycjsKLS0gIHJldHVy biBhcmd2OwotLX0KLS0KLS1zdGF0aWMgQ09SRV9BRERSCi0tbG1fYWRkciAoY29uc3Qgc29saWIg JnNvKQotLXsKLS0gIGF1dG8gKmxpID0gZ2RiOjpjaGVja2VkX3N0YXRpY19jYXN0PGNvbnN0IGxt X2luZm9fc3ZyNCAqPiAoc28ubG1faW5mby5nZXQgKCkpOwotLQotLSAgcmV0dXJuIGxpLT5sX2Fk ZHI7Ci0tfQotLQotLXN0YXRpYyBDT1JFX0FERFIKLS1udG9fdHJ1bmNhdGVfcHRyIChDT1JFX0FE RFIgYWRkcikKLS17Ci0tICBnZGJhcmNoICpnZGJhcmNoID0gY3VycmVudF9pbmZlcmlvciAoKS0+ YXJjaCAoKTsKLS0gIGlmIChnZGJhcmNoX3B0cl9iaXQgKGdkYmFyY2gpID09IHNpemVvZiAoQ09S RV9BRERSKSAqIDgpCi0tICAgIC8qIFdlIGRvbid0IG5lZWQgdG8gdHJ1bmNhdGUgYW55dGhpbmcs IGFuZCB0aGUgYml0IHR3aWRkbGluZyBiZWxvdwotLSAgICAgICB3aWxsIGZhaWwgZHVlIHRvIG92 ZXJmbG93IHByb2JsZW1zLiAgKi8KLS0gICAgcmV0dXJuIGFkZHI7Ci0tICBlbHNlCi0tICAgIHJl dHVybiBhZGRyICYgKCgoQ09SRV9BRERSKSAxIDw8IGdkYmFyY2hfcHRyX2JpdCAoZ2RiYXJjaCkp IC0gMSk7Ci0tfQotLQotLXN0YXRpYyBFbGZfSW50ZXJuYWxfUGhkciAqCi0tZmluZF9sb2FkX3Bo ZHIgKGJmZCAqYWJmZCkKLS17Ci0tICBFbGZfSW50ZXJuYWxfUGhkciAqcGhkcjsKLS0gIHVuc2ln bmVkIGludCBpOwotLQotLSAgaWYgKCFlbGZfdGRhdGEgKGFiZmQpKQotLSAgICByZXR1cm4gTlVM TDsKLS0KLS0gIHBoZHIgPSBlbGZfdGRhdGEgKGFiZmQpLT5waGRyOwotLSAgZm9yIChpID0gMDsg aSA8IGVsZl9lbGZoZWFkZXIgKGFiZmQpLT5lX3BobnVtOyBpKyssIHBoZHIrKykKLS0gICAgewot LSAgICAgIGlmIChwaGRyLT5wX3R5cGUgPT0gUFRfTE9BRCAmJiAocGhkci0+cF9mbGFncyAmIFBG X1gpKQotLQlyZXR1cm4gcGhkcjsKLS0gICAgfQotLSAgcmV0dXJuIE5VTEw7Ci0tfQotLQotLXZv aWQKLS1udG9fcmVsb2NhdGVfc2VjdGlvbl9hZGRyZXNzZXMgKHNvbGliICZzbywgdGFyZ2V0X3Nl Y3Rpb24gKnNlYykKLS17Ci0tICAvKiBOZXV0cmlubyB0cmVhdHMgdGhlIGxfYWRkciBiYXNlIGFk ZHJlc3MgZmllbGQgaW4gbGluay5oIGFzIGRpZmZlcmVudCB0aGFuCi0tICAgICB0aGUgYmFzZSBh ZGRyZXNzIGluIHRoZSBTeXN0ZW0gViBBQkkgYW5kIHNvIHRoZSBvZmZzZXQgbmVlZHMgdG8gYmUK LS0gICAgIGNhbGN1bGF0ZWQgYW5kIGFwcGxpZWQgdG8gcmVsb2NhdGlvbnMuICAqLwotLSAgRWxm X0ludGVybmFsX1BoZHIgKnBoZHIgPSBmaW5kX2xvYWRfcGhkciAoc2VjLT50aGVfYmZkX3NlY3Rp b24tPm93bmVyKTsKLS0gIHVuc2lnbmVkIHZhZGRyID0gcGhkciA/IHBoZHItPnBfdmFkZHIgOiAw OwotLQotLSAgc2VjLT5hZGRyID0gbnRvX3RydW5jYXRlX3B0ciAoc2VjLT5hZGRyICsgbG1fYWRk ciAoc28pIC0gdmFkZHIpOwotLSAgc2VjLT5lbmRhZGRyID0gbnRvX3RydW5jYXRlX3B0ciAoc2Vj LT5lbmRhZGRyICsgbG1fYWRkciAoc28pIC0gdmFkZHIpOwotLX0KLS0KLS0vKiBUaGlzIGlzIGNo ZWF0aW5nIGEgYml0IGJlY2F1c2Ugb3VyIGxpbmtlciBjb2RlIGlzIGluIGxpYmMuc28uICBJZiB3 ZQotLSAgIGV2ZXIgaW1wbGVtZW50IGxhenkgbGlua2luZywgdGhpcyBtYXkgbmVlZCB0byBiZSBy ZS1leGFtaW5lZC4gICovCi0taW50Ci0tbnRvX2luX2R5bnN5bV9yZXNvbHZlX2NvZGUgKENPUkVf QUREUiBwYykKLS17Ci0tICBpZiAoaW5fcGx0X3NlY3Rpb24gKHBjKSkKLS0gICAgcmV0dXJuIDE7 Ci0tICByZXR1cm4gMDsKLS19Ci0tCi0tdm9pZAotLW50b19kdW1teV9zdXBwbHlfcmVnc2V0IChz dHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLCBjaGFyICpyZWdzKQotLXsKLS0gIC8qIERvIG5vdGhp bmcuICAqLwotLX0KLS0KLS1zdGF0aWMgdm9pZAotLW50b19zbmlmZl9hYmlfbm90ZV9zZWN0aW9u IChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0LCB2b2lkICpvYmopCi0tewotLSAgY29uc3QgY2hh ciAqc2VjdG5hbWU7Ci0tICB1bnNpZ25lZCBpbnQgc2VjdHNpemU7Ci0tICAvKiBCdWZmZXIgaG9s ZGluZyB0aGUgc2VjdGlvbiBjb250ZW50cy4gICovCi0tICBjaGFyICpub3RlOwotLSAgdW5zaWdu ZWQgaW50IG5hbWVsZW47Ci0tICBjb25zdCBjaGFyICpuYW1lOwotLSAgY29uc3QgdW5zaWduZWQg c2l6ZW9mX0VsZl9OaGRyID0gMTI7Ci0tCi0tICBzZWN0bmFtZSA9IGJmZF9zZWN0aW9uX25hbWUg KHNlY3QpOwotLSAgc2VjdHNpemUgPSBiZmRfc2VjdGlvbl9zaXplIChzZWN0KTsKLS0KLS0gIGlm IChzZWN0c2l6ZSA+IDEyOCkKLS0gICAgc2VjdHNpemUgPSAxMjg7Ci0tCi0tICBpZiAoc2VjdG5h bWUgIT0gTlVMTCAmJiBzdHJzdHIgKHNlY3RuYW1lLCBRTlhfSU5GT19TRUNUX05BTUUpICE9IE5V TEwpCi0tICAgICooZW51bSBnZGJfb3NhYmkgKikgb2JqID0gR0RCX09TQUJJX1FOWE5UTzsKLS0g IGVsc2UgaWYgKHNlY3RuYW1lICE9IE5VTEwgJiYgc3Ryc3RyIChzZWN0bmFtZSwgIm5vdGUiKSAh PSBOVUxMCi0tCSAgICYmIHNlY3RzaXplID4gc2l6ZW9mX0VsZl9OaGRyKQotLSAgICB7Ci0tICAg ICAgbm90ZSA9IFhORVdWRUMgKGNoYXIsIHNlY3RzaXplKTsKLS0gICAgICBiZmRfZ2V0X3NlY3Rp b25fY29udGVudHMgKGFiZmQsIHNlY3QsIG5vdGUsIDAsIHNlY3RzaXplKTsKLS0gICAgICBuYW1l bGVuID0gKHVuc2lnbmVkIGludCkgYmZkX2hfZ2V0XzMyIChhYmZkLCBub3RlKTsKLS0gICAgICBu YW1lID0gbm90ZSArIHNpemVvZl9FbGZfTmhkcjsKLS0gICAgICBpZiAoc2VjdHNpemUgPj0gbmFt ZWxlbiArIHNpemVvZl9FbGZfTmhkcgotLQkgICYmIG5hbWVsZW4gPT0gc2l6ZW9mIChRTlhfTk9U RV9OQU1FKQotLQkgICYmIDAgPT0gc3RyY21wIChuYW1lLCBRTlhfTk9URV9OQU1FKSkKLS0JKihl bnVtIGdkYl9vc2FiaSAqKSBvYmogPSBHREJfT1NBQklfUU5YTlRPOwotLQotLSAgICAgIFhERUxF VEVWRUMgKG5vdGUpOwotLSAgICB9Ci0tfQotLQotLWVudW0gZ2RiX29zYWJpCi0tbnRvX2VsZl9v c2FiaV9zbmlmZmVyIChiZmQgKmFiZmQpCi0tewotLSAgZW51bSBnZGJfb3NhYmkgb3NhYmkgPSBH REJfT1NBQklfVU5LTk9XTjsKLS0KLS0gIGJmZF9tYXBfb3Zlcl9zZWN0aW9ucyAoYWJmZCwKLS0J CQkgbnRvX3NuaWZmX2FiaV9ub3RlX3NlY3Rpb24sCi0tCQkJICZvc2FiaSk7Ci0tCi0tICByZXR1 cm4gb3NhYmk7Ci0tfQotLQotLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbnRvX3RocmVhZF9z dGF0ZV9zdHJbXSA9Ci0tewotLSAgIkRFQUQiLAkJLyogMCAgMHgwMCAqLwotLSAgIlJVTk5JTkci LAkvKiAxICAweDAxICovCi0tICAiUkVBRFkiLAkvKiAyICAweDAyICovCi0tICAiU1RPUFBFRCIs CS8qIDMgIDB4MDMgKi8KLS0gICJTRU5EIiwJCS8qIDQgIDB4MDQgKi8KLS0gICJSRUNFSVZFIiwJ LyogNSAgMHgwNSAqLwotLSAgIlJFUExZIiwJLyogNiAgMHgwNiAqLwotLSAgIlNUQUNLIiwJLyog NyAgMHgwNyAqLwotLSAgIldBSVRUSFJFQUQiLAkvKiA4ICAweDA4ICovCi0tICAiV0FJVFBBR0Ui LAkvKiA5ICAweDA5ICovCi0tICAiU0lHU1VTUEVORCIsCS8qIDEwIDB4MGEgKi8KLS0gICJTSUdX QUlUSU5GTyIsCS8qIDExIDB4MGIgKi8KLS0gICJOQU5PU0xFRVAiLAkvKiAxMiAweDBjICovCi0t ICAiTVVURVgiLAkvKiAxMyAweDBkICovCi0tICAiQ09ORFZBUiIsCS8qIDE0IDB4MGUgKi8KLS0g ICJKT0lOIiwJCS8qIDE1IDB4MGYgKi8KLS0gICJJTlRSIiwJCS8qIDE2IDB4MTAgKi8KLS0gICJT RU0iLAkJLyogMTcgMHgxMSAqLwotLSAgIldBSVRDVFgiLAkvKiAxOCAweDEyICovCi0tICAiTkVU X1NFTkQiLAkvKiAxOSAweDEzICovCi0tICAiTkVUX1JFUExZIgkvKiAyMCAweDE0ICovCi0tfTsK LS0KLS1jb25zdCBjaGFyICoKLS1udG9fZXh0cmFfdGhyZWFkX2luZm8gKHN0cnVjdCB0YXJnZXRf b3BzICpzZWxmLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpKQotLXsKLS0gIGlmICh0aSAhPSBOVUxM ICYmIHRpLT5wcml2ICE9IE5VTEwpCi0tICAgIHsKLS0gICAgICBudG9fdGhyZWFkX2luZm8gKnBy aXYgPSBnZXRfbnRvX3RocmVhZF9pbmZvICh0aSk7Ci0tCi0tICAgICAgaWYgKHByaXYtPnN0YXRl IDwgQVJSQVlfU0laRSAobnRvX3RocmVhZF9zdGF0ZV9zdHIpKQotLQlyZXR1cm4gbnRvX3RocmVh ZF9zdGF0ZV9zdHIgW3ByaXYtPnN0YXRlXTsKLS0gICAgfQotLSAgcmV0dXJuICIiOwotLX0KLS0K LS12b2lkCi0tbnRvX2luaXRpYWxpemVfc2lnbmFscyAodm9pZCkKLS17Ci0tICAvKiBXZSB1c2Ug U0lHNDUgZm9yIHB1bHNlcywgb3Igc29tZXRoaW5nLCBzbyBub3N0b3AsIG5vcHJpbnQKLS0gICAg IGFuZCBwYXNzIHRoZW0uICAqLwotLSAgc2lnbmFsX3N0b3BfdXBkYXRlIChnZGJfc2lnbmFsX2Zy b21fbmFtZSAoIlNJRzQ1IiksIDApOwotLSAgc2lnbmFsX3ByaW50X3VwZGF0ZSAoZ2RiX3NpZ25h bF9mcm9tX25hbWUgKCJTSUc0NSIpLCAwKTsKLS0gIHNpZ25hbF9wYXNzX3VwZGF0ZSAoZ2RiX3Np Z25hbF9mcm9tX25hbWUgKCJTSUc0NSIpLCAxKTsKLS0KLS0gIC8qIEJ5IGRlZmF1bHQgd2UgZG9u J3Qgd2FudCB0byBzdG9wIG9uIHRoZXNlIHR3bywgYnV0IHdlIGRvIHdhbnQgdG8gcGFzcy4gICov Ci0tI2lmIGRlZmluZWQoU0lHU0VMRUNUKQotLSAgc2lnbmFsX3N0b3BfdXBkYXRlIChTSUdTRUxF Q1QsIDApOwotLSAgc2lnbmFsX3ByaW50X3VwZGF0ZSAoU0lHU0VMRUNULCAwKTsKLS0gIHNpZ25h bF9wYXNzX3VwZGF0ZSAoU0lHU0VMRUNULCAxKTsKLS0jZW5kaWYKLS0KLS0jaWYgZGVmaW5lZChT SUdQSE9UT04pCi0tICBzaWduYWxfc3RvcF91cGRhdGUgKFNJR1BIT1RPTiwgMCk7Ci0tICBzaWdu YWxfcHJpbnRfdXBkYXRlIChTSUdQSE9UT04sIDApOwotLSAgc2lnbmFsX3Bhc3NfdXBkYXRlIChT SUdQSE9UT04sIDEpOwotLSNlbmRpZgotLX0KLS0KLS0vKiBSZWFkIEFVWFYgZnJvbSBpbml0aWFs X3N0YWNrLiAgKi8KLS1MT05HRVNUCi0tbnRvX3JlYWRfYXV4dl9mcm9tX2luaXRpYWxfc3RhY2sg KENPUkVfQUREUiBpbml0aWFsX3N0YWNrLCBnZGJfYnl0ZSAqcmVhZGJ1ZiwKLS0JCQkJICBMT05H RVNUIGxlbiwgc2l6ZV90IHNpemVvZl9hdXh2X3QpCi0tewotLSAgZ2RiX2J5dGUgdGFyZzMyWzRd OyAvKiBGb3IgMzIgYml0IHRhcmdldCB2YWx1ZXMuICAqLwotLSAgZ2RiX2J5dGUgdGFyZzY0Wzhd OyAvKiBGb3IgNjQgYml0IHRhcmdldCB2YWx1ZXMuICAqLwotLSAgQ09SRV9BRERSIGRhdGFfb2Zz ID0gMDsKLS0gIFVMT05HRVNUIGFuaW50OwotLSAgTE9OR0VTVCBsZW5fcmVhZCA9IDA7Ci0tICBn ZGJfYnl0ZSAqYnVmZjsKLS0gIGVudW0gYmZkX2VuZGlhbiBieXRlX29yZGVyOwotLSAgaW50IHB0 cl9zaXplOwotLQotLSAgaWYgKHNpemVvZl9hdXh2X3QgPT0gMTYpCi0tICAgIHB0cl9zaXplID0g ODsKLS0gIGVsc2UKLS0gICAgcHRyX3NpemUgPSA0OwotLQotLSAgLyogU2tpcCBvdmVyIGFyZ2Ms IGFyZ3YgYW5kIGVudnAuLi4gQ29tbWVudCBmcm9tIGxkZC5jOgotLQotLSAgICAgVGhlIHN0YXJ0 dXAgZnJhbWUgaXMgc2V0LXVwIHNvIHRoYXQgd2UgaGF2ZToKLS0gICAgIGF1eHYKLS0gICAgIE5V TEwKLS0gICAgIC4uLgotLSAgICAgZW52cDIKLS0gICAgIGVudnAxIDwtLS0tLSB2b2lkICpmcmFt ZSArIChhcmdjICsgMikgKiBzaXplb2YoY2hhciAqKQotLSAgICAgTlVMTAotLSAgICAgLi4uCi0t ICAgICBhcmd2MgotLSAgICAgYXJndjEKLS0gICAgIGFyZ2MgIDwtLS0tLS0gdm9pZCAqIGZyYW1l Ci0tCi0tICAgICBPbiBlbnRyeSB0byBsZGQsIGZyYW1lIGdpdmVzIHRoZSBhZGRyZXNzIG9mIGFy Z2Mgb24gdGhlIHN0YWNrLiAgKi8KLS0gIC8qIFJlYWQgYXJnYy4gNCBieXRlcyBvbiBib3RoIDY0 IGFuZCAzMiBiaXQgYXJjaGVzIGFuZCBsdWNraWx5IGxpdHRsZQotLSAgICogZW5kaWFuLiBTbyB3 ZSBqdXN0IHJlYWQgZmlyc3QgNCBieXRlcy4gICovCi0tICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5 IChpbml0aWFsX3N0YWNrICsgZGF0YV9vZnMsIHRhcmczMiwgNCkgIT0gMCkKLS0gICAgcmV0dXJu IDA7Ci0tCi0tICBieXRlX29yZGVyID0gZ2RiYXJjaF9ieXRlX29yZGVyIChjdXJyZW50X2luZmVy aW9yICgpLT5hcmNoICgpKTsKLS0KLS0gIGFuaW50ID0gZXh0cmFjdF91bnNpZ25lZF9pbnRlZ2Vy ICh0YXJnMzIsIHNpemVvZiAodGFyZzMyKSwgYnl0ZV9vcmRlcik7Ci0tCi0tICAvKiBTaXplIG9m IHBvaW50ZXIgaXMgYXNzdW1lZCB0byBiZSA0IGJ5dGVzICgzMiBiaXQgYXJjaC4pICovCi0tICBk YXRhX29mcyArPSAoYW5pbnQgKyAyKSAqIHB0cl9zaXplOyAvKiArIDIgY29tZXMgZnJvbSBhcmdj IGl0c2VsZiBhbmQKLS0JCQkJCQlOVUxMIHRlcm1pbmF0aW5nIHBvaW50ZXIgaW4KLS0JCQkJCQlh cmd2LiAgKi8KLS0KLS0gIC8qIE5vdyBsb29wIG92ZXIgZW52IHRhYmxlOiAgKi8KLS0gIGFuaW50 ID0gMDsKLS0gIHdoaWxlICh0YXJnZXRfcmVhZF9tZW1vcnkgKGluaXRpYWxfc3RhY2sgKyBkYXRh X29mcywgdGFyZzY0LCBwdHJfc2l6ZSkKLS0JID09IDApCi0tICAgIHsKLS0gICAgICBpZiAoZXh0 cmFjdF91bnNpZ25lZF9pbnRlZ2VyICh0YXJnNjQsIHB0cl9zaXplLCBieXRlX29yZGVyKSA9PSAw KQotLQlhbmludCA9IDE7IC8qIEtlZXAgbG9vcGluZyB1bnRpbCBub24tbnVsbCBlbnRyeSBpcyBm b3VuZC4gICovCi0tICAgICAgZWxzZSBpZiAoYW5pbnQpCi0tCWJyZWFrOwotLSAgICAgIGRhdGFf b2ZzICs9IHB0cl9zaXplOwotLSAgICB9Ci0tICBpbml0aWFsX3N0YWNrICs9IGRhdGFfb2ZzOwot LQotLSAgbWVtc2V0IChyZWFkYnVmLCAwLCBsZW4pOwotLSAgYnVmZiA9IHJlYWRidWY7Ci0tICB3 aGlsZSAobGVuX3JlYWQgPD0gbGVuLXNpemVvZl9hdXh2X3QpCi0tICAgIHsKLS0gICAgICBpZiAo dGFyZ2V0X3JlYWRfbWVtb3J5IChpbml0aWFsX3N0YWNrICsgbGVuX3JlYWQsIGJ1ZmYsIHNpemVv Zl9hdXh2X3QpCi0tCSAgPT0gMCkKLS0JewotLQkgIC8qIEJvdGggMzIgYW5kIDY0IGJpdCBzdHJ1 Y3R1cmVzIGhhdmUgaW50IGFzIHRoZSBmaXJzdCBmaWVsZC4gICovCi0tCSAgY29uc3QgVUxPTkdF U1QgYV90eXBlCi0tCSAgICA9IGV4dHJhY3RfdW5zaWduZWRfaW50ZWdlciAoYnVmZiwgc2l6ZW9m ICh0YXJnMzIpLCBieXRlX29yZGVyKTsKLS0KLS0JICBpZiAoYV90eXBlID09IEFUX05VTEwpCi0t CSAgICBicmVhazsKLS0JICBidWZmICs9IHNpemVvZl9hdXh2X3Q7Ci0tCSAgbGVuX3JlYWQgKz0g c2l6ZW9mX2F1eHZfdDsKLS0JfQotLSAgICAgIGVsc2UKLS0JYnJlYWs7Ci0tICAgIH0KLS0gIHJl dHVybiBsZW5fcmVhZDsKLS19Ci0tCi0tLyogUmV0dXJuIG50b19pbmZlcmlvcl9kYXRhIGZvciB0 aGUgZ2l2ZW4gSU5GRVJJT1IuICBJZiBub3QgeWV0IGNyZWF0ZWQsCi0tICAgY29uc3RydWN0IGl0 LiAgKi8KLS0KLS1zdHJ1Y3QgbnRvX2luZmVyaW9yX2RhdGEgKgotLW50b19pbmZlcmlvcl9kYXRh IChzdHJ1Y3QgaW5mZXJpb3IgKmNvbnN0IGluZmVyaW9yKQotLXsKLS0gIHN0cnVjdCBpbmZlcmlv ciAqY29uc3QgaW5mID0gaW5mZXJpb3IgPyBpbmZlcmlvciA6IGN1cnJlbnRfaW5mZXJpb3IgKCk7 Ci0tICBzdHJ1Y3QgbnRvX2luZmVyaW9yX2RhdGEgKmluZl9kYXRhOwotLQotLSAgZ2RiX2Fzc2Vy dCAoaW5mICE9IE5VTEwpOwotLQotLSAgaW5mX2RhdGEgPSBudG9faW5mZXJpb3JfZGF0YV9yZWcu Z2V0IChpbmYpOwotLSAgaWYgKGluZl9kYXRhID09IE5VTEwpCi0tICAgIGluZl9kYXRhID0gbnRv X2luZmVyaW9yX2RhdGFfcmVnLmVtcGxhY2UgKGluZik7Ci0tCi0tICByZXR1cm4gaW5mX2RhdGE7 Ci0tfQotZGlmZiAtLWdpdCBhL2dkYi9udG8tdGRlcC5oIGIvZ2RiL250by10ZGVwLmgKLWRlbGV0 ZWQgZmlsZSBtb2RlIDEwMDY0NAotLS0tIGEvZ2RiL250by10ZGVwLmgKLSsrKyAvZGV2L251bGwK LUBAIC0xLDE5NCArMCwwIEBACi0tLyogbnRvLXRkZXAuaCAtIFFOWCBOZXV0cmlubyB0YXJnZXQg aGVhZGVyLgotLQotLSAgIENvcHlyaWdodCAoQykgMjAwMy0yMDI0IEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgotLQotLSAgIENvbnRyaWJ1dGVkIGJ5IFFOWCBTb2Z0d2FyZSBTeXN0ZW1z IEx0ZC4KLS0KLS0gICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCi0tCi0tICAgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKLS0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQotLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0tICAgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KLS0KLS0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLS0gICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotLSAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLS0g ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotLQotLSAgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlCi0tICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotLQotLSNpZm5kZWYgTlRPX1RERVBfSAotLSNk ZWZpbmUgTlRPX1RERVBfSAotLQotLSNpbmNsdWRlICJzb2xpc3QuaCIKLS0jaW5jbHVkZSAib3Nh YmkuaCIKLS0jaW5jbHVkZSAicmVnc2V0LmgiCi0tI2luY2x1ZGUgImdkYnRocmVhZC5oIgotLSNp bmNsdWRlICJnZGJzdXBwb3J0L2dkYi1jaGVja2VkLXN0YXRpYy1jYXN0LmgiCi0tCi0tLyogVGFy Z2V0IG9wZXJhdGlvbnMgZGVmaW5lZCBmb3IgTmV1dHJpbm8gdGFyZ2V0cyAoPHRhcmdldD4tbnRv LXRkZXAuYykuICAqLwotLQotLXN0cnVjdCBudG9fdGFyZ2V0X29wcwotLXsKLS0vKiBUaGUgQ1BV SU5GTyBmbGFncyBmcm9tIHRoZSByZW1vdGUuICBDdXJyZW50bHkgdXNlZCBieQotLSAgIGkzODYg Zm9yIGZ4c2F2ZSBidXQgZnV0dXJlIHByb29maW5nIG90aGVyIGhvc3RzLgotLSAgIFRoaXMgaXMg aW5pdGlhbGl6ZWQgaW4gcHJvY2ZzX2F0dGFjaCBvciBudG9fc3RhcnRfcmVtb3RlCi0tICAgZGVw ZW5kaW5nIG9uIG91ciBob3N0L3RhcmdldC4gIEl0IHdvdWxkIG9ubHkgYmUgaW52YWxpZAotLSAg IGlmIHdlIHdlcmUgdGFsa2luZyB0byBhbiBvbGRlciBwZGVidWcgd2hpY2ggZGlkbid0IHN1cHBv cnQKLS0gICB0aGUgY3B1aW5mbyBtZXNzYWdlLiAgKi8KLS0gIHVuc2lnbmVkIGNwdWluZm9fZmxh Z3M7Ci0tCi0tLyogVHJ1ZSBpZiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGNwdWluZm8gZnJvbSBy ZW1vdGUuICAqLwotLSAgaW50IGNwdWluZm9fdmFsaWQ7Ci0tCi0tLyogR2l2ZW4gYSByZWdpc3Rl ciwgcmV0dXJuIGFuIGlkIHRoYXQgcmVwcmVzZW50cyB0aGUgTmV1dHJpbm8KLS0gICByZWdzZXQg aXQgY2FtZSBmcm9tLiAgSWYgcmVnID09IC0xIHVwZGF0ZSBhbGwgcmVnc2V0cy4gICovCi0tICBp bnQgKCpyZWdzZXRfaWQpIChpbnQpOwotLQotLSAgdm9pZCAoKnN1cHBseV9ncmVnc2V0KSAoc3Ry dWN0IHJlZ2NhY2hlICosIGNoYXIgKik7Ci0tCi0tICB2b2lkICgqc3VwcGx5X2ZwcmVnc2V0KSAo c3RydWN0IHJlZ2NhY2hlICosIGNoYXIgKik7Ci0tCi0tICB2b2lkICgqc3VwcGx5X2FsdHJlZ3Nl dCkgKHN0cnVjdCByZWdjYWNoZSAqLCBjaGFyICopOwotLQotLS8qIEdpdmVuIGEgcmVnc2V0LCB0 ZWxsIGdkYiBhYm91dCByZWdpc3RlcnMgc3RvcmVkIGluIGRhdGEuICAqLwotLSAgdm9pZCAoKnN1 cHBseV9yZWdzZXQpIChzdHJ1Y3QgcmVnY2FjaGUgKiwgaW50LCBjaGFyICopOwotLQotLS8qIEdp dmVuIGEgcmVnaXN0ZXIgYW5kIHJlZ3NldCwgY2FsY3VsYXRlIHRoZSBvZmZzZXQgaW50byB0aGUg cmVnc2V0Ci0tICAgYW5kIHN0dWZmIGl0IGludG8gdGhlIGxhc3QgYXJndW1lbnQuICBJZiByZWdu byBpcyAtMSwgY2FsY3VsYXRlIHRoZQotLSAgIHNpemUgb2YgdGhlIGVudGlyZSByZWdzZXQuICBS ZXR1cm5zIGxlbmd0aCBvZiBkYXRhLCAtMSBpZiB1bmtub3duCi0tICAgcmVnc2V0LCAwIGlmIHVu a25vd24gcmVnaXN0ZXIuICAqLwotLSAgaW50ICgqcmVnaXN0ZXJfYXJlYSkgKHN0cnVjdCBnZGJh cmNoICosIGludCwgaW50LCB1bnNpZ25lZCAqKTsKLS0KLS0vKiBCdWlsZCB0aGUgTmV1dHJpbm8g cmVnaXN0ZXIgc2V0IGluZm8gaW50byB0aGUgZGF0YSBidWZmZXIuCi0tICAgUmV0dXJuIC0xIGlm IHVua25vd24gcmVnc2V0LCAwIG90aGVyd2lzZS4gICovCi0tICBpbnQgKCpyZWdzZXRfZmlsbCkg KGNvbnN0IHN0cnVjdCByZWdjYWNoZSAqLCBpbnQsIGNoYXIgKik7Ci0tCi0tLyogR2l2ZXMgdGhl IGZldGNoX2xpbmtfbWFwX29mZnNldHMgZnVuY3Rpb24gZXhwb3N1cmUgb3V0c2lkZSBvZgotLSAg IHNvbGliLXN2cjQuYyBzbyB0aGF0IHdlIGNhbiBvdmVycmlkZSByZWxvY2F0ZV9zZWN0aW9uX2Fk ZHJlc3NlcygpLiAgKi8KLS0gIHN0cnVjdCBsaW5rX21hcF9vZmZzZXRzICooKmZldGNoX2xpbmtf bWFwX29mZnNldHMpICh2b2lkKTsKLS0KLS0vKiBVc2VkIGJ5IG50b19lbGZfb3NhYmlfc25pZmZl ciB0byBkZXRlcm1pbmUgaWYgd2UncmUgY29ubmVjdGVkIHRvIGFuCi0tICAgTmV1dHJpbm8gdGFy Z2V0LiAgKi8KLS0gIGVudW0gZ2RiX29zYWJpICgqaXNfbnRvX3RhcmdldCkgKGJmZCAqYWJmZCk7 Ci0tfTsKLS0KLS1leHRlcm4gc3RydWN0IG50b190YXJnZXRfb3BzIGN1cnJlbnRfbnRvX3Rhcmdl dDsKLS0KLS0jZGVmaW5lIG50b19jcHVpbmZvX2ZsYWdzIChjdXJyZW50X250b190YXJnZXQuY3B1 aW5mb19mbGFncykKLS0KLS0jZGVmaW5lIG50b19jcHVpbmZvX3ZhbGlkIChjdXJyZW50X250b190 YXJnZXQuY3B1aW5mb192YWxpZCkKLS0KLS0jZGVmaW5lIG50b19yZWdzZXRfaWQgKGN1cnJlbnRf bnRvX3RhcmdldC5yZWdzZXRfaWQpCi0tCi0tI2RlZmluZSBudG9fc3VwcGx5X2dyZWdzZXQgKGN1 cnJlbnRfbnRvX3RhcmdldC5zdXBwbHlfZ3JlZ3NldCkKLS0KLS0jZGVmaW5lIG50b19zdXBwbHlf ZnByZWdzZXQgKGN1cnJlbnRfbnRvX3RhcmdldC5zdXBwbHlfZnByZWdzZXQpCi0tCi0tI2RlZmlu ZSBudG9fc3VwcGx5X2FsdHJlZ3NldCAoY3VycmVudF9udG9fdGFyZ2V0LnN1cHBseV9hbHRyZWdz ZXQpCi0tCi0tI2RlZmluZSBudG9fc3VwcGx5X3JlZ3NldCAoY3VycmVudF9udG9fdGFyZ2V0LnN1 cHBseV9yZWdzZXQpCi0tCi0tI2RlZmluZSBudG9fcmVnaXN0ZXJfYXJlYSAoY3VycmVudF9udG9f dGFyZ2V0LnJlZ2lzdGVyX2FyZWEpCi0tCi0tI2RlZmluZSBudG9fcmVnc2V0X2ZpbGwgKGN1cnJl bnRfbnRvX3RhcmdldC5yZWdzZXRfZmlsbCkKLS0KLS0jZGVmaW5lIG50b19mZXRjaF9saW5rX21h cF9vZmZzZXRzIFwKLS0oY3VycmVudF9udG9fdGFyZ2V0LmZldGNoX2xpbmtfbWFwX29mZnNldHMp Ci0tCi0tI2RlZmluZSBudG9faXNfbnRvX3RhcmdldCAoY3VycmVudF9udG9fdGFyZ2V0LmlzX250 b190YXJnZXQpCi0tCi0tLyogS2VlcCB0aGlzIGNvbnNpc3RhbnQgd2l0aCBuZXV0cmlubyBzeXNw YWdlLmguICAqLwotLWVudW0KLS17Ci0tICBDUFVUWVBFX1g4NiwKLS0gIENQVVRZUEVfUFBDLAot LSAgQ1BVVFlQRV9NSVBTLAotLSAgQ1BVVFlQRV9TUEFSRSwKLS0gIENQVVRZUEVfQVJNLAotLSAg Q1BVVFlQRV9TSCwKLS0gIENQVVRZUEVfVU5LTk9XTgotLX07Ci0tCi0tZW51bQotLXsKLS0gIE9T VFlQRV9RTlg0LAotLSAgT1NUWVBFX05UTwotLX07Ci0tCi0tLyogVGhlc2UgY29ycmVzcG9uZCB0 byB0aGUgRFNNU0dfKiB2ZXJzaW9ucyBpbiBkc21zZ3MuaC4gICovCi0tZW51bQotLXsKLS0gIE5U T19SRUdfR0VORVJBTCwKLS0gIE5UT19SRUdfRkxPQVQsCi0tICBOVE9fUkVHX1NZU1RFTSwKLS0g IE5UT19SRUdfQUxULAotLSAgTlRPX1JFR19FTkQKLS19OwotLQotLXR5cGVkZWYgY2hhciBxbnhf cmVnNjRbOF07Ci0tCi0tdHlwZWRlZiBzdHJ1Y3QgX2RlYnVnX3JlZ3MKLS17Ci0tICBxbnhfcmVn NjQgcGFkZGluZ1sxMDI0XTsKLS19IG50b19yZWdzZXRfdDsKLS0KLS1zdHJ1Y3QgbnRvX3RocmVh ZF9pbmZvIDogcHVibGljIHByaXZhdGVfdGhyZWFkX2luZm8KLS17Ci0tICBzaG9ydCB0aWQgPSAw OwotLSAgdW5zaWduZWQgY2hhciBzdGF0ZSA9IDA7Ci0tICB1bnNpZ25lZCBjaGFyIGZsYWdzID0g MDsKLS0gIHN0ZDo6c3RyaW5nIG5hbWU7Ci0tfTsKLS0KLS1zdGF0aWMgaW5saW5lIG50b190aHJl YWRfaW5mbyAqCi0tZ2V0X250b190aHJlYWRfaW5mbyAodGhyZWFkX2luZm8gKnRocmVhZCkKLS17 Ci0tICByZXR1cm4gZ2RiOjpjaGVja2VkX3N0YXRpY19jYXN0PG50b190aHJlYWRfaW5mbyAqPiAo dGhyZWFkLT5wcml2LmdldCAoKSk7Ci0tfQotLQotLS8qIFBlci1pbmZlcmlvciBkYXRhLCBjb21t b24gZm9yIGJvdGggcHJvY2ZzIGFuZCByZW1vdGUuICAqLwotLXN0cnVjdCBudG9faW5mZXJpb3Jf ZGF0YQotLXsKLS0gIC8qIExhc3Qgc3RvcHBlZCBmbGFncyByZXN1bHQgZnJvbSB3YWl0IGZ1bmN0 aW9uICovCi0tICB1bnNpZ25lZCBpbnQgc3RvcHBlZF9mbGFncyA9IDA7Ci0tCi0tICAvKiBMYXN0 IGtub3duIHN0b3BwZWQgUEMgKi8KLS0gIENPUkVfQUREUiBzdG9wcGVkX3BjID0gMDsKLS19Owot LQotLS8qIEdlbmVyaWMgZnVuY3Rpb25zIGluIG50by10ZGVwLmMuICAqLwotLQotLXZvaWQgbnRv X2luaXRfc29saWJfYWJzb2x1dGVfcHJlZml4ICh2b2lkKTsKLS0KLS1jaGFyICoqbnRvX3BhcnNl X3JlZGlyZWN0aW9uIChjaGFyICpzdGFydF9hcmd2W10sIGNvbnN0IGNoYXIgKippbiwKLS0JCQkg ICAgICBjb25zdCBjaGFyICoqb3V0LCBjb25zdCBjaGFyICoqZXJyKTsKLS0KLS12b2lkIG50b19y ZWxvY2F0ZV9zZWN0aW9uX2FkZHJlc3NlcyAoc29saWIgJiwgdGFyZ2V0X3NlY3Rpb24gKik7Ci0t Ci0taW50IG50b19tYXBfYXJjaF90b19jcHV0eXBlIChjb25zdCBjaGFyICopOwotLQotLWludCBu dG9fZmluZF9hbmRfb3Blbl9zb2xpYiAoY29uc3QgY2hhciAqLCB1bnNpZ25lZCwKLS0JCQkgICAg IGdkYjo6dW5pcXVlX3htYWxsb2NfcHRyPGNoYXI+ICopOwotLQotLWVudW0gZ2RiX29zYWJpIG50 b19lbGZfb3NhYmlfc25pZmZlciAoYmZkICphYmZkKTsKLS0KLS12b2lkIG50b19pbml0aWFsaXpl X3NpZ25hbHMgKHZvaWQpOwotLQotLS8qIER1bW15IGZ1bmN0aW9uIGZvciBpbml0aWFsaXppbmcg bnRvX3RhcmdldF9vcHMgb24gdGFyZ2V0cyB3aGljaCBkbwotLSAgIG5vdCBkZWZpbmUgYSBwYXJ0 aWN1bGFyIHJlZ3NldC4gICovCi0tdm9pZCBudG9fZHVtbXlfc3VwcGx5X3JlZ3NldCAoc3RydWN0 IHJlZ2NhY2hlICpyZWdjYWNoZSwgY2hhciAqcmVncyk7Ci0tCi0taW50IG50b19pbl9keW5zeW1f cmVzb2x2ZV9jb2RlIChDT1JFX0FERFIgcGMpOwotLQotLWNvbnN0IGNoYXIgKm50b19leHRyYV90 aHJlYWRfaW5mbyAoc3RydWN0IHRhcmdldF9vcHMgKnNlbGYsIHN0cnVjdCB0aHJlYWRfaW5mbyAq KTsKLS0KLS1MT05HRVNUIG50b19yZWFkX2F1eHZfZnJvbV9pbml0aWFsX3N0YWNrIChDT1JFX0FE RFIgaW5pdGlhbF9zdGFjaywKLS0JCQkJCSAgZ2RiX2J5dGUgKnJlYWRidWYsCi0tCQkJCQkgIExP TkdFU1QgbGVuLCBzaXplX3Qgc2l6ZW9mX2F1eHZfdCk7Ci0tCi0tc3RydWN0IG50b19pbmZlcmlv cl9kYXRhICpudG9faW5mZXJpb3JfZGF0YSAoc3RydWN0IGluZmVyaW9yICppbmYpOwotLQotLSNl bmRpZiAvKiBOVE9fVERFUF9IICovCi1kaWZmIC0tZ2l0IGEvZ2RiL29zYWJpLmMgYi9nZGIvb3Nh YmkuYwotLS0tIGEvZ2RiL29zYWJpLmMKLSsrKyBiL2dkYi9vc2FiaS5jCi1AQCAtNzAsNyArNzAs NiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9zYWJpX25hbWVzIGdkYl9vc2FiaV9uYW1lc1tdID0K LSAgIHsgIk9wZW5CU0QiLCBOVUxMIH0sCi0gICB7ICJXaW5kb3dzQ0UiLCBOVUxMIH0sCi0gICB7 ICJESkdQUCIsIE5VTEwgfSwKLS0gIHsgIlFOWC1OZXV0cmlubyIsIE5VTEwgfSwKLSAgIHsgIkN5 Z3dpbiIsIE5VTEwgfSwKLSAgIHsgIldpbmRvd3MiLCBOVUxMIH0sCi0gICB7ICJBSVgiLCBOVUxM IH0sCi1kaWZmIC0tZ2l0IGEvZ2RiL29zYWJpLmggYi9nZGIvb3NhYmkuaAotLS0tIGEvZ2RiL29z YWJpLmgKLSsrKyBiL2dkYi9vc2FiaS5oCi1AQCAtMzUsNyArMzUsNiBAQCBlbnVtIGdkYl9vc2Fi aQotICAgR0RCX09TQUJJX09QRU5CU0QsCi0gICBHREJfT1NBQklfV0lOQ0UsCi0gICBHREJfT1NB QklfR08zMiwKLS0gIEdEQl9PU0FCSV9RTlhOVE8sCi0gICBHREJfT1NBQklfQ1lHV0lOLAotICAg R0RCX09TQUJJX1dJTkRPV1MsCi0gICBHREJfT1NBQklfQUlYLAotZGlmZiAtLWdpdCBhL2dkYi90 ZXN0c3VpdGUvbGliL2dkYi5leHAgYi9nZGIvdGVzdHN1aXRlL2xpYi9nZGIuZXhwCi0tLS0gYS9n ZGIvdGVzdHN1aXRlL2xpYi9nZGIuZXhwCi0rKysgYi9nZGIvdGVzdHN1aXRlL2xpYi9nZGIuZXhw Ci1AQCAtODA3OSw3ICs4MDc5LDYgQEAgZ2RiX2NhY2hpbmdfcHJvYyBnZGJfaGFzX2FyZ3YwIHt9 IHsKLSAJICB8fCBbaXN0YXJnZXQgKi13aW5jZS1wZV0gfHwgW2lzdGFyZ2V0ICotKi1taW5ndzMy Y2UqXQotIAkgIHx8IFtpc3RhcmdldCAqLSotb3NmKl0KLSAJICB8fCBbaXN0YXJnZXQgKi0qLWRp Y29zKl0KLS0JICB8fCBbaXN0YXJnZXQgKi0qLW50bypdCi0gCSAgfHwgW2lzdGFyZ2V0ICotKi0q dm1zKl0KLSAJICB8fCBbaXN0YXJnZXQgKi0qLWx5bngqMTc4XSkgfSB7Ci0gCWZhaWwgImFyZ3Zc WzBcXSBzaG91bGQgYmUgYXZhaWxhYmxlIG9uIHRoaXMgdGFyZ2V0IgoKZGlmZiAtLWdpdCBhL2dk Yi5zcGVjIGIvZ2RiLnNwZWMKaW5kZXggY2M1ZDU4MC4uZGIzYmI3YyAxMDA2NDQKLS0tIGEvZ2Ri LnNwZWMKKysrIGIvZ2RiLnNwZWMKQEAgLTQxLDExICs0MSwxMSBAQCBOYW1lOiAlez9zY2xfcHJl Zml4fWdkYgogIyBTZWUgdGltZXN0YW1wIG9mIHNvdXJjZSBnbnVsaWIgaW5zdGFsbGVkIGludG8g Z251bGliLyAuCiAlZ2xvYmFsIHNuYXBnbnVsaWIgMjAyMjA1MDEKICVnbG9iYWwgdGFybmFtZSBn ZGItJXt2ZXJzaW9ufQotVmVyc2lvbjogMTUuMgorVmVyc2lvbjogMTYuMSAKIAogIyBUaGUgcmVs ZWFzZSBhbHdheXMgY29udGFpbnMgYSBsZWFkaW5nIHJlc2VydmVkIG51bWJlciwgc3RhcnQgaXQg YXQgMS4KICMgYHVwc3RyZWFtJyBpcyBub3QgYSBwYXJ0IG9mIGBuYW1lJyB0byBzdGF5IGZ1bGx5 IHJwbSBkZXBlbmRlbmNpZXMgY29tcGF0aWJsZSBmb3IgdGhlIHRlc3RpbmcuCi1SZWxlYXNlOiA3 JXs/ZGlzdH0KK1JlbGVhc2U6IDElez9kaXN0fQogCiBMaWNlbnNlOiBHUEwtMy4wLW9yLWxhdGVy IEFORCBCU0QtMy1DbGF1c2UgQU5EIEZTRkFQIEFORCBMR1BMLTIuMS1vci1sYXRlciBBTkQgR1BM LTIuMC1vci1sYXRlciBBTkQgTEdQTC0yLjAtb3ItbGF0ZXIgQU5EIExpY2Vuc2VSZWYtRmVkb3Jh LVB1YmxpYy1Eb21haW4gQU5EIEdGREwtMS4zLW9yLWxhdGVyIEFORCBMR1BMLTIuMC1vci1sYXRl ciBXSVRIIEdDQy1leGNlcHRpb24tMi4wIEFORCBHUEwtMy4wLW9yLWxhdGVyIFdJVEggR0NDLWV4 Y2VwdGlvbi0zLjEgQU5EIEdQTC0yLjAtb3ItbGF0ZXIgV0lUSCBHTlUtY29tcGlsZXItZXhjZXB0 aW9uCiAjIERvIG5vdCBwcm92aWRlIFVSTCBmb3Igc25hcHNob3RzIGFzIHRoZSBmaWxlIGxhc3Rz IHRoZXJlIG9ubHkgZm9yIDIgZGF5cy4KQEAgLTEzNSwxMCArMTM1LDYgQEAgQnVpbGRSZXF1aXJl czogZ2NjLWMrKwogIz1wdXNoK2phbgogU291cmNlMjogZ2RiLW9ycGhhbnJpcHBlci5jCiAKLSMg TWFuIHBhZ2UgZm9yIGdzdGFjaygxKS4KLSM9cHVzaCtqYW4KLVNvdXJjZTM6IGdkYi1nc3RhY2su bWFuCi0KICMgL2V0Yy9nZGJpbml0IChmcm9tIERlYmlhbiBidXQgd2l0aCBGZWRvcmEgY29tcGxp YW50IGxvY2F0aW9uKS4KICM9ZmVkb3JhCiBTb3VyY2U0OiBnZGJpbml0CkBAIC04MDIsNyArNzk4 LDYgQEAgcm0gLXJmICRSUE1fQlVJTERfUk9PVC8le19saWJkaXJ9L2xpYntiZmQqLG9wY29kZXMq LGliZXJ0eSosY3RmKixzZnJhbWUqfQogCiAjIHBzdGFjayBvYnNvbGV0aW9uCiAKLWNwIC1wICV7 U09VUkNFM30gJFJQTV9CVUlMRF9ST09UJXtfbWFuZGlyfS9tYW4xL2dzdGFjay4xCiBsbiAtcyBn c3RhY2suMSAkUlBNX0JVSUxEX1JPT1Qle19tYW5kaXJ9L21hbjEvcHN0YWNrLjEKIGxuIC1zIGdz dGFjayAkUlBNX0JVSUxEX1JPT1Qle19iaW5kaXJ9L3BzdGFjawogCkBAIC05MjgsNiArOTIzLDEz IEBAIGZpCiAjIGVuZGlmIHNjbAogCiAlY2hhbmdlbG9nCisqIFRodSBKYW4gMjMgMjAyNSBBbGV4 YW5kcmEgSMOhamtvdsOhIDxhaGFqa292YUByZWRoYXQuY29tPiAtIDE2LjEtMQorLSBSZWJhc2Ug dG8gRlNGIEdEQiAxNi4xLgorICBEcm9wcGVkOgorICBnZGItYmFja3BvcnQtYnVpbGRpZC1yZWxh dGVkLWNoYW5nZXMucGF0Y2gKKyAgZ2RiLWNhdGNocG9pbnQtcmUtc2V0LnBhdGNoCisgIGdkYi1y ZW1vdmUtcW54LW5ldXRyaW5vLXN1cHBvcnQucGF0Y2gKKwogKiBUaHUgSmFuIDIzIDIwMjUgQWxl eGFuZHJhIEjDoWprb3bDoSA8YWhhamtvdmFAcmVkaGF0LmNvbT4KIC0gUmVtb3ZlIHVwc3RyZWFt ZWQgZ2RiLTYuMy1nc3RhY2stMjAwNTA0MTEucGF0Y2guCiAKCmRpZmYgLS1naXQgYS9zb3VyY2Vz IGIvc291cmNlcwppbmRleCA4OTA0NmYwLi41MTFhMTg5IDEwMDY0NAotLS0gYS9zb3VyY2VzCisr KyBiL3NvdXJjZXMKQEAgLTEgKzEgQEAKLVNIQTUxMiAoZ2RiLTE1LjIudGFyLnh6KSA9IDYyNDAw N2RlY2ViNWIxNWJhODljMDcyNTg4M2QxYTY5OWZhNDY3MTRlZjMwODg3ZjNkMDE2NWUxN2M1ZDY1 ZDYzNDY3MTc0MGExMzVhYTY5ZTQzN2Q5MTYyMThhYmIwOGNmYTJhMzhlZDMwOWZmMTlkNDhmNTFk YTU2YjJhOGJhCitTSEE1MTIgKGdkYi0xNi4xLnRhci54eikgPSAxN2IzMjJmZGUwNjU1YTg0OTUw Njg1MWM4NzlhYmE5YWQxZjhiZmVlODA0YjkwMGVmYzcxODgwNjA5MWJlYzc1NTExMzgzYmQ0ZDYz MmI4YjMyYTMyZWYyMDcyMzMzMzE1ODE1MDExNTdkZjE4YThkZjUyOGFiZTZmZjY2NzU3Nwo=