From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 10279 invoked from network); 24 Mar 2023 19:34:18 -0000 Received: from localhost (HELO inbox.vuxu.org) (::1) by localhost with ESMTPUTF8; 24 Mar 2023 19:34:18 -0000 Content-Type: multipart/mixed; boundary="===============1991443572477794327==" MIME-Version: 1.0 Subject: =?utf8?q?=5BPR_PATCH=5D_libspotify_=28+_friends=29=3A_remove=2C_clementine=3A_update_to_1=2E4=2E0rc1-873-g3471134d5=2E?= To: ml@inbox.vuxu.org From: mhmdanas Reply-to: ml@inbox.vuxu.org Message-ID: Date: Fri, 24 Mar 2023 20:34:18 +0100 List-Id: GitHub notification mails are now in MIME to allow UTF8. --===============1991443572477794327== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYSBuZXcgcHVsbCByZXF1ZXN0IGJ5IG1obWRhbmFzIGFnYWluc3QgbWFzdGVyIG9u IHRoZSB2b2lkLXBhY2thZ2VzIHJlcG9zaXRvcnkKCmh0dHBzOi8vZ2l0aHViLmNvbS9taG1kYW5h cy92b2lkLXBhY2thZ2VzIHJlbW92ZS1saWJzcG90aWZ5Cmh0dHBzOi8vZ2l0aHViLmNvbS92b2lk LWxpbnV4L3ZvaWQtcGFja2FnZXMvcHVsbC80Mjk3OQoKbGlic3BvdGlmeSAoKyBmcmllbmRzKTog cmVtb3ZlLCBjbGVtZW50aW5lOiB1cGRhdGUgdG8gMS40LjByYzEtODczLWczNDcxMTM0ZDUuCgo8 IS0tIFVuY29tbWVudCByZWxldmFudCBzZWN0aW9ucyBhbmQgZGVsZXRlIG9wdGlvbnMgd2hpY2gg YXJlIG5vdCBhcHBsaWNhYmxlIC0tPgoKIyMjIyBUZXN0aW5nIHRoZSBjaGFuZ2VzCi0gSSB0ZXN0 ZWQgdGhlIGNoYW5nZXMgaW4gdGhpcyBQUjogKipicmllZmx5KiogKHRlc3RlZCBDbGVtZW50aW5l IGFuZCB0aGF0IHJlbW92ZWQtcGFja2FnZXMgYWN0dWFsbHkgcmVtb3ZlcyB0aGUgcGFja2FnZXMg SSBhZGRlZCkKCkZpeGVzICM0MjgwOS4KCjwhLS0KIyMjIyBOZXcgcGFja2FnZQotIFRoaXMgbmV3 IHBhY2thZ2UgY29uZm9ybXMgdG8gdGhlIFtwYWNrYWdlIHJlcXVpcmVtZW50c10oaHR0cHM6Ly9n aXRodWIuY29tL3ZvaWQtbGludXgvdm9pZC1wYWNrYWdlcy9ibG9iL21hc3Rlci9DT05UUklCVVRJ TkcubWQjcGFja2FnZS1yZXF1aXJlbWVudHMpOiAqKllFUyoqfCoqTk8qKgotLT4KCjwhLS0gTm90 ZTogSWYgdGhlIGJ1aWxkIGlzIGxpa2VseSB0byB0YWtlIG1vcmUgdGhhbiAyIGhvdXJzLCBwbGVh c2UgYWRkIGNpIHNraXAgdGFnIGFzIGRlc2NyaWJlZCBpbgpodHRwczovL2dpdGh1Yi5jb20vdm9p ZC1saW51eC92b2lkLXBhY2thZ2VzL2Jsb2IvbWFzdGVyL0NPTlRSSUJVVElORy5tZCNjb250aW51 b3VzLWludGVncmF0aW9uCmFuZCB0ZXN0IGF0IGxlYXN0IG9uZSBuYXRpdmUgYnVpbGQgYW5kLCBp ZiBzdXBwb3J0ZWQsIGF0IGxlYXN0IG9uZSBjcm9zcyBidWlsZC4KSWdub3JlIHRoaXMgc2VjdGlv biBpZiB0aGlzIFBSIGlzIG5vdCBza2lwcGluZyBDSS4KLS0+CjwhLS0KIyMjIyBMb2NhbCBidWls ZCB0ZXN0aW5nCi0gSSBidWlsdCB0aGlzIFBSIGxvY2FsbHkgZm9yIG15IG5hdGl2ZSBhcmNoaXRl Y3R1cmUsIChBUkNILUxJQkMpCi0gSSBidWlsdCB0aGlzIFBSIGxvY2FsbHkgZm9yIHRoZXNlIGFy Y2hpdGVjdHVyZXMgKGlmIHN1cHBvcnRlZC4gbWFyayBjcm9zc2J1aWxkcyk6CiAgLSBhYXJjaDY0 LW11c2wKICAtIGFybXY3bAogIC0gYXJtdjZsLW11c2wKLS0+CgoKQSBwYXRjaCBmaWxlIGZyb20g aHR0cHM6Ly9naXRodWIuY29tL3ZvaWQtbGludXgvdm9pZC1wYWNrYWdlcy9wdWxsLzQyOTc5LnBh dGNoIGlzIGF0dGFjaGVk --===============1991443572477794327== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-remove-libspotify-42979.patch" RnJvbSAxNDRlMjE4YzIwMGQ0OTEzODJmNTVjNzFkODE4YmE3MTQyM2MyYmQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBtaG1kYW5hcyA8dHJpYWxsYXhAdHV0YW5vdGEuY29tPgpEYXRl OiBGcmksIDI0IE1hciAyMDIzIDE5OjEzOjQ5ICswMDAwClN1YmplY3Q6IFtQQVRDSCAxLzVdIG1v cGlkeS1zcG90aWZ5OiByZW1vdmUgcGFja2FnZS4KCi0tLQogc3JjcGtncy9tb3BpZHktc3BvdGlm eS90ZW1wbGF0ZSB8IDE3IC0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTcgZGVs ZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgc3JjcGtncy9tb3BpZHktc3BvdGlmeS90ZW1w bGF0ZQoKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvbW9waWR5LXNwb3RpZnkvdGVtcGxhdGUgYi9zcmNw a2dzL21vcGlkeS1zcG90aWZ5L3RlbXBsYXRlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA4YWI5ZjM2MzM1OTEuLjAwMDAwMDAwMDAwMAotLS0gYS9zcmNwa2dzL21vcGlkeS1zcG90aWZ5 L3RlbXBsYXRlCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIyBUZW1wbGF0ZSBmaWxl IGZvciAnbW9waWR5LXNwb3RpZnknCi1wa2duYW1lPW1vcGlkeS1zcG90aWZ5Ci12ZXJzaW9uPTQu MC4xCi1yZXZpc2lvbj01Ci1hcmNocz0ieDg2XzY0IGk2ODYgYXJtdjV0ZWwgYXJtdjZsIGFybXY3 bCIKLWJ1aWxkX3N0eWxlPXB5dGhvbjMtbW9kdWxlCi1ob3N0bWFrZWRlcGVuZHM9InB5dGhvbjMt c2V0dXB0b29scyIKLW1ha2VkZXBlbmRzPSJweXRob24zLXNldHVwdG9vbHMiCi1kZXBlbmRzPSJt b3BpZHkgcHl0aG9uMy1weXNwb3RpZnkiCi1zaG9ydF9kZXNjPSJNb3BpZHkgZXh0ZW5zaW9uIGZv ciBwbGF5aW5nIG11c2ljIGZyb20gU3BvdGlmeSIKLW1haW50YWluZXI9IlN0YWN5IEhhcnBlciA8 Y29udGFjdEBzdGFjeWhhcnBlci5uZXQ+IgotbGljZW5zZT0iQXBhY2hlLTIuMCIKLWhvbWVwYWdl PSJodHRwczovL2dpdGh1Yi5jb20vbW9waWR5L21vcGlkeS1zcG90aWZ5IgotY2hhbmdlbG9nPSJo dHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW9waWR5L21vcGlkeS1zcG90aWZ5L3Yk e3ZlcnNpb259L0NIQU5HRUxPRy5yc3QiCi1kaXN0ZmlsZXM9IiR7UFlQSV9TSVRFfS9NL01vcGlk eS1TcG90aWZ5L01vcGlkeS1TcG90aWZ5LSR7dmVyc2lvbn0udGFyLmd6IgotY2hlY2tzdW09YWI0 Mzc5MDNiOWZlZTkzMTg2NGQ2MmJhMDNhZjVkMjUxN2RkODQ0ZjRjODQ3NmUxYmEyNmIyODBkYWY0 MDUwOAotcmVwb3NpdG9yeT1ub25mcmVlICMgbGlic3BvdGlmeSBpcyBub25mcmVlCgpGcm9tIGM0 YTQ0ZTc2YWIxNjA3YzNhYTY4ZWJhYTViOWU5NjIyNjE4NDgyMjAgTW9uIFNlcCAxNyAwMDowMDow MCAyMDAxCkZyb206IG1obWRhbmFzIDx0cmlhbGxheEB0dXRhbm90YS5jb20+CkRhdGU6IEZyaSwg MjQgTWFyIDIwMjMgMTk6MTU6MTcgKzAwMDAKU3ViamVjdDogW1BBVENIIDIvNV0gcHl0aG9uMy1w eXNwb3RpZnk6IHJlbW92ZSBwYWNrYWdlLgoKLS0tCiBzcmNwa2dzL3B5dGhvbjMtcHlzcG90aWZ5 L3RlbXBsYXRlIHwgMTYgLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE2IGRlbGV0 aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyY3BrZ3MvcHl0aG9uMy1weXNwb3RpZnkvdGVt cGxhdGUKCmRpZmYgLS1naXQgYS9zcmNwa2dzL3B5dGhvbjMtcHlzcG90aWZ5L3RlbXBsYXRlIGIv c3JjcGtncy9weXRob24zLXB5c3BvdGlmeS90ZW1wbGF0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggNTNlMGZhZjFhMzlmLi4wMDAwMDAwMDAwMDAKLS0tIGEvc3JjcGtncy9weXRob24z LXB5c3BvdGlmeS90ZW1wbGF0ZQorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMgVGVt cGxhdGUgZmlsZSBmb3IgJ3B5dGhvbjMtcHlzcG90aWZ5JwotcGtnbmFtZT1weXRob24zLXB5c3Bv dGlmeQotdmVyc2lvbj0yLjEuMwotcmV2aXNpb249NQotYXJjaHM9Ing4Nl82NCBpNjg2IGFybXY1 dGVsIGFybXY2bCBhcm12N2wiCi1idWlsZF9zdHlsZT1weXRob24zLW1vZHVsZQotaG9zdG1ha2Vk ZXBlbmRzPSJweXRob24zLXNldHVwdG9vbHMgcHl0aG9uMy1jZmZpIHB5dGhvbjMtcHljcGFyc2Vy IgotbWFrZWRlcGVuZHM9InB5dGhvbjMtc2V0dXB0b29scyBweXRob24zLWRldmVsIGxpYnNwb3Rp ZnktZGV2ZWwiCi1kZXBlbmRzPSJweXRob24zLXNldHVwdG9vbHMgcHl0aG9uMy1jZmZpIgotc2hv cnRfZGVzYz0iUHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIFNwb3RpZnkgbXVzaWMgc2VydmljZXMi Ci1tYWludGFpbmVyPSJTdGFjeSBIYXJwZXIgPGNvbnRhY3RAc3RhY3loYXJwZXIubmV0PiIKLWxp Y2Vuc2U9IkFwYWNoZS0yLjAiCi1ob21lcGFnZT0iaHR0cHM6Ly9weXNwb3RpZnkucmVhZHRoZWRv Y3MuaW8vZW4vbGF0ZXN0LyIKLWRpc3RmaWxlcz0iJHtQWVBJX1NJVEV9L3AvcHlzcG90aWZ5L3B5 c3BvdGlmeS0ke3ZlcnNpb259LnRhci5neiIKLWNoZWNrc3VtPTZhZTMxZDhjY2Q3ZTFmMTM4YTgw ZjA4Yzc2NjE3M2IyY2VkMTJkMTk2NzMyZjY4YWVlNGFlMDIzYjdhOWFkMmEKLXJlcG9zaXRvcnk9 Im5vbmZyZWUiICMgbGlic3BvdGlmeSBpcyBub25mcmVlCgpGcm9tIDZkNGE1NmM2MGI2ZTUzNWJi NGVmZjI1NzUyNjllN2M2NTNmMzM5MGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IG1o bWRhbmFzIDx0cmlhbGxheEB0dXRhbm90YS5jb20+CkRhdGU6IEZyaSwgMjQgTWFyIDIwMjMgMTk6 MTU6NTIgKzAwMDAKU3ViamVjdDogW1BBVENIIDMvNV0gbGlic3BvdGlmeTogcmVtb3ZlIHBhY2th Z2UuCgotLS0KIGNvbW1vbi9zaGxpYnMgICAgICAgICAgICAgICB8ICAxIC0KIHNyY3BrZ3MvbGli c3BvdGlmeS1kZXZlbCAgICB8ICAxIC0KIHNyY3BrZ3MvbGlic3BvdGlmeS90ZW1wbGF0ZSB8IDU4 IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwg NjAgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMjAwMDAgc3JjcGtncy9saWJzcG90aWZ5LWRl dmVsCiBkZWxldGUgbW9kZSAxMDA2NDQgc3JjcGtncy9saWJzcG90aWZ5L3RlbXBsYXRlCgpkaWZm IC0tZ2l0IGEvY29tbW9uL3NobGlicyBiL2NvbW1vbi9zaGxpYnMKaW5kZXggYjhkMTYxYzJkOTMy Li5mYmNhZmRkMjEyYTEgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9zaGxpYnMKKysrIGIvY29tbW9uL3No bGlicwpAQCAtMjY3Miw3ICsyNjcyLDYgQEAgbGliYysrYWJpLnNvLjEgbGliY3h4YWJpLTMuOC4w XzEKIGxpYmZhc3Rqc29uLnNvLjQgbGliZmFzdGpzb24tMC45OS4zXzEKIGxpYmRjYWRlYy5zby4w IGRjYWRlYy0wLjIuMF8xCiBsaWJjbWFyay5zby4wIGNtYXJrLTAuMjQuMV8xCi1saWJzcG90aWZ5 LnNvLjEyIGxpYnNwb3RpZnktMTIuMS41MV8xCiBsaWJ2aWRzdGFiLnNvLjEuMSBsaWJ2aWRzdGFi LTEuMS4wXzEKIGxpYnhkby5zby4zIHhkb3Rvb2wtMy4yMDE1MDUwMy4xXzEKIGxpYmFiaWdhaWwu c28uMSBsaWJhYmlnYWlsLTIuMV8xCmRpZmYgLS1naXQgYS9zcmNwa2dzL2xpYnNwb3RpZnktZGV2 ZWwgYi9zcmNwa2dzL2xpYnNwb3RpZnktZGV2ZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCmlu ZGV4IDE4ZWNmOTllOGU5YS4uMDAwMDAwMDAwMDAwCi0tLSBhL3NyY3BrZ3MvbGlic3BvdGlmeS1k ZXZlbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWxpYnNwb3RpZnkKXCBObyBuZXdsaW5l IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmNwa2dzL2xpYnNwb3RpZnkvdGVtcGxhdGUg Yi9zcmNwa2dzL2xpYnNwb3RpZnkvdGVtcGxhdGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDNkZWM2ODdlM2QyNC4uMDAwMDAwMDAwMDAwCi0tLSBhL3NyY3BrZ3MvbGlic3BvdGlmeS90 ZW1wbGF0ZQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSMgVGVtcGxhdGUgZmlsZSBm b3IgJ2xpYnNwb3RpZnknCi1wa2duYW1lPWxpYnNwb3RpZnkKLXJldmVydHM9IjEyLjEuMTAzXzEi Ci12ZXJzaW9uPTEyLjEuNTEKLXJldmlzaW9uPTIKLWFyY2hzPSJ4ODZfNjQgaTY4NiBhcm12NXRl bCBhcm12NmwgYXJtdjdsIgotc2hvcnRfZGVzYz0iU3BvdGlmeSBsaWJyYXJ5IGZvciBidWlsZGlu ZyB5b3VyIG93biBzdHJlYW1pbmcgYXBwcyIKLW1haW50YWluZXI9Im5vYWggPG5zYXd5ZXIxOTkz QGdtYWlsLmNvbT4iCi1saWNlbnNlPSJjdXN0b206UHJvcHJpZXRhcnkiCi1ob21lcGFnZT0iaHR0 cHM6Ly9kZXZlbG9wZXIuc3BvdGlmeS5jb20vdGVjaG5vbG9naWVzL2xpYnNwb3RpZnkvIgotcmVw b3NpdG9yeT0ibm9uZnJlZSIKLV9saWJzcG90aWZ5X21vcGlkeT0iaHR0cHM6Ly9naXRodWIuY29t L21vcGlkeS9saWJzcG90aWZ5LWFyY2hpdmUvcmF3L21hc3RlciIKLQotaWYgWyAiJHtYQlBTX1RB UkdFVF9NQUNISU5FfSIgPSAieDg2XzY0IiBdOyB0aGVuCi0JY2hlY2tzdW09NDNhMTRlMDczMmJh NmFlMzAwNzhmYWMxMDVkMGUyOTk4ZDA0ZDVmNWMzOTZhNDk2ODM4NmJjNGUyMjQ5MTA1OAotCWRp c3RmaWxlcz0iJHtfbGlic3BvdGlmeV9tb3BpZHl9L2xpYnNwb3RpZnktJHt2ZXJzaW9ufS1MaW51 eC14ODZfNjQtcmVsZWFzZS50YXIuZ3oiCi1lbGlmIFsgIiR7WEJQU19UQVJHRVRfTUFDSElORX0i ID0gImk2ODYiIF07IHRoZW4KLQljaGVja3N1bT05NDFhYjRiYTEwYmNkNmVjNGU5NjEyN2FmZDA5 NWEzOWUxMWJjOTU1ZGUwODgyNzM0Yzk3ZTRmNTg4YjE1NWFlCi0JZGlzdGZpbGVzPSIke19saWJz cG90aWZ5X21vcGlkeX0vbGlic3BvdGlmeS0ke3ZlcnNpb259LUxpbnV4LWk2ODYtcmVsZWFzZS50 YXIuZ3oiCi1lbGlmIFsgIiR7WEJQU19UQVJHRVRfTUFDSElORX0iID0gImFybXY3bCIgXTsgdGhl bgotCWNoZWNrc3VtPWFkMjdiNmM1YWVlNTM4MmI2NmIzOWJmZWEzYjE3NTIwNzZiN2FiY2M0NDU5 NzljZTI1YzFlYzlkN2ZmM2FlZGEKLQlkaXN0ZmlsZXM9IiR7X2xpYnNwb3RpZnlfbW9waWR5fS9s aWJzcG90aWZ5LSR7dmVyc2lvbn0tTGludXgtYXJtdjctcmVsZWFzZS50YXIuZ3oiCi1lbGlmIFsg IiR7WEJQU19UQVJHRVRfTUFDSElORX0iID0gImFybXY2bCIgXTsgdGhlbgotCSMgRXZlbiB0aG91 Z2ggdGhlIGxpYnJhcnkgdmVyc2lvbiBpcyBkaWZmZXJlbnQsIHhicHMtc3JjIGJyZWFrcyBpZgot CSMgdGhlIHZlcnNpb25pbmcgb2YgcGFja2FnZXMgYWNyb3NzIGFyY2hzIGlzIG5vdCBjb25zaXN0 ZW50Ci0JX2xpYnZlcnNpb249MTIuMS4xMDMKLQljaGVja3N1bT1kNjU4ZTZjMTk3OGZiNDZjZjMz Mzc2ZWI4MzY3YTUxZDAyNGY0MDE0ZjIxYmVhYzFkZDI2NDUzMmJjYzU0YjI0Ci0JZGlzdGZpbGVz PSIke19saWJzcG90aWZ5X21vcGlkeX0vbGlic3BvdGlmeS0ke19saWJ2ZXJzaW9ufS1MaW51eC1h cm12Ni1iY20yNzA4aGFyZGZwLXJlbGVhc2UudGFyLmd6IgotZWxpZiBbICIke1hCUFNfVEFSR0VU X01BQ0hJTkV9IiA9ICJhcm12NXRlbCIgXTsgdGhlbgotCWNoZWNrc3VtPTRkOTZlZmNiMTQyMzg2 NDY4MzkxN2Y0MGZiNGRmNDgxNDkxMjUwYTc2Y2IyOWJlM2EyMzViMzczMmE2NGZlZmMKLQlkaXN0 ZmlsZXM9IiR7X2xpYnNwb3RpZnlfbW9waWR5fS9saWJzcG90aWZ5LSR7dmVyc2lvbn0tTGludXgt YXJtdjUtcmVsZWFzZS50YXIuZ3oiCi1maQotCi1kb19idWlsZCgpIHsKLQl2c2VkIC1pICdzL2xk Y29uZmlnLy8nIE1ha2VmaWxlCi19Ci0KLWRvX2luc3RhbGwoKSB7Ci0JbWFrZSBwcmVmaXg9JHtE RVNURElSfS91c3IgaW5zdGFsbAotfQotCi1wb3N0X2luc3RhbGwoKSB7Ci0JI0luc3RhbGwgb3Vy IGxpY2Vuc2VzCi0JdmxpY2Vuc2UgbGljZW5zZXMueGh0bWwKLQl2bGljZW5zZSBMSUNFTlNFCi0J I0ZpeCB0aGUgcGtnY29uZmlnIGZpbGUKLQlzZWQgLWkgczpQS0dfUFJFRklYOi91c3I6ZyBsaWIv cGtnY29uZmlnL2xpYnNwb3RpZnkucGMKLX0KLQotbGlic3BvdGlmeS1kZXZlbF9wYWNrYWdlKCkg ewotCXNob3J0X2Rlc2MrPSIgLSBkZXZlbG9wbWVudCBmaWxlcyIKLQlkZXBlbmRzPSIke3NvdXJj ZXBrZ30+PSR7dmVyc2lvbn1fJHtyZXZpc2lvbn0iCi0JcGtnX2luc3RhbGwoKSB7Ci0JCXZtb3Zl IHVzci9pbmNsdWRlCi0JCXZtb3ZlIHVzci9saWIvKi5zbwotCQl2bW92ZSB1c3IvbGliL3BrZ2Nv bmZpZwotCX0KLX0KCkZyb20gYWQ4YmM3Y2Q2YzRiN2YzN2ViNDFiYTAxNWM4YzA5YTAxMTdkZjdi MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogbWhtZGFuYXMgPHRyaWFsbGF4QHR1dGFu b3RhLmNvbT4KRGF0ZTogRnJpLCAyNCBNYXIgMjAyMyAxOToxODowNCArMDAwMApTdWJqZWN0OiBb UEFUQ0ggNC81XSBjbGVtZW50aW5lOiB1cGRhdGUgdG8gMS40LjByYzEtODczLWczNDcxMTM0ZDUu CgotLS0KIHNyY3BrZ3MvY2xlbWVudGluZS1zcG90aWZ5ICAgICAgICAgICAgICAgICAgICB8ICAg IDEgLQogc3JjcGtncy9jbGVtZW50aW5lL3BhdGNoZXMvZ2NjMTEucGF0Y2ggICAgICAgIHwgICA3 MCAtCiBzcmNwa2dzL2NsZW1lbnRpbmUvcGF0Y2hlcy9tdXNsLnBhdGNoICAgICAgICAgfCAgIDIy IC0KIHNyY3BrZ3MvY2xlbWVudGluZS9wYXRjaGVzL3BiX25hbWVzcGFjZS5wYXRjaCB8IDMwMzAg LS0tLS0tLS0tLS0tLS0tLS0KIHNyY3BrZ3MvY2xlbWVudGluZS90ZW1wbGF0ZSAgICAgICAgICAg ICAgICAgICB8ICAgNDIgKy0KIDUgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMzE1 NSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEyMDAwMCBzcmNwa2dzL2NsZW1lbnRpbmUtc3Bv dGlmeQogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyY3BrZ3MvY2xlbWVudGluZS9wYXRjaGVzL2djYzEx LnBhdGNoCiBkZWxldGUgbW9kZSAxMDA2NDQgc3JjcGtncy9jbGVtZW50aW5lL3BhdGNoZXMvbXVz bC5wYXRjaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyY3BrZ3MvY2xlbWVudGluZS9wYXRjaGVzL3Bi X25hbWVzcGFjZS5wYXRjaAoKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvY2xlbWVudGluZS1zcG90aWZ5 IGIvc3JjcGtncy9jbGVtZW50aW5lLXNwb3RpZnkKZGVsZXRlZCBmaWxlIG1vZGUgMTIwMDAwCmlu ZGV4IDQ4NWYyMmI3ZGY4OC4uMDAwMDAwMDAwMDAwCi0tLSBhL3NyY3BrZ3MvY2xlbWVudGluZS1z cG90aWZ5CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotY2xlbWVudGluZQpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvY2xlbWVudGluZS9wYXRjaGVz L2djYzExLnBhdGNoIGIvc3JjcGtncy9jbGVtZW50aW5lL3BhdGNoZXMvZ2NjMTEucGF0Y2gKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NTIzYzdmNWEwNC4uMDAwMDAwMDAwMDAwCi0t LSBhL3NyY3BrZ3MvY2xlbWVudGluZS9wYXRjaGVzL2djYzExLnBhdGNoCisrKyAvZGV2L251bGwK QEAgLTEsNzAgKzAsMCBAQAotRnJvbSBjZmNkMGE5NTZlNjc1ODYyNGZhYjBmZjIwYWVlOWViMDhi M2RmMGIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQotRnJvbTogPT9VVEYtOD9xP1JvYmVydC1B bmRyPUMzPUE5PTIwTWF1Y2hpbj89IDx6ZWJvYi5tQGdtYWlsLmNvbT4KLURhdGU6IFdlZCwgMTYg RGVjIDIwMjAgMjA6MDM6MjYgKzAxMDAKLVN1YmplY3Q6IFtQQVRDSF0gRHJvcCAtc3RkPWMrKzB4 IGFuZCAtVV9fU1RSSUNUX0FOU0lfXwotTUlNRS1WZXJzaW9uOiAxLjAKLUNvbnRlbnQtVHlwZTog dGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAotQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJp dAotCi1UaGlzIHdhcyBjYXVzaW5nIGNvbXBpbGF0aW9uIGZhaWx1cmVzLCBzdGF0aWMgYXNzZXJ0 aW9uIGZhaWxlZCwgd2l0aCBHQ0MgMTEuCi0KLUZpeCAjNjg2NQotCi1TaWduZWQtb2ZmLWJ5OiBS b2JlcnQtQW5kcsOpIE1hdWNoaW4gPHplYm9iLm1AZ21haWwuY29tPgotLS0tCi0gZXh0L2NsZW1l bnRpbmUtc3BvdGlmeWJsb2IvQ01ha2VMaXN0cy50eHQgfCAyICstCi0gZXh0L2NsZW1lbnRpbmUt dGFncmVhZGVyL0NNYWtlTGlzdHMudHh0ICAgfCAyICstCi0gc3JjL0NNYWtlTGlzdHMudHh0ICAg ICAgICAgICAgICAgICAgICAgICAgfCAyICstCi0gdGVzdHMvQ01ha2VMaXN0cy50eHQgICAgICAg ICAgICAgICAgICAgICAgfCAyICstCi0gNCBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyks IDQgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9leHQvY2xlbWVudGluZS1zcG90aWZ5Ymxv Yi9DTWFrZUxpc3RzLnR4dCBiL2V4dC9jbGVtZW50aW5lLXNwb3RpZnlibG9iL0NNYWtlTGlzdHMu dHh0Ci1pbmRleCBlNTM0MmVlNWIzLi42ZmQ1NTFkNTcyIDEwMDY0NAotLS0tIGEvZXh0L2NsZW1l bnRpbmUtc3BvdGlmeWJsb2IvQ01ha2VMaXN0cy50eHQKLSsrKyBiL2V4dC9jbGVtZW50aW5lLXNw b3RpZnlibG9iL0NNYWtlTGlzdHMudHh0Ci1AQCAtNyw3ICs3LDcgQEAgaW5jbHVkZV9kaXJlY3Rv cmllcygke0NNQUtFX1NPVVJDRV9ESVJ9L2V4dC9saWJjbGVtZW50aW5lLXNwb3RpZnlibG9iKQot IGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtDTUFLRV9TT1VSQ0VfRElSfS9leHQvbGliY2xlbWVudGlu ZS1jb21tb24pCi0gaW5jbHVkZV9kaXJlY3Rvcmllcygke0NNQUtFX1NPVVJDRV9ESVJ9L3NyYykK LSAKLS1zZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLVdvdmVybG9hZGVk LXZpcnR1YWwgLVdhbGwgLVduby1zaWduLWNvbXBhcmUgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0 aW9ucyAtV25vLXVudXNlZC1sb2NhbC10eXBlZGVmcyAtV25vLXVudXNlZC1wcml2YXRlLWZpZWxk IC1Xbm8tdW5rbm93bi13YXJuaW5nLW9wdGlvbiAtLXN0ZD1jKysweCAtVV9fU1RSSUNUX0FOU0lf XyIpCi0rc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1Xb3ZlcmxvYWRl ZC12aXJ0dWFsIC1XYWxsIC1Xbm8tc2lnbi1jb21wYXJlIC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJh dGlvbnMgLVduby11bnVzZWQtbG9jYWwtdHlwZWRlZnMgLVduby11bnVzZWQtcHJpdmF0ZS1maWVs ZCAtV25vLXVua25vd24td2FybmluZy1vcHRpb24iKQotIAotIGxpbmtfZGlyZWN0b3JpZXMoJHtT UE9USUZZX0xJQlJBUllfRElSU30pCi0gCi1kaWZmIC0tZ2l0IGEvZXh0L2NsZW1lbnRpbmUtdGFn cmVhZGVyL0NNYWtlTGlzdHMudHh0IGIvZXh0L2NsZW1lbnRpbmUtdGFncmVhZGVyL0NNYWtlTGlz dHMudHh0Ci1pbmRleCA4NTVlMzkwY2ZlLi5hNDhiMDE0NTA0IDEwMDY0NAotLS0tIGEvZXh0L2Ns ZW1lbnRpbmUtdGFncmVhZGVyL0NNYWtlTGlzdHMudHh0Ci0rKysgYi9leHQvY2xlbWVudGluZS10 YWdyZWFkZXIvQ01ha2VMaXN0cy50eHQKLUBAIC03LDcgKzcsNyBAQCBpbmNsdWRlX2RpcmVjdG9y aWVzKCR7Q01BS0VfQklOQVJZX0RJUn0vZXh0L2xpYmNsZW1lbnRpbmUtdGFncmVhZGVyKQotIGlu Y2x1ZGVfZGlyZWN0b3JpZXMoJHtDTUFLRV9TT1VSQ0VfRElSfS9zcmMpCi0gaW5jbHVkZV9kaXJl Y3Rvcmllcygke0NNQUtFX0JJTkFSWV9ESVJ9L3NyYykKLSAKLS1zZXQoQ01BS0VfQ1hYX0ZMQUdT ICIke0NNQUtFX0NYWF9GTEFHU30gLS1zdGQ9YysrMHggLVVfX1NUUklDVF9BTlNJX18iKQotK3Nl dChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSIpCi0gCi0gc2V0KEVYRUNVVEFC TEVfT1VUUFVUX1BBVEggJHtDTUFLRV9CSU5BUllfRElSfSkKLSAKLWRpZmYgLS1naXQgYS9zcmMv Q01ha2VMaXN0cy50eHQgYi9zcmMvQ01ha2VMaXN0cy50eHQKLWluZGV4IDYyN2IyZTdjYjkuLjBi YmM3NzViYTggMTAwNjQ0Ci0tLS0gYS9zcmMvQ01ha2VMaXN0cy50eHQKLSsrKyBiL3NyYy9DTWFr ZUxpc3RzLnR4dAotQEAgLTEsNiArMSw2IEBACi0gCi0gc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01B S0VfQ19GTEFHU30gLVdhbGwiKQotLXNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZM QUdTfSAtV292ZXJsb2FkZWQtdmlydHVhbCAtV2FsbCAtV25vLXNpZ24tY29tcGFyZSAtV25vLWRl cHJlY2F0ZWQtZGVjbGFyYXRpb25zIC1Xbm8tdW51c2VkLWxvY2FsLXR5cGVkZWZzIC1Xbm8tdW51 c2VkLXByaXZhdGUtZmllbGQgLVduby11bmtub3duLXdhcm5pbmctb3B0aW9uIC0tc3RkPWMrKzB4 IC1VX19TVFJJQ1RfQU5TSV9fIikKLStzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9G TEFHU30gLVdvdmVybG9hZGVkLXZpcnR1YWwgLVdhbGwgLVduby1zaWduLWNvbXBhcmUgLVduby1k ZXByZWNhdGVkLWRlY2xhcmF0aW9ucyAtV25vLXVudXNlZC1sb2NhbC10eXBlZGVmcyAtV25vLXVu dXNlZC1wcml2YXRlLWZpZWxkIC1Xbm8tdW5rbm93bi13YXJuaW5nLW9wdGlvbiIpCi0gCi0gb3B0 aW9uKEJVSUxEX1dFUlJPUiAiQnVpbGQgd2l0aCAtV2Vycm9yIiBPTikKLSAKLWRpZmYgLS1naXQg YS90ZXN0cy9DTWFrZUxpc3RzLnR4dCBiL3Rlc3RzL0NNYWtlTGlzdHMudHh0Ci1pbmRleCA0NDc0 ZTdiZTUxLi5mZjU3MWZjMTk5IDEwMDY0NAotLS0tIGEvdGVzdHMvQ01ha2VMaXN0cy50eHQKLSsr KyBiL3Rlc3RzL0NNYWtlTGlzdHMudHh0Ci1AQCAtMSw2ICsxLDYgQEAKLSBjbWFrZV9taW5pbXVt X3JlcXVpcmVkKFZFUlNJT04gMi44LjExKQotIAotLXNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01B S0VfQ1hYX0ZMQUdTfSAtc3RkPWMrKzB4IC1mcGVybWlzc2l2ZSAtV25vLWMrKzExLW5hcnJvd2lu ZyAtVV9fU1RSSUNUX0FOU0lfXyIpCi0rc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhf RkxBR1N9IC1mcGVybWlzc2l2ZSAtV25vLWMrKzExLW5hcnJvd2luZyIpCi0gCi0gaWYoVVNFX1NZ U1RFTV9HTU9DSykKLSAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtHTU9DS19JTkNMVURFX0RJUlN9 ICR7R1RFU1RfSU5DTFVERV9ESVJTfSkKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvY2xlbWVudGluZS9w YXRjaGVzL211c2wucGF0Y2ggYi9zcmNwa2dzL2NsZW1lbnRpbmUvcGF0Y2hlcy9tdXNsLnBhdGNo CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjczODYyMjMxOWUuLjAwMDAwMDAwMDAw MAotLS0gYS9zcmNwa2dzL2NsZW1lbnRpbmUvcGF0Y2hlcy9tdXNsLnBhdGNoCisrKyAvZGV2L251 bGwKQEAgLTEsMjIgKzAsMCBAQAotZGlmZiAtLWdpdCBhL2V4dC9saWJjbGVtZW50aW5lLWNvbW1v bi9jb3JlL2xvZ2dpbmcuY3BwIGIvZXh0L2xpYmNsZW1lbnRpbmUtY29tbW9uL2NvcmUvbG9nZ2lu Zy5jcHAKLWluZGV4IDgwMTJjMGMuLmNlNzdjNzcgMTAwNjQ0Ci0tLS0gYS9leHQvbGliY2xlbWVu dGluZS1jb21tb24vY29yZS9sb2dnaW5nLmNwcAotKysrIGIvZXh0L2xpYmNsZW1lbnRpbmUtY29t bW9uL2NvcmUvbG9nZ2luZy5jcHAKLUBAIC0yMSw3ICsyMSw3IEBACi0gI2luY2x1ZGUgPGN4eGFi aS5oPgotIAotICNpbmNsdWRlIDxRdEdsb2JhbD4KLS0jaWZkZWYgUV9PU19VTklYCi0rI2lmIGRl ZmluZWQgUV9PU19VTklYICYmIGRlZmluZWQgX19HTElCQ19fCi0gI2luY2x1ZGUgPGV4ZWNpbmZv Lmg+Ci0gI2VuZGlmCi0gCi1AQCAtMzE1LDcgKzMxNSw3IEBAIFFTdHJpbmcgRGVtYW5nbGVTeW1i b2woY29uc3QgUVN0cmluZyYgc3ltYm9sKSB7Ci0gfQotIAotIHZvaWQgRHVtcFN0YWNrVHJhY2Uo KSB7Ci0tI2lmZGVmIFFfT1NfVU5JWAotKyNpZiBkZWZpbmVkIFFfT1NfVU5JWCAmJiBkZWZpbmVk IF9fR0xJQkNfXwotICAgdm9pZCogY2FsbHN0YWNrWzEyOF07Ci0gICBpbnQgY2FsbHN0YWNrX3Np emUgPQotICAgICAgIGJhY2t0cmFjZShyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmNhbGxzdGFj ayksIHNpemVvZihjYWxsc3RhY2spKTsKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvY2xlbWVudGluZS9w YXRjaGVzL3BiX25hbWVzcGFjZS5wYXRjaCBiL3NyY3BrZ3MvY2xlbWVudGluZS9wYXRjaGVzL3Bi X25hbWVzcGFjZS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIxZTg1MTIz NDg5Li4wMDAwMDAwMDAwMDAKLS0tIGEvc3JjcGtncy9jbGVtZW50aW5lL3BhdGNoZXMvcGJfbmFt ZXNwYWNlLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzAzMCArMCwwIEBACi1kaWZmIC11ciBl eHQvY2xlbWVudGluZS1zcG90aWZ5YmxvYi9zcG90aWZ5Y2xpZW50LmNwcCBleHQvY2xlbWVudGlu ZS1zcG90aWZ5YmxvYi9zcG90aWZ5Y2xpZW50LmNwcAotLS0tIGEvZXh0L2NsZW1lbnRpbmUtc3Bv dGlmeWJsb2Ivc3BvdGlmeWNsaWVudC5jcHAJMjAyMC0wOS0yMyAyMjozNDowOC4wMDAwMDAwMDAg LTA0MDAKLSsrKyBiL2V4dC9jbGVtZW50aW5lLXNwb3RpZnlibG9iL3Nwb3RpZnljbGllbnQuY3Bw CTIwMjEtMDItMTkgMTI6MDM6NDguMjMzNDczMDIzIC0wNTAwCi1AQCAtNDAsNyArNDAsNyBAQAot IGNvbnN0IGludCBTcG90aWZ5Q2xpZW50OjprV2F2ZUhlYWRlclNpemUgPSA0NDsKLSAKLSBTcG90 aWZ5Q2xpZW50OjpTcG90aWZ5Q2xpZW50KFFPYmplY3QqIHBhcmVudCkKLS0gICAgOiBBYnN0cmFj dE1lc3NhZ2VIYW5kbGVyPHBiOjpzcG90aWZ5OjpNZXNzYWdlPihudWxscHRyLCBwYXJlbnQpLAot KyAgICA6IEFic3RyYWN0TWVzc2FnZUhhbmRsZXI8Y3BiOjpzcG90aWZ5OjpNZXNzYWdlPihudWxs cHRyLCBwYXJlbnQpLAotICAgICAgIGFwaV9rZXlfKFFCeXRlQXJyYXk6OmZyb21CYXNlNjQoa1Nw b3RpZnlBcGlLZXkpKSwKLSAgICAgICBwcm90b2NvbF9zb2NrZXRfKG5ldyBRVGNwU29ja2V0KHRo aXMpKSwKLSAgICAgICBzZXNzaW9uXyhudWxscHRyKSwKLUBAIC0xMTksOCArMTE5LDggQEAKLSAg IFNwb3RpZnlDbGllbnQqIG1lID0KLSAgICAgICByZWludGVycHJldF9jYXN0PFNwb3RpZnlDbGll bnQqPihzcF9zZXNzaW9uX3VzZXJkYXRhKHNlc3Npb24pKTsKLSAgIGNvbnN0IGJvb2wgc3VjY2Vz cyA9IGVycm9yID09IFNQX0VSUk9SX09LOwotLSAgcGI6OnNwb3RpZnk6OkxvZ2luUmVzcG9uc2Vf RXJyb3IgZXJyb3JfY29kZSA9Ci0tICAgICAgcGI6OnNwb3RpZnk6OkxvZ2luUmVzcG9uc2VfRXJy b3JfT3RoZXI7Ci0rICBjcGI6OnNwb3RpZnk6OkxvZ2luUmVzcG9uc2VfRXJyb3IgZXJyb3JfY29k ZSA9Ci0rICAgICAgY3BiOjpzcG90aWZ5OjpMb2dpblJlc3BvbnNlX0Vycm9yX090aGVyOwotIAot ICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgIHFMb2coV2FybmluZykgPDwgIkZhaWxlZCB0byBsb2dp biIgPDwgc3BfZXJyb3JfbWVzc2FnZShlcnJvcik7Ci1AQCAtMTI4LDE2ICsxMjgsMTYgQEAKLSAK LSAgIHN3aXRjaCAoZXJyb3IpIHsKLSAgICAgY2FzZSBTUF9FUlJPUl9CQURfVVNFUk5BTUVfT1Jf UEFTU1dPUkQ6Ci0tICAgICAgZXJyb3JfY29kZSA9IHBiOjpzcG90aWZ5OjpMb2dpblJlc3BvbnNl X0Vycm9yX0JhZFVzZXJuYW1lT3JQYXNzd29yZDsKLSsgICAgICBlcnJvcl9jb2RlID0gY3BiOjpz cG90aWZ5OjpMb2dpblJlc3BvbnNlX0Vycm9yX0JhZFVzZXJuYW1lT3JQYXNzd29yZDsKLSAgICAg ICBicmVhazsKLSAgICAgY2FzZSBTUF9FUlJPUl9VU0VSX0JBTk5FRDoKLS0gICAgICBlcnJvcl9j b2RlID0gcGI6OnNwb3RpZnk6OkxvZ2luUmVzcG9uc2VfRXJyb3JfVXNlckJhbm5lZDsKLSsgICAg ICBlcnJvcl9jb2RlID0gY3BiOjpzcG90aWZ5OjpMb2dpblJlc3BvbnNlX0Vycm9yX1VzZXJCYW5u ZWQ7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgU1BfRVJST1JfVVNFUl9ORUVEU19QUkVNSVVN OgotLSAgICAgIGVycm9yX2NvZGUgPSBwYjo6c3BvdGlmeTo6TG9naW5SZXNwb25zZV9FcnJvcl9V c2VyTmVlZHNQcmVtaXVtOwotKyAgICAgIGVycm9yX2NvZGUgPSBjcGI6OnNwb3RpZnk6OkxvZ2lu UmVzcG9uc2VfRXJyb3JfVXNlck5lZWRzUHJlbWl1bTsKLSAgICAgICBicmVhazsKLSAgICAgZGVm YXVsdDoKLS0gICAgICBlcnJvcl9jb2RlID0gcGI6OnNwb3RpZnk6OkxvZ2luUmVzcG9uc2VfRXJy b3JfT3RoZXI7Ci0rICAgICAgZXJyb3JfY29kZSA9IGNwYjo6c3BvdGlmeTo6TG9naW5SZXNwb25z ZV9FcnJvcl9PdGhlcjsKLSAgICAgICBicmVhazsKLSAgIH0KLSAKLUBAIC0xNjYsNyArMTY2LDcg QEAKLSAgIHFMb2coRGVidWcpIDw8ICJsaWJzcG90aWZ5OiIgPDwgUVN0cmluZzo6ZnJvbVV0Zjgo ZGF0YSkudHJpbW1lZCgpOwotIH0KLSAKLS12b2lkIFNwb3RpZnlDbGllbnQ6OlNlYXJjaChjb25z dCBwYjo6c3BvdGlmeTo6U2VhcmNoUmVxdWVzdCYgcmVxKSB7Ci0rdm9pZCBTcG90aWZ5Q2xpZW50 OjpTZWFyY2goY29uc3QgY3BiOjpzcG90aWZ5OjpTZWFyY2hSZXF1ZXN0JiByZXEpIHsKLSAgIHNw X3NlYXJjaCogc2VhcmNoID0KLSAgICAgICBzcF9zZWFyY2hfY3JlYXRlKHNlc3Npb25fLCByZXEu cXVlcnkoKS5jX3N0cigpLCAwLCByZXEubGltaXQoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAg ICAgIHJlcS5saW1pdF9hbGJ1bSgpLCAwLCAwLCAgLy8gYXJ0aXN0cwotQEAgLTIyMSwxMSArMjIx LDExIEBACi0gCi0gdm9pZCBTcG90aWZ5Q2xpZW50OjpTZW5kU2VhcmNoUmVzcG9uc2Uoc3Bfc2Vh cmNoKiByZXN1bHQpIHsKLSAgIC8vIFRha2UgdGhlIHJlcXVlc3Qgb3V0IG9mIHRoZSBxdWV1ZQot LSAgcGI6OnNwb3RpZnk6OlNlYXJjaFJlcXVlc3QgcmVxID0gcGVuZGluZ19zZWFyY2hlc18udGFr ZShyZXN1bHQpOwotKyAgY3BiOjpzcG90aWZ5OjpTZWFyY2hSZXF1ZXN0IHJlcSA9IHBlbmRpbmdf c2VhcmNoZXNfLnRha2UocmVzdWx0KTsKLSAKLSAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlCi0t ICBwYjo6c3BvdGlmeTo6TWVzc2FnZSBtZXNzYWdlOwotLSAgcGI6OnNwb3RpZnk6OlNlYXJjaFJl c3BvbnNlKiByZXNwb25zZSA9IG1lc3NhZ2UubXV0YWJsZV9zZWFyY2hfcmVzcG9uc2UoKTsKLSsg IGNwYjo6c3BvdGlmeTo6TWVzc2FnZSBtZXNzYWdlOwotKyAgY3BiOjpzcG90aWZ5OjpTZWFyY2hS ZXNwb25zZSogcmVzcG9uc2UgPSBtZXNzYWdlLm11dGFibGVfc2VhcmNoX3Jlc3BvbnNlKCk7Ci0g Ci0gICAqcmVzcG9uc2UtPm11dGFibGVfcmVxdWVzdCgpID0gcmVxOwotIAotQEAgLTI1MCw3ICsy NTAsNyBAQAotICAgUUxpc3Q8c3BfYWxidW1icm93c2UqPiBicm93c2VzID0gcGVuZGluZ19zZWFy Y2hfYWxidW1fYnJvd3Nlc18udGFrZShyZXN1bHQpOwotICAgZm9yIChzcF9hbGJ1bWJyb3dzZSog YnJvd3NlIDogYnJvd3NlcykgewotICAgICBzcF9hbGJ1bSogYWxidW0gPSBzcF9hbGJ1bWJyb3dz ZV9hbGJ1bShicm93c2UpOwotLSAgICBwYjo6c3BvdGlmeTo6QWxidW0qIG1zZyA9IHJlc3BvbnNl LT5hZGRfYWxidW0oKTsKLSsgICAgY3BiOjpzcG90aWZ5OjpBbGJ1bSogbXNnID0gcmVzcG9uc2Ut PmFkZF9hbGJ1bSgpOwotIAotICAgICBDb252ZXJ0QWxidW0oYWxidW0sIG1zZy0+bXV0YWJsZV9t ZXRhZGF0YSgpKTsKLSAgICAgQ29udmVydEFsYnVtQnJvd3NlKGJyb3dzZSwgbXNnLT5tdXRhYmxl X21ldGFkYXRhKCkpOwotQEAgLTI3Miw3ICsyNzIsNyBAQAotICAgc3Bfc2VhcmNoX3JlbGVhc2Uo cmVzdWx0KTsKLSB9Ci0gCi0tdm9pZCBTcG90aWZ5Q2xpZW50OjpNZXNzYWdlQXJyaXZlZChjb25z dCBwYjo6c3BvdGlmeTo6TWVzc2FnZSYgbWVzc2FnZSkgewotK3ZvaWQgU3BvdGlmeUNsaWVudDo6 TWVzc2FnZUFycml2ZWQoY29uc3QgY3BiOjpzcG90aWZ5OjpNZXNzYWdlJiBtZXNzYWdlKSB7Ci0g ICBpZiAobWVzc2FnZS5oYXNfbG9naW5fcmVxdWVzdCgpKSB7Ci0gICAgIExvZ2luKG1lc3NhZ2Uu bG9naW5fcmVxdWVzdCgpKTsKLSAgIH0gZWxzZSBpZiAobWVzc2FnZS5oYXNfbG9hZF9wbGF5bGlz dF9yZXF1ZXN0KCkpIHsKLUBAIC0zMDMsMTYgKzMwMywxNiBAQAotIH0KLSAKLSB2b2lkIFNwb3Rp ZnlDbGllbnQ6OlNldFBsYXliYWNrU2V0dGluZ3MoCi0tICAgIGNvbnN0IHBiOjpzcG90aWZ5OjpQ bGF5YmFja1NldHRpbmdzJiByZXEpIHsKLSsgICAgY29uc3QgY3BiOjpzcG90aWZ5OjpQbGF5YmFj a1NldHRpbmdzJiByZXEpIHsKLSAgIHNwX2JpdHJhdGUgYml0cmF0ZSA9IFNQX0JJVFJBVEVfMzIw azsKLSAgIHN3aXRjaCAocmVxLmJpdHJhdGUoKSkgewotLSAgICBjYXNlIHBiOjpzcG90aWZ5OjpC aXRyYXRlOTZrOgotKyAgICBjYXNlIGNwYjo6c3BvdGlmeTo6Qml0cmF0ZTk2azoKLSAgICAgICBi aXRyYXRlID0gU1BfQklUUkFURV85Nms7Ci0gICAgICAgYnJlYWs7Ci0tICAgIGNhc2UgcGI6OnNw b3RpZnk6OkJpdHJhdGUxNjBrOgotKyAgICBjYXNlIGNwYjo6c3BvdGlmeTo6Qml0cmF0ZTE2MGs6 Ci0gICAgICAgYml0cmF0ZSA9IFNQX0JJVFJBVEVfMTYwazsKLSAgICAgICBicmVhazsKLS0gICAg Y2FzZSBwYjo6c3BvdGlmeTo6Qml0cmF0ZTMyMGs6Ci0rICAgIGNhc2UgY3BiOjpzcG90aWZ5OjpC aXRyYXRlMzIwazoKLSAgICAgICBiaXRyYXRlID0gU1BfQklUUkFURV8zMjBrOwotICAgICAgIGJy ZWFrOwotICAgfQotQEAgLTMyNSwxMiArMzI1LDEyIEBACi0gICBzcF9zZXNzaW9uX3NldF92b2x1 bWVfbm9ybWFsaXphdGlvbihzZXNzaW9uXywgcmVxLnZvbHVtZV9ub3JtYWxpc2F0aW9uKCkpOwot IH0KLSAKLS12b2lkIFNwb3RpZnlDbGllbnQ6OkxvZ2luKGNvbnN0IHBiOjpzcG90aWZ5OjpMb2dp blJlcXVlc3QmIHJlcSkgewotK3ZvaWQgU3BvdGlmeUNsaWVudDo6TG9naW4oY29uc3QgY3BiOjpz cG90aWZ5OjpMb2dpblJlcXVlc3QmIHJlcSkgewotICAgc3BfZXJyb3IgZXJyb3IgPSBzcF9zZXNz aW9uX2NyZWF0ZSgmc3BvdGlmeV9jb25maWdfLCAmc2Vzc2lvbl8pOwotICAgaWYgKGVycm9yICE9 IFNQX0VSUk9SX09LKSB7Ci0gICAgIHFMb2coV2FybmluZykgPDwgIkZhaWxlZCB0byBjcmVhdGUg c2Vzc2lvbiIgPDwgc3BfZXJyb3JfbWVzc2FnZShlcnJvcik7Ci0gICAgIFNlbmRMb2dpbkNvbXBs ZXRlZChmYWxzZSwgc3BfZXJyb3JfbWVzc2FnZShlcnJvciksCi0tICAgICAgICAgICAgICAgICAg ICAgICBwYjo6c3BvdGlmeTo6TG9naW5SZXNwb25zZV9FcnJvcl9PdGhlcik7Ci0rICAgICAgICAg ICAgICAgICAgICAgICBjcGI6OnNwb3RpZnk6OkxvZ2luUmVzcG9uc2VfRXJyb3JfT3RoZXIpOwot ICAgICByZXR1cm47Ci0gICB9Ci0gCi1AQCAtMzQxLDcgKzM0MSw3IEBACi0gICAgIGlmIChlcnJv ciAhPSBTUF9FUlJPUl9PSykgewotICAgICAgIHFMb2coV2FybmluZykgPDwgIlRyaWVkIHRvIHJl bG9naW4gYnV0IG5vIHN0b3JlZCBjcmVkZW50aWFscyI7Ci0gICAgICAgU2VuZExvZ2luQ29tcGxl dGVkKGZhbHNlLCBzcF9lcnJvcl9tZXNzYWdlKGVycm9yKSwKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgcGI6OnNwb3RpZnk6OkxvZ2luUmVzcG9uc2VfRXJyb3JfUmVsb2dpbkZhaWxlZCk7Ci0r ICAgICAgICAgICAgICAgICAgICAgICAgIGNwYjo6c3BvdGlmeTo6TG9naW5SZXNwb25zZV9FcnJv cl9SZWxvZ2luRmFpbGVkKTsKLSAgICAgfQotICAgfSBlbHNlIHsKLSAgICAgc3Bfc2Vzc2lvbl9s b2dpbihzZXNzaW9uXywgcmVxLnVzZXJuYW1lKCkuY19zdHIoKSwgcmVxLnBhc3N3b3JkKCkuY19z dHIoKSwKLUBAIC0zNTIsMTAgKzM1MiwxMCBAQAotIAotIHZvaWQgU3BvdGlmeUNsaWVudDo6U2Vu ZExvZ2luQ29tcGxldGVkKAotICAgICBib29sIHN1Y2Nlc3MsIGNvbnN0IFFTdHJpbmcmIGVycm9y LAotLSAgICBwYjo6c3BvdGlmeTo6TG9naW5SZXNwb25zZV9FcnJvciBlcnJvcl9jb2RlKSB7Ci0t ICBwYjo6c3BvdGlmeTo6TWVzc2FnZSBtZXNzYWdlOwotKyAgICBjcGI6OnNwb3RpZnk6OkxvZ2lu UmVzcG9uc2VfRXJyb3IgZXJyb3JfY29kZSkgewotKyAgY3BiOjpzcG90aWZ5OjpNZXNzYWdlIG1l c3NhZ2U7Ci0gCi0tICBwYjo6c3BvdGlmeTo6TG9naW5SZXNwb25zZSogcmVzcG9uc2UgPSBtZXNz YWdlLm11dGFibGVfbG9naW5fcmVzcG9uc2UoKTsKLSsgIGNwYjo6c3BvdGlmeTo6TG9naW5SZXNw b25zZSogcmVzcG9uc2UgPSBtZXNzYWdlLm11dGFibGVfbG9naW5fcmVzcG9uc2UoKTsKLSAgIHJl c3BvbnNlLT5zZXRfc3VjY2VzcyhzdWNjZXNzKTsKLSAgIHJlc3BvbnNlLT5zZXRfZXJyb3IoRGF0 YUNvbW1hU2l6ZUZyb21RU3RyaW5nKGVycm9yKSk7Ci0gCi1AQCAtNDEyLDggKzQxMiw4IEBACi0g fQotIAotIHZvaWQgU3BvdGlmeUNsaWVudDo6U2VuZFBsYXlsaXN0TGlzdCgpIHsKLS0gIHBiOjpz cG90aWZ5OjpNZXNzYWdlIG1lc3NhZ2U7Ci0tICBwYjo6c3BvdGlmeTo6UGxheWxpc3RzKiByZXNw b25zZSA9IG1lc3NhZ2UubXV0YWJsZV9wbGF5bGlzdHNfdXBkYXRlZCgpOwotKyAgY3BiOjpzcG90 aWZ5OjpNZXNzYWdlIG1lc3NhZ2U7Ci0rICBjcGI6OnNwb3RpZnk6OlBsYXlsaXN0cyogcmVzcG9u c2UgPSBtZXNzYWdlLm11dGFibGVfcGxheWxpc3RzX3VwZGF0ZWQoKTsKLSAKLSAgIHNwX3BsYXls aXN0Y29udGFpbmVyKiBjb250YWluZXIgPSBzcF9zZXNzaW9uX3BsYXlsaXN0Y29udGFpbmVyKHNl c3Npb25fKTsKLSAgIGlmICghY29udGFpbmVyKSB7Ci1AQCAtNDQxLDcgKzQ0MSw3IEBACi0gICAg ICAgY29udGludWU7Ci0gICAgIH0KLSAKLS0gICAgcGI6OnNwb3RpZnk6OlBsYXlsaXN0czo6UGxh eWxpc3QqIG1zZyA9IHJlc3BvbnNlLT5hZGRfcGxheWxpc3QoKTsKLSsgICAgY3BiOjpzcG90aWZ5 OjpQbGF5bGlzdHM6OlBsYXlsaXN0KiBtc2cgPSByZXNwb25zZS0+YWRkX3BsYXlsaXN0KCk7Ci0g ICAgIG1zZy0+c2V0X2luZGV4KGkpOwotICAgICBtc2ctPnNldF9uYW1lKHNwX3BsYXlsaXN0X25h bWUocGxheWxpc3QpKTsKLSAgICAgc3BfdXNlciogcGxheWxpc3Rfb3duZXIgPSBzcF9wbGF5bGlz dF9vd25lcihwbGF5bGlzdCk7Ci1AQCAtNDcwLDE5ICs0NzAsMTkgQEAKLSAgIFNlbmRNZXNzYWdl KG1lc3NhZ2UpOwotIH0KLSAKLS1zcF9wbGF5bGlzdCogU3BvdGlmeUNsaWVudDo6R2V0UGxheWxp c3QocGI6OnNwb3RpZnk6OlBsYXlsaXN0VHlwZSB0eXBlLAotK3NwX3BsYXlsaXN0KiBTcG90aWZ5 Q2xpZW50OjpHZXRQbGF5bGlzdChjcGI6OnNwb3RpZnk6OlBsYXlsaXN0VHlwZSB0eXBlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNlcl9pbmRleCkgewot ICAgc3BfcGxheWxpc3QqIHBsYXlsaXN0ID0gbnVsbHB0cjsKLSAgIHN3aXRjaCAodHlwZSkgewot LSAgICBjYXNlIHBiOjpzcG90aWZ5OjpJbmJveDoKLSsgICAgY2FzZSBjcGI6OnNwb3RpZnk6Oklu Ym94OgotICAgICAgIHBsYXlsaXN0ID0gc3Bfc2Vzc2lvbl9pbmJveF9jcmVhdGUoc2Vzc2lvbl8p OwotICAgICAgIGJyZWFrOwotIAotLSAgICBjYXNlIHBiOjpzcG90aWZ5OjpTdGFycmVkOgotKyAg ICBjYXNlIGNwYjo6c3BvdGlmeTo6U3RhcnJlZDoKLSAgICAgICBwbGF5bGlzdCA9IHNwX3Nlc3Np b25fc3RhcnJlZF9jcmVhdGUoc2Vzc2lvbl8pOwotICAgICAgIGJyZWFrOwotIAotLSAgICBjYXNl IHBiOjpzcG90aWZ5OjpVc2VyUGxheWxpc3Q6IHsKLSsgICAgY2FzZSBjcGI6OnNwb3RpZnk6OlVz ZXJQbGF5bGlzdDogewotICAgICAgIHNwX3BsYXlsaXN0Y29udGFpbmVyKiBwYyA9IHNwX3Nlc3Np b25fcGxheWxpc3Rjb250YWluZXIoc2Vzc2lvbl8pOwotIAotICAgICAgIGlmIChwYyAmJiB1c2Vy X2luZGV4IDw9IHNwX3BsYXlsaXN0Y29udGFpbmVyX251bV9wbGF5bGlzdHMocGMpKSB7Ci1AQCAt NDk5LDcgKzQ5OSw3IEBACi0gICByZXR1cm4gcGxheWxpc3Q7Ci0gfQotIAotLXZvaWQgU3BvdGlm eUNsaWVudDo6TG9hZFBsYXlsaXN0KGNvbnN0IHBiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXF1 ZXN0JiByZXEpIHsKLSt2b2lkIFNwb3RpZnlDbGllbnQ6OkxvYWRQbGF5bGlzdChjb25zdCBjcGI6 OnNwb3RpZnk6OkxvYWRQbGF5bGlzdFJlcXVlc3QmIHJlcSkgewotICAgUGVuZGluZ0xvYWRQbGF5 bGlzdCBwZW5kaW5nX2xvYWQ7Ci0gICBwZW5kaW5nX2xvYWQucmVxdWVzdF8gPSByZXE7Ci0gICBw ZW5kaW5nX2xvYWQucGxheWxpc3RfID0gR2V0UGxheWxpc3QocmVxLnR5cGUoKSwgcmVxLnVzZXJf cGxheWxpc3RfaW5kZXgoKSk7Ci1AQCAtNTA5LDggKzUwOSw4IEBACi0gICBpZiAoIXBlbmRpbmdf bG9hZC5wbGF5bGlzdF8pIHsKLSAgICAgcUxvZyhXYXJuaW5nKSA8PCAiSW52YWxpZCBwbGF5bGlz dCByZXF1ZXN0ZWQgb3Igbm90IGxvZ2dlZCBpbiI7Ci0gCi0tICAgIHBiOjpzcG90aWZ5OjpNZXNz YWdlIG1lc3NhZ2U7Ci0tICAgIHBiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSogcmVz cG9uc2UgPQotKyAgICBjcGI6OnNwb3RpZnk6Ok1lc3NhZ2UgbWVzc2FnZTsKLSsgICAgY3BiOjpz cG90aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSogcmVzcG9uc2UgPQotICAgICAgICAgbWVzc2Fn ZS5tdXRhYmxlX2xvYWRfcGxheWxpc3RfcmVzcG9uc2UoKTsKLSAgICAgKnJlc3BvbnNlLT5tdXRh YmxlX3JlcXVlc3QoKSA9IHJlcTsKLSAgICAgU2VuZE1lc3NhZ2UobWVzc2FnZSk7Ci1AQCAtNTI0 LDcgKzUyNCw3IEBACi0gICBQbGF5bGlzdFN0YXRlQ2hhbmdlZEZvckxvYWRQbGF5bGlzdChwZW5k aW5nX2xvYWQucGxheWxpc3RfLCB0aGlzKTsKLSB9Ci0gCi0tdm9pZCBTcG90aWZ5Q2xpZW50OjpT eW5jUGxheWxpc3QoY29uc3QgcGI6OnNwb3RpZnk6OlN5bmNQbGF5bGlzdFJlcXVlc3QmIHJlcSkg ewotK3ZvaWQgU3BvdGlmeUNsaWVudDo6U3luY1BsYXlsaXN0KGNvbnN0IGNwYjo6c3BvdGlmeTo6 U3luY1BsYXlsaXN0UmVxdWVzdCYgcmVxKSB7Ci0gICBzcF9wbGF5bGlzdCogcGxheWxpc3QgPQot ICAgICAgIEdldFBsYXlsaXN0KHJlcS5yZXF1ZXN0KCkudHlwZSgpLCByZXEucmVxdWVzdCgpLnVz ZXJfcGxheWxpc3RfaW5kZXgoKSk7Ci0gCi1AQCAtNTc3LDEzICs1NzcsMTMgQEAKLSAgIH0KLSAK LSAgIC8vIEV2ZXJ5dGhpbmcgaXMgbG9hZGVkIHNvIHNlbmQgdGhlIHJlc3BvbnNlIHByb3RvYnVm IGFuZCB1bnJlZiBldmVyeXRoaW5nLgotLSAgcGI6OnNwb3RpZnk6Ok1lc3NhZ2UgbWVzc2FnZTsK LS0gIHBiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSogcmVzcG9uc2UgPQotKyAgY3Bi OjpzcG90aWZ5OjpNZXNzYWdlIG1lc3NhZ2U7Ci0rICBjcGI6OnNwb3RpZnk6OkxvYWRQbGF5bGlz dFJlc3BvbnNlKiByZXNwb25zZSA9Ci0gICAgICAgbWVzc2FnZS5tdXRhYmxlX2xvYWRfcGxheWxp c3RfcmVzcG9uc2UoKTsKLSAKLSAgIC8vIEZvciBzb21lIHJlYXNvbiwgd2UgcmVjZWl2ZSB0aGUg c3RhcnJlZCB0cmFja3MgaW4gcmV2ZXJzZSBvcmRlciBidXQgbm90Ci0gICAvLyBvdGhlciBwbGF5 bGlzdHMuCi0tICBpZiAocGVuZGluZ19sb2FkLT5yZXF1ZXN0Xy50eXBlKCkgPT0gcGI6OnNwb3Rp Znk6OlN0YXJyZWQpIHsKLSsgIGlmIChwZW5kaW5nX2xvYWQtPnJlcXVlc3RfLnR5cGUoKSA9PSBj cGI6OnNwb3RpZnk6OlN0YXJyZWQpIHsKLSAgICAgc3RkOjpyZXZlcnNlKHBlbmRpbmdfbG9hZC0+ dHJhY2tzXy5iZWdpbigpLCBwZW5kaW5nX2xvYWQtPnRyYWNrc18uZW5kKCkpOwotICAgfQotIAot QEAgLTYxMCw3ICs2MTAsNyBAQAotIH0KLSAKLSB2b2lkIFNwb3RpZnlDbGllbnQ6OkFkZFRyYWNr c1RvUGxheWxpc3QoCi0tICAgIGNvbnN0IHBiOjpzcG90aWZ5OjpBZGRUcmFja3NUb1BsYXlsaXN0 UmVxdWVzdCYgcmVxKSB7Ci0rICAgIGNvbnN0IGNwYjo6c3BvdGlmeTo6QWRkVHJhY2tzVG9QbGF5 bGlzdFJlcXVlc3QmIHJlcSkgewotICAgLy8gR2V0IHRoZSBwbGF5bGlzdCB3ZSB3YW50IHRvIHVw ZGF0ZQotICAgc3BfcGxheWxpc3QqIHBsYXlsaXN0ID0KLSAgICAgICBHZXRQbGF5bGlzdChyZXEu cGxheWxpc3RfdHlwZSgpLCByZXEucGxheWxpc3RfaW5kZXgoKSk7Ci1AQCAtNjQ5LDcgKzY0OSw3 IEBACi0gfQotIAotIHZvaWQgU3BvdGlmeUNsaWVudDo6UmVtb3ZlVHJhY2tzRnJvbVBsYXlsaXN0 KAotLSAgICBjb25zdCBwYjo6c3BvdGlmeTo6UmVtb3ZlVHJhY2tzRnJvbVBsYXlsaXN0UmVxdWVz dCYgcmVxKSB7Ci0rICAgIGNvbnN0IGNwYjo6c3BvdGlmeTo6UmVtb3ZlVHJhY2tzRnJvbVBsYXls aXN0UmVxdWVzdCYgcmVxKSB7Ci0gICAvLyBHZXQgdGhlIHBsYXlsaXN0IHdlIHdhbnQgdG8gdXBk YXRlCi0gICBzcF9wbGF5bGlzdCogcGxheWxpc3QgPQotICAgICAgIEdldFBsYXlsaXN0KHJlcS5w bGF5bGlzdF90eXBlKCksIHJlcS5wbGF5bGlzdF9pbmRleCgpKTsKLUBAIC02NjcsNyArNjY3LDcg QEAKLSAKLSAgIC8vIFdURjogc3BfcGxheWxpc3RfcmVtb3ZlX3RyYWNrcyBpbmRleGVzIHN0YXJ0 IGZyb20gdGhlIGVuZCBmb3Igc3RhcnJlZAotICAgLy8gcGxheWxpc3QsIG5vdCBmcm9tIHRoZSBi ZWdpbm5pbmcgbGlrZSBvdGhlciBwbGF5bGlzdHM6IHJldmVyc2UgdGhlbQotLSAgaWYgKHJlcS5w bGF5bGlzdF90eXBlKCkgPT0gcGI6OnNwb3RpZnk6OlN0YXJyZWQpIHsKLSsgIGlmIChyZXEucGxh eWxpc3RfdHlwZSgpID09IGNwYjo6c3BvdGlmeTo6U3RhcnJlZCkgewotICAgICBpbnQgbnVtX3Ry YWNrcyA9IHNwX3BsYXlsaXN0X251bV90cmFja3MocGxheWxpc3QpOwotICAgICBmb3IgKGludCBp ID0gMDsgaSA8IHJlcS50cmFja19pbmRleF9zaXplKCk7IGkrKykgewotICAgICAgIHRyYWNrc19p bmRpY2VzX2FycmF5W2ldID0gbnVtX3RyYWNrcyAtIHRyYWNrc19pbmRpY2VzX2FycmF5W2ldIC0g MTsKLUBAIC02ODAsNyArNjgwLDcgQEAKLSAgIH0KLSB9Ci0gCi0tdm9pZCBTcG90aWZ5Q2xpZW50 OjpDb252ZXJ0VHJhY2soc3BfdHJhY2sqIHRyYWNrLCBwYjo6c3BvdGlmeTo6VHJhY2sqIHBiKSB7 Ci0rdm9pZCBTcG90aWZ5Q2xpZW50OjpDb252ZXJ0VHJhY2soc3BfdHJhY2sqIHRyYWNrLCBjcGI6 OnNwb3RpZnk6OlRyYWNrKiBwYikgewotICAgc3BfYWxidW0qIGFsYnVtID0gc3BfdHJhY2tfYWxi dW0odHJhY2spOwotIAotICAgcGItPnNldF9zdGFycmVkKHNwX3RyYWNrX2lzX3N0YXJyZWQoc2Vz c2lvbl8sIHRyYWNrKSk7Ci1AQCAtNzEzLDcgKzcxMyw3IEBACi0gICBwYi0+c2V0X3VyaSh1cmkp OwotIH0KLSAKLS12b2lkIFNwb3RpZnlDbGllbnQ6OkNvbnZlcnRBbGJ1bShzcF9hbGJ1bSogYWxi dW0sIHBiOjpzcG90aWZ5OjpUcmFjayogcGIpIHsKLSt2b2lkIFNwb3RpZnlDbGllbnQ6OkNvbnZl cnRBbGJ1bShzcF9hbGJ1bSogYWxidW0sIGNwYjo6c3BvdGlmeTo6VHJhY2sqIHBiKSB7Ci0gICBw Yi0+c2V0X2FsYnVtKHNwX2FsYnVtX25hbWUoYWxidW0pKTsKLSAgIHBiLT5zZXRfeWVhcihzcF9h bGJ1bV95ZWFyKGFsYnVtKSk7Ci0gICBwYi0+YWRkX2FydGlzdChzcF9hcnRpc3RfbmFtZShzcF9h bGJ1bV9hcnRpc3QoYWxidW0pKSk7Ci1AQCAtNzQ0LDcgKzc0NCw3IEBACi0gfQotIAotIHZvaWQg U3BvdGlmeUNsaWVudDo6Q29udmVydEFsYnVtQnJvd3NlKHNwX2FsYnVtYnJvd3NlKiBicm93c2Us Ci0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGI6OnNwb3RpZnk6OlRy YWNrKiBwYikgewotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwYjo6 c3BvdGlmeTo6VHJhY2sqIHBiKSB7Ci0gICBwYi0+c2V0X3RyYWNrKHNwX2FsYnVtYnJvd3NlX251 bV90cmFja3MoYnJvd3NlKSk7Ci0gfQotIAotQEAgLTg1Myw3ICs4NTMsNyBAQAotIAotICAgICBp bnQgZG93bmxvYWRfcHJvZ3Jlc3MgPSBtZS0+R2V0RG93bmxvYWRQcm9ncmVzcyhwbGF5bGlzdCk7 Ci0gICAgIGlmIChkb3dubG9hZF9wcm9ncmVzcyAhPSAtMSkgewotLSAgICAgIG1lLT5TZW5kRG93 bmxvYWRQcm9ncmVzcyhwYjo6c3BvdGlmeTo6VXNlclBsYXlsaXN0LCBpLCBkb3dubG9hZF9wcm9n cmVzcyk7Ci0rICAgICAgbWUtPlNlbmREb3dubG9hZFByb2dyZXNzKGNwYjo6c3BvdGlmeTo6VXNl clBsYXlsaXN0LCBpLCBkb3dubG9hZF9wcm9ncmVzcyk7Ci0gICAgIH0KLSAgIH0KLSAKLUBAIC04 NjIsNyArODYyLDcgQEAKLSAgIHNwX3BsYXlsaXN0X3JlbGVhc2UoaW5ib3gpOwotIAotICAgaWYg KGRvd25sb2FkX3Byb2dyZXNzICE9IC0xKSB7Ci0tICAgIG1lLT5TZW5kRG93bmxvYWRQcm9ncmVz cyhwYjo6c3BvdGlmeTo6SW5ib3gsIC0xLCBkb3dubG9hZF9wcm9ncmVzcyk7Ci0rICAgIG1lLT5T ZW5kRG93bmxvYWRQcm9ncmVzcyhjcGI6OnNwb3RpZnk6OkluYm94LCAtMSwgZG93bmxvYWRfcHJv Z3Jlc3MpOwotICAgfQotIAotICAgc3BfcGxheWxpc3QqIHN0YXJyZWQgPSBzcF9zZXNzaW9uX3N0 YXJyZWRfY3JlYXRlKHNlc3Npb24pOwotQEAgLTg3MCwxNCArODcwLDE0IEBACi0gICBzcF9wbGF5 bGlzdF9yZWxlYXNlKHN0YXJyZWQpOwotIAotICAgaWYgKGRvd25sb2FkX3Byb2dyZXNzICE9IC0x KSB7Ci0tICAgIG1lLT5TZW5kRG93bmxvYWRQcm9ncmVzcyhwYjo6c3BvdGlmeTo6U3RhcnJlZCwg LTEsIGRvd25sb2FkX3Byb2dyZXNzKTsKLSsgICAgbWUtPlNlbmREb3dubG9hZFByb2dyZXNzKGNw Yjo6c3BvdGlmeTo6U3RhcnJlZCwgLTEsIGRvd25sb2FkX3Byb2dyZXNzKTsKLSAgIH0KLSB9Ci0g Ci0tdm9pZCBTcG90aWZ5Q2xpZW50OjpTZW5kRG93bmxvYWRQcm9ncmVzcyhwYjo6c3BvdGlmeTo6 UGxheWxpc3RUeXBlIHR5cGUsCi0rdm9pZCBTcG90aWZ5Q2xpZW50OjpTZW5kRG93bmxvYWRQcm9n cmVzcyhjcGI6OnNwb3RpZnk6OlBsYXlsaXN0VHlwZSB0eXBlLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LCBpbnQgZG93bmxvYWRfcHJvZ3Jlc3Mp IHsKLS0gIHBiOjpzcG90aWZ5OjpNZXNzYWdlIG1lc3NhZ2U7Ci0tICBwYjo6c3BvdGlmeTo6U3lu Y1BsYXlsaXN0UHJvZ3Jlc3MqIHByb2dyZXNzID0KLSsgIGNwYjo6c3BvdGlmeTo6TWVzc2FnZSBt ZXNzYWdlOwotKyAgY3BiOjpzcG90aWZ5OjpTeW5jUGxheWxpc3RQcm9ncmVzcyogcHJvZ3Jlc3Mg PQotICAgICAgIG1lc3NhZ2UubXV0YWJsZV9zeW5jX3BsYXlsaXN0X3Byb2dyZXNzKCk7Ci0gICBw cm9ncmVzcy0+bXV0YWJsZV9yZXF1ZXN0KCktPnNldF90eXBlKHR5cGUpOwotICAgaWYgKGluZGV4 ICE9IC0xKSB7Ci1AQCAtOTAzLDcgKzkwMyw3IEBACi0gICByZXR1cm4gLTE7Ci0gfQotIAotLXZv aWQgU3BvdGlmeUNsaWVudDo6U3RhcnRQbGF5YmFjayhjb25zdCBwYjo6c3BvdGlmeTo6UGxheWJh Y2tSZXF1ZXN0JiByZXEpIHsKLSt2b2lkIFNwb3RpZnlDbGllbnQ6OlN0YXJ0UGxheWJhY2soY29u c3QgY3BiOjpzcG90aWZ5OjpQbGF5YmFja1JlcXVlc3QmIHJlcSkgewotICAgLy8gR2V0IGEgbGlu ayBvYmplY3QgZnJvbSB0aGUgVVJJCi0gICBzcF9saW5rKiBsaW5rID0gc3BfbGlua19jcmVhdGVf ZnJvbV9zdHJpbmcocmVxLnRyYWNrX3VyaSgpLmNfc3RyKCkpOwotICAgaWYgKCFsaW5rKSB7Ci1A QCAtOTcwLDggKzk3MCw4IEBACi0gfQotIAotIHZvaWQgU3BvdGlmeUNsaWVudDo6U2VuZFBsYXli YWNrRXJyb3IoY29uc3QgUVN0cmluZyYgZXJyb3IpIHsKLS0gIHBiOjpzcG90aWZ5OjpNZXNzYWdl IG1lc3NhZ2U7Ci0tICBwYjo6c3BvdGlmeTo6UGxheWJhY2tFcnJvciogbXNnID0gbWVzc2FnZS5t dXRhYmxlX3BsYXliYWNrX2Vycm9yKCk7Ci0rICBjcGI6OnNwb3RpZnk6Ok1lc3NhZ2UgbWVzc2Fn ZTsKLSsgIGNwYjo6c3BvdGlmeTo6UGxheWJhY2tFcnJvciogbXNnID0gbWVzc2FnZS5tdXRhYmxl X3BsYXliYWNrX2Vycm9yKCk7Ci0gCi0gICBtc2ctPnNldF9lcnJvcihEYXRhQ29tbWFTaXplRnJv bVFTdHJpbmcoZXJyb3IpKTsKLSAgIFNlbmRNZXNzYWdlKG1lc3NhZ2UpOwotQEAgLTk4NCw4ICs5 ODQsOCBAQAotICAgICAgICAgICAgICAgICAgIDw8IGtTcG90aWZ5SW1hZ2VJRFNpemUgPDwgImJ5 dGVzKToiIDw8IGlkX2I2NDsKLSAKLSAgICAgLy8gU2VuZCBhbiBlcnJvciByZXNwb25zZSBzdHJh aWdodCBhd2F5Ci0tICAgIHBiOjpzcG90aWZ5OjpNZXNzYWdlIG1lc3NhZ2U7Ci0tICAgIHBiOjpz cG90aWZ5OjpJbWFnZVJlc3BvbnNlKiBtc2cgPSBtZXNzYWdlLm11dGFibGVfaW1hZ2VfcmVzcG9u c2UoKTsKLSsgICAgY3BiOjpzcG90aWZ5OjpNZXNzYWdlIG1lc3NhZ2U7Ci0rICAgIGNwYjo6c3Bv dGlmeTo6SW1hZ2VSZXNwb25zZSogbXNnID0gbWVzc2FnZS5tdXRhYmxlX2ltYWdlX3Jlc3BvbnNl KCk7Ci0gICAgIG1zZy0+c2V0X2lkKERhdGFDb21tYVNpemVGcm9tUVN0cmluZyhpZF9iNjQpKTsK LSAgICAgU2VuZE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgIHJldHVybjsKLUBAIC0xMDMzLDggKzEw MzMsOCBAQAotICAgY29uc3Qgdm9pZCogZGF0YSA9IHNwX2ltYWdlX2RhdGEoaW1hZ2UsICZzaXpl KTsKLSAKLSAgIC8vIFNlbmQgdGhlIHJlc3BvbnNlCi0tICBwYjo6c3BvdGlmeTo6TWVzc2FnZSBt ZXNzYWdlOwotLSAgcGI6OnNwb3RpZnk6OkltYWdlUmVzcG9uc2UqIG1zZyA9IG1lc3NhZ2UubXV0 YWJsZV9pbWFnZV9yZXNwb25zZSgpOwotKyAgY3BiOjpzcG90aWZ5OjpNZXNzYWdlIG1lc3NhZ2U7 Ci0rICBjcGI6OnNwb3RpZnk6OkltYWdlUmVzcG9uc2UqIG1zZyA9IG1lc3NhZ2UubXV0YWJsZV9p bWFnZV9yZXNwb25zZSgpOwotICAgbXNnLT5zZXRfaWQoRGF0YUNvbW1hU2l6ZUZyb21RU3RyaW5n KHJlcS0+aWRfYjY0XykpOwotICAgaWYgKGRhdGEgJiYgc2l6ZSkgewotICAgICBtc2ctPnNldF9k YXRhKGRhdGEsIHNpemUpOwotQEAgLTEwODYsOCArMTA4Niw4IEBACi0gCi0gICBRU3RyaW5nIHVy aSA9IG1lLT5wZW5kaW5nX2FsYnVtX2Jyb3dzZXNfLnRha2UocmVzdWx0KTsKLSAKLS0gIHBiOjpz cG90aWZ5OjpNZXNzYWdlIG1lc3NhZ2U7Ci0tICBwYjo6c3BvdGlmeTo6QnJvd3NlQWxidW1SZXNw b25zZSogbXNnID0KLSsgIGNwYjo6c3BvdGlmeTo6TWVzc2FnZSBtZXNzYWdlOwotKyAgY3BiOjpz cG90aWZ5OjpCcm93c2VBbGJ1bVJlc3BvbnNlKiBtc2cgPQotICAgICAgIG1lc3NhZ2UubXV0YWJs ZV9icm93c2VfYWxidW1fcmVzcG9uc2UoKTsKLSAKLSAgIG1zZy0+c2V0X3VyaShEYXRhQ29tbWFT aXplRnJvbVFTdHJpbmcodXJpKSk7Ci1AQCAtMTEwMiw3ICsxMTAyLDcgQEAKLSB9Ci0gCi0gdm9p ZCBTcG90aWZ5Q2xpZW50OjpCcm93c2VUb3BsaXN0KAotLSAgICBjb25zdCBwYjo6c3BvdGlmeTo6 QnJvd3NlVG9wbGlzdFJlcXVlc3QmIHJlcSkgewotKyAgICBjb25zdCBjcGI6OnNwb3RpZnk6OkJy b3dzZVRvcGxpc3RSZXF1ZXN0JiByZXEpIHsKLSAgIHNwX3RvcGxpc3Ricm93c2UqIGJyb3dzZSA9 IHNwX3RvcGxpc3Ricm93c2VfY3JlYXRlKAotICAgICAgIHNlc3Npb25fLCBTUF9UT1BMSVNUX1RZ UEVfVFJBQ0tTLCAgLy8gVE9ETzogU3VwcG9ydCBhbGJ1bXMgYW5kIGFydGlzdHMuCi0gICAgICAg U1BfVE9QTElTVF9SRUdJT05fRVZFUllXSEVSRSwgICAgICAvLyBUT0RPOiBTdXBwb3J0IG90aGVy IHJlZ2lvbnMuCi1AQCAtMTExMCw3ICsxMTEwLDcgQEAKLSAgIHBlbmRpbmdfdG9wbGlzdF9icm93 c2VzX1ticm93c2VdID0gcmVxOwotIH0KLSAKLS12b2lkIFNwb3RpZnlDbGllbnQ6OlNldFBhdXNl ZChjb25zdCBwYjo6c3BvdGlmeTo6UGF1c2VSZXF1ZXN0JiByZXEpIHsKLSt2b2lkIFNwb3RpZnlD bGllbnQ6OlNldFBhdXNlZChjb25zdCBjcGI6OnNwb3RpZnk6OlBhdXNlUmVxdWVzdCYgcmVxKSB7 Ci0gICBzcF9zZXNzaW9uX3BsYXllcl9wbGF5KHNlc3Npb25fLCAhcmVxLnBhdXNlZCgpKTsKLSB9 Ci0gCi1AQCAtMTEyNSwxMSArMTEyNSwxMSBAQAotICAgICByZXR1cm47Ci0gICB9Ci0gCi0tICBj b25zdCBwYjo6c3BvdGlmeTo6QnJvd3NlVG9wbGlzdFJlcXVlc3QmIHJlcXVlc3QgPQotKyAgY29u c3QgY3BiOjpzcG90aWZ5OjpCcm93c2VUb3BsaXN0UmVxdWVzdCYgcmVxdWVzdCA9Ci0gICAgICAg bWUtPnBlbmRpbmdfdG9wbGlzdF9icm93c2VzXy50YWtlKHJlc3VsdCk7Ci0gCi0tICBwYjo6c3Bv dGlmeTo6TWVzc2FnZSBtZXNzYWdlOwotLSAgcGI6OnNwb3RpZnk6OkJyb3dzZVRvcGxpc3RSZXNw b25zZSogbXNnID0KLSsgIGNwYjo6c3BvdGlmeTo6TWVzc2FnZSBtZXNzYWdlOwotKyAgY3BiOjpz cG90aWZ5OjpCcm93c2VUb3BsaXN0UmVzcG9uc2UqIG1zZyA9Ci0gICAgICAgbWVzc2FnZS5tdXRh YmxlX2Jyb3dzZV90b3BsaXN0X3Jlc3BvbnNlKCk7Ci0gICBtc2ctPm11dGFibGVfcmVxdWVzdCgp LT5Db3B5RnJvbShyZXF1ZXN0KTsKLSAKLUBAIC0xMTQzLDcgKzExNDMsNyBAQAotIH0KLSAKLSB2 b2lkIFNwb3RpZnlDbGllbnQ6OkRldmljZUNsb3NlZCgpIHsKLS0gIEFic3RyYWN0TWVzc2FnZUhh bmRsZXI8cGI6OnNwb3RpZnk6Ok1lc3NhZ2U+OjpEZXZpY2VDbG9zZWQoKTsKLSsgIEFic3RyYWN0 TWVzc2FnZUhhbmRsZXI8Y3BiOjpzcG90aWZ5OjpNZXNzYWdlPjo6RGV2aWNlQ2xvc2VkKCk7Ci0g Ci0gICBxQXBwLT5leGl0KCk7Ci0gfQotZGlmZiAtdXIgZXh0L2NsZW1lbnRpbmUtc3BvdGlmeWJs b2Ivc3BvdGlmeWNsaWVudC5oIGV4dC9jbGVtZW50aW5lLXNwb3RpZnlibG9iL3Nwb3RpZnljbGll bnQuaAotLS0tIGEvZXh0L2NsZW1lbnRpbmUtc3BvdGlmeWJsb2Ivc3BvdGlmeWNsaWVudC5oCTIw MjAtMDktMjMgMjI6MzQ6MDguMDAwMDAwMDAwIC0wNDAwCi0rKysgYi9leHQvY2xlbWVudGluZS1z cG90aWZ5YmxvYi9zcG90aWZ5Y2xpZW50LmgJMjAyMS0wMi0xOSAxMjowMzo0OC4yMzM0NzMwMjMg LTA1MDAKLUBAIC0zNSw3ICszNSw3IEBACi0gY2xhc3MgTWVkaWFQaXBlbGluZTsKLSBjbGFzcyBS ZXNwb25zZU1lc3NhZ2U7Ci0gCi0tY2xhc3MgU3BvdGlmeUNsaWVudCA6IHB1YmxpYyBBYnN0cmFj dE1lc3NhZ2VIYW5kbGVyPHBiOjpzcG90aWZ5OjpNZXNzYWdlPiB7Ci0rY2xhc3MgU3BvdGlmeUNs aWVudCA6IHB1YmxpYyBBYnN0cmFjdE1lc3NhZ2VIYW5kbGVyPGNwYjo6c3BvdGlmeTo6TWVzc2Fn ZT4gewotICAgUV9PQkpFQ1QKLSAKLSAgcHVibGljOgotQEAgLTQ4LDcgKzQ4LDcgQEAKLSAgIHZv aWQgSW5pdChxdWludDE2IHBvcnQpOwotIAotICBwcm90ZWN0ZWQ6Ci0tICB2b2lkIE1lc3NhZ2VB cnJpdmVkKGNvbnN0IHBiOjpzcG90aWZ5OjpNZXNzYWdlJiBtZXNzYWdlKTsKLSsgIHZvaWQgTWVz c2FnZUFycml2ZWQoY29uc3QgY3BiOjpzcG90aWZ5OjpNZXNzYWdlJiBtZXNzYWdlKTsKLSAgIHZv aWQgRGV2aWNlQ2xvc2VkKCk7Ci0gCi0gIHByaXZhdGUgc2xvdHM6Ci1AQCAtNTYsNyArNTYsNyBA QAotIAotICBwcml2YXRlOgotICAgdm9pZCBTZW5kTG9naW5Db21wbGV0ZWQoYm9vbCBzdWNjZXNz LCBjb25zdCBRU3RyaW5nJiBlcnJvciwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgIHBiOjpz cG90aWZ5OjpMb2dpblJlc3BvbnNlX0Vycm9yIGVycm9yX2NvZGUpOwotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgY3BiOjpzcG90aWZ5OjpMb2dpblJlc3BvbnNlX0Vycm9yIGVycm9yX2NvZGUp OwotICAgdm9pZCBTZW5kUGxheWJhY2tFcnJvcihjb25zdCBRU3RyaW5nJiBlcnJvcik7Ci0gICB2 b2lkIFNlbmRTZWFyY2hSZXNwb25zZShzcF9zZWFyY2gqIHJlc3VsdCk7Ci0gCi1AQCAtMTE4LDQw ICsxMTgsNDAgQEAKLSAgICAgICBUb3BsaXN0QnJvd3NlQ29tcGxldGUoc3BfdG9wbGlzdGJyb3dz ZSogcmVzdWx0LCB2b2lkKiB1c2VyZGF0YSk7Ci0gCi0gICAvLyBSZXF1ZXN0IGhhbmRsZXJzLgot LSAgdm9pZCBMb2dpbihjb25zdCBwYjo6c3BvdGlmeTo6TG9naW5SZXF1ZXN0JiByZXEpOwotLSAg dm9pZCBTZWFyY2goY29uc3QgcGI6OnNwb3RpZnk6OlNlYXJjaFJlcXVlc3QmIHJlcSk7Ci0tICB2 b2lkIExvYWRQbGF5bGlzdChjb25zdCBwYjo6c3BvdGlmeTo6TG9hZFBsYXlsaXN0UmVxdWVzdCYg cmVxKTsKLS0gIHZvaWQgU3luY1BsYXlsaXN0KGNvbnN0IHBiOjpzcG90aWZ5OjpTeW5jUGxheWxp c3RSZXF1ZXN0JiByZXEpOwotLSAgdm9pZCBBZGRUcmFja3NUb1BsYXlsaXN0KGNvbnN0IHBiOjpz cG90aWZ5OjpBZGRUcmFja3NUb1BsYXlsaXN0UmVxdWVzdCYgcmVxKTsKLSsgIHZvaWQgTG9naW4o Y29uc3QgY3BiOjpzcG90aWZ5OjpMb2dpblJlcXVlc3QmIHJlcSk7Ci0rICB2b2lkIFNlYXJjaChj b25zdCBjcGI6OnNwb3RpZnk6OlNlYXJjaFJlcXVlc3QmIHJlcSk7Ci0rICB2b2lkIExvYWRQbGF5 bGlzdChjb25zdCBjcGI6OnNwb3RpZnk6OkxvYWRQbGF5bGlzdFJlcXVlc3QmIHJlcSk7Ci0rICB2 b2lkIFN5bmNQbGF5bGlzdChjb25zdCBjcGI6OnNwb3RpZnk6OlN5bmNQbGF5bGlzdFJlcXVlc3Qm IHJlcSk7Ci0rICB2b2lkIEFkZFRyYWNrc1RvUGxheWxpc3QoY29uc3QgY3BiOjpzcG90aWZ5OjpB ZGRUcmFja3NUb1BsYXlsaXN0UmVxdWVzdCYgcmVxKTsKLSAgIHZvaWQgUmVtb3ZlVHJhY2tzRnJv bVBsYXlsaXN0KAotLSAgICAgIGNvbnN0IHBiOjpzcG90aWZ5OjpSZW1vdmVUcmFja3NGcm9tUGxh eWxpc3RSZXF1ZXN0JiByZXEpOwotLSAgdm9pZCBTdGFydFBsYXliYWNrKGNvbnN0IHBiOjpzcG90 aWZ5OjpQbGF5YmFja1JlcXVlc3QmIHJlcSk7Ci0rICAgICAgY29uc3QgY3BiOjpzcG90aWZ5OjpS ZW1vdmVUcmFja3NGcm9tUGxheWxpc3RSZXF1ZXN0JiByZXEpOwotKyAgdm9pZCBTdGFydFBsYXli YWNrKGNvbnN0IGNwYjo6c3BvdGlmeTo6UGxheWJhY2tSZXF1ZXN0JiByZXEpOwotICAgdm9pZCBT ZWVrKHFpbnQ2NCBvZmZzZXRfbnNlYyk7Ci0gICB2b2lkIExvYWRJbWFnZShjb25zdCBRU3RyaW5n JiBpZF9iNjQpOwotICAgdm9pZCBCcm93c2VBbGJ1bShjb25zdCBRU3RyaW5nJiB1cmkpOwotLSAg dm9pZCBCcm93c2VUb3BsaXN0KGNvbnN0IHBiOjpzcG90aWZ5OjpCcm93c2VUb3BsaXN0UmVxdWVz dCYgcmVxKTsKLS0gIHZvaWQgU2V0UGxheWJhY2tTZXR0aW5ncyhjb25zdCBwYjo6c3BvdGlmeTo6 UGxheWJhY2tTZXR0aW5ncyYgcmVxKTsKLS0gIHZvaWQgU2V0UGF1c2VkKGNvbnN0IHBiOjpzcG90 aWZ5OjpQYXVzZVJlcXVlc3QmIHJlcSk7Ci0rICB2b2lkIEJyb3dzZVRvcGxpc3QoY29uc3QgY3Bi OjpzcG90aWZ5OjpCcm93c2VUb3BsaXN0UmVxdWVzdCYgcmVxKTsKLSsgIHZvaWQgU2V0UGxheWJh Y2tTZXR0aW5ncyhjb25zdCBjcGI6OnNwb3RpZnk6OlBsYXliYWNrU2V0dGluZ3MmIHJlcSk7Ci0r ICB2b2lkIFNldFBhdXNlZChjb25zdCBjcGI6OnNwb3RpZnk6OlBhdXNlUmVxdWVzdCYgcmVxKTsK LSAKLSAgIHZvaWQgU2VuZFBsYXlsaXN0TGlzdCgpOwotIAotLSAgdm9pZCBDb252ZXJ0VHJhY2so c3BfdHJhY2sqIHRyYWNrLCBwYjo6c3BvdGlmeTo6VHJhY2sqIHBiKTsKLS0gIHZvaWQgQ29udmVy dEFsYnVtKHNwX2FsYnVtKiBhbGJ1bSwgcGI6OnNwb3RpZnk6OlRyYWNrKiBwYik7Ci0tICB2b2lk IENvbnZlcnRBbGJ1bUJyb3dzZShzcF9hbGJ1bWJyb3dzZSogYnJvd3NlLCBwYjo6c3BvdGlmeTo6 VHJhY2sqIHBiKTsKLSsgIHZvaWQgQ29udmVydFRyYWNrKHNwX3RyYWNrKiB0cmFjaywgY3BiOjpz cG90aWZ5OjpUcmFjayogcGIpOwotKyAgdm9pZCBDb252ZXJ0QWxidW0oc3BfYWxidW0qIGFsYnVt LCBjcGI6OnNwb3RpZnk6OlRyYWNrKiBwYik7Ci0rICB2b2lkIENvbnZlcnRBbGJ1bUJyb3dzZShz cF9hbGJ1bWJyb3dzZSogYnJvd3NlLCBjcGI6OnNwb3RpZnk6OlRyYWNrKiBwYik7Ci0gCi0gICAv LyBHZXRzIHRoZSBhcHByb3ByaWF0ZSBzcF9wbGF5bGlzdCogYnV0IGRvZXMgbm90IGxvYWQgaXQu Ci0tICBzcF9wbGF5bGlzdCogR2V0UGxheWxpc3QocGI6OnNwb3RpZnk6OlBsYXlsaXN0VHlwZSB0 eXBlLCBpbnQgdXNlcl9pbmRleCk7Ci0rICBzcF9wbGF5bGlzdCogR2V0UGxheWxpc3QoY3BiOjpz cG90aWZ5OjpQbGF5bGlzdFR5cGUgdHlwZSwgaW50IHVzZXJfaW5kZXgpOwotIAotICBwcml2YXRl OgotICAgc3RydWN0IFBlbmRpbmdMb2FkUGxheWxpc3QgewotLSAgICBwYjo6c3BvdGlmeTo6TG9h ZFBsYXlsaXN0UmVxdWVzdCByZXF1ZXN0XzsKLSsgICAgY3BiOjpzcG90aWZ5OjpMb2FkUGxheWxp c3RSZXF1ZXN0IHJlcXVlc3RfOwotICAgICBzcF9wbGF5bGlzdCogcGxheWxpc3RfOwotICAgICBR TGlzdDxzcF90cmFjayo+IHRyYWNrc187Ci0gICAgIGJvb2wgb2ZmbGluZV9zeW5jOwotICAgfTsK LSAKLSAgIHN0cnVjdCBQZW5kaW5nUGxheWJhY2tSZXF1ZXN0IHsKLS0gICAgcGI6OnNwb3RpZnk6 OlBsYXliYWNrUmVxdWVzdCByZXF1ZXN0XzsKLSsgICAgY3BiOjpzcG90aWZ5OjpQbGF5YmFja1Jl cXVlc3QgcmVxdWVzdF87Ci0gICAgIHNwX2xpbmsqIGxpbmtfOwotICAgICBzcF90cmFjayogdHJh Y2tfOwotIAotQEAgLTE3MCw3ICsxNzAsNyBAQAotICAgdm9pZCBUcnlQbGF5YmFja0FnYWluKGNv bnN0IFBlbmRpbmdQbGF5YmFja1JlcXVlc3QmIHJlcSk7Ci0gICB2b2lkIFRyeUltYWdlQWdhaW4o c3BfaW1hZ2UqIGltYWdlKTsKLSAgIGludCBHZXREb3dubG9hZFByb2dyZXNzKHNwX3BsYXlsaXN0 KiBwbGF5bGlzdCk7Ci0tICB2b2lkIFNlbmREb3dubG9hZFByb2dyZXNzKHBiOjpzcG90aWZ5OjpQ bGF5bGlzdFR5cGUgdHlwZSwgaW50IGluZGV4LAotKyAgdm9pZCBTZW5kRG93bmxvYWRQcm9ncmVz cyhjcGI6OnNwb3RpZnk6OlBsYXlsaXN0VHlwZSB0eXBlLCBpbnQgaW5kZXgsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBkb3dubG9hZF9wcm9ncmVzcyk7Ci0gCi0gICBRQnl0ZUFy cmF5IGFwaV9rZXlfOwotQEAgLTE5MCw5ICsxOTAsOSBAQAotICAgUUxpc3Q8UGVuZGluZ1BsYXli YWNrUmVxdWVzdD4gcGVuZGluZ19wbGF5YmFja19yZXF1ZXN0c187Ci0gICBRTGlzdDxQZW5kaW5n SW1hZ2VSZXF1ZXN0PiBwZW5kaW5nX2ltYWdlX3JlcXVlc3RzXzsKLSAgIFFNYXA8c3BfaW1hZ2Uq LCBpbnQ+IGltYWdlX2NhbGxiYWNrc19yZWdpc3RlcmVkXzsKLS0gIFFNYXA8c3Bfc2VhcmNoKiwg cGI6OnNwb3RpZnk6OlNlYXJjaFJlcXVlc3Q+IHBlbmRpbmdfc2VhcmNoZXNfOwotKyAgUU1hcDxz cF9zZWFyY2gqLCBjcGI6OnNwb3RpZnk6OlNlYXJjaFJlcXVlc3Q+IHBlbmRpbmdfc2VhcmNoZXNf OwotICAgUU1hcDxzcF9hbGJ1bWJyb3dzZSosIFFTdHJpbmc+IHBlbmRpbmdfYWxidW1fYnJvd3Nl c187Ci0tICBRTWFwPHNwX3RvcGxpc3Ricm93c2UqLCBwYjo6c3BvdGlmeTo6QnJvd3NlVG9wbGlz dFJlcXVlc3Q+Ci0rICBRTWFwPHNwX3RvcGxpc3Ricm93c2UqLCBjcGI6OnNwb3RpZnk6OkJyb3dz ZVRvcGxpc3RSZXF1ZXN0PgotICAgICAgIHBlbmRpbmdfdG9wbGlzdF9icm93c2VzXzsKLSAKLSAg IFFNYXA8c3Bfc2VhcmNoKiwgUUxpc3Q8c3BfYWxidW1icm93c2UqPj4gcGVuZGluZ19zZWFyY2hf YWxidW1fYnJvd3Nlc187Ci1kaWZmIC11ciBleHQvY2xlbWVudGluZS10YWdyZWFkZXIvdGFncmVh ZGVyd29ya2VyLmNwcCBleHQvY2xlbWVudGluZS10YWdyZWFkZXIvdGFncmVhZGVyd29ya2VyLmNw cAotLS0tIGEvZXh0L2NsZW1lbnRpbmUtdGFncmVhZGVyL3RhZ3JlYWRlcndvcmtlci5jcHAJMjAy MC0wOS0yMyAyMjozNDowOC4wMDAwMDAwMDAgLTA0MDAKLSsrKyBiL2V4dC9jbGVtZW50aW5lLXRh Z3JlYWRlci90YWdyZWFkZXJ3b3JrZXIuY3BwCTIwMjEtMDItMTkgMTI6MDM6NDguMjM0NDczMDI3 IC0wNTAwCi1AQCAtMjUsMTAgKzI1LDEwIEBACi0gI2luY2x1ZGUgPFFVcmw+Ci0gCi0gVGFnUmVh ZGVyV29ya2VyOjpUYWdSZWFkZXJXb3JrZXIoUUlPRGV2aWNlKiBzb2NrZXQsIFFPYmplY3QqIHBh cmVudCkKLS0gICAgOiBBYnN0cmFjdE1lc3NhZ2VIYW5kbGVyPHBiOjp0YWdyZWFkZXI6Ok1lc3Nh Z2U+KHNvY2tldCwgcGFyZW50KSB7fQotKyAgICA6IEFic3RyYWN0TWVzc2FnZUhhbmRsZXI8Y3Bi Ojp0YWdyZWFkZXI6Ok1lc3NhZ2U+KHNvY2tldCwgcGFyZW50KSB7fQotIAotLXZvaWQgVGFnUmVh ZGVyV29ya2VyOjpNZXNzYWdlQXJyaXZlZChjb25zdCBwYjo6dGFncmVhZGVyOjpNZXNzYWdlJiBt ZXNzYWdlKSB7Ci0tICBwYjo6dGFncmVhZGVyOjpNZXNzYWdlIHJlcGx5OwotK3ZvaWQgVGFnUmVh ZGVyV29ya2VyOjpNZXNzYWdlQXJyaXZlZChjb25zdCBjcGI6OnRhZ3JlYWRlcjo6TWVzc2FnZSYg bWVzc2FnZSkgewotKyAgY3BiOjp0YWdyZWFkZXI6Ok1lc3NhZ2UgcmVwbHk7Ci0gCi0gI2lmIDAK LSAgIC8vIENyYXNoIGV2ZXJ5IGZldyByZXF1ZXN0cwotQEAgLTY4LDcgKzY4LDcgQEAKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh LnNpemUoKSk7Ci0gICB9IGVsc2UgaWYgKG1lc3NhZ2UuaGFzX3JlYWRfY2xvdWRfZmlsZV9yZXF1 ZXN0KCkpIHsKLSAjaWZkZWYgSEFWRV9HT09HTEVfRFJJVkUKLS0gICAgY29uc3QgcGI6OnRhZ3Jl YWRlcjo6UmVhZENsb3VkRmlsZVJlcXVlc3QmIHJlcSA9Ci0rICAgIGNvbnN0IGNwYjo6dGFncmVh ZGVyOjpSZWFkQ2xvdWRGaWxlUmVxdWVzdCYgcmVxID0KLSAgICAgICAgIG1lc3NhZ2UucmVhZF9j bG91ZF9maWxlX3JlcXVlc3QoKTsKLSAgICAgaWYgKCF0YWdfcmVhZGVyXy5SZWFkQ2xvdWRGaWxl KAotICAgICAgICAgICAgIFFVcmw6OmZyb21FbmNvZGVkKFFCeXRlQXJyYXkocmVxLmRvd25sb2Fk X3VybCgpLmRhdGEoKSwKLUBAIC04Niw3ICs4Niw3IEBACi0gfQotIAotIHZvaWQgVGFnUmVhZGVy V29ya2VyOjpEZXZpY2VDbG9zZWQoKSB7Ci0tICBBYnN0cmFjdE1lc3NhZ2VIYW5kbGVyPHBiOjp0 YWdyZWFkZXI6Ok1lc3NhZ2U+OjpEZXZpY2VDbG9zZWQoKTsKLSsgIEFic3RyYWN0TWVzc2FnZUhh bmRsZXI8Y3BiOjp0YWdyZWFkZXI6Ok1lc3NhZ2U+OjpEZXZpY2VDbG9zZWQoKTsKLSAKLSAgIHFB cHAtPmV4aXQoKTsKLSB9Ci1kaWZmIC11ciBleHQvY2xlbWVudGluZS10YWdyZWFkZXIvdGFncmVh ZGVyd29ya2VyLmggZXh0L2NsZW1lbnRpbmUtdGFncmVhZGVyL3RhZ3JlYWRlcndvcmtlci5oCi0t LS0gYS9leHQvY2xlbWVudGluZS10YWdyZWFkZXIvdGFncmVhZGVyd29ya2VyLmgJMjAyMC0wOS0y MyAyMjozNDowOC4wMDAwMDAwMDAgLTA0MDAKLSsrKyBiL2V4dC9jbGVtZW50aW5lLXRhZ3JlYWRl ci90YWdyZWFkZXJ3b3JrZXIuaAkyMDIxLTAyLTE5IDEyOjAzOjQ4LjIzNDQ3MzAyNyAtMDUwMAot QEAgLTIzLDEyICsyMywxMiBAQAotICNpbmNsdWRlICJ0YWdyZWFkZXJtZXNzYWdlcy5wYi5oIgot ICNpbmNsdWRlICJjb3JlL21lc3NhZ2VoYW5kbGVyLmgiCi0gCi0tY2xhc3MgVGFnUmVhZGVyV29y a2VyIDogcHVibGljIEFic3RyYWN0TWVzc2FnZUhhbmRsZXI8cGI6OnRhZ3JlYWRlcjo6TWVzc2Fn ZT4gewotK2NsYXNzIFRhZ1JlYWRlcldvcmtlciA6IHB1YmxpYyBBYnN0cmFjdE1lc3NhZ2VIYW5k bGVyPGNwYjo6dGFncmVhZGVyOjpNZXNzYWdlPiB7Ci0gIHB1YmxpYzoKLSAgIFRhZ1JlYWRlcldv cmtlcihRSU9EZXZpY2UqIHNvY2tldCwgUU9iamVjdCogcGFyZW50ID0gTlVMTCk7Ci0gCi0gIHBy b3RlY3RlZDoKLS0gIHZvaWQgTWVzc2FnZUFycml2ZWQoY29uc3QgcGI6OnRhZ3JlYWRlcjo6TWVz c2FnZSYgbWVzc2FnZSk7Ci0rICB2b2lkIE1lc3NhZ2VBcnJpdmVkKGNvbnN0IGNwYjo6dGFncmVh ZGVyOjpNZXNzYWdlJiBtZXNzYWdlKTsKLSAgIHZvaWQgRGV2aWNlQ2xvc2VkKCk7Ci0gCi0gIHBy aXZhdGU6Ci1kaWZmIC11ciBleHQvbGliY2xlbWVudGluZS1yZW1vdGUvcmVtb3RlY29udHJvbG1l c3NhZ2VzLnByb3RvIGV4dC9saWJjbGVtZW50aW5lLXJlbW90ZS9yZW1vdGVjb250cm9sbWVzc2Fn ZXMucHJvdG8KLS0tLSBhL2V4dC9saWJjbGVtZW50aW5lLXJlbW90ZS9yZW1vdGVjb250cm9sbWVz c2FnZXMucHJvdG8JMjAyMC0wOS0yMyAyMjozNDowOC4wMDAwMDAwMDAgLTA0MDAKLSsrKyBiL2V4 dC9saWJjbGVtZW50aW5lLXJlbW90ZS9yZW1vdGVjb250cm9sbWVzc2FnZXMucHJvdG8JMjAyMS0w Mi0xOSAxMjowMzo0OC4yMzQ0NzMwMjcgLTA1MDAKLUBAIC0yMCw3ICsyMCw3IEBACi0gCi0gc3lu dGF4ID0gInByb3RvMiI7Ci0gCi0tcGFja2FnZSBwYi5yZW1vdGU7Ci0rcGFja2FnZSBjcGIucmVt b3RlOwotIAotIC8vIFRoZSBzdXBwb3J0ZWQgbWVzc2FnZSB0eXBlcwotIGVudW0gTXNnVHlwZSB7 Ci1kaWZmIC11ciBleHQvbGliY2xlbWVudGluZS1zcG90aWZ5YmxvYi9zcG90aWZ5bWVzc2FnZXMu cHJvdG8gZXh0L2xpYmNsZW1lbnRpbmUtc3BvdGlmeWJsb2Ivc3BvdGlmeW1lc3NhZ2VzLnByb3Rv Ci0tLS0gYS9leHQvbGliY2xlbWVudGluZS1zcG90aWZ5YmxvYi9zcG90aWZ5bWVzc2FnZXMucHJv dG8JMjAyMC0wOS0yMyAyMjozNDowOC4wMDAwMDAwMDAgLTA0MDAKLSsrKyBiL2V4dC9saWJjbGVt ZW50aW5lLXNwb3RpZnlibG9iL3Nwb3RpZnltZXNzYWdlcy5wcm90bwkyMDIxLTAyLTE5IDEyOjAz OjQ4LjIzNDQ3MzAyNyAtMDUwMAotQEAgLTIwLDcgKzIwLDcgQEAKLSAKLSBzeW50YXggPSAicHJv dG8yIjsKLSAKLS1wYWNrYWdlIHBiLnNwb3RpZnk7Ci0rcGFja2FnZSBjcGIuc3BvdGlmeTsKLSAK LSBtZXNzYWdlIExvZ2luUmVxdWVzdCB7Ci0gICByZXF1aXJlZCBzdHJpbmcgdXNlcm5hbWUgPSAx OwotZGlmZiAtdXIgZXh0L2xpYmNsZW1lbnRpbmUtdGFncmVhZGVyL2dtZXJlYWRlci5jcHAgZXh0 L2xpYmNsZW1lbnRpbmUtdGFncmVhZGVyL2dtZXJlYWRlci5jcHAKLS0tLSBhL2V4dC9saWJjbGVt ZW50aW5lLXRhZ3JlYWRlci9nbWVyZWFkZXIuY3BwCTIwMjAtMDktMjMgMjI6MzQ6MDguMDAwMDAw MDAwIC0wNDAwCi0rKysgYi9leHQvbGliY2xlbWVudGluZS10YWdyZWFkZXIvZ21lcmVhZGVyLmNw cAkyMDIxLTAyLTE5IDEyOjAzOjQ4LjIzNDQ3MzAyNyAtMDUwMAotQEAgLTIwLDcgKzIwLDcgQEAK LSB9Ci0gCi0gdm9pZCBHTUU6OlJlYWRGaWxlKGNvbnN0IFFGaWxlSW5mbyYgZmlsZV9pbmZvLAot LSAgICAgICAgICAgICAgICAgICBwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRhdGEqIHNvbmdfaW5m bykgewotKyAgICAgICAgICAgICAgICAgICBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhKiBz b25nX2luZm8pIHsKLSAgIGlmIChmaWxlX2luZm8uY29tcGxldGVTdWZmaXgoKS5lbmRzV2l0aCgi c3BjIikpCi0gICAgIFNQQzo6UmVhZChmaWxlX2luZm8sIHNvbmdfaW5mbyk7Ci0gICBpZiAoZmls ZV9pbmZvLmNvbXBsZXRlU3VmZml4KCkuZW5kc1dpdGgoInZnbSIpKQotQEAgLTI4LDcgKzI4LDcg QEAKLSB9Ci0gCi0gdm9pZCBHTUU6OlNQQzo6UmVhZChjb25zdCBRRmlsZUluZm8mIGZpbGVfaW5m bywKLS0gICAgICAgICAgICAgICAgICAgIHBiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSogc29u Z19pbmZvKSB7Ci0rICAgICAgICAgICAgICAgICAgICBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFk YXRhKiBzb25nX2luZm8pIHsKLSAgIFFGaWxlIGZpbGUoZmlsZV9pbmZvLmZpbGVQYXRoKCkpOwot ICAgaWYgKCFmaWxlLm9wZW4oUUlPRGV2aWNlOjpSZWFkT25seSkpIHJldHVybjsKLSAKLUBAIC0x MzcsNyArMTM3LDcgQEAKLSAgIH0KLSAKLSAgIHNvbmdfaW5mby0+c2V0X3ZhbGlkKHRydWUpOwot LSAgc29uZ19pbmZvLT5zZXRfdHlwZShwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRhdGFfVHlwZV9T UEMpOwotKyAgc29uZ19pbmZvLT5zZXRfdHlwZShjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRh X1R5cGVfU1BDKTsKLSB9Ci0gCi0gcWludDE2IEdNRTo6U1BDOjpHZXROZXh0TWVtQWRkcmVzc0Fs aWduMzJiaXQocWludDE2IGlucHV0KSB7Ci1AQCAtMTU3LDcgKzE1Nyw3IEBACi0gfQotIAotIHZv aWQgR01FOjpWR006OlJlYWQoY29uc3QgUUZpbGVJbmZvJiBmaWxlX2luZm8sCi0tICAgICAgICAg ICAgICAgICAgICBwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRhdGEqIHNvbmdfaW5mbykgewotKyAg ICAgICAgICAgICAgICAgICAgY3BiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSogc29uZ19pbmZv KSB7Ci0gICBRRmlsZSBmaWxlKGZpbGVfaW5mby5maWxlUGF0aCgpKTsKLSAgIGlmICghZmlsZS5v cGVuKFFJT0RldmljZTo6UmVhZE9ubHkpKSByZXR1cm47Ci0gCi1AQCAtMjA2LDcgKzIwNiw3IEBA Ci0gICBzb25nX2luZm8tPnNldF95ZWFyKHN0cmluZ3NbOF0ubGVmdCg0KS50b0ludCgpKTsKLSAg IHNvbmdfaW5mby0+c2V0X2xlbmd0aF9uYW5vc2VjKGxlbmd0aCAqIGtOc2VjUGVyTXNlYyk7Ci0g ICBzb25nX2luZm8tPnNldF92YWxpZCh0cnVlKTsKLS0gIHNvbmdfaW5mby0+c2V0X3R5cGUocGI6 OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhX1R5cGVfVkdNKTsKLSsgIHNvbmdfaW5mby0+c2V0X3R5 cGUoY3BiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YV9UeXBlX1ZHTSk7Ci0gfQotIAotIGJvb2wg R01FOjpWR006OkdldFBsYXliYWNrTGVuZ3RoKGNvbnN0IFFCeXRlQXJyYXkmIHNhbXBsZV9jb3Vu dF9ieXRlcywKLWRpZmYgLXVyIGV4dC9saWJjbGVtZW50aW5lLXRhZ3JlYWRlci9nbWVyZWFkZXIu aCBleHQvbGliY2xlbWVudGluZS10YWdyZWFkZXIvZ21lcmVhZGVyLmgKLS0tLSBhL2V4dC9saWJj bGVtZW50aW5lLXRhZ3JlYWRlci9nbWVyZWFkZXIuaAkyMDIwLTA5LTIzIDIyOjM0OjA4LjAwMDAw MDAwMCAtMDQwMAotKysrIGIvZXh0L2xpYmNsZW1lbnRpbmUtdGFncmVhZGVyL2dtZXJlYWRlci5o CTIwMjEtMDItMTkgMTI6MDM6NDguMjM1NDczMDMwIC0wNTAwCi1AQCAtMTAsNyArMTAsNyBAQAot IG5hbWVzcGFjZSBHTUUgewotIGJvb2wgSXNTdXBwb3J0ZWRGb3JtYXQoY29uc3QgUUZpbGVJbmZv JiBmaWxlX2luZm8pOwotIHZvaWQgUmVhZEZpbGUoY29uc3QgUUZpbGVJbmZvJiBmaWxlX2luZm8s Ci0tICAgICAgICAgICAgICBwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRhdGEqIHNvbmdfaW5mbyk7 Ci0rICAgICAgICAgICAgICBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhKiBzb25nX2luZm8p OwotIAotIG5hbWVzcGFjZSBTUEMgewotIC8qIFNQQyBTUEVDOgotQEAgLTQyLDcgKzQyLDcgQEAK LSAKLSBlbnVtIHhJRDZfVFlQRSB7IExlbmd0aCA9IDB4MCwgU3RyaW5nID0gMHgxLCBJbnRlZ2Vy ID0gMHg0IH07Ci0gCi0tdm9pZCBSZWFkKGNvbnN0IFFGaWxlSW5mbyYgZmlsZV9pbmZvLCBwYjo6 dGFncmVhZGVyOjpTb25nTWV0YWRhdGEqIHNvbmdfaW5mbyk7Ci0rdm9pZCBSZWFkKGNvbnN0IFFG aWxlSW5mbyYgZmlsZV9pbmZvLCBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhKiBzb25nX2lu Zm8pOwotIHFpbnQxNiBHZXROZXh0TWVtQWRkcmVzc0FsaWduMzJiaXQocWludDE2IGlucHV0KTsK LSBxdWludDY0IENvbnZlcnRTUENTdHJpbmdUb051bShjb25zdCBRQnl0ZUFycmF5JiBhcnIpOwot IH0gIC8vIG5hbWVzcGFjZSBTUEMKLUBAIC01OCw3ICs1OCw3IEBACi0gY29uc3QgaW50IFNBTVBM RV9USU1FQkFTRSA9IDQ0MTAwOwotIGNvbnN0IGludCBHU1RfR01FX0xPT1BfVElNRV9NUyA9IDgw MDA7Ci0gCi0tdm9pZCBSZWFkKGNvbnN0IFFGaWxlSW5mbyYgZmlsZV9pbmZvLCBwYjo6dGFncmVh ZGVyOjpTb25nTWV0YWRhdGEqIHNvbmdfaW5mbyk7Ci0rdm9pZCBSZWFkKGNvbnN0IFFGaWxlSW5m byYgZmlsZV9pbmZvLCBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhKiBzb25nX2luZm8pOwot IC8qIFRha2VzIGluIHR3byBRQnl0ZUFycmF5cywgZXhwZWN0ZWQgdG8gYmUgNCBieXRlcyBsb25n LiBEZXNpcmVkIGxlbmd0aAotICAqIGlzIHJldHVybmVkIHZpYSBvdXRwdXQgcGFyYW1ldGVyIG91 dF9sZW5ndGguIFJldHVybnMgZmFsc2Ugb24gZXJyb3IuICovCi0gYm9vbCBHZXRQbGF5YmFja0xl bmd0aChjb25zdCBRQnl0ZUFycmF5JiBzYW1wbGVfY291bnRfYnl0ZXMsCi1kaWZmIC11ciBleHQv bGliY2xlbWVudGluZS10YWdyZWFkZXIvdGFncmVhZGVyLmNwcCBleHQvbGliY2xlbWVudGluZS10 YWdyZWFkZXIvdGFncmVhZGVyLmNwcAotLS0tIGEvZXh0L2xpYmNsZW1lbnRpbmUtdGFncmVhZGVy L3RhZ3JlYWRlci5jcHAJMjAyMC0wOS0yMyAyMjozNDowOC4wMDAwMDAwMDAgLTA0MDAKLSsrKyBi L2V4dC9saWJjbGVtZW50aW5lLXRhZ3JlYWRlci90YWdyZWFkZXIuY3BwCTIwMjEtMDItMTkgMTI6 MDM6NDguMjM1NDczMDMwIC0wNTAwCi1AQCAtMTQzLDcgKzE0Myw3IEBACi0gCi0gfSAgLy8gbmFt ZXNwYWNlCi0gCi0tdm9pZCBUYWdSZWFkZXI6Okd1ZXNzQXJ0aXN0QW5kVGl0bGUocGI6OnRhZ3Jl YWRlcjo6U29uZ01ldGFkYXRhKiBzb25nKSBjb25zdCB7Ci0rdm9pZCBUYWdSZWFkZXI6Okd1ZXNz QXJ0aXN0QW5kVGl0bGUoY3BiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSogc29uZykgY29uc3Qg ewotICAgUVN0cmluZyBhcnRpc3QgPSBRU3RyaW5nOjpmcm9tU3RkU3RyaW5nKHNvbmctPmFydGlz dCgpKTsKLSAgIFFTdHJpbmcgdGl0bGUgPSBRU3RyaW5nOjpmcm9tU3RkU3RyaW5nKHNvbmctPnRp dGxlKCkpOwotICAgY29uc3QgUVN0cmluZyBibiA9IFFTdHJpbmc6OmZyb21TdGRTdHJpbmcoc29u Zy0+YmFzZWZpbGVuYW1lKCkpOwotQEAgLTE3MSw3ICsxNzEsNyBAQAotIH0KLSAKLSB2b2lkIFRh Z1JlYWRlcjo6R3Vlc3NBbGJ1bShjb25zdCBRRmlsZUluZm8mIGluZm8sCi0tICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhKiBzb25nKSBjb25zdCB7 Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0 YSogc29uZykgY29uc3QgewotICAgUVN0cmluZyBhbGJ1bSA9IFFTdHJpbmc6OmZyb21TdGRTdHJp bmcoc29uZy0+YWxidW0oKSk7Ci0gICBpZiAoIWFsYnVtLmlzRW1wdHkoKSkgcmV0dXJuOwotICAg Y29uc3QgUVN0cmluZyBzdHJfZGlyID0gaW5mby5hYnNvbHV0ZURpcigpLmFic29sdXRlUGF0aCgp OwotQEAgLTE5MSw3ICsxOTEsNyBAQAotICAgICA6IGZhY3RvcnlfKG5ldyBUYWdMaWJGaWxlUmVm RmFjdG9yeSksIGtFbWJlZGRlZENvdmVyKCIoZW1iZWRkZWQpIikge30KLSAKLSB2b2lkIFRhZ1Jl YWRlcjo6UmVhZEZpbGUoY29uc3QgUVN0cmluZyYgZmlsZW5hbWUsCi0tICAgICAgICAgICAgICAg ICAgICAgICAgIHBiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSogc29uZykgY29uc3QgewotKyAg ICAgICAgICAgICAgICAgICAgICAgICBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhKiBzb25n KSBjb25zdCB7Ci0gICBjb25zdCBRQnl0ZUFycmF5IHVybChRVXJsOjpmcm9tTG9jYWxGaWxlKGZp bGVuYW1lKS50b0VuY29kZWQoKSk7Ci0gICBjb25zdCBRRmlsZUluZm8gaW5mbyhmaWxlbmFtZSk7 Ci0gCi1AQCAtNjc0LDcgKzY3NCw3IEBACi0gfQotIAotIHZvaWQgVGFnUmVhZGVyOjpQYXJzZUZN UFNGcmFtZShjb25zdCBRU3RyaW5nJiBuYW1lLCBjb25zdCBRU3RyaW5nJiB2YWx1ZSwKLS0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhKiBz b25nKSBjb25zdCB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwYjo6dGFncmVh ZGVyOjpTb25nTWV0YWRhdGEqIHNvbmcpIGNvbnN0IHsKLSAgIHFMb2coRGVidWcpIDw8ICJQYXJz aW5nIEZNUFNGcmFtZSIgPDwgbmFtZSA8PCAiLCAiIDw8IHZhbHVlOwotICAgRk1QU1BhcnNlciBw YXJzZXI7Ci0gICBpZiAoIXBhcnNlci5QYXJzZSh2YWx1ZSkgfHwgcGFyc2VyLmlzX2VtcHR5KCkp IHJldHVybjsKLUBAIC03MTcsNyArNzE3LDcgQEAKLSB2b2lkIFRhZ1JlYWRlcjo6UGFyc2VPZ2dU YWcoY29uc3QgVGFnTGliOjpPZ2c6OkZpZWxkTGlzdE1hcCYgbWFwLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBRVGV4dENvZGVjKiBjb2RlYywgUVN0cmluZyogZGlzYywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyogY29tcGlsYXRpb24sCi0tICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSogc29uZykg Y29uc3QgewotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcGI6OnRhZ3JlYWRlcjo6U29u Z01ldGFkYXRhKiBzb25nKSBjb25zdCB7Ci0gICBpZiAoIW1hcFsiQ09NUE9TRVIiXS5pc0VtcHR5 KCkpCi0gICAgIERlY29kZShtYXBbIkNPTVBPU0VSIl0uZnJvbnQoKSwgY29kZWMsIHNvbmctPm11 dGFibGVfY29tcG9zZXIoKSk7Ci0gICBpZiAoIW1hcFsiUEVSRk9STUVSIl0uaXNFbXB0eSgpKQot QEAgLTc3NCw3ICs3NzQsNyBAQAotIAotIHZvaWQgVGFnUmVhZGVyOjpTZXRWb3JiaXNDb21tZW50 cygKLSAgICAgVGFnTGliOjpPZ2c6OlhpcGhDb21tZW50KiB2b3JiaXNfY29tbWVudHMsCi0tICAg IGNvbnN0IHBiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSYgc29uZykgY29uc3QgewotKyAgICBj b25zdCBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhJiBzb25nKSBjb25zdCB7Ci0gICB2b3Ji aXNfY29tbWVudHMtPmFkZEZpZWxkKCJDT01QT1NFUiIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFN0ZFN0cmluZ1RvVGFnbGliU3RyaW5nKHNvbmcuY29tcG9zZXIoKSksIHRydWUpOwot ICAgdm9yYmlzX2NvbW1lbnRzLT5hZGRGaWVsZCgiUEVSRk9STUVSIiwKLUBAIC04MTAsNyArODEw LDcgQEAKLSAKLSB2b2lkIFRhZ1JlYWRlcjo6U2V0Rk1QU1N0YXRpc3RpY3NWb3JiaXNDb21tZW50 cygKLSAgICAgVGFnTGliOjpPZ2c6OlhpcGhDb21tZW50KiB2b3JiaXNfY29tbWVudHMsCi0tICAg IGNvbnN0IHBiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSYgc29uZykgY29uc3QgewotKyAgICBj b25zdCBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhJiBzb25nKSBjb25zdCB7Ci0gICBpZiAo c29uZy5wbGF5Y291bnQoKSkKLSAgICAgdm9yYmlzX2NvbW1lbnRzLT5hZGRGaWVsZCgiRk1QU19Q TEFZQ09VTlQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhZ0xpYjo6U3RyaW5n OjpudW1iZXIoc29uZy5wbGF5Y291bnQoKSksIHRydWUpOwotQEAgLTgyMiw1NCArODIyLDU0IEBA Ci0gCi0gdm9pZCBUYWdSZWFkZXI6OlNldEZNUFNSYXRpbmdWb3JiaXNDb21tZW50cygKLSAgICAg VGFnTGliOjpPZ2c6OlhpcGhDb21tZW50KiB2b3JiaXNfY29tbWVudHMsCi0tICAgIGNvbnN0IHBi Ojp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSYgc29uZykgY29uc3QgewotKyAgICBjb25zdCBjcGI6 OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhJiBzb25nKSBjb25zdCB7Ci0gICB2b3JiaXNfY29tbWVu dHMtPmFkZEZpZWxkKAotICAgICAgICJGTVBTX1JBVElORyIsIFFTdHJpbmdUb1RhZ2xpYlN0cmlu ZyhRU3RyaW5nOjpudW1iZXIoc29uZy5yYXRpbmcoKSkpLAotICAgICAgIHRydWUpOwotIH0KLSAK LS1wYjo6dGFncmVhZGVyOjpTb25nTWV0YWRhdGFfVHlwZSBUYWdSZWFkZXI6Okd1ZXNzRmlsZVR5 cGUoCi0rY3BiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YV9UeXBlIFRhZ1JlYWRlcjo6R3Vlc3NG aWxlVHlwZSgKLSAgICAgVGFnTGliOjpGaWxlUmVmKiBmaWxlcmVmKSBjb25zdCB7Ci0gI2lmZGVm IFRBR0xJQl9XSVRIX0FTRgotICAgaWYgKGR5bmFtaWNfY2FzdDxUYWdMaWI6OkFTRjo6RmlsZSo+ KGZpbGVyZWYtPmZpbGUoKSkpCi0tICAgIHJldHVybiBwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRh dGFfVHlwZV9BU0Y7Ci0rICAgIHJldHVybiBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhX1R5 cGVfQVNGOwotICNlbmRpZgotICAgaWYgKGR5bmFtaWNfY2FzdDxUYWdMaWI6OkZMQUM6OkZpbGUq PihmaWxlcmVmLT5maWxlKCkpKQotLSAgICByZXR1cm4gcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFk YXRhX1R5cGVfRkxBQzsKLSsgICAgcmV0dXJuIGNwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRhdGFf VHlwZV9GTEFDOwotICNpZmRlZiBUQUdMSUJfV0lUSF9NUDQKLSAgIGlmIChkeW5hbWljX2Nhc3Q8 VGFnTGliOjpNUDQ6OkZpbGUqPihmaWxlcmVmLT5maWxlKCkpKQotLSAgICByZXR1cm4gcGI6OnRh Z3JlYWRlcjo6U29uZ01ldGFkYXRhX1R5cGVfTVA0OwotKyAgICByZXR1cm4gY3BiOjp0YWdyZWFk ZXI6OlNvbmdNZXRhZGF0YV9UeXBlX01QNDsKLSAjZW5kaWYKLSAgIGlmIChkeW5hbWljX2Nhc3Q8 VGFnTGliOjpNUEM6OkZpbGUqPihmaWxlcmVmLT5maWxlKCkpKQotLSAgICByZXR1cm4gcGI6OnRh Z3JlYWRlcjo6U29uZ01ldGFkYXRhX1R5cGVfTVBDOwotKyAgICByZXR1cm4gY3BiOjp0YWdyZWFk ZXI6OlNvbmdNZXRhZGF0YV9UeXBlX01QQzsKLSAgIGlmIChkeW5hbWljX2Nhc3Q8VGFnTGliOjpN UEVHOjpGaWxlKj4oZmlsZXJlZi0+ZmlsZSgpKSkKLS0gICAgcmV0dXJuIHBiOjp0YWdyZWFkZXI6 OlNvbmdNZXRhZGF0YV9UeXBlX01QRUc7Ci0rICAgIHJldHVybiBjcGI6OnRhZ3JlYWRlcjo6U29u Z01ldGFkYXRhX1R5cGVfTVBFRzsKLSAgIGlmIChkeW5hbWljX2Nhc3Q8VGFnTGliOjpPZ2c6OkZM QUM6OkZpbGUqPihmaWxlcmVmLT5maWxlKCkpKQotLSAgICByZXR1cm4gcGI6OnRhZ3JlYWRlcjo6 U29uZ01ldGFkYXRhX1R5cGVfT0dHRkxBQzsKLSsgICAgcmV0dXJuIGNwYjo6dGFncmVhZGVyOjpT b25nTWV0YWRhdGFfVHlwZV9PR0dGTEFDOwotICAgaWYgKGR5bmFtaWNfY2FzdDxUYWdMaWI6Ok9n Zzo6U3BlZXg6OkZpbGUqPihmaWxlcmVmLT5maWxlKCkpKQotLSAgICByZXR1cm4gcGI6OnRhZ3Jl YWRlcjo6U29uZ01ldGFkYXRhX1R5cGVfT0dHU1BFRVg7Ci0rICAgIHJldHVybiBjcGI6OnRhZ3Jl YWRlcjo6U29uZ01ldGFkYXRhX1R5cGVfT0dHU1BFRVg7Ci0gICBpZiAoZHluYW1pY19jYXN0PFRh Z0xpYjo6T2dnOjpWb3JiaXM6OkZpbGUqPihmaWxlcmVmLT5maWxlKCkpKQotLSAgICByZXR1cm4g cGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhX1R5cGVfT0dHVk9SQklTOwotKyAgICByZXR1cm4g Y3BiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YV9UeXBlX09HR1ZPUkJJUzsKLSAjaWZkZWYgVEFH TElCX0hBU19PUFVTCi0gICBpZiAoZHluYW1pY19jYXN0PFRhZ0xpYjo6T2dnOjpPcHVzOjpGaWxl Kj4oZmlsZXJlZi0+ZmlsZSgpKSkKLS0gICAgcmV0dXJuIHBiOjp0YWdyZWFkZXI6OlNvbmdNZXRh ZGF0YV9UeXBlX09HR09QVVM7Ci0rICAgIHJldHVybiBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFk YXRhX1R5cGVfT0dHT1BVUzsKLSAjZW5kaWYKLSAgIGlmIChkeW5hbWljX2Nhc3Q8VGFnTGliOjpS SUZGOjpBSUZGOjpGaWxlKj4oZmlsZXJlZi0+ZmlsZSgpKSkKLS0gICAgcmV0dXJuIHBiOjp0YWdy ZWFkZXI6OlNvbmdNZXRhZGF0YV9UeXBlX0FJRkY7Ci0rICAgIHJldHVybiBjcGI6OnRhZ3JlYWRl cjo6U29uZ01ldGFkYXRhX1R5cGVfQUlGRjsKLSAgIGlmIChkeW5hbWljX2Nhc3Q8VGFnTGliOjpS SUZGOjpXQVY6OkZpbGUqPihmaWxlcmVmLT5maWxlKCkpKQotLSAgICByZXR1cm4gcGI6OnRhZ3Jl YWRlcjo6U29uZ01ldGFkYXRhX1R5cGVfV0FWOwotKyAgICByZXR1cm4gY3BiOjp0YWdyZWFkZXI6 OlNvbmdNZXRhZGF0YV9UeXBlX1dBVjsKLSAgIGlmIChkeW5hbWljX2Nhc3Q8VGFnTGliOjpUcnVl QXVkaW86OkZpbGUqPihmaWxlcmVmLT5maWxlKCkpKQotLSAgICByZXR1cm4gcGI6OnRhZ3JlYWRl cjo6U29uZ01ldGFkYXRhX1R5cGVfVFJVRUFVRElPOwotKyAgICByZXR1cm4gY3BiOjp0YWdyZWFk ZXI6OlNvbmdNZXRhZGF0YV9UeXBlX1RSVUVBVURJTzsKLSAgIGlmIChkeW5hbWljX2Nhc3Q8VGFn TGliOjpXYXZQYWNrOjpGaWxlKj4oZmlsZXJlZi0+ZmlsZSgpKSkKLS0gICAgcmV0dXJuIHBiOjp0 YWdyZWFkZXI6OlNvbmdNZXRhZGF0YV9UeXBlX1dBVlBBQ0s7Ci0rICAgIHJldHVybiBjcGI6OnRh Z3JlYWRlcjo6U29uZ01ldGFkYXRhX1R5cGVfV0FWUEFDSzsKLSAgIGlmIChkeW5hbWljX2Nhc3Q8 VGFnTGliOjpBUEU6OkZpbGUqPihmaWxlcmVmLT5maWxlKCkpKQotLSAgICByZXR1cm4gcGI6OnRh Z3JlYWRlcjo6U29uZ01ldGFkYXRhX1R5cGVfQVBFOwotKyAgICByZXR1cm4gY3BiOjp0YWdyZWFk ZXI6OlNvbmdNZXRhZGF0YV9UeXBlX0FQRTsKLSAKLS0gIHJldHVybiBwYjo6dGFncmVhZGVyOjpT b25nTWV0YWRhdGFfVHlwZV9VTktOT1dOOwotKyAgcmV0dXJuIGNwYjo6dGFncmVhZGVyOjpTb25n TWV0YWRhdGFfVHlwZV9VTktOT1dOOwotIH0KLSAKLSBib29sIFRhZ1JlYWRlcjo6U2F2ZUZpbGUo Y29uc3QgUVN0cmluZyYgZmlsZW5hbWUsCi0tICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHBiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSYgc29uZykgY29uc3QgewotKyAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhJiBzb25nKSBj b25zdCB7Ci0gICBpZiAoZmlsZW5hbWUuaXNOdWxsKCkpIHJldHVybiBmYWxzZTsKLSAKLSAgIHFM b2coRGVidWcpIDw8ICJTYXZpbmcgdGFncyB0byIgPDwgZmlsZW5hbWU7Ci1AQCAtOTg2LDcgKzk4 Niw3IEBACi0gfQotIAotIGJvb2wgVGFnUmVhZGVyOjpTYXZlU29uZ1N0YXRpc3RpY3NUb0ZpbGUo Ci0tICAgIGNvbnN0IFFTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBwYjo6dGFncmVhZGVyOjpTb25n TWV0YWRhdGEmIHNvbmcpIGNvbnN0IHsKLSsgICAgY29uc3QgUVN0cmluZyYgZmlsZW5hbWUsIGNv bnN0IGNwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRhdGEmIHNvbmcpIGNvbnN0IHsKLSAgIGlmIChm aWxlbmFtZS5pc051bGwoKSkgcmV0dXJuIGZhbHNlOwotIAotICAgcUxvZyhEZWJ1ZykgPDwgIlNh dmluZyBzb25nIHN0YXRpc3RpY3MgdGFncyB0byIgPDwgZmlsZW5hbWU7Ci1AQCAtMTA4Myw3ICsx MDgzLDcgQEAKLSB9Ci0gCi0gYm9vbCBUYWdSZWFkZXI6OlNhdmVTb25nUmF0aW5nVG9GaWxlKAot LSAgICBjb25zdCBRU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgcGI6OnRhZ3JlYWRlcjo6U29uZ01l dGFkYXRhJiBzb25nKSBjb25zdCB7Ci0rICAgIGNvbnN0IFFTdHJpbmcmIGZpbGVuYW1lLCBjb25z dCBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhJiBzb25nKSBjb25zdCB7Ci0gICBpZiAoZmls ZW5hbWUuaXNOdWxsKCkpIHJldHVybiBmYWxzZTsKLSAKLSAgIHFMb2coRGVidWcpIDw8ICJTYXZp bmcgc29uZyByYXRpbmcgdGFncyB0byIgPDwgZmlsZW5hbWU7Ci1AQCAtMTQyNyw3ICsxNDI3LDcg QEAKLSBib29sIFRhZ1JlYWRlcjo6UmVhZENsb3VkRmlsZShjb25zdCBRVXJsJiBkb3dubG9hZF91 cmwsIGNvbnN0IFFTdHJpbmcmIHRpdGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBzaXplLCBjb25zdCBRU3RyaW5nJiBtaW1lX3R5cGUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgUVN0cmluZyYgYXV0aG9yaXNhdGlvbl9oZWFkZXIsCi0tICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhKiBzb25n KSBjb25zdCB7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BiOjp0YWdyZWFkZXI6 OlNvbmdNZXRhZGF0YSogc29uZykgY29uc3QgewotICAgcUxvZyhEZWJ1ZykgPDwgIkxvYWRpbmcg dGFncyBmcm9tIiA8PCB0aXRsZTsKLSAKLSAgIHN0ZDo6dW5pcXVlX3B0cjxDbG91ZFN0cmVhbT4g c3RyZWFtKAotQEAgLTE0ODgsNyArMTQ4OCw3IEBACi0gICAgICAgc29uZy0+c2V0X3llYXIodGFn LT50YWcoKS0+eWVhcigpKTsKLSAgICAgfQotIAotLSAgICBzb25nLT5zZXRfdHlwZShwYjo6dGFn cmVhZGVyOjpTb25nTWV0YWRhdGFfVHlwZV9TVFJFQU0pOwotKyAgICBzb25nLT5zZXRfdHlwZShj cGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhX1R5cGVfU1RSRUFNKTsKLSAKLSAgICAgaWYgKHRh Zy0+YXVkaW9Qcm9wZXJ0aWVzKCkpIHsKLSAgICAgICBzb25nLT5zZXRfbGVuZ3RoX25hbm9zZWMo dGFnLT5hdWRpb1Byb3BlcnRpZXMoKS0+bGVuZ3RoKCkgKiBrTnNlY1BlclNlYyk7Ci1kaWZmIC11 ciBleHQvbGliY2xlbWVudGluZS10YWdyZWFkZXIvdGFncmVhZGVyLmggZXh0L2xpYmNsZW1lbnRp bmUtdGFncmVhZGVyL3RhZ3JlYWRlci5oCi0tLS0gYS9leHQvbGliY2xlbWVudGluZS10YWdyZWFk ZXIvdGFncmVhZGVyLmgJMjAyMC0wOS0yMyAyMjozNDowOC4wMDAwMDAwMDAgLTA0MDAKLSsrKyBi L2V4dC9saWJjbGVtZW50aW5lLXRhZ3JlYWRlci90YWdyZWFkZXIuaAkyMDIxLTAyLTE5IDEyOjAz OjQ4LjIzNTQ3MzAzMCAtMDUwMAotQEAgLTU3LDE2ICs1NywxNiBAQAotICAgVGFnUmVhZGVyKCk7 Ci0gCi0gICB2b2lkIFJlYWRGaWxlKGNvbnN0IFFTdHJpbmcmIGZpbGVuYW1lLAotLSAgICAgICAg ICAgICAgICBwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRhdGEqIHNvbmcpIGNvbnN0OwotKyAgICAg ICAgICAgICAgICBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhKiBzb25nKSBjb25zdDsKLSAg IGJvb2wgU2F2ZUZpbGUoY29uc3QgUVN0cmluZyYgZmlsZW5hbWUsCi0tICAgICAgICAgICAgICAg IGNvbnN0IHBiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSYgc29uZykgY29uc3Q7Ci0rICAgICAg ICAgICAgICAgIGNvbnN0IGNwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRhdGEmIHNvbmcpIGNvbnN0 OwotICAgLy8gUmV0dXJucyBmYWxzZSBpZiBzb21ldGhpbmcgd2VudCB3cm9uZzsgcmV0dXJucyB0 cnVlIG90aGVyd2lzZSAobWlnaHQKLSAgIC8vIHJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsZSBleGlz dHMgYnV0IG5vdGhpbmcgaGFzIGJlZW4gd3JpdHRlbiBpbnNpZGUgYmVjYXVzZQotICAgLy8gc3Rh dGlzdGljcyB0YWcgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMga2luZCBvZiBmaWxl KQotICAgYm9vbCBTYXZlU29uZ1N0YXRpc3RpY3NUb0ZpbGUoY29uc3QgUVN0cmluZyYgZmlsZW5h bWUsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYjo6dGFncmVhZGVy OjpTb25nTWV0YWRhdGEmIHNvbmcpIGNvbnN0OwotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY3BiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSYgc29uZykgY29uc3Q7Ci0g ICBib29sIFNhdmVTb25nUmF0aW5nVG9GaWxlKGNvbnN0IFFTdHJpbmcmIGZpbGVuYW1lLAotLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRh dGEmIHNvbmcpIGNvbnN0OwotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjcGI6 OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhJiBzb25nKSBjb25zdDsKLSAKLSAgIGJvb2wgSXNNZWRp YUZpbGUoY29uc3QgUVN0cmluZyYgZmlsZW5hbWUpIGNvbnN0OwotICAgUUJ5dGVBcnJheSBMb2Fk RW1iZWRkZWRBcnQoY29uc3QgUVN0cmluZyYgZmlsZW5hbWUpIGNvbnN0OwotQEAgLTc0LDcgKzc0 LDcgQEAKLSAjaWZkZWYgSEFWRV9HT09HTEVfRFJJVkUKLSAgIGJvb2wgUmVhZENsb3VkRmlsZShj b25zdCBRVXJsJiBkb3dubG9hZF91cmwsIGNvbnN0IFFTdHJpbmcmIHRpdGxlLCBpbnQgc2l6ZSwK LSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nJiBtaW1lX3R5cGUsIGNvbnN0IFFT dHJpbmcmIGFjY2Vzc190b2tlbiwKLS0gICAgICAgICAgICAgICAgICAgICBwYjo6dGFncmVhZGVy OjpTb25nTWV0YWRhdGEqIHNvbmcpIGNvbnN0OwotKyAgICAgICAgICAgICAgICAgICAgIGNwYjo6 dGFncmVhZGVyOjpTb25nTWV0YWRhdGEqIHNvbmcpIGNvbnN0OwotICNlbmRpZiAgLy8gSEFWRV9H T09HTEVfRFJJVkUKLSAKLSAgIHN0YXRpYyB2b2lkIERlY29kZShjb25zdCBUYWdMaWI6OlN0cmlu ZyYgdGFnLCBjb25zdCBRVGV4dENvZGVjKiBjb2RlYywKLUBAIC04MywyMyArODMsMjMgQEAKLSAg ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogb3V0cHV0KTsKLSAKLSAgIHZvaWQgUGFy c2VGTVBTRnJhbWUoY29uc3QgUVN0cmluZyYgbmFtZSwgY29uc3QgUVN0cmluZyYgdmFsdWUsCi0t ICAgICAgICAgICAgICAgICAgICAgIHBiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSogc29uZykg Y29uc3Q7Ci0rICAgICAgICAgICAgICAgICAgICAgIGNwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRh dGEqIHNvbmcpIGNvbnN0OwotICAgdm9pZCBQYXJzZU9nZ1RhZyhjb25zdCBUYWdMaWI6Ok9nZzo6 RmllbGRMaXN0TWFwJiBtYXAsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFFUZXh0Q29kZWMq IGNvZGVjLCBRU3RyaW5nKiBkaXNjLCBRU3RyaW5nKiBjb21waWxhdGlvbiwKLS0gICAgICAgICAg ICAgICAgICAgcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhKiBzb25nKSBjb25zdDsKLSsgICAg ICAgICAgICAgICAgICAgY3BiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSogc29uZykgY29uc3Q7 Ci0gICB2b2lkIFNldFZvcmJpc0NvbW1lbnRzKFRhZ0xpYjo6T2dnOjpYaXBoQ29tbWVudCogdm9y YmlzX2NvbW1lbnRzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYjo6dGFncmVh ZGVyOjpTb25nTWV0YWRhdGEmIHNvbmcpIGNvbnN0OwotKyAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhJiBzb25nKSBjb25zdDsKLSAgIHZv aWQgU2V0Rk1QU1N0YXRpc3RpY3NWb3JiaXNDb21tZW50cygKLSAgICAgICBUYWdMaWI6Ok9nZzo6 WGlwaENvbW1lbnQqIHZvcmJpc19jb21tZW50cywKLS0gICAgICBjb25zdCBwYjo6dGFncmVhZGVy OjpTb25nTWV0YWRhdGEmIHNvbmcpIGNvbnN0OwotKyAgICAgIGNvbnN0IGNwYjo6dGFncmVhZGVy OjpTb25nTWV0YWRhdGEmIHNvbmcpIGNvbnN0OwotICAgdm9pZCBTZXRGTVBTUmF0aW5nVm9yYmlz Q29tbWVudHMoCi0gICAgICAgVGFnTGliOjpPZ2c6OlhpcGhDb21tZW50KiB2b3JiaXNfY29tbWVu dHMsCi0tICAgICAgY29uc3QgcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhJiBzb25nKSBjb25z dDsKLSsgICAgICBjb25zdCBjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhJiBzb25nKSBjb25z dDsKLSAKLS0gIHZvaWQgR3Vlc3NBcnRpc3RBbmRUaXRsZShwYjo6dGFncmVhZGVyOjpTb25nTWV0 YWRhdGEqIHNvbmcpIGNvbnN0OwotLSAgdm9pZCBHdWVzc0FsYnVtKGNvbnN0IFFGaWxlSW5mbyAm aW5mbywgcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhKiBzb25nKSBjb25zdDsKLSsgIHZvaWQg R3Vlc3NBcnRpc3RBbmRUaXRsZShjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhKiBzb25nKSBj b25zdDsKLSsgIHZvaWQgR3Vlc3NBbGJ1bShjb25zdCBRRmlsZUluZm8gJmluZm8sIGNwYjo6dGFn cmVhZGVyOjpTb25nTWV0YWRhdGEqIHNvbmcpIGNvbnN0OwotIAotLSAgcGI6OnRhZ3JlYWRlcjo6 U29uZ01ldGFkYXRhX1R5cGUgR3Vlc3NGaWxlVHlwZSgKLSsgIGNwYjo6dGFncmVhZGVyOjpTb25n TWV0YWRhdGFfVHlwZSBHdWVzc0ZpbGVUeXBlKAotICAgICAgIFRhZ0xpYjo6RmlsZVJlZiogZmls ZXJlZikgY29uc3Q7Ci0gCi0gICB2b2lkIFNldFVzZXJUZXh0RnJhbWUoY29uc3QgUVN0cmluZyYg ZGVzY3JpcHRpb24sIGNvbnN0IFFTdHJpbmcmIHZhbHVlLAotZGlmZiAtdXIgZXh0L2xpYmNsZW1l bnRpbmUtdGFncmVhZGVyL3RhZ3JlYWRlcm1lc3NhZ2VzLnByb3RvIGV4dC9saWJjbGVtZW50aW5l LXRhZ3JlYWRlci90YWdyZWFkZXJtZXNzYWdlcy5wcm90bwotLS0tIGEvZXh0L2xpYmNsZW1lbnRp bmUtdGFncmVhZGVyL3RhZ3JlYWRlcm1lc3NhZ2VzLnByb3RvCTIwMjAtMDktMjMgMjI6MzQ6MDgu MDAwMDAwMDAwIC0wNDAwCi0rKysgYi9leHQvbGliY2xlbWVudGluZS10YWdyZWFkZXIvdGFncmVh ZGVybWVzc2FnZXMucHJvdG8JMjAyMS0wMi0xOSAxMjowMzo0OC4yMzU0NzMwMzAgLTA1MDAKLUBA IC0xLDYgKzEsNiBAQAotIHN5bnRheCA9ICJwcm90bzIiOwotIAotLXBhY2thZ2UgcGIudGFncmVh ZGVyOwotK3BhY2thZ2UgY3BiLnRhZ3JlYWRlcjsKLSAKLSBtZXNzYWdlIFNvbmdNZXRhZGF0YSB7 Ci0gICBlbnVtIFR5cGUgewotZGlmZiAtdXIgc3JjL2NvcmUvc29uZy5jcHAgc3JjL2NvcmUvc29u Zy5jcHAKLS0tLSBhL3NyYy9jb3JlL3NvbmcuY3BwCTIwMjAtMDktMjMgMjI6MzQ6MDguMDAwMDAw MDAwIC0wNDAwCi0rKysgYi9zcmMvY29yZS9zb25nLmNwcAkyMDIxLTAyLTE5IDEyOjAzOjQ4LjIz NjQ3MzAzMyAtMDUwMAotQEAgLTUyNiw3ICs1MjYsNyBAQAotICAgcmV0dXJuIGNvZGVjLT50b1Vu aWNvZGUodGFnLnRvVXRmOCgpKTsKLSB9Ci0gCi0tdm9pZCBTb25nOjpJbml0RnJvbVByb3RvYnVm KGNvbnN0IHBiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSYgcGIpIHsKLSt2b2lkIFNvbmc6Oklu aXRGcm9tUHJvdG9idWYoY29uc3QgY3BiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSYgcGIpIHsK LSAgIGQtPmluaXRfZnJvbV9maWxlXyA9IHRydWU7Ci0gICBkLT52YWxpZF8gPSBwYi52YWxpZCgp OwotICAgZC0+dGl0bGVfID0gUVN0cmluZ0Zyb21TdGRTdHJpbmcocGIudGl0bGUoKSk7Ci1AQCAt NTc1LDcgKzU3NSw3IEBACi0gICBJbml0QXJ0TWFudWFsKCk7Ci0gfQotIAotLXZvaWQgU29uZzo6 VG9Qcm90b2J1ZihwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRhdGEqIHBiKSBjb25zdCB7Ci0rdm9p ZCBTb25nOjpUb1Byb3RvYnVmKGNwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRhdGEqIHBiKSBjb25z dCB7Ci0gICBjb25zdCBRQnl0ZUFycmF5IHVybChkLT51cmxfLnRvRW5jb2RlZCgpKTsKLSAKLSAg IHBiLT5zZXRfdmFsaWQoZC0+dmFsaWRfKTsKLUBAIC02MTAsNyArNjEwLDcgQEAKLSAgIHBiLT5z ZXRfZmlsZXNpemUoZC0+ZmlsZXNpemVfKTsKLSAgIHBiLT5zZXRfc3VzcGljaW91c190YWdzKGQt PnN1c3BpY2lvdXNfdGFnc18pOwotICAgcGItPnNldF9hcnRfYXV0b21hdGljKERhdGFDb21tYVNp emVGcm9tUVN0cmluZyhkLT5hcnRfYXV0b21hdGljXykpOwotLSAgcGItPnNldF90eXBlKHN0YXRp Y19jYXN0PHBiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YV9UeXBlPihkLT5maWxldHlwZV8pKTsK LSsgIHBiLT5zZXRfdHlwZShzdGF0aWNfY2FzdDxjcGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRh X1R5cGU+KGQtPmZpbGV0eXBlXykpOwotIH0KLSAKLSB2b2lkIFNvbmc6OkluaXRGcm9tUXVlcnko Y29uc3QgU3FsUm93JiBxLCBib29sIHJlbGlhYmxlX21ldGFkYXRhLCBpbnQgY29sKSB7Ci1kaWZm IC11ciBzcmMvY29yZS9zb25nLmggc3JjL2NvcmUvc29uZy5oCi0tLS0gYS9zcmMvY29yZS9zb25n LmgJMjAyMC0wOS0yMyAyMjozNDowOC4wMDAwMDAwMDAgLTA0MDAKLSsrKyBiL3NyYy9jb3JlL3Nv bmcuaAkyMDIxLTAyLTE5IDEyOjA0OjAzLjA5MjUyMTkwNiAtMDUwMAotQEAgLTM3LDExICszNywx MSBAQAotICNpbmNsdWRlICJjb25maWcuaCIKLSAjaW5jbHVkZSAiZW5naW5lcy9lbmdpbmVfZndk LmgiCi0gCi0tbmFtZXNwYWNlIHBiIHsKLStuYW1lc3BhY2UgY3BiIHsKLSBuYW1lc3BhY2UgdGFn cmVhZGVyIHsKLSBjbGFzcyBTb25nTWV0YWRhdGE7Ci0gfSAgLy8gbmFtZXNwYWNlIHRhZ3JlYWRl cgotLX0gIC8vIG5hbWVzcGFjZSBwYgotK30gIC8vIG5hbWVzcGFjZSBjcGIKLSAKLSBjbGFzcyBR U3FsUXVlcnk7Ci0gY2xhc3MgUVVybDsKLUBAIC0xMjMsNyArMTIzLDcgQEAKLSAgICAgICAgICAg ICBxaW50NjQgbGVuZ3RoX25hbm9zZWMpOwotICAgdm9pZCBJbml0KGNvbnN0IFFTdHJpbmcmIHRp dGxlLCBjb25zdCBRU3RyaW5nJiBhcnRpc3QsIGNvbnN0IFFTdHJpbmcmIGFsYnVtLAotICAgICAg ICAgICAgIHFpbnQ2NCBiZWdpbm5pbmcsIHFpbnQ2NCBlbmQpOwotLSAgdm9pZCBJbml0RnJvbVBy b3RvYnVmKGNvbnN0IHBiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSYgcGIpOwotKyAgdm9pZCBJ bml0RnJvbVByb3RvYnVmKGNvbnN0IGNwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRhdGEmIHBiKTsK LSAgIHZvaWQgSW5pdEZyb21RdWVyeShjb25zdCBTcWxSb3cmIHF1ZXJ5LCBib29sIHJlbGlhYmxl X21ldGFkYXRhLCBpbnQgY29sID0gMCk7Ci0gICB2b2lkIEluaXRGcm9tRmlsZVBhcnRpYWwoCi0g ICAgICAgY29uc3QgUVN0cmluZyYgZmlsZW5hbWUpOyAgLy8gSnVzdCBzdG9yZSB0aGUgZmlsZW5h bWU6IGluY29tcGxldGUgYnV0IGZhc3QKLUBAIC0xNTksNyArMTU5LDcgQEAKLSAgIHZvaWQgVG9M YXN0Rk0obGFzdGZtOjpUcmFjayogdHJhY2ssIGJvb2wgcHJlZmVyX2FsYnVtX2FydGlzdCkgY29u c3Q7Ci0gI2VuZGlmCi0gICB2b2lkIFRvWGVzYW0oUVZhcmlhbnRNYXAqIG1hcCkgY29uc3Q7Ci0t ICB2b2lkIFRvUHJvdG9idWYocGI6OnRhZ3JlYWRlcjo6U29uZ01ldGFkYXRhKiBwYikgY29uc3Q7 Ci0rICB2b2lkIFRvUHJvdG9idWYoY3BiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSogcGIpIGNv bnN0OwotIAotICAgLy8gU2ltcGxlIGFjY2Vzc29ycwotICAgYm9vbCBpc192YWxpZCgpIGNvbnN0 OwotZGlmZiAtdXIgc3JjL2NvcmUvdGFncmVhZGVyY2xpZW50LmNwcCBzcmMvY29yZS90YWdyZWFk ZXJjbGllbnQuY3BwCi0tLS0gYS9zcmMvY29yZS90YWdyZWFkZXJjbGllbnQuY3BwCTIwMjAtMDkt MjMgMjI6MzQ6MDguMDAwMDAwMDAwIC0wNDAwCi0rKysgYi9zcmMvY29yZS90YWdyZWFkZXJjbGll bnQuY3BwCTIwMjEtMDItMTkgMTI6MDM6NDguMjM2NDczMDMzIC0wNTAwCi1AQCAtNTgsOCArNTgs OCBAQAotIH0KLSAKLSBUYWdSZWFkZXJSZXBseSogVGFnUmVhZGVyQ2xpZW50OjpSZWFkRmlsZShj b25zdCBRU3RyaW5nJiBmaWxlbmFtZSkgewotLSAgcGI6OnRhZ3JlYWRlcjo6TWVzc2FnZSBtZXNz YWdlOwotLSAgcGI6OnRhZ3JlYWRlcjo6UmVhZEZpbGVSZXF1ZXN0KiByZXEgPSBtZXNzYWdlLm11 dGFibGVfcmVhZF9maWxlX3JlcXVlc3QoKTsKLSsgIGNwYjo6dGFncmVhZGVyOjpNZXNzYWdlIG1l c3NhZ2U7Ci0rICBjcGI6OnRhZ3JlYWRlcjo6UmVhZEZpbGVSZXF1ZXN0KiByZXEgPSBtZXNzYWdl Lm11dGFibGVfcmVhZF9maWxlX3JlcXVlc3QoKTsKLSAKLSAgIHJlcS0+c2V0X2ZpbGVuYW1lKERh dGFDb21tYVNpemVGcm9tUVN0cmluZyhmaWxlbmFtZSkpOwotIAotQEAgLTY4LDggKzY4LDggQEAK LSAKLSBUYWdSZWFkZXJSZXBseSogVGFnUmVhZGVyQ2xpZW50OjpTYXZlRmlsZShjb25zdCBRU3Ry aW5nJiBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBTb25nJiBtZXRhZGF0YSkgewotLSAgcGI6OnRhZ3JlYWRlcjo6TWVzc2FnZSBtZXNz YWdlOwotLSAgcGI6OnRhZ3JlYWRlcjo6U2F2ZUZpbGVSZXF1ZXN0KiByZXEgPSBtZXNzYWdlLm11 dGFibGVfc2F2ZV9maWxlX3JlcXVlc3QoKTsKLSsgIGNwYjo6dGFncmVhZGVyOjpNZXNzYWdlIG1l c3NhZ2U7Ci0rICBjcGI6OnRhZ3JlYWRlcjo6U2F2ZUZpbGVSZXF1ZXN0KiByZXEgPSBtZXNzYWdl Lm11dGFibGVfc2F2ZV9maWxlX3JlcXVlc3QoKTsKLSAKLSAgIHJlcS0+c2V0X2ZpbGVuYW1lKERh dGFDb21tYVNpemVGcm9tUVN0cmluZyhmaWxlbmFtZSkpOwotICAgbWV0YWRhdGEuVG9Qcm90b2J1 ZihyZXEtPm11dGFibGVfbWV0YWRhdGEoKSk7Ci1AQCAtNzgsOCArNzgsOCBAQAotIH0KLSAKLSBU YWdSZWFkZXJSZXBseSogVGFnUmVhZGVyQ2xpZW50OjpVcGRhdGVTb25nU3RhdGlzdGljcyhjb25z dCBTb25nJiBtZXRhZGF0YSkgewotLSAgcGI6OnRhZ3JlYWRlcjo6TWVzc2FnZSBtZXNzYWdlOwot LSAgcGI6OnRhZ3JlYWRlcjo6U2F2ZVNvbmdTdGF0aXN0aWNzVG9GaWxlUmVxdWVzdCogcmVxID0K LSsgIGNwYjo6dGFncmVhZGVyOjpNZXNzYWdlIG1lc3NhZ2U7Ci0rICBjcGI6OnRhZ3JlYWRlcjo6 U2F2ZVNvbmdTdGF0aXN0aWNzVG9GaWxlUmVxdWVzdCogcmVxID0KLSAgICAgICBtZXNzYWdlLm11 dGFibGVfc2F2ZV9zb25nX3N0YXRpc3RpY3NfdG9fZmlsZV9yZXF1ZXN0KCk7Ci0gCi0gICByZXEt PnNldF9maWxlbmFtZShEYXRhQ29tbWFTaXplRnJvbVFTdHJpbmcobWV0YWRhdGEudXJsKCkudG9M b2NhbEZpbGUoKSkpOwotQEAgLTk2LDggKzk2LDggQEAKLSB9Ci0gCi0gVGFnUmVhZGVyUmVwbHkq IFRhZ1JlYWRlckNsaWVudDo6VXBkYXRlU29uZ1JhdGluZyhjb25zdCBTb25nJiBtZXRhZGF0YSkg ewotLSAgcGI6OnRhZ3JlYWRlcjo6TWVzc2FnZSBtZXNzYWdlOwotLSAgcGI6OnRhZ3JlYWRlcjo6 U2F2ZVNvbmdSYXRpbmdUb0ZpbGVSZXF1ZXN0KiByZXEgPQotKyAgY3BiOjp0YWdyZWFkZXI6Ok1l c3NhZ2UgbWVzc2FnZTsKLSsgIGNwYjo6dGFncmVhZGVyOjpTYXZlU29uZ1JhdGluZ1RvRmlsZVJl cXVlc3QqIHJlcSA9Ci0gICAgICAgbWVzc2FnZS5tdXRhYmxlX3NhdmVfc29uZ19yYXRpbmdfdG9f ZmlsZV9yZXF1ZXN0KCk7Ci0gCi0gICByZXEtPnNldF9maWxlbmFtZShEYXRhQ29tbWFTaXplRnJv bVFTdHJpbmcobWV0YWRhdGEudXJsKCkudG9Mb2NhbEZpbGUoKSkpOwotQEAgLTExNCw4ICsxMTQs OCBAQAotIH0KLSAKLSBUYWdSZWFkZXJSZXBseSogVGFnUmVhZGVyQ2xpZW50OjpJc01lZGlhRmls ZShjb25zdCBRU3RyaW5nJiBmaWxlbmFtZSkgewotLSAgcGI6OnRhZ3JlYWRlcjo6TWVzc2FnZSBt ZXNzYWdlOwotLSAgcGI6OnRhZ3JlYWRlcjo6SXNNZWRpYUZpbGVSZXF1ZXN0KiByZXEgPQotKyAg Y3BiOjp0YWdyZWFkZXI6Ok1lc3NhZ2UgbWVzc2FnZTsKLSsgIGNwYjo6dGFncmVhZGVyOjpJc01l ZGlhRmlsZVJlcXVlc3QqIHJlcSA9Ci0gICAgICAgbWVzc2FnZS5tdXRhYmxlX2lzX21lZGlhX2Zp bGVfcmVxdWVzdCgpOwotIAotICAgcmVxLT5zZXRfZmlsZW5hbWUoRGF0YUNvbW1hU2l6ZUZyb21R U3RyaW5nKGZpbGVuYW1lKSk7Ci1AQCAtMTI0LDggKzEyNCw4IEBACi0gfQotIAotIFRhZ1JlYWRl clJlcGx5KiBUYWdSZWFkZXJDbGllbnQ6OkxvYWRFbWJlZGRlZEFydChjb25zdCBRU3RyaW5nJiBm aWxlbmFtZSkgewotLSAgcGI6OnRhZ3JlYWRlcjo6TWVzc2FnZSBtZXNzYWdlOwotLSAgcGI6OnRh Z3JlYWRlcjo6TG9hZEVtYmVkZGVkQXJ0UmVxdWVzdCogcmVxID0KLSsgIGNwYjo6dGFncmVhZGVy OjpNZXNzYWdlIG1lc3NhZ2U7Ci0rICBjcGI6OnRhZ3JlYWRlcjo6TG9hZEVtYmVkZGVkQXJ0UmVx dWVzdCogcmVxID0KLSAgICAgICBtZXNzYWdlLm11dGFibGVfbG9hZF9lbWJlZGRlZF9hcnRfcmVx dWVzdCgpOwotIAotICAgcmVxLT5zZXRfZmlsZW5hbWUoRGF0YUNvbW1hU2l6ZUZyb21RU3RyaW5n KGZpbGVuYW1lKSk7Ci1AQCAtMTM2LDggKzEzNiw4IEBACi0gVGFnUmVhZGVyUmVwbHkqIFRhZ1Jl YWRlckNsaWVudDo6UmVhZENsb3VkRmlsZSgKLSAgICAgY29uc3QgUVVybCYgZG93bmxvYWRfdXJs LCBjb25zdCBRU3RyaW5nJiB0aXRsZSwgaW50IHNpemUsCi0gICAgIGNvbnN0IFFTdHJpbmcmIG1p bWVfdHlwZSwgY29uc3QgUVN0cmluZyYgYXV0aG9yaXNhdGlvbl9oZWFkZXIpIHsKLS0gIHBiOjp0 YWdyZWFkZXI6Ok1lc3NhZ2UgbWVzc2FnZTsKLS0gIHBiOjp0YWdyZWFkZXI6OlJlYWRDbG91ZEZp bGVSZXF1ZXN0KiByZXEgPQotKyAgY3BiOjp0YWdyZWFkZXI6Ok1lc3NhZ2UgbWVzc2FnZTsKLSsg IGNwYjo6dGFncmVhZGVyOjpSZWFkQ2xvdWRGaWxlUmVxdWVzdCogcmVxID0KLSAgICAgICBtZXNz YWdlLm11dGFibGVfcmVhZF9jbG91ZF9maWxlX3JlcXVlc3QoKTsKLSAKLSAgIGNvbnN0IFFTdHJp bmcgdXJsX3N0cmluZyA9IGRvd25sb2FkX3VybC50b0VuY29kZWQoKTsKLWRpZmYgLXVyIHNyYy9j b3JlL3RhZ3JlYWRlcmNsaWVudC5oIHNyYy9jb3JlL3RhZ3JlYWRlcmNsaWVudC5oCi0tLS0gYS9z cmMvY29yZS90YWdyZWFkZXJjbGllbnQuaAkyMDIwLTA5LTIzIDIyOjM0OjA4LjAwMDAwMDAwMCAt MDQwMAotKysrIGIvc3JjL2NvcmUvdGFncmVhZGVyY2xpZW50LmgJMjAyMS0wMi0xOSAxMjowMzo0 OC4yMzY0NzMwMzMgLTA1MDAKLUBAIC0zNyw3ICszNyw3IEBACi0gIHB1YmxpYzoKLSAgIGV4cGxp Y2l0IFRhZ1JlYWRlckNsaWVudChRT2JqZWN0KiBwYXJlbnQgPSBudWxscHRyKTsKLSAKLS0gIHR5 cGVkZWYgQWJzdHJhY3RNZXNzYWdlSGFuZGxlcjxwYjo6dGFncmVhZGVyOjpNZXNzYWdlPiBIYW5k bGVyVHlwZTsKLSsgIHR5cGVkZWYgQWJzdHJhY3RNZXNzYWdlSGFuZGxlcjxjcGI6OnRhZ3JlYWRl cjo6TWVzc2FnZT4gSGFuZGxlclR5cGU7Ci0gICB0eXBlZGVmIEhhbmRsZXJUeXBlOjpSZXBseVR5 cGUgUmVwbHlUeXBlOwotIAotICAgc3RhdGljIGNvbnN0IGNoYXIqIGtXb3JrZXJFeGVjdXRhYmxl TmFtZTsKLUBAIC03OCw3ICs3OCw3IEBACi0gICBzdGF0aWMgVGFnUmVhZGVyQ2xpZW50KiBzSW5z dGFuY2U7Ci0gCi0gICBXb3JrZXJQb29sPEhhbmRsZXJUeXBlPiogd29ya2VyX3Bvb2xfOwotLSAg UUxpc3Q8cGI6OnRhZ3JlYWRlcjo6TWVzc2FnZT4gbWVzc2FnZV9xdWV1ZV87Ci0rICBRTGlzdDxj cGI6OnRhZ3JlYWRlcjo6TWVzc2FnZT4gbWVzc2FnZV9xdWV1ZV87Ci0gfTsKLSAKLSB0eXBlZGVm IFRhZ1JlYWRlckNsaWVudDo6UmVwbHlUeXBlIFRhZ1JlYWRlclJlcGx5OwotZGlmZiAtdXIgc3Jj L2dsb2JhbHNlYXJjaC9zcG90aWZ5c2VhcmNocHJvdmlkZXIuY3BwIHNyYy9nbG9iYWxzZWFyY2gv c3BvdGlmeXNlYXJjaHByb3ZpZGVyLmNwcAotLS0tIGEvc3JjL2dsb2JhbHNlYXJjaC9zcG90aWZ5 c2VhcmNocHJvdmlkZXIuY3BwCTIwMjAtMDktMjMgMjI6MzQ6MDguMDAwMDAwMDAwIC0wNDAwCi0r KysgYi9zcmMvZ2xvYmFsc2VhcmNoL3Nwb3RpZnlzZWFyY2hwcm92aWRlci5jcHAJMjAyMS0wMi0x OSAxMjowMzo0OC4yMzY0NzMwMzMgLTA1MDAKLUBAIC00OSwxNiArNDksMTYgQEAKLSAgIGlmICgh c2VydmljZV8tPklzQmxvYkluc3RhbGxlZCgpKSByZXR1cm4gbnVsbHB0cjsKLSAKLSAgIHNlcnZl cl8gPSBzZXJ2aWNlXy0+c2VydmVyKCk7Ci0tICBjb25uZWN0KHNlcnZlcl8sIFNJR05BTChTZWFy Y2hSZXN1bHRzKHBiOjpzcG90aWZ5OjpTZWFyY2hSZXNwb25zZSkpLAotLSAgICAgICAgICBTTE9U KFNlYXJjaEZpbmlzaGVkU2xvdChwYjo6c3BvdGlmeTo6U2VhcmNoUmVzcG9uc2UpKSk7Ci0rICBj b25uZWN0KHNlcnZlcl8sIFNJR05BTChTZWFyY2hSZXN1bHRzKGNwYjo6c3BvdGlmeTo6U2VhcmNo UmVzcG9uc2UpKSwKLSsgICAgICAgICAgU0xPVChTZWFyY2hGaW5pc2hlZFNsb3QoY3BiOjpzcG90 aWZ5OjpTZWFyY2hSZXNwb25zZSkpKTsKLSAgIGNvbm5lY3Qoc2VydmVyXywgU0lHTkFMKEltYWdl TG9hZGVkKFFTdHJpbmcsIFFJbWFnZSkpLAotICAgICAgICAgICBTTE9UKEFydExvYWRlZFNsb3Qo UVN0cmluZywgUUltYWdlKSkpOwotICAgY29ubmVjdChzZXJ2ZXJfLCBTSUdOQUwoZGVzdHJveWVk KCkpLCBTTE9UKFNlcnZlckRlc3Ryb3llZCgpKSk7Ci0tICBjb25uZWN0KHNlcnZlcl8sIFNJR05B TChTdGFycmVkTG9hZGVkKHBiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSkpLAotLSAg ICAgICAgICBTTE9UKFN1Z2dlc3Rpb25zTG9hZGVkKHBiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RS ZXNwb25zZSkpKTsKLSsgIGNvbm5lY3Qoc2VydmVyXywgU0lHTkFMKFN0YXJyZWRMb2FkZWQoY3Bi OjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSkpLAotKyAgICAgICAgICBTTE9UKFN1Z2dl c3Rpb25zTG9hZGVkKGNwYjo6c3BvdGlmeTo6TG9hZFBsYXlsaXN0UmVzcG9uc2UpKSk7Ci0gICBj b25uZWN0KHNlcnZlcl8sCi0tICAgICAgICAgIFNJR05BTChUb3BsaXN0QnJvd3NlUmVzdWx0cyhw Yjo6c3BvdGlmeTo6QnJvd3NlVG9wbGlzdFJlc3BvbnNlKSksCi0tICAgICAgICAgIFNMT1QoU3Vn Z2VzdGlvbnNMb2FkZWQocGI6OnNwb3RpZnk6OkJyb3dzZVRvcGxpc3RSZXNwb25zZSkpKTsKLSsg ICAgICAgICAgU0lHTkFMKFRvcGxpc3RCcm93c2VSZXN1bHRzKGNwYjo6c3BvdGlmeTo6QnJvd3Nl VG9wbGlzdFJlc3BvbnNlKSksCi0rICAgICAgICAgIFNMT1QoU3VnZ2VzdGlvbnNMb2FkZWQoY3Bi OjpzcG90aWZ5OjpCcm93c2VUb3BsaXN0UmVzcG9uc2UpKSk7Ci0gCi0gICByZXR1cm4gc2VydmVy XzsKLSB9Ci1AQCAtODIsNyArODIsNyBAQAotIH0KLSAKLSB2b2lkIFNwb3RpZnlTZWFyY2hQcm92 aWRlcjo6U2VhcmNoRmluaXNoZWRTbG90KAotLSAgICBjb25zdCBwYjo6c3BvdGlmeTo6U2VhcmNo UmVzcG9uc2UmIHJlc3BvbnNlKSB7Ci0rICAgIGNvbnN0IGNwYjo6c3BvdGlmeTo6U2VhcmNoUmVz cG9uc2UmIHJlc3BvbnNlKSB7Ci0gICBRU3RyaW5nIHF1ZXJ5X3N0cmluZyA9IFFTdHJpbmc6OmZy b21VdGY4KHJlc3BvbnNlLnJlcXVlc3QoKS5xdWVyeSgpLmNfc3RyKCkpOwotICAgUU1hcDxRU3Ry aW5nLCBQZW5kaW5nU3RhdGU+OjppdGVyYXRvciBpdCA9IHF1ZXJpZXNfLmZpbmQocXVlcnlfc3Ry aW5nKTsKLSAgIGlmIChpdCA9PSBxdWVyaWVzXy5lbmQoKSkgcmV0dXJuOwotQEAgLTEwNyw3ICsx MDcsNyBAQAotICAgUmVzdWx0TGlzdCByZXQ7Ci0gCi0gICBmb3IgKGludCBpID0gMDsgaSA8IHJl c3BvbnNlLmFsYnVtX3NpemUoKTsgKytpKSB7Ci0tICAgIGNvbnN0IHBiOjpzcG90aWZ5OjpBbGJ1 bSYgYWxidW0gPSByZXNwb25zZS5hbGJ1bShpKTsKLSsgICAgY29uc3QgY3BiOjpzcG90aWZ5OjpB bGJ1bSYgYWxidW0gPSByZXNwb25zZS5hbGJ1bShpKTsKLSAKLSAgICAgUUhhc2g8UVN0cmluZywg aW50PiBhcnRpc3RfY291bnQ7Ci0gICAgIFFTdHJpbmcgbWFqb3JpdHlfYXJ0aXN0OwotQEAgLTE1 Myw3ICsxNTMsNyBAQAotICAgfQotIAotICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXNwb25zZS5y ZXN1bHRfc2l6ZSgpOyArK2kpIHsKLS0gICAgY29uc3QgcGI6OnNwb3RpZnk6OlRyYWNrJiB0cmFj ayA9IHJlc3BvbnNlLnJlc3VsdChpKTsKLSsgICAgY29uc3QgY3BiOjpzcG90aWZ5OjpUcmFjayYg dHJhY2sgPSByZXNwb25zZS5yZXN1bHQoaSk7Ci0gCi0gICAgIC8vIENoZWNrIHRoaXMgdHJhY2sv YWxidW0gYWdhaW5zdCB0cmFja3Mgd2UndmUgYWxyZWFkeSBzZWVuCi0gICAgIC8vIGluIHRoZSBh bGJ1bSByZXN1bHRzLCBhbmQgc2tpcCBpZiBpdCdzIGEgZHVwbGljYXRlCi1AQCAtMjExLDcgKzIx MSw3IEBACi0gfQotIAotIHZvaWQgU3BvdGlmeVNlYXJjaFByb3ZpZGVyOjpBZGRTdWdnZXN0aW9u RnJvbVRyYWNrKAotLSAgICBjb25zdCBwYjo6c3BvdGlmeTo6VHJhY2smIHRyYWNrKSB7Ci0rICAg IGNvbnN0IGNwYjo6c3BvdGlmeTo6VHJhY2smIHRyYWNrKSB7Ci0gICBpZiAoIXRyYWNrLnRpdGxl KCkuZW1wdHkoKSkgewotICAgICBzdWdnZXN0aW9uc18uaW5zZXJ0KFFTdHJpbmc6OmZyb21VdGY4 KHRyYWNrLnRpdGxlKCkuY19zdHIoKSkpOwotICAgfQotQEAgLTIyNiw3ICsyMjYsNyBAQAotIH0K LSAKLSB2b2lkIFNwb3RpZnlTZWFyY2hQcm92aWRlcjo6QWRkU3VnZ2VzdGlvbkZyb21BbGJ1bSgK LS0gICAgY29uc3QgcGI6OnNwb3RpZnk6OkFsYnVtJiBhbGJ1bSkgewotKyAgICBjb25zdCBjcGI6 OnNwb3RpZnk6OkFsYnVtJiBhbGJ1bSkgewotICAgQWRkU3VnZ2VzdGlvbkZyb21UcmFjayhhbGJ1 bS5tZXRhZGF0YSgpKTsKLSAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxidW0udHJhY2tfc2l6ZSgp OyArK2kpIHsKLSAgICAgQWRkU3VnZ2VzdGlvbkZyb21UcmFjayhhbGJ1bS50cmFjayhpKSk7Ci1A QCAtMjM0LDE0ICsyMzQsMTQgQEAKLSB9Ci0gCi0gdm9pZCBTcG90aWZ5U2VhcmNoUHJvdmlkZXI6 OlN1Z2dlc3Rpb25zTG9hZGVkKAotLSAgICBjb25zdCBwYjo6c3BvdGlmeTo6TG9hZFBsYXlsaXN0 UmVzcG9uc2UmIHBsYXlsaXN0KSB7Ci0rICAgIGNvbnN0IGNwYjo6c3BvdGlmeTo6TG9hZFBsYXls aXN0UmVzcG9uc2UmIHBsYXlsaXN0KSB7Ci0gICBmb3IgKGludCBpID0gMDsgaSA8IHBsYXlsaXN0 LnRyYWNrX3NpemUoKTsgKytpKSB7Ci0gICAgIEFkZFN1Z2dlc3Rpb25Gcm9tVHJhY2socGxheWxp c3QudHJhY2soaSkpOwotICAgfQotIH0KLSAKLSB2b2lkIFNwb3RpZnlTZWFyY2hQcm92aWRlcjo6 U3VnZ2VzdGlvbnNMb2FkZWQoCi0tICAgIGNvbnN0IHBiOjpzcG90aWZ5OjpCcm93c2VUb3BsaXN0 UmVzcG9uc2UmIHJlc3BvbnNlKSB7Ci0rICAgIGNvbnN0IGNwYjo6c3BvdGlmeTo6QnJvd3NlVG9w bGlzdFJlc3BvbnNlJiByZXNwb25zZSkgewotICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXNwb25z ZS50cmFja19zaXplKCk7ICsraSkgewotICAgICBBZGRTdWdnZXN0aW9uRnJvbVRyYWNrKHJlc3Bv bnNlLnRyYWNrKGkpKTsKLSAgIH0KLWRpZmYgLXVyIHNyYy9nbG9iYWxzZWFyY2gvc3BvdGlmeXNl YXJjaHByb3ZpZGVyLmggc3JjL2dsb2JhbHNlYXJjaC9zcG90aWZ5c2VhcmNocHJvdmlkZXIuaAot LS0tIGEvc3JjL2dsb2JhbHNlYXJjaC9zcG90aWZ5c2VhcmNocHJvdmlkZXIuaAkyMDIwLTA5LTIz IDIyOjM0OjA4LjAwMDAwMDAwMCAtMDQwMAotKysrIGIvc3JjL2dsb2JhbHNlYXJjaC9zcG90aWZ5 c2VhcmNocHJvdmlkZXIuaAkyMDIxLTAyLTE5IDEyOjAzOjQ4LjIzNzQ3MzAzNyAtMDUwMAotQEAg LTQxLDE3ICs0MSwxNyBAQAotIAotICBwcml2YXRlIHNsb3RzOgotICAgdm9pZCBTZXJ2ZXJEZXN0 cm95ZWQoKTsKLS0gIHZvaWQgU2VhcmNoRmluaXNoZWRTbG90KGNvbnN0IHBiOjpzcG90aWZ5OjpT ZWFyY2hSZXNwb25zZSYgcmVzcG9uc2UpOwotKyAgdm9pZCBTZWFyY2hGaW5pc2hlZFNsb3QoY29u c3QgY3BiOjpzcG90aWZ5OjpTZWFyY2hSZXNwb25zZSYgcmVzcG9uc2UpOwotICAgdm9pZCBBcnRM b2FkZWRTbG90KGNvbnN0IFFTdHJpbmcmIGlkLCBjb25zdCBRSW1hZ2UmIGltYWdlKTsKLS0gIHZv aWQgU3VnZ2VzdGlvbnNMb2FkZWQoY29uc3QgcGI6OnNwb3RpZnk6OkxvYWRQbGF5bGlzdFJlc3Bv bnNlJiByZXNwb25zZSk7Ci0tICB2b2lkIFN1Z2dlc3Rpb25zTG9hZGVkKGNvbnN0IHBiOjpzcG90 aWZ5OjpCcm93c2VUb3BsaXN0UmVzcG9uc2UmIHJlc3BvbnNlKTsKLSsgIHZvaWQgU3VnZ2VzdGlv bnNMb2FkZWQoY29uc3QgY3BiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSYgcmVzcG9u c2UpOwotKyAgdm9pZCBTdWdnZXN0aW9uc0xvYWRlZChjb25zdCBjcGI6OnNwb3RpZnk6OkJyb3dz ZVRvcGxpc3RSZXNwb25zZSYgcmVzcG9uc2UpOwotIAotICBwcml2YXRlOgotICAgU3BvdGlmeVNl cnZlciogc2VydmVyKCk7Ci0gCi0gICB2b2lkIExvYWRTdWdnZXN0aW9ucygpOwotLSAgdm9pZCBB ZGRTdWdnZXN0aW9uRnJvbVRyYWNrKGNvbnN0IHBiOjpzcG90aWZ5OjpUcmFjayYgdHJhY2spOwot LSAgdm9pZCBBZGRTdWdnZXN0aW9uRnJvbUFsYnVtKGNvbnN0IHBiOjpzcG90aWZ5OjpBbGJ1bSYg YWxidW0pOwotKyAgdm9pZCBBZGRTdWdnZXN0aW9uRnJvbVRyYWNrKGNvbnN0IGNwYjo6c3BvdGlm eTo6VHJhY2smIHRyYWNrKTsKLSsgIHZvaWQgQWRkU3VnZ2VzdGlvbkZyb21BbGJ1bShjb25zdCBj cGI6OnNwb3RpZnk6OkFsYnVtJiBhbGJ1bSk7Ci0gCi0gIHByaXZhdGU6Ci0gICBTcG90aWZ5U2Vy dmVyKiBzZXJ2ZXJfOwotZGlmZiAtdXIgc3JjL2ludGVybmV0L2NvcmUvY2xvdWRmaWxlc2Vydmlj ZS5jcHAgc3JjL2ludGVybmV0L2NvcmUvY2xvdWRmaWxlc2VydmljZS5jcHAKLS0tLSBhL3NyYy9p bnRlcm5ldC9jb3JlL2Nsb3VkZmlsZXNlcnZpY2UuY3BwCTIwMjAtMDktMjMgMjI6MzQ6MDguMDAw MDAwMDAwIC0wNDAwCi0rKysgYi9zcmMvaW50ZXJuZXQvY29yZS9jbG91ZGZpbGVzZXJ2aWNlLmNw cAkyMDIxLTAyLTE5IDEyOjAzOjQ4LjIzNzQ3MzAzNyAtMDUwMAotQEAgLTE5MiwxNCArMTkyLDE0 IEBACi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGluZ190YXNrX21h eF8pOwotICAgfQotIAotLSAgY29uc3QgcGI6OnRhZ3JlYWRlcjo6UmVhZENsb3VkRmlsZVJlc3Bv bnNlJiBtZXNzYWdlID0KLSsgIGNvbnN0IGNwYjo6dGFncmVhZGVyOjpSZWFkQ2xvdWRGaWxlUmVz cG9uc2UmIG1lc3NhZ2UgPQotICAgICAgIHJlcGx5LT5tZXNzYWdlKCkucmVhZF9jbG91ZF9maWxl X3Jlc3BvbnNlKCk7Ci0gICBpZiAoIW1lc3NhZ2UuaGFzX21ldGFkYXRhKCkgfHwgIW1lc3NhZ2Uu bWV0YWRhdGEoKS5maWxlc2l6ZSgpKSB7Ci0gICAgIHFMb2coRGVidWcpIDw8ICJGYWlsZWQgdG8g dGFnOiIgPDwgbWV0YWRhdGEudXJsKCk7Ci0gICAgIHJldHVybjsKLSAgIH0KLSAKLS0gIHBiOjp0 YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSBtZXRhZGF0YV9wYjsKLSsgIGNwYjo6dGFncmVhZGVyOjpT b25nTWV0YWRhdGEgbWV0YWRhdGFfcGI7Ci0gICBtZXRhZGF0YS5Ub1Byb3RvYnVmKCZtZXRhZGF0 YV9wYik7Ci0gICBtZXRhZGF0YV9wYi5NZXJnZUZyb20obWVzc2FnZS5tZXRhZGF0YSgpKTsKLSAK LWRpZmYgLXVyIHNyYy9pbnRlcm5ldC9zcG90aWZ5L3Nwb3RpZnlzZXJ2ZXIuY3BwIHNyYy9pbnRl cm5ldC9zcG90aWZ5L3Nwb3RpZnlzZXJ2ZXIuY3BwCi0tLS0gYS9zcmMvaW50ZXJuZXQvc3BvdGlm eS9zcG90aWZ5c2VydmVyLmNwcAkyMDIwLTA5LTIzIDIyOjM0OjA4LjAwMDAwMDAwMCAtMDQwMAot KysrIGIvc3JjL2ludGVybmV0L3Nwb3RpZnkvc3BvdGlmeXNlcnZlci5jcHAJMjAyMS0wMi0xOSAx MjowMzo0OC4yMzc0NzMwMzcgLTA1MDAKLUBAIC0zMSw3ICszMSw3IEBACi0gI2luY2x1ZGUgInNw b3RpZnltZXNzYWdlcy5wYi5oIgotIAotIFNwb3RpZnlTZXJ2ZXI6OlNwb3RpZnlTZXJ2ZXIoUU9i amVjdCogcGFyZW50KQotLSAgICA6IEFic3RyYWN0TWVzc2FnZUhhbmRsZXI8cGI6OnNwb3RpZnk6 Ok1lc3NhZ2U+KG51bGxwdHIsIHBhcmVudCksCi0rICAgIDogQWJzdHJhY3RNZXNzYWdlSGFuZGxl cjxjcGI6OnNwb3RpZnk6Ok1lc3NhZ2U+KG51bGxwdHIsIHBhcmVudCksCi0gICAgICAgc2VydmVy XyhuZXcgUVRjcFNlcnZlcih0aGlzKSksCi0gICAgICAgbG9nZ2VkX2luXyhmYWxzZSkgewotICAg Y29ubmVjdChzZXJ2ZXJfLCBTSUdOQUwobmV3Q29ubmVjdGlvbigpKSwgU0xPVChOZXdDb25uZWN0 aW9uKCkpKTsKLUBAIC01Miw3ICs1Miw3IEBACi0gICBxTG9nKEluZm8pIDw8ICJDb25uZWN0aW9u IGZyb20gcG9ydCIgPDwgc29ja2V0LT5wZWVyUG9ydCgpOwotIAotICAgLy8gU2VuZCBhbnkgbG9n aW4gbWVzc2FnZXMgdGhhdCB3ZXJlIHF1ZXVlZCBiZWZvcmUgdGhlIGNsaWVudCBjb25uZWN0ZWQK LS0gIGZvciAoY29uc3QgcGI6OnNwb3RpZnk6Ok1lc3NhZ2UmIG1lc3NhZ2UgOiBxdWV1ZWRfbG9n aW5fbWVzc2FnZXNfKSB7Ci0rICBmb3IgKGNvbnN0IGNwYjo6c3BvdGlmeTo6TWVzc2FnZSYgbWVz c2FnZSA6IHF1ZXVlZF9sb2dpbl9tZXNzYWdlc18pIHsKLSAgICAgU2VuZE9yUXVldWVNZXNzYWdl KG1lc3NhZ2UpOwotICAgfQotICAgcXVldWVkX2xvZ2luX21lc3NhZ2VzXy5jbGVhcigpOwotQEAg LTYxLDEwICs2MSwxMCBAQAotICAgZGlzY29ubmVjdChzZXJ2ZXJfLCBTSUdOQUwobmV3Q29ubmVj dGlvbigpKSwgdGhpcywgMCk7Ci0gfQotIAotLXZvaWQgU3BvdGlmeVNlcnZlcjo6U2VuZE9yUXVl dWVNZXNzYWdlKGNvbnN0IHBiOjpzcG90aWZ5OjpNZXNzYWdlJiBtZXNzYWdlKSB7Ci0rdm9pZCBT cG90aWZ5U2VydmVyOjpTZW5kT3JRdWV1ZU1lc3NhZ2UoY29uc3QgY3BiOjpzcG90aWZ5OjpNZXNz YWdlJiBtZXNzYWdlKSB7Ci0gICBjb25zdCBib29sIGlzX2xvZ2luX21lc3NhZ2UgPSBtZXNzYWdl Lmhhc19sb2dpbl9yZXF1ZXN0KCk7Ci0gCi0tICBRTGlzdDxwYjo6c3BvdGlmeTo6TWVzc2FnZT4q IHF1ZXVlID0KLSsgIFFMaXN0PGNwYjo6c3BvdGlmeTo6TWVzc2FnZT4qIHF1ZXVlID0KLSAgICAg ICBpc19sb2dpbl9tZXNzYWdlID8gJnF1ZXVlZF9sb2dpbl9tZXNzYWdlc18gOiAmcXVldWVkX21l c3NhZ2VzXzsKLSAKLSAgIGlmICghZGV2aWNlXyB8fCAoIWlzX2xvZ2luX21lc3NhZ2UgJiYgIWxv Z2dlZF9pbl8pKSB7Ci1AQCAtNzUsMTEgKzc1LDExIEBACi0gfQotIAotIHZvaWQgU3BvdGlmeVNl cnZlcjo6TG9naW4oY29uc3QgUVN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFFTdHJpbmcmIHBhc3N3 b3JkLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgcGI6OnNwb3RpZnk6OkJpdHJhdGUgYml0 cmF0ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIGNwYjo6c3BvdGlmeTo6Qml0cmF0ZSBi aXRyYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB2b2x1bWVfbm9ybWFsaXNh dGlvbikgewotLSAgcGI6OnNwb3RpZnk6Ok1lc3NhZ2UgbWVzc2FnZTsKLSsgIGNwYjo6c3BvdGlm eTo6TWVzc2FnZSBtZXNzYWdlOwotIAotLSAgcGI6OnNwb3RpZnk6OkxvZ2luUmVxdWVzdCogcmVx dWVzdCA9IG1lc3NhZ2UubXV0YWJsZV9sb2dpbl9yZXF1ZXN0KCk7Ci0rICBjcGI6OnNwb3RpZnk6 OkxvZ2luUmVxdWVzdCogcmVxdWVzdCA9IG1lc3NhZ2UubXV0YWJsZV9sb2dpbl9yZXF1ZXN0KCk7 Ci0gICByZXF1ZXN0LT5zZXRfdXNlcm5hbWUoRGF0YUNvbW1hU2l6ZUZyb21RU3RyaW5nKHVzZXJu YW1lKSk7Ci0gICBpZiAoIXBhc3N3b3JkLmlzRW1wdHkoKSkgewotICAgICByZXF1ZXN0LT5zZXRf cGFzc3dvcmQoRGF0YUNvbW1hU2l6ZUZyb21RU3RyaW5nKHBhc3N3b3JkKSk7Ci1AQCAtOTEsMTEg KzkxLDExIEBACi0gICBTZW5kT3JRdWV1ZU1lc3NhZ2UobWVzc2FnZSk7Ci0gfQotIAotLXZvaWQg U3BvdGlmeVNlcnZlcjo6U2V0UGxheWJhY2tTZXR0aW5ncyhwYjo6c3BvdGlmeTo6Qml0cmF0ZSBi aXRyYXRlLAotK3ZvaWQgU3BvdGlmeVNlcnZlcjo6U2V0UGxheWJhY2tTZXR0aW5ncyhjcGI6OnNw b3RpZnk6OkJpdHJhdGUgYml0cmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9vbCB2b2x1bWVfbm9ybWFsaXNhdGlvbikgewotLSAgcGI6OnNwb3RpZnk6Ok1l c3NhZ2UgbWVzc2FnZTsKLSsgIGNwYjo6c3BvdGlmeTo6TWVzc2FnZSBtZXNzYWdlOwotIAotLSAg cGI6OnNwb3RpZnk6OlBsYXliYWNrU2V0dGluZ3MqIHJlcXVlc3QgPQotKyAgY3BiOjpzcG90aWZ5 OjpQbGF5YmFja1NldHRpbmdzKiByZXF1ZXN0ID0KLSAgICAgICBtZXNzYWdlLm11dGFibGVfc2V0 X3BsYXliYWNrX3NldHRpbmdzX3JlcXVlc3QoKTsKLSAgIHJlcXVlc3QtPnNldF9iaXRyYXRlKGJp dHJhdGUpOwotICAgcmVxdWVzdC0+c2V0X3ZvbHVtZV9ub3JtYWxpc2F0aW9uKHZvbHVtZV9ub3Jt YWxpc2F0aW9uKTsKLUBAIC0xMDMsMTQgKzEwMywxNCBAQAotICAgU2VuZE9yUXVldWVNZXNzYWdl KG1lc3NhZ2UpOwotIH0KLSAKLS12b2lkIFNwb3RpZnlTZXJ2ZXI6Ok1lc3NhZ2VBcnJpdmVkKGNv bnN0IHBiOjpzcG90aWZ5OjpNZXNzYWdlJiBtZXNzYWdlKSB7Ci0rdm9pZCBTcG90aWZ5U2VydmVy OjpNZXNzYWdlQXJyaXZlZChjb25zdCBjcGI6OnNwb3RpZnk6Ok1lc3NhZ2UmIG1lc3NhZ2UpIHsK LSAgIGlmIChtZXNzYWdlLmhhc19sb2dpbl9yZXNwb25zZSgpKSB7Ci0tICAgIGNvbnN0IHBiOjpz cG90aWZ5OjpMb2dpblJlc3BvbnNlJiByZXNwb25zZSA9IG1lc3NhZ2UubG9naW5fcmVzcG9uc2Uo KTsKLSsgICAgY29uc3QgY3BiOjpzcG90aWZ5OjpMb2dpblJlc3BvbnNlJiByZXNwb25zZSA9IG1l c3NhZ2UubG9naW5fcmVzcG9uc2UoKTsKLSAgICAgbG9nZ2VkX2luXyA9IHJlc3BvbnNlLnN1Y2Nl c3MoKTsKLSAKLSAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MoKSkgewotICAgICAgIC8vIFNlbmQg YW55IG1lc3NhZ2VzIHRoYXQgd2VyZSBxdWV1ZWQgYmVmb3JlIHRoZSBjbGllbnQgbG9nZ2VkIGlu Ci0tICAgICAgZm9yIChjb25zdCBwYjo6c3BvdGlmeTo6TWVzc2FnZSYgbWVzc2FnZSA6IHF1ZXVl ZF9tZXNzYWdlc18pIHsKLSsgICAgICBmb3IgKGNvbnN0IGNwYjo6c3BvdGlmeTo6TWVzc2FnZSYg bWVzc2FnZSA6IHF1ZXVlZF9tZXNzYWdlc18pIHsKLSAgICAgICAgIFNlbmRPclF1ZXVlTWVzc2Fn ZShtZXNzYWdlKTsKLSAgICAgICB9Ci0gICAgICAgcXVldWVkX21lc3NhZ2VzXy5jbGVhcigpOwot QEAgLTEyMiwxOSArMTIyLDE5IEBACi0gICB9IGVsc2UgaWYgKG1lc3NhZ2UuaGFzX3BsYXlsaXN0 c191cGRhdGVkKCkpIHsKLSAgICAgZW1pdCBQbGF5bGlzdHNVcGRhdGVkKG1lc3NhZ2UucGxheWxp c3RzX3VwZGF0ZWQoKSk7Ci0gICB9IGVsc2UgaWYgKG1lc3NhZ2UuaGFzX2xvYWRfcGxheWxpc3Rf cmVzcG9uc2UoKSkgewotLSAgICBjb25zdCBwYjo6c3BvdGlmeTo6TG9hZFBsYXlsaXN0UmVzcG9u c2UmIHJlc3BvbnNlID0KLSsgICAgY29uc3QgY3BiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXNw b25zZSYgcmVzcG9uc2UgPQotICAgICAgICAgbWVzc2FnZS5sb2FkX3BsYXlsaXN0X3Jlc3BvbnNl KCk7Ci0gCi0gICAgIHN3aXRjaCAocmVzcG9uc2UucmVxdWVzdCgpLnR5cGUoKSkgewotLSAgICAg IGNhc2UgcGI6OnNwb3RpZnk6OkluYm94OgotKyAgICAgIGNhc2UgY3BiOjpzcG90aWZ5OjpJbmJv eDoKLSAgICAgICAgIGVtaXQgSW5ib3hMb2FkZWQocmVzcG9uc2UpOwotICAgICAgICAgYnJlYWs7 Ci0gCi0tICAgICAgY2FzZSBwYjo6c3BvdGlmeTo6U3RhcnJlZDoKLSsgICAgICBjYXNlIGNwYjo6 c3BvdGlmeTo6U3RhcnJlZDoKLSAgICAgICAgIGVtaXQgU3RhcnJlZExvYWRlZChyZXNwb25zZSk7 Ci0gICAgICAgICBicmVhazsKLSAKLS0gICAgICBjYXNlIHBiOjpzcG90aWZ5OjpVc2VyUGxheWxp c3Q6Ci0rICAgICAgY2FzZSBjcGI6OnNwb3RpZnk6OlVzZXJQbGF5bGlzdDoKLSAgICAgICAgIGVt aXQgVXNlclBsYXlsaXN0TG9hZGVkKHJlc3BvbnNlKTsKLSAgICAgICAgIGJyZWFrOwotICAgICB9 Ci1AQCAtMTQzLDcgKzE0Myw3IEBACi0gICB9IGVsc2UgaWYgKG1lc3NhZ2UuaGFzX3NlYXJjaF9y ZXNwb25zZSgpKSB7Ci0gICAgIGVtaXQgU2VhcmNoUmVzdWx0cyhtZXNzYWdlLnNlYXJjaF9yZXNw b25zZSgpKTsKLSAgIH0gZWxzZSBpZiAobWVzc2FnZS5oYXNfaW1hZ2VfcmVzcG9uc2UoKSkgewot LSAgICBjb25zdCBwYjo6c3BvdGlmeTo6SW1hZ2VSZXNwb25zZSYgcmVzcG9uc2UgPSBtZXNzYWdl LmltYWdlX3Jlc3BvbnNlKCk7Ci0rICAgIGNvbnN0IGNwYjo6c3BvdGlmeTo6SW1hZ2VSZXNwb25z ZSYgcmVzcG9uc2UgPSBtZXNzYWdlLmltYWdlX3Jlc3BvbnNlKCk7Ci0gICAgIGNvbnN0IFFTdHJp bmcgaWQgPSBRU3RyaW5nRnJvbVN0ZFN0cmluZyhyZXNwb25zZS5pZCgpKTsKLSAKLSAgICAgaWYg KHJlc3BvbnNlLmhhc19kYXRhKCkpIHsKLUBAIC0xNjIsOSArMTYyLDkgQEAKLSAgIH0KLSB9Ci0g Ci0tdm9pZCBTcG90aWZ5U2VydmVyOjpMb2FkUGxheWxpc3QocGI6OnNwb3RpZnk6OlBsYXlsaXN0 VHlwZSB0eXBlLCBpbnQgaW5kZXgpIHsKLS0gIHBiOjpzcG90aWZ5OjpNZXNzYWdlIG1lc3NhZ2U7 Ci0tICBwYjo6c3BvdGlmeTo6TG9hZFBsYXlsaXN0UmVxdWVzdCogcmVxID0KLSt2b2lkIFNwb3Rp ZnlTZXJ2ZXI6OkxvYWRQbGF5bGlzdChjcGI6OnNwb3RpZnk6OlBsYXlsaXN0VHlwZSB0eXBlLCBp bnQgaW5kZXgpIHsKLSsgIGNwYjo6c3BvdGlmeTo6TWVzc2FnZSBtZXNzYWdlOwotKyAgY3BiOjpz cG90aWZ5OjpMb2FkUGxheWxpc3RSZXF1ZXN0KiByZXEgPQotICAgICAgIG1lc3NhZ2UubXV0YWJs ZV9sb2FkX3BsYXlsaXN0X3JlcXVlc3QoKTsKLSAKLSAgIHJlcS0+c2V0X3R5cGUodHlwZSk7Ci1A QCAtMTc1LDEwICsxNzUsMTAgQEAKLSAgIFNlbmRPclF1ZXVlTWVzc2FnZShtZXNzYWdlKTsKLSB9 Ci0gCi0tdm9pZCBTcG90aWZ5U2VydmVyOjpTeW5jUGxheWxpc3QocGI6OnNwb3RpZnk6OlBsYXls aXN0VHlwZSB0eXBlLCBpbnQgaW5kZXgsCi0rdm9pZCBTcG90aWZ5U2VydmVyOjpTeW5jUGxheWxp c3QoY3BiOjpzcG90aWZ5OjpQbGF5bGlzdFR5cGUgdHlwZSwgaW50IGluZGV4LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgb2ZmbGluZSkgewotLSAgcGI6OnNwb3RpZnk6 Ok1lc3NhZ2UgbWVzc2FnZTsKLS0gIHBiOjpzcG90aWZ5OjpTeW5jUGxheWxpc3RSZXF1ZXN0KiBy ZXEgPQotKyAgY3BiOjpzcG90aWZ5OjpNZXNzYWdlIG1lc3NhZ2U7Ci0rICBjcGI6OnNwb3RpZnk6 OlN5bmNQbGF5bGlzdFJlcXVlc3QqIHJlcSA9Ci0gICAgICAgbWVzc2FnZS5tdXRhYmxlX3N5bmNf cGxheWxpc3RfcmVxdWVzdCgpOwotICAgcmVxLT5tdXRhYmxlX3JlcXVlc3QoKS0+c2V0X3R5cGUo dHlwZSk7Ci0gICBpZiAoaW5kZXggIT0gLTEpIHsKLUBAIC0xODksNDAgKzE4OSw0MCBAQAotICAg U2VuZE9yUXVldWVNZXNzYWdlKG1lc3NhZ2UpOwotIH0KLSAKLS12b2lkIFNwb3RpZnlTZXJ2ZXI6 OlN5bmNJbmJveCgpIHsgU3luY1BsYXlsaXN0KHBiOjpzcG90aWZ5OjpJbmJveCwgLTEsIHRydWUp OyB9Ci0rdm9pZCBTcG90aWZ5U2VydmVyOjpTeW5jSW5ib3goKSB7IFN5bmNQbGF5bGlzdChjcGI6 OnNwb3RpZnk6OkluYm94LCAtMSwgdHJ1ZSk7IH0KLSAKLSB2b2lkIFNwb3RpZnlTZXJ2ZXI6OlN5 bmNTdGFycmVkKCkgewotLSAgU3luY1BsYXlsaXN0KHBiOjpzcG90aWZ5OjpTdGFycmVkLCAtMSwg dHJ1ZSk7Ci0rICBTeW5jUGxheWxpc3QoY3BiOjpzcG90aWZ5OjpTdGFycmVkLCAtMSwgdHJ1ZSk7 Ci0gfQotIAotIHZvaWQgU3BvdGlmeVNlcnZlcjo6U3luY1VzZXJQbGF5bGlzdChpbnQgaW5kZXgp IHsKLSAgIFFfQVNTRVJUKGluZGV4ID49IDApOwotLSAgU3luY1BsYXlsaXN0KHBiOjpzcG90aWZ5 OjpVc2VyUGxheWxpc3QsIGluZGV4LCB0cnVlKTsKLSsgIFN5bmNQbGF5bGlzdChjcGI6OnNwb3Rp Znk6OlVzZXJQbGF5bGlzdCwgaW5kZXgsIHRydWUpOwotIH0KLSAKLS12b2lkIFNwb3RpZnlTZXJ2 ZXI6OkxvYWRJbmJveCgpIHsgTG9hZFBsYXlsaXN0KHBiOjpzcG90aWZ5OjpJbmJveCk7IH0KLSt2 b2lkIFNwb3RpZnlTZXJ2ZXI6OkxvYWRJbmJveCgpIHsgTG9hZFBsYXlsaXN0KGNwYjo6c3BvdGlm eTo6SW5ib3gpOyB9Ci0gCi0tdm9pZCBTcG90aWZ5U2VydmVyOjpMb2FkU3RhcnJlZCgpIHsgTG9h ZFBsYXlsaXN0KHBiOjpzcG90aWZ5OjpTdGFycmVkKTsgfQotK3ZvaWQgU3BvdGlmeVNlcnZlcjo6 TG9hZFN0YXJyZWQoKSB7IExvYWRQbGF5bGlzdChjcGI6OnNwb3RpZnk6OlN0YXJyZWQpOyB9Ci0g Ci0gdm9pZCBTcG90aWZ5U2VydmVyOjpMb2FkVXNlclBsYXlsaXN0KGludCBpbmRleCkgewotICAg UV9BU1NFUlQoaW5kZXggPj0gMCk7Ci0tICBMb2FkUGxheWxpc3QocGI6OnNwb3RpZnk6OlVzZXJQ bGF5bGlzdCwgaW5kZXgpOwotKyAgTG9hZFBsYXlsaXN0KGNwYjo6c3BvdGlmeTo6VXNlclBsYXls aXN0LCBpbmRleCk7Ci0gfQotIAotIHZvaWQgU3BvdGlmeVNlcnZlcjo6QWRkU29uZ3NUb1N0YXJy ZWQoY29uc3QgUUxpc3Q8UVVybD4mIHNvbmdzX3VybHMpIHsKLS0gIEFkZFNvbmdzVG9QbGF5bGlz dChwYjo6c3BvdGlmeTo6U3RhcnJlZCwgc29uZ3NfdXJscyk7Ci0rICBBZGRTb25nc1RvUGxheWxp c3QoY3BiOjpzcG90aWZ5OjpTdGFycmVkLCBzb25nc191cmxzKTsKLSB9Ci0gCi0gdm9pZCBTcG90 aWZ5U2VydmVyOjpBZGRTb25nc1RvVXNlclBsYXlsaXN0KGludCBwbGF5bGlzdF9pbmRleCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUxpc3Q8UVVy bD4mIHNvbmdzX3VybHMpIHsKLS0gIEFkZFNvbmdzVG9QbGF5bGlzdChwYjo6c3BvdGlmeTo6VXNl clBsYXlsaXN0LCBzb25nc191cmxzLCBwbGF5bGlzdF9pbmRleCk7Ci0rICBBZGRTb25nc1RvUGxh eWxpc3QoY3BiOjpzcG90aWZ5OjpVc2VyUGxheWxpc3QsIHNvbmdzX3VybHMsIHBsYXlsaXN0X2lu ZGV4KTsKLSB9Ci0gCi0gdm9pZCBTcG90aWZ5U2VydmVyOjpBZGRTb25nc1RvUGxheWxpc3QoCi0t ICAgIGNvbnN0IHBiOjpzcG90aWZ5OjpQbGF5bGlzdFR5cGUgcGxheWxpc3RfdHlwZSwKLSsgICAg Y29uc3QgY3BiOjpzcG90aWZ5OjpQbGF5bGlzdFR5cGUgcGxheWxpc3RfdHlwZSwKLSAgICAgY29u c3QgUUxpc3Q8UVVybD4mIHNvbmdzX3VybHMsIGludCBwbGF5bGlzdF9pbmRleCkgewotLSAgcGI6 OnNwb3RpZnk6Ok1lc3NhZ2UgbWVzc2FnZTsKLS0gIHBiOjpzcG90aWZ5OjpBZGRUcmFja3NUb1Bs YXlsaXN0UmVxdWVzdCogcmVxID0KLSsgIGNwYjo6c3BvdGlmeTo6TWVzc2FnZSBtZXNzYWdlOwot KyAgY3BiOjpzcG90aWZ5OjpBZGRUcmFja3NUb1BsYXlsaXN0UmVxdWVzdCogcmVxID0KLSAgICAg ICBtZXNzYWdlLm11dGFibGVfYWRkX3RyYWNrc190b19wbGF5bGlzdCgpOwotICAgcmVxLT5zZXRf cGxheWxpc3RfdHlwZShwbGF5bGlzdF90eXBlKTsKLSAgIHJlcS0+c2V0X3BsYXlsaXN0X2luZGV4 KHBsYXlsaXN0X2luZGV4KTsKLUBAIC0yMzQsMjMgKzIzNCwyMyBAQAotIAotIHZvaWQgU3BvdGlm eVNlcnZlcjo6UmVtb3ZlU29uZ3NGcm9tU3RhcnJlZCgKLSAgICAgY29uc3QgUUxpc3Q8aW50PiYg c29uZ3NfaW5kaWNlc190b19yZW1vdmUpIHsKLS0gIFJlbW92ZVNvbmdzRnJvbVBsYXlsaXN0KHBi OjpzcG90aWZ5OjpTdGFycmVkLCBzb25nc19pbmRpY2VzX3RvX3JlbW92ZSk7Ci0rICBSZW1vdmVT b25nc0Zyb21QbGF5bGlzdChjcGI6OnNwb3RpZnk6OlN0YXJyZWQsIHNvbmdzX2luZGljZXNfdG9f cmVtb3ZlKTsKLSB9Ci0gCi0gdm9pZCBTcG90aWZ5U2VydmVyOjpSZW1vdmVTb25nc0Zyb21Vc2Vy UGxheWxpc3QoCi0gICAgIGludCBwbGF5bGlzdF9pbmRleCwgY29uc3QgUUxpc3Q8aW50PiYgc29u Z3NfaW5kaWNlc190b19yZW1vdmUpIHsKLS0gIFJlbW92ZVNvbmdzRnJvbVBsYXlsaXN0KHBiOjpz cG90aWZ5OjpVc2VyUGxheWxpc3QsIHNvbmdzX2luZGljZXNfdG9fcmVtb3ZlLAotKyAgUmVtb3Zl U29uZ3NGcm9tUGxheWxpc3QoY3BiOjpzcG90aWZ5OjpVc2VyUGxheWxpc3QsIHNvbmdzX2luZGlj ZXNfdG9fcmVtb3ZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWxpc3RfaW5kZXgp OwotIH0KLSAKLSB2b2lkIFNwb3RpZnlTZXJ2ZXI6OlJlbW92ZVNvbmdzRnJvbVBsYXlsaXN0KAot LSAgICBjb25zdCBwYjo6c3BvdGlmeTo6UGxheWxpc3RUeXBlIHBsYXlsaXN0X3R5cGUsCi0rICAg IGNvbnN0IGNwYjo6c3BvdGlmeTo6UGxheWxpc3RUeXBlIHBsYXlsaXN0X3R5cGUsCi0gICAgIGNv bnN0IFFMaXN0PGludD4mIHNvbmdzX2luZGljZXNfdG9fcmVtb3ZlLCBpbnQgcGxheWxpc3RfaW5k ZXgpIHsKLS0gIHBiOjpzcG90aWZ5OjpNZXNzYWdlIG1lc3NhZ2U7Ci0tICBwYjo6c3BvdGlmeTo6 UmVtb3ZlVHJhY2tzRnJvbVBsYXlsaXN0UmVxdWVzdCogcmVxID0KLSsgIGNwYjo6c3BvdGlmeTo6 TWVzc2FnZSBtZXNzYWdlOwotKyAgY3BiOjpzcG90aWZ5OjpSZW1vdmVUcmFja3NGcm9tUGxheWxp c3RSZXF1ZXN0KiByZXEgPQotICAgICAgIG1lc3NhZ2UubXV0YWJsZV9yZW1vdmVfdHJhY2tzX2Zy b21fcGxheWxpc3QoKTsKLSAgIHJlcS0+c2V0X3BsYXlsaXN0X3R5cGUocGxheWxpc3RfdHlwZSk7 Ci0tICBpZiAocGxheWxpc3RfdHlwZSA9PSBwYjo6c3BvdGlmeTo6VXNlclBsYXlsaXN0KSB7Ci0r ICBpZiAocGxheWxpc3RfdHlwZSA9PSBjcGI6OnNwb3RpZnk6OlVzZXJQbGF5bGlzdCkgewotICAg ICByZXEtPnNldF9wbGF5bGlzdF9pbmRleChwbGF5bGlzdF9pbmRleCk7Ci0gICB9Ci0gICBmb3Ig KGludCBzb25nX2luZGV4IDogc29uZ3NfaW5kaWNlc190b19yZW1vdmUpIHsKLUBAIC0yNjAsOCAr MjYwLDggQEAKLSB9Ci0gCi0gdm9pZCBTcG90aWZ5U2VydmVyOjpTdGFydFBsYXliYWNrKGNvbnN0 IFFTdHJpbmcmIHVyaSwgcXVpbnQxNiBwb3J0KSB7Ci0tICBwYjo6c3BvdGlmeTo6TWVzc2FnZSBt ZXNzYWdlOwotLSAgcGI6OnNwb3RpZnk6OlBsYXliYWNrUmVxdWVzdCogcmVxID0gbWVzc2FnZS5t dXRhYmxlX3BsYXliYWNrX3JlcXVlc3QoKTsKLSsgIGNwYjo6c3BvdGlmeTo6TWVzc2FnZSBtZXNz YWdlOwotKyAgY3BiOjpzcG90aWZ5OjpQbGF5YmFja1JlcXVlc3QqIHJlcSA9IG1lc3NhZ2UubXV0 YWJsZV9wbGF5YmFja19yZXF1ZXN0KCk7Ci0gCi0gICByZXEtPnNldF90cmFja191cmkoRGF0YUNv bW1hU2l6ZUZyb21RU3RyaW5nKHVyaSkpOwotICAgcmVxLT5zZXRfbWVkaWFfcG9ydChwb3J0KTsK LUBAIC0yNjksMTYgKzI2OSwxNiBAQAotIH0KLSAKLSB2b2lkIFNwb3RpZnlTZXJ2ZXI6OlNlZWso cWludDY0IG9mZnNldF9uc2VjKSB7Ci0tICBwYjo6c3BvdGlmeTo6TWVzc2FnZSBtZXNzYWdlOwot LSAgcGI6OnNwb3RpZnk6OlNlZWtSZXF1ZXN0KiByZXEgPSBtZXNzYWdlLm11dGFibGVfc2Vla19y ZXF1ZXN0KCk7Ci0rICBjcGI6OnNwb3RpZnk6Ok1lc3NhZ2UgbWVzc2FnZTsKLSsgIGNwYjo6c3Bv dGlmeTo6U2Vla1JlcXVlc3QqIHJlcSA9IG1lc3NhZ2UubXV0YWJsZV9zZWVrX3JlcXVlc3QoKTsK LSAKLSAgIHJlcS0+c2V0X29mZnNldF9uc2VjKG9mZnNldF9uc2VjKTsKLSAgIFNlbmRPclF1ZXVl TWVzc2FnZShtZXNzYWdlKTsKLSB9Ci0gCi0gdm9pZCBTcG90aWZ5U2VydmVyOjpTZWFyY2goY29u c3QgUVN0cmluZyYgdGV4dCwgaW50IGxpbWl0LCBpbnQgbGltaXRfYWxidW0pIHsKLS0gIHBiOjpz cG90aWZ5OjpNZXNzYWdlIG1lc3NhZ2U7Ci0tICBwYjo6c3BvdGlmeTo6U2VhcmNoUmVxdWVzdCog cmVxID0gbWVzc2FnZS5tdXRhYmxlX3NlYXJjaF9yZXF1ZXN0KCk7Ci0rICBjcGI6OnNwb3RpZnk6 Ok1lc3NhZ2UgbWVzc2FnZTsKLSsgIGNwYjo6c3BvdGlmeTo6U2VhcmNoUmVxdWVzdCogcmVxID0g bWVzc2FnZS5tdXRhYmxlX3NlYXJjaF9yZXF1ZXN0KCk7Ci0gCi0gICByZXEtPnNldF9xdWVyeShE YXRhQ29tbWFTaXplRnJvbVFTdHJpbmcodGV4dCkpOwotICAgcmVxLT5zZXRfbGltaXQobGltaXQp OwotQEAgLTI4NywzNCArMjg3LDM0IEBACi0gfQotIAotIHZvaWQgU3BvdGlmeVNlcnZlcjo6TG9h ZEltYWdlKGNvbnN0IFFTdHJpbmcmIGlkKSB7Ci0tICBwYjo6c3BvdGlmeTo6TWVzc2FnZSBtZXNz YWdlOwotLSAgcGI6OnNwb3RpZnk6OkltYWdlUmVxdWVzdCogcmVxID0gbWVzc2FnZS5tdXRhYmxl X2ltYWdlX3JlcXVlc3QoKTsKLSsgIGNwYjo6c3BvdGlmeTo6TWVzc2FnZSBtZXNzYWdlOwotKyAg Y3BiOjpzcG90aWZ5OjpJbWFnZVJlcXVlc3QqIHJlcSA9IG1lc3NhZ2UubXV0YWJsZV9pbWFnZV9y ZXF1ZXN0KCk7Ci0gCi0gICByZXEtPnNldF9pZChEYXRhQ29tbWFTaXplRnJvbVFTdHJpbmcoaWQp KTsKLSAgIFNlbmRPclF1ZXVlTWVzc2FnZShtZXNzYWdlKTsKLSB9Ci0gCi0gdm9pZCBTcG90aWZ5 U2VydmVyOjpBbGJ1bUJyb3dzZShjb25zdCBRU3RyaW5nJiB1cmkpIHsKLS0gIHBiOjpzcG90aWZ5 OjpNZXNzYWdlIG1lc3NhZ2U7Ci0tICBwYjo6c3BvdGlmeTo6QnJvd3NlQWxidW1SZXF1ZXN0KiBy ZXEgPSBtZXNzYWdlLm11dGFibGVfYnJvd3NlX2FsYnVtX3JlcXVlc3QoKTsKLSsgIGNwYjo6c3Bv dGlmeTo6TWVzc2FnZSBtZXNzYWdlOwotKyAgY3BiOjpzcG90aWZ5OjpCcm93c2VBbGJ1bVJlcXVl c3QqIHJlcSA9IG1lc3NhZ2UubXV0YWJsZV9icm93c2VfYWxidW1fcmVxdWVzdCgpOwotIAotICAg cmVxLT5zZXRfdXJpKERhdGFDb21tYVNpemVGcm9tUVN0cmluZyh1cmkpKTsKLSAgIFNlbmRPclF1 ZXVlTWVzc2FnZShtZXNzYWdlKTsKLSB9Ci0gCi0gdm9pZCBTcG90aWZ5U2VydmVyOjpMb2FkVG9w bGlzdCgpIHsKLS0gIHBiOjpzcG90aWZ5OjpNZXNzYWdlIG1lc3NhZ2U7Ci0tICBwYjo6c3BvdGlm eTo6QnJvd3NlVG9wbGlzdFJlcXVlc3QqIHJlcSA9Ci0rICBjcGI6OnNwb3RpZnk6Ok1lc3NhZ2Ug bWVzc2FnZTsKLSsgIGNwYjo6c3BvdGlmeTo6QnJvd3NlVG9wbGlzdFJlcXVlc3QqIHJlcSA9Ci0g ICAgICAgbWVzc2FnZS5tdXRhYmxlX2Jyb3dzZV90b3BsaXN0X3JlcXVlc3QoKTsKLS0gIHJlcS0+ c2V0X3R5cGUocGI6OnNwb3RpZnk6OkJyb3dzZVRvcGxpc3RSZXF1ZXN0OjpUcmFja3MpOwotLSAg cmVxLT5zZXRfcmVnaW9uKHBiOjpzcG90aWZ5OjpCcm93c2VUb3BsaXN0UmVxdWVzdDo6RXZlcnl3 aGVyZSk7Ci0rICByZXEtPnNldF90eXBlKGNwYjo6c3BvdGlmeTo6QnJvd3NlVG9wbGlzdFJlcXVl c3Q6OlRyYWNrcyk7Ci0rICByZXEtPnNldF9yZWdpb24oY3BiOjpzcG90aWZ5OjpCcm93c2VUb3Bs aXN0UmVxdWVzdDo6RXZlcnl3aGVyZSk7Ci0gCi0gICBTZW5kT3JRdWV1ZU1lc3NhZ2UobWVzc2Fn ZSk7Ci0gfQotIAotIHZvaWQgU3BvdGlmeVNlcnZlcjo6U2V0UGF1c2VkKGNvbnN0IGJvb2wgcGF1 c2VkKSB7Ci0tICBwYjo6c3BvdGlmeTo6TWVzc2FnZSBtZXNzYWdlOwotLSAgcGI6OnNwb3RpZnk6 OlBhdXNlUmVxdWVzdCogcmVxID0gbWVzc2FnZS5tdXRhYmxlX3BhdXNlX3JlcXVlc3QoKTsKLSsg IGNwYjo6c3BvdGlmeTo6TWVzc2FnZSBtZXNzYWdlOwotKyAgY3BiOjpzcG90aWZ5OjpQYXVzZVJl cXVlc3QqIHJlcSA9IG1lc3NhZ2UubXV0YWJsZV9wYXVzZV9yZXF1ZXN0KCk7Ci0gICByZXEtPnNl dF9wYXVzZWQocGF1c2VkKTsKLSAgIFNlbmRPclF1ZXVlTWVzc2FnZShtZXNzYWdlKTsKLSB9Ci1k aWZmIC11ciBzcmMvaW50ZXJuZXQvc3BvdGlmeS9zcG90aWZ5c2VydmVyLmggc3JjL2ludGVybmV0 L3Nwb3RpZnkvc3BvdGlmeXNlcnZlci5oCi0tLS0gYS9zcmMvaW50ZXJuZXQvc3BvdGlmeS9zcG90 aWZ5c2VydmVyLmgJMjAyMC0wOS0yMyAyMjozNDowOC4wMDAwMDAwMDAgLTA0MDAKLSsrKyBiL3Ny Yy9pbnRlcm5ldC9zcG90aWZ5L3Nwb3RpZnlzZXJ2ZXIuaAkyMDIxLTAyLTE5IDEyOjAzOjQ4LjIz NzQ3MzAzNyAtMDUwMAotQEAgLTMxLDcgKzMxLDcgQEAKLSBjbGFzcyBRVGNwU2VydmVyOwotIGNs YXNzIFFUY3BTb2NrZXQ7Ci0gCi0tY2xhc3MgU3BvdGlmeVNlcnZlciA6IHB1YmxpYyBBYnN0cmFj dE1lc3NhZ2VIYW5kbGVyPHBiOjpzcG90aWZ5OjpNZXNzYWdlPiB7Ci0rY2xhc3MgU3BvdGlmeVNl cnZlciA6IHB1YmxpYyBBYnN0cmFjdE1lc3NhZ2VIYW5kbGVyPGNwYjo6c3BvdGlmeTo6TWVzc2Fn ZT4gewotICAgUV9PQkpFQ1QKLSAKLSAgcHVibGljOgotQEAgLTM5LDcgKzM5LDcgQEAKLSAKLSAg IHZvaWQgSW5pdCgpOwotICAgdm9pZCBMb2dpbihjb25zdCBRU3RyaW5nJiB1c2VybmFtZSwgY29u c3QgUVN0cmluZyYgcGFzc3dvcmQsCi0tICAgICAgICAgICAgIHBiOjpzcG90aWZ5OjpCaXRyYXRl IGJpdHJhdGUsIGJvb2wgdm9sdW1lX25vcm1hbGlzYXRpb24pOwotKyAgICAgICAgICAgICBjcGI6 OnNwb3RpZnk6OkJpdHJhdGUgYml0cmF0ZSwgYm9vbCB2b2x1bWVfbm9ybWFsaXNhdGlvbik7Ci0g Ci0gICB2b2lkIExvYWRTdGFycmVkKCk7Ci0gICB2b2lkIFN5bmNTdGFycmVkKCk7Ci1AQCAtNTYs NyArNTYsNyBAQAotICAgdm9pZCBTZWFyY2goY29uc3QgUVN0cmluZyYgdGV4dCwgaW50IGxpbWl0 LCBpbnQgbGltaXRfYWxidW0gPSAwKTsKLSAgIHZvaWQgTG9hZEltYWdlKGNvbnN0IFFTdHJpbmcm IGlkKTsKLSAgIHZvaWQgQWxidW1Ccm93c2UoY29uc3QgUVN0cmluZyYgdXJpKTsKLS0gIHZvaWQg U2V0UGxheWJhY2tTZXR0aW5ncyhwYjo6c3BvdGlmeTo6Qml0cmF0ZSBiaXRyYXRlLAotKyAgdm9p ZCBTZXRQbGF5YmFja1NldHRpbmdzKGNwYjo6c3BvdGlmeTo6Qml0cmF0ZSBiaXRyYXRlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdm9sdW1lX25vcm1hbGlzYXRpb24pOwotICAg dm9pZCBMb2FkVG9wbGlzdCgpOwotICAgdm9pZCBTZXRQYXVzZWQoY29uc3QgYm9vbCBwYXVzZWQp OwotQEAgLTY5LDQzICs2OSw0MyBAQAotIAotICBzaWduYWxzOgotICAgdm9pZCBMb2dpbkNvbXBs ZXRlZChib29sIHN1Y2Nlc3MsIGNvbnN0IFFTdHJpbmcmIGVycm9yLAotLSAgICAgICAgICAgICAg ICAgICAgICBwYjo6c3BvdGlmeTo6TG9naW5SZXNwb25zZV9FcnJvciBlcnJvcl9jb2RlKTsKLS0g IHZvaWQgUGxheWxpc3RzVXBkYXRlZChjb25zdCBwYjo6c3BvdGlmeTo6UGxheWxpc3RzJiBwbGF5 bGlzdHMpOwotKyAgICAgICAgICAgICAgICAgICAgICBjcGI6OnNwb3RpZnk6OkxvZ2luUmVzcG9u c2VfRXJyb3IgZXJyb3JfY29kZSk7Ci0rICB2b2lkIFBsYXlsaXN0c1VwZGF0ZWQoY29uc3QgY3Bi OjpzcG90aWZ5OjpQbGF5bGlzdHMmIHBsYXlsaXN0cyk7Ci0gCi0tICB2b2lkIFN0YXJyZWRMb2Fk ZWQoY29uc3QgcGI6OnNwb3RpZnk6OkxvYWRQbGF5bGlzdFJlc3BvbnNlJiByZXNwb25zZSk7Ci0t ICB2b2lkIEluYm94TG9hZGVkKGNvbnN0IHBiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25z ZSYgcmVzcG9uc2UpOwotLSAgdm9pZCBVc2VyUGxheWxpc3RMb2FkZWQoY29uc3QgcGI6OnNwb3Rp Znk6OkxvYWRQbGF5bGlzdFJlc3BvbnNlJiByZXNwb25zZSk7Ci0rICB2b2lkIFN0YXJyZWRMb2Fk ZWQoY29uc3QgY3BiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSYgcmVzcG9uc2UpOwot KyAgdm9pZCBJbmJveExvYWRlZChjb25zdCBjcGI6OnNwb3RpZnk6OkxvYWRQbGF5bGlzdFJlc3Bv bnNlJiByZXNwb25zZSk7Ci0rICB2b2lkIFVzZXJQbGF5bGlzdExvYWRlZChjb25zdCBjcGI6OnNw b3RpZnk6OkxvYWRQbGF5bGlzdFJlc3BvbnNlJiByZXNwb25zZSk7Ci0gICB2b2lkIFBsYXliYWNr RXJyb3IoY29uc3QgUVN0cmluZyYgbWVzc2FnZSk7Ci0tICB2b2lkIFNlYXJjaFJlc3VsdHMoY29u c3QgcGI6OnNwb3RpZnk6OlNlYXJjaFJlc3BvbnNlJiByZXNwb25zZSk7Ci0rICB2b2lkIFNlYXJj aFJlc3VsdHMoY29uc3QgY3BiOjpzcG90aWZ5OjpTZWFyY2hSZXNwb25zZSYgcmVzcG9uc2UpOwot ICAgdm9pZCBJbWFnZUxvYWRlZChjb25zdCBRU3RyaW5nJiBpZCwgY29uc3QgUUltYWdlJiBpbWFn ZSk7Ci0tICB2b2lkIFN5bmNQbGF5bGlzdFByb2dyZXNzKGNvbnN0IHBiOjpzcG90aWZ5OjpTeW5j UGxheWxpc3RQcm9ncmVzcyYgcHJvZ3Jlc3MpOwotLSAgdm9pZCBBbGJ1bUJyb3dzZVJlc3VsdHMo Y29uc3QgcGI6OnNwb3RpZnk6OkJyb3dzZUFsYnVtUmVzcG9uc2UmIHJlc3BvbnNlKTsKLS0gIHZv aWQgVG9wbGlzdEJyb3dzZVJlc3VsdHMoY29uc3QgcGI6OnNwb3RpZnk6OkJyb3dzZVRvcGxpc3RS ZXNwb25zZSYgcmVzcG9uc2UpOwotKyAgdm9pZCBTeW5jUGxheWxpc3RQcm9ncmVzcyhjb25zdCBj cGI6OnNwb3RpZnk6OlN5bmNQbGF5bGlzdFByb2dyZXNzJiBwcm9ncmVzcyk7Ci0rICB2b2lkIEFs YnVtQnJvd3NlUmVzdWx0cyhjb25zdCBjcGI6OnNwb3RpZnk6OkJyb3dzZUFsYnVtUmVzcG9uc2Um IHJlc3BvbnNlKTsKLSsgIHZvaWQgVG9wbGlzdEJyb3dzZVJlc3VsdHMoY29uc3QgY3BiOjpzcG90 aWZ5OjpCcm93c2VUb3BsaXN0UmVzcG9uc2UmIHJlc3BvbnNlKTsKLSAKLSAgcHJvdGVjdGVkOgot LSAgdm9pZCBNZXNzYWdlQXJyaXZlZChjb25zdCBwYjo6c3BvdGlmeTo6TWVzc2FnZSYgbWVzc2Fn ZSk7Ci0rICB2b2lkIE1lc3NhZ2VBcnJpdmVkKGNvbnN0IGNwYjo6c3BvdGlmeTo6TWVzc2FnZSYg bWVzc2FnZSk7Ci0gCi0gIHByaXZhdGUgc2xvdHM6Ci0gICB2b2lkIE5ld0Nvbm5lY3Rpb24oKTsK LSAKLSAgcHJpdmF0ZToKLS0gIHZvaWQgTG9hZFBsYXlsaXN0KHBiOjpzcG90aWZ5OjpQbGF5bGlz dFR5cGUgdHlwZSwgaW50IGluZGV4ID0gLTEpOwotLSAgdm9pZCBTeW5jUGxheWxpc3QocGI6OnNw b3RpZnk6OlBsYXlsaXN0VHlwZSB0eXBlLCBpbnQgaW5kZXgsIGJvb2wgb2ZmbGluZSk7Ci0tICB2 b2lkIEFkZFNvbmdzVG9QbGF5bGlzdChjb25zdCBwYjo6c3BvdGlmeTo6UGxheWxpc3RUeXBlIHBs YXlsaXN0X3R5cGUsCi0rICB2b2lkIExvYWRQbGF5bGlzdChjcGI6OnNwb3RpZnk6OlBsYXlsaXN0 VHlwZSB0eXBlLCBpbnQgaW5kZXggPSAtMSk7Ci0rICB2b2lkIFN5bmNQbGF5bGlzdChjcGI6OnNw b3RpZnk6OlBsYXlsaXN0VHlwZSB0eXBlLCBpbnQgaW5kZXgsIGJvb2wgb2ZmbGluZSk7Ci0rICB2 b2lkIEFkZFNvbmdzVG9QbGF5bGlzdChjb25zdCBjcGI6OnNwb3RpZnk6OlBsYXlsaXN0VHlwZSBw bGF5bGlzdF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUxpc3Q8UVVy bD4mIHNvbmdzX3VybHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2VkIGlmZiB0 eXBlIGlzIHVzZXJfcGxheWxpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwbGF5 bGlzdF9pbmRleCA9IC0xKTsKLS0gIHZvaWQgUmVtb3ZlU29uZ3NGcm9tUGxheWxpc3QoY29uc3Qg cGI6OnNwb3RpZnk6OlBsYXlsaXN0VHlwZSBwbGF5bGlzdF90eXBlLAotKyAgdm9pZCBSZW1vdmVT b25nc0Zyb21QbGF5bGlzdChjb25zdCBjcGI6OnNwb3RpZnk6OlBsYXlsaXN0VHlwZSBwbGF5bGlz dF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRTGlzdDxpbnQ+ JiBzb25nc19pbmRpY2VzX3RvX3JlbW92ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gVXNlZCBpZmYgdHlwZSBpcyB1c2VyX3BsYXlsaXN0Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBwbGF5bGlzdF9pbmRleCA9IC0xKTsKLS0gIHZvaWQgU2VuZE9yUXVl dWVNZXNzYWdlKGNvbnN0IHBiOjpzcG90aWZ5OjpNZXNzYWdlJiBtZXNzYWdlKTsKLSsgIHZvaWQg U2VuZE9yUXVldWVNZXNzYWdlKGNvbnN0IGNwYjo6c3BvdGlmeTo6TWVzc2FnZSYgbWVzc2FnZSk7 Ci0gCi0gICBRVGNwU2VydmVyKiBzZXJ2ZXJfOwotICAgYm9vbCBsb2dnZWRfaW5fOwotIAotLSAg UUxpc3Q8cGI6OnNwb3RpZnk6Ok1lc3NhZ2U+IHF1ZXVlZF9sb2dpbl9tZXNzYWdlc187Ci0tICBR TGlzdDxwYjo6c3BvdGlmeTo6TWVzc2FnZT4gcXVldWVkX21lc3NhZ2VzXzsKLSsgIFFMaXN0PGNw Yjo6c3BvdGlmeTo6TWVzc2FnZT4gcXVldWVkX2xvZ2luX21lc3NhZ2VzXzsKLSsgIFFMaXN0PGNw Yjo6c3BvdGlmeTo6TWVzc2FnZT4gcXVldWVkX21lc3NhZ2VzXzsKLSB9OwotIAotICNlbmRpZiAg Ly8gSU5URVJORVRfU1BPVElGWV9TUE9USUZZU0VSVkVSX0hfCi1kaWZmIC11ciBzcmMvaW50ZXJu ZXQvc3BvdGlmeS9zcG90aWZ5c2VydmljZS5jcHAgc3JjL2ludGVybmV0L3Nwb3RpZnkvc3BvdGlm eXNlcnZpY2UuY3BwCi0tLS0gYS9zcmMvaW50ZXJuZXQvc3BvdGlmeS9zcG90aWZ5c2VydmljZS5j cHAJMjAyMC0wOS0yMyAyMjozNDowOC4wMDAwMDAwMDAgLTA0MDAKLSsrKyBiL3NyYy9pbnRlcm5l dC9zcG90aWZ5L3Nwb3RpZnlzZXJ2aWNlLmNwcAkyMDIxLTAyLTE5IDEyOjAzOjQ4LjIzODQ3MzA0 MCAtMDUwMAotQEAgLTg1LDcgKzg1LDcgQEAKLSAgICAgICBzZWFyY2hfYm94XyhuZXcgU2VhcmNo Qm94V2lkZ2V0KHRoaXMpKSwKLSAgICAgICBzZWFyY2hfZGVsYXlfKG5ldyBRVGltZXIodGhpcykp LAotICAgICAgIGxvZ2luX3N0YXRlXyhMb2dpblN0YXRlX090aGVyRXJyb3IpLAotLSAgICAgIGJp dHJhdGVfKHBiOjpzcG90aWZ5OjpCaXRyYXRlMzIwayksCi0rICAgICAgYml0cmF0ZV8oY3BiOjpz cG90aWZ5OjpCaXRyYXRlMzIwayksCi0gICAgICAgdm9sdW1lX25vcm1hbGlzYXRpb25fKGZhbHNl KSB7Ci0gLy8gQnVpbGQgdGhlIHNlYXJjaCBwYXRoIGZvciB0aGUgYmluYXJ5IGJsb2IuCi0gLy8g TG9vayBmb3Igb25lIGRpc3RyaWJ1dGVkIGFsb25nc2lkZSBjbGVtZW50aW5lIGZpcnN0LCB0aGVu IGNoZWNrIGluIHRoZQotQEAgLTE3NCw3ICsxNzQsNyBAQAotIAotIHZvaWQgU3BvdGlmeVNlcnZp Y2U6OkxvZ2luQ29tcGxldGVkKAotICAgICBib29sIHN1Y2Nlc3MsIGNvbnN0IFFTdHJpbmcmIGVy cm9yLAotLSAgICBwYjo6c3BvdGlmeTo6TG9naW5SZXNwb25zZV9FcnJvciBlcnJvcl9jb2RlKSB7 Ci0rICAgIGNwYjo6c3BvdGlmeTo6TG9naW5SZXNwb25zZV9FcnJvciBlcnJvcl9jb2RlKSB7Ci0g ICBpZiAobG9naW5fdGFza19pZF8pIHsKLSAgICAgYXBwXy0+dGFza19tYW5hZ2VyKCktPlNldFRh c2tGaW5pc2hlZChsb2dpbl90YXNrX2lkXyk7Ci0gICAgIGxvZ2luX3Rhc2tfaWRfID0gMDsKLUBA IC0xODUsMTkgKzE4NSwxOSBAQAotICAgICBRU3RyaW5nIGVycm9yX2NvcHkoZXJyb3IpOwotIAot ICAgICBzd2l0Y2ggKGVycm9yX2NvZGUpIHsKLS0gICAgICBjYXNlIHBiOjpzcG90aWZ5OjpMb2dp blJlc3BvbnNlX0Vycm9yX0JhZFVzZXJuYW1lT3JQYXNzd29yZDoKLSsgICAgICBjYXNlIGNwYjo6 c3BvdGlmeTo6TG9naW5SZXNwb25zZV9FcnJvcl9CYWRVc2VybmFtZU9yUGFzc3dvcmQ6Ci0gICAg ICAgICBsb2dpbl9zdGF0ZV8gPSBMb2dpblN0YXRlX0JhZENyZWRlbnRpYWxzOwotICAgICAgICAg YnJlYWs7Ci0gCi0tICAgICAgY2FzZSBwYjo6c3BvdGlmeTo6TG9naW5SZXNwb25zZV9FcnJvcl9V c2VyQmFubmVkOgotKyAgICAgIGNhc2UgY3BiOjpzcG90aWZ5OjpMb2dpblJlc3BvbnNlX0Vycm9y X1VzZXJCYW5uZWQ6Ci0gICAgICAgICBsb2dpbl9zdGF0ZV8gPSBMb2dpblN0YXRlX0Jhbm5lZDsK LSAgICAgICAgIGJyZWFrOwotIAotLSAgICAgIGNhc2UgcGI6OnNwb3RpZnk6OkxvZ2luUmVzcG9u c2VfRXJyb3JfVXNlck5lZWRzUHJlbWl1bToKLSsgICAgICBjYXNlIGNwYjo6c3BvdGlmeTo6TG9n aW5SZXNwb25zZV9FcnJvcl9Vc2VyTmVlZHNQcmVtaXVtOgotICAgICAgICAgbG9naW5fc3RhdGVf ID0gTG9naW5TdGF0ZV9Ob1ByZW1pdW07Ci0gICAgICAgICBicmVhazsKLSAKLS0gICAgICBjYXNl IHBiOjpzcG90aWZ5OjpMb2dpblJlc3BvbnNlX0Vycm9yX1JlbG9naW5GYWlsZWQ6Ci0rICAgICAg Y2FzZSBjcGI6OnNwb3RpZnk6OkxvZ2luUmVzcG9uc2VfRXJyb3JfUmVsb2dpbkZhaWxlZDoKLSAg ICAgICAgIGlmIChsb2dpbl9zdGF0ZV8gPT0gTG9naW5TdGF0ZV9Mb2dnZWRJbikgewotICAgICAg ICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoZSByZWxvZ2luIGhhcyBmYWlsZWQgLSBz aG93IGEgbWVzc2FnZSB0aGlzCi0gICAgICAgICAgIC8vIHRpbWUgb25seS4KLUBAIC0yNDcsOCAr MjQ3LDggQEAKLSAKLSAgIGxvZ2luX3N0YXRlXyA9Ci0gICAgICAgTG9naW5TdGF0ZShzLnZhbHVl KCJsb2dpbl9zdGF0ZSIsIExvZ2luU3RhdGVfT3RoZXJFcnJvcikudG9JbnQoKSk7Ci0tICBiaXRy YXRlXyA9IHN0YXRpY19jYXN0PHBiOjpzcG90aWZ5OjpCaXRyYXRlPigKLS0gICAgICBzLnZhbHVl KCJiaXRyYXRlIiwgcGI6OnNwb3RpZnk6OkJpdHJhdGUzMjBrKS50b0ludCgpKTsKLSsgIGJpdHJh dGVfID0gc3RhdGljX2Nhc3Q8Y3BiOjpzcG90aWZ5OjpCaXRyYXRlPigKLSsgICAgICBzLnZhbHVl KCJiaXRyYXRlIiwgY3BiOjpzcG90aWZ5OjpCaXRyYXRlMzIwaykudG9JbnQoKSk7Ci0gICB2b2x1 bWVfbm9ybWFsaXNhdGlvbl8gPSBzLnZhbHVlKCJ2b2x1bWVfbm9ybWFsaXNhdGlvbiIsIGZhbHNl KS50b0Jvb2woKTsKLSAKLSAgIGlmIChzZXJ2ZXJfICYmIGJsb2JfcHJvY2Vzc18pIHsKLUBAIC0y NjcsMjkgKzI2NywyOSBAQAotIAotICAgY29ubmVjdCgKLSAgICAgICBzZXJ2ZXJfLAotLSAgICAg IFNJR05BTChMb2dpbkNvbXBsZXRlZChib29sLCBRU3RyaW5nLCBwYjo6c3BvdGlmeTo6TG9naW5S ZXNwb25zZV9FcnJvcikpLAotLSAgICAgIFNMT1QoTG9naW5Db21wbGV0ZWQoYm9vbCwgUVN0cmlu ZywgcGI6OnNwb3RpZnk6OkxvZ2luUmVzcG9uc2VfRXJyb3IpKSk7Ci0tICBjb25uZWN0KHNlcnZl cl8sIFNJR05BTChQbGF5bGlzdHNVcGRhdGVkKHBiOjpzcG90aWZ5OjpQbGF5bGlzdHMpKSwKLS0g ICAgICAgICAgU0xPVChQbGF5bGlzdHNVcGRhdGVkKHBiOjpzcG90aWZ5OjpQbGF5bGlzdHMpKSk7 Ci0tICBjb25uZWN0KHNlcnZlcl8sIFNJR05BTChJbmJveExvYWRlZChwYjo6c3BvdGlmeTo6TG9h ZFBsYXlsaXN0UmVzcG9uc2UpKSwKLS0gICAgICAgICAgU0xPVChJbmJveExvYWRlZChwYjo6c3Bv dGlmeTo6TG9hZFBsYXlsaXN0UmVzcG9uc2UpKSk7Ci0tICBjb25uZWN0KHNlcnZlcl8sIFNJR05B TChTdGFycmVkTG9hZGVkKHBiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSkpLAotLSAg ICAgICAgICBTTE9UKFN0YXJyZWRMb2FkZWQocGI6OnNwb3RpZnk6OkxvYWRQbGF5bGlzdFJlc3Bv bnNlKSkpOwotKyAgICAgIFNJR05BTChMb2dpbkNvbXBsZXRlZChib29sLCBRU3RyaW5nLCBjcGI6 OnNwb3RpZnk6OkxvZ2luUmVzcG9uc2VfRXJyb3IpKSwKLSsgICAgICBTTE9UKExvZ2luQ29tcGxl dGVkKGJvb2wsIFFTdHJpbmcsIGNwYjo6c3BvdGlmeTo6TG9naW5SZXNwb25zZV9FcnJvcikpKTsK LSsgIGNvbm5lY3Qoc2VydmVyXywgU0lHTkFMKFBsYXlsaXN0c1VwZGF0ZWQoY3BiOjpzcG90aWZ5 OjpQbGF5bGlzdHMpKSwKLSsgICAgICAgICAgU0xPVChQbGF5bGlzdHNVcGRhdGVkKGNwYjo6c3Bv dGlmeTo6UGxheWxpc3RzKSkpOwotKyAgY29ubmVjdChzZXJ2ZXJfLCBTSUdOQUwoSW5ib3hMb2Fk ZWQoY3BiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSkpLAotKyAgICAgICAgICBTTE9U KEluYm94TG9hZGVkKGNwYjo6c3BvdGlmeTo6TG9hZFBsYXlsaXN0UmVzcG9uc2UpKSk7Ci0rICBj b25uZWN0KHNlcnZlcl8sIFNJR05BTChTdGFycmVkTG9hZGVkKGNwYjo6c3BvdGlmeTo6TG9hZFBs YXlsaXN0UmVzcG9uc2UpKSwKLSsgICAgICAgICAgU0xPVChTdGFycmVkTG9hZGVkKGNwYjo6c3Bv dGlmeTo6TG9hZFBsYXlsaXN0UmVzcG9uc2UpKSk7Ci0gICBjb25uZWN0KHNlcnZlcl8sCi0tICAg ICAgICAgIFNJR05BTChVc2VyUGxheWxpc3RMb2FkZWQocGI6OnNwb3RpZnk6OkxvYWRQbGF5bGlz dFJlc3BvbnNlKSksCi0tICAgICAgICAgIFNMT1QoVXNlclBsYXlsaXN0TG9hZGVkKHBiOjpzcG90 aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSkpKTsKLSsgICAgICAgICAgU0lHTkFMKFVzZXJQbGF5 bGlzdExvYWRlZChjcGI6OnNwb3RpZnk6OkxvYWRQbGF5bGlzdFJlc3BvbnNlKSksCi0rICAgICAg ICAgIFNMT1QoVXNlclBsYXlsaXN0TG9hZGVkKGNwYjo6c3BvdGlmeTo6TG9hZFBsYXlsaXN0UmVz cG9uc2UpKSk7Ci0gICBjb25uZWN0KHNlcnZlcl8sIFNJR05BTChQbGF5YmFja0Vycm9yKFFTdHJp bmcpKSwKLSAgICAgICAgICAgU0lHTkFMKFN0cmVhbUVycm9yKFFTdHJpbmcpKSk7Ci0tICBjb25u ZWN0KHNlcnZlcl8sIFNJR05BTChTZWFyY2hSZXN1bHRzKHBiOjpzcG90aWZ5OjpTZWFyY2hSZXNw b25zZSkpLAotLSAgICAgICAgICBTTE9UKFNlYXJjaFJlc3VsdHMocGI6OnNwb3RpZnk6OlNlYXJj aFJlc3BvbnNlKSkpOwotKyAgY29ubmVjdChzZXJ2ZXJfLCBTSUdOQUwoU2VhcmNoUmVzdWx0cyhj cGI6OnNwb3RpZnk6OlNlYXJjaFJlc3BvbnNlKSksCi0rICAgICAgICAgIFNMT1QoU2VhcmNoUmVz dWx0cyhjcGI6OnNwb3RpZnk6OlNlYXJjaFJlc3BvbnNlKSkpOwotICAgY29ubmVjdChzZXJ2ZXJf LCBTSUdOQUwoSW1hZ2VMb2FkZWQoUVN0cmluZywgUUltYWdlKSksCi0gICAgICAgICAgIFNJR05B TChJbWFnZUxvYWRlZChRU3RyaW5nLCBRSW1hZ2UpKSk7Ci0gICBjb25uZWN0KHNlcnZlcl8sCi0t ICAgICAgICAgIFNJR05BTChTeW5jUGxheWxpc3RQcm9ncmVzcyhwYjo6c3BvdGlmeTo6U3luY1Bs YXlsaXN0UHJvZ3Jlc3MpKSwKLS0gICAgICAgICAgU0xPVChTeW5jUGxheWxpc3RQcm9ncmVzcyhw Yjo6c3BvdGlmeTo6U3luY1BsYXlsaXN0UHJvZ3Jlc3MpKSk7Ci0rICAgICAgICAgIFNJR05BTChT eW5jUGxheWxpc3RQcm9ncmVzcyhjcGI6OnNwb3RpZnk6OlN5bmNQbGF5bGlzdFByb2dyZXNzKSks Ci0rICAgICAgICAgIFNMT1QoU3luY1BsYXlsaXN0UHJvZ3Jlc3MoY3BiOjpzcG90aWZ5OjpTeW5j UGxheWxpc3RQcm9ncmVzcykpKTsKLSAgIGNvbm5lY3Qoc2VydmVyXywKLS0gICAgICAgICAgU0lH TkFMKFRvcGxpc3RCcm93c2VSZXN1bHRzKHBiOjpzcG90aWZ5OjpCcm93c2VUb3BsaXN0UmVzcG9u c2UpKSwKLS0gICAgICAgICAgU0xPVChUb3BsaXN0TG9hZGVkKHBiOjpzcG90aWZ5OjpCcm93c2VU b3BsaXN0UmVzcG9uc2UpKSk7Ci0rICAgICAgICAgIFNJR05BTChUb3BsaXN0QnJvd3NlUmVzdWx0 cyhjcGI6OnNwb3RpZnk6OkJyb3dzZVRvcGxpc3RSZXNwb25zZSkpLAotKyAgICAgICAgICBTTE9U KFRvcGxpc3RMb2FkZWQoY3BiOjpzcG90aWZ5OjpCcm93c2VUb3BsaXN0UmVzcG9uc2UpKSk7Ci0g Ci0gICBzZXJ2ZXJfLT5Jbml0KCk7Ci0gCi1AQCAtNDMyLDcgKzQzMiw3IEBACi0gICByb290Xy0+ YXBwZW5kUm93KGluYm94Xyk7Ci0gfQotIAotLXZvaWQgU3BvdGlmeVNlcnZpY2U6OlBsYXlsaXN0 c1VwZGF0ZWQoY29uc3QgcGI6OnNwb3RpZnk6OlBsYXlsaXN0cyYgcmVzcG9uc2UpIHsKLSt2b2lk IFNwb3RpZnlTZXJ2aWNlOjpQbGF5bGlzdHNVcGRhdGVkKGNvbnN0IGNwYjo6c3BvdGlmeTo6UGxh eWxpc3RzJiByZXNwb25zZSkgewotICAgaWYgKGxvZ2luX3Rhc2tfaWRfKSB7Ci0gICAgIGFwcF8t PnRhc2tfbWFuYWdlcigpLT5TZXRUYXNrRmluaXNoZWQobG9naW5fdGFza19pZF8pOwotICAgICBs b2dpbl90YXNrX2lkXyA9IDA7Ci1AQCAtNDYzLDcgKzQ2Myw3IEBACi0gICBwbGF5bGlzdHNfLmNs ZWFyKCk7Ci0gCi0gICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3BvbnNlLnBsYXlsaXN0X3NpemUo KTsgKytpKSB7Ci0tICAgIGNvbnN0IHBiOjpzcG90aWZ5OjpQbGF5bGlzdHM6OlBsYXlsaXN0JiBt c2cgPSByZXNwb25zZS5wbGF5bGlzdChpKTsKLSsgICAgY29uc3QgY3BiOjpzcG90aWZ5OjpQbGF5 bGlzdHM6OlBsYXlsaXN0JiBtc2cgPSByZXNwb25zZS5wbGF5bGlzdChpKTsKLSAKLSAgICAgUVN0 cmluZyBwbGF5bGlzdF90aXRsZSA9IFFTdHJpbmdGcm9tU3RkU3RyaW5nKG1zZy5uYW1lKCkpOwot ICAgICBpZiAoIW1zZy5pc19taW5lKCkpIHsKLUBAIC00OTAsMTMgKzQ5MCwxMyBAQAotIH0KLSAK LSBib29sIFNwb3RpZnlTZXJ2aWNlOjpEb1BsYXlsaXN0c0RpZmZlcigKLS0gICAgY29uc3QgcGI6 OnNwb3RpZnk6OlBsYXlsaXN0cyYgcmVzcG9uc2UpIGNvbnN0IHsKLSsgICAgY29uc3QgY3BiOjpz cG90aWZ5OjpQbGF5bGlzdHMmIHJlc3BvbnNlKSBjb25zdCB7Ci0gICBpZiAocGxheWxpc3RzXy5j b3VudCgpICE9IHJlc3BvbnNlLnBsYXlsaXN0X3NpemUoKSkgewotICAgICByZXR1cm4gdHJ1ZTsK LSAgIH0KLSAKLSAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzcG9uc2UucGxheWxpc3Rfc2l6ZSgp OyArK2kpIHsKLS0gICAgY29uc3QgcGI6OnNwb3RpZnk6OlBsYXlsaXN0czo6UGxheWxpc3QmIG1z ZyA9IHJlc3BvbnNlLnBsYXlsaXN0KGkpOwotKyAgICBjb25zdCBjcGI6OnNwb3RpZnk6OlBsYXls aXN0czo6UGxheWxpc3QmIG1zZyA9IHJlc3BvbnNlLnBsYXlsaXN0KGkpOwotICAgICBjb25zdCBR U3RhbmRhcmRJdGVtKiBpdGVtID0gUGxheWxpc3RCeVNwb3RpZnlJbmRleChtc2cuaW5kZXgoKSk7 Ci0gCi0gICAgIGlmICghaXRlbSkgewotQEAgLTUxNiwyMSArNTE2LDIxIEBACi0gfQotIAotIHZv aWQgU3BvdGlmeVNlcnZpY2U6OkluYm94TG9hZGVkKAotLSAgICBjb25zdCBwYjo6c3BvdGlmeTo6 TG9hZFBsYXlsaXN0UmVzcG9uc2UmIHJlc3BvbnNlKSB7Ci0rICAgIGNvbnN0IGNwYjo6c3BvdGlm eTo6TG9hZFBsYXlsaXN0UmVzcG9uc2UmIHJlc3BvbnNlKSB7Ci0gICBpZiAoaW5ib3hfKSB7Ci0g ICAgIEZpbGxQbGF5bGlzdChpbmJveF8sIHJlc3BvbnNlKTsKLSAgIH0KLSB9Ci0gCi0gdm9pZCBT cG90aWZ5U2VydmljZTo6U3RhcnJlZExvYWRlZCgKLS0gICAgY29uc3QgcGI6OnNwb3RpZnk6Okxv YWRQbGF5bGlzdFJlc3BvbnNlJiByZXNwb25zZSkgewotKyAgICBjb25zdCBjcGI6OnNwb3RpZnk6 OkxvYWRQbGF5bGlzdFJlc3BvbnNlJiByZXNwb25zZSkgewotICAgaWYgKHN0YXJyZWRfKSB7Ci0g ICAgIEZpbGxQbGF5bGlzdChzdGFycmVkXywgcmVzcG9uc2UpOwotICAgfQotIH0KLSAKLSB2b2lk IFNwb3RpZnlTZXJ2aWNlOjpUb3BsaXN0TG9hZGVkKAotLSAgICBjb25zdCBwYjo6c3BvdGlmeTo6 QnJvd3NlVG9wbGlzdFJlc3BvbnNlJiByZXNwb25zZSkgewotKyAgICBjb25zdCBjcGI6OnNwb3Rp Znk6OkJyb3dzZVRvcGxpc3RSZXNwb25zZSYgcmVzcG9uc2UpIHsKLSAgIGlmICh0b3BsaXN0Xykg ewotICAgICBGaWxsUGxheWxpc3QodG9wbGlzdF8sIHJlc3BvbnNlLnRyYWNrKCkpOwotICAgfQot QEAgLTU0Niw3ICs1NDYsNyBAQAotIH0KLSAKLSB2b2lkIFNwb3RpZnlTZXJ2aWNlOjpVc2VyUGxh eWxpc3RMb2FkZWQoCi0tICAgIGNvbnN0IHBiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25z ZSYgcmVzcG9uc2UpIHsKLSsgICAgY29uc3QgY3BiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXNw b25zZSYgcmVzcG9uc2UpIHsKLSAgIC8vIEZpbmQgYSBwbGF5bGlzdCB3aXRoIHRoaXMgaW5kZXgK LSAgIFFTdGFuZGFyZEl0ZW0qIGl0ZW0gPQotICAgICAgIFBsYXlsaXN0QnlTcG90aWZ5SW5kZXgo cmVzcG9uc2UucmVxdWVzdCgpLnVzZXJfcGxheWxpc3RfaW5kZXgoKSk7Ci1AQCAtNTU3LDcgKzU1 Nyw3IEBACi0gCi0gdm9pZCBTcG90aWZ5U2VydmljZTo6RmlsbFBsYXlsaXN0KAotICAgICBRU3Rh bmRhcmRJdGVtKiBpdGVtLAotLSAgICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0 ckZpZWxkPHBiOjpzcG90aWZ5OjpUcmFjaz4mIHRyYWNrcykgewotKyAgICBjb25zdCBnb29nbGU6 OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPGNwYjo6c3BvdGlmeTo6VHJhY2s+JiB0cmFja3Mp IHsKLSAgIGlmIChpdGVtLT5oYXNDaGlsZHJlbigpKSBpdGVtLT5yZW1vdmVSb3dzKDAsIGl0ZW0t PnJvd0NvdW50KCkpOwotIAotICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmFja3Muc2l6ZSgpOyAr K2kpIHsKLUBAIC01NzEsMTIgKzU3MSwxMiBAQAotIH0KLSAKLSB2b2lkIFNwb3RpZnlTZXJ2aWNl OjpGaWxsUGxheWxpc3QoCi0tICAgIFFTdGFuZGFyZEl0ZW0qIGl0ZW0sIGNvbnN0IHBiOjpzcG90 aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSYgcmVzcG9uc2UpIHsKLSsgICAgUVN0YW5kYXJkSXRl bSogaXRlbSwgY29uc3QgY3BiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSYgcmVzcG9u c2UpIHsKLSAgIHFMb2coRGVidWcpIDw8ICJGaWxsaW5nIHBsYXlsaXN0OiIgPDwgaXRlbS0+dGV4 dCgpOwotICAgRmlsbFBsYXlsaXN0KGl0ZW0sIHJlc3BvbnNlLnRyYWNrKCkpOwotIH0KLSAKLS12 b2lkIFNwb3RpZnlTZXJ2aWNlOjpTb25nRnJvbVByb3RvYnVmKGNvbnN0IHBiOjpzcG90aWZ5OjpU cmFjayYgdHJhY2ssCi0rdm9pZCBTcG90aWZ5U2VydmljZTo6U29uZ0Zyb21Qcm90b2J1Zihjb25z dCBjcGI6OnNwb3RpZnk6OlRyYWNrJiB0cmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFNvbmcqIHNvbmcpIHsKLSAgIHNvbmctPnNldF9yYXRpbmcodHJhY2suc3Rh cnJlZCgpID8gMS4wIDogMC4wKTsKLSAgIHNvbmctPnNldF90aXRsZShRU3RyaW5nRnJvbVN0ZFN0 cmluZyh0cmFjay50aXRsZSgpKSk7Ci1AQCAtNzQ3LDcgKzc0Nyw3IEBACi0gfQotIAotIHZvaWQg U3BvdGlmeVNlcnZpY2U6OlNlYXJjaFJlc3VsdHMoCi0tICAgIGNvbnN0IHBiOjpzcG90aWZ5OjpT ZWFyY2hSZXNwb25zZSYgcmVzcG9uc2UpIHsKLSsgICAgY29uc3QgY3BiOjpzcG90aWZ5OjpTZWFy Y2hSZXNwb25zZSYgcmVzcG9uc2UpIHsKLSAgIGlmIChRU3RyaW5nRnJvbVN0ZFN0cmluZyhyZXNw b25zZS5yZXF1ZXN0KCkucXVlcnkoKSkgIT0gcGVuZGluZ19zZWFyY2hfKSB7Ci0gICAgIHFMb2co RGVidWcpIDw8ICJPbGQgc2VhcmNoIHJlc3VsdCBmb3IiCi0gICAgICAgICAgICAgICAgIDw8IFFT dHJpbmdGcm9tU3RkU3RyaW5nKHJlc3BvbnNlLnJlcXVlc3QoKS5xdWVyeSgpKQotQEAgLTg4OCwx NyArODg4LDE3IEBACi0gfQotIAotIHZvaWQgU3BvdGlmeVNlcnZpY2U6OlN5bmNQbGF5bGlzdFBy b2dyZXNzKAotLSAgICBjb25zdCBwYjo6c3BvdGlmeTo6U3luY1BsYXlsaXN0UHJvZ3Jlc3MmIHBy b2dyZXNzKSB7Ci0rICAgIGNvbnN0IGNwYjo6c3BvdGlmeTo6U3luY1BsYXlsaXN0UHJvZ3Jlc3Mm IHByb2dyZXNzKSB7Ci0gICBxTG9nKERlYnVnKSA8PCAiU3luYyBwcm9ncmVzczoiIDw8IHByb2dy ZXNzLnN5bmNfcHJvZ3Jlc3MoKTsKLSAgIGludCB0YXNrX2lkID0gLTE7Ci0gICBzd2l0Y2ggKHBy b2dyZXNzLnJlcXVlc3QoKS50eXBlKCkpIHsKLS0gICAgY2FzZSBwYjo6c3BvdGlmeTo6SW5ib3g6 Ci0rICAgIGNhc2UgY3BiOjpzcG90aWZ5OjpJbmJveDoKLSAgICAgICB0YXNrX2lkID0gaW5ib3hf c3luY19pZF87Ci0gICAgICAgYnJlYWs7Ci0tICAgIGNhc2UgcGI6OnNwb3RpZnk6OlN0YXJyZWQ6 Ci0rICAgIGNhc2UgY3BiOjpzcG90aWZ5OjpTdGFycmVkOgotICAgICAgIHRhc2tfaWQgPSBzdGFy cmVkX3N5bmNfaWRfOwotICAgICAgIGJyZWFrOwotLSAgICBjYXNlIHBiOjpzcG90aWZ5OjpVc2Vy UGxheWxpc3Q6IHsKLSsgICAgY2FzZSBjcGI6OnNwb3RpZnk6OlVzZXJQbGF5bGlzdDogewotICAg ICAgIFFNYXA8aW50LCBpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHBsYXlsaXN0X3N5bmNfaWRz Xy5jb25zdEZpbmQoCi0gICAgICAgICAgIHByb2dyZXNzLnJlcXVlc3QoKS51c2VyX3BsYXlsaXN0 X2luZGV4KCkpOwotICAgICAgIGlmIChpdCAhPSBwbGF5bGlzdF9zeW5jX2lkc18uY29uc3RFbmQo KSkgewotQEAgLTkxNiw3ICs5MTYsNyBAQAotICAgYXBwXy0+dGFza19tYW5hZ2VyKCktPlNldFRh c2tQcm9ncmVzcyh0YXNrX2lkLCBwcm9ncmVzcy5zeW5jX3Byb2dyZXNzKCksIDEwMCk7Ci0gICBp ZiAocHJvZ3Jlc3Muc3luY19wcm9ncmVzcygpID09IDEwMCkgewotICAgICBhcHBfLT50YXNrX21h bmFnZXIoKS0+U2V0VGFza0ZpbmlzaGVkKHRhc2tfaWQpOwotLSAgICBpZiAocHJvZ3Jlc3MucmVx dWVzdCgpLnR5cGUoKSA9PSBwYjo6c3BvdGlmeTo6VXNlclBsYXlsaXN0KSB7Ci0rICAgIGlmIChw cm9ncmVzcy5yZXF1ZXN0KCkudHlwZSgpID09IGNwYjo6c3BvdGlmeTo6VXNlclBsYXlsaXN0KSB7 Ci0gICAgICAgcGxheWxpc3Rfc3luY19pZHNfLnJlbW92ZSh0YXNrX2lkKTsKLSAgICAgfQotICAg fQotZGlmZiAtdXIgc3JjL2ludGVybmV0L3Nwb3RpZnkvc3BvdGlmeXNlcnZpY2UuaCBzcmMvaW50 ZXJuZXQvc3BvdGlmeS9zcG90aWZ5c2VydmljZS5oCi0tLS0gYS9zcmMvaW50ZXJuZXQvc3BvdGlm eS9zcG90aWZ5c2VydmljZS5oCTIwMjAtMDktMjMgMjI6MzQ6MDguMDAwMDAwMDAwIC0wNDAwCi0r KysgYi9zcmMvaW50ZXJuZXQvc3BvdGlmeS9zcG90aWZ5c2VydmljZS5oCTIwMjEtMDItMTkgMTI6 MDM6NDguMjM4NDczMDQwIC0wNTAwCi1AQCAtOTMsNyArOTMsNyBAQAotICAgTG9naW5TdGF0ZSBs b2dpbl9zdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGxvZ2luX3N0YXRlXzsgfQotICAgYm9vbCBJc0xv Z2dlZEluKCkgY29uc3QgeyByZXR1cm4gbG9naW5fc3RhdGVfID09IExvZ2luU3RhdGVfTG9nZ2Vk SW47IH0KLSAKLS0gIHN0YXRpYyB2b2lkIFNvbmdGcm9tUHJvdG9idWYoY29uc3QgcGI6OnNwb3Rp Znk6OlRyYWNrJiB0cmFjaywgU29uZyogc29uZyk7Ci0rICBzdGF0aWMgdm9pZCBTb25nRnJvbVBy b3RvYnVmKGNvbnN0IGNwYjo6c3BvdGlmeTo6VHJhY2smIHRyYWNrLCBTb25nKiBzb25nKTsKLSAK LSAgc2lnbmFsczoKLSAgIHZvaWQgQmxvYlN0YXRlQ2hhbmdlZCgpOwotQEAgLTEwOSw5ICsxMDks OSBAQAotICAgdm9pZCBTdGFydEJsb2JQcm9jZXNzKCk7Ci0gICB2b2lkIEZpbGxQbGF5bGlzdCgK LSAgICAgICBRU3RhbmRhcmRJdGVtKiBpdGVtLAotLSAgICAgIGNvbnN0IGdvb2dsZTo6cHJvdG9i dWY6OlJlcGVhdGVkUHRyRmllbGQ8cGI6OnNwb3RpZnk6OlRyYWNrPiYgdHJhY2tzKTsKLSsgICAg ICBjb25zdCBnb29nbGU6OnByb3RvYnVmOjpSZXBlYXRlZFB0ckZpZWxkPGNwYjo6c3BvdGlmeTo6 VHJhY2s+JiB0cmFja3MpOwotICAgdm9pZCBGaWxsUGxheWxpc3QoUVN0YW5kYXJkSXRlbSogaXRl bSwKLS0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RS ZXNwb25zZSYgcmVzcG9uc2UpOwotKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY3BiOjpzcG90 aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSYgcmVzcG9uc2UpOwotICAgdm9pZCBBZGRTb25nc1Rv VXNlclBsYXlsaXN0KGludCBwbGF5bGlzdF9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBRTGlzdDxRVXJsPiYgc29uZ3NfdXJscyk7Ci0gICB2b2lkIEFkZFNvbmdz VG9TdGFycmVkKGNvbnN0IFFMaXN0PFFVcmw+JiBzb25nc191cmxzKTsKLUBAIC0xMjMsMjYgKzEy MywyNiBAQAotICAgdm9pZCBJbml0U2VhcmNoKCk7Ci0gICB2b2lkIENsZWFyU2VhcmNoUmVzdWx0 cygpOwotICAgUVN0YW5kYXJkSXRlbSogUGxheWxpc3RCeVNwb3RpZnlJbmRleChpbnQgaW5kZXgp IGNvbnN0OwotLSAgYm9vbCBEb1BsYXlsaXN0c0RpZmZlcihjb25zdCBwYjo6c3BvdGlmeTo6UGxh eWxpc3RzJiByZXNwb25zZSkgY29uc3Q7Ci0rICBib29sIERvUGxheWxpc3RzRGlmZmVyKGNvbnN0 IGNwYjo6c3BvdGlmeTo6UGxheWxpc3RzJiByZXNwb25zZSkgY29uc3Q7Ci0gCi0gIHByaXZhdGUg c2xvdHM6Ci0gICB2b2lkIEVuc3VyZVNlcnZlckNyZWF0ZWQoY29uc3QgUVN0cmluZyYgdXNlcm5h bWUgPSBRU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVN0cmlu ZyYgcGFzc3dvcmQgPSBRU3RyaW5nKCkpOwotICAgdm9pZCBCbG9iUHJvY2Vzc0Vycm9yKFFQcm9j ZXNzOjpQcm9jZXNzRXJyb3IgZXJyb3IpOwotICAgdm9pZCBMb2dpbkNvbXBsZXRlZChib29sIHN1 Y2Nlc3MsIGNvbnN0IFFTdHJpbmcmIGVycm9yLAotLSAgICAgICAgICAgICAgICAgICAgICBwYjo6 c3BvdGlmeTo6TG9naW5SZXNwb25zZV9FcnJvciBlcnJvcl9jb2RlKTsKLSsgICAgICAgICAgICAg ICAgICAgICAgY3BiOjpzcG90aWZ5OjpMb2dpblJlc3BvbnNlX0Vycm9yIGVycm9yX2NvZGUpOwot ICAgdm9pZCBBZGRDdXJyZW50U29uZ1RvVXNlclBsYXlsaXN0KFFBY3Rpb24qIGFjdGlvbik7Ci0g ICB2b2lkIEFkZEN1cnJlbnRTb25nVG9TdGFycmVkUGxheWxpc3QoKTsKLSAgIHZvaWQgUmVtb3Zl U29uZ3NGcm9tVXNlclBsYXlsaXN0KGludCBwbGF5bGlzdF9pbmRleCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFMaXN0PGludD4mIHNvbmdzX2luZGljZXNfdG9f cmVtb3ZlKTsKLSAgIHZvaWQgUmVtb3ZlU29uZ3NGcm9tU3RhcnJlZChjb25zdCBRTGlzdDxpbnQ+ JiBzb25nc19pbmRpY2VzX3RvX3JlbW92ZSk7Ci0tICB2b2lkIFBsYXlsaXN0c1VwZGF0ZWQoY29u c3QgcGI6OnNwb3RpZnk6OlBsYXlsaXN0cyYgcmVzcG9uc2UpOwotLSAgdm9pZCBJbmJveExvYWRl ZChjb25zdCBwYjo6c3BvdGlmeTo6TG9hZFBsYXlsaXN0UmVzcG9uc2UmIHJlc3BvbnNlKTsKLS0g IHZvaWQgU3RhcnJlZExvYWRlZChjb25zdCBwYjo6c3BvdGlmeTo6TG9hZFBsYXlsaXN0UmVzcG9u c2UmIHJlc3BvbnNlKTsKLS0gIHZvaWQgVXNlclBsYXlsaXN0TG9hZGVkKGNvbnN0IHBiOjpzcG90 aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSYgcmVzcG9uc2UpOwotLSAgdm9pZCBTZWFyY2hSZXN1 bHRzKGNvbnN0IHBiOjpzcG90aWZ5OjpTZWFyY2hSZXNwb25zZSYgcmVzcG9uc2UpOwotLSAgdm9p ZCBTeW5jUGxheWxpc3RQcm9ncmVzcyhjb25zdCBwYjo6c3BvdGlmeTo6U3luY1BsYXlsaXN0UHJv Z3Jlc3MmIHByb2dyZXNzKTsKLS0gIHZvaWQgVG9wbGlzdExvYWRlZChjb25zdCBwYjo6c3BvdGlm eTo6QnJvd3NlVG9wbGlzdFJlc3BvbnNlJiByZXNwb25zZSk7Ci0rICB2b2lkIFBsYXlsaXN0c1Vw ZGF0ZWQoY29uc3QgY3BiOjpzcG90aWZ5OjpQbGF5bGlzdHMmIHJlc3BvbnNlKTsKLSsgIHZvaWQg SW5ib3hMb2FkZWQoY29uc3QgY3BiOjpzcG90aWZ5OjpMb2FkUGxheWxpc3RSZXNwb25zZSYgcmVz cG9uc2UpOwotKyAgdm9pZCBTdGFycmVkTG9hZGVkKGNvbnN0IGNwYjo6c3BvdGlmeTo6TG9hZFBs YXlsaXN0UmVzcG9uc2UmIHJlc3BvbnNlKTsKLSsgIHZvaWQgVXNlclBsYXlsaXN0TG9hZGVkKGNv bnN0IGNwYjo6c3BvdGlmeTo6TG9hZFBsYXlsaXN0UmVzcG9uc2UmIHJlc3BvbnNlKTsKLSsgIHZv aWQgU2VhcmNoUmVzdWx0cyhjb25zdCBjcGI6OnNwb3RpZnk6OlNlYXJjaFJlc3BvbnNlJiByZXNw b25zZSk7Ci0rICB2b2lkIFN5bmNQbGF5bGlzdFByb2dyZXNzKGNvbnN0IGNwYjo6c3BvdGlmeTo6 U3luY1BsYXlsaXN0UHJvZ3Jlc3MmIHByb2dyZXNzKTsKLSsgIHZvaWQgVG9wbGlzdExvYWRlZChj b25zdCBjcGI6OnNwb3RpZnk6OkJyb3dzZVRvcGxpc3RSZXNwb25zZSYgcmVzcG9uc2UpOwotICAg dm9pZCBHZXRDdXJyZW50U29uZ1VybFRvU2hhcmUoKSBjb25zdDsKLSAgIHZvaWQgR2V0Q3VycmVu dFBsYXlsaXN0VXJsVG9TaGFyZSgpIGNvbnN0OwotIAotQEAgLTE4OCw3ICsxODgsNyBAQAotICAg UU1hcDxpbnQsIGludD4gcGxheWxpc3Rfc3luY19pZHNfOwotIAotICAgTG9naW5TdGF0ZSBsb2dp bl9zdGF0ZV87Ci0tICBwYjo6c3BvdGlmeTo6Qml0cmF0ZSBiaXRyYXRlXzsKLSsgIGNwYjo6c3Bv dGlmeTo6Qml0cmF0ZSBiaXRyYXRlXzsKLSAgIGJvb2wgdm9sdW1lX25vcm1hbGlzYXRpb25fOwot IH07Ci0gCi1kaWZmIC11ciBzcmMvaW50ZXJuZXQvc3BvdGlmeS9zcG90aWZ5c2V0dGluZ3NwYWdl LmNwcCBzcmMvaW50ZXJuZXQvc3BvdGlmeS9zcG90aWZ5c2V0dGluZ3NwYWdlLmNwcAotLS0tIGEv c3JjL2ludGVybmV0L3Nwb3RpZnkvc3BvdGlmeXNldHRpbmdzcGFnZS5jcHAJMjAyMC0wOS0yMyAy MjozNDowOC4wMDAwMDAwMDAgLTA0MDAKLSsrKyBiL3NyYy9pbnRlcm5ldC9zcG90aWZ5L3Nwb3Rp ZnlzZXR0aW5nc3BhZ2UuY3BwCTIwMjEtMDItMTkgMTI6MDM6NDguMjM4NDczMDQwIC0wNTAwCi1A QCAtNTksOSArNTksOSBAQAotICAgdWlfLT5sb2dpbl9zdGF0ZS0+QWRkQ3JlZGVudGlhbEZpZWxk KHVpXy0+cGFzc3dvcmQpOwotICAgdWlfLT5sb2dpbl9zdGF0ZS0+QWRkQ3JlZGVudGlhbEdyb3Vw KHVpXy0+YWNjb3VudF9ncm91cCk7Ci0gCi0tICB1aV8tPmJpdHJhdGUtPmFkZEl0ZW0oIjk2ICIg KyB0cigia2JwcyIpLCBwYjo6c3BvdGlmeTo6Qml0cmF0ZTk2ayk7Ci0tICB1aV8tPmJpdHJhdGUt PmFkZEl0ZW0oIjE2MCAiICsgdHIoImticHMiKSwgcGI6OnNwb3RpZnk6OkJpdHJhdGUxNjBrKTsK LS0gIHVpXy0+Yml0cmF0ZS0+YWRkSXRlbSgiMzIwICIgKyB0cigia2JwcyIpLCBwYjo6c3BvdGlm eTo6Qml0cmF0ZTMyMGspOwotKyAgdWlfLT5iaXRyYXRlLT5hZGRJdGVtKCI5NiAiICsgdHIoImti cHMiKSwgY3BiOjpzcG90aWZ5OjpCaXRyYXRlOTZrKTsKLSsgIHVpXy0+Yml0cmF0ZS0+YWRkSXRl bSgiMTYwICIgKyB0cigia2JwcyIpLCBjcGI6OnNwb3RpZnk6OkJpdHJhdGUxNjBrKTsKLSsgIHVp Xy0+Yml0cmF0ZS0+YWRkSXRlbSgiMzIwICIgKyB0cigia2JwcyIpLCBjcGI6OnNwb3RpZnk6OkJp dHJhdGUzMjBrKTsKLSAKLSAgIEJsb2JTdGF0ZUNoYW5nZWQoKTsKLSB9Ci1AQCAtMTA4LDcgKzEw OCw3IEBACi0gICB2YWxpZGF0ZWRfID0gZmFsc2U7Ci0gCi0gICB1aV8tPmJpdHJhdGUtPnNldEN1 cnJlbnRJbmRleCh1aV8tPmJpdHJhdGUtPmZpbmREYXRhKAotLSAgICAgIHMudmFsdWUoImJpdHJh dGUiLCBwYjo6c3BvdGlmeTo6Qml0cmF0ZTMyMGspLnRvSW50KCkpKTsKLSsgICAgICBzLnZhbHVl KCJiaXRyYXRlIiwgY3BiOjpzcG90aWZ5OjpCaXRyYXRlMzIwaykudG9JbnQoKSkpOwotICAgdWlf LT52b2x1bWVfbm9ybWFsaXNhdGlvbi0+c2V0Q2hlY2tlZCgKLSAgICAgICBzLnZhbHVlKCJ2b2x1 bWVfbm9ybWFsaXNhdGlvbiIsIGZhbHNlKS50b0Jvb2woKSk7Ci0gCi1kaWZmIC11ciBzcmMvbWFp bi5jcHAgc3JjL21haW4uY3BwCi0tLS0gYS9zcmMvbWFpbi5jcHAJMjAyMC0wOS0yMyAyMjozNDow OC4wMDAwMDAwMDAgLTA0MDAKLSsrKyBiL3NyYy9tYWluLmNwcAkyMDIxLTAyLTE5IDEyOjAzOjQ4 LjIzODQ3MzA0MCAtMDUwMAotQEAgLTE5MSw3ICsxOTEsNyBAQAotICAgICAgICIzMDRjNmY3NTZl Njc2NTJlNmQ3ODZkYmEwMTJhMjg0MTRjNDI1NTRkMjkyMDQ3NmY3NDYxNmUyMDUwNzI2ZjZhNjU2 MzciCi0gICAgICAgIjQyMDJkMjA0MTZkNjI2OTY1NmU3NDIwNGM2Zjc1NmU2NzY1MmU2ZDc4NmRj MDAxYzdhN2VmZDEwNGM4MDFiYWQ2ODVlNCIKLSAgICAgICAiMDRkMDAxZWVjYTMyIik7Ci0tICBw Yjo6dGFncmVhZGVyOjpNZXNzYWdlIG1lc3NhZ2U7Ci0rICBjcGI6OnRhZ3JlYWRlcjo6TWVzc2Fn ZSBtZXNzYWdlOwotICAgbWVzc2FnZS5QYXJzZUZyb21BcnJheShkYXRhLmNvbnN0RGF0YSgpLCBk YXRhLnNpemUoKSk7Ci0gfQotIAotZGlmZiAtdXIgc3JjL25ldHdvcmtyZW1vdGUvaW5jb21pbmdk YXRhcGFyc2VyLmNwcCBzcmMvbmV0d29ya3JlbW90ZS9pbmNvbWluZ2RhdGFwYXJzZXIuY3BwCi0t LS0gYS9zcmMvbmV0d29ya3JlbW90ZS9pbmNvbWluZ2RhdGFwYXJzZXIuY3BwCTIwMjAtMDktMjMg MjI6MzQ6MDguMDAwMDAwMDAwIC0wNDAwCi0rKysgYi9zcmMvbmV0d29ya3JlbW90ZS9pbmNvbWlu Z2RhdGFwYXJzZXIuY3BwCTIwMjEtMDItMTkgMTI6MDM6NDguMjM5NDczMDQzIC0wNTAwCi1AQCAt OTcsOTkgKzk3LDk5IEBACi0gCi0gYm9vbCBJbmNvbWluZ0RhdGFQYXJzZXI6OmNsb3NlX2Nvbm5l Y3Rpb24oKSB7IHJldHVybiBjbG9zZV9jb25uZWN0aW9uXzsgfQotIAotLXZvaWQgSW5jb21pbmdE YXRhUGFyc2VyOjpQYXJzZShjb25zdCBwYjo6cmVtb3RlOjpNZXNzYWdlJiBtc2cpIHsKLSt2b2lk IEluY29taW5nRGF0YVBhcnNlcjo6UGFyc2UoY29uc3QgY3BiOjpyZW1vdGU6Ok1lc3NhZ2UmIG1z ZykgewotICAgY2xvc2VfY29ubmVjdGlvbl8gPSBmYWxzZTsKLSAKLSAgIFJlbW90ZUNsaWVudCog Y2xpZW50ID0gcW9iamVjdF9jYXN0PFJlbW90ZUNsaWVudCo+KHNlbmRlcigpKTsKLSAKLSAgIC8v IE5vdyBjaGVjayB3aGF0J3MgdG8gZG8KLSAgIHN3aXRjaCAobXNnLnR5cGUoKSkgewotLSAgICBj YXNlIHBiOjpyZW1vdGU6OkNPTk5FQ1Q6Ci0rICAgIGNhc2UgY3BiOjpyZW1vdGU6OkNPTk5FQ1Q6 Ci0gICAgICAgQ2xpZW50Q29ubmVjdChtc2csIGNsaWVudCk7Ci0gICAgICAgYnJlYWs7Ci0tICAg IGNhc2UgcGI6OnJlbW90ZTo6RElTQ09OTkVDVDoKLSsgICAgY2FzZSBjcGI6OnJlbW90ZTo6RElT Q09OTkVDVDoKLSAgICAgICBjbG9zZV9jb25uZWN0aW9uXyA9IHRydWU7Ci0gICAgICAgYnJlYWs7 Ci0tICAgIGNhc2UgcGI6OnJlbW90ZTo6UkVRVUVTVF9QTEFZTElTVFM6Ci0rICAgIGNhc2UgY3Bi OjpyZW1vdGU6OlJFUVVFU1RfUExBWUxJU1RTOgotICAgICAgIFNlbmRQbGF5bGlzdHMobXNnKTsK LSAgICAgICBicmVhazsKLS0gICAgY2FzZSBwYjo6cmVtb3RlOjpSRVFVRVNUX1BMQVlMSVNUX1NP TkdTOgotKyAgICBjYXNlIGNwYjo6cmVtb3RlOjpSRVFVRVNUX1BMQVlMSVNUX1NPTkdTOgotICAg ICAgIEdldFBsYXlsaXN0U29uZ3MobXNnKTsKLSAgICAgICBicmVhazsKLS0gICAgY2FzZSBwYjo6 cmVtb3RlOjpTRVRfVk9MVU1FOgotKyAgICBjYXNlIGNwYjo6cmVtb3RlOjpTRVRfVk9MVU1FOgot ICAgICAgIGVtaXQgU2V0Vm9sdW1lKG1zZy5yZXF1ZXN0X3NldF92b2x1bWUoKS52b2x1bWUoKSk7 Ci0gICAgICAgYnJlYWs7Ci0tICAgIGNhc2UgcGI6OnJlbW90ZTo6UExBWToKLSsgICAgY2FzZSBj cGI6OnJlbW90ZTo6UExBWToKLSAgICAgICBlbWl0IFBsYXkoKTsKLSAgICAgICBicmVhazsKLS0g ICAgY2FzZSBwYjo6cmVtb3RlOjpQTEFZUEFVU0U6Ci0rICAgIGNhc2UgY3BiOjpyZW1vdGU6OlBM QVlQQVVTRToKLSAgICAgICBlbWl0IFBsYXlQYXVzZSgpOwotICAgICAgIGJyZWFrOwotLSAgICBj YXNlIHBiOjpyZW1vdGU6OlBBVVNFOgotKyAgICBjYXNlIGNwYjo6cmVtb3RlOjpQQVVTRToKLSAg ICAgICBlbWl0IFBhdXNlKCk7Ci0gICAgICAgYnJlYWs7Ci0tICAgIGNhc2UgcGI6OnJlbW90ZTo6 U1RPUDoKLSsgICAgY2FzZSBjcGI6OnJlbW90ZTo6U1RPUDoKLSAgICAgICBlbWl0IFN0b3AoKTsK LSAgICAgICBicmVhazsKLS0gICAgY2FzZSBwYjo6cmVtb3RlOjpTVE9QX0FGVEVSOgotKyAgICBj YXNlIGNwYjo6cmVtb3RlOjpTVE9QX0FGVEVSOgotICAgICAgIGVtaXQgU3RvcEFmdGVyQ3VycmVu dCgpOwotICAgICAgIGJyZWFrOwotLSAgICBjYXNlIHBiOjpyZW1vdGU6Ok5FWFQ6Ci0rICAgIGNh c2UgY3BiOjpyZW1vdGU6Ok5FWFQ6Ci0gICAgICAgZW1pdCBOZXh0KCk7Ci0gICAgICAgYnJlYWs7 Ci0tICAgIGNhc2UgcGI6OnJlbW90ZTo6UFJFVklPVVM6Ci0rICAgIGNhc2UgY3BiOjpyZW1vdGU6 OlBSRVZJT1VTOgotICAgICAgIGVtaXQgUHJldmlvdXMoKTsKLSAgICAgICBicmVhazsKLS0gICAg Y2FzZSBwYjo6cmVtb3RlOjpDSEFOR0VfU09ORzoKLSsgICAgY2FzZSBjcGI6OnJlbW90ZTo6Q0hB TkdFX1NPTkc6Ci0gICAgICAgQ2hhbmdlU29uZyhtc2cpOwotICAgICAgIGJyZWFrOwotLSAgICBj YXNlIHBiOjpyZW1vdGU6OlNIVUZGTEVfUExBWUxJU1Q6Ci0rICAgIGNhc2UgY3BiOjpyZW1vdGU6 OlNIVUZGTEVfUExBWUxJU1Q6Ci0gICAgICAgZW1pdCBTaHVmZmxlQ3VycmVudCgpOwotICAgICAg IGJyZWFrOwotLSAgICBjYXNlIHBiOjpyZW1vdGU6OlJFUEVBVDoKLSsgICAgY2FzZSBjcGI6OnJl bW90ZTo6UkVQRUFUOgotICAgICAgIFNldFJlcGVhdE1vZGUobXNnLnJlcGVhdCgpKTsKLSAgICAg ICBicmVhazsKLS0gICAgY2FzZSBwYjo6cmVtb3RlOjpTSFVGRkxFOgotKyAgICBjYXNlIGNwYjo6 cmVtb3RlOjpTSFVGRkxFOgotICAgICAgIFNldFNodWZmbGVNb2RlKG1zZy5zaHVmZmxlKCkpOwot ICAgICAgIGJyZWFrOwotLSAgICBjYXNlIHBiOjpyZW1vdGU6OlNFVF9UUkFDS19QT1NJVElPTjoK LSsgICAgY2FzZSBjcGI6OnJlbW90ZTo6U0VUX1RSQUNLX1BPU0lUSU9OOgotICAgICAgIGVtaXQg U2Vla1RvKG1zZy5yZXF1ZXN0X3NldF90cmFja19wb3NpdGlvbigpLnBvc2l0aW9uKCkpOwotICAg ICAgIGJyZWFrOwotLSAgICBjYXNlIHBiOjpyZW1vdGU6OklOU0VSVF9VUkxTOgotKyAgICBjYXNl IGNwYjo6cmVtb3RlOjpJTlNFUlRfVVJMUzoKLSAgICAgICBJbnNlcnRVcmxzKG1zZyk7Ci0gICAg ICAgYnJlYWs7Ci0tICAgIGNhc2UgcGI6OnJlbW90ZTo6UkVNT1ZFX1NPTkdTOgotKyAgICBjYXNl IGNwYjo6cmVtb3RlOjpSRU1PVkVfU09OR1M6Ci0gICAgICAgUmVtb3ZlU29uZ3MobXNnKTsKLSAg ICAgICBicmVhazsKLS0gICAgY2FzZSBwYjo6cmVtb3RlOjpPUEVOX1BMQVlMSVNUOgotKyAgICBj YXNlIGNwYjo6cmVtb3RlOjpPUEVOX1BMQVlMSVNUOgotICAgICAgIE9wZW5QbGF5bGlzdChtc2cp OwotICAgICAgIGJyZWFrOwotLSAgICBjYXNlIHBiOjpyZW1vdGU6OkNMT1NFX1BMQVlMSVNUOgot KyAgICBjYXNlIGNwYjo6cmVtb3RlOjpDTE9TRV9QTEFZTElTVDoKLSAgICAgICBDbG9zZVBsYXls aXN0KG1zZyk7Ci0gICAgICAgYnJlYWs7Ci0tICAgIGNhc2UgcGI6OnJlbW90ZTo6TE9WRToKLSsg ICAgY2FzZSBjcGI6OnJlbW90ZTo6TE9WRToKLSAgICAgICBlbWl0IExvdmUoKTsKLSAgICAgICBi cmVhazsKLS0gICAgY2FzZSBwYjo6cmVtb3RlOjpCQU46Ci0rICAgIGNhc2UgY3BiOjpyZW1vdGU6 OkJBTjoKLSAgICAgICBlbWl0IEJhbigpOwotICAgICAgIGJyZWFrOwotLSAgICBjYXNlIHBiOjpy ZW1vdGU6OkdFVF9MWVJJQ1M6Ci0rICAgIGNhc2UgY3BiOjpyZW1vdGU6OkdFVF9MWVJJQ1M6Ci0g ICAgICAgZW1pdCBHZXRMeXJpY3MoKTsKLSAgICAgICBicmVhazsKLS0gICAgY2FzZSBwYjo6cmVt b3RlOjpET1dOTE9BRF9TT05HUzoKLSsgICAgY2FzZSBjcGI6OnJlbW90ZTo6RE9XTkxPQURfU09O R1M6Ci0gICAgICAgY2xpZW50LT5zb25nX3NlbmRlcigpLT5TZW5kU29uZ3MobXNnLnJlcXVlc3Rf ZG93bmxvYWRfc29uZ3MoKSk7Ci0gICAgICAgYnJlYWs7Ci0tICAgIGNhc2UgcGI6OnJlbW90ZTo6 U09OR19PRkZFUl9SRVNQT05TRToKLSsgICAgY2FzZSBjcGI6OnJlbW90ZTo6U09OR19PRkZFUl9S RVNQT05TRToKLSAgICAgICBjbGllbnQtPnNvbmdfc2VuZGVyKCktPlJlc3BvbnNlU29uZ09mZmVy KAotICAgICAgICAgICBtc2cucmVzcG9uc2Vfc29uZ19vZmZlcigpLmFjY2VwdGVkKCkpOwotICAg ICAgIGJyZWFrOwotLSAgICBjYXNlIHBiOjpyZW1vdGU6OkdFVF9MSUJSQVJZOgotKyAgICBjYXNl IGNwYjo6cmVtb3RlOjpHRVRfTElCUkFSWToKLSAgICAgICBlbWl0IFNlbmRMaWJyYXJ5KGNsaWVu dCk7Ci0gICAgICAgYnJlYWs7Ci0tICAgIGNhc2UgcGI6OnJlbW90ZTo6UkFURV9TT05HOgotKyAg ICBjYXNlIGNwYjo6cmVtb3RlOjpSQVRFX1NPTkc6Ci0gICAgICAgUmF0ZVNvbmcobXNnKTsKLSAg ICAgICBicmVhazsKLS0gICAgY2FzZSBwYjo6cmVtb3RlOjpHTE9CQUxfU0VBUkNIOgotKyAgICBj YXNlIGNwYjo6cmVtb3RlOjpHTE9CQUxfU0VBUkNIOgotICAgICAgIEdsb2JhbFNlYXJjaChjbGll bnQsIG1zZyk7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGRlZmF1bHQ6Ci1AQCAtMTk3LDEzICsxOTcs MTMgQEAKLSAgIH0KLSB9Ci0gCi0tdm9pZCBJbmNvbWluZ0RhdGFQYXJzZXI6OkdldFBsYXlsaXN0 U29uZ3MoY29uc3QgcGI6OnJlbW90ZTo6TWVzc2FnZSYgbXNnKSB7Ci0rdm9pZCBJbmNvbWluZ0Rh dGFQYXJzZXI6OkdldFBsYXlsaXN0U29uZ3MoY29uc3QgY3BiOjpyZW1vdGU6Ok1lc3NhZ2UmIG1z ZykgewotICAgZW1pdCBTZW5kUGxheWxpc3RTb25ncyhtc2cucmVxdWVzdF9wbGF5bGlzdF9zb25n cygpLmlkKCkpOwotIH0KLSAKLS12b2lkIEluY29taW5nRGF0YVBhcnNlcjo6Q2hhbmdlU29uZyhj b25zdCBwYjo6cmVtb3RlOjpNZXNzYWdlJiBtc2cpIHsKLSt2b2lkIEluY29taW5nRGF0YVBhcnNl cjo6Q2hhbmdlU29uZyhjb25zdCBjcGI6OnJlbW90ZTo6TWVzc2FnZSYgbXNnKSB7Ci0gICAvLyBH ZXQgdGhlIGZpcnN0IGVudHJ5IGFuZCBjaGVjayBpZiB0aGVyZSBpcyBhIHNvbmcKLS0gIGNvbnN0 IHBiOjpyZW1vdGU6OlJlcXVlc3RDaGFuZ2VTb25nJiByZXF1ZXN0ID0gbXNnLnJlcXVlc3RfY2hh bmdlX3NvbmcoKTsKLSsgIGNvbnN0IGNwYjo6cmVtb3RlOjpSZXF1ZXN0Q2hhbmdlU29uZyYgcmVx dWVzdCA9IG1zZy5yZXF1ZXN0X2NoYW5nZV9zb25nKCk7Ci0gCi0gICAvLyBDaGVjayBpZiB3ZSBu ZWVkIHRvIGNoYW5nZSB0aGUgcGxheWxpc3QKLSAgIGlmIChyZXF1ZXN0LnBsYXlsaXN0X2lkKCkg IT0gYXBwXy0+cGxheWxpc3RfbWFuYWdlcigpLT5hY3RpdmVfaWQoKSkgewotQEAgLTIyNywxOCAr MjI3LDE4IEBACi0gICB9Ci0gfQotIAotLXZvaWQgSW5jb21pbmdEYXRhUGFyc2VyOjpTZXRSZXBl YXRNb2RlKGNvbnN0IHBiOjpyZW1vdGU6OlJlcGVhdCYgcmVwZWF0KSB7Ci0rdm9pZCBJbmNvbWlu Z0RhdGFQYXJzZXI6OlNldFJlcGVhdE1vZGUoY29uc3QgY3BiOjpyZW1vdGU6OlJlcGVhdCYgcmVw ZWF0KSB7Ci0gICBzd2l0Y2ggKHJlcGVhdC5yZXBlYXRfbW9kZSgpKSB7Ci0tICAgIGNhc2UgcGI6 OnJlbW90ZTo6UmVwZWF0X09mZjoKLSsgICAgY2FzZSBjcGI6OnJlbW90ZTo6UmVwZWF0X09mZjoK LSAgICAgICBlbWl0IFNldFJlcGVhdE1vZGUoUGxheWxpc3RTZXF1ZW5jZTo6UmVwZWF0X09mZik7 Ci0gICAgICAgYnJlYWs7Ci0tICAgIGNhc2UgcGI6OnJlbW90ZTo6UmVwZWF0X1RyYWNrOgotKyAg ICBjYXNlIGNwYjo6cmVtb3RlOjpSZXBlYXRfVHJhY2s6Ci0gICAgICAgZW1pdCBTZXRSZXBlYXRN b2RlKFBsYXlsaXN0U2VxdWVuY2U6OlJlcGVhdF9UcmFjayk7Ci0gICAgICAgYnJlYWs7Ci0tICAg IGNhc2UgcGI6OnJlbW90ZTo6UmVwZWF0X0FsYnVtOgotKyAgICBjYXNlIGNwYjo6cmVtb3RlOjpS ZXBlYXRfQWxidW06Ci0gICAgICAgZW1pdCBTZXRSZXBlYXRNb2RlKFBsYXlsaXN0U2VxdWVuY2U6 OlJlcGVhdF9BbGJ1bSk7Ci0gICAgICAgYnJlYWs7Ci0tICAgIGNhc2UgcGI6OnJlbW90ZTo6UmVw ZWF0X1BsYXlsaXN0OgotKyAgICBjYXNlIGNwYjo6cmVtb3RlOjpSZXBlYXRfUGxheWxpc3Q6Ci0g ICAgICAgZW1pdCBTZXRSZXBlYXRNb2RlKFBsYXlsaXN0U2VxdWVuY2U6OlJlcGVhdF9QbGF5bGlz dCk7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGRlZmF1bHQ6Ci1AQCAtMjQ2LDE4ICsyNDYsMTggQEAK LSAgIH0KLSB9Ci0gCi0tdm9pZCBJbmNvbWluZ0RhdGFQYXJzZXI6OlNldFNodWZmbGVNb2RlKGNv bnN0IHBiOjpyZW1vdGU6OlNodWZmbGUmIHNodWZmbGUpIHsKLSt2b2lkIEluY29taW5nRGF0YVBh cnNlcjo6U2V0U2h1ZmZsZU1vZGUoY29uc3QgY3BiOjpyZW1vdGU6OlNodWZmbGUmIHNodWZmbGUp IHsKLSAgIHN3aXRjaCAoc2h1ZmZsZS5zaHVmZmxlX21vZGUoKSkgewotLSAgICBjYXNlIHBiOjpy ZW1vdGU6OlNodWZmbGVfT2ZmOgotKyAgICBjYXNlIGNwYjo6cmVtb3RlOjpTaHVmZmxlX09mZjoK LSAgICAgICBlbWl0IFNldFNodWZmbGVNb2RlKFBsYXlsaXN0U2VxdWVuY2U6OlNodWZmbGVfT2Zm KTsKLSAgICAgICBicmVhazsKLS0gICAgY2FzZSBwYjo6cmVtb3RlOjpTaHVmZmxlX0FsbDoKLSsg ICAgY2FzZSBjcGI6OnJlbW90ZTo6U2h1ZmZsZV9BbGw6Ci0gICAgICAgZW1pdCBTZXRTaHVmZmxl TW9kZShQbGF5bGlzdFNlcXVlbmNlOjpTaHVmZmxlX0FsbCk7Ci0gICAgICAgYnJlYWs7Ci0tICAg IGNhc2UgcGI6OnJlbW90ZTo6U2h1ZmZsZV9JbnNpZGVBbGJ1bToKLSsgICAgY2FzZSBjcGI6OnJl bW90ZTo6U2h1ZmZsZV9JbnNpZGVBbGJ1bToKLSAgICAgICBlbWl0IFNldFNodWZmbGVNb2RlKFBs YXlsaXN0U2VxdWVuY2U6OlNodWZmbGVfSW5zaWRlQWxidW0pOwotICAgICAgIGJyZWFrOwotLSAg ICBjYXNlIHBiOjpyZW1vdGU6OlNodWZmbGVfQWxidW1zOgotKyAgICBjYXNlIGNwYjo6cmVtb3Rl OjpTaHVmZmxlX0FsYnVtczoKLSAgICAgICBlbWl0IFNldFNodWZmbGVNb2RlKFBsYXlsaXN0U2Vx dWVuY2U6OlNodWZmbGVfQWxidW1zKTsKLSAgICAgICBicmVhazsKLSAgICAgZGVmYXVsdDoKLUBA IC0yNjUsOCArMjY1LDggQEAKLSAgIH0KLSB9Ci0gCi0tdm9pZCBJbmNvbWluZ0RhdGFQYXJzZXI6 Okluc2VydFVybHMoY29uc3QgcGI6OnJlbW90ZTo6TWVzc2FnZSYgbXNnKSB7Ci0tICBjb25zdCBw Yjo6cmVtb3RlOjpSZXF1ZXN0SW5zZXJ0VXJscyYgcmVxdWVzdCA9IG1zZy5yZXF1ZXN0X2luc2Vy dF91cmxzKCk7Ci0rdm9pZCBJbmNvbWluZ0RhdGFQYXJzZXI6Okluc2VydFVybHMoY29uc3QgY3Bi OjpyZW1vdGU6Ok1lc3NhZ2UmIG1zZykgewotKyAgY29uc3QgY3BiOjpyZW1vdGU6OlJlcXVlc3RJ bnNlcnRVcmxzJiByZXF1ZXN0ID0gbXNnLnJlcXVlc3RfaW5zZXJ0X3VybHMoKTsKLSAKLSAgIC8v IEluc2VydCBwbGFpbiB1cmxzIHdpdGhvdXQgbWV0YWRhdGEKLSAgIGlmICghcmVxdWVzdC51cmxz KCkuZW1wdHkoKSkgewotQEAgLTI5Miw4ICsyOTIsOCBAQAotICAgfQotIH0KLSAKLS12b2lkIElu Y29taW5nRGF0YVBhcnNlcjo6UmVtb3ZlU29uZ3MoY29uc3QgcGI6OnJlbW90ZTo6TWVzc2FnZSYg bXNnKSB7Ci0tICBjb25zdCBwYjo6cmVtb3RlOjpSZXF1ZXN0UmVtb3ZlU29uZ3MmIHJlcXVlc3Qg PSBtc2cucmVxdWVzdF9yZW1vdmVfc29uZ3MoKTsKLSt2b2lkIEluY29taW5nRGF0YVBhcnNlcjo6 UmVtb3ZlU29uZ3MoY29uc3QgY3BiOjpyZW1vdGU6Ok1lc3NhZ2UmIG1zZykgewotKyAgY29uc3Qg Y3BiOjpyZW1vdGU6OlJlcXVlc3RSZW1vdmVTb25ncyYgcmVxdWVzdCA9IG1zZy5yZXF1ZXN0X3Jl bW92ZV9zb25ncygpOwotIAotICAgLy8gRXh0cmFjdCB1cmxzCi0gICBRTGlzdDxpbnQ+IHNvbmdz OwotQEAgLTMwNSw3ICszMDUsNyBAQAotICAgZW1pdCBSZW1vdmVTb25ncyhyZXF1ZXN0LnBsYXls aXN0X2lkKCksIHNvbmdzKTsKLSB9Ci0gCi0tdm9pZCBJbmNvbWluZ0RhdGFQYXJzZXI6OkNsaWVu dENvbm5lY3QoY29uc3QgcGI6OnJlbW90ZTo6TWVzc2FnZSYgbXNnLAotK3ZvaWQgSW5jb21pbmdE YXRhUGFyc2VyOjpDbGllbnRDb25uZWN0KGNvbnN0IGNwYjo6cmVtb3RlOjpNZXNzYWdlJiBtc2cs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3RlQ2xpZW50KiBj bGllbnQpIHsKLSAgIC8vIEFsd2F5cyBzbmVkIHRoZSBDbGVtZW50aW5lIGluZm9zCi0gICBlbWl0 IFNlbmRDbGVtZW50aW5lSW5mbygpOwotQEAgLTMyMSw3ICszMjEsNyBAQAotICAgfQotIH0KLSAK LS12b2lkIEluY29taW5nRGF0YVBhcnNlcjo6U2VuZFBsYXlsaXN0cyhjb25zdCBwYjo6cmVtb3Rl OjpNZXNzYWdlJiBtc2cpIHsKLSt2b2lkIEluY29taW5nRGF0YVBhcnNlcjo6U2VuZFBsYXlsaXN0 cyhjb25zdCBjcGI6OnJlbW90ZTo6TWVzc2FnZSYgbXNnKSB7Ci0gICBpZiAoIW1zZy5oYXNfcmVx dWVzdF9wbGF5bGlzdHMoKSB8fAotICAgICAgICFtc2cucmVxdWVzdF9wbGF5bGlzdHMoKS5pbmNs dWRlX2Nsb3NlZCgpKSB7Ci0gICAgIGVtaXQgU2VuZEFsbEFjdGl2ZVBsYXlsaXN0cygpOwotQEAg LTMzMCwyNyArMzMwLDI3IEBACi0gICB9Ci0gfQotIAotLXZvaWQgSW5jb21pbmdEYXRhUGFyc2Vy OjpPcGVuUGxheWxpc3QoY29uc3QgcGI6OnJlbW90ZTo6TWVzc2FnZSYgbXNnKSB7Ci0rdm9pZCBJ bmNvbWluZ0RhdGFQYXJzZXI6Ok9wZW5QbGF5bGlzdChjb25zdCBjcGI6OnJlbW90ZTo6TWVzc2Fn ZSYgbXNnKSB7Ci0gICBlbWl0IE9wZW4obXNnLnJlcXVlc3Rfb3Blbl9wbGF5bGlzdCgpLnBsYXls aXN0X2lkKCkpOwotIH0KLSAKLS12b2lkIEluY29taW5nRGF0YVBhcnNlcjo6Q2xvc2VQbGF5bGlz dChjb25zdCBwYjo6cmVtb3RlOjpNZXNzYWdlJiBtc2cpIHsKLSt2b2lkIEluY29taW5nRGF0YVBh cnNlcjo6Q2xvc2VQbGF5bGlzdChjb25zdCBjcGI6OnJlbW90ZTo6TWVzc2FnZSYgbXNnKSB7Ci0g ICBlbWl0IENsb3NlKG1zZy5yZXF1ZXN0X2Nsb3NlX3BsYXlsaXN0KCkucGxheWxpc3RfaWQoKSk7 Ci0gfQotIAotLXZvaWQgSW5jb21pbmdEYXRhUGFyc2VyOjpSYXRlU29uZyhjb25zdCBwYjo6cmVt b3RlOjpNZXNzYWdlJiBtc2cpIHsKLSt2b2lkIEluY29taW5nRGF0YVBhcnNlcjo6UmF0ZVNvbmco Y29uc3QgY3BiOjpyZW1vdGU6Ok1lc3NhZ2UmIG1zZykgewotICAgZG91YmxlIHJhdGluZyA9IChk b3VibGUpbXNnLnJlcXVlc3RfcmF0ZV9zb25nKCkucmF0aW5nKCk7Ci0gICBlbWl0IFJhdGVDdXJy ZW50U29uZyhyYXRpbmcpOwotIH0KLSAKLSB2b2lkIEluY29taW5nRGF0YVBhcnNlcjo6R2xvYmFs U2VhcmNoKFJlbW90ZUNsaWVudCogY2xpZW50LAotLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgcGI6OnJlbW90ZTo6TWVzc2FnZSYgbXNnKSB7Ci0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjcGI6OnJlbW90ZTo6TWVzc2FnZSYg bXNnKSB7Ci0gICBlbWl0IERvR2xvYmFsU2VhcmNoKFFTdHJpbmdGcm9tU3RkU3RyaW5nKG1zZy5y ZXF1ZXN0X2dsb2JhbF9zZWFyY2goKS5xdWVyeSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAg Y2xpZW50KTsKLSB9Ci0gCi0gU29uZyBJbmNvbWluZ0RhdGFQYXJzZXI6OkNyZWF0ZVNvbmdGcm9t UHJvdG9idWYoCi0tICAgIGNvbnN0IHBiOjpyZW1vdGU6OlNvbmdNZXRhZGF0YSYgcGIpIHsKLSsg ICAgY29uc3QgY3BiOjpyZW1vdGU6OlNvbmdNZXRhZGF0YSYgcGIpIHsKLSAgIFNvbmcgc29uZzsK LSAgIHNvbmcuSW5pdChRU3RyaW5nRnJvbVN0ZFN0cmluZyhwYi50aXRsZSgpKSwgUVN0cmluZ0Zy b21TdGRTdHJpbmcocGIuYXJ0aXN0KCkpLAotICAgICAgICAgICAgIFFTdHJpbmdGcm9tU3RkU3Ry aW5nKHBiLmFsYnVtKCkpLCBwYi5sZW5ndGgoKSAqIGtOc2VjUGVyU2VjKTsKLWRpZmYgLXVyIHNy Yy9uZXR3b3JrcmVtb3RlL2luY29taW5nZGF0YXBhcnNlci5oIHNyYy9uZXR3b3JrcmVtb3RlL2lu Y29taW5nZGF0YXBhcnNlci5oCi0tLS0gYS9zcmMvbmV0d29ya3JlbW90ZS9pbmNvbWluZ2RhdGFw YXJzZXIuaAkyMDIwLTA5LTIzIDIyOjM0OjA4LjAwMDAwMDAwMCAtMDQwMAotKysrIGIvc3JjL25l dHdvcmtyZW1vdGUvaW5jb21pbmdkYXRhcGFyc2VyLmgJMjAyMS0wMi0xOSAxMjowMzo0OC4yMzk0 NzMwNDMgLTA1MDAKLUBAIC0xNiw3ICsxNiw3IEBACi0gICBib29sIGNsb3NlX2Nvbm5lY3Rpb24o KTsKLSAKLSAgcHVibGljIHNsb3RzOgotLSAgdm9pZCBQYXJzZShjb25zdCBwYjo6cmVtb3RlOjpN ZXNzYWdlJiBtc2cpOwotKyAgdm9pZCBQYXJzZShjb25zdCBjcGI6OnJlbW90ZTo6TWVzc2FnZSYg bXNnKTsKLSAgIHZvaWQgUmVsb2FkU2V0dGluZ3MoKTsKLSAKLSAgc2lnbmFsczoKLUBAIC02MSwy MCArNjEsMjAgQEAKLSAgIGJvb2wgY2xvc2VfY29ubmVjdGlvbl87Ci0gICBNYWluV2luZG93OjpQ bGF5bGlzdEFkZEJlaGF2aW91ciBkb3VibGVjbGlja19wbGF5bGlzdF9hZGRtb2RlXzsKLSAKLS0g IHZvaWQgR2V0UGxheWxpc3RTb25ncyhjb25zdCBwYjo6cmVtb3RlOjpNZXNzYWdlJiBtc2cpOwot LSAgdm9pZCBDaGFuZ2VTb25nKGNvbnN0IHBiOjpyZW1vdGU6Ok1lc3NhZ2UmIG1zZyk7Ci0tICB2 b2lkIFNldFJlcGVhdE1vZGUoY29uc3QgcGI6OnJlbW90ZTo6UmVwZWF0JiByZXBlYXQpOwotLSAg dm9pZCBTZXRTaHVmZmxlTW9kZShjb25zdCBwYjo6cmVtb3RlOjpTaHVmZmxlJiBzaHVmZmxlKTsK LS0gIHZvaWQgSW5zZXJ0VXJscyhjb25zdCBwYjo6cmVtb3RlOjpNZXNzYWdlJiBtc2cpOwotLSAg dm9pZCBSZW1vdmVTb25ncyhjb25zdCBwYjo6cmVtb3RlOjpNZXNzYWdlJiBtc2cpOwotLSAgdm9p ZCBDbGllbnRDb25uZWN0KGNvbnN0IHBiOjpyZW1vdGU6Ok1lc3NhZ2UmIG1zZywgUmVtb3RlQ2xp ZW50KiBjbGllbnQpOwotLSAgdm9pZCBTZW5kUGxheWxpc3RzKGNvbnN0IHBiOjpyZW1vdGU6Ok1l c3NhZ2UmIG1zZyk7Ci0tICB2b2lkIE9wZW5QbGF5bGlzdChjb25zdCBwYjo6cmVtb3RlOjpNZXNz YWdlJiBtc2cpOwotLSAgdm9pZCBDbG9zZVBsYXlsaXN0KGNvbnN0IHBiOjpyZW1vdGU6Ok1lc3Nh Z2UmIG1zZyk7Ci0tICB2b2lkIFJhdGVTb25nKGNvbnN0IHBiOjpyZW1vdGU6Ok1lc3NhZ2UmIG1z Zyk7Ci0tICB2b2lkIEdsb2JhbFNlYXJjaChSZW1vdGVDbGllbnQqIGNsaWVudCwgY29uc3QgcGI6 OnJlbW90ZTo6TWVzc2FnZSYgbXNnKTsKLSsgIHZvaWQgR2V0UGxheWxpc3RTb25ncyhjb25zdCBj cGI6OnJlbW90ZTo6TWVzc2FnZSYgbXNnKTsKLSsgIHZvaWQgQ2hhbmdlU29uZyhjb25zdCBjcGI6 OnJlbW90ZTo6TWVzc2FnZSYgbXNnKTsKLSsgIHZvaWQgU2V0UmVwZWF0TW9kZShjb25zdCBjcGI6 OnJlbW90ZTo6UmVwZWF0JiByZXBlYXQpOwotKyAgdm9pZCBTZXRTaHVmZmxlTW9kZShjb25zdCBj cGI6OnJlbW90ZTo6U2h1ZmZsZSYgc2h1ZmZsZSk7Ci0rICB2b2lkIEluc2VydFVybHMoY29uc3Qg Y3BiOjpyZW1vdGU6Ok1lc3NhZ2UmIG1zZyk7Ci0rICB2b2lkIFJlbW92ZVNvbmdzKGNvbnN0IGNw Yjo6cmVtb3RlOjpNZXNzYWdlJiBtc2cpOwotKyAgdm9pZCBDbGllbnRDb25uZWN0KGNvbnN0IGNw Yjo6cmVtb3RlOjpNZXNzYWdlJiBtc2csIFJlbW90ZUNsaWVudCogY2xpZW50KTsKLSsgIHZvaWQg U2VuZFBsYXlsaXN0cyhjb25zdCBjcGI6OnJlbW90ZTo6TWVzc2FnZSYgbXNnKTsKLSsgIHZvaWQg T3BlblBsYXlsaXN0KGNvbnN0IGNwYjo6cmVtb3RlOjpNZXNzYWdlJiBtc2cpOwotKyAgdm9pZCBD bG9zZVBsYXlsaXN0KGNvbnN0IGNwYjo6cmVtb3RlOjpNZXNzYWdlJiBtc2cpOwotKyAgdm9pZCBS YXRlU29uZyhjb25zdCBjcGI6OnJlbW90ZTo6TWVzc2FnZSYgbXNnKTsKLSsgIHZvaWQgR2xvYmFs U2VhcmNoKFJlbW90ZUNsaWVudCogY2xpZW50LCBjb25zdCBjcGI6OnJlbW90ZTo6TWVzc2FnZSYg bXNnKTsKLSAKLS0gIFNvbmcgQ3JlYXRlU29uZ0Zyb21Qcm90b2J1Zihjb25zdCBwYjo6cmVtb3Rl OjpTb25nTWV0YWRhdGEmIHBiKTsKLSsgIFNvbmcgQ3JlYXRlU29uZ0Zyb21Qcm90b2J1Zihjb25z dCBjcGI6OnJlbW90ZTo6U29uZ01ldGFkYXRhJiBwYik7Ci0gfTsKLSAKLSAjZW5kaWYgIC8vIElO Q09NSU5HREFUQVBBUlNFUl9ICi1kaWZmIC11ciBzcmMvbmV0d29ya3JlbW90ZS9uZXR3b3JrcmVt b3RlLmNwcCBzcmMvbmV0d29ya3JlbW90ZS9uZXR3b3JrcmVtb3RlLmNwcAotLS0tIGEvc3JjL25l dHdvcmtyZW1vdGUvbmV0d29ya3JlbW90ZS5jcHAJMjAyMC0wOS0yMyAyMjozNDowOC4wMDAwMDAw MDAgLTA0MDAKLSsrKyBiL3NyYy9uZXR3b3JrcmVtb3RlL25ldHdvcmtyZW1vdGUuY3BwCTIwMjEt MDItMTkgMTI6MDM6NDguMjM5NDczMDQzIC0wNTAwCi1AQCAtMjE0LDggKzIxNCw4IEBACi0gICAg IGNsaWVudHNfLnB1c2hfYmFjayhjbGllbnQpOwotIAotICAgICAvLyBDb25uZWN0IHRoZSBzaWdu YWwgdG8gcGFyc2UgZGF0YQotLSAgICBjb25uZWN0KGNsaWVudCwgU0lHTkFMKFBhcnNlKHBiOjpy ZW1vdGU6Ok1lc3NhZ2UpKSwKLS0gICAgICAgICAgICBpbmNvbWluZ19kYXRhX3BhcnNlcl8uZ2V0 KCksIFNMT1QoUGFyc2UocGI6OnJlbW90ZTo6TWVzc2FnZSkpKTsKLSsgICAgY29ubmVjdChjbGll bnQsIFNJR05BTChQYXJzZShjcGI6OnJlbW90ZTo6TWVzc2FnZSkpLAotKyAgICAgICAgICAgIGlu Y29taW5nX2RhdGFfcGFyc2VyXy5nZXQoKSwgU0xPVChQYXJzZShjcGI6OnJlbW90ZTo6TWVzc2Fn ZSkpKTsKLSAgIH0KLSB9Ci0gCi1kaWZmIC11ciBzcmMvbmV0d29ya3JlbW90ZS9vdXRnb2luZ2Rh dGFjcmVhdG9yLmNwcCBzcmMvbmV0d29ya3JlbW90ZS9vdXRnb2luZ2RhdGFjcmVhdG9yLmNwcAot LS0tIGEvc3JjL25ldHdvcmtyZW1vdGUvb3V0Z29pbmdkYXRhY3JlYXRvci5jcHAJMjAyMC0wOS0y MyAyMjozNDowOC4wMDAwMDAwMDAgLTA0MDAKLSsrKyBiL3NyYy9uZXR3b3JrcmVtb3RlL291dGdv aW5nZGF0YWNyZWF0b3IuY3BwCTIwMjEtMDItMTkgMTI6MDM6NDguMjM5NDczMDQzIC0wNTAwCi1A QCAtMTQ0LDcgKzE0NCw3IEBACi0gICByZXR1cm4gbnVsbHB0cjsKLSB9Ci0gCi0tdm9pZCBPdXRn b2luZ0RhdGFDcmVhdG9yOjpTZW5kRGF0YVRvQ2xpZW50cyhwYjo6cmVtb3RlOjpNZXNzYWdlKiBt c2cpIHsKLSt2b2lkIE91dGdvaW5nRGF0YUNyZWF0b3I6OlNlbmREYXRhVG9DbGllbnRzKGNwYjo6 cmVtb3RlOjpNZXNzYWdlKiBtc2cpIHsKLSAgIC8vIENoZWNrIGlmIHdlIGhhdmUgY2xpZW50cyB0 byBzZW5kIGRhdGEgdG8KLSAgIGlmIChjbGllbnRzXy0+ZW1wdHkoKSkgewotICAgICByZXR1cm47 Ci1AQCAtMTcyLDExICsxNzIsMTEgQEAKLSAKLSB2b2lkIE91dGdvaW5nRGF0YUNyZWF0b3I6OlNl bmRDbGVtZW50aW5lSW5mbygpIHsKLSAgIC8vIENyZWF0ZSB0aGUgZ2VuZXJhbCBtZXNzYWdlIGFu ZCBzZXQgdGhlIG1lc3NhZ2UgdHlwZQotLSAgcGI6OnJlbW90ZTo6TWVzc2FnZSBtc2c7Ci0tICBt c2cuc2V0X3R5cGUocGI6OnJlbW90ZTo6SU5GTyk7Ci0rICBjcGI6OnJlbW90ZTo6TWVzc2FnZSBt c2c7Ci0rICBtc2cuc2V0X3R5cGUoY3BiOjpyZW1vdGU6OklORk8pOwotIAotICAgLy8gTm93IGFk ZCB0aGUgbWVzc2FnZSBzcGVjaWZpYyBkYXRhCi0tICBwYjo6cmVtb3RlOjpSZXNwb25zZUNsZW1l bnRpbmVJbmZvKiBpbmZvID0KLSsgIGNwYjo6cmVtb3RlOjpSZXNwb25zZUNsZW1lbnRpbmVJbmZv KiBpbmZvID0KLSAgICAgICBtc2cubXV0YWJsZV9yZXNwb25zZV9jbGVtZW50aW5lX2luZm8oKTsK LSAgIFNldEVuZ2luZVN0YXRlKGluZm8pOwotIAotQEAgLTE4OCwyMCArMTg4LDIwIEBACi0gfQot IAotIHZvaWQgT3V0Z29pbmdEYXRhQ3JlYXRvcjo6U2V0RW5naW5lU3RhdGUoCi0tICAgIHBiOjpy ZW1vdGU6OlJlc3BvbnNlQ2xlbWVudGluZUluZm8qIG1zZykgewotKyAgICBjcGI6OnJlbW90ZTo6 UmVzcG9uc2VDbGVtZW50aW5lSW5mbyogbXNnKSB7Ci0gICBzd2l0Y2ggKGFwcF8tPnBsYXllcigp LT5HZXRTdGF0ZSgpKSB7Ci0gICAgIGNhc2UgRW5naW5lOjpJZGxlOgotLSAgICAgIG1zZy0+c2V0 X3N0YXRlKHBiOjpyZW1vdGU6OklkbGUpOwotKyAgICAgIG1zZy0+c2V0X3N0YXRlKGNwYjo6cmVt b3RlOjpJZGxlKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBFbmdpbmU6OkVycm9yOgotICAg ICBjYXNlIEVuZ2luZTo6RW1wdHk6Ci0tICAgICAgbXNnLT5zZXRfc3RhdGUocGI6OnJlbW90ZTo6 RW1wdHkpOwotKyAgICAgIG1zZy0+c2V0X3N0YXRlKGNwYjo6cmVtb3RlOjpFbXB0eSk7Ci0gICAg ICAgYnJlYWs7Ci0gICAgIGNhc2UgRW5naW5lOjpQbGF5aW5nOgotLSAgICAgIG1zZy0+c2V0X3N0 YXRlKHBiOjpyZW1vdGU6OlBsYXlpbmcpOwotKyAgICAgIG1zZy0+c2V0X3N0YXRlKGNwYjo6cmVt b3RlOjpQbGF5aW5nKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBFbmdpbmU6OlBhdXNlZDoK LS0gICAgICBtc2ctPnNldF9zdGF0ZShwYjo6cmVtb3RlOjpQYXVzZWQpOwotKyAgICAgIG1zZy0+ c2V0X3N0YXRlKGNwYjo6cmVtb3RlOjpQYXVzZWQpOwotICAgICAgIGJyZWFrOwotICAgfQotIH0K LUBAIC0yMTIsMTAgKzIxMiwxMCBAQAotICAgaW50IGFjdGl2ZV9wbGF5bGlzdCA9IGFwcF8tPnBs YXlsaXN0X21hbmFnZXIoKS0+YWN0aXZlX2lkKCk7Ci0gCi0gICAvLyBDcmVhdGUgbWVzc2FnZQot LSAgcGI6OnJlbW90ZTo6TWVzc2FnZSBtc2c7Ci0tICBtc2cuc2V0X3R5cGUocGI6OnJlbW90ZTo6 UExBWUxJU1RTKTsKLSsgIGNwYjo6cmVtb3RlOjpNZXNzYWdlIG1zZzsKLSsgIG1zZy5zZXRfdHlw ZShjcGI6OnJlbW90ZTo6UExBWUxJU1RTKTsKLSAKLS0gIHBiOjpyZW1vdGU6OlJlc3BvbnNlUGxh eWxpc3RzKiBwbGF5bGlzdHMgPSBtc2cubXV0YWJsZV9yZXNwb25zZV9wbGF5bGlzdHMoKTsKLSsg IGNwYjo6cmVtb3RlOjpSZXNwb25zZVBsYXlsaXN0cyogcGxheWxpc3RzID0gbXNnLm11dGFibGVf cmVzcG9uc2VfcGxheWxpc3RzKCk7Ci0gCi0gICAvLyBHZXQgYWxsIHBsYXlsaXN0cywgZXZlbiBv bmVzIHRoYXQgYXJlIGhpZGRlbiBpbiB0aGUgVUkuCi0gICBmb3IgKGNvbnN0IFBsYXlsaXN0QmFj a2VuZDo6UGxheWxpc3QmIHAgOgotQEAgLTIyNCw3ICsyMjQsNyBAQAotICAgICBpbnQgaXRlbV9j b3VudCA9IHBsYXlsaXN0X29wZW4gPyBhcHBfcGxheWxpc3RzLmF0KHAuaWQpLT5yb3dDb3VudCgp IDogMDsKLSAKLSAgICAgLy8gQ3JlYXRlIGEgbmV3IHBsYXlsaXN0Ci0tICAgIHBiOjpyZW1vdGU6 OlBsYXlsaXN0KiBwbGF5bGlzdCA9IHBsYXlsaXN0cy0+YWRkX3BsYXlsaXN0KCk7Ci0rICAgIGNw Yjo6cmVtb3RlOjpQbGF5bGlzdCogcGxheWxpc3QgPSBwbGF5bGlzdHMtPmFkZF9wbGF5bGlzdCgp OwotICAgICBwbGF5bGlzdC0+c2V0X25hbWUoRGF0YUNvbW1hU2l6ZUZyb21RU3RyaW5nKHAubmFt ZSkpOwotICAgICBwbGF5bGlzdC0+c2V0X2lkKHAuaWQpOwotICAgICBwbGF5bGlzdC0+c2V0X2Fj dGl2ZSgocC5pZCA9PSBhY3RpdmVfcGxheWxpc3QpKTsKLUBAIC0yNDEsMTAgKzI0MSwxMCBAQAot ICAgaW50IGFjdGl2ZV9wbGF5bGlzdCA9IGFwcF8tPnBsYXlsaXN0X21hbmFnZXIoKS0+YWN0aXZl X2lkKCk7Ci0gCi0gICAvLyBDcmVhdGUgbWVzc2FnZQotLSAgcGI6OnJlbW90ZTo6TWVzc2FnZSBt c2c7Ci0tICBtc2cuc2V0X3R5cGUocGI6OnJlbW90ZTo6UExBWUxJU1RTKTsKLSsgIGNwYjo6cmVt b3RlOjpNZXNzYWdlIG1zZzsKLSsgIG1zZy5zZXRfdHlwZShjcGI6OnJlbW90ZTo6UExBWUxJU1RT KTsKLSAKLS0gIHBiOjpyZW1vdGU6OlJlc3BvbnNlUGxheWxpc3RzKiBwbGF5bGlzdHMgPSBtc2cu bXV0YWJsZV9yZXNwb25zZV9wbGF5bGlzdHMoKTsKLSsgIGNwYjo6cmVtb3RlOjpSZXNwb25zZVBs YXlsaXN0cyogcGxheWxpc3RzID0gbXNnLm11dGFibGVfcmVzcG9uc2VfcGxheWxpc3RzKCk7Ci0g Ci0gICBRTGlzdEl0ZXJhdG9yPFBsYXlsaXN0Kj4gaXQoYXBwX3BsYXlsaXN0cyk7Ci0gICB3aGls ZSAoaXQuaGFzTmV4dCgpKSB7Ci1AQCAtMjUzLDcgKzI1Myw3IEBACi0gICAgIFFTdHJpbmcgcGxh eWxpc3RfbmFtZSA9IGFwcF8tPnBsYXlsaXN0X21hbmFnZXIoKS0+R2V0UGxheWxpc3ROYW1lKHAt PmlkKCkpOwotIAotICAgICAvLyBDcmVhdGUgYSBuZXcgcGxheWxpc3QKLS0gICAgcGI6OnJlbW90 ZTo6UGxheWxpc3QqIHBsYXlsaXN0ID0gcGxheWxpc3RzLT5hZGRfcGxheWxpc3QoKTsKLSsgICAg Y3BiOjpyZW1vdGU6OlBsYXlsaXN0KiBwbGF5bGlzdCA9IHBsYXlsaXN0cy0+YWRkX3BsYXlsaXN0 KCk7Ci0gICAgIHBsYXlsaXN0LT5zZXRfbmFtZShEYXRhQ29tbWFTaXplRnJvbVFTdHJpbmcocGxh eWxpc3RfbmFtZSkpOwotICAgICBwbGF5bGlzdC0+c2V0X2lkKHAtPmlkKCkpOwotICAgICBwbGF5 bGlzdC0+c2V0X2FjdGl2ZSgocC0+aWQoKSA9PSBhY3RpdmVfcGxheWxpc3QpKTsKLUBAIC0yNjks OCArMjY5LDggQEAKLSAgIFNlbmRQbGF5bGlzdFNvbmdzKHBsYXlsaXN0LT5pZCgpKTsKLSAKLSAg IC8vIFNlbmQgdGhlIGNoYW5nZWQgbWVzc2FnZSBhZnRlciBzZW5kaW5nIHRoZSBwbGF5bGlzdCBz b25ncwotLSAgcGI6OnJlbW90ZTo6TWVzc2FnZSBtc2c7Ci0tICBtc2cuc2V0X3R5cGUocGI6OnJl bW90ZTo6QUNUSVZFX1BMQVlMSVNUX0NIQU5HRUQpOwotKyAgY3BiOjpyZW1vdGU6Ok1lc3NhZ2Ug bXNnOwotKyAgbXNnLnNldF90eXBlKGNwYjo6cmVtb3RlOjpBQ1RJVkVfUExBWUxJU1RfQ0hBTkdF RCk7Ci0gICBtc2cubXV0YWJsZV9yZXNwb25zZV9hY3RpdmVfY2hhbmdlZCgpLT5zZXRfaWQocGxh eWxpc3QtPmlkKCkpOwotICAgU2VuZERhdGFUb0NsaWVudHMoJm1zZyk7Ci0gfQotQEAgLTMyMiw4 ICszMjIsOCBAQAotICAgU2VuZFJlcGVhdE1vZGUoYXBwXy0+cGxheWxpc3RfbWFuYWdlcigpLT5z ZXF1ZW5jZSgpLT5yZXBlYXRfbW9kZSgpKTsKLSAKLSAgIC8vIFdlIHNlbmQgYWxsIGZpcnN0IGRh dGEKLS0gIHBiOjpyZW1vdGU6Ok1lc3NhZ2UgbXNnOwotLSAgbXNnLnNldF90eXBlKHBiOjpyZW1v dGU6OkZJUlNUX0RBVEFfU0VOVF9DT01QTEVURSk7Ci0rICBjcGI6OnJlbW90ZTo6TWVzc2FnZSBt c2c7Ci0rICBtc2cuc2V0X3R5cGUoY3BiOjpyZW1vdGU6OkZJUlNUX0RBVEFfU0VOVF9DT01QTEVU RSk7Ci0gICBTZW5kRGF0YVRvQ2xpZW50cygmbXNnKTsKLSB9Ci0gCi1AQCAtMzQyLDggKzM0Miw4 IEBACi0gCi0gdm9pZCBPdXRnb2luZ0RhdGFDcmVhdG9yOjpTZW5kU29uZ01ldGFkYXRhKCkgewot ICAgLy8gQ3JlYXRlIHRoZSBtZXNzYWdlCi0tICBwYjo6cmVtb3RlOjpNZXNzYWdlIG1zZzsKLS0g IG1zZy5zZXRfdHlwZShwYjo6cmVtb3RlOjpDVVJSRU5UX01FVEFJTkZPKTsKLSsgIGNwYjo6cmVt b3RlOjpNZXNzYWdlIG1zZzsKLSsgIG1zZy5zZXRfdHlwZShjcGI6OnJlbW90ZTo6Q1VSUkVOVF9N RVRBSU5GTyk7Ci0gCi0gICAvLyBJZiB0aGVyZSBpcyBubyBzb25nLCBjcmVhdGUgYW4gZW1wdHkg bm9kZSwgb3RoZXJ3aXNlIGZpbGwgaXQgd2l0aCBkYXRhCi0gICBpbnQgaSA9IGFwcF8tPnBsYXls aXN0X21hbmFnZXIoKS0+YWN0aXZlKCktPmN1cnJlbnRfcm93KCk7Ci1AQCAtMzU1LDcgKzM1NSw3 IEBACi0gCi0gdm9pZCBPdXRnb2luZ0RhdGFDcmVhdG9yOjpDcmVhdGVTb25nKGNvbnN0IFNvbmcm IHNvbmcsIGNvbnN0IFFJbWFnZSYgYXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBpbnQgaW5kZXgsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBiOjpyZW1vdGU6OlNvbmdNZXRhZGF0YSogc29uZ19tZXRhZGF0YSkgewotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcGI6OnJlbW90ZTo6U29uZ01ldGFkYXRh KiBzb25nX21ldGFkYXRhKSB7Ci0gICBpZiAoc29uZy5pc192YWxpZCgpKSB7Ci0gICAgIHNvbmdf bWV0YWRhdGEtPnNldF9pZChzb25nLmlkKCkpOwotICAgICBzb25nX21ldGFkYXRhLT5zZXRfaW5k ZXgoaW5kZXgpOwotQEAgLTM4MSw3ICszODEsNyBAQAotICAgICAgICAgRGF0YUNvbW1hU2l6ZUZy b21RU3RyaW5nKHNvbmcuYXJ0X2F1dG9tYXRpYygpKSk7Ci0gICAgIHNvbmdfbWV0YWRhdGEtPnNl dF9hcnRfbWFudWFsKERhdGFDb21tYVNpemVGcm9tUVN0cmluZyhzb25nLmFydF9tYW51YWwoKSkp OwotICAgICBzb25nX21ldGFkYXRhLT5zZXRfdHlwZSgKLS0gICAgICAgIHN0YXRpY19jYXN0PDo6 cGI6OnJlbW90ZTo6U29uZ01ldGFkYXRhX1R5cGU+KHNvbmcuZmlsZXR5cGUoKSkpOwotKyAgICAg ICAgc3RhdGljX2Nhc3Q8OjpjcGI6OnJlbW90ZTo6U29uZ01ldGFkYXRhX1R5cGU+KHNvbmcuZmls ZXR5cGUoKSkpOwotIAotICAgICAvLyBBcHBlbmQgY292ZXJhcnQKLSAgICAgaWYgKCFhcnQuaXNO dWxsKCkpIHsKLUBAIC00MDcsOCArNDA3LDggQEAKLSAKLSB2b2lkIE91dGdvaW5nRGF0YUNyZWF0 b3I6OlZvbHVtZUNoYW5nZWQoaW50IHZvbHVtZSkgewotICAgLy8gQ3JlYXRlIHRoZSBtZXNzYWdl Ci0tICBwYjo6cmVtb3RlOjpNZXNzYWdlIG1zZzsKLS0gIG1zZy5zZXRfdHlwZShwYjo6cmVtb3Rl OjpTRVRfVk9MVU1FKTsKLSsgIGNwYjo6cmVtb3RlOjpNZXNzYWdlIG1zZzsKLSsgIG1zZy5zZXRf dHlwZShjcGI6OnJlbW90ZTo6U0VUX1ZPTFVNRSk7Ci0gICBtc2cubXV0YWJsZV9yZXF1ZXN0X3Nl dF92b2x1bWUoKS0+c2V0X3ZvbHVtZSh2b2x1bWUpOwotICAgU2VuZERhdGFUb0NsaWVudHMoJm1z Zyk7Ci0gfQotQEAgLTQyMiwxNSArNDIyLDE1IEBACi0gICB9Ci0gCi0gICAvLyBDcmVhdGUgdGhl IG1lc3NhZ2UgYW5kIHRoZSBwbGF5bGlzdAotLSAgcGI6OnJlbW90ZTo6TWVzc2FnZSBtc2c7Ci0t ICBtc2cuc2V0X3R5cGUocGI6OnJlbW90ZTo6UExBWUxJU1RfU09OR1MpOwotKyAgY3BiOjpyZW1v dGU6Ok1lc3NhZ2UgbXNnOwotKyAgbXNnLnNldF90eXBlKGNwYjo6cmVtb3RlOjpQTEFZTElTVF9T T05HUyk7Ci0gCi0gICAvLyBDcmVhdGUgdGhlIFJlc3BvbnNlIG1lc3NhZ2UKLS0gIHBiOjpyZW1v dGU6OlJlc3BvbnNlUGxheWxpc3RTb25ncyogcGJfcmVzcG9uc2VfcGxheWxpc3Rfc29uZ3MgPQot KyAgY3BiOjpyZW1vdGU6OlJlc3BvbnNlUGxheWxpc3RTb25ncyogcGJfcmVzcG9uc2VfcGxheWxp c3Rfc29uZ3MgPQotICAgICAgIG1zZy5tdXRhYmxlX3Jlc3BvbnNlX3BsYXlsaXN0X3NvbmdzKCk7 Ci0gCi0gICAvLyBDcmVhdGUgYSBuZXcgcGxheWxpc3QKLS0gIHBiOjpyZW1vdGU6OlBsYXlsaXN0 KiBwYl9wbGF5bGlzdCA9Ci0rICBjcGI6OnJlbW90ZTo6UGxheWxpc3QqIHBiX3BsYXlsaXN0ID0K LSAgICAgICBwYl9yZXNwb25zZV9wbGF5bGlzdF9zb25ncy0+bXV0YWJsZV9yZXF1ZXN0ZWRfcGxh eWxpc3QoKTsKLSAgIHBiX3BsYXlsaXN0LT5zZXRfaWQoaWQpOwotIAotQEAgLTQ0MSw3ICs0NDEs NyBAQAotICAgUUltYWdlIG51bGxfaW1nOwotICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgewotICAg ICBTb25nIHNvbmcgPSBpdC5uZXh0KCk7Ci0tICAgIHBiOjpyZW1vdGU6OlNvbmdNZXRhZGF0YSog cGJfc29uZyA9IHBiX3Jlc3BvbnNlX3BsYXlsaXN0X3NvbmdzLT5hZGRfc29uZ3MoKTsKLSsgICAg Y3BiOjpyZW1vdGU6OlNvbmdNZXRhZGF0YSogcGJfc29uZyA9IHBiX3Jlc3BvbnNlX3BsYXlsaXN0 X3NvbmdzLT5hZGRfc29uZ3MoKTsKLSAgICAgQ3JlYXRlU29uZyhzb25nLCBudWxsX2ltZywgaW5k ZXgsIHBiX3NvbmcpOwotICAgICArK2luZGV4OwotICAgfQotQEAgLTQ2MiwyMyArNDYyLDIzIEBA Ci0gICB9Ci0gICBsYXN0X3N0YXRlXyA9IHN0YXRlOwotIAotLSAgcGI6OnJlbW90ZTo6TWVzc2Fn ZSBtc2c7Ci0rICBjcGI6OnJlbW90ZTo6TWVzc2FnZSBtc2c7Ci0gCi0gICBzd2l0Y2ggKHN0YXRl KSB7Ci0gICAgIGNhc2UgRW5naW5lOjpQbGF5aW5nOgotLSAgICAgIG1zZy5zZXRfdHlwZShwYjo6 cmVtb3RlOjpQTEFZKTsKLSsgICAgICBtc2cuc2V0X3R5cGUoY3BiOjpyZW1vdGU6OlBMQVkpOwot ICAgICAgIHRyYWNrX3Bvc2l0aW9uX3RpbWVyXy0+c3RhcnQoMTAwMCk7Ci0gICAgICAgYnJlYWs7 Ci0gICAgIGNhc2UgRW5naW5lOjpQYXVzZWQ6Ci0tICAgICAgbXNnLnNldF90eXBlKHBiOjpyZW1v dGU6OlBBVVNFKTsKLSsgICAgICBtc2cuc2V0X3R5cGUoY3BiOjpyZW1vdGU6OlBBVVNFKTsKLSAg ICAgICB0cmFja19wb3NpdGlvbl90aW1lcl8tPnN0b3AoKTsKLSAgICAgICBicmVhazsKLSAgICAg Y2FzZSBFbmdpbmU6OkVtcHR5OgotLSAgICAgIG1zZy5zZXRfdHlwZShwYjo6cmVtb3RlOjpTVE9Q KTsgIC8vIEVtcHR5IGlzIGNhbGxlZCB3aGVuIHBsYXllciBzdG9wcGVkCi0rICAgICAgbXNnLnNl dF90eXBlKGNwYjo6cmVtb3RlOjpTVE9QKTsgIC8vIEVtcHR5IGlzIGNhbGxlZCB3aGVuIHBsYXll ciBzdG9wcGVkCi0gICAgICAgdHJhY2tfcG9zaXRpb25fdGltZXJfLT5zdG9wKCk7Ci0gICAgICAg YnJlYWs7Ci0gICAgIGRlZmF1bHQ6Ci0tICAgICAgbXNnLnNldF90eXBlKHBiOjpyZW1vdGU6OlNU T1ApOwotKyAgICAgIG1zZy5zZXRfdHlwZShjcGI6OnJlbW90ZTo6U1RPUCk7Ci0gICAgICAgdHJh Y2tfcG9zaXRpb25fdGltZXJfLT5zdG9wKCk7Ci0gICAgICAgYnJlYWs7Ci0gICB9OwotQEAgLTQ4 NywyNyArNDg3LDI3IEBACi0gfQotIAotIHZvaWQgT3V0Z29pbmdEYXRhQ3JlYXRvcjo6U2VuZFJl cGVhdE1vZGUoUGxheWxpc3RTZXF1ZW5jZTo6UmVwZWF0TW9kZSBtb2RlKSB7Ci0tICBwYjo6cmVt b3RlOjpNZXNzYWdlIG1zZzsKLS0gIG1zZy5zZXRfdHlwZShwYjo6cmVtb3RlOjpSRVBFQVQpOwot KyAgY3BiOjpyZW1vdGU6Ok1lc3NhZ2UgbXNnOwotKyAgbXNnLnNldF90eXBlKGNwYjo6cmVtb3Rl OjpSRVBFQVQpOwotIAotICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgIGNhc2UgUGxheWxpc3RTZXF1 ZW5jZTo6UmVwZWF0X09mZjoKLS0gICAgICBtc2cubXV0YWJsZV9yZXBlYXQoKS0+c2V0X3JlcGVh dF9tb2RlKHBiOjpyZW1vdGU6OlJlcGVhdF9PZmYpOwotKyAgICAgIG1zZy5tdXRhYmxlX3JlcGVh dCgpLT5zZXRfcmVwZWF0X21vZGUoY3BiOjpyZW1vdGU6OlJlcGVhdF9PZmYpOwotICAgICAgIGJy ZWFrOwotICAgICBjYXNlIFBsYXlsaXN0U2VxdWVuY2U6OlJlcGVhdF9UcmFjazoKLS0gICAgICBt c2cubXV0YWJsZV9yZXBlYXQoKS0+c2V0X3JlcGVhdF9tb2RlKHBiOjpyZW1vdGU6OlJlcGVhdF9U cmFjayk7Ci0rICAgICAgbXNnLm11dGFibGVfcmVwZWF0KCktPnNldF9yZXBlYXRfbW9kZShjcGI6 OnJlbW90ZTo6UmVwZWF0X1RyYWNrKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBQbGF5bGlz dFNlcXVlbmNlOjpSZXBlYXRfQWxidW06Ci0tICAgICAgbXNnLm11dGFibGVfcmVwZWF0KCktPnNl dF9yZXBlYXRfbW9kZShwYjo6cmVtb3RlOjpSZXBlYXRfQWxidW0pOwotKyAgICAgIG1zZy5tdXRh YmxlX3JlcGVhdCgpLT5zZXRfcmVwZWF0X21vZGUoY3BiOjpyZW1vdGU6OlJlcGVhdF9BbGJ1bSk7 Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgUGxheWxpc3RTZXF1ZW5jZTo6UmVwZWF0X1BsYXls aXN0OgotLSAgICAgIG1zZy5tdXRhYmxlX3JlcGVhdCgpLT5zZXRfcmVwZWF0X21vZGUocGI6OnJl bW90ZTo6UmVwZWF0X1BsYXlsaXN0KTsKLSsgICAgICBtc2cubXV0YWJsZV9yZXBlYXQoKS0+c2V0 X3JlcGVhdF9tb2RlKGNwYjo6cmVtb3RlOjpSZXBlYXRfUGxheWxpc3QpOwotICAgICAgIGJyZWFr OwotICAgICBjYXNlIFBsYXlsaXN0U2VxdWVuY2U6OlJlcGVhdF9PbmVCeU9uZToKLS0gICAgICBt c2cubXV0YWJsZV9yZXBlYXQoKS0+c2V0X3JlcGVhdF9tb2RlKHBiOjpyZW1vdGU6OlJlcGVhdF9P bmVCeU9uZSk7Ci0rICAgICAgbXNnLm11dGFibGVfcmVwZWF0KCktPnNldF9yZXBlYXRfbW9kZShj cGI6OnJlbW90ZTo6UmVwZWF0X09uZUJ5T25lKTsKLSAgICAgICBicmVhazsKLSAgICAgY2FzZSBQ bGF5bGlzdFNlcXVlbmNlOjpSZXBlYXRfSW50cm86Ci0tICAgICAgbXNnLm11dGFibGVfcmVwZWF0 KCktPnNldF9yZXBlYXRfbW9kZShwYjo6cmVtb3RlOjpSZXBlYXRfSW50cm8pOwotKyAgICAgIG1z Zy5tdXRhYmxlX3JlcGVhdCgpLT5zZXRfcmVwZWF0X21vZGUoY3BiOjpyZW1vdGU6OlJlcGVhdF9J bnRybyk7Ci0gICAgICAgYnJlYWs7Ci0gICB9Ci0gCi1AQCAtNTE1LDIxICs1MTUsMjEgQEAKLSB9 Ci0gCi0gdm9pZCBPdXRnb2luZ0RhdGFDcmVhdG9yOjpTZW5kU2h1ZmZsZU1vZGUoUGxheWxpc3RT ZXF1ZW5jZTo6U2h1ZmZsZU1vZGUgbW9kZSkgewotLSAgcGI6OnJlbW90ZTo6TWVzc2FnZSBtc2c7 Ci0tICBtc2cuc2V0X3R5cGUocGI6OnJlbW90ZTo6U0hVRkZMRSk7Ci0rICBjcGI6OnJlbW90ZTo6 TWVzc2FnZSBtc2c7Ci0rICBtc2cuc2V0X3R5cGUoY3BiOjpyZW1vdGU6OlNIVUZGTEUpOwotIAot ICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgIGNhc2UgUGxheWxpc3RTZXF1ZW5jZTo6U2h1ZmZsZV9P ZmY6Ci0tICAgICAgbXNnLm11dGFibGVfc2h1ZmZsZSgpLT5zZXRfc2h1ZmZsZV9tb2RlKHBiOjpy ZW1vdGU6OlNodWZmbGVfT2ZmKTsKLSsgICAgICBtc2cubXV0YWJsZV9zaHVmZmxlKCktPnNldF9z aHVmZmxlX21vZGUoY3BiOjpyZW1vdGU6OlNodWZmbGVfT2ZmKTsKLSAgICAgICBicmVhazsKLSAg ICAgY2FzZSBQbGF5bGlzdFNlcXVlbmNlOjpTaHVmZmxlX0FsbDoKLS0gICAgICBtc2cubXV0YWJs ZV9zaHVmZmxlKCktPnNldF9zaHVmZmxlX21vZGUocGI6OnJlbW90ZTo6U2h1ZmZsZV9BbGwpOwot KyAgICAgIG1zZy5tdXRhYmxlX3NodWZmbGUoKS0+c2V0X3NodWZmbGVfbW9kZShjcGI6OnJlbW90 ZTo6U2h1ZmZsZV9BbGwpOwotICAgICAgIGJyZWFrOwotICAgICBjYXNlIFBsYXlsaXN0U2VxdWVu Y2U6OlNodWZmbGVfSW5zaWRlQWxidW06Ci0tICAgICAgbXNnLm11dGFibGVfc2h1ZmZsZSgpLT5z ZXRfc2h1ZmZsZV9tb2RlKHBiOjpyZW1vdGU6OlNodWZmbGVfSW5zaWRlQWxidW0pOwotKyAgICAg IG1zZy5tdXRhYmxlX3NodWZmbGUoKS0+c2V0X3NodWZmbGVfbW9kZShjcGI6OnJlbW90ZTo6U2h1 ZmZsZV9JbnNpZGVBbGJ1bSk7Ci0gICAgICAgYnJlYWs7Ci0gICAgIGNhc2UgUGxheWxpc3RTZXF1 ZW5jZTo6U2h1ZmZsZV9BbGJ1bXM6Ci0tICAgICAgbXNnLm11dGFibGVfc2h1ZmZsZSgpLT5zZXRf c2h1ZmZsZV9tb2RlKHBiOjpyZW1vdGU6OlNodWZmbGVfQWxidW1zKTsKLSsgICAgICBtc2cubXV0 YWJsZV9zaHVmZmxlKCktPnNldF9zaHVmZmxlX21vZGUoY3BiOjpyZW1vdGU6OlNodWZmbGVfQWxi dW1zKTsKLSAgICAgICBicmVhazsKLSAgIH0KLSAKLUBAIC01MzcsMTQgKzUzNywxNCBAQAotIH0K LSAKLSB2b2lkIE91dGdvaW5nRGF0YUNyZWF0b3I6OlNlbmRLZWVwQWxpdmUoKSB7Ci0tICBwYjo6 cmVtb3RlOjpNZXNzYWdlIG1zZzsKLS0gIG1zZy5zZXRfdHlwZShwYjo6cmVtb3RlOjpLRUVQX0FM SVZFKTsKLSsgIGNwYjo6cmVtb3RlOjpNZXNzYWdlIG1zZzsKLSsgIG1zZy5zZXRfdHlwZShjcGI6 OnJlbW90ZTo6S0VFUF9BTElWRSk7Ci0gICBTZW5kRGF0YVRvQ2xpZW50cygmbXNnKTsKLSB9Ci0g Ci0gdm9pZCBPdXRnb2luZ0RhdGFDcmVhdG9yOjpVcGRhdGVUcmFja1Bvc2l0aW9uKCkgewotLSAg cGI6OnJlbW90ZTo6TWVzc2FnZSBtc2c7Ci0tICBtc2cuc2V0X3R5cGUocGI6OnJlbW90ZTo6VVBE QVRFX1RSQUNLX1BPU0lUSU9OKTsKLSsgIGNwYjo6cmVtb3RlOjpNZXNzYWdlIG1zZzsKLSsgIG1z Zy5zZXRfdHlwZShjcGI6OnJlbW90ZTo6VVBEQVRFX1RSQUNLX1BPU0lUSU9OKTsKLSAKLSAgIGlu dCBwb3NpdGlvbiA9IHN0ZDo6Zmxvb3IoCi0gICAgICAgZmxvYXQoYXBwXy0+cGxheWVyKCktPmVu Z2luZSgpLT5wb3NpdGlvbl9uYW5vc2VjKCkpIC8ga05zZWNQZXJTZWMgKyAwLjUpOwotQEAgLTU2 MSwxMCArNTYxLDEwIEBACi0gfQotIAotIHZvaWQgT3V0Z29pbmdEYXRhQ3JlYXRvcjo6RGlzY29u bmVjdEFsbENsaWVudHMoKSB7Ci0tICBwYjo6cmVtb3RlOjpNZXNzYWdlIG1zZzsKLS0gIG1zZy5z ZXRfdHlwZShwYjo6cmVtb3RlOjpESVNDT05ORUNUKTsKLSsgIGNwYjo6cmVtb3RlOjpNZXNzYWdl IG1zZzsKLSsgIG1zZy5zZXRfdHlwZShjcGI6OnJlbW90ZTo6RElTQ09OTkVDVCk7Ci0gICBtc2cu bXV0YWJsZV9yZXNwb25zZV9kaXNjb25uZWN0KCktPnNldF9yZWFzb25fZGlzY29ubmVjdCgKLS0g ICAgICBwYjo6cmVtb3RlOjpTZXJ2ZXJfU2h1dGRvd24pOwotKyAgICAgIGNwYjo6cmVtb3RlOjpT ZXJ2ZXJfU2h1dGRvd24pOwotICAgU2VuZERhdGFUb0NsaWVudHMoJm1zZyk7Ci0gfQotIAotQEAg LTU3Miw5ICs1NzIsOSBAQAotIAotIHZvaWQgT3V0Z29pbmdEYXRhQ3JlYXRvcjo6U2VuZEx5cmlj cyhpbnQgaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNv bmdJbmZvRmV0Y2hlcjo6UmVzdWx0JiByZXN1bHQpIHsKLS0gIHBiOjpyZW1vdGU6Ok1lc3NhZ2Ug bXNnOwotLSAgbXNnLnNldF90eXBlKHBiOjpyZW1vdGU6OkxZUklDUyk7Ci0tICBwYjo6cmVtb3Rl OjpSZXNwb25zZUx5cmljcyogcmVzcG9uc2UgPSBtc2cubXV0YWJsZV9yZXNwb25zZV9seXJpY3Mo KTsKLSsgIGNwYjo6cmVtb3RlOjpNZXNzYWdlIG1zZzsKLSsgIG1zZy5zZXRfdHlwZShjcGI6OnJl bW90ZTo6TFlSSUNTKTsKLSsgIGNwYjo6cmVtb3RlOjpSZXNwb25zZUx5cmljcyogcmVzcG9uc2Ug PSBtc2cubXV0YWJsZV9yZXNwb25zZV9seXJpY3MoKTsKLSAKLSAgIGZvciAoY29uc3QgQ29sbGFw c2libGVJbmZvUGFuZTo6RGF0YSYgZGF0YSA6IHJlc3VsdC5pbmZvXykgewotICAgICAvLyBJZiB0 aGUgc2l6ZSBpcyB6ZXJvLCBkbyBub3Qgc2VuZCB0aGUgcHJvdmlkZXIKLUBAIC01ODIsNyArNTgy LDcgQEAKLSAgICAgICAgIHFvYmplY3RfY2FzdDxVbHRpbWF0ZUx5cmljc0x5cmljKj4oZGF0YS5j b250ZW50X29iamVjdF8pOwotICAgICBpZiAoZWRpdG9yLT50b1BsYWluVGV4dCgpLmxlbmd0aCgp ID09IDApIGNvbnRpbnVlOwotIAotLSAgICBwYjo6cmVtb3RlOjpMeXJpYyogbHlyaWMgPSByZXNw b25zZS0+bXV0YWJsZV9seXJpY3MoKS0+QWRkKCk7Ci0rICAgIGNwYjo6cmVtb3RlOjpMeXJpYyog bHlyaWMgPSByZXNwb25zZS0+bXV0YWJsZV9seXJpY3MoKS0+QWRkKCk7Ci0gCi0gICAgIGx5cmlj LT5zZXRfaWQoRGF0YUNvbW1hU2l6ZUZyb21RU3RyaW5nKGRhdGEuaWRfKSk7Ci0gICAgIGx5cmlj LT5zZXRfdGl0bGUoRGF0YUNvbW1hU2l6ZUZyb21RU3RyaW5nKGRhdGEudGl0bGVfKSk7Ci1AQCAt NjIzLDEwICs2MjMsMTAgQEAKLSAgIGZpbGUub3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KTsKLSAK LSAgIFFCeXRlQXJyYXkgZGF0YTsKLS0gIHBiOjpyZW1vdGU6Ok1lc3NhZ2UgbXNnOwotLSAgcGI6 OnJlbW90ZTo6UmVzcG9uc2VMaWJyYXJ5Q2h1bmsqIGNodW5rID0KLSsgIGNwYjo6cmVtb3RlOjpN ZXNzYWdlIG1zZzsKLSsgIGNwYjo6cmVtb3RlOjpSZXNwb25zZUxpYnJhcnlDaHVuayogY2h1bmsg PQotICAgICAgIG1zZy5tdXRhYmxlX3Jlc3BvbnNlX2xpYnJhcnlfY2h1bmsoKTsKLS0gIG1zZy5z ZXRfdHlwZShwYjo6cmVtb3RlOjpMSUJSQVJZX0NIVU5LKTsKLSsgIG1zZy5zZXRfdHlwZShjcGI6 OnJlbW90ZTo6TElCUkFSWV9DSFVOSyk7Ci0gCi0gICAvLyBDYWxjdWxhdGUgdGhlIG51bWJlciBv ZiBjaHVua3MKLSAgIGludCBjaHVua19jb3VudCA9IHFSb3VuZCgoZmlsZS5zaXplKCkgLyBrRmls ZUNodW5rU2l6ZSkgKyAwLjUpOwotQEAgLTY3NCwxNCArNjc0LDE0IEBACi0gICBnbG9iYWxfc2Vh cmNoX3Jlc3VsdF9tYXBfLmluc2VydChpZCwgcmVxdWVzdCk7Ci0gCi0gICAvLyBTZW5kIHN0YXR1 cyBtZXNzYWdlCi0tICBwYjo6cmVtb3RlOjpNZXNzYWdlIG1zZzsKLS0gIHBiOjpyZW1vdGU6OlJl c3BvbnNlR2xvYmFsU2VhcmNoU3RhdHVzKiBzdGF0dXMgPQotKyAgY3BiOjpyZW1vdGU6Ok1lc3Nh Z2UgbXNnOwotKyAgY3BiOjpyZW1vdGU6OlJlc3BvbnNlR2xvYmFsU2VhcmNoU3RhdHVzKiBzdGF0 dXMgPQotICAgICAgIG1zZy5tdXRhYmxlX3Jlc3BvbnNlX2dsb2JhbF9zZWFyY2hfc3RhdHVzKCk7 Ci0gCi0tICBtc2cuc2V0X3R5cGUocGI6OnJlbW90ZTo6R0xPQkFMX1NFQVJDSF9TVEFUVVMpOwot KyAgbXNnLnNldF90eXBlKGNwYjo6cmVtb3RlOjpHTE9CQUxfU0VBUkNIX1NUQVRVUyk7Ci0gICBz dGF0dXMtPnNldF9pZChpZCk7Ci0gICBzdGF0dXMtPnNldF9xdWVyeShEYXRhQ29tbWFTaXplRnJv bVFTdHJpbmcocXVlcnkpKTsKLS0gIHN0YXR1cy0+c2V0X3N0YXR1cyhwYjo6cmVtb3RlOjpHbG9i YWxTZWFyY2hTdGFydGVkKTsKLSsgIHN0YXR1cy0+c2V0X3N0YXR1cyhjcGI6OnJlbW90ZTo6R2xv YmFsU2VhcmNoU3RhcnRlZCk7Ci0gCi0gICBjbGllbnQtPlNlbmREYXRhKCZtc2cpOwotIAotQEAg LTY5NiwxMSArNjk2LDExIEBACi0gICBSZW1vdGVDbGllbnQqIGNsaWVudCA9IHNlYXJjaF9yZXF1 ZXN0LmNsaWVudF87Ci0gICBRSW1hZ2UgbnVsbF9pbWc7Ci0gCi0tICBwYjo6cmVtb3RlOjpNZXNz YWdlIG1zZzsKLS0gIHBiOjpyZW1vdGU6OlJlc3BvbnNlR2xvYmFsU2VhcmNoKiByZXNwb25zZSA9 Ci0rICBjcGI6OnJlbW90ZTo6TWVzc2FnZSBtc2c7Ci0rICBjcGI6OnJlbW90ZTo6UmVzcG9uc2VH bG9iYWxTZWFyY2gqIHJlc3BvbnNlID0KLSAgICAgICBtc2cubXV0YWJsZV9yZXNwb25zZV9nbG9i YWxfc2VhcmNoKCk7Ci0gCi0tICBtc2cuc2V0X3R5cGUocGI6OnJlbW90ZTo6R0xPQkFMX1NFQVJD SF9SRVNVTFQpOwotKyAgbXNnLnNldF90eXBlKGNwYjo6cmVtb3RlOjpHTE9CQUxfU0VBUkNIX1JF U1VMVCk7Ci0gICByZXNwb25zZS0+c2V0X2lkKHNlYXJjaF9yZXF1ZXN0LmlkXyk7Ci0gICByZXNw b25zZS0+c2V0X3F1ZXJ5KERhdGFDb21tYVNpemVGcm9tUVN0cmluZyhzZWFyY2hfcmVxdWVzdC5x dWVyeV8pKTsKLSAgIHJlc3BvbnNlLT5zZXRfc2VhcmNoX3Byb3ZpZGVyKAotQEAgLTcxNSw3ICs3 MTUsNyBAQAotICAgcmVzcG9uc2UtPnNldF9zZWFyY2hfcHJvdmlkZXJfaWNvbihieXRlX2FycmF5 LmNvbnN0RGF0YSgpLCBieXRlX2FycmF5LnNpemUoKSk7Ci0gCi0gICBmb3IgKGNvbnN0IFNlYXJj aFByb3ZpZGVyOjpSZXN1bHQmIHJlc3VsdCA6IHJlc3VsdHMpIHsKLS0gICAgcGI6OnJlbW90ZTo6 U29uZ01ldGFkYXRhKiBwYl9zb25nID0gcmVzcG9uc2UtPmFkZF9zb25nX21ldGFkYXRhKCk7Ci0r ICAgIGNwYjo6cmVtb3RlOjpTb25nTWV0YWRhdGEqIHBiX3NvbmcgPSByZXNwb25zZS0+YWRkX3Nv bmdfbWV0YWRhdGEoKTsKLSAgICAgQ3JlYXRlU29uZyhyZXN1bHQubWV0YWRhdGFfLCBudWxsX2lt ZywgMCwgcGJfc29uZyk7Ci0gICB9Ci0gCi1AQCAtNzMxLDE0ICs3MzEsMTQgQEAKLSAgIEdsb2Jh bFNlYXJjaFJlcXVlc3QgcmVxID0gZ2xvYmFsX3NlYXJjaF9yZXN1bHRfbWFwXy50YWtlKGlkKTsK LSAKLSAgIC8vIFNlbmQgc3RhdHVzIG1lc3NhZ2UKLS0gIHBiOjpyZW1vdGU6Ok1lc3NhZ2UgbXNn OwotLSAgcGI6OnJlbW90ZTo6UmVzcG9uc2VHbG9iYWxTZWFyY2hTdGF0dXMqIHN0YXR1cyA9Ci0r ICBjcGI6OnJlbW90ZTo6TWVzc2FnZSBtc2c7Ci0rICBjcGI6OnJlbW90ZTo6UmVzcG9uc2VHbG9i YWxTZWFyY2hTdGF0dXMqIHN0YXR1cyA9Ci0gICAgICAgbXNnLm11dGFibGVfcmVzcG9uc2VfZ2xv YmFsX3NlYXJjaF9zdGF0dXMoKTsKLSAKLS0gIG1zZy5zZXRfdHlwZShwYjo6cmVtb3RlOjpHTE9C QUxfU0VBUkNIX1NUQVRVUyk7Ci0rICBtc2cuc2V0X3R5cGUoY3BiOjpyZW1vdGU6OkdMT0JBTF9T RUFSQ0hfU1RBVFVTKTsKLSAgIHN0YXR1cy0+c2V0X2lkKHJlcS5pZF8pOwotICAgc3RhdHVzLT5z ZXRfcXVlcnkoRGF0YUNvbW1hU2l6ZUZyb21RU3RyaW5nKHJlcS5xdWVyeV8pKTsKLS0gIHN0YXR1 cy0+c2V0X3N0YXR1cyhwYjo6cmVtb3RlOjpHbG9iYWxTZWFyY2hGaW5pc2hlZCk7Ci0rICBzdGF0 dXMtPnNldF9zdGF0dXMoY3BiOjpyZW1vdGU6Okdsb2JhbFNlYXJjaEZpbmlzaGVkKTsKLSAKLSAg IHJlcS5jbGllbnRfLT5TZW5kRGF0YSgmbXNnKTsKLSAKLWRpZmYgLXVyIHNyYy9uZXR3b3JrcmVt b3RlL291dGdvaW5nZGF0YWNyZWF0b3IuaCBzcmMvbmV0d29ya3JlbW90ZS9vdXRnb2luZ2RhdGFj cmVhdG9yLmgKLS0tLSBhL3NyYy9uZXR3b3JrcmVtb3RlL291dGdvaW5nZGF0YWNyZWF0b3IuaAky MDIwLTA5LTIzIDIyOjM0OjA4LjAwMDAwMDAwMCAtMDQwMAotKysrIGIvc3JjL25ldHdvcmtyZW1v dGUvb3V0Z29pbmdkYXRhY3JlYXRvci5oCTIwMjEtMDItMTkgMTI6MDM6NDguMjM5NDczMDQzIC0w NTAwCi1AQCAtNDksNyArNDksNyBAQAotICAgdm9pZCBTZXRDbGllbnRzKFFMaXN0PFJlbW90ZUNs aWVudCo+KiBjbGllbnRzKTsKLSAKLSAgIHN0YXRpYyB2b2lkIENyZWF0ZVNvbmcoY29uc3QgU29u ZyYgc29uZywgY29uc3QgUUltYWdlJiBhcnQsIGNvbnN0IGludCBpbmRleCwKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgcGI6OnJlbW90ZTo6U29uZ01ldGFkYXRhKiBzb25nX21ldGFkYXRhKTsK LSsgICAgICAgICAgICAgICAgICAgICAgICAgY3BiOjpyZW1vdGU6OlNvbmdNZXRhZGF0YSogc29u Z19tZXRhZGF0YSk7Ci0gCi0gIHB1YmxpYyBzbG90czoKLSAgIHZvaWQgU2VuZENsZW1lbnRpbmVJ bmZvKCk7Ci1AQCAtMTAyLDggKzEwMiw4IEBACi0gCi0gICBRTWFwPGludCwgR2xvYmFsU2VhcmNo UmVxdWVzdD4gZ2xvYmFsX3NlYXJjaF9yZXN1bHRfbWFwXzsKLSAKLS0gIHZvaWQgU2VuZERhdGFU b0NsaWVudHMocGI6OnJlbW90ZTo6TWVzc2FnZSogbXNnKTsKLS0gIHZvaWQgU2V0RW5naW5lU3Rh dGUocGI6OnJlbW90ZTo6UmVzcG9uc2VDbGVtZW50aW5lSW5mbyogbXNnKTsKLSsgIHZvaWQgU2Vu ZERhdGFUb0NsaWVudHMoY3BiOjpyZW1vdGU6Ok1lc3NhZ2UqIG1zZyk7Ci0rICB2b2lkIFNldEVu Z2luZVN0YXRlKGNwYjo6cmVtb3RlOjpSZXNwb25zZUNsZW1lbnRpbmVJbmZvKiBtc2cpOwotICAg dm9pZCBDaGVja0VuYWJsZWRQcm92aWRlcnMoKTsKLSAgIFNvbmdJbmZvUHJvdmlkZXIqIFByb3Zp ZGVyQnlOYW1lKGNvbnN0IFFTdHJpbmcmIG5hbWUpIGNvbnN0OwotIH07Ci1kaWZmIC11ciBzcmMv bmV0d29ya3JlbW90ZS9yZW1vdGVjbGllbnQuY3BwIHNyYy9uZXR3b3JrcmVtb3RlL3JlbW90ZWNs aWVudC5jcHAKLS0tLSBhL3NyYy9uZXR3b3JrcmVtb3RlL3JlbW90ZWNsaWVudC5jcHAJMjAyMC0w OS0yMyAyMjozNDowOC4wMDAwMDAwMDAgLTA0MDAKLSsrKyBiL3NyYy9uZXR3b3JrcmVtb3RlL3Jl bW90ZWNsaWVudC5jcHAJMjAyMS0wMi0xOSAxMjowMzo0OC4yNDA0NzMwNDYgLTA1MDAKLUBAIC0x MDMsMzMgKzEwMywzMyBAQAotIH0KLSAKLSB2b2lkIFJlbW90ZUNsaWVudDo6UGFyc2VNZXNzYWdl KGNvbnN0IFFCeXRlQXJyYXkmIGRhdGEpIHsKLS0gIHBiOjpyZW1vdGU6Ok1lc3NhZ2UgbXNnOwot KyAgY3BiOjpyZW1vdGU6Ok1lc3NhZ2UgbXNnOwotICAgaWYgKCFtc2cuUGFyc2VGcm9tQXJyYXko ZGF0YS5jb25zdERhdGEoKSwgZGF0YS5zaXplKCkpKSB7Ci0gICAgIHFMb2coSW5mbykgPDwgIkNv dWxkbid0IHBhcnNlIGRhdGEiOwotICAgICByZXR1cm47Ci0gICB9Ci0gCi0tICBpZiAobXNnLnR5 cGUoKSA9PSBwYjo6cmVtb3RlOjpDT05ORUNUICYmIHVzZV9hdXRoX2NvZGVfKSB7Ci0rICBpZiAo bXNnLnR5cGUoKSA9PSBjcGI6OnJlbW90ZTo6Q09OTkVDVCAmJiB1c2VfYXV0aF9jb2RlXykgewot ICAgICBpZiAobXNnLnJlcXVlc3RfY29ubmVjdCgpLmF1dGhfY29kZSgpICE9IGF1dGhfY29kZV8p IHsKLS0gICAgICBEaXNjb25uZWN0Q2xpZW50KHBiOjpyZW1vdGU6Oldyb25nX0F1dGhfQ29kZSk7 Ci0rICAgICAgRGlzY29ubmVjdENsaWVudChjcGI6OnJlbW90ZTo6V3JvbmdfQXV0aF9Db2RlKTsK LSAgICAgICByZXR1cm47Ci0gICAgIH0gZWxzZSB7Ci0gICAgICAgYXV0aGVudGljYXRlZF8gPSB0 cnVlOwotICAgICB9Ci0gICB9Ci0gCi0tICBpZiAobXNnLnR5cGUoKSA9PSBwYjo6cmVtb3RlOjpD T05ORUNUKSB7Ci0rICBpZiAobXNnLnR5cGUoKSA9PSBjcGI6OnJlbW90ZTo6Q09OTkVDVCkgewot ICAgICBzZXREb3dubG9hZGVyKG1zZy5yZXF1ZXN0X2Nvbm5lY3QoKS5kb3dubG9hZGVyKCkpOwot ICAgICBxRGVidWcoKSA8PCAiRG93bmxvYWRlciIgPDwgZG93bmxvYWRlcl87Ci0gICB9Ci0gCi0g ICAvLyBDaGVjayBpZiBkb3dubG9hZHMgYXJlIGFsbG93ZWQKLS0gIGlmIChtc2cudHlwZSgpID09 IHBiOjpyZW1vdGU6OkRPV05MT0FEX1NPTkdTICYmICFhbGxvd19kb3dubG9hZHNfKSB7Ci0tICAg IERpc2Nvbm5lY3RDbGllbnQocGI6OnJlbW90ZTo6RG93bmxvYWRfRm9yYmlkZGVuKTsKLSsgIGlm IChtc2cudHlwZSgpID09IGNwYjo6cmVtb3RlOjpET1dOTE9BRF9TT05HUyAmJiAhYWxsb3dfZG93 bmxvYWRzXykgewotKyAgICBEaXNjb25uZWN0Q2xpZW50KGNwYjo6cmVtb3RlOjpEb3dubG9hZF9G b3JiaWRkZW4pOwotICAgICByZXR1cm47Ci0gICB9Ci0gCi0tICBpZiAobXNnLnR5cGUoKSA9PSBw Yjo6cmVtb3RlOjpESVNDT05ORUNUKSB7Ci0rICBpZiAobXNnLnR5cGUoKSA9PSBjcGI6OnJlbW90 ZTo6RElTQ09OTkVDVCkgewotICAgICBjbGllbnRfLT5hYm9ydCgpOwotICAgICBxRGVidWcoKSA8 PCAiQ2xpZW50IGRpc2Nvbm5lY3RlZCI7Ci0gICAgIHJldHVybjsKLUBAIC0xMzcsNyArMTM3LDcg QEAKLSAKLSAgIC8vIENoZWNrIGlmIHRoZSBjbGllbnQgaGFzIHNlbnQgdGhlIGNvcnJlY3QgYXV0 aCBjb2RlCi0gICBpZiAoIWF1dGhlbnRpY2F0ZWRfKSB7Ci0tICAgIERpc2Nvbm5lY3RDbGllbnQo cGI6OnJlbW90ZTo6Tm90X0F1dGhlbnRpY2F0ZWQpOwotKyAgICBEaXNjb25uZWN0Q2xpZW50KGNw Yjo6cmVtb3RlOjpOb3RfQXV0aGVudGljYXRlZCk7Ci0gICAgIHJldHVybjsKLSAgIH0KLSAKLUBA IC0xNDUsOSArMTQ1LDkgQEAKLSAgIGVtaXQgUGFyc2UobXNnKTsKLSB9Ci0gCi0tdm9pZCBSZW1v dGVDbGllbnQ6OkRpc2Nvbm5lY3RDbGllbnQocGI6OnJlbW90ZTo6UmVhc29uRGlzY29ubmVjdCBy ZWFzb24pIHsKLS0gIHBiOjpyZW1vdGU6Ok1lc3NhZ2UgbXNnOwotLSAgbXNnLnNldF90eXBlKHBi OjpyZW1vdGU6OkRJU0NPTk5FQ1QpOwotK3ZvaWQgUmVtb3RlQ2xpZW50OjpEaXNjb25uZWN0Q2xp ZW50KGNwYjo6cmVtb3RlOjpSZWFzb25EaXNjb25uZWN0IHJlYXNvbikgewotKyAgY3BiOjpyZW1v dGU6Ok1lc3NhZ2UgbXNnOwotKyAgbXNnLnNldF90eXBlKGNwYjo6cmVtb3RlOjpESVNDT05ORUNU KTsKLSAKLSAgIG1zZy5tdXRhYmxlX3Jlc3BvbnNlX2Rpc2Nvbm5lY3QoKS0+c2V0X3JlYXNvbl9k aXNjb25uZWN0KHJlYXNvbik7Ci0gICBTZW5kRGF0YVRvQ2xpZW50KCZtc2cpOwotQEAgLTE1OCw3 ICsxNTgsNyBAQAotIH0KLSAKLSAvLyBTZW5kcyBkYXRhIHRvIGNsaWVudCB3aXRob3V0IGNoZWNr IGlmIGF1dGhlbnRpY2F0ZWQKLS12b2lkIFJlbW90ZUNsaWVudDo6U2VuZERhdGFUb0NsaWVudChw Yjo6cmVtb3RlOjpNZXNzYWdlKiBtc2cpIHsKLSt2b2lkIFJlbW90ZUNsaWVudDo6U2VuZERhdGFU b0NsaWVudChjcGI6OnJlbW90ZTo6TWVzc2FnZSogbXNnKSB7Ci0gICAvLyBTZXQgdGhlIGRlZmF1 bHQgdmVyc2lvbgotICAgbXNnLT5zZXRfdmVyc2lvbihtc2ctPmRlZmF1bHRfaW5zdGFuY2UoKS52 ZXJzaW9uKCkpOwotIAotQEAgLTE4NSw3ICsxODUsNyBAQAotICAgfQotIH0KLSAKLS12b2lkIFJl bW90ZUNsaWVudDo6U2VuZERhdGEocGI6OnJlbW90ZTo6TWVzc2FnZSogbXNnKSB7Ci0rdm9pZCBS ZW1vdGVDbGllbnQ6OlNlbmREYXRhKGNwYjo6cmVtb3RlOjpNZXNzYWdlKiBtc2cpIHsKLSAgIC8v IENoZWNrIGlmIGNsaWVudCBpcyBhdXRoZW50aWNhdGVkIGJlZm9yZSBzZW5kaW5nIHRoZSBkYXRh Ci0gICBpZiAoYXV0aGVudGljYXRlZF8pIHsKLSAgICAgU2VuZERhdGFUb0NsaWVudChtc2cpOwot ZGlmZiAtdXIgc3JjL25ldHdvcmtyZW1vdGUvcmVtb3RlY2xpZW50Lmggc3JjL25ldHdvcmtyZW1v dGUvcmVtb3RlY2xpZW50LmgKLS0tLSBhL3NyYy9uZXR3b3JrcmVtb3RlL3JlbW90ZWNsaWVudC5o CTIwMjAtMDktMjMgMjI6MzQ6MDguMDAwMDAwMDAwIC0wNDAwCi0rKysgYi9zcmMvbmV0d29ya3Jl bW90ZS9yZW1vdGVjbGllbnQuaAkyMDIxLTAyLTE5IDEyOjAzOjQ4LjI0MDQ3MzA0NiAtMDUwMAot QEAgLTE2LDExICsxNiwxMSBAQAotICAgflJlbW90ZUNsaWVudCgpOwotIAotICAgLy8gVGhpcyBt ZXRob2QgY2hlY2tzIGlmIGNsaWVudCBpcyBhdXRoZW50aWNhdGVkIGJlZm9yZSBzZW5kaW5nIHRo ZSBkYXRhCi0tICB2b2lkIFNlbmREYXRhKHBiOjpyZW1vdGU6Ok1lc3NhZ2UqIG1zZyk7Ci0rICB2 b2lkIFNlbmREYXRhKGNwYjo6cmVtb3RlOjpNZXNzYWdlKiBtc2cpOwotICAgUUFic3RyYWN0U29j a2V0OjpTb2NrZXRTdGF0ZSBTdGF0ZSgpOwotICAgdm9pZCBzZXREb3dubG9hZGVyKGJvb2wgZG93 bmxvYWRlcik7Ci0gICBib29sIGlzRG93bmxvYWRlcigpIHsgcmV0dXJuIGRvd25sb2FkZXJfOyB9 Ci0tICB2b2lkIERpc2Nvbm5lY3RDbGllbnQocGI6OnJlbW90ZTo6UmVhc29uRGlzY29ubmVjdCBy ZWFzb24pOwotKyAgdm9pZCBEaXNjb25uZWN0Q2xpZW50KGNwYjo6cmVtb3RlOjpSZWFzb25EaXNj b25uZWN0IHJlYXNvbik7Ci0gCi0gICBTb25nU2VuZGVyKiBzb25nX3NlbmRlcigpIHsgcmV0dXJu IHNvbmdfc2VuZGVyXzsgfQotIAotQEAgLTI4LDEzICsyOCwxMyBAQAotICAgdm9pZCBJbmNvbWlu Z0RhdGEoKTsKLSAKLSAgc2lnbmFsczoKLS0gIHZvaWQgUGFyc2UoY29uc3QgcGI6OnJlbW90ZTo6 TWVzc2FnZSYgbXNnKTsKLSsgIHZvaWQgUGFyc2UoY29uc3QgY3BiOjpyZW1vdGU6Ok1lc3NhZ2Um IG1zZyk7Ci0gCi0gIHByaXZhdGU6Ci0gICB2b2lkIFBhcnNlTWVzc2FnZShjb25zdCBRQnl0ZUFy cmF5JiBkYXRhKTsKLSAKLSAgIC8vIFNlbmRzIGRhdGEgdG8gY2xpZW50IHdpdGhvdXQgY2hlY2sg aWYgYXV0aGVudGljYXRlZAotLSAgdm9pZCBTZW5kRGF0YVRvQ2xpZW50KHBiOjpyZW1vdGU6Ok1l c3NhZ2UqIG1zZyk7Ci0rICB2b2lkIFNlbmREYXRhVG9DbGllbnQoY3BiOjpyZW1vdGU6Ok1lc3Nh Z2UqIG1zZyk7Ci0gCi0gICBBcHBsaWNhdGlvbiogYXBwXzsKLSAKLWRpZmYgLXVyIHNyYy9uZXR3 b3JrcmVtb3RlL3NvbmdzZW5kZXIuY3BwIHNyYy9uZXR3b3JrcmVtb3RlL3NvbmdzZW5kZXIuY3Bw Ci0tLS0gYS9zcmMvbmV0d29ya3JlbW90ZS9zb25nc2VuZGVyLmNwcAkyMDIwLTA5LTIzIDIyOjM0 OjA4LjAwMDAwMDAwMCAtMDQwMAotKysrIGIvc3JjL25ldHdvcmtyZW1vdGUvc29uZ3NlbmRlci5j cHAJMjAyMS0wMi0xOSAxMjowMzo0OC4yNDA0NzMwNDYgLTA1MDAKLUBAIC02NywyOSArNjcsMjkg QEAKLSAgIHRyYW5zY29kZXJfLT5DYW5jZWwoKTsKLSB9Ci0gCi0tdm9pZCBTb25nU2VuZGVyOjpT ZW5kU29uZ3MoY29uc3QgcGI6OnJlbW90ZTo6UmVxdWVzdERvd25sb2FkU29uZ3MmIHJlcXVlc3Qp IHsKLSt2b2lkIFNvbmdTZW5kZXI6OlNlbmRTb25ncyhjb25zdCBjcGI6OnJlbW90ZTo6UmVxdWVz dERvd25sb2FkU29uZ3MmIHJlcXVlc3QpIHsKLSAgIFNvbmcgY3VycmVudF9zb25nOwotICAgaWYg KGFwcF8tPnBsYXllcigpLT5HZXRDdXJyZW50SXRlbSgpKSB7Ci0gICAgIGN1cnJlbnRfc29uZyA9 IGFwcF8tPnBsYXllcigpLT5HZXRDdXJyZW50SXRlbSgpLT5NZXRhZGF0YSgpOwotICAgfQotIAot ICAgc3dpdGNoIChyZXF1ZXN0LmRvd25sb2FkX2l0ZW0oKSkgewotLSAgICBjYXNlIHBiOjpyZW1v dGU6OkN1cnJlbnRJdGVtOiB7Ci0rICAgIGNhc2UgY3BiOjpyZW1vdGU6OkN1cnJlbnRJdGVtOiB7 Ci0gICAgICAgaWYgKGN1cnJlbnRfc29uZy5pc192YWxpZCgpKSB7Ci0gICAgICAgICBEb3dubG9h ZEl0ZW0gaXRlbShjdXJyZW50X3NvbmcsIDEsIDEpOwotICAgICAgICAgZG93bmxvYWRfcXVldWVf LmFwcGVuZChpdGVtKTsKLSAgICAgICB9Ci0gICAgICAgYnJlYWs7Ci0gICAgIH0KLS0gICAgY2Fz ZSBwYjo6cmVtb3RlOjpJdGVtQWxidW06Ci0rICAgIGNhc2UgY3BiOjpyZW1vdGU6Okl0ZW1BbGJ1 bToKLSAgICAgICBpZiAoY3VycmVudF9zb25nLmlzX3ZhbGlkKCkpIHsKLSAgICAgICAgIFNlbmRB bGJ1bShjdXJyZW50X3NvbmcpOwotICAgICAgIH0KLSAgICAgICBicmVhazsKLS0gICAgY2FzZSBw Yjo6cmVtb3RlOjpBUGxheWxpc3Q6Ci0rICAgIGNhc2UgY3BiOjpyZW1vdGU6OkFQbGF5bGlzdDoK LSAgICAgICBTZW5kUGxheWxpc3QocmVxdWVzdC5wbGF5bGlzdF9pZCgpKTsKLSAgICAgICBicmVh azsKLS0gICAgY2FzZSBwYjo6cmVtb3RlOjpVcmxzOgotKyAgICBjYXNlIGNwYjo6cmVtb3RlOjpV cmxzOgotICAgICAgIFNlbmRVcmxzKHJlcXVlc3QpOwotICAgICAgIGJyZWFrOwotICAgICBkZWZh dWx0OgotQEAgLTEzOSwxMCArMTM5LDEwIEBACi0gCi0gdm9pZCBTb25nU2VuZGVyOjpTZW5kVHJh bnNjb2RlclN0YXR1cygpIHsKLSAgIC8vIFNlbmQgYSBtZXNzYWdlIHRvIHRoZSByZW1vdGUgdGhh dCB3ZSBhcmUgY29udmVydGluZyBmaWxlcwotLSAgcGI6OnJlbW90ZTo6TWVzc2FnZSBtc2c7Ci0t ICBtc2cuc2V0X3R5cGUocGI6OnJlbW90ZTo6VFJBTlNDT0RJTkdfRklMRVMpOwotKyAgY3BiOjpy ZW1vdGU6Ok1lc3NhZ2UgbXNnOwotKyAgbXNnLnNldF90eXBlKGNwYjo6cmVtb3RlOjpUUkFOU0NP RElOR19GSUxFUyk7Ci0gCi0tICBwYjo6cmVtb3RlOjpSZXNwb25zZVRyYW5zY29kZXJTdGF0dXMq IHN0YXR1cyA9Ci0rICBjcGI6OnJlbW90ZTo6UmVzcG9uc2VUcmFuc2NvZGVyU3RhdHVzKiBzdGF0 dXMgPQotICAgICAgIG1zZy5tdXRhYmxlX3Jlc3BvbnNlX3RyYW5zY29kZXJfc3RhdHVzKCk7Ci0g ICBzdGF0dXMtPnNldF9wcm9jZXNzZWQodHJhbnNjb2Rlcl9tYXBfLmNvdW50KCkpOwotICAgc3Rh dHVzLT5zZXRfdG90YWwodG90YWxfdHJhbnNjb2RlXyk7Ci1AQCAtMTYxLDEwICsxNjEsMTAgQEAK LSB9Ci0gCi0gdm9pZCBTb25nU2VuZGVyOjpTZW5kVG90YWxGaWxlU2l6ZSgpIHsKLS0gIHBiOjpy ZW1vdGU6Ok1lc3NhZ2UgbXNnOwotLSAgbXNnLnNldF90eXBlKHBiOjpyZW1vdGU6OkRPV05MT0FE X1RPVEFMX1NJWkUpOwotKyAgY3BiOjpyZW1vdGU6Ok1lc3NhZ2UgbXNnOwotKyAgbXNnLnNldF90 eXBlKGNwYjo6cmVtb3RlOjpET1dOTE9BRF9UT1RBTF9TSVpFKTsKLSAKLS0gIHBiOjpyZW1vdGU6 OlJlc3BvbnNlRG93bmxvYWRUb3RhbFNpemUqIHJlc3BvbnNlID0KLSsgIGNwYjo6cmVtb3RlOjpS ZXNwb25zZURvd25sb2FkVG90YWxTaXplKiByZXNwb25zZSA9Ci0gICAgICAgbXNnLm11dGFibGVf cmVzcG9uc2VfZG93bmxvYWRfdG90YWxfc2l6ZSgpOwotIAotICAgcmVzcG9uc2UtPnNldF9maWxl X2NvdW50KGRvd25sb2FkX3F1ZXVlXy5zaXplKCkpOwotQEAgLTE4NiwxNiArMTg2LDE2IEBACi0g fQotIAotIHZvaWQgU29uZ1NlbmRlcjo6T2ZmZXJOZXh0U29uZygpIHsKLS0gIHBiOjpyZW1vdGU6 Ok1lc3NhZ2UgbXNnOwotKyAgY3BiOjpyZW1vdGU6Ok1lc3NhZ2UgbXNnOwotIAotICAgaWYgKGRv d25sb2FkX3F1ZXVlXy5pc0VtcHR5KCkpIHsKLS0gICAgbXNnLnNldF90eXBlKHBiOjpyZW1vdGU6 OkRPV05MT0FEX1FVRVVFX0VNUFRZKTsKLSsgICAgbXNnLnNldF90eXBlKGNwYjo6cmVtb3RlOjpE T1dOTE9BRF9RVUVVRV9FTVBUWSk7Ci0gICB9IGVsc2UgewotICAgICAvLyBHZXQgdGhlIGl0ZW0g YW5kIHNlbmQgdGhlIHNpbmdsZSBzb25nCi0gICAgIERvd25sb2FkSXRlbSBpdGVtID0gZG93bmxv YWRfcXVldWVfLmhlYWQoKTsKLSAKLS0gICAgbXNnLnNldF90eXBlKHBiOjpyZW1vdGU6OlNPTkdf RklMRV9DSFVOSyk7Ci0tICAgIHBiOjpyZW1vdGU6OlJlc3BvbnNlU29uZ0ZpbGVDaHVuayogY2h1 bmsgPQotKyAgICBtc2cuc2V0X3R5cGUoY3BiOjpyZW1vdGU6OlNPTkdfRklMRV9DSFVOSyk7Ci0r ICAgIGNwYjo6cmVtb3RlOjpSZXNwb25zZVNvbmdGaWxlQ2h1bmsqIGNodW5rID0KLSAgICAgICAg IG1zZy5tdXRhYmxlX3Jlc3BvbnNlX3NvbmdfZmlsZV9jaHVuaygpOwotIAotICAgICAvLyBPcGVu IHRoZSBmaWxlCi1AQCAtMjQ3LDEwICsyNDcsMTAgQEAKLSAgIGZpbGUub3BlbihRSU9EZXZpY2U6 OlJlYWRPbmx5KTsKLSAKLSAgIFFCeXRlQXJyYXkgZGF0YTsKLS0gIHBiOjpyZW1vdGU6Ok1lc3Nh Z2UgbXNnOwotLSAgcGI6OnJlbW90ZTo6UmVzcG9uc2VTb25nRmlsZUNodW5rKiBjaHVuayA9Ci0r ICBjcGI6OnJlbW90ZTo6TWVzc2FnZSBtc2c7Ci0rICBjcGI6OnJlbW90ZTo6UmVzcG9uc2VTb25n RmlsZUNodW5rKiBjaHVuayA9Ci0gICAgICAgbXNnLm11dGFibGVfcmVzcG9uc2Vfc29uZ19maWxl X2NodW5rKCk7Ci0tICBtc2cuc2V0X3R5cGUocGI6OnJlbW90ZTo6U09OR19GSUxFX0NIVU5LKTsK LSsgIG1zZy5zZXRfdHlwZShjcGI6OnJlbW90ZTo6U09OR19GSUxFX0NIVU5LKTsKLSAKLSAgIFFJ bWFnZSBudWxsX2ltYWdlOwotIAotQEAgLTI3NSw3ICsyNzUsNyBAQAotICAgICAvLyB3aGF0IGZp bGUgaXQgcmVjZWl2ZXMuCi0gICAgIGlmIChjaHVua19udW1iZXIgPT0gMSkgewotICAgICAgIGlu dCBpID0gYXBwXy0+cGxheWxpc3RfbWFuYWdlcigpLT5hY3RpdmUoKS0+Y3VycmVudF9yb3coKTsK LS0gICAgICBwYjo6cmVtb3RlOjpTb25nTWV0YWRhdGEqIHNvbmdfbWV0YWRhdGEgPQotKyAgICAg IGNwYjo6cmVtb3RlOjpTb25nTWV0YWRhdGEqIHNvbmdfbWV0YWRhdGEgPQotICAgICAgICAgICBt c2cubXV0YWJsZV9yZXNwb25zZV9zb25nX2ZpbGVfY2h1bmsoKS0+bXV0YWJsZV9zb25nX21ldGFk YXRhKCk7Ci0gICAgICAgT3V0Z29pbmdEYXRhQ3JlYXRvcjo6Q3JlYXRlU29uZyhkb3dubG9hZF9p dGVtLnNvbmdfLCBudWxsX2ltYWdlLCBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc29uZ19tZXRhZGF0YSk7Ci1AQCAtMzQ2LDcgKzM0Niw3IEBACi0gICB9Ci0gfQot IAotLXZvaWQgU29uZ1NlbmRlcjo6U2VuZFVybHMoY29uc3QgcGI6OnJlbW90ZTo6UmVxdWVzdERv d25sb2FkU29uZ3MmIHJlcXVlc3QpIHsKLSt2b2lkIFNvbmdTZW5kZXI6OlNlbmRVcmxzKGNvbnN0 IGNwYjo6cmVtb3RlOjpSZXF1ZXN0RG93bmxvYWRTb25ncyYgcmVxdWVzdCkgewotICAgU29uZ0xp c3Qgc29uZ19saXN0OwotIAotICAgLy8gRmlyc3QgZ2F0aGVyIGFsbCB2YWxpZCBzb25ncwotZGlm ZiAtdXIgc3JjL25ldHdvcmtyZW1vdGUvc29uZ3NlbmRlci5oIHNyYy9uZXR3b3JrcmVtb3RlL3Nv bmdzZW5kZXIuaAotLS0tIGEvc3JjL25ldHdvcmtyZW1vdGUvc29uZ3NlbmRlci5oCTIwMjAtMDkt MjMgMjI6MzQ6MDguMDAwMDAwMDAwIC0wNDAwCi0rKysgYi9zcmMvbmV0d29ya3JlbW90ZS9zb25n c2VuZGVyLmgJMjAyMS0wMi0xOSAxMjowMzo0OC4yNDA0NzMwNDYgLTA1MDAKLUBAIC0zMCw3ICsz MCw3IEBACi0gICBzdGF0aWMgY29uc3QgcXVpbnQzMiBrRmlsZUNodW5rU2l6ZTsKLSAKLSAgcHVi bGljIHNsb3RzOgotLSAgdm9pZCBTZW5kU29uZ3MoY29uc3QgcGI6OnJlbW90ZTo6UmVxdWVzdERv d25sb2FkU29uZ3MmIHJlcXVlc3QpOwotKyAgdm9pZCBTZW5kU29uZ3MoY29uc3QgY3BiOjpyZW1v dGU6OlJlcXVlc3REb3dubG9hZFNvbmdzJiByZXF1ZXN0KTsKLSAgIHZvaWQgUmVzcG9uc2VTb25n T2ZmZXIoYm9vbCBhY2NlcHRlZCk7Ci0gCi0gIHByaXZhdGUgc2xvdHM6Ci1AQCAtNTMsNyArNTMs NyBAQAotICAgdm9pZCBTZW5kU2luZ2xlU29uZyhEb3dubG9hZEl0ZW0gZG93bmxvYWRfaXRlbSk7 Ci0gICB2b2lkIFNlbmRBbGJ1bShjb25zdCBTb25nJiBzb25nKTsKLSAgIHZvaWQgU2VuZFBsYXls aXN0KGludCBwbGF5bGlzdF9pZCk7Ci0tICB2b2lkIFNlbmRVcmxzKGNvbnN0IHBiOjpyZW1vdGU6 OlJlcXVlc3REb3dubG9hZFNvbmdzJiByZXF1ZXN0KTsKLSsgIHZvaWQgU2VuZFVybHMoY29uc3Qg Y3BiOjpyZW1vdGU6OlJlcXVlc3REb3dubG9hZFNvbmdzJiByZXF1ZXN0KTsKLSAgIHZvaWQgT2Zm ZXJOZXh0U29uZygpOwotICAgdm9pZCBTZW5kVG90YWxGaWxlU2l6ZSgpOwotICAgdm9pZCBUcmFu c2NvZGVMb3NzbGVzc0ZpbGVzKCk7Ci1kaWZmIC11ciB0ZXN0cy9zb25nX3Rlc3QuY3BwIHRlc3Rz L3NvbmdfdGVzdC5jcHAKLS0tLSBhL3Rlc3RzL3NvbmdfdGVzdC5jcHAJMjAyMC0wOS0yMyAyMjoz NDowOC4wMDAwMDAwMDAgLTA0MDAKLSsrKyBiL3Rlc3RzL3NvbmdfdGVzdC5jcHAJMjAyMS0wMi0x OSAxMjowMzo0OC4yNDA0NzMwNDYgLTA1MDAKLUBAIC00NSw3ICs0NSw3IEBACi0gICBzdGF0aWMg U29uZyBSZWFkU29uZ0Zyb21GaWxlKGNvbnN0IFFTdHJpbmcmIGZpbGVuYW1lKSB7Ci0gICAgIFRh Z1JlYWRlciB0YWdfcmVhZGVyOwotICAgICBTb25nIHNvbmc7Ci0tICAgIDo6cGI6OnRhZ3JlYWRl cjo6U29uZ01ldGFkYXRhIHBiX3Nvbmc7Ci0rICAgIDo6Y3BiOjp0YWdyZWFkZXI6OlNvbmdNZXRh ZGF0YSBwYl9zb25nOwotIAotICAgICAvLyBXZSBuZWVkIHRvIGluaXQgcHJvdG9idWYgb2JqZWN0 IGZyb20gYSBTb25nIG9iamVjdCwgdG8gaGF2ZSBkZWZhdWx0Ci0gICAgIC8vIHZhbHVlcyBpbml0 aWFsaXplZCBjb3JyZWN0bHkuIEZvciBleGFtcGxlLCBTb25nJ3MgcmF0aW5nIGlzIC0xIGJ5Ci1A QCAtNTksNyArNTksNyBAQAotIAotICAgc3RhdGljIHZvaWQgV3JpdGVTb25nVG9GaWxlKGNvbnN0 IFNvbmcmIHNvbmcsIGNvbnN0IFFTdHJpbmcmIGZpbGVuYW1lKSB7Ci0gICAgIFRhZ1JlYWRlciB0 YWdfcmVhZGVyOwotLSAgICA6OnBiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSBwYl9zb25nOwot KyAgICA6OmNwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRhdGEgcGJfc29uZzsKLSAgICAgc29uZy5U b1Byb3RvYnVmKCZwYl9zb25nKTsKLSAgICAgdGFnX3JlYWRlci5TYXZlRmlsZShmaWxlbmFtZSwg cGJfc29uZyk7Ci0gICB9Ci1AQCAtNjcsMTQgKzY3LDE0IEBACi0gICBzdGF0aWMgdm9pZCBXcml0 ZVNvbmdTdGF0aXN0aWNzVG9GaWxlKGNvbnN0IFNvbmcmIHNvbmcsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcmIGZpbGVuYW1lKSB7Ci0gICAg IFRhZ1JlYWRlciB0YWdfcmVhZGVyOwotLSAgICA6OnBiOjp0YWdyZWFkZXI6OlNvbmdNZXRhZGF0 YSBwYl9zb25nOwotKyAgICA6OmNwYjo6dGFncmVhZGVyOjpTb25nTWV0YWRhdGEgcGJfc29uZzsK LSAgICAgc29uZy5Ub1Byb3RvYnVmKCZwYl9zb25nKTsKLSAgICAgdGFnX3JlYWRlci5TYXZlU29u Z1N0YXRpc3RpY3NUb0ZpbGUoZmlsZW5hbWUsIHBiX3NvbmcpOwotICAgfQotIAotICAgc3RhdGlj IHZvaWQgV3JpdGVTb25nUmF0aW5nVG9GaWxlKGNvbnN0IFNvbmcmIHNvbmcsIGNvbnN0IFFTdHJp bmcmIGZpbGVuYW1lKSB7Ci0gICAgIFRhZ1JlYWRlciB0YWdfcmVhZGVyOwotLSAgICA6OnBiOjp0 YWdyZWFkZXI6OlNvbmdNZXRhZGF0YSBwYl9zb25nOwotKyAgICA6OmNwYjo6dGFncmVhZGVyOjpT b25nTWV0YWRhdGEgcGJfc29uZzsKLSAgICAgc29uZy5Ub1Byb3RvYnVmKCZwYl9zb25nKTsKLSAg ICAgdGFnX3JlYWRlci5TYXZlU29uZ1JhdGluZ1RvRmlsZShmaWxlbmFtZSwgcGJfc29uZyk7Ci0g ICB9CmRpZmYgLS1naXQgYS9zcmNwa2dzL2NsZW1lbnRpbmUvdGVtcGxhdGUgYi9zcmNwa2dzL2Ns ZW1lbnRpbmUvdGVtcGxhdGUKaW5kZXggZDg0OTJmYzFlZWQ0Li5hY2QwOTgxMjQ1MjkgMTAwNjQ0 Ci0tLSBhL3NyY3BrZ3MvY2xlbWVudGluZS90ZW1wbGF0ZQorKysgYi9zcmNwa2dzL2NsZW1lbnRp bmUvdGVtcGxhdGUKQEAgLTEsNDkgKzEsMjcgQEAKICMgVGVtcGxhdGUgZmlsZSBmb3IgJ2NsZW1l bnRpbmUnCiBwa2duYW1lPWNsZW1lbnRpbmUKIHZlcnNpb249MS40LjByYzEKLXJldmlzaW9uPTkK LV9mdWxsdmVyPSR2ZXJzaW9uLTM0My1nYjQ5YWZjYzViCityZXZpc2lvbj0xMAorX2Z1bGx2ZXI9 JHt2ZXJzaW9ufS04NzMtZzM0NzExMzRkNQogYnVpbGRfc3R5bGU9Y21ha2UKLWNvbmZpZ3VyZV9h cmdzPSItRFVTRV9TWVNURU1fVEFHTElCPU9OIC1EQlVJTERfV0VSUk9SPU9GRiAtRFVTRV9TWVNU RU1fUFJPSkVDVE09T04iCitjb25maWd1cmVfYXJncz0iLURVU0VfU1lTVEVNX1RBR0xJQj1PTiAt REJVSUxEX1dFUlJPUj1PRkYgLURVU0VfU1lTVEVNX1BST0pFQ1RNPU9OCisgLURGT1JDRV9HSVRf UkVWSVNJT049JHtfZnVsbHZlcn0iCiBob3N0bWFrZWRlcGVuZHM9ImdldHRleHQgc3BhcnNlaGFz aCBwa2ctY29uZmlnIHF0NS1xbWFrZSBxdDUtaG9zdC10b29scyBwcm90b2J1ZiIKIG1ha2VkZXBl bmRzPSJjaHJvbWFwcmludC1kZXZlbCBib29zdC1kZXZlbCBnc3QtcGx1Z2lucy1iYXNlMS1kZXZl bAogIHF0NS1kZXZlbCBnbGV3LWRldmVsIHNxbGl0ZS1kZXZlbCBwcm90b2J1Zi1kZXZlbCBsaWJw bGlzdC1kZXZlbAogIGxpYnVzYm11eGQtZGV2ZWwgbGlibXRwLWRldmVsIGxpYmNkaW8tZGV2ZWwg cHVsc2VhdWRpby1kZXZlbCBnbHUtZGV2ZWwKLSB0YWdsaWItZGV2ZWwgY3J5cHRvKystZGV2ZWwg JCh2b3B0X2lmIHNwb3RpZnkgbGlic3BvdGlmeS1kZXZlbCkKLSBsaWJncG9kLWRldmVsIGxpYm15 Z3BvLXF0LWRldmVsIHF0NS14MTFleHRyYXMtZGV2ZWwgcXQ1LXBsdWdpbi1teXNxbAotIHF0NS1w bHVnaW4tcGdzcWwgcXQ1LXBsdWdpbi1zcWxpdGUgcXQ1LXBsdWdpbi10ZHMgcXQ1LXBsdWdpbi1v ZGJjCi0gcXQ1LXRvb2xzLWRldmVsIGxpYmxhc3RmbS1xdDUtZGV2ZWwgcHJvamVjdE0tZGV2ZWwi CisgdGFnbGliLWRldmVsIGNyeXB0bysrLWRldmVsIGxpYmdwb2QtZGV2ZWwgbGlibXlncG8tcXQt ZGV2ZWwKKyBxdDUteDExZXh0cmFzLWRldmVsIHF0NS1wbHVnaW4tbXlzcWwgcXQ1LXBsdWdpbi1w Z3NxbCBxdDUtcGx1Z2luLXNxbGl0ZQorIHF0NS1wbHVnaW4tdGRzIHF0NS1wbHVnaW4tb2RiYyBx dDUtdG9vbHMtZGV2ZWwgbGlibGFzdGZtLXF0NS1kZXZlbAorIHByb2plY3RNLWRldmVsIgogZGVw ZW5kcz0iZGVza3RvcC1maWxlLXV0aWxzIgogc2hvcnRfZGVzYz0iTW9kZXJuIG11c2ljIHBsYXll ciBhbmQgbGlicmFyeSBvcmdhbml6ZXIiCiBtYWludGFpbmVyPSJBbmRyZWEgQnJhbmNhbGVvbmkg PGFiY0Bwb21wZWwubWU+IgogbGljZW5zZT0iR1BMLTMuMC1vci1sYXRlciIKIGhvbWVwYWdlPSJo dHRwczovL3d3dy5jbGVtZW50aW5lLXBsYXllci5vcmcvIgotZGlzdGZpbGVzPSJodHRwczovL2dp dGh1Yi5jb20vY2xlbWVudGluZS1wbGF5ZXIvQ2xlbWVudGluZS9yZWxlYXNlcy9kb3dubG9hZC8k e19mdWxsdmVyfS8ke3BrZ25hbWV9LSR7X2Z1bGx2ZXJ9LnRhci54eiIKLWNoZWNrc3VtPWUxZmEy NDgyYjgxMzM2MjgyYTM2YTU0NTFhMDIxN2MyNzRlNWI0NWFhM2VlZWQ4M2ZlM2ZkMjlhNWRmNTkz OTcKLWJ1aWxkX29wdGlvbnM9InNwb3RpZnkiCi0KLWNhc2UgIiRYQlBTX1RBUkdFVF9NQUNISU5F IiBpbgotCXg4Nl82NCB8IGk2ODYgfCBhcm12N2wpCi0JCWJ1aWxkX29wdGlvbnNfZGVmYXVsdD0i c3BvdGlmeSI7OwotCSopCi0JCWlmIFsgIiRidWlsZF9vcHRpb25fc3BvdGlmeSIgXTsgdGhlbgot CQkJYnJva2VuPSJubyBzcG90aWZ5IGJsb2IiCi0JCWZpCi0JCTs7Ci1lc2FjCi0KLXN1YnBhY2th Z2VzPSIkKHZvcHRfaWYgc3BvdGlmeSBjbGVtZW50aW5lLXNwb3RpZnkpIgorZGlzdGZpbGVzPSJo dHRwczovL2dpdGh1Yi5jb20vY2xlbWVudGluZS1wbGF5ZXIvQ2xlbWVudGluZS9yZWxlYXNlcy9k b3dubG9hZC8ke19mdWxsdmVyfS9jbGVtZW50aW5lLSR7X2Z1bGx2ZXJ9LnRhci54eiIKK2NoZWNr c3VtPWUwNDZmYjc2Y2NhN2Y3YzY5ZTYxZmU0NDVlODI4MTQ2YWI0NGYxMGYyZmY3NzQ3Yjk3YWRj OTQ3NTAwYTU2YjYKIAogcG9zdF9pbnN0YWxsKCkgewogCXJtIC1yZiAkREVTVERJUi9idWlsZGRp cgogfQotCi1jbGVtZW50aW5lLXNwb3RpZnlfcGFja2FnZSgpIHsKLQlkZXBlbmRzPSIke3NvdXJj ZXBrZ30+PSR7dmVyc2lvbn1fJHtyZXZpc2lvbn0iCi0Jc2hvcnRfZGVzYys9IiAtIHNwb3RpZnkg ZXh0ZW5zaW9uIgotCWxpY2Vuc2U9IkFwYWNoZS0yLjAiCi0JcmVwb3NpdG9yeT0ibm9uZnJlZSIK LQlwa2dfaW5zdGFsbCgpIHsKLQkJdm1vdmUgdXNyL2Jpbi9jbGVtZW50aW5lLXNwb3RpZnlibG9i Ci0JfQotfQoKRnJvbSA0MjQxZjkwMGZiZDY5MGQyNmZkZTA5NmU1Njc4MzMwODU5NTM5YjQ2IE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBtaG1kYW5hcyA8dHJpYWxsYXhAdHV0YW5vdGEu Y29tPgpEYXRlOiBGcmksIDI0IE1hciAyMDIzIDE5OjE3OjI3ICswMDAwClN1YmplY3Q6IFtQQVRD SCA1LzVdIHJlbW92ZWQtcGFja2FnZXM6IHJlbW92ZSBsaWJzcG90aWZ5IGFuZCBmcmllbmRzLgoK LS0tCiBzcmNwa2dzL3JlbW92ZWQtcGFja2FnZXMvdGVtcGxhdGUgfCA3ICsrKysrKy0KIDEgZmls ZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9z cmNwa2dzL3JlbW92ZWQtcGFja2FnZXMvdGVtcGxhdGUgYi9zcmNwa2dzL3JlbW92ZWQtcGFja2Fn ZXMvdGVtcGxhdGUKaW5kZXggZjMyNDhhODUyYTI4Li4wM2Q3ZGJlODA3MTMgMTAwNjQ0Ci0tLSBh L3NyY3BrZ3MvcmVtb3ZlZC1wYWNrYWdlcy90ZW1wbGF0ZQorKysgYi9zcmNwa2dzL3JlbW92ZWQt cGFja2FnZXMvdGVtcGxhdGUKQEAgLTEsNiArMSw2IEBACiAjIFRlbXBsYXRlIGZpbGUgZm9yICdy ZW1vdmVkLXBhY2thZ2VzJwogcGtnbmFtZT1yZW1vdmVkLXBhY2thZ2VzCi12ZXJzaW9uPTAuMS4y MDIzMDIxNAordmVyc2lvbj0wLjEuMjAyMzAzMjQKIHJldmlzaW9uPTEKIGJ1aWxkX3N0eWxlPW1l dGEKIHNob3J0X2Rlc2M9IlVuaW5zdGFsbHMgcGFja2FnZXMgcmVtb3ZlZCBmcm9tIHJlcG9zaXRv cnkiCkBAIC01Niw2ICs1Niw3IEBAIHJlcGxhY2VzPSIKICBjZWxlc3RpYS1ndGs8PTEuNi4xXzUK ICBjZ21pbmVyPD00LjExLjFfMQogIGNsYW16PD0wLjVfNAorIGNsZW1lbnRpbmUtc3BvdGlmeTw9 MS40LjByYzEtMzQzLWdiNDlhZmNjNWIKICBjb21wdG9uLWNvbmY8PTAuMTUuMF8xCiAgY291Y2hk Yjw9MS43LjFfMgogIGNvdWNocG90YXRvPD0zLjAuMV8zCkBAIC0yOTYsNiArMjk3LDggQEAgcmVw bGFjZXM9IgogIGxpYnJwY3NlY2dzczw9MC4xOV82CiAgbGlic2hpYm9rZW4tcHl0aG9uMzw9NS4x NS4wXzMKICBsaWJzcGEtZmZtcGVnPD0wLjMuMzJfMQorIGxpYnNwb3RpZnktZGV2ZWw8PTEyLjEu NTFfMgorIGxpYnNwb3RpZnk8PTEyLjEuNTFfMgogIGxpYnVuaXF1ZS1kZXZlbDw9My4wLjJfMTEK ICBsaWJ1bmlxdWUxLWRldmVsPD0xLjEuNl8xMgogIGxpYnVuaXF1ZTE8PTEuMS42XzEyCkBAIC0z MjQsNiArMzI3LDcgQEAgcmVwbGFjZXM9IgogIG1pcm8tdmlkZW8tY29udmVydGVyPD0zLjAuMl8z CiAgbWlycm9yYml0czw9MC41LjFfMQogIG1vbmdyb3VwPD0wLjQuMV8yCisgbW9waWR5LXNwb3Rp Znk8PTQuMC4xXzUKICBtb3pqczY4PD02OC4xMS4wXzEKICBtb3pqczkxLWRldmVsPD05MS43LjFf MwogIG1vempzOTE8PTkxLjcuMV8zCkBAIC00NTcsNiArNDYxLDcgQEAgcmVwbGFjZXM9IgogIHB5 dGhvbjMtcHllbmV0PD01LjE1LjBfMgogIHB5dGhvbjMtcHlzaWRlLXBob25vbjw9NS4xNS4wXzIK ICBweXRob24zLXB5c2lkZTw9NS4xNS4wXzIKKyBweXRob24zLXB5c3BvdGlmeTw9Mi4xLjNfNQog IHB5dGhvbjMtc2hpYm9rZW48PTUuMTUuMF8zCiAgcHl0aG9uMy1zbmFrZW9pbC1kZXZlbDw9MC44 LjhfNAogIHB5dGhvbjMtdHhhY21lPD0wLjkuM18zCg== --===============1991443572477794327==--