From nobody Sat Jul 13 19:57:30 2024 X-Original-To: elastic@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4WLzlW4KF2z5R253 for ; Sat, 13 Jul 2024 19:57:43 +0000 (UTC) (envelope-from samm@freebsd.org) Received: from reindeer.net-art.cz (reindeer.net-art.cz [IPv6:2001:15e8:110:513c::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "reindeer.net-art.cz", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4WLzlV2157z42j7 for ; Sat, 13 Jul 2024 19:57:42 +0000 (UTC) (envelope-from samm@freebsd.org) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=fail reason="No valid SPF, No valid DKIM" header.from=freebsd.org (policy=none); spf=softfail (mx1.freebsd.org: 2001:15e8:110:513c::1 is neither permitted nor denied by domain of samm@freebsd.org) smtp.mailfrom=samm@freebsd.org Received: by reindeer.net-art.cz (Postfix, from userid 65534) id 2C62C5F124; Sat, 13 Jul 2024 20:57:37 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on reindeer X-Spam-Level: X-Spam-Status: No, score=-0.2 required=10.0 tests=BAYES_00,DMARC_NONE, SPF_HELO_NONE,SPF_SOFTFAIL,URIBL_SBL_A autolearn=no autolearn_force=no version=4.0.0 Received: from owl.net-art.cz (owl.net-art.cz [IPv6:2a03:6920:0:10::101]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client CN "owl.net-art.cz", Issuer "R3" (not verified)) by reindeer.net-art.cz (Postfix) with ESMTPS id 013E65EF0F for ; Sat, 13 Jul 2024 20:57:34 +0100 (BST) Received: from [185.71.233.107] (account samm@net-art.cz HELO [192.168.101.116]) by owl.net-art.cz (CommuniGate Pro SMTP 6.1.20) with ESMTPSA id 2540142 for elastic@FreeBSD.org; Sat, 13 Jul 2024 21:57:33 +0200 Content-Type: multipart/mixed; boundary="------------WqunSiK08hJ8YrcC72nHlyo1" Message-ID: <69051943-d83f-4663-9a7a-fe6f1d096a26@freebsd.org> Date: Sat, 13 Jul 2024 21:57:30 +0200 List-Id: Support of ElasticSearch-related ports List-Archive: https://lists.freebsd.org/archives/freebsd-elastic List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-elastic@FreeBSD.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: elastic@FreeBSD.org From: Alex Samorukov Subject: Beats update X-Spamd-Bar: - X-Spamd-Result: default: False [-1.94 / 15.00]; MIME_BASE64_TEXT_BOGUS(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-0.96)[-0.960]; NEURAL_HAM_SHORT(-0.89)[-0.891]; RCVD_IN_DNSWL_MED(-0.20)[2001:15e8:110:513c::1:from]; MIME_GOOD(-0.10)[multipart/mixed,text/plain]; DMARC_POLICY_SOFTFAIL(0.10)[freebsd.org : No valid SPF, No valid DKIM,none]; MIME_BASE64_TEXT(0.10)[]; XM_UA_NO_VERSION(0.01)[]; HAS_ATTACHMENT(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; RCVD_TLS_LAST(0.00)[]; RCVD_COUNT_THREE(0.00)[3]; FROM_HAS_DN(0.00)[]; ASN(0.00)[asn:24806, ipnet:2001:15e8::/32, country:CZ]; ARC_NA(0.00)[]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[elastic@freebsd.org]; R_SPF_SOFTFAIL(0.00)[~all]; FROM_EQ_ENVFROM(0.00)[]; FREEFALL_USER(0.00)[samm]; MLMMJ_DEST(0.00)[elastic@freebsd.org]; MID_RHS_MATCH_FROM(0.00)[]; R_DKIM_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; TO_DOM_EQ_FROM_DOM(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:+] X-Rspamd-Queue-Id: 4WLzlV2157z42j7 This is a multi-part message in MIME format. --------------WqunSiK08hJ8YrcC72nHlyo1 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Dear elastic, I found that beats8 port is broken due to go-sysinfo version which fails on gethost call on startup. I patched port and updated it to the latest version. Patch is attached. Please update the port. Oleksij --------------WqunSiK08hJ8YrcC72nHlyo1 Content-Type: text/plain; charset=UTF-8; name="patch-beats.diff" Content-Disposition: attachment; filename="patch-beats.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3N5c3V0aWxzL2JlYXRzOC9NYWtlZmlsZSBiL3N5c3V0aWxzL2JlYXRz OC9NYWtlZmlsZQppbmRleCA2M2MyMjg3ZjkxZTMuLjliOWY0NjI1OTczNCAxMDA2NDQKLS0t IGEvc3lzdXRpbHMvYmVhdHM4L01ha2VmaWxlCisrKyBiL3N5c3V0aWxzL2JlYXRzOC9NYWtl ZmlsZQpAQCAtMSw3ICsxLDYgQEAKIFBPUlROQU1FPQliZWF0cwogRElTVFZFUlNJT05QUkVG SVg9CXYKLURJU1RWRVJTSU9OPQk4LjguMgotUE9SVFJFVklTSU9OPQk5CitESVNUVkVSU0lP Tj0JOC4xNC4zCiBDQVRFR09SSUVTPQlzeXN1dGlscwogTUFTVEVSX1NJVEVTPQlodHRwczov L3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vJHtHSF9BQ0NPVU5UfS8ke0dIX1BST0pFQ1R9 LyR7RElTVFZFUlNJT05GVUxMfS86Z29tb2QKIFBLR05BTUVTVUZGSVg/PQk4CmRpZmYgLS1n aXQgYS9zeXN1dGlscy9iZWF0czgvZGlzdGluZm8gYi9zeXN1dGlscy9iZWF0czgvZGlzdGlu Zm8KaW5kZXggN2Y2NDI5ZTExNjljLi4zM2QzMmU5NTQxMGIgMTAwNjQ0Ci0tLSBhL3N5c3V0 aWxzL2JlYXRzOC9kaXN0aW5mbworKysgYi9zeXN1dGlscy9iZWF0czgvZGlzdGluZm8KQEAg LTEsMTUgKzEsNyBAQAotVElNRVNUQU1QID0gMTY4ODg5NDEzMgotU0hBMjU2IChnby9zeXN1 dGlsc19iZWF0czgvZWxhc3RpYy1iZWF0cy12OC44LjJfR0gwL2dvLm1vZCkgPSAyMzYzMGFh NTQ4YWViYmUwMDIzNmIzYWQ2ZTE1NTA4YWNmZWM4ZGJhZTY4M2QwZDVlOTQ3NmU0OTc3Njkw M2NjCi1TSVpFIChnby9zeXN1dGlsc19iZWF0czgvZWxhc3RpYy1iZWF0cy12OC44LjJfR0gw L2dvLm1vZCkgPSAxOTMxNwotU0hBMjU2IChnby9zeXN1dGlsc19iZWF0czgvZWxhc3RpYy1i ZWF0cy12OC44LjJfR0gwL2F1ZGl0YmVhdC04LjguMi1kYXJ3aW4teDg2XzY0LnRhci5neikg PSBlNjBlNTEzMWMyMzQzMWY1YzA2Zjk4OWNkNGYxYTRmMjU0MGE4NjFiNzU5NjRkNjIxZGVh OTc5NDk2YTllMWU5Ci1TSVpFIChnby9zeXN1dGlsc19iZWF0czgvZWxhc3RpYy1iZWF0cy12 OC44LjJfR0gwL2F1ZGl0YmVhdC04LjguMi1kYXJ3aW4teDg2XzY0LnRhci5neikgPSAyODM2 ODkzNQotU0hBMjU2IChnby9zeXN1dGlsc19iZWF0czgvZWxhc3RpYy1iZWF0cy12OC44LjJf R0gwL2ZpbGViZWF0LTguOC4yLWRhcndpbi14ODZfNjQudGFyLmd6KSA9IGE3ZTEzMTM4N2My NzdjOTIyM2M5YjIzNTZlOTQ0NDUwYzM4ZGJhYWVkZjA2OWEwNTIxY2E3NWI0MGYwYTZjNzQK LVNJWkUgKGdvL3N5c3V0aWxzX2JlYXRzOC9lbGFzdGljLWJlYXRzLXY4LjguMl9HSDAvZmls ZWJlYXQtOC44LjItZGFyd2luLXg4Nl82NC50YXIuZ3opID0gMzg2NjkzNjIKLVNIQTI1NiAo Z28vc3lzdXRpbHNfYmVhdHM4L2VsYXN0aWMtYmVhdHMtdjguOC4yX0dIMC9oZWFydGJlYXQt OC44LjItZGFyd2luLXg4Nl82NC50YXIuZ3opID0gMGNjMzU4NWI5ZTg1ZDA5NDQxYjc0NmEz ZDgxMjg0OWY1MDcyN2QyZjU3ZjgyMWJmZWEwMWM5MzZkYzAwM2JiNAotU0laRSAoZ28vc3lz dXRpbHNfYmVhdHM4L2VsYXN0aWMtYmVhdHMtdjguOC4yX0dIMC9oZWFydGJlYXQtOC44LjIt ZGFyd2luLXg4Nl82NC50YXIuZ3opID0gMjgyNzgxMjUKLVNIQTI1NiAoZ28vc3lzdXRpbHNf YmVhdHM4L2VsYXN0aWMtYmVhdHMtdjguOC4yX0dIMC9tZXRyaWNiZWF0LTguOC4yLWRhcndp bi14ODZfNjQudGFyLmd6KSA9IDJkZTRjMWU2MDU3ZmE1YWFlMzU0YzUxMWY2ZDZhMDU1Mzkx MzU3M2YyNjNkZmU1YTZlYTBjNWI0ZmI1OTExNmUKLVNJWkUgKGdvL3N5c3V0aWxzX2JlYXRz OC9lbGFzdGljLWJlYXRzLXY4LjguMl9HSDAvbWV0cmljYmVhdC04LjguMi1kYXJ3aW4teDg2 XzY0LnRhci5neikgPSA0Mzc0Mzc2OQotU0hBMjU2IChnby9zeXN1dGlsc19iZWF0czgvZWxh c3RpYy1iZWF0cy12OC44LjJfR0gwL3BhY2tldGJlYXQtOC44LjItZGFyd2luLXg4Nl82NC50 YXIuZ3opID0gZGJmNTk2NDNkZDA2YmM3NTY2MzI1OWIwMTFlOTgwMTAzZWU0NDgwMTdmYTc3 MzE2Mzc5Mjg0NGQ3MjZmYTk0ZAotU0laRSAoZ28vc3lzdXRpbHNfYmVhdHM4L2VsYXN0aWMt YmVhdHMtdjguOC4yX0dIMC9wYWNrZXRiZWF0LTguOC4yLWRhcndpbi14ODZfNjQudGFyLmd6 KSA9IDI5NjUyMzkxCi1TSEEyNTYgKGdvL3N5c3V0aWxzX2JlYXRzOC9lbGFzdGljLWJlYXRz LXY4LjguMl9HSDAvZWxhc3RpYy1iZWF0cy12OC44LjJfR0gwLnRhci5neikgPSA3Zjg1ZWY3 MGNmYTg0ZTk5NTlhODAzZTFjYzQ5MGQyYTNkZWE3YmQyMzkwMmUzYzk5MmJiZWFlYzlkOGRh ZjBhCi1TSVpFIChnby9zeXN1dGlsc19iZWF0czgvZWxhc3RpYy1iZWF0cy12OC44LjJfR0gw L2VsYXN0aWMtYmVhdHMtdjguOC4yX0dIMC50YXIuZ3opID0gMTE1NTk0Mjg4CitUSU1FU1RB TVAgPSAxNzIwODk4MzIzCitTSEEyNTYgKGdvL3N5c3V0aWxzX2JlYXRzOC9lbGFzdGljLWJl YXRzLXY4LjE0LjNfR0gwL2dvLm1vZCkgPSA1YWM1M2Q3MmVjMDQ3Njg1MjU3ZTMwNTA1NWE2 MWMwZmU1OGRkNjRmYTQ4MDk0MDFiY2E0ZTljZDgyMDc2NWQxCitTSVpFIChnby9zeXN1dGls c19iZWF0czgvZWxhc3RpYy1iZWF0cy12OC4xNC4zX0dIMC9nby5tb2QpID0gMjIyODUKK1NI QTI1NiAoZ28vc3lzdXRpbHNfYmVhdHM4L2VsYXN0aWMtYmVhdHMtdjguMTQuM19HSDAvZmls ZWJlYXQtOC4xNC4zLWRhcndpbi14ODZfNjQudGFyLmd6KSA9IDQwZjFiOTEzZWFlZGU0M2Fm Y2Y3M2NiNjY5YjRkYjU3Zjk4ZjExNDdmNTJmZGE3YmZlZTA3NTJlYjAzMjU2NTEKK1NJWkUg KGdvL3N5c3V0aWxzX2JlYXRzOC9lbGFzdGljLWJlYXRzLXY4LjE0LjNfR0gwL2ZpbGViZWF0 LTguMTQuMy1kYXJ3aW4teDg2XzY0LnRhci5neikgPSA0NDIyNjAwNAorU0hBMjU2IChnby9z eXN1dGlsc19iZWF0czgvZWxhc3RpYy1iZWF0cy12OC4xNC4zX0dIMC9lbGFzdGljLWJlYXRz LXY4LjE0LjNfR0gwLnRhci5neikgPSAxNDZmY2QxZDdhOWVhOTUxZTM2MjY2MmM5ZDQzYmZk NjViYmRmYWQzZTU4ZGMzMTU1NzNiZDZlNjIwNjVlOGZlCitTSVpFIChnby9zeXN1dGlsc19i ZWF0czgvZWxhc3RpYy1iZWF0cy12OC4xNC4zX0dIMC9lbGFzdGljLWJlYXRzLXY4LjE0LjNf R0gwLnRhci5neikgPSAxMTIyNTgwMjMKZGlmZiAtLWdpdCBhL3N5c3V0aWxzL2JlYXRzOC9m aWxlcy9wYXRjaC1kZXYtdG9vbHNfbWFnZV9zZXR0aW5ncy5nbyBiL3N5c3V0aWxzL2JlYXRz OC9maWxlcy9wYXRjaC1kZXYtdG9vbHNfbWFnZV9zZXR0aW5ncy5nbwppbmRleCBkYjhjOWVk NGNiZTEuLjg2ZTQ3MGY5MDMxNSAxMDA2NDQKLS0tIGEvc3lzdXRpbHMvYmVhdHM4L2ZpbGVz L3BhdGNoLWRldi10b29sc19tYWdlX3NldHRpbmdzLmdvCisrKyBiL3N5c3V0aWxzL2JlYXRz OC9maWxlcy9wYXRjaC1kZXYtdG9vbHNfbWFnZV9zZXR0aW5ncy5nbwpAQCAtMSwyMCArMSwy MCBAQAotLS0tIGRldi10b29scy9tYWdlL3NldHRpbmdzLmdvLm9yaWcJMjAyMi0wOS0yNyAx MzoxOToyNyBVVEMKLSsrKyBkZXYtdG9vbHMvbWFnZS9zZXR0aW5ncy5nbwotQEAgLTMwLDcg KzMwLDYgQEAgaW1wb3J0ICgKKy0tLSBkZXYtdG9vbHMvbWFnZS9zZXR0aW5ncy5nby5vcmln CTIwMjQtMDctMDkgMDA6MDA6MzYuMDAwMDAwMDAwICswMjAwCisrKysgZGV2LXRvb2xzL21h Z2Uvc2V0dGluZ3MuZ28JMjAyNC0wNy0xMyAyMToyNjoxOS4zODM3NjgwMDAgKzAyMDAKK0BA IC0zMSw3ICszMSw2IEBACiAgCSJzeW5jIgogIAkidGltZSIKICAKIC0JImdpdGh1Yi5jb20v bWFnZWZpbGUvbWFnZS9zaCIKLSAJImdpdGh1Yi5jb20vcGtnL2Vycm9ycyIKICAJImdvbGFu Zy5vcmcveC90b29scy9nby92Y3MiCiAgCi1AQCAtMjQ5LDcgKzI0OCw4IEBAIHZhciAoCisg CSJnaXRodWIuY29tL2VsYXN0aWMvYmVhdHMvdjcvZGV2LXRvb2xzL21hZ2UvZ290b29sIgor QEAgLTI1MSw3ICsyNTAsOCBAQAogIGZ1bmMgQ29tbWl0SGFzaCgpIChzdHJpbmcsIGVycm9y KSB7CiAgCXZhciBlcnIgZXJyb3IKICAJY29tbWl0SGFzaE9uY2UuRG8oZnVuYygpIHsKIC0J CWNvbW1pdEhhc2gsIGVyciA9IHNoLk91dHB1dCgiZ2l0IiwgInJldi1wYXJzZSIsICJIRUFE IikKICsJCWVyciA9IG5pbAotKwkJY29tbWl0SGFzaCA9ICIlJUJFQVRTVkVSU0lPTiUlIgor KwkJY29tbWl0SGFzaCA9ICJ2OC4xNC4zIgogIAl9KQogIAlyZXR1cm4gY29tbWl0SGFzaCwg ZXJyCiAgfQpkaWZmIC0tZ2l0IGEvc3lzdXRpbHMvYmVhdHM4L2ZpbGVzL3BhdGNoLWdvLXN5 c2luZm8gYi9zeXN1dGlscy9iZWF0czgvZmlsZXMvcGF0Y2gtZ28tc3lzaW5mbwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjI0MGE1OTYzM2MzOAotLS0gL2Rl di9udWxsCisrKyBiL3N5c3V0aWxzL2JlYXRzOC9maWxlcy9wYXRjaC1nby1zeXNpbmZvCkBA IC0wLDAgKzEsMTMyNyBAQAorZGlmZiAtdXJOIHZlbmRvci5vcmlnL2dpdGh1Yi5jb20vZWxh c3RpYy9nby1zeXNpbmZvL2ludGVybmFsL2Nnby9kaXNhYmxlZC5nbyB2ZW5kb3IvZ2l0aHVi LmNvbS9lbGFzdGljL2dvLXN5c2luZm8vaW50ZXJuYWwvY2dvL2Rpc2FibGVkLmdvCistLS0g dmVuZG9yLm9yaWcvZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vaW50ZXJuYWwvY2dv L2Rpc2FibGVkLmdvCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysg dmVuZG9yL2dpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL2ludGVybmFsL2Nnby9kaXNh YmxlZC5nbwkyMDI0LTA3LTEzIDIwOjI4OjM2LjA2MDg4MjAwMCArMDIwMAorQEAgLTAsMCAr MSwyMyBAQAorKy8vIExpY2Vuc2VkIHRvIEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmUg b3IgbW9yZSBjb250cmlidXRvcgorKy8vIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBO T1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCisrLy8gdGhpcyB3b3JrIGZvciBhZGRpdGlv bmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQKKysvLyBvd25lcnNoaXAuIEVs YXN0aWNzZWFyY2ggQi5WLiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8geW91IHVuZGVyCisrLy8g dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBt YXkKKysvLyBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo ZSBMaWNlbnNlLgorKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBh dAorKy8vCisrLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF LTIuMAorKy8vCisrLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn cmVlZCB0byBpbiB3cml0aW5nLAorKy8vIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRo ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisrLy8gIkFTIElTIiBCQVNJUywgV0lU SE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisrLy8gS0lORCwgZWl0aGVy IGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisrLy8gc3Bl Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwor Ky8vIHVuZGVyIHRoZSBMaWNlbnNlLgorKworKy8vZ286YnVpbGQgIWNnbworKworK3BhY2th Z2UgY2dvCisrCisrLy8gRW5hYmxlZCBpcyB0cnVlIGlmIGNnbyB3YXMgZW5hYmxlZCBhdCBj b21waWxlLXRpbWUuCisrY29uc3QgRW5hYmxlZCA9IGZhbHNlCitkaWZmIC11ck4gdmVuZG9y Lm9yaWcvZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vaW50ZXJuYWwvY2dvL2VuYWJs ZWQuZ28gdmVuZG9yL2dpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL2ludGVybmFsL2Nn by9lbmFibGVkLmdvCistLS0gdmVuZG9yLm9yaWcvZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5 c2luZm8vaW50ZXJuYWwvY2dvL2VuYWJsZWQuZ28JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAw MDAwMDAgKzAxMDAKKysrKyB2ZW5kb3IvZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8v aW50ZXJuYWwvY2dvL2VuYWJsZWQuZ28JMjAyNC0wNy0xMyAyMDoyODozNi4wNjA5NTMwMDAg KzAyMDAKK0BAIC0wLDAgKzEsMjMgQEAKKysvLyBMaWNlbnNlZCB0byBFbGFzdGljc2VhcmNo IEIuVi4gdW5kZXIgb25lIG9yIG1vcmUgY29udHJpYnV0b3IKKysvLyBsaWNlbnNlIGFncmVl bWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorKy8vIHRoaXMg d29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0Cisr Ly8gb3duZXJzaGlwLiBFbGFzdGljc2VhcmNoIEIuVi4gbGljZW5zZXMgdGhpcyBmaWxlIHRv IHlvdSB1bmRlcgorKy8vIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAi TGljZW5zZSIpOyB5b3UgbWF5CisrLy8gbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKysvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkg b2YgdGhlIExpY2Vuc2UgYXQKKysvLworKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcv bGljZW5zZXMvTElDRU5TRS0yLjAKKysvLworKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBs aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKysvLyBzb2Z0d2FyZSBkaXN0 cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKy8vICJB UyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQor Ky8vIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2Ug Zm9yIHRoZQorKy8vIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh bmQgbGltaXRhdGlvbnMKKysvLyB1bmRlciB0aGUgTGljZW5zZS4KKysKKysvL2dvOmJ1aWxk IGNnbworKworK3BhY2thZ2UgY2dvCisrCisrLy8gRW5hYmxlZCBpcyB0cnVlIGlmIGNnbyB3 YXMgZW5hYmxlZCBhdCBjb21waWxlLXRpbWUuCisrY29uc3QgRW5hYmxlZCA9IHRydWUKK2Rp ZmYgLXVyTiB2ZW5kb3Iub3JpZy9naXRodWIuY29tL2VsYXN0aWMvZ28tc3lzaW5mby9wcm92 aWRlcnMvZnJlZWJzZC9kZWZzX2ZyZWVic2QuZ28gdmVuZG9yL2dpdGh1Yi5jb20vZWxhc3Rp Yy9nby1zeXNpbmZvL3Byb3ZpZGVycy9mcmVlYnNkL2RlZnNfZnJlZWJzZC5nbworLS0tIHZl bmRvci5vcmlnL2dpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL3Byb3ZpZGVycy9mcmVl YnNkL2RlZnNfZnJlZWJzZC5nbwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEw MAorKysrIHZlbmRvci9naXRodWIuY29tL2VsYXN0aWMvZ28tc3lzaW5mby9wcm92aWRlcnMv ZnJlZWJzZC9kZWZzX2ZyZWVic2QuZ28JMjAyNC0wNy0xMyAyMDoyODozNi4wNjUxMDYwMDAg KzAyMDAKK0BAIC0wLDAgKzEsMzMgQEAKKysvLyBMaWNlbnNlZCB0byBFbGFzdGljc2VhcmNo IEIuVi4gdW5kZXIgb25lIG9yIG1vcmUgY29udHJpYnV0b3IKKysvLyBsaWNlbnNlIGFncmVl bWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorKy8vIHRoaXMg d29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0Cisr Ly8gb3duZXJzaGlwLiBFbGFzdGljc2VhcmNoIEIuVi4gbGljZW5zZXMgdGhpcyBmaWxlIHRv IHlvdSB1bmRlcgorKy8vIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAi TGljZW5zZSIpOyB5b3UgbWF5CisrLy8gbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKysvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkg b2YgdGhlIExpY2Vuc2UgYXQKKysvLworKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcv bGljZW5zZXMvTElDRU5TRS0yLjAKKysvLworKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBs aWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKysvLyBzb2Z0d2FyZSBkaXN0 cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKy8vICJB UyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQor Ky8vIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2Ug Zm9yIHRoZQorKy8vIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh bmQgbGltaXRhdGlvbnMKKysvLyB1bmRlciB0aGUgTGljZW5zZS4KKysKKysvL2dvOmJ1aWxk IGlnbm9yZQorKy8vICtidWlsZCBpZ25vcmUKKysKKytwYWNrYWdlIGZyZWVic2QKKysKKysv KgorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3ZtbWV0ZXIuaD4K KysjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKysjaW5jbHVkZSA8a3ZtLmg+CisrKi8KKytpbXBv cnQgIkMiCisrCisrdHlwZSBrdm1Td2FwIEMuc3RydWN0X2t2bV9zd2FwCisrCisrdHlwZSBj bG9ja0luZm8gQy5zdHJ1Y3RfY2xvY2tpbmZvCitkaWZmIC11ck4gdmVuZG9yLm9yaWcvZ2l0 aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vcHJvdmlkZXJzL2ZyZWVic2QvZG9jLmdvIHZl bmRvci9naXRodWIuY29tL2VsYXN0aWMvZ28tc3lzaW5mby9wcm92aWRlcnMvZnJlZWJzZC9k b2MuZ28KKy0tLSB2ZW5kb3Iub3JpZy9naXRodWIuY29tL2VsYXN0aWMvZ28tc3lzaW5mby9w cm92aWRlcnMvZnJlZWJzZC9kb2MuZ28JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAg KzAxMDAKKysrKyB2ZW5kb3IvZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vcHJvdmlk ZXJzL2ZyZWVic2QvZG9jLmdvCTIwMjQtMDctMTMgMjA6Mjg6MzYuMDY1MjAzMDAwICswMjAw CitAQCAtMCwwICsxLDIyIEBACisrLy8gTGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYu IHVuZGVyIG9uZSBvciBtb3JlIGNvbnRyaWJ1dG9yCisrLy8gbGljZW5zZSBhZ3JlZW1lbnRz LiBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKysvLyB0aGlzIHdvcmsg Zm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodAorKy8vIG93 bmVyc2hpcC4gRWxhc3RpY3NlYXJjaCBCLlYuIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byB5b3Ug dW5kZXIKKysvLyB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu c2UiKTsgeW91IG1heQorKy8vIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh bmNlIHdpdGggdGhlIExpY2Vuc2UuCisrLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo ZSBMaWNlbnNlIGF0CisrLy8KKysvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu c2VzL0xJQ0VOU0UtMi4wCisrLy8KKysvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJs ZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisrLy8gc29mdHdhcmUgZGlzdHJpYnV0 ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKysvLyAiQVMgSVMi IEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKysvLyBL SU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0 aGUKKysvLyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxp bWl0YXRpb25zCisrLy8gdW5kZXIgdGhlIExpY2Vuc2UuCisrCisrLy8gUGFja2FnZSBmcmVl YnNkIGltcGxlbWVudHMgdGhlIEhvc3RQcm92aWRlciBhbmQgUHJvY2Vzc1Byb3ZpZGVyIGlu dGVyZmFjZXMKKysvLyBmb3IgcHJvdmlkaW5nIGluZm9ybWF0aW9uIGFib3V0IEZyZWVCU0Qu CisrcGFja2FnZSBmcmVlYnNkCisrCisrLy9nbzpnZW5lcmF0ZSBzaCAtYyAiZ28gdG9vbCBj Z28gLWdvZGVmcyBkZWZzX2ZyZWVic2QuZ28gPiB6dHlwZXNfZnJlZWJzZC5nbyIKK2RpZmYg LXVyTiB2ZW5kb3Iub3JpZy9naXRodWIuY29tL2VsYXN0aWMvZ28tc3lzaW5mby9wcm92aWRl cnMvZnJlZWJzZC9ob3N0X2ZyZWVic2RfY2dvLmdvIHZlbmRvci9naXRodWIuY29tL2VsYXN0 aWMvZ28tc3lzaW5mby9wcm92aWRlcnMvZnJlZWJzZC9ob3N0X2ZyZWVic2RfY2dvLmdvCist LS0gdmVuZG9yLm9yaWcvZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vcHJvdmlkZXJz L2ZyZWVic2QvaG9zdF9mcmVlYnNkX2Nnby5nbwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAw MDAwMCArMDEwMAorKysrIHZlbmRvci9naXRodWIuY29tL2VsYXN0aWMvZ28tc3lzaW5mby9w cm92aWRlcnMvZnJlZWJzZC9ob3N0X2ZyZWVic2RfY2dvLmdvCTIwMjQtMDctMTMgMjA6Mjg6 MzYuMDY1MzE3MDAwICswMjAwCitAQCAtMCwwICsxLDIzOCBAQAorKy8vIExpY2Vuc2VkIHRv IEVsYXN0aWNzZWFyY2ggQi5WLiB1bmRlciBvbmUgb3IgbW9yZSBjb250cmlidXRvcgorKy8v IGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3 aXRoCisrLy8gdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGlu ZyBjb3B5cmlnaHQKKysvLyBvd25lcnNoaXAuIEVsYXN0aWNzZWFyY2ggQi5WLiBsaWNlbnNl cyB0aGlzIGZpbGUgdG8geW91IHVuZGVyCisrLy8gdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJz aW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKysvLyBub3QgdXNlIHRoaXMgZmls ZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKy8vIFlvdSBtYXkg b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKy8vCisrLy8gICAgIGh0dHA6Ly93 d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKy8vCisrLy8gVW5sZXNzIHJl cXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorKy8v IHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk IG9uIGFuCisrLy8gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ VElPTlMgT0YgQU5ZCisrLy8gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNl ZSB0aGUgTGljZW5zZSBmb3IgdGhlCisrLy8gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n IHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworKy8vIHVuZGVyIHRoZSBMaWNlbnNlLgor KworKy8vZ286YnVpbGQgZnJlZWJzZCAmJiBjZ28KKysKKytwYWNrYWdlIGZyZWVic2QKKysK KytpbXBvcnQgKAorKwkiY29udGV4dCIKKysJImVycm9ycyIKKysJIm9zIgorKwkicGF0aC9m aWxlcGF0aCIKKysJInRpbWUiCisrCisrCSJnaXRodWIuY29tL3Byb21ldGhldXMvcHJvY2Zz IgorKworKwkiZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vaW50ZXJuYWwvcmVnaXN0 cnkiCisrCSJnaXRodWIuY29tL2VsYXN0aWMvZ28tc3lzaW5mby9wcm92aWRlcnMvc2hhcmVk IgorKwkiZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vdHlwZXMiCisrKQorKworK2Z1 bmMgaW5pdCgpIHsKKysJcmVnaXN0cnkuUmVnaXN0ZXIobmV3RnJlZUJTRFN5c3RlbSgpKQor K30KKysKKyt0eXBlIGZyZWVic2RTeXN0ZW0gc3RydWN0e30KKysKKytmdW5jIG5ld0ZyZWVC U0RTeXN0ZW0oKSBmcmVlYnNkU3lzdGVtIHsKKysJcmV0dXJuIGZyZWVic2RTeXN0ZW17fQor K30KKysKKytmdW5jIChzIGZyZWVic2RTeXN0ZW0pIEhvc3QoKSAodHlwZXMuSG9zdCwgZXJy b3IpIHsKKysJcmV0dXJuIG5ld0hvc3QoKQorK30KKysKKyt0eXBlIGhvc3Qgc3RydWN0IHsK KysJcHJvY0ZTIHByb2NGUworKwlpbmZvICAgdHlwZXMuSG9zdEluZm8KKyt9CisrCisrZnVu YyAoaCAqaG9zdCkgSW5mbygpIHR5cGVzLkhvc3RJbmZvIHsKKysJcmV0dXJuIGguaW5mbwor K30KKysKKytmdW5jIChoICpob3N0KSBDUFVUaW1lKCkgKHR5cGVzLkNQVVRpbWVzLCBlcnJv cikgeworKwljcHUgOj0gdHlwZXMuQ1BVVGltZXN7fQorKwlyIDo9ICZyZWFkZXJ7fQorKwly LmNwdVRpbWUoJmNwdSkKKysJcmV0dXJuIGNwdSwgci5FcnIoKQorK30KKysKKytmdW5jICho ICpob3N0KSBNZW1vcnkoKSAoKnR5cGVzLkhvc3RNZW1vcnlJbmZvLCBlcnJvcikgeworKwlt IDo9ICZ0eXBlcy5Ib3N0TWVtb3J5SW5mb3t9CisrCXIgOj0gJnJlYWRlcnt9CisrCXIubWVt SW5mbyhtKQorKwlyZXR1cm4gbSwgci5FcnIoKQorK30KKysKKytmdW5jIChoICpob3N0KSBG UUROV2l0aENvbnRleHQoY3R4IGNvbnRleHQuQ29udGV4dCkgKHN0cmluZywgZXJyb3IpIHsK KysJcmV0dXJuIHNoYXJlZC5GUUROV2l0aENvbnRleHQoY3R4KQorK30KKysKKytmdW5jICho ICpob3N0KSBGUUROKCkgKHN0cmluZywgZXJyb3IpIHsKKysJcmV0dXJuIGguRlFETldpdGhD b250ZXh0KGNvbnRleHQuQmFja2dyb3VuZCgpKQorK30KKysKKytmdW5jIG5ld0hvc3QoKSAo Kmhvc3QsIGVycm9yKSB7CisrCWggOj0gJmhvc3R7fQorKwlyIDo9ICZyZWFkZXJ7fQorKwly LmFyY2hpdGVjdHVyZShoKQorKwlyLmJvb3RUaW1lKGgpCisrCXIuaG9zdG5hbWUoaCkKKysJ ci5uZXR3b3JrKGgpCisrCXIua2VybmVsVmVyc2lvbihoKQorKwlyLm9zKGgpCisrCXIudGlt ZShoKQorKwlyLnVuaXF1ZUlEKGgpCisrCXJldHVybiBoLCByLkVycigpCisrfQorKworK3R5 cGUgcmVhZGVyIHN0cnVjdCB7CisrCWVycnMgW11lcnJvcgorK30KKysKKytmdW5jIChyICpy ZWFkZXIpIGFkZEVycihlcnIgZXJyb3IpIGJvb2wgeworKwlpZiBlcnIgIT0gbmlsIHsKKysJ CWlmICFlcnJvcnMuSXMoZXJyLCB0eXBlcy5FcnJOb3RJbXBsZW1lbnRlZCkgeworKwkJCXIu ZXJycyA9IGFwcGVuZChyLmVycnMsIGVycikKKysJCX0KKysJCXJldHVybiB0cnVlCisrCX0K KysJcmV0dXJuIGZhbHNlCisrfQorKworK2Z1bmMgKHIgKnJlYWRlcikgRXJyKCkgZXJyb3Ig eworKwlyZXR1cm4gZXJyb3JzLkpvaW4oci5lcnJzLi4uKQorK30KKysKKytmdW5jIChyICpy ZWFkZXIpIGNwdVRpbWUoY3B1ICp0eXBlcy5DUFVUaW1lcykgeworKwl0aW1lcywgZXJyIDo9 IGNwdVN0YXRlVGltZXMoKQorKwlpZiByLmFkZEVycihlcnIpIHsKKysJCXJldHVybgorKwl9 CisrCSpjcHUgPSAqdGltZXMKKyt9CisrCisrZnVuYyAociAqcmVhZGVyKSBtZW1JbmZvKG0g KnR5cGVzLkhvc3RNZW1vcnlJbmZvKSB7CisrCS8vIE1lbW9yeSBjb3VudGVyIGNhbGN1bGF0 aW9uczoKKysJLy8gICB0b3RhbCA9IHBoeXNpY2FsIG1lbW9yeQorKwkvLyAgIHVzZWQgPSBh Y3RpdmUgKyB3aXJlZAorKwkvLyAgIGZyZWUgPSBmcmVlCisrCS8vICAgYXZhaWxhYmxlID0g YnVmZmVycyArIGluYWN0aXZlICsgY2FjaGUgKyBmcmVlCisrCisrCXBhZ2VTaXplLCBlcnIg Oj0gcGFnZVNpemVCeXRlcygpCisrCWlmIHIuYWRkRXJyKGVycikgeworKwkJcmV0dXJuCisr CX0KKysKKysJbS5Ub3RhbCA9IHRvdGFsUGh5c2ljYWxNZW0ocikKKysJYWN0aXZlUGFnZXMg Oj0gYWN0aXZlUGFnZUNvdW50KHIpCisrCisrCW0uTWV0cmljcyA9IG1ha2UobWFwW3N0cmlu Z111aW50NjQsIDYpCisrCW0uTWV0cmljc1siYWN0aXZlX2J5dGVzIl0gPSBhY3RpdmVQYWdl cyAqIHBhZ2VTaXplCisrCisrCXdpcmVQYWdlcyA6PSB3aXJlUGFnZUNvdW50KHIpCisrCW0u TWV0cmljc1sid2lyZWRfYnl0ZXMiXSA9IHdpcmVQYWdlcyAqIHBhZ2VTaXplCisrCisrCWlu YWN0aXZlUGFnZXMgOj0gaW5hY3RpdmVQYWdlQ291bnQocikKKysJbS5NZXRyaWNzWyJpbmFj dGl2ZV9ieXRlcyJdID0gaW5hY3RpdmVQYWdlcyAqIHBhZ2VTaXplCisrCisrCWNhY2hlUGFn ZXMgOj0gY2FjaGVQYWdlQ291bnQocikKKysJbS5NZXRyaWNzWyJjYWNoZV9ieXRlcyJdID0g Y2FjaGVQYWdlcyAqIHBhZ2VTaXplCisrCisrCWZyZWVQYWdlcyA6PSBmcmVlUGFnZUNvdW50 KHIpCisrCW0uTWV0cmljc1siZnJlZV9ieXRlcyJdID0gZnJlZVBhZ2VzICogcGFnZVNpemUK KysKKysJYnVmZmVycyA6PSBidWZmZXJzVXNlZEJ5dGVzKHIpCisrCW0uTWV0cmljc1siYnVm ZmVyX2J5dGVzIl0gPSBidWZmZXJzCisrCisrCW0uVXNlZCA9IChhY3RpdmVQYWdlcyArIHdp cmVQYWdlcykgKiBwYWdlU2l6ZQorKwltLkZyZWUgPSBmcmVlUGFnZXMgKiBwYWdlU2l6ZQor KwltLkF2YWlsYWJsZSA9IChpbmFjdGl2ZVBhZ2VzK2NhY2hlUGFnZXMrZnJlZVBhZ2VzKSpw YWdlU2l6ZSArIGJ1ZmZlcnMKKysKKysJLy8gVmlydHVhbCAoc3dhcCkgTWVtb3J5CisrCXN3 YXAsIGVyciA6PSBrdm1HZXRTd2FwSW5mbygpCisrCWlmIHIuYWRkRXJyKGVycikgeworKwkJ cmV0dXJuCisrCX0KKysKKysJbS5WaXJ0dWFsVG90YWwgPSB1aW50NjQoc3dhcC5Ub3RhbCkg KiBwYWdlU2l6ZQorKwltLlZpcnR1YWxVc2VkID0gdWludDY0KHN3YXAuVXNlZCkgKiBwYWdl U2l6ZQorKwltLlZpcnR1YWxGcmVlID0gbS5WaXJ0dWFsVG90YWwgLSBtLlZpcnR1YWxVc2Vk CisrfQorKworK2Z1bmMgKHIgKnJlYWRlcikgYXJjaGl0ZWN0dXJlKGggKmhvc3QpIHsKKysJ diwgZXJyIDo9IGFyY2hpdGVjdHVyZSgpCisrCWlmIHIuYWRkRXJyKGVycikgeworKwkJcmV0 dXJuCisrCX0KKysJaC5pbmZvLkFyY2hpdGVjdHVyZSA9IHYKKyt9CisrCisrZnVuYyAociAq cmVhZGVyKSBib290VGltZShoICpob3N0KSB7CisrCXYsIGVyciA6PSBib290VGltZSgpCisr CWlmIHIuYWRkRXJyKGVycikgeworKwkJcmV0dXJuCisrCX0KKysJaC5pbmZvLkJvb3RUaW1l ID0gdgorK30KKysKKytmdW5jIChyICpyZWFkZXIpIGhvc3RuYW1lKGggKmhvc3QpIHsKKysJ diwgZXJyIDo9IG9zLkhvc3RuYW1lKCkKKysJaWYgci5hZGRFcnIoZXJyKSB7CisrCQlyZXR1 cm4KKysJfQorKwloLmluZm8uSG9zdG5hbWUgPSB2CisrfQorKworK2Z1bmMgKHIgKnJlYWRl cikgbmV0d29yayhoICpob3N0KSB7CisrCWlwcywgbWFjcywgZXJyIDo9IHNoYXJlZC5OZXR3 b3JrKCkKKysJaWYgci5hZGRFcnIoZXJyKSB7CisrCQlyZXR1cm4KKysJfQorKwloLmluZm8u SVBzID0gaXBzCisrCWguaW5mby5NQUNzID0gbWFjcworK30KKysKKytmdW5jIChyICpyZWFk ZXIpIGtlcm5lbFZlcnNpb24oaCAqaG9zdCkgeworKwl2LCBlcnIgOj0ga2VybmVsVmVyc2lv bigpCisrCWlmIHIuYWRkRXJyKGVycikgeworKwkJcmV0dXJuCisrCX0KKysJaC5pbmZvLktl cm5lbFZlcnNpb24gPSB2CisrfQorKworK2Z1bmMgKHIgKnJlYWRlcikgb3MoaCAqaG9zdCkg eworKwl2LCBlcnIgOj0gb3BlcmF0aW5nU3lzdGVtKCkKKysJaWYgci5hZGRFcnIoZXJyKSB7 CisrCQlyZXR1cm4KKysJfQorKwloLmluZm8uT1MgPSB2CisrfQorKworK2Z1bmMgKHIgKnJl YWRlcikgdGltZShoICpob3N0KSB7CisrCWguaW5mby5UaW1lem9uZSwgaC5pbmZvLlRpbWV6 b25lT2Zmc2V0U2VjID0gdGltZS5Ob3coKS5ab25lKCkKKyt9CisrCisrZnVuYyAociAqcmVh ZGVyKSB1bmlxdWVJRChoICpob3N0KSB7CisrCXYsIGVyciA6PSBtYWNoaW5lSUQoKQorKwlp ZiByLmFkZEVycihlcnIpIHsKKysJCXJldHVybgorKwl9CisrCWguaW5mby5VbmlxdWVJRCA9 IHYKKyt9CisrCisrdHlwZSBwcm9jRlMgc3RydWN0IHsKKysJcHJvY2ZzLkZTCisrCW1vdW50 UG9pbnQgc3RyaW5nCisrfQorKworK2Z1bmMgKGZzICpwcm9jRlMpIHBhdGgocCAuLi5zdHJp bmcpIHN0cmluZyB7CisrCWVsZW0gOj0gYXBwZW5kKFtdc3RyaW5ne2ZzLm1vdW50UG9pbnR9 LCBwLi4uKQorKwlyZXR1cm4gZmlsZXBhdGguSm9pbihlbGVtLi4uKQorK30KK2RpZmYgLXVy TiB2ZW5kb3Iub3JpZy9naXRodWIuY29tL2VsYXN0aWMvZ28tc3lzaW5mby9wcm92aWRlcnMv ZnJlZWJzZC9ob3N0X2ZyZWVic2RfY2dvX3Rlc3QuZ28gdmVuZG9yL2dpdGh1Yi5jb20vZWxh c3RpYy9nby1zeXNpbmZvL3Byb3ZpZGVycy9mcmVlYnNkL2hvc3RfZnJlZWJzZF9jZ29fdGVz dC5nbworLS0tIHZlbmRvci5vcmlnL2dpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL3By b3ZpZGVycy9mcmVlYnNkL2hvc3RfZnJlZWJzZF9jZ29fdGVzdC5nbwkxOTcwLTAxLTAxIDAx OjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIHZlbmRvci9naXRodWIuY29tL2VsYXN0aWMv Z28tc3lzaW5mby9wcm92aWRlcnMvZnJlZWJzZC9ob3N0X2ZyZWVic2RfY2dvX3Rlc3QuZ28J MjAyNC0wNy0xMyAyMDoyODozNi4wNjUzODUwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNTMgQEAK KysvLyBMaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIuVi4gdW5kZXIgb25lIG9yIG1vcmUg Y29udHJpYnV0b3IKKysvLyBsaWNlbnNlIGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZp bGUgZGlzdHJpYnV0ZWQgd2l0aAorKy8vIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZv cm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0CisrLy8gb3duZXJzaGlwLiBFbGFzdGljc2Vh cmNoIEIuVi4gbGljZW5zZXMgdGhpcyBmaWxlIHRvIHlvdSB1bmRlcgorKy8vIHRoZSBBcGFj aGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisrLy8g bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5z ZS4KKysvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysvLwor Ky8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKysv LworKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g aW4gd3JpdGluZywKKysvLyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z ZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKy8vICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FS UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorKy8vIEtJTkQsIGVpdGhlciBleHByZXNz IG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorKy8vIHNwZWNpZmljIGxh bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKysvLyB1bmRl ciB0aGUgTGljZW5zZS4KKysKKysvL2dvOmJ1aWxkIGZyZWVic2QgJiYgY2dvCisrCisrcGFj a2FnZSBmcmVlYnNkCisrCisraW1wb3J0ICgKKysJImVuY29kaW5nL2pzb24iCisrCSJ0ZXN0 aW5nIgorKworKwkiZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vaW50ZXJuYWwvcmVn aXN0cnkiCisrKQorKworK3ZhciBfIHJlZ2lzdHJ5Lkhvc3RQcm92aWRlciA9IGZyZWVic2RT eXN0ZW17fQorKworK2Z1bmMgVGVzdEhvc3QodCAqdGVzdGluZy5UKSB7CisrCWhvc3QsIGVy ciA6PSBuZXdGcmVlQlNEU3lzdGVtKCkuSG9zdCgpCisrCWlmIGVyciAhPSBuaWwgeworKwkJ dC5GYXRhbChlcnIpCisrCX0KKysKKysJdC5SdW4oIkluZm8iLCBmdW5jKHQgKnRlc3Rpbmcu VCkgeworKwkJaW5mbyA6PSBob3N0LkluZm8oKQorKworKwkJZGF0YSwgXyA6PSBqc29uLk1h cnNoYWxJbmRlbnQoaW5mbywgIiIsICIgICIpCisrCQl0LkxvZyhzdHJpbmcoZGF0YSkpCisr CX0pCisrCisrCXQuUnVuKCJNZW1vcnkiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworKwkJbWVt LCBlcnIgOj0gaG9zdC5NZW1vcnkoKQorKwkJaWYgZXJyICE9IG5pbCB7CisrCQkJdC5GYXRh bChlcnIpCisrCQl9CisrCisrCQlkYXRhLCBfIDo9IGpzb24uTWFyc2hhbEluZGVudChtZW0s ICIiLCAiICAiKQorKwkJdC5Mb2coc3RyaW5nKGRhdGEpKQorKwl9KQorK30KK2RpZmYgLXVy TiB2ZW5kb3Iub3JpZy9naXRodWIuY29tL2VsYXN0aWMvZ28tc3lzaW5mby9wcm92aWRlcnMv ZnJlZWJzZC9rdm1fZnJlZWJzZF9jZ28uZ28gdmVuZG9yL2dpdGh1Yi5jb20vZWxhc3RpYy9n by1zeXNpbmZvL3Byb3ZpZGVycy9mcmVlYnNkL2t2bV9mcmVlYnNkX2Nnby5nbworLS0tIHZl bmRvci5vcmlnL2dpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL3Byb3ZpZGVycy9mcmVl YnNkL2t2bV9mcmVlYnNkX2Nnby5nbwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCAr MDEwMAorKysrIHZlbmRvci9naXRodWIuY29tL2VsYXN0aWMvZ28tc3lzaW5mby9wcm92aWRl cnMvZnJlZWJzZC9rdm1fZnJlZWJzZF9jZ28uZ28JMjAyNC0wNy0xMyAyMDoyODozNi4wNjU0 OTgwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNTggQEAKKysvLyBMaWNlbnNlZCB0byBFbGFzdGlj c2VhcmNoIEIuVi4gdW5kZXIgb25lIG9yIG1vcmUgY29udHJpYnV0b3IKKysvLyBsaWNlbnNl IGFncmVlbWVudHMuIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorKy8v IHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJp Z2h0CisrLy8gb3duZXJzaGlwLiBFbGFzdGljc2VhcmNoIEIuVi4gbGljZW5zZXMgdGhpcyBm aWxlIHRvIHlvdSB1bmRlcgorKy8vIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAg KHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5CisrLy8gbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0 IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKysvLyBZb3UgbWF5IG9idGFpbiBh IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysvLworKy8vICAgICBodHRwOi8vd3d3LmFwYWNo ZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKysvLworKy8vIFVubGVzcyByZXF1aXJlZCBi eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKysvLyBzb2Z0d2Fy ZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgor Ky8vICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9G IEFOWQorKy8vIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExp Y2Vuc2UgZm9yIHRoZQorKy8vIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNz aW9ucyBhbmQgbGltaXRhdGlvbnMKKysvLyB1bmRlciB0aGUgTGljZW5zZS4KKysKKysvL2dv OmJ1aWxkIGZyZWVic2QgJiYgY2dvCisrCisrcGFja2FnZSBmcmVlYnNkCisrCisrLyoKKysj Y2dvIExERkxBR1M6IC1sa3ZtCisrI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorKyNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorKworKyNpbmNsdWRl IDxwYXRocy5oPgorKyNpbmNsdWRlIDxrdm0uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+Cisr Ki8KKytpbXBvcnQgIkMiCisrCisraW1wb3J0ICgKKysJImZtdCIKKysJInVuc2FmZSIKKysK KysJImdvbGFuZy5vcmcveC9zeXMvdW5peCIKKyspCisrCisrLy8ga3ZtR2V0U3dhcEluZm8g cmV0dXJucyBzd2FwIHN1bW1hcnkgc3RhdGlzdGljcyBmb3IgdGhlIHN5c3RlbS4gSXQgYWNj ZXNzZXMKKysvLyB0aGUga2VybmVsIHZpcnR1YWwgbWVtb3J5IChrdm0pIGltYWdlcyBieSB1 c2luZyBsaWJrdm0uCisrZnVuYyBrdm1HZXRTd2FwSW5mbygpICgqa3ZtU3dhcCwgZXJyb3Ip IHsKKysJLy8gT2J0YWluIGEgS1ZNIGZpbGUgZGVzY3JpcHRvci4KKysJdmFyIGVycnN0ciAq Qy5jaGFyCisrCWtkIDo9IEMua3ZtX29wZW4obmlsLCBuaWwsIG5pbCwgdW5peC5PX1JET05M WSwgZXJyc3RyKQorKwlpZiBlcnJzdHIgIT0gbmlsIHsKKysJCXJldHVybiBuaWwsIGZtdC5F cnJvcmYoImZhaWxlZCBjYWxsaW5nIGt2bV9vcGVuOiAlcyIsIEMuR29TdHJpbmcoZXJyc3Ry KSkKKysJfQorKwlkZWZlciBDLmt2bV9jbG9zZShrZCkKKysKKysJdmFyIHN3YXAga3ZtU3dh cAorKwlpZiBuLCBlcnIgOj0gQy5rdm1fZ2V0c3dhcGluZm8oa2QsICgqQy5zdHJ1Y3Rfa3Zt X3N3YXApKHVuc2FmZS5Qb2ludGVyKCZzd2FwKSksIDEsIDApOyBuICE9IDAgeworKwkJcmV0 dXJuIG5pbCwgZm10LkVycm9yZigiZmFpbGVkIHRvIGdldCBrdm1fZ2V0c3dhcGluZm86ICV3 IiwgZXJyKQorKwl9CisrCisrCXJldHVybiAmc3dhcCwgbmlsCisrfQorZGlmZiAtdXJOIHZl bmRvci5vcmlnL2dpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL3Byb3ZpZGVycy9mcmVl YnNkL3Byb2Nlc3NfZnJlZWJzZF9jZ28uZ28gdmVuZG9yL2dpdGh1Yi5jb20vZWxhc3RpYy9n by1zeXNpbmZvL3Byb3ZpZGVycy9mcmVlYnNkL3Byb2Nlc3NfZnJlZWJzZF9jZ28uZ28KKy0t LSB2ZW5kb3Iub3JpZy9naXRodWIuY29tL2VsYXN0aWMvZ28tc3lzaW5mby9wcm92aWRlcnMv ZnJlZWJzZC9wcm9jZXNzX2ZyZWVic2RfY2dvLmdvCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAw MDAwMDAwICswMTAwCisrKysgdmVuZG9yL2dpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZv L3Byb3ZpZGVycy9mcmVlYnNkL3Byb2Nlc3NfZnJlZWJzZF9jZ28uZ28JMjAyNC0wNy0xMyAy MDoyODozNi4wNjU1NzgwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMzg2IEBACisrLy8gTGljZW5z ZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYuIHVuZGVyIG9uZSBvciBtb3JlIGNvbnRyaWJ1dG9y CisrLy8gbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1 dGVkIHdpdGgKKysvLyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVn YXJkaW5nIGNvcHlyaWdodAorKy8vIG93bmVyc2hpcC4gRWxhc3RpY3NlYXJjaCBCLlYuIGxp Y2Vuc2VzIHRoaXMgZmlsZSB0byB5b3UgdW5kZXIKKysvLyB0aGUgQXBhY2hlIExpY2Vuc2Us IFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorKy8vIG5vdCB1c2UgdGhp cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisrLy8gWW91 IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrLy8KKysvLyAgICAgaHR0 cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrLy8KKysvLyBVbmxl c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs CisrLy8gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp YnV0ZWQgb24gYW4KKysvLyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig Q09ORElUSU9OUyBPRiBBTlkKKysvLyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk LiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKysvLyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl cm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisrLy8gdW5kZXIgdGhlIExpY2Vu c2UuCisrCisrLy9nbzpidWlsZCBmcmVlYnNkICYmIGNnbworKworK3BhY2thZ2UgZnJlZWJz ZAorKworK2ltcG9ydCAiQyIKKysKKysvKgorKyNjZ28gTERGTEFHUzogLWxwcm9jc3RhdAor KyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorKyNp bmNsdWRlIDxzeXMvdGltZS5oPgorKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaW5jbHVk ZSA8c3lzL3F1ZXVlLmg+CisrI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjaW5jbHVkZSA8 c3lzL3VzZXIuaD4KKysKKysjaW5jbHVkZSA8bGlicHJvY3N0YXQuaD4KKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrCisrc3RydWN0IGtpbmZvX3Byb2MgZ2V0UHJvY0luZm9BdChzdHJ1Y3Qg a2luZm9fcHJvYyAqcHJvY3MsIHVuc2lnbmVkIGludCBpbmRleCkgeworKyAgcmV0dXJuIHBy b2NzW2luZGV4XTsKKyt9CisrCisrdW5zaWduZWQgaW50IGNvdW50QXJyYXlJdGVtcyhjaGFy ICoqaXRlbXMpIHsKKysgIHVuc2lnbmVkIGludCBpID0gMDsKKysgIGZvciAoaSA9IDA7IGl0 ZW1zW2ldICE9IE5VTEw7ICsraSk7CisrICByZXR1cm4gaTsKKyt9CisrCisrY2hhciAqIGl0 ZW1BdEluZGV4KGNoYXIgKippdGVtcywgdW5zaWduZWQgaW50IGluZGV4KSB7CisrICByZXR1 cm4gaXRlbXNbaW5kZXhdOworK30KKysKKyt1bnNpZ25lZCBpbnQgY291bnRGaWxlU3RhdHMo c3RydWN0IGZpbGVzdGF0X2xpc3QgKmhlYWQpIHsKKysgIHVuc2lnbmVkIGludCBjb3VudCA9 IDA7CisrICBzdHJ1Y3QgZmlsZXN0YXQgKmZzdDsKKysgIFNUQUlMUV9GT1JFQUNIKGZzdCwg aGVhZCwgbmV4dCkgeworKyAgICArK2NvdW50OworKyAgfQorKworKyAgcmV0dXJuIGNvdW50 OworK30KKysKKyt2b2lkIGNvcHlGaWxlU3RhdHMoc3RydWN0IGZpbGVzdGF0X2xpc3QgKmhl YWQsIHN0cnVjdCBmaWxlc3RhdCAqb3V0LCB1bnNpZ25lZCBpbnQgc2l6ZSkgeworKyAgdW5z aWduZWQgaW50IGluZGV4ID0gMDsKKysgIHN0cnVjdCBmaWxlc3RhdCAqZnN0OworKyAgaWYg KHNpemUgPT0gMCkgeworKyAgICAgIHJldHVybjsKKysgIH0KKysgIFNUQUlMUV9GT1JFQUNI KGZzdCwgaGVhZCwgbmV4dCkgeworKyAgICBtZW1jcHkob3V0LCBmc3QsIHNpemVvZigqZnN0 KSk7CisrICAgICsrb3V0OworKyAgICAtLXNpemU7CisrICB9CisrfQorKyovCisraW1wb3J0 ICJDIgorKworK2ltcG9ydCAoCisrCSJlcnJvcnMiCisrCSJmbXQiCisrCSJvcyIKKysJInN0 cmNvbnYiCisrCSJzdHJpbmdzIgorKwkidGltZSIKKysKKysJImdpdGh1Yi5jb20vZWxhc3Rp Yy9nby1zeXNpbmZvL3R5cGVzIgorKykKKysKKytmdW5jIGdldFByb2NJbmZvKG9wLCBhcmcg aW50KSAoW11wcm9jZXNzLCBlcnJvcikgeworKwlwcm9jc3RhdCwgZXJyIDo9IEMucHJvY3N0 YXRfb3Blbl9zeXNjdGwoKQorKwlpZiBwcm9jc3RhdCA9PSBuaWwgeworKwkJcmV0dXJuIG5p bCwgZm10LkVycm9yZigiZmFpbGVkIHRvIG9wZW4gcHJvY3N0YXQgc3lzY3RsOiAldyIsIGVy cikKKysJfQorKwlkZWZlciBDLnByb2NzdGF0X2Nsb3NlKHByb2NzdGF0KQorKworKwl2YXIg Y291bnQgQy51aW50ID0gMAorKwlrcHJvY3MsIGVyciA6PSBDLnByb2NzdGF0X2dldHByb2Nz KHByb2NzdGF0LCBDLmludChvcCksIEMuaW50KGFyZyksICZjb3VudCkKKysJaWYga3Byb2Nz ID09IG5pbCB7CisrCQlyZXR1cm4gbmlsLCBmbXQuRXJyb3JmKCJnZXRwcm9jcyBmYWlsZWQ6 ICV3IiwgZXJyKQorKwl9CisrCWRlZmVyIEMucHJvY3N0YXRfZnJlZXByb2NzKHByb2NzdGF0 LCBrcHJvY3MpCisrCisrCXByb2NzIDo9IG1ha2UoW11wcm9jZXNzLCBjb3VudCkKKysJdmFy IGluZGV4IEMudWludAorKwlmb3IgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyBpbmRleCsr IHsKKysJCXByb2MgOj0gQy5nZXRQcm9jSW5mb0F0KGtwcm9jcywgaW5kZXgpCisrCQlwcm9j c1tpbmRleF0ua2luZm8gPSBwcm9jCisrCQlwcm9jc1tpbmRleF0ucGlkID0gaW50KHByb2Mu a2lfcGlkKQorKwl9CisrCisrCXJldHVybiBwcm9jcywgbmlsCisrfQorKworK2Z1bmMgY29w eUFycmF5KGZyb20gKipDLmNoYXIpIFtdc3RyaW5nIHsKKysJaWYgZnJvbSA9PSBuaWwgewor KwkJcmV0dXJuIG5pbAorKwl9CisrCisrCWNvdW50IDo9IEMuY291bnRBcnJheUl0ZW1zKGZy b20pCisrCW91dCA6PSBtYWtlKFtdc3RyaW5nLCBjb3VudCkKKysKKysJZm9yIGluZGV4IDo9 IEMudWludCgwKTsgaW5kZXggPCBjb3VudDsgaW5kZXgrKyB7CisrCQlvdXRbaW5kZXhdID0g Qy5Hb1N0cmluZyhDLml0ZW1BdEluZGV4KGZyb20sIGluZGV4KSkKKysJfQorKworKwlyZXR1 cm4gb3V0CisrfQorKworK2Z1bmMgbWFrZU1hcChmcm9tIFtdc3RyaW5nKSBtYXBbc3RyaW5n XXN0cmluZyB7CisrCW91dCA6PSBtYWtlKG1hcFtzdHJpbmddc3RyaW5nLCBsZW4oZnJvbSkp CisrCisrCWZvciBfLCBlbnYgOj0gcmFuZ2UgZnJvbSB7CisrCQlwYXJ0cyA6PSBzdHJpbmdz LlNwbGl0KGVudiwgIj0iKQorKwkJaWYgbGVuKHBhcnRzKSA+IDEgeworKwkJCW91dFtwYXJ0 c1swXV0gPSBwYXJ0c1sxXQorKwkJfQorKwl9CisrCisrCXJldHVybiBvdXQKKyt9CisrCisr ZnVuYyBnZXRQcm9jRW52KHAgKnByb2Nlc3MpIChtYXBbc3RyaW5nXXN0cmluZywgZXJyb3Ip IHsKKysJcHJvY3N0YXQsIGVyciA6PSBDLnByb2NzdGF0X29wZW5fc3lzY3RsKCkKKysKKysJ aWYgcHJvY3N0YXQgPT0gbmlsIHsKKysJCXJldHVybiBuaWwsIGZtdC5FcnJvcmYoImZhaWxl ZCB0byBvcGVuIHByb2NzdGF0IHN5c2N0bDogJXciLCBlcnIpCisrCX0KKysJZGVmZXIgQy5w cm9jc3RhdF9jbG9zZShwcm9jc3RhdCkKKysKKysJZW52LCBlcnIgOj0gQy5wcm9jc3RhdF9n ZXRlbnZ2KHByb2NzdGF0LCAmcC5raW5mbywgMCkKKysJZGVmZXIgQy5wcm9jc3RhdF9mcmVl ZW52dihwcm9jc3RhdCkKKysKKysJcmV0dXJuIG1ha2VNYXAoY29weUFycmF5KGVudikpLCBl cnIKKyt9CisrCisrZnVuYyBnZXRQcm9jQXJncyhwICpwcm9jZXNzKSAoW11zdHJpbmcsIGVy cm9yKSB7CisrCXByb2NzdGF0LCBlcnIgOj0gQy5wcm9jc3RhdF9vcGVuX3N5c2N0bCgpCisr CisrCWlmIHByb2NzdGF0ID09IG5pbCB7CisrCQlyZXR1cm4gbmlsLCBmbXQuRXJyb3JmKCJm YWlsZWQgdG8gb3BlbiBwcm9jc3RhdCBzeXNjdGw6ICV3IiwgZXJyKQorKwl9CisrCWRlZmVy IEMucHJvY3N0YXRfY2xvc2UocHJvY3N0YXQpCisrCisrCWFyZ3MsIGVyciA6PSBDLnByb2Nz dGF0X2dldGFyZ3YocHJvY3N0YXQsICZwLmtpbmZvLCAwKQorKwlkZWZlciBDLnByb2NzdGF0 X2ZyZWVhcmd2KHByb2NzdGF0KQorKworKwlyZXR1cm4gY29weUFycmF5KGFyZ3MpLCBlcnIK Kyt9CisrCisrZnVuYyBnZXRQcm9jUGF0aG5hbWUocCAqcHJvY2VzcykgKHN0cmluZywgZXJy b3IpIHsKKysJcHJvY3N0YXQsIGVyciA6PSBDLnByb2NzdGF0X29wZW5fc3lzY3RsKCkKKysK KysJaWYgcHJvY3N0YXQgPT0gbmlsIHsKKysJCXJldHVybiAiIiwgZm10LkVycm9yZigiZmFp bGVkIHRvIG9wZW4gcHJvY3N0YXQgc3lzY3RsOiAldyIsIGVycikKKysJfQorKwlkZWZlciBD LnByb2NzdGF0X2Nsb3NlKHByb2NzdGF0KQorKworKwljb25zdCBtYXhsZW4gPSB1aW50KDEw MjQpCisrCW91dCA6PSBtYWtlKFtdQy5jaGFyLCBtYXhsZW4pCisrCWlmIHJlcywgZXJyIDo9 IEMucHJvY3N0YXRfZ2V0cGF0aG5hbWUocHJvY3N0YXQsICZwLmtpbmZvLCAmb3V0WzBdLCBD LnVsb25nKG1heGxlbikpOyByZXMgIT0gMCB7CisrCQlyZXR1cm4gIiIsIGVycgorKwl9Cisr CXJldHVybiBDLkdvU3RyaW5nKCZvdXRbMF0pLCBuaWwKKyt9CisrCisrZnVuYyBnZXRGaWxl U3RhdHMoZmlsZVN0YXRzICpDLnN0cnVjdF9maWxlc3RhdF9saXN0KSBbXUMuc3RydWN0X2Zp bGVzdGF0IHsKKysJY291bnQgOj0gQy5jb3VudEZpbGVTdGF0cyhmaWxlU3RhdHMpCisrCisr CWlmIGNvdW50IDwgMSB7CisrCQlyZXR1cm4gbmlsCisrCX0KKysKKysJb3V0IDo9IG1ha2Uo W11DLnN0cnVjdF9maWxlc3RhdCwgY291bnQpCisrCisrCUMuY29weUZpbGVTdGF0cyhmaWxl U3RhdHMsICZvdXRbMF0sIGNvdW50KQorKwlyZXR1cm4gb3V0CisrfQorKworK2Z1bmMgZ2V0 UHJvY0NXRChwICpwcm9jZXNzKSAoc3RyaW5nLCBlcnJvcikgeworKwlwcm9jc3RhdCwgZXJy IDo9IEMucHJvY3N0YXRfb3Blbl9zeXNjdGwoKQorKworKwlpZiBwcm9jc3RhdCA9PSBuaWwg eworKwkJcmV0dXJuICIiLCBmbXQuRXJyb3JmKCJmYWlsZWQgdG8gb3BlbiBwcm9jc3RhdCBz eXNjdGw6ICV3IiwgZXJyKQorKwl9CisrCWRlZmVyIEMucHJvY3N0YXRfY2xvc2UocHJvY3N0 YXQpCisrCisrCWZzLCBlcnIgOj0gQy5wcm9jc3RhdF9nZXRmaWxlcyhwcm9jc3RhdCwgJnAu a2luZm8sIDApCisrCWlmIGZzID09IG5pbCB7CisrCQlyZXR1cm4gIiIsIGZtdC5FcnJvcmYo ImZhaWxlZCB0byBnZXQgZmlsZXM6ICV3IiwgZXJyKQorKwl9CisrCisrCWRlZmVyIEMucHJv Y3N0YXRfZnJlZWZpbGVzKHByb2NzdGF0LCBmcykKKysKKysJZmlsZXMgOj0gZ2V0RmlsZVN0 YXRzKGZzKQorKwlmb3IgXywgZiA6PSByYW5nZSBmaWxlcyB7CisrCQlpZiBmLmZzX3VmbGFn cyA9PSBDLlBTX0ZTVF9VRkxBR19DRElSIHsKKysJCQlyZXR1cm4gQy5Hb1N0cmluZyhmLmZz X3BhdGgpLCBuaWwKKysJCX0KKysJfQorKworKwlyZXR1cm4gIiIsIG5pbAorK30KKysKKyt0 eXBlIHByb2Nlc3Mgc3RydWN0IHsKKysJcGlkICAgaW50CisrCWtpbmZvIEMuc3RydWN0X2tp bmZvX3Byb2MKKyt9CisrCisrZnVuYyB0aW1ldmFsVG9EdXJhdGlvbih0bSBDLnN0cnVjdF90 aW1ldmFsKSB0aW1lLkR1cmF0aW9uIHsKKysJcmV0dXJuIHRpbWUuRHVyYXRpb24odG0udHZf c2VjKSp0aW1lLlNlY29uZCArCisrCQl0aW1lLkR1cmF0aW9uKHRtLnR2X3VzZWMpKnRpbWUu TWljcm9zZWNvbmQKKyt9CisrCisrZnVuYyAocCAqcHJvY2VzcykgQ1BVVGltZSgpICh0eXBl cy5DUFVUaW1lcywgZXJyb3IpIHsKKysJcHJvY3MsIGVyciA6PSBnZXRQcm9jSW5mbyhDLktF Uk5fUFJPQ19QSUQsIHAuUElEKCkpCisrCWlmIGVyciAhPSBuaWwgeworKwkJcmV0dXJuIHR5 cGVzLkNQVVRpbWVze30sIGVycgorKwl9CisrCXAua2luZm8gPSBwcm9jc1swXS5raW5mbwor KworKwlyZXR1cm4gdHlwZXMuQ1BVVGltZXN7CisrCQlVc2VyOiAgIHRpbWV2YWxUb0R1cmF0 aW9uKHAua2luZm8ua2lfcnVzYWdlLnJ1X3V0aW1lKSwKKysJCVN5c3RlbTogdGltZXZhbFRv RHVyYXRpb24ocC5raW5mby5raV9ydXNhZ2UucnVfc3RpbWUpLAorKwl9LCBuaWwKKyt9Cisr CisrZnVuYyAocCAqcHJvY2VzcykgSW5mbygpICh0eXBlcy5Qcm9jZXNzSW5mbywgZXJyb3Ip IHsKKysJcHJvY3MsIGVyciA6PSBnZXRQcm9jSW5mbyhDLktFUk5fUFJPQ19QSUQsIHAuUElE KCkpCisrCWlmIGVyciAhPSBuaWwgeworKwkJcmV0dXJuIHR5cGVzLlByb2Nlc3NJbmZve30s IGVycgorKwl9CisrCXAua2luZm8gPSBwcm9jc1swXS5raW5mbworKworKwljd2QsIGVyciA6 PSBnZXRQcm9jQ1dEKHApCisrCWlmIGVyciAhPSBuaWwgeworKwkJcmV0dXJuIHR5cGVzLlBy b2Nlc3NJbmZve30sIGVycgorKwl9CisrCisrCWFyZ3MsIGVyciA6PSBnZXRQcm9jQXJncyhw KQorKwlpZiBlcnIgIT0gbmlsIHsKKysJCXJldHVybiB0eXBlcy5Qcm9jZXNzSW5mb3t9LCBl cnIKKysJfQorKworKwlleGUsIF8gOj0gZ2V0UHJvY1BhdGhuYW1lKHApCisrCisrCXJldHVy biB0eXBlcy5Qcm9jZXNzSW5mb3sKKysJCU5hbWU6ICAgICAgQy5Hb1N0cmluZygmcC5raW5m by5raV9jb21tWzBdKSwKKysJCVBJRDogICAgICAgaW50KHAua2luZm8ua2lfcGlkKSwKKysJ CVBQSUQ6ICAgICAgaW50KHAua2luZm8ua2lfcHBpZCksCisrCQlDV0Q6ICAgICAgIGN3ZCwK KysJCUV4ZTogICAgICAgZXhlLAorKwkJQXJnczogICAgICBhcmdzLAorKwkJU3RhcnRUaW1l OiB0aW1lLlVuaXgoaW50NjQocC5raW5mby5raV9zdGFydC50dl9zZWMpLCBpbnQ2NChwLmtp bmZvLmtpX3N0YXJ0LnR2X3VzZWMpKjEwMDApLAorKwl9LCBuaWwKKyt9CisrCisrZnVuYyAo cCAqcHJvY2VzcykgTWVtb3J5KCkgKHR5cGVzLk1lbW9yeUluZm8sIGVycm9yKSB7CisrCXBh Z2VTaXplLCBlcnIgOj0gcGFnZVNpemVCeXRlcygpCisrCWlmIGVyciAhPSBuaWwgeworKwkJ cmV0dXJuIHR5cGVzLk1lbW9yeUluZm97fSwgZXJyCisrCX0KKysKKysJcHJvY3MsIGVyciA6 PSBnZXRQcm9jSW5mbyhDLktFUk5fUFJPQ19QSUQsIHAuUElEKCkpCisrCWlmIGVyciAhPSBu aWwgeworKwkJcmV0dXJuIHR5cGVzLk1lbW9yeUluZm97fSwgZXJyCisrCX0KKysJcC5raW5m byA9IHByb2NzWzBdLmtpbmZvCisrCisrCXJldHVybiB0eXBlcy5NZW1vcnlJbmZveworKwkJ UmVzaWRlbnQ6IHVpbnQ2NChwLmtpbmZvLmtpX3Jzc2l6ZSkgKiBwYWdlU2l6ZSwKKysJCVZp cnR1YWw6ICB1aW50NjQocC5raW5mby5raV9zaXplKSwKKysJfSwgbmlsCisrfQorKworK2Z1 bmMgKHAgKnByb2Nlc3MpIFVzZXIoKSAodHlwZXMuVXNlckluZm8sIGVycm9yKSB7CisrCXBy b2NzLCBlcnIgOj0gZ2V0UHJvY0luZm8oQy5LRVJOX1BST0NfUElELCBwLlBJRCgpKQorKwlp ZiBlcnIgIT0gbmlsIHsKKysJCXJldHVybiB0eXBlcy5Vc2VySW5mb3t9LCBlcnIKKysJfQor KworKwlwLmtpbmZvID0gcHJvY3NbMF0ua2luZm8KKysKKysJcmV0dXJuIHR5cGVzLlVzZXJJ bmZveworKwkJVUlEOiAgc3RyY29udi5Gb3JtYXRVaW50KHVpbnQ2NChwLmtpbmZvLmtpX3J1 aWQpLCAxMCksCisrCQlFVUlEOiBzdHJjb252LkZvcm1hdFVpbnQodWludDY0KHAua2luZm8u a2lfdWlkKSwgMTApLAorKwkJU1VJRDogc3RyY29udi5Gb3JtYXRVaW50KHVpbnQ2NChwLmtp bmZvLmtpX3N2dWlkKSwgMTApLAorKwkJR0lEOiAgc3RyY29udi5Gb3JtYXRVaW50KHVpbnQ2 NChwLmtpbmZvLmtpX3JnaWQpLCAxMCksCisrCQlFR0lEOiBzdHJjb252LkZvcm1hdFVpbnQo dWludDY0KHAua2luZm8ua2lfZ3JvdXBzWzBdKSwgMTApLAorKwkJU0dJRDogc3RyY29udi5G b3JtYXRVaW50KHVpbnQ2NChwLmtpbmZvLmtpX3N2Z2lkKSwgMTApLAorKwl9LCBuaWwKKyt9 CisrCisrZnVuYyAocCAqcHJvY2VzcykgUElEKCkgaW50IHsKKysJcmV0dXJuIHAucGlkCisr fQorKworK2Z1bmMgKHAgKnByb2Nlc3MpIE9wZW5IYW5kbGVzKCkgKFtdc3RyaW5nLCBlcnJv cikgeworKwlwcm9jc3RhdCA6PSBDLnByb2NzdGF0X29wZW5fc3lzY3RsKCkKKysJaWYgcHJv Y3N0YXQgPT0gbmlsIHsKKysJCXJldHVybiBuaWwsIGVycm9ycy5OZXcoImZhaWxlZCB0byBv cGVuIHByb2NzdGF0IHN5c2N0bCIpCisrCX0KKysJZGVmZXIgQy5wcm9jc3RhdF9jbG9zZShw cm9jc3RhdCkKKysKKysJZnMgOj0gQy5wcm9jc3RhdF9nZXRmaWxlcyhwcm9jc3RhdCwgJnAu a2luZm8sIDApCisrCWRlZmVyIEMucHJvY3N0YXRfZnJlZWZpbGVzKHByb2NzdGF0LCBmcykK KysKKysJZmlsZXMgOj0gZ2V0RmlsZVN0YXRzKGZzKQorKwluYW1lcyA6PSBtYWtlKFtdc3Ry aW5nLCAwLCBsZW4oZmlsZXMpKQorKworKwlmb3IgXywgZmlsZSA6PSByYW5nZSBmaWxlcyB7 CisrCQlpZiBmaWxlLmZzX3R5cGUgPT0gMSB7CisrCQkJaWYgcGF0aCA6PSBDLkdvU3RyaW5n KGZpbGUuZnNfcGF0aCk7IHBhdGggIT0gIiIgeworKwkJCQluYW1lcyA9IGFwcGVuZChuYW1l cywgcGF0aCkKKysJCQl9CisrCQl9CisrCX0KKysKKysJcmV0dXJuIG5hbWVzLCBuaWwKKyt9 CisrCisrZnVuYyAocCAqcHJvY2VzcykgT3BlbkhhbmRsZUNvdW50KCkgKGludCwgZXJyb3Ip IHsKKysJcHJvY3N0YXQgOj0gQy5wcm9jc3RhdF9vcGVuX3N5c2N0bCgpCisrCWlmIHByb2Nz dGF0ID09IG5pbCB7CisrCQlyZXR1cm4gMCwgZXJyb3JzLk5ldygiZmFpbGVkIHRvIG9wZW4g cHJvY3N0YXQgc3lzY3RsIikKKysJfQorKwlkZWZlciBDLnByb2NzdGF0X2Nsb3NlKHByb2Nz dGF0KQorKworKwlmcyA6PSBDLnByb2NzdGF0X2dldGZpbGVzKHByb2NzdGF0LCAmcC5raW5m bywgMCkKKysJZGVmZXIgQy5wcm9jc3RhdF9mcmVlZmlsZXMocHJvY3N0YXQsIGZzKQorKwly ZXR1cm4gaW50KEMuY291bnRGaWxlU3RhdHMoZnMpKSwgbmlsCisrfQorKworK2Z1bmMgKHAg KnByb2Nlc3MpIEVudmlyb25tZW50KCkgKG1hcFtzdHJpbmddc3RyaW5nLCBlcnJvcikgewor KwlyZXR1cm4gZ2V0UHJvY0VudihwKQorK30KKysKKytmdW5jIChzIGZyZWVic2RTeXN0ZW0p IFByb2Nlc3NlcygpIChbXXR5cGVzLlByb2Nlc3MsIGVycm9yKSB7CisrCXByb2NzLCBlcnIg Oj0gZ2V0UHJvY0luZm8oQy5LRVJOX1BST0NfUFJPQywgMCkKKysJb3V0IDo9IG1ha2UoW110 eXBlcy5Qcm9jZXNzLCAwLCBsZW4ocHJvY3MpKQorKworKwlmb3IgXywgcHJvYyA6PSByYW5n ZSBwcm9jcyB7CisrCQlvdXQgPSBhcHBlbmQob3V0LCAmcHJvY2Vzc3sKKysJCQlwaWQ6ICAg cHJvYy5waWQsCisrCQkJa2luZm86IHByb2Mua2luZm8sCisrCQl9KQorKwl9CisrCisrCXJl dHVybiBvdXQsIGVycgorK30KKysKKytmdW5jIChzIGZyZWVic2RTeXN0ZW0pIFByb2Nlc3Mo cGlkIGludCkgKHR5cGVzLlByb2Nlc3MsIGVycm9yKSB7CisrCXJldHVybiAmcHJvY2Vzc3tw aWQ6IHBpZH0sIG5pbAorK30KKysKKytmdW5jIChzIGZyZWVic2RTeXN0ZW0pIFNlbGYoKSAo dHlwZXMuUHJvY2VzcywgZXJyb3IpIHsKKysJcmV0dXJuIHMuUHJvY2Vzcyhvcy5HZXRwaWQo KSkKKyt9CisrCisrZnVuYyAocCAqcHJvY2VzcykgUGFyZW50KCkgKHR5cGVzLlByb2Nlc3Ms IGVycm9yKSB7CisrCWluZm8sIGVyciA6PSBwLkluZm8oKQorKwlpZiBlcnIgIT0gbmlsIHsK KysJCXJldHVybiBuaWwsIGVycgorKwl9CisrCisrCXByb2MgOj0gcHJvY2Vzc3twaWQ6IGlu Zm8uUFBJRH0KKysKKysJcmV0dXJuICZwcm9jLCBuaWwKKyt9CitkaWZmIC11ck4gdmVuZG9y Lm9yaWcvZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vcHJvdmlkZXJzL2ZyZWVic2Qv c3lzY3RsX2ZyZWVic2QuZ28gdmVuZG9yL2dpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZv L3Byb3ZpZGVycy9mcmVlYnNkL3N5c2N0bF9mcmVlYnNkLmdvCistLS0gdmVuZG9yLm9yaWcv Z2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vcHJvdmlkZXJzL2ZyZWVic2Qvc3lzY3Rs X2ZyZWVic2QuZ28JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyB2 ZW5kb3IvZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vcHJvdmlkZXJzL2ZyZWVic2Qv c3lzY3RsX2ZyZWVic2QuZ28JMjAyNC0wNy0xMyAyMDoyODozNi4wNjU3MDAwMDAgKzAyMDAK K0BAIC0wLDAgKzEsMjQ4IEBACisrLy8gTGljZW5zZWQgdG8gRWxhc3RpY3NlYXJjaCBCLlYu IHVuZGVyIG9uZSBvciBtb3JlIGNvbnRyaWJ1dG9yCisrLy8gbGljZW5zZSBhZ3JlZW1lbnRz LiBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKysvLyB0aGlzIHdvcmsg Zm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodAorKy8vIG93 bmVyc2hpcC4gRWxhc3RpY3NlYXJjaCBCLlYuIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byB5b3Ug dW5kZXIKKysvLyB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu c2UiKTsgeW91IG1heQorKy8vIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlh bmNlIHdpdGggdGhlIExpY2Vuc2UuCisrLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo ZSBMaWNlbnNlIGF0CisrLy8KKysvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu c2VzL0xJQ0VOU0UtMi4wCisrLy8KKysvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJs ZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisrLy8gc29mdHdhcmUgZGlzdHJpYnV0 ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKysvLyAiQVMgSVMi IEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKysvLyBL SU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0 aGUKKysvLyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxp bWl0YXRpb25zCisrLy8gdW5kZXIgdGhlIExpY2Vuc2UuCisrCisrLy9nbzpidWlsZCBmcmVl YnNkCisrCisrcGFja2FnZSBmcmVlYnNkCisrCisraW1wb3J0ICgKKysJImZtdCIKKysJInN0 cmNvbnYiCisrCSJzdHJpbmdzIgorKwkic3luYyIKKysJInRpbWUiCisrCSJ1bnNhZmUiCisr CisrCSJnaXRodWIuY29tL2VsYXN0aWMvZ28tc3lzaW5mby90eXBlcyIKKysKKysJImdvbGFu Zy5vcmcveC9zeXMvdW5peCIKKyspCisrCisrdmFyIHRpY2tEdXJhdGlvbiA9IHN5bmMuT25j ZVZhbHVlcyhmdW5jKCkgKHRpbWUuRHVyYXRpb24sIGVycm9yKSB7CisrCWNvbnN0IG1pYiA9 ICJrZXJuLmNsb2NrcmF0ZSIKKysKKysJYywgZXJyIDo9IHVuaXguU3lzY3RsQ2xvY2tpbmZv KG1pYikKKysJaWYgZXJyICE9IG5pbCB7CisrCQlyZXR1cm4gMCwgZm10LkVycm9yZigiZmFp bGVkIHRvIGdldCAlczogJXciLCBtaWIsIGVycikKKysJfQorKwlyZXR1cm4gdGltZS5EdXJh dGlvbihjLlRpY2spICogdGltZS5NaWNyb3NlY29uZCwgbmlsCisrfSkKKysKKyt2YXIgcGFn ZVNpemVCeXRlcyA9IHN5bmMuT25jZVZhbHVlcyhmdW5jKCkgKHVpbnQ2NCwgZXJyb3IpIHsK KysJY29uc3QgbWliID0gInZtLnN0YXRzLnZtLnZfcGFnZV9zaXplIgorKworKwl2LCBlcnIg Oj0gdW5peC5TeXNjdGxVaW50MzIobWliKQorKwlpZiBlcnIgIT0gbmlsIHsKKysJCXJldHVy biAwLCBmbXQuRXJyb3JmKCJmYWlsZWQgdG8gZ2V0ICVzOiAldyIsIG1pYiwgZXJyKQorKwl9 CisrCisrCXJldHVybiB1aW50NjQodiksIG5pbAorK30pCisrCisrZnVuYyBhY3RpdmVQYWdl Q291bnQociAqcmVhZGVyKSB1aW50NjQgeworKwljb25zdCBtaWIgPSAidm0uc3RhdHMudm0u dl9hY3RpdmVfY291bnQiCisrCisrCXYsIGVyciA6PSB1bml4LlN5c2N0bFVpbnQzMihtaWIp CisrCWlmIHIuYWRkRXJyKGVycikgeworKwkJcmV0dXJuIDAKKysJfQorKwlyZXR1cm4gdWlu dDY0KHYpCisrfQorKworK2Z1bmMgYXJjaGl0ZWN0dXJlKCkgKHN0cmluZywgZXJyb3IpIHsK KysJY29uc3QgbWliID0gImh3Lm1hY2hpbmUiCisrCisrCWFyY2gsIGVyciA6PSB1bml4LlN5 c2N0bChtaWIpCisrCWlmIGVyciAhPSBuaWwgeworKwkJcmV0dXJuICIiLCBmbXQuRXJyb3Jm KCJmYWlsZWQgdG8gZ2V0IGFyY2hpdGVjdHVyZTogJXciLCBlcnIpCisrCX0KKysKKysJcmV0 dXJuIGFyY2gsIG5pbAorK30KKysKKytmdW5jIGJvb3RUaW1lKCkgKHRpbWUuVGltZSwgZXJy b3IpIHsKKysJY29uc3QgbWliID0gImtlcm4uYm9vdHRpbWUiCisrCisrCXR2LCBlcnIgOj0g dW5peC5TeXNjdGxUaW1ldmFsKG1pYikKKysJaWYgZXJyICE9IG5pbCB7CisrCQlyZXR1cm4g dGltZS5UaW1le30sIGZtdC5FcnJvcmYoImZhaWxlZCB0byBnZXQgaG9zdCB1cHRpbWU6ICV3 IiwgZXJyKQorKwl9CisrCisrCWJvb3RUaW1lIDo9IHRpbWUuVW5peCh0di5TZWMsIHR2LlVz ZWMqaW50NjQodGltZS5NaWNyb3NlY29uZCkpCisrCXJldHVybiBib290VGltZSwgbmlsCisr fQorKworKy8vIGJ1ZmZlcnNVc2VkQnl0ZXMgcmV0dXJucyB0aGUgbnVtYmVyIG1lbW9yeSBi eXRlcyB1c2VkIGFzIGRpc2sgY2FjaGUuCisrZnVuYyBidWZmZXJzVXNlZEJ5dGVzKHIgKnJl YWRlcikgdWludDY0IHsKKysJY29uc3QgbWliID0gInZmcy5idWZzcGFjZSIKKysKKysJdiwg ZXJyIDo9IHVuaXguU3lzY3RsVWludDY0KG1pYikKKysJaWYgci5hZGRFcnIoZXJyKSB7Cisr CQlyZXR1cm4gMAorKwl9CisrCisrCXJldHVybiB2CisrfQorKworK2Z1bmMgY2FjaGVQYWdl Q291bnQociAqcmVhZGVyKSB1aW50NjQgeworKwljb25zdCBtaWIgPSAidm0uc3RhdHMudm0u dl9jYWNoZV9jb3VudCIKKysKKysJdiwgZXJyIDo9IHVuaXguU3lzY3RsVWludDMyKG1pYikK KysJaWYgci5hZGRFcnIoZXJyKSB7CisrCQlyZXR1cm4gMAorKwl9CisrCisrCXJldHVybiB1 aW50NjQodikKKyt9CisrCisrY29uc3Qgc2l6ZU9mVWludDY0ID0gaW50KHVuc2FmZS5TaXpl b2YodWludDY0KDApKSkKKysKKysvLyBjcHVTdGF0ZVRpbWVzIHVzZXMgc3lzY3RsIGtlcm4u Y3BfdGltZSB0byBnZXQgdGhlIGFtb3VudCBvZiB0aW1lIHNwZW50IGluCisrLy8gZGlmZmVy ZW50IENQVSBzdGF0ZXMuCisrZnVuYyBjcHVTdGF0ZVRpbWVzKCkgKCp0eXBlcy5DUFVUaW1l cywgZXJyb3IpIHsKKysJdGlja0R1cmF0aW9uLCBlcnIgOj0gdGlja0R1cmF0aW9uKCkKKysJ aWYgZXJyICE9IG5pbCB7CisrCQlyZXR1cm4gbmlsLCBlcnIKKysJfQorKworKwljb25zdCBt aWIgPSAia2Vybi5jcF90aW1lIgorKwlidWYsIGVyciA6PSB1bml4LlN5c2N0bFJhdyhtaWIp CisrCWlmIGVyciAhPSBuaWwgeworKwkJcmV0dXJuIG5pbCwgZm10LkVycm9yZigiZmFpbGVk IHRvIGdldCAlczogJXciLCBtaWIsIGVycikKKysJfQorKworKwl2YXIgY2xvY2tUaWNrcyBb dW5peC5DUFVTVEFURVNddWludDY0CisrCWlmIGxlbihidWYpIDwgbGVuKGNsb2NrVGlja3Mp KnNpemVPZlVpbnQ2NCB7CisrCQlyZXR1cm4gbmlsLCBmbXQuRXJyb3JmKCJrZXJuLmNwX3Rp bWUgZGF0YSBpcyB0b28gc2hvcnQgKGdvdCAlZCBieXRlcykiLCBsZW4oYnVmKSkKKysJfQor Kwlmb3IgaSA6PSByYW5nZSBjbG9ja1RpY2tzIHsKKysJCXZhbCA6PSAqKCp1aW50NjQpKHVu c2FmZS5Qb2ludGVyKCZidWZbc2l6ZU9mVWludDY0KmldKSkKKysJCWNsb2NrVGlja3NbaV0g PSB2YWwKKysJfQorKworKwlyZXR1cm4gJnR5cGVzLkNQVVRpbWVzeworKwkJVXNlcjogICB0 aW1lLkR1cmF0aW9uKGNsb2NrVGlja3NbdW5peC5DUF9VU0VSXSkgKiB0aWNrRHVyYXRpb24s CisrCQlTeXN0ZW06IHRpbWUuRHVyYXRpb24oY2xvY2tUaWNrc1t1bml4LkNQX1NZU10pICog dGlja0R1cmF0aW9uLAorKwkJSWRsZTogICB0aW1lLkR1cmF0aW9uKGNsb2NrVGlja3NbdW5p eC5DUF9JRExFXSkgKiB0aWNrRHVyYXRpb24sCisrCQlJUlE6ICAgIHRpbWUuRHVyYXRpb24o Y2xvY2tUaWNrc1t1bml4LkNQX0lOVFJdKSAqIHRpY2tEdXJhdGlvbiwKKysJCU5pY2U6ICAg dGltZS5EdXJhdGlvbihjbG9ja1RpY2tzW3VuaXguQ1BfTklDRV0pICogdGlja0R1cmF0aW9u LAorKwl9LCBuaWwKKyt9CisrCisrZnVuYyBmcmVlUGFnZUNvdW50KHIgKnJlYWRlcikgdWlu dDY0IHsKKysJY29uc3QgbWliID0gInZtLnN0YXRzLnZtLnZfZnJlZV9jb3VudCIKKysKKysJ diwgZXJyIDo9IHVuaXguU3lzY3RsVWludDMyKG1pYikKKysJaWYgci5hZGRFcnIoZXJyKSB7 CisrCQlyZXR1cm4gMAorKwl9CisrCisrCXJldHVybiB1aW50NjQodikKKyt9CisrCisrZnVu YyBpbmFjdGl2ZVBhZ2VDb3VudChyICpyZWFkZXIpIHVpbnQ2NCB7CisrCWNvbnN0IG1pYiA9 ICJ2bS5zdGF0cy52bS52X2luYWN0aXZlX2NvdW50IgorKworKwl2LCBlcnIgOj0gdW5peC5T eXNjdGxVaW50MzIobWliKQorKwlpZiByLmFkZEVycihlcnIpIHsKKysJCXJldHVybiAwCisr CX0KKysKKysJcmV0dXJuIHVpbnQ2NCh2KQorK30KKysKKytmdW5jIGtlcm5lbFZlcnNpb24o KSAoc3RyaW5nLCBlcnJvcikgeworKwljb25zdCBtaWIgPSAia2Vybi5vc3JlbGVhc2UiCisr CisrCXZlcnNpb24sIGVyciA6PSB1bml4LlN5c2N0bChtaWIpCisrCWlmIGVyciAhPSBuaWwg eworKwkJcmV0dXJuICIiLCBmbXQuRXJyb3JmKCJmYWlsZWQgdG8gZ2V0IGtlcm5lbCB2ZXJz aW9uOiAldyIsIGVycikKKysJfQorKworKwlyZXR1cm4gdmVyc2lvbiwgbmlsCisrfQorKwor K2Z1bmMgbWFjaGluZUlEKCkgKHN0cmluZywgZXJyb3IpIHsKKysJY29uc3QgbWliID0gImtl cm4uaG9zdHV1aWQiCisrCisrCXV1aWQsIGVyciA6PSB1bml4LlN5c2N0bChtaWIpCisrCWlm IGVyciAhPSBuaWwgeworKwkJcmV0dXJuICIiLCBmbXQuRXJyb3JmKCJmYWlsZWQgdG8gZ2V0 IG1hY2hpbmUgaWQ6ICV3IiwgZXJyKQorKwl9CisrCisrCXJldHVybiB1dWlkLCBuaWwKKyt9 CisrCisrZnVuYyBvcGVyYXRpbmdTeXN0ZW0oKSAoKnR5cGVzLk9TSW5mbywgZXJyb3IpIHsK KysJaW5mbyA6PSAmdHlwZXMuT1NJbmZveworKwkJVHlwZTogICAgICJmcmVlYnNkIiwKKysJ CUZhbWlseTogICAiZnJlZWJzZCIsCisrCQlQbGF0Zm9ybTogImZyZWVic2QiLAorKwl9Cisr CisrCW9zVHlwZSwgZXJyIDo9IHVuaXguU3lzY3RsKCJrZXJuLm9zdHlwZSIpCisrCWlmIGVy ciAhPSBuaWwgeworKwkJcmV0dXJuIGluZm8sIGVycgorKwl9CisrCWluZm8uTmFtZSA9IG9z VHlwZQorKworKwkvLyBFeGFtcGxlOiAxMy4wLVJFTEVBU0UtcDExCisrCW9zUmVsZWFzZSwg ZXJyIDo9IHVuaXguU3lzY3RsKCJrZXJuLm9zcmVsZWFzZSIpCisrCWlmIGVyciAhPSBuaWwg eworKwkJcmV0dXJuIGluZm8sIGVycgorKwl9CisrCWluZm8uVmVyc2lvbiA9IG9zUmVsZWFz ZQorKworKwlyZWxlYXNlUGFydHMgOj0gc3RyaW5ncy5TcGxpdChvc1JlbGVhc2UsICItIikK KysKKysJbWFqb3JNaW5vciA6PSBzdHJpbmdzLlNwbGl0KHJlbGVhc2VQYXJ0c1swXSwgIi4i KQorKwlpZiBsZW4obWFqb3JNaW5vcikgPiAwIHsKKysJCWluZm8uTWFqb3IsIF8gPSBzdHJj b252LkF0b2kobWFqb3JNaW5vclswXSkKKysJfQorKwlpZiBsZW4obWFqb3JNaW5vcikgPiAx IHsKKysJCWluZm8uTWlub3IsIF8gPSBzdHJjb252LkF0b2kobWFqb3JNaW5vclsxXSkKKysJ fQorKworKwlpZiBsZW4ocmVsZWFzZVBhcnRzKSA+IDEgeworKwkJaW5mby5CdWlsZCA9IHJl bGVhc2VQYXJ0c1sxXQorKwl9CisrCWlmIGxlbihyZWxlYXNlUGFydHMpID4gMiB7CisrCQlp bmZvLlBhdGNoLCBfID0gc3RyY29udi5BdG9pKHN0cmluZ3MuVHJpbVByZWZpeChyZWxlYXNl UGFydHNbMl0sICJwIikpCisrCX0KKysKKysJcmV0dXJuIGluZm8sIG5pbAorK30KKysKKytm dW5jIHRvdGFsUGh5c2ljYWxNZW0ociAqcmVhZGVyKSB1aW50NjQgeworKwljb25zdCBtaWIg PSAiaHcucGh5c21lbSIKKysKKysJdiwgZXJyIDo9IHVuaXguU3lzY3RsVWludDY0KG1pYikK KysJaWYgci5hZGRFcnIoZXJyKSB7CisrCQlyZXR1cm4gMAorKwl9CisrCXJldHVybiB2Cisr fQorKworK2Z1bmMgd2lyZVBhZ2VDb3VudChyICpyZWFkZXIpIHVpbnQ2NCB7CisrCWNvbnN0 IG1pYiA9ICJ2bS5zdGF0cy52bS52X3dpcmVfY291bnQiCisrCisrCXYsIGVyciA6PSB1bml4 LlN5c2N0bFVpbnQzMihtaWIpCisrCWlmIHIuYWRkRXJyKGVycikgeworKwkJcmV0dXJuIDAK KysJfQorKwlyZXR1cm4gdWludDY0KHYpCisrfQorZGlmZiAtdXJOIHZlbmRvci5vcmlnL2dp dGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL3Byb3ZpZGVycy9mcmVlYnNkL3N5c2N0bF9m cmVlYnNkX3Rlc3QuZ28gdmVuZG9yL2dpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL3By b3ZpZGVycy9mcmVlYnNkL3N5c2N0bF9mcmVlYnNkX3Rlc3QuZ28KKy0tLSB2ZW5kb3Iub3Jp Zy9naXRodWIuY29tL2VsYXN0aWMvZ28tc3lzaW5mby9wcm92aWRlcnMvZnJlZWJzZC9zeXNj dGxfZnJlZWJzZF90ZXN0LmdvCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAw CisrKysgdmVuZG9yL2dpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL3Byb3ZpZGVycy9m cmVlYnNkL3N5c2N0bF9mcmVlYnNkX3Rlc3QuZ28JMjAyNC0wNy0xMyAyMDoyODozNi4wNjU4 MDgwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTM3IEBACisrLy8gTGljZW5zZWQgdG8gRWxhc3Rp Y3NlYXJjaCBCLlYuIHVuZGVyIG9uZSBvciBtb3JlIGNvbnRyaWJ1dG9yCisrLy8gbGljZW5z ZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKysv LyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHly aWdodAorKy8vIG93bmVyc2hpcC4gRWxhc3RpY3NlYXJjaCBCLlYuIGxpY2Vuc2VzIHRoaXMg ZmlsZSB0byB5b3UgdW5kZXIKKysvLyB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w ICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQorKy8vIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2Vw dCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisrLy8gWW91IG1heSBvYnRhaW4g YSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisrLy8KKysvLyAgICAgaHR0cDovL3d3dy5hcGFj aGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisrLy8KKysvLyBVbmxlc3MgcmVxdWlyZWQg YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisrLy8gc29mdHdh cmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4K KysvLyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBP RiBBTlkKKysvLyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBM aWNlbnNlIGZvciB0aGUKKysvLyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz c2lvbnMgYW5kIGxpbWl0YXRpb25zCisrLy8gdW5kZXIgdGhlIExpY2Vuc2UuCisrCisrLy9n bzpidWlsZCBmcmVlYnNkCisrCisrcGFja2FnZSBmcmVlYnNkCisrCisraW1wb3J0ICgKKysJ ImVuY29kaW5nL2pzb24iCisrCSJnaXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0 IgorKwkiZ2l0aHViLmNvbS9zdHJldGNoci90ZXN0aWZ5L3JlcXVpcmUiCisrCSJvcy9leGVj IgorKwkic3RyaW5ncyIKKysJInRlc3RpbmciCisrCSJ0aW1lIgorKykKKysKKytmdW5jIFRl c3RBcmNoaXRlY3R1cmUodCAqdGVzdGluZy5UKSB7CisrCWFyY2gsIGVyciA6PSBhcmNoaXRl Y3R1cmUoKQorKwlpZiBlcnIgIT0gbmlsIHsKKysJCXQuRmF0YWwoZXJyKQorKwl9CisrCisr CWFzc2VydC5Ob3RFbXB0eSh0LCBhcmNoKQorKwlhc3NlcnQuUmVnZXhwKHQsIGAoYW1kNjR8 aTM4Nnxwb3dlcnBjfGFybSg2NCk/fHJpc2N2fG1pcHN8c3BhcmM2NHxwYzk4KWAsIGFyY2gp CisrfQorKworK2Z1bmMgVGVzdEJvb3RUaW1lKHQgKnRlc3RpbmcuVCkgeworKwlib290VGlt ZSwgZXJyIDo9IGJvb3RUaW1lKCkKKysJaWYgZXJyICE9IG5pbCB7CisrCQl0LkZhdGFsKGVy cikKKysJfQorKworKwlib290RGlmZiA6PSB0aW1lLlNpbmNlKGJvb3RUaW1lKQorKwkvLyB0 LkxvZ2YoImJvb3RUaW1lIGluIHNlY29uZHM6ICUjdiIsIGludDY0KGJvb3REaWZmLlNlY29u ZHMoKSkpCisrCisrCWNtZCA6PSBleGVjLkNvbW1hbmQoIi91c3IvYmluL3VwdGltZSIsICIt LWxpYnhvPWpzb24iKQorKwl1cGNtZCwgZXJyIDo9IGNtZC5PdXRwdXQoKQorKworKwlpZiBl cnIgIT0gbmlsIHsKKysJCXQuRmF0YWwoZXJyKQorKwl9CisrCisrCXQuTG9nZihzdHJpbmco dXBjbWQpKQorKworKwl0eXBlIFVwdGltZU91dHB1dCBzdHJ1Y3QgeworKwkJVXB0aW1lSW5m b3JtYXRpb24gc3RydWN0IHsKKysJCQlVcHRpbWUgaW50NjQgYGpzb246InVwdGltZSJgCisr CQl9IGBqc29uOiJ1cHRpbWUtaW5mb3JtYXRpb24iYAorKwl9CisrCisrCXZhciB1cEluZm8g VXB0aW1lT3V0cHV0CisrCWVyciA9IGpzb24uVW5tYXJzaGFsKHVwY21kLCAmdXBJbmZvKQor KworKwlpZiBlcnIgIT0gbmlsIHsKKysJCXQuRmF0YWwoZXJyKQorKwl9CisrCisrCXVwc2Vj IDo9IHVwSW5mby5VcHRpbWVJbmZvcm1hdGlvbi5VcHRpbWUKKysJdXB0aW1lIDo9IHRpbWUu RHVyYXRpb24odXBzZWMgKiBpbnQ2NCh0aW1lLlNlY29uZCkpCisrCS8vIHQuTG9nZigidXB0 aW1lIGluIHNlY29uZHM6ICUjdiIsIGludDY0KHVwdGltZS5TZWNvbmRzKCkpKQorKworKwlh c3NlcnQuSW5EZWx0YSh0LCB1cHRpbWUsIGJvb3REaWZmLCBmbG9hdDY0KDUqdGltZS5TZWNv bmQpKQorK30KKysKKytmdW5jIFRlc3RDUFVTdGF0ZVRpbWVzKHQgKnRlc3RpbmcuVCkgewor Kwl0aW1lcywgZXJyIDo9IGNwdVN0YXRlVGltZXMoKQorKwlpZiBlcnIgIT0gbmlsIHsKKysJ CXQuRmF0YWwoZXJyKQorKwl9CisrCisrCXJlcXVpcmUuTm90TmlsKHQsIHRpbWVzKQorKwlh c3NlcnQuTm90WmVybyh0LCAqdGltZXMpCisrfQorKworK2Z1bmMgVGVzdEtlcm5lbFZlcnNp b24odCAqdGVzdGluZy5UKSB7CisrCWtlcm5lbCwgZXJyIDo9IGtlcm5lbFZlcnNpb24oKQor KwlpZiBlcnIgIT0gbmlsIHsKKysJCXQuRmF0YWwoZXJyKQorKwl9CisrCisrCS8vIFJldHJp ZXZlIGN1cnJlbnRseSBydW5uaW5nIGtlcm5lbCB2ZXJzaW9uCisrCWNtZCA6PSBleGVjLkNv bW1hbmQoIi9iaW4vZnJlZWJzZC12ZXJzaW9uIiwgIi1yIikKKysJZmJzZG91dCwgZXJyIDo9 IGNtZC5PdXRwdXQoKQorKworKwlpZiBlcnIgIT0gbmlsIHsKKysJCXQuRmF0YWwoZXJyKQor Kwl9CisrCisrCWZic2R2ZXIgOj0gc3RyaW5ncy5UcmltU3VmZml4KHN0cmluZyhmYnNkb3V0 KSwgIlxuIikKKysKKysJYXNzZXJ0Lk5vdEVtcHR5KHQsIGtlcm5lbCkKKysJYXNzZXJ0LkVx dWFsVmFsdWVzKHQsIGtlcm5lbCwgZmJzZHZlcikKKyt9CisrCisrZnVuYyBUZXN0TWFjaGlu ZUlEKHQgKnRlc3RpbmcuVCkgeworKwltYWNoaW5lSUQsIGVyciA6PSBtYWNoaW5lSUQoKQor KwlpZiBlcnIgIT0gbmlsIHsKKysJCXQuRmF0YWwoZXJyKQorKwl9CisrCisrCWFzc2VydC5O b3RFbXB0eSh0LCBtYWNoaW5lSUQpCisrCWFzc2VydC5SZWdleHAodCwgIl5bYS16QS1aMC05 XXs4fS1bYS16QS1aMC05XXs0fS1bYS16QS1aMC05XXs0fS1bYS16QS1aMC05XXs0fS1bYS16 QS1aMC05XXsxMn0kIiwgbWFjaGluZUlEKQorK30KKysKKytmdW5jIFRlc3RPcGVyYXRpbmdT eXN0ZW0odCAqdGVzdGluZy5UKSB7CisrCXQuUnVuKCJmcmVlYnNkIiwgZnVuYyh0ICp0ZXN0 aW5nLlQpIHsKKysJCW9zLCBlcnIgOj0gb3BlcmF0aW5nU3lzdGVtKCkKKysJCWlmIGVyciAh PSBuaWwgeworKwkJCXQuRmF0YWwoZXJyKQorKwkJfQorKwkJYXNzZXJ0LkVxdWFsKHQsICJm cmVlYnNkIiwgb3MuVHlwZSkKKysJCWFzc2VydC5FcXVhbCh0LCAiZnJlZWJzZCIsIG9zLkZh bWlseSkKKysJCWFzc2VydC5FcXVhbCh0LCAiZnJlZWJzZCIsIG9zLlBsYXRmb3JtKQorKwkJ YXNzZXJ0LkVxdWFsKHQsICJGcmVlQlNEIiwgb3MuTmFtZSkKKysJCWFzc2VydC5SZWdleHAo dCwgYFxkezEsMn1cLlxkezEsMn0tKFJFTEVBU0V8U1RBQkxFfENVUlJFTlR8UkNbMC05XXxB TFBIQShcZHswLDJ9KXxCRVRBKFxkezAsMn0pKSgtcFxkKT9gLCBvcy5WZXJzaW9uKQorKwkJ YXNzZXJ0LlJlZ2V4cCh0LCBgXGR7MSwyfWAsIG9zLk1ham9yKQorKwkJYXNzZXJ0LlJlZ2V4 cCh0LCBgXGR7MSwyfWAsIG9zLk1pbm9yKQorKwkJYXNzZXJ0LlJlZ2V4cCh0LCBgXGR7MSwy fWAsIG9zLlBhdGNoKQorKwkJYXNzZXJ0LlJlZ2V4cCh0LCBgKFJFTEVBU0V8U1RBQkxFfENV UlJFTlR8UkNbMC05XXxBTFBIQShbMC05XXswLDJ9KXxCRVRBKFswLTldezAsMn0pKWAsIG9z LkJ1aWxkKQorKwkJdC5Mb2dmKCIlI3YiLCBvcykKKysJfSkKKyt9CitkaWZmIC11ck4gdmVu ZG9yLm9yaWcvZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vcHJvdmlkZXJzL2ZyZWVi c2QvenR5cGVzX2ZyZWVic2QuZ28gdmVuZG9yL2dpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNp bmZvL3Byb3ZpZGVycy9mcmVlYnNkL3p0eXBlc19mcmVlYnNkLmdvCistLS0gdmVuZG9yLm9y aWcvZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vcHJvdmlkZXJzL2ZyZWVic2QvenR5 cGVzX2ZyZWVic2QuZ28JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysr KyB2ZW5kb3IvZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vcHJvdmlkZXJzL2ZyZWVi c2QvenR5cGVzX2ZyZWVic2QuZ28JMjAyNC0wNy0xMyAyMDoyODozNi4wNjU4ODcwMDAgKzAy MDAKK0BAIC0wLDAgKzEsMzkgQEAKKysvLyBMaWNlbnNlZCB0byBFbGFzdGljc2VhcmNoIEIu Vi4gdW5kZXIgb25lIG9yIG1vcmUgY29udHJpYnV0b3IKKysvLyBsaWNlbnNlIGFncmVlbWVu dHMuIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAorKy8vIHRoaXMgd29y ayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0CisrLy8g b3duZXJzaGlwLiBFbGFzdGljc2VhcmNoIEIuVi4gbGljZW5zZXMgdGhpcyBmaWxlIHRvIHlv dSB1bmRlcgorKy8vIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj ZW5zZSIpOyB5b3UgbWF5CisrLy8gbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKysvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2Yg dGhlIExpY2Vuc2UgYXQKKysvLworKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj ZW5zZXMvTElDRU5TRS0yLjAKKysvLworKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNh YmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKysvLyBzb2Z0d2FyZSBkaXN0cmli dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKy8vICJBUyBJ UyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorKy8v IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9y IHRoZQorKy8vIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQg bGltaXRhdGlvbnMKKysvLyB1bmRlciB0aGUgTGljZW5zZS4KKysKKysvLyBDb2RlIGdlbmVy YXRlZCBieSBjbWQvY2dvIC1nb2RlZnM7IGFuZCB0aGVuIHBhdGNoZWQgdXAgdG8gZml4Cisr Ly8gYW4gYWxpZ25tZW50IGlzc3VlCisrLy8gY2dvIC1nb2RlZnMgZGVmc19mcmVlYnNkLmdv CisrCisrcGFja2FnZSBmcmVlYnNkCisrCisrdHlwZSBrdm1Td2FwIHN0cnVjdCB7CisrCURl dm5hbWUgICBbMzJdaW50OAorKwlVc2VkICAgICAgdWludDMyCisrCVRvdGFsICAgICB1aW50 MzIKKysJRmxhZ3MgICAgIGludDMyCisrCVJlc2VydmVkMSB1aW50MzIKKysJUmVzZXJ2ZWQy IHVpbnQzMgorK30KKysKKyt0eXBlIGNsb2NrSW5mbyBzdHJ1Y3QgeworKwlIeiAgICAgaW50 MzIKKysJVGljayAgIGludDMyCisrCVNwYXJlICBpbnQzMgorKwlTdGF0aHogaW50MzIKKysJ UHJvZmh6IGludDMyCisrfQorZGlmZiAtdXJOIHZlbmRvci5vcmlnL2dpdGh1Yi5jb20vZWxh c3RpYy9nby1zeXNpbmZvL3Byb3ZpZGVycy9zaGFyZWQvZnFkbi5nbyB2ZW5kb3IvZ2l0aHVi LmNvbS9lbGFzdGljL2dvLXN5c2luZm8vcHJvdmlkZXJzL3NoYXJlZC9mcWRuLmdvCistLS0g dmVuZG9yLm9yaWcvZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vcHJvdmlkZXJzL3No YXJlZC9mcWRuLmdvCTIwMjQtMDctMTMgMjE6MzQ6MjkuMTA5NjU3MDAwICswMjAwCisrKysg dmVuZG9yL2dpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL3Byb3ZpZGVycy9zaGFyZWQv ZnFkbi5nbwkyMDI0LTA3LTEzIDIwOjI4OjM2LjA3NzQyMDAwMCArMDIwMAorQEAgLTE1LDcg KzE1LDcgQEAKKyAvLyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg YW5kIGxpbWl0YXRpb25zCisgLy8gdW5kZXIgdGhlIExpY2Vuc2UuCisgCistLy9nbzpidWls ZCBsaW51eCB8fCBkYXJ3aW4gfHwgYWl4CisrLy9nbzpidWlsZCBsaW51eCB8fCBkYXJ3aW4g fHwgYWl4IHx8IGZyZWVic2QKKyAKKyBwYWNrYWdlIHNoYXJlZAorIAorZGlmZiAtdXJOIHZl bmRvci5vcmlnL2dpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL3N5c3RlbS5nbyB2ZW5k b3IvZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vc3lzdGVtLmdvCistLS0gdmVuZG9y Lm9yaWcvZ2l0aHViLmNvbS9lbGFzdGljL2dvLXN5c2luZm8vc3lzdGVtLmdvCTIwMjQtMDct MTMgMjE6MzQ6MjkuMTEwMDUxMDAwICswMjAwCisrKysgdmVuZG9yL2dpdGh1Yi5jb20vZWxh c3RpYy9nby1zeXNpbmZvL3N5c3RlbS5nbwkyMDI0LTA3LTEzIDIwOjI4OjM2LjA3OTU0NTAw MCArMDIwMAorQEAgLTI2LDYgKzI2LDcgQEAKKyAJLy8gUmVnaXN0ZXIgaG9zdCBhbmQgcHJv Y2VzcyBwcm92aWRlcnMuCisgCV8gImdpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL3By b3ZpZGVycy9haXgiCisgCV8gImdpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL3Byb3Zp ZGVycy9kYXJ3aW4iCisrCV8gImdpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL3Byb3Zp ZGVycy9mcmVlYnNkIgorIAlfICJnaXRodWIuY29tL2VsYXN0aWMvZ28tc3lzaW5mby9wcm92 aWRlcnMvbGludXgiCisgCV8gImdpdGh1Yi5jb20vZWxhc3RpYy9nby1zeXNpbmZvL3Byb3Zp ZGVycy93aW5kb3dzIgorICkKZGlmZiAtLWdpdCBhL3N5c3V0aWxzL2JlYXRzOC9maWxlcy9w YXRjaC1saWJiZWF0X2F1dG9kaXNjb3Zlcl9wcm92aWRlcnNfZG9ja2VyX2NvbmZpZy5nbyBi L3N5c3V0aWxzL2JlYXRzOC9maWxlcy9wYXRjaC1saWJiZWF0X2F1dG9kaXNjb3Zlcl9wcm92 aWRlcnNfZG9ja2VyX2NvbmZpZy5nbwppbmRleCBiNTdjZGQ0NjU4NGQuLmYzYzA3ZjBhYzU5 MyAxMDA2NDQKLS0tIGEvc3lzdXRpbHMvYmVhdHM4L2ZpbGVzL3BhdGNoLWxpYmJlYXRfYXV0 b2Rpc2NvdmVyX3Byb3ZpZGVyc19kb2NrZXJfY29uZmlnLmdvCisrKyBiL3N5c3V0aWxzL2Jl YXRzOC9maWxlcy9wYXRjaC1saWJiZWF0X2F1dG9kaXNjb3Zlcl9wcm92aWRlcnNfZG9ja2Vy X2NvbmZpZy5nbwpAQCAtMSwxMyArMSwxMSBAQAotLS0tIGxpYmJlYXQvYXV0b2Rpc2NvdmVy L3Byb3ZpZGVycy9kb2NrZXIvY29uZmlnLmdvLm9yaWcJMjAyMi0xMC0yNCAwNjo0OTozMSBV VEMKLSsrKyBsaWJiZWF0L2F1dG9kaXNjb3Zlci9wcm92aWRlcnMvZG9ja2VyL2NvbmZpZy5n bwotQEAgLTE1LDggKzE1LDggQEAKKy0tLSBsaWJiZWF0L2F1dG9kaXNjb3Zlci9wcm92aWRl cnMvZG9ja2VyL2NvbmZpZy5nby5vcmlnCTIwMjQtMDctMDkgMDA6MDA6MzYuMDAwMDAwMDAw ICswMjAwCisrKysgbGliYmVhdC9hdXRvZGlzY292ZXIvcHJvdmlkZXJzL2RvY2tlci9jb25m aWcuZ28JMjAyNC0wNy0xMyAyMTozODoxMi43MzkwOTAwMDAgKzAyMDAKK0BAIC0xNSw3ICsx NSw3IEBACiAgLy8gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu ZCBsaW1pdGF0aW9ucwogIC8vIHVuZGVyIHRoZSBMaWNlbnNlLgogIAogLS8vZ286YnVpbGQg bGludXggfHwgZGFyd2luIHx8IHdpbmRvd3MKLS0vLyArYnVpbGQgbGludXggZGFyd2luIHdp bmRvd3MKICsvL2dvOmJ1aWxkIGxpbnV4IHx8IGRhcndpbiB8fCB3aW5kb3dzIHx8IGZyZWVi c2QKLSsvLyArYnVpbGQgbGludXggZGFyd2luIHdpbmRvd3MgZnJlZWJzZAogIAogIHBhY2th Z2UgZG9ja2VyCiAgCmRpZmYgLS1naXQgYS9zeXN1dGlscy9iZWF0czgvZmlsZXMvcGF0Y2gt bGliYmVhdF9hdXRvZGlzY292ZXJfcHJvdmlkZXJzX2RvY2tlcl9kb2NrZXIuZ28gYi9zeXN1 dGlscy9iZWF0czgvZmlsZXMvcGF0Y2gtbGliYmVhdF9hdXRvZGlzY292ZXJfcHJvdmlkZXJz X2RvY2tlcl9kb2NrZXIuZ28KaW5kZXggNDY1ZWRkZTQ3ZDEyLi4zNGRjMDdiMDdkYzUgMTAw NjQ0Ci0tLSBhL3N5c3V0aWxzL2JlYXRzOC9maWxlcy9wYXRjaC1saWJiZWF0X2F1dG9kaXNj b3Zlcl9wcm92aWRlcnNfZG9ja2VyX2RvY2tlci5nbworKysgYi9zeXN1dGlscy9iZWF0czgv ZmlsZXMvcGF0Y2gtbGliYmVhdF9hdXRvZGlzY292ZXJfcHJvdmlkZXJzX2RvY2tlcl9kb2Nr ZXIuZ28KQEAgLTEsMTcgKzEsMTUgQEAKLS0tLSBsaWJiZWF0L2F1dG9kaXNjb3Zlci9wcm92 aWRlcnMvZG9ja2VyL2RvY2tlci5nby5vcmlnCTIwMjItMTAtMjQgMDY6NDk6MzEgVVRDCi0r KysgbGliYmVhdC9hdXRvZGlzY292ZXIvcHJvdmlkZXJzL2RvY2tlci9kb2NrZXIuZ28KLUBA IC0xNSw4ICsxNSw4IEBACistLS0gbGliYmVhdC9hdXRvZGlzY292ZXIvcHJvdmlkZXJzL2Rv Y2tlci9kb2NrZXIuZ28ub3JpZwkyMDI0LTA3LTA5IDAwOjAwOjM2LjAwMDAwMDAwMCArMDIw MAorKysrIGxpYmJlYXQvYXV0b2Rpc2NvdmVyL3Byb3ZpZGVycy9kb2NrZXIvZG9ja2VyLmdv CTIwMjQtMDctMTMgMjE6NDA6MjUuOTA4ODQ5MDAwICswMjAwCitAQCAtMTUsNyArMTUsNyBA QAogIC8vIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGlt aXRhdGlvbnMKICAvLyB1bmRlciB0aGUgTGljZW5zZS4KICAKIC0vL2dvOmJ1aWxkIGxpbnV4 IHx8IGRhcndpbiB8fCB3aW5kb3dzCi0tLy8gK2J1aWxkIGxpbnV4IGRhcndpbiB3aW5kb3dz CiArLy9nbzpidWlsZCBsaW51eCB8fCBkYXJ3aW4gfHwgd2luZG93cyB8fCBmcmVlYnNkCi0r Ly8gK2J1aWxkIGxpbnV4IGRhcndpbiB3aW5kb3dzIGZyZWVic2QKICAKICBwYWNrYWdlIGRv Y2tlcgogIAotQEAgLTMzLDcgKzMzLDcgQEAgaW1wb3J0ICgKK0BAIC0zMiw3ICszMiw3IEBA CiAgCSJnaXRodWIuY29tL2VsYXN0aWMvYmVhdHMvdjcvbGliYmVhdC9jb21tb24iCiAgCiAg CSJnaXRodWIuY29tL2VsYXN0aWMvZWxhc3RpYy1hZ2VudC1hdXRvZGlzY292ZXIvYnVzIgpk aWZmIC0tZ2l0IGEvc3lzdXRpbHMvYmVhdHM4L2ZpbGVzL3BhdGNoLWxpYmJlYXRfYXV0b2Rp c2NvdmVyX3Byb3ZpZGVyc19rdWJlcm5ldGVzX2NvbmZpZy5nbyBiL3N5c3V0aWxzL2JlYXRz OC9maWxlcy9wYXRjaC1saWJiZWF0X2F1dG9kaXNjb3Zlcl9wcm92aWRlcnNfa3ViZXJuZXRl c19jb25maWcuZ28KaW5kZXggMzZlZWUwZjljZDkwLi5kOWExNzQzYmZkODcgMTAwNjQ0Ci0t LSBhL3N5c3V0aWxzL2JlYXRzOC9maWxlcy9wYXRjaC1saWJiZWF0X2F1dG9kaXNjb3Zlcl9w cm92aWRlcnNfa3ViZXJuZXRlc19jb25maWcuZ28KKysrIGIvc3lzdXRpbHMvYmVhdHM4L2Zp bGVzL3BhdGNoLWxpYmJlYXRfYXV0b2Rpc2NvdmVyX3Byb3ZpZGVyc19rdWJlcm5ldGVzX2Nv bmZpZy5nbwpAQCAtMSwxMyArMSwxMSBAQAotLS0tIGxpYmJlYXQvYXV0b2Rpc2NvdmVyL3By b3ZpZGVycy9rdWJlcm5ldGVzL2NvbmZpZy5nby5vcmlnCTIwMjEtMTItMTcgMTU6NTQ6NDEg VVRDCi0rKysgbGliYmVhdC9hdXRvZGlzY292ZXIvcHJvdmlkZXJzL2t1YmVybmV0ZXMvY29u ZmlnLmdvCi1AQCAtMTUsOCArMTUsOCBAQAorLS0tIGxpYmJlYXQvYXV0b2Rpc2NvdmVyL3By b3ZpZGVycy9rdWJlcm5ldGVzL2NvbmZpZy5nby5vcmlnCTIwMjQtMDctMDkgMDA6MDA6MzYu MDAwMDAwMDAwICswMjAwCisrKysgbGliYmVhdC9hdXRvZGlzY292ZXIvcHJvdmlkZXJzL2t1 YmVybmV0ZXMvY29uZmlnLmdvCTIwMjQtMDctMTMgMjE6NDI6MzIuNzk5MDAwMDAwICswMjAw CitAQCAtMTUsNyArMTUsNyBAQAogIC8vIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw ZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICAvLyB1bmRlciB0aGUgTGljZW5zZS4KICAK IC0vL2dvOmJ1aWxkIGxpbnV4IHx8IGRhcndpbiB8fCB3aW5kb3dzCi0tLy8gK2J1aWxkIGxp bnV4IGRhcndpbiB3aW5kb3dzCiArLy9nbzpidWlsZCBsaW51eCB8fCBkYXJ3aW4gfHwgd2lu ZG93cyB8fCBmcmVlYnNkCi0rLy8gK2J1aWxkIGxpbnV4IGRhcndpbiB3aW5kb3dzIGZyZWVi c2QKICAKICBwYWNrYWdlIGt1YmVybmV0ZXMKICAKZGlmZiAtLWdpdCBhL3N5c3V0aWxzL2Jl YXRzOC9maWxlcy9wYXRjaC1saWJiZWF0X2F1dG9kaXNjb3Zlcl9wcm92aWRlcnNfa3ViZXJu ZXRlc19rdWJlcm5ldGVzLmdvIGIvc3lzdXRpbHMvYmVhdHM4L2ZpbGVzL3BhdGNoLWxpYmJl YXRfYXV0b2Rpc2NvdmVyX3Byb3ZpZGVyc19rdWJlcm5ldGVzX2t1YmVybmV0ZXMuZ28KaW5k ZXggMDc5NWYyZGU3Yzk4Li44ZjQ0NmRkMGY4ZWIgMTAwNjQ0Ci0tLSBhL3N5c3V0aWxzL2Jl YXRzOC9maWxlcy9wYXRjaC1saWJiZWF0X2F1dG9kaXNjb3Zlcl9wcm92aWRlcnNfa3ViZXJu ZXRlc19rdWJlcm5ldGVzLmdvCisrKyBiL3N5c3V0aWxzL2JlYXRzOC9maWxlcy9wYXRjaC1s aWJiZWF0X2F1dG9kaXNjb3Zlcl9wcm92aWRlcnNfa3ViZXJuZXRlc19rdWJlcm5ldGVzLmdv CkBAIC0xLDEzICsxLDExIEBACi0tLS0gbGliYmVhdC9hdXRvZGlzY292ZXIvcHJvdmlkZXJz L2t1YmVybmV0ZXMva3ViZXJuZXRlcy5nby5vcmlnCTIwMjEtMTItMTcgMTU6NTQ6NDEgVVRD Ci0rKysgbGliYmVhdC9hdXRvZGlzY292ZXIvcHJvdmlkZXJzL2t1YmVybmV0ZXMva3ViZXJu ZXRlcy5nbwotQEAgLTE1LDggKzE1LDggQEAKKy0tLSBsaWJiZWF0L2F1dG9kaXNjb3Zlci9w cm92aWRlcnMva3ViZXJuZXRlcy9rdWJlcm5ldGVzLmdvLm9yaWcJMjAyNC0wNy0xMyAyMTo0 NDowMS45ODQxMDMwMDAgKzAyMDAKKysrKyBsaWJiZWF0L2F1dG9kaXNjb3Zlci9wcm92aWRl cnMva3ViZXJuZXRlcy9rdWJlcm5ldGVzLmdvCTIwMjQtMDctMTMgMjE6NDQ6MDcuNjMzNDcw MDAwICswMjAwCitAQCAtMTUsNyArMTUsNyBAQAogIC8vIHNwZWNpZmljIGxhbmd1YWdlIGdv dmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICAvLyB1bmRlciB0aGUgTGlj ZW5zZS4KICAKIC0vL2dvOmJ1aWxkIGxpbnV4IHx8IGRhcndpbiB8fCB3aW5kb3dzCi0tLy8g K2J1aWxkIGxpbnV4IGRhcndpbiB3aW5kb3dzCiArLy9nbzpidWlsZCBsaW51eCB8fCBkYXJ3 aW4gfHwgd2luZG93cyB8fCBmcmVlYnNkCi0rLy8gK2J1aWxkIGxpbnV4IGRhcndpbiB3aW5k b3dzIGZyZWVic2QKICAKICBwYWNrYWdlIGt1YmVybmV0ZXMKICAKZGlmZiAtLWdpdCBhL3N5 c3V0aWxzL2JlYXRzOC9maWxlcy9wYXRjaC1saWJiZWF0X3NjcmlwdHNfTWFrZWZpbGUgYi9z eXN1dGlscy9iZWF0czgvZmlsZXMvcGF0Y2gtbGliYmVhdF9zY3JpcHRzX01ha2VmaWxlCmlu ZGV4IDU5YzY5NWEwNDgyNC4uZjI5OGFkYzBjOWFkIDEwMDY0NAotLS0gYS9zeXN1dGlscy9i ZWF0czgvZmlsZXMvcGF0Y2gtbGliYmVhdF9zY3JpcHRzX01ha2VmaWxlCisrKyBiL3N5c3V0 aWxzL2JlYXRzOC9maWxlcy9wYXRjaC1saWJiZWF0X3NjcmlwdHNfTWFrZWZpbGUKQEAgLTEs MTUgKzEsMTUgQEAKLS0tLSBsaWJiZWF0L3NjcmlwdHMvTWFrZWZpbGUub3JpZwkyMDIyLTA5 LTI3IDEzOjE5OjI3IFVUQwotKysrIGxpYmJlYXQvc2NyaXB0cy9NYWtlZmlsZQotQEAgLTQ3 LDcgKzQ3LDcgQEAgR09GSUxFUyA9ICQoc2hlbGwgZmluZCAuIC10eXBlIGYgLW5hbWUgJyou Z28nIDI+L2Rldi9uCistLS0gbGliYmVhdC9zY3JpcHRzL01ha2VmaWxlLm9yaWcJMjAyNC0w Ny0wOSAwMDowMDozNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJiZWF0L3NjcmlwdHMvTWFr ZWZpbGUJMjAyNC0wNy0xMyAyMTo0NTo0MC43ODg2MjEwMDAgKzAyMDAKK0BAIC00Nyw3ICs0 Nyw3IEBACiAgR09GSUxFU19OT1ZFTkRPUiA9ICQoc2hlbGwgZmluZCAuIC10eXBlIGYgLW5h bWUgJyouZ28nIC1ub3QgLXBhdGggIiovdmVuZG9yLyoiIDI+L2Rldi9udWxsKQogIEdPRklM RVNfQUxMID0gJChHT0ZJTEVTKSAkKHNoZWxsIGZpbmQgJChFU19CRUFUUykgLXR5cGUgZiAt bmFtZSAnKi5nbycgMj4vZGV2L251bGwpCi0gR09QQUNLQUdFU19TVFJFU1NURVNUUz0kKHNo ZWxsIGZpbmQgLiAtbmFtZSAnKi5nbycgMj4vZGV2L251bGwgfCB4YXJncyBncmVwIC1sICdc K2J1aWxkLipzdHJlc3N0ZXN0JyB8IHhhcmdzIC1uMSBkaXJuYW1lIHwgdW5pcSkKKyBHT1BB Q0tBR0VTX1NUUkVTU1RFU1RTPSQoc2hlbGwgZmluZCAuIC10eXBlIGQgXCggLW5hbWUgInN0 cmVzcyIgXCkgMj4vZGV2L251bGwpCiAtU0hFTEw9YmFzaAogK1NIRUxMPXNoCiAgRVNfSE9T VD89ZWxhc3RpY3NlYXJjaAogIEVTX1BPUlQ/PTkyMDAKICBFU19VU0VSPz1iZWF0cwotQEAg LTM1MiwxMiArMzUyLDEyIEBAIGlmbmRlZiBFWENMVURFX0NPTU1PTl9VUERBVEVfVEFSR0VU CitAQCAtMzUyLDEyICszNTIsMTIgQEAKICB1cGRhdGU6IHB5dGhvbi1lbnYgZmllbGRzIGNv bGxlY3QgY29uZmlnICMjIEBidWlsZCBVcGRhdGUgZXhwZWN0cyB0aGUgbW9zdCByZWNlbnQg dmVyc2lvbiBvZiBsaWJiZWF0IGluIHRoZSBHT1BBVEgKICAJQGVjaG8gIlVwZGF0aW5nIGdl bmVyYXRlZCBmaWxlcyBmb3IgJHtCRUFUX05BTUV9IgogIApkaWZmIC0tZ2l0IGEvc3lzdXRp bHMvYmVhdHM4L2ZpbGVzL3BhdGNoLXZlbmRvcl9naXRodWIuY29tX2dvZGJ1c19kYnVzX3Ry YW5zcG9ydF9fdW5peGNyZWRfX2ZyZWVic2QuZ28gYi9zeXN1dGlscy9iZWF0czgvZmlsZXMv cGF0Y2gtdmVuZG9yX2dpdGh1Yi5jb21fZ29kYnVzX2RidXNfdHJhbnNwb3J0X191bml4Y3Jl ZF9fZnJlZWJzZC5nbwppbmRleCBlOGFjZGYxNDc4MDYuLmNiZDgyNjQzZWZkZiAxMDA2NDQK LS0tIGEvc3lzdXRpbHMvYmVhdHM4L2ZpbGVzL3BhdGNoLXZlbmRvcl9naXRodWIuY29tX2dv ZGJ1c19kYnVzX3RyYW5zcG9ydF9fdW5peGNyZWRfX2ZyZWVic2QuZ28KKysrIGIvc3lzdXRp bHMvYmVhdHM4L2ZpbGVzL3BhdGNoLXZlbmRvcl9naXRodWIuY29tX2dvZGJ1c19kYnVzX3Ry YW5zcG9ydF9fdW5peGNyZWRfX2ZyZWVic2QuZ28KQEAgLTEsNSArMSw1IEBACi0tLS0gdmVu ZG9yL2dpdGh1Yi5jb20vZ29kYnVzL2RidXMvdHJhbnNwb3J0X3VuaXhjcmVkX2ZyZWVic2Qu Z28ub3JpZwkyMDIxLTA4LTA1IDEyOjQwOjM4IFVUQwotKysrIHZlbmRvci9naXRodWIuY29t L2dvZGJ1cy9kYnVzL3RyYW5zcG9ydF91bml4Y3JlZF9mcmVlYnNkLmdvCistLS0gdmVuZG9y L2dpdGh1Yi5jb20vZ29kYnVzL2RidXMvdjUvdHJhbnNwb3J0X3VuaXhjcmVkX2ZyZWVic2Qu Z28ub3JpZwkyMDIxLTA4LTA1IDEyOjQwOjM4IFVUQworKysrIHZlbmRvci9naXRodWIuY29t L2dvZGJ1cy9kYnVzL3Y1L3RyYW5zcG9ydF91bml4Y3JlZF9mcmVlYnNkLmdvCiBAQCAtOCw3 ICs4LDggQEAKICBwYWNrYWdlIGRidXMKICAK --------------WqunSiK08hJ8YrcC72nHlyo1--