From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Frank Crawford To: git-commits@fedoraproject.org Subject: [rpms/hash-slinger] f43: Upgrade to new upstream version and fixes for tlsa Date: Fri, 31 Jul 2026 05:12:38 GMT Message-ID: <178547475887.1.13397500681034803398.rpms-hash-slinger-850fb009fc67@fedoraproject.org> List-ID: X-Git-Repo: rpms/hash-slinger X-Git-Branch: f43 X-Git-Rev: 850fb009fc672b3a0463a89037fc22512b860791 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvaGFzaC1zbGluZ2Vy CkJyYW5jaCA6IGY0MwpDb21taXQgOiA4NTBmYjAwOWZjNjcyYjNhMDQ2M2E4OTAzN2ZjMjI1MTJi ODYwNzkxCkF1dGhvciA6IEZyYW5rIENyYXdmb3JkIDxmcmFua0BjcmF3Zm9yZC5lbXUuaWQuYXU+ CkRhdGUgICA6IDIwMjYtMDctMzFUMTQ6MjE6MzYrMTA6MDAKU3RhdHMgIDogKzkzMy8tNCBpbiAz IGZpbGUocykKVVJMICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9oYXNo LXNsaW5nZXIvYy84NTBmYjAwOWZjNjcyYjNhMDQ2M2E4OTAzN2ZjMjI1MTJiODYwNzkxP2JyYW5j aD1mNDMKCkxvZzoKVXBncmFkZSB0byBuZXcgdXBzdHJlYW0gdmVyc2lvbiBhbmQgZml4ZXMgZm9y IHRsc2EKCi0tLQpkaWZmIC0tZ2l0IGEvaGFzaC1zbGluZ2VyLnNwZWMgYi9oYXNoLXNsaW5nZXIu c3BlYwppbmRleCA3OWI5ZDI3Li45ZjE4ODE2IDEwMDY0NAotLS0gYS9oYXNoLXNsaW5nZXIuc3Bl YworKysgYi9oYXNoLXNsaW5nZXIuc3BlYwpAQCAtMiwyMCArMiwzNSBAQAogCiBTdW1tYXJ5OiBH ZW5lcmF0ZSBhbmQgdmVyaWZ5IHZhcmlvdXMgRE5TIHJlY29yZHMgc3VjaCBhcyBTU0hGUCwgVExT QSBhbmQgT1BFTlBHUEtFWQogTmFtZTogaGFzaC1zbGluZ2VyCi1WZXJzaW9uOiAzLjUKLVJlbGVh c2U6IDElez9kaXN0fQorVmVyc2lvbjogMy42CitSZWxlYXNlOiAyJXs/ZGlzdH0KIExpY2Vuc2U6 IEdQTC0yLjAtb3ItbGF0ZXIKIFVybDogIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXRvYW1zLyV7bmFt ZX0vCi1Tb3VyY2U6ICAle3VybH1hcmNoaXZlLyV7dmVyc2lvbn0vJXtuYW1lfS0le3ZlcnNpb259 LnRhci5negorU291cmNlMDogICV7dXJsfWFyY2hpdmUvJXt2ZXJzaW9ufS8le25hbWV9LSV7dmVy c2lvbn0udGFyLmd6CisjIGJhY2sgcG9ydCB0bHNhIGZyb20gdjMuNCBmb3IgUkhFTCBzeXN0ZW1z IGFzIHB5dGhvbiA8IDMuMTMgZXhjZXB0IFJIRUwxMAorIyBodHRwczovL2dpdGh1Yi5jb20vbGV0 b2Ftcy9oYXNoLXNsaW5nZXIvaXNzdWVzLzU0CitTb3VyY2UxOiAgdGxzYS12My40CiAlaWYgJXt3 aXRoIG1hbn0KICMgT25seSB0byByZWdlbmVyYXRlIHRoZSBtYW4gcGFnZSwgd2hpY2ggaXMgc2hp cHBlZCBwZXIgZGVmYXVsdAogQnVpbGRyZXF1aXJlczogeG1sdG8KICVlbmRpZgogQnVpbGRSZXF1 aXJlczogcHl0aG9uMy1kZXZlbCwgbWFrZQorJWlmIDAlez9yaGVsfSAmJiAwJXs/cmhlbH0gPD0g OQogUmVxdWlyZXM6IHB5dGhvbjMgPj0gMy40CislZWxzZQorJWlmIDAlez9yaGVsfSA9PSAxMAor IyBUaGlzIGlzIG5vdCBxdWl0ZSByaWdodCBmb3IgdGxzYSwgYnV0IHdpbGwgd29yayBmb3IgbW9z dCB1c2VzCitSZXF1aXJlczogcHl0aG9uMyA+PSAzLjEyCislZWxzZQorUmVxdWlyZXM6IHB5dGhv bjMgPj0gMy4xMworJWVuZGlmCislZW5kaWYKIFJlcXVpcmVzOiBweXRob24zLWRucywgcHl0aG9u My11bmJvdW5kCiBSZXF1aXJlczogb3BlbnNzaC1jbGllbnRzID49IDQsIHB5dGhvbjMtZ251cGcg Pj0gMC4zLjcKIFJlcXVpcmVzOiBweXRob24zLWNyeXB0b2dyYXBoeQorJWlmIDAlez9yaGVsfSAm JiAwJXs/cmhlbH0gPD0gOQorUmVxdWlyZXM6IHB5dGhvbjMtbTJjcnlwdG8KKyVlbmRpZgogQnVp bGRBcmNoOiBub2FyY2gKIE9ic29sZXRlczogc3NoZnAgPCAyLjAKIFByb3ZpZGVzOiBzc2hmcCAg PSAle3ZlcnNpb259CkBAIC0zNSw2ICs1MCw5IEBAIFRoaXMgcGFja2FnZSBoYXMgaW5jb3Jwb3Jh dGVkIHRoZSBvbGQgJ3NzaGZwJyBhbmQgJ3N3ZWRlJyBjb21tYW5kcy9wYWNrYWdlcwogCiAlcHJl cAogJWF1dG9zZXR1cCAtcDEKKyVpZiAwJXs/cmhlbH0gJiYgMCV7P3JoZWx9IDw9IDkKK2NwICV7 U09VUkNFMX0gdGxzYQorJWVuZGlmCiAKICVidWlsZAogJW1ha2VfYnVpbGQgYWxsCkBAIC00OSw2 ICs2NywxNSBAQCBUaGlzIHBhY2thZ2UgaGFzIGluY29ycG9yYXRlZCB0aGUgb2xkICdzc2hmcCcg YW5kICdzd2VkZScgY29tbWFuZHMvcGFja2FnZXMKICVkb2MgJXtfbWFuZGlyfS9tYW4xLyoKIAog JWNoYW5nZWxvZworKiBGcmkgSnVsIDMxIDIwMjYgRnJhbmsgQ3Jhd2ZvcmQgPGZyYW5rQGNyYXdm b3JkLmVtdS5pZC5hdT4gLSAzLjYtMgorLSBCYWNrcG9ydCB0bHNhIGZyb20gdjMuNCBmb3Igb2xk ZXIgUkhFTCBzeXN0ZW1zIGFzIHB5dGhvbiA8IDMuMTMKKworKiBTYXQgSnVsIDI1IDIwMjYgRnJh bmsgQ3Jhd2ZvcmQgPGZyYW5rQGNyYXdmb3JkLmVtdS5pZC5hdT4gLSAzLjYtMQorLSBVcGRhdGVk IHRvIDMuNgorCisqIFRodSBKdWwgMTYgMjAyNiBGZWRvcmEgUmVsZWFzZSBFbmdpbmVlcmluZyA8 cmVsZW5nQGZlZG9yYXByb2plY3Qub3JnPiAtIDMuNS0yCistIFJlYnVpbHQgZm9yIGh0dHBzOi8v ZmVkb3JhcHJvamVjdC5vcmcvd2lraS9GZWRvcmFfNDVfTWFzc19SZWJ1aWxkCisKICogVHVlIEZl YiAyNCAyMDI2IEZyYW5rIENyYXdmb3JkIDxmcmFua0BjcmF3Zm9yZC5lbXUuaWQuYXU+IC0gMy41 LTEKIC0gVXBkYXRlZCB0byAzLjUKIC0gUmVlbmFibGUgdGxzYSB1c2luZyBweXRob24zLWNyeXB0 b2dyYXBoeSAtIEJaMjMxODMwNiBhbmQgQloyMzY3MTE1CgpkaWZmIC0tZ2l0IGEvc291cmNlcyBi L3NvdXJjZXMKaW5kZXggY2E4ODBjNC4uYmRkY2U3MSAxMDA2NDQKLS0tIGEvc291cmNlcworKysg Yi9zb3VyY2VzCkBAIC0xICsxIEBACi1TSEE1MTIgKGhhc2gtc2xpbmdlci0zLjUudGFyLmd6KSA9 IGFjMzBjZmZhMGRiYjgzMzg5ZjIxNTEwMDAzNWFkZTg0MGY4ZmM5NDdlOGY2MjVlMTgwNjhmYTZk MmFjNDljNWU3ZjViZTZjZDI0N2Y3MGY0NmM3MzQ3MmNjMTM3NDQzOTQ0YzIwZDdiNzY2ZmNjYmJj YjU3NTI0Yjg4ODdhNDMxCitTSEE1MTIgKGhhc2gtc2xpbmdlci0zLjYudGFyLmd6KSA9IDc2NzE4 MTA3M2NmZTRkZTNlZmEwNWIyNWFkMzFkNTI1ODE0MjA2MzRkMTQyYzlkODQzYzkyYjNiNzUyMTE4 YTNjM2JhMjIzY2EwYzcyMjcxODhmMDJiODlmODk5ZDdmZDVjMWYxN2Q0MzNmZTYxZGFlNzk2NjA3 NTVmM2MzMjMyCgpkaWZmIC0tZ2l0IGEvdGxzYS12My40IGIvdGxzYS12My40Cm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YmY0MjQKLS0tIC9kZXYvbnVsbAorKysgYi90bHNh LXYzLjQKQEAgLTAsMCArMSw5MDIgQEAKKyMhL3Vzci9iaW4vcHl0aG9uMworCisjIHRsc2EgLSBB IHRvb2wgdG8gY3JlYXRlIERBTkUvVExTQSByZWNvcmRzLiAoY2FsbGVkICdzd2VkZScgYmVmb3Jl KQorIworIyBUaGlzIHRvb2wgaXMgbG9vc2x5IGJhc2VkIG9uIHRoZSAnZGFuZScgcHJvZ3JhbSBp biB0aGUgc3NoZnAgcGFja2FnZSBieSBQYXVsCisjIFdvdXRlcnMgYW5kIENocmlzdG9waGVyIE9s YWgKKyMKKyMgQ29weXJpZ2h0IDIwMTIgUGlldGVyIExleGlzIDxwaWV0ZXIubGV4aXNAb3MzLm5s PgorIyBDb3B5cmlnaHQgMjAxNCBQYXVsIFdvdXRlcnMgPHB3b3V0ZXJzQHJlZGhhdC5jb20+Cisj IENvcHlyaWdodCAyMDE1LTIwMTkgRGlyayBTdG9lY2tlciA8aGFzaHNsaW5nZXJAZHN0b2Vja2Vy LmRlPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMg TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIwor IyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitWRVJTSU9OPSIzLjQi CisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHNvY2tldAoraW1wb3J0IHVuYm91bmQK K2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgcmUKK2Zyb20gTTJDcnlwdG8gaW1wb3J0IFg1MDks IFNTTCwgQklPLCBtMgorZnJvbSBiaW5hc2NpaSBpbXBvcnQgYjJhX2hleAorZnJvbSBoYXNobGli IGltcG9ydCBzaGEyNTYsIHNoYTUxMgorZnJvbSBpcGFkZHJlc3MgaW1wb3J0IElQdjRBZGRyZXNz LCBJUHY2QWRkcmVzcworCitST09US0VZPSJub25lIgorY2F1bGRyb24gPSAoICIvdmFyL2xpYi91 bmJvdW5kL3Jvb3QuYW5jaG9yIiwgIi92YXIvbGliL3VuYm91bmQvcm9vdC5rZXkiLCAiL2V0Yy91 bmJvdW5kL3Jvb3Qua2V5IiwgIi91c3Ivc2hhcmUvZG5zL3Jvb3Qua2V5IiApCitmb3Igcm9vdCBp biBjYXVsZHJvbjoKKwlpZiBvcy5wYXRoLmlzZmlsZShyb290KToKKwkJUk9PVEtFWT1yb290CisJ CWJyZWFrCisKK2RlZiBnZW5UTFNBKGhvc3RuYW1lLCBwcm90b2NvbCwgcG9ydCwgY2VydGlmaWNh dGUsIG91dHB1dD0ncmZjJywgdXNhZ2U9MSwgc2VsZWN0b3I9MCwgbXR5cGU9MSk6CisJIiIiVGhp cyBmdW5jdGlvbiBnZW5lcmF0ZXMgYSBUTFNBUmVjb3JkIG9iamVjdCB1c2luZyB0aGUgZGF0YSBw YXNzZWQgaW4gdGhlIHBhcmFtZXRlcnMsCisJaXQgdGhlbiB2YWxpZGF0ZXMgdGhlIHJlY29yZCBh bmQgcmV0dXJucyB0aGUgUlIgYXMgYSBzdHJpbmcuCisJIiIiCisJIyBjaGVjayBpZiB2YWxpZCB2 YXJzIHdlcmUgcGFzc2VkCisJaWYgaG9zdG5hbWVbLTFdICE9ICcuJzoKKwkJaG9zdG5hbWUgKz0g Jy4nCisKKwkjIENyZWF0ZSB0aGUgcmVjb3JkIHdpdGhvdXQgYSBjZXJ0aWZpY2F0ZQorCWlmIHBv cnQgPT0gJyonOgorCQlyZWNvcmQgPSBUTFNBUmVjb3JkKG5hbWU9JyVzLl8lcy4lcyclKHBvcnQs cHJvdG9jb2wsaG9zdG5hbWUpLCB1c2FnZT11c2FnZSwgc2VsZWN0b3I9c2VsZWN0b3IsIG10eXBl PW10eXBlLCBjZXJ0ID0nJykKKwllbHNlOgorCQlyZWNvcmQgPSBUTFNBUmVjb3JkKG5hbWU9J18l cy5fJXMuJXMnJShwb3J0LHByb3RvY29sLGhvc3RuYW1lKSwgdXNhZ2U9dXNhZ2UsIHNlbGVjdG9y PXNlbGVjdG9yLCBtdHlwZT1tdHlwZSwgY2VydCA9JycpCisJIyBDaGVjayBpZiB0aGUgcmVjb3Jk IGlzIHZhbGlkCisJaWYgcmVjb3JkLmlzVmFsaWQ6CisJCWlmIHJlY29yZC5zZWxlY3RvciA9PSAw OgorCQkJIyBIYXNoIHRoZSBGdWxsIGNlcnRpZmljYXRlCisJCQlyZWNvcmQuY2VydCA9IGdldEhh c2goY2VydGlmaWNhdGUsIHJlY29yZC5tdHlwZSkKKwkJZWxzZToKKwkJCSMgSGFzaCBvbmx5IHRo ZSBTdWJqZWN0UHVibGljS2V5SW5mbworCQkJcmVjb3JkLmNlcnQgPSBnZXRIYXNoKGNlcnRpZmlj YXRlLmdldF9wdWJrZXkoKSwgcmVjb3JkLm10eXBlKQorCisJcmVjb3JkLmlzVmFsaWQocmFpc2VF eGNlcHRpb249VHJ1ZSkKKworCWlmIG91dHB1dCA9PSAnZ2VuZXJpYyc6CisJCXJldHVybiByZWNv cmQuZ2V0UmVjb3JkKGdlbmVyaWM9VHJ1ZSkKKwlyZXR1cm4gcmVjb3JkLmdldFJlY29yZCgpCisK K2RlZiBnZW5SZWNvcmRzKGhvc3RuYW1lLCBhZGRyZXNzLCBwcm90b2NvbCwgcG9ydCwgY2hhaW4s IG91dHB1dD0ncmZjJywgdXNhZ2U9MSwgc2VsZWN0b3I9MCwgbXR5cGU9MSk6CisJY2VydCA9IE5v bmUKKwljaGFpbmVkID0gY2hlY2tDaGFpbkxpbmsoY2hhaW4pWzBdCisJaWYgbm90IGNoYWluZWQ6 CisJCXByaW50KCJXQVJOOiBDZXJ0aWZpY2F0ZXMgZG9uJ3QgY2hhaW4iKQorCWNlcnRzbGVmdCA9 IGxlbihjaGFpbikKKwlmb3IgY2hhaW5jZXJ0IGluIGNoYWluOgorCQljZXJ0c2xlZnQgLT0gMQor CQlpZiB1c2FnZSA9PSAxIG9yIHVzYWdlID09IDM6CisJCQkjIFRoZSBmaXJzdCBjZXJ0IGlzIHRo ZSBlbmQtZW50aXR5IGNlcnQKKwkJCXByaW50KCdHb3QgYSBjZXJ0aWZpY2F0ZSBmb3IgJXMgd2l0 aCBTdWJqZWN0OiAlcycgJSAoYWRkcmVzcywgY2hhaW5jZXJ0LmdldF9zdWJqZWN0KCkpKQorCQkJ Y2VydCA9IGNoYWluY2VydAorCQkJYnJlYWsKKwkJZWxzZToKKwkJCWlmICh1c2FnZSA9PSAwIGFu ZCBjaGFpbmNlcnQuY2hlY2tfY2EoKSkgb3IgdXNhZ2UgPT0gMjoKKwkJCQlpZiBjZXJ0c2xlZnQ6 ICMgZG9uJ3QgYXNrIGZvciB0aGUgbGFzdCBvbmUKKwkJCQkJc3lzLnN0ZG91dC53cml0ZSgnR290 IGEgY2VydGlmaWNhdGUgd2l0aCB0aGUgZm9sbG93aW5nIFN1YmplY3Q6XG5cdCVzXG5Vc2UgdGhp cyBhcyBjZXJ0aWZpY2F0ZSB0byBtYXRjaD8gW3kvTl0gJyAlIGNoYWluY2VydC5nZXRfc3ViamVj dCgpKQorCQkJCQlpbnB1dF9vayA9IEZhbHNlCisJCQkJCXdoaWxlIG5vdCBpbnB1dF9vazoKKwkJ CQkJCXVzZXJfaW5wdXQgPSBpbnB1dCgpCisJCQkJCQlpZiB1c2VyX2lucHV0IGluIFsnJywnbics J04nXToKKwkJCQkJCQlpbnB1dF9vaz1UcnVlCisJCQkJCQllbGlmIHVzZXJfaW5wdXQgaW4gWyd5 JywgJ1knXToKKwkJCQkJCQlpbnB1dF9vayA9IFRydWUKKwkJCQkJCQljZXJ0ID0gY2hhaW5jZXJ0 CisJCQkJCQllbHNlOgorCQkJCQkJCXN5cy5zdGRvdXQud3JpdGUoJ1BsZWFzZSBhbnN3ZXIgWSBv ciBOJykKKwkJCQllbHNlOgorCQkJCQlwcmludCgnVXNpbmcgY2VydGlmaWNhdGUgd2l0aCB0aGUg Zm9sbG93aW5nIFN1YmplY3Q6XG5cdCVzXG4nICUgY2hhaW5jZXJ0LmdldF9zdWJqZWN0KCkpCisJ CQkJCWNlcnQgPSBjaGFpbmNlcnQKKwkJCWlmIGNlcnQ6CisJCQkJYnJlYWsKKworCWlmIGNlcnQ6 ICMgUHJpbnQgdGhlIHJlcXVlc3RlZCByZWNvcmRzIGJhc2VkIG9uIHRoZSByZXRyaWV2ZWQgY2Vy dGlmaWNhdGVzCisJCWlmIG91dHB1dCA9PSAnYm90aCc6CisJCQlwcmludChnZW5UTFNBKGhvc3Ru YW1lLCBwcm90b2NvbCwgcG9ydCwgY2VydCwgJ2RyYWZ0JywgdXNhZ2UsIHNlbGVjdG9yLCBtdHlw ZSkpCisJCQlwcmludChnZW5UTFNBKGhvc3RuYW1lLCBwcm90b2NvbCwgcG9ydCwgY2VydCwgJ3Jm YycsIHVzYWdlLCBzZWxlY3RvciwgbXR5cGUpKQorCQllbHNlOgorCQkJcHJpbnQoZ2VuVExTQSho b3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQsIGNlcnQsIG91dHB1dCwgdXNhZ2UsIHNlbGVjdG9yLCBt dHlwZSkpCisKKwkjIENsZWFyIHRoZSBjZXJ0IGZyb20gbWVtb3J5ICh0byBzdG9wIE0yQ3J5cHRv IGZyb20gc2VnZmF1bHRpbmcpCisJY2VydD1Ob25lCisKK2RlZiBnZXRBKGhvc3RuYW1lLCBzZWN1 cmU9VHJ1ZSk6CisJIiIiR2V0cyBhIGxpc3Qgb2YgQSByZWNvcmRzIGZvciBob3N0bmFtZSwgcmV0 dXJucyBhIGxpc3Qgb2YgQVJlY29yZHMiIiIKKwlyZWNvcmRzID0gW10KKwl0cnk6CisJCXJlY29y ZHMgPSBnZXRSZWNvcmRzKGhvc3RuYW1lLCBycnR5cGU9J0EnLCBzZWN1cmU9c2VjdXJlKQorCWV4 Y2VwdCBJbnNlY3VyZUxvb2t1cEV4Y2VwdGlvbiBhcyBlOgorCQlwcmludChzdHIoZSkpCisJZXhj ZXB0IEROU0xvb2t1cEVycm9yIGFzIGU6CisJCXByaW50KCdVbmFibGUgdG8gcmVzb2x2ZSAlczog JXMnICUgKGhvc3RuYW1lLCBzdHIoZSkpKQorCXJldCA9IFtdCisJZm9yIHJlY29yZCBpbiByZWNv cmRzOgorCQlyZXQuYXBwZW5kKEFSZWNvcmQoaG9zdG5hbWUsIHN0cihJUHY0QWRkcmVzcyhpbnQo YjJhX2hleChyZWNvcmQpLDE2KSkpKSkKKwlyZXR1cm4gcmV0CisKK2RlZiBnZXRBQUFBKGhvc3Ru YW1lLCBzZWN1cmU9VHJ1ZSk6CisJIiIiR2V0cyBhIGxpc3Qgb2YgQUFBQSByZWNvcmRzIGZvciBo b3N0bmFtZSwgcmV0dXJucyBhIGxpc3Qgb2YgQUFBQVJlY29yZHMiIiIKKwlyZWNvcmRzID0gW10K Kwl0cnk6CisJCXJlY29yZHMgPSBnZXRSZWNvcmRzKGhvc3RuYW1lLCBycnR5cGU9J0FBQUEnLCBz ZWN1cmU9c2VjdXJlKQorCWV4Y2VwdCBJbnNlY3VyZUxvb2t1cEV4Y2VwdGlvbiBhcyBlOgorCQlw cmludChzdHIoZSkpCisJZXhjZXB0IEROU0xvb2t1cEVycm9yIGFzIGU6CisJCXByaW50KCdVbmFi bGUgdG8gcmVzb2x2ZSAlczogJXMnICUgKGhvc3RuYW1lLCBzdHIoZSkpKQorCXJldCA9IFtdCisJ Zm9yIHJlY29yZCBpbiByZWNvcmRzOgorCQlyZXQuYXBwZW5kKEFBQUFSZWNvcmQoaG9zdG5hbWUs IHN0cihJUHY2QWRkcmVzcyhpbnQoYjJhX2hleChyZWNvcmQpLDE2KSkpKSkKKwlyZXR1cm4gcmV0 CisKK2RlZiBnZXRWZXJpZmljYXRpb25FcnJvclJlYXNvbihudW0pOgorCSIiIlRoaXMgZnVuY3Rp b24gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgWDUwOSBFcnJvciBiYXNlZCBvbiBpbnQobnVtKQor CSIiIgorCSMgVGhlc2Ugd2VyZSB0YWtlbiBmcm9tIHRoZSBNMkNyeXB0by5tMiBjb2RlCisJcmV0 dXJuIHsKKzUwOiAiWDUwOV9WX0VSUl9BUFBMSUNBVElPTl9WRVJJRklDQVRJT04iLAorMjI6ICJY NTA5X1ZfRVJSX0NFUlRfQ0hBSU5fVE9PX0xPTkciLAorMTA6ICJYNTA5X1ZfRVJSX0NFUlRfSEFT X0VYUElSRUQiLAorOTogICJYNTA5X1ZfRVJSX0NFUlRfTk9UX1lFVF9WQUxJRCIsCisyODogIlg1 MDlfVl9FUlJfQ0VSVF9SRUpFQ1RFRCIsCisyMzogIlg1MDlfVl9FUlJfQ0VSVF9SRVZPS0VEIiwK Kzc6ICAiWDUwOV9WX0VSUl9DRVJUX1NJR05BVFVSRV9GQUlMVVJFIiwKKzI3OiAiWDUwOV9WX0VS Ul9DRVJUX1VOVFJVU1RFRCIsCisxMjogIlg1MDlfVl9FUlJfQ1JMX0hBU19FWFBJUkVEIiwKKzEx OiAiWDUwOV9WX0VSUl9DUkxfTk9UX1lFVF9WQUxJRCIsCis4OiAgIlg1MDlfVl9FUlJfQ1JMX1NJ R05BVFVSRV9GQUlMVVJFIiwKKzE4OiAiWDUwOV9WX0VSUl9ERVBUSF9aRVJPX1NFTEZfU0lHTkVE X0NFUlQiLAorMTQ6ICJYNTA5X1ZfRVJSX0VSUk9SX0lOX0NFUlRfTk9UX0FGVEVSX0ZJRUxEIiwK KzEzOiAiWDUwOV9WX0VSUl9FUlJPUl9JTl9DRVJUX05PVF9CRUZPUkVfRklFTEQiLAorMTU6ICJY NTA5X1ZfRVJSX0VSUk9SX0lOX0NSTF9MQVNUX1VQREFURV9GSUVMRCIsCisxNjogIlg1MDlfVl9F UlJfRVJST1JfSU5fQ1JMX05FWFRfVVBEQVRFX0ZJRUxEIiwKKzI0OiAiWDUwOV9WX0VSUl9JTlZB TElEX0NBIiwKKzI2OiAiWDUwOV9WX0VSUl9JTlZBTElEX1BVUlBPU0UiLAorMTc6ICJYNTA5X1Zf RVJSX09VVF9PRl9NRU0iLAorMjU6ICJYNTA5X1ZfRVJSX1BBVEhfTEVOR1RIX0VYQ0VFREVEIiwK KzE5OiAiWDUwOV9WX0VSUl9TRUxGX1NJR05FRF9DRVJUX0lOX0NIQUlOIiwKKzY6ICAiWDUwOV9W X0VSUl9VTkFCTEVfVE9fREVDT0RFX0lTU1VFUl9QVUJMSUNfS0VZIiwKKzQ6ICAiWDUwOV9WX0VS Ul9VTkFCTEVfVE9fREVDUllQVF9DRVJUX1NJR05BVFVSRSIsCis1OiAgIlg1MDlfVl9FUlJfVU5B QkxFX1RPX0RFQ1JZUFRfQ1JMX1NJR05BVFVSRSIsCiszOiAgIlg1MDlfVl9FUlJfVU5BQkxFX1RP X0dFVF9DUkwiLAorMjogICJYNTA5X1ZfRVJSX1VOQUJMRV9UT19HRVRfSVNTVUVSX0NFUlQiLAor MjA6ICJYNTA5X1ZfRVJSX1VOQUJMRV9UT19HRVRfSVNTVUVSX0NFUlRfTE9DQUxMWSIsCisyMTog Ilg1MDlfVl9FUlJfVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRSIsCiswOiAgIlg1MDlf Vl9PSyJ9W2ludChudW0pXQorCitkZWYgZ2V0UmVjb3Jkcyhob3N0bmFtZSwgcnJ0eXBlPSdBJywg c2VjdXJlPVRydWUsIG5vcmVzb2x2ZXI9RmFsc2UpOgorCSIiIkRvIGEgbG9va3VwIG9mIGEgbmFt ZSBhbmQgYSBycnR5cGUsIHJldHVybnMgYSBsaXN0IG9mIGJpbmFyeSBjb2RlZCBzdHJpbmdzLiBP bmx5IHF1ZXJpZXMgZm9yIHJyX2NsYXNzIElOLiIiIgorCWdsb2JhbCByZXNvbHZjb25mCisJY3R4 ID0gdW5ib3VuZC51Yl9jdHgoKQorCWlmIG9zLnBhdGguaXNmaWxlKFJPT1RLRVkpOgorCQkjIGZp bGUgZm9ybWF0IGd1ZXNzaW5nIC0gdW5ib3VuZCBzaG91bGQgZGVhbCB3aXRoIHRoaXMgOigKKwkJ dHJ5OgorCQkJY3R4LmFkZF90YV9maWxlKFJPT1RLRVkpCisJCWV4Y2VwdDoKKwkJCXVuYm91bmQu dWJfY3R4X3RydXN0ZWRrZXlzKGN0eCxST09US0VZKQorCSMgVXNlIHRoZSBsb2NhbCBjYWNoZSBh bmQgZW11bGF0ZSAvZXRjL2hvc3RzCisJY3R4Lmhvc3RzKCIvZXRjL2hvc3RzIikKKwlpZiByZXNv bHZjb25mIGFuZCBub3Qgbm9yZXNvbHZlcjoKKwkJY3R4LnJlc29sdmNvbmYocmVzb2x2Y29uZikK KworCWlmIHJydHlwZSA9PSA1MjoKKwkJcnJ0eXBlc3RyID0gIlRMU0EiCisJZWxzZToKKwkJcnJ0 eXBlc3RyID0gcnJ0eXBlCisJaWYgdHlwZShycnR5cGUpID09IHN0cjoKKwkJaWYgJ1JSX1RZUEVf JyArIHJydHlwZSBpbiBkaXIodW5ib3VuZCk6CisJCQlycnR5cGUgPSBnZXRhdHRyKHVuYm91bmQs ICdSUl9UWVBFXycgKyBycnR5cGUpCisJCWVsc2U6CisJCQlyYWlzZSBFeGNlcHRpb24oJ0Vycm9y OiB1bmtub3duIFJSIFRZUEU6ICVzLicgJSBycnR5cGUpCisJZWxpZiB0eXBlKHJydHlwZSkgIT0g aW50OgorCQlyYWlzZSBFeGNlcHRpb24oJ0Vycm9yOiBycnR5cGUgaW4gd3JvbmcgZm9ybWF0LCBu ZWl0aGVyIGludCBub3Igc3RyLicpCisKKwlzdGF0dXMsIHJlc3VsdCA9IGN0eC5yZXNvbHZlKGhv c3RuYW1lLCBycnR5cGU9cnJ0eXBlKQorCWlmIHN0YXR1cyA9PSAwIGFuZCByZXN1bHQuaGF2ZWRh dGE6CisJCWlmIG5vdCByZXN1bHQuc2VjdXJlOgorCQkJaWYgc2VjdXJlOgorCQkJCWlmIG5vdCBu b3Jlc29sdmVyIGFuZCByZXNvbHZjb25mOgorCQkJCQlyZXR2YWwgPSBnZXRSZWNvcmRzKGhvc3Ru YW1lLCBycnR5cGUsIHNlY3VyZSwgVHJ1ZSkKKwkJCQkJcHJpbnQoJ1dhcm5pbmc6IGluaXRpYWwg cXVlcnkgdXNpbmcgcmVzb2x2ZXIgY29uZmlnIGZpbGUgd2FzIG5vdCBzZWN1cmUgKHRyeSBvcHRp b24gLS1yZXNvbHZjb25mPSIiKS4nLCBmaWxlPXN5cy5zdGRlcnIpCisJCQkJCXJlc29sdmNvbmYg PSBOb25lCisJCQkJCXJldHVybiByZXR2YWwKKwkJCQkjIFRoZSBkYXRhIGlzIGluc2VjdXJlIGFu ZCBhIHNlY3VyZSBsb29rdXAgd2FzIHJlcXVlc3RlZAorCQkJCXJhaXNlIEluc2VjdXJlTG9va3Vw RXhjZXB0aW9uKCdFcnJvcjogQW5zd2VyIHdhcyBub3QgRE5TU0VDLXNlY3VyZScpCisJCQllbHNl OgorCQkJCXByaW50KCdXYXJuaW5nOiBxdWVyeSBkYXRhIGlzIG5vdCBzZWN1cmUuJywgZmlsZT1z eXMuc3RkZXJyKQorCQkjIElmIHdlIGFyZSBoZXJlIHRoZSBkYXRhIHdhcyBlaXRoZXIgc2VjdXJl IG9yIGluc2VjdXJlIGRhdGEgaXMgYWNjZXB0ZWQKKwkJcmV0dXJuIHJlc3VsdC5kYXRhLnJhdwor CWVsc2U6CisJCXJhaXNlIEROU0xvb2t1cEVycm9yKCdVbnN1Y2Nlc3NmdWwgRE5TIGxvb2t1cCBv ciBubyBkYXRhIHJldHVybmVkIGZvciBycnR5cGUgJXMgKCVzKS4nICUgKHJydHlwZXN0ciwgcnJ0 eXBlKSkKKworIyBpZGVudGljYWwgdG8gQ29ubmVjdGlvbi5jb25uZWN0KCkgZXhjZXB0IGZvciB0 aGUgbGFzdCBwYXJhbWV0ZXIKK2RlZiBzc2xTdGFydFRMU0Nvbm5lY3QoY29ubmVjdGlvbiwgYWRk ciwgc3RhcnR0bHM9Tm9uZSk6CisgICAgICAgIGNvbm5lY3Rpb24uc29ja2V0LmNvbm5lY3QoYWRk cikKKyAgICAgICAgY29ubmVjdGlvbi5hZGRyID0gYWRkcgorICAgICAgICBpZiBzdGFydHRsczoK KyAgICAgICAgICAgICMgcHJpbWl0aXZlIG1ldGhvZCwgbm8gZXJyb3IgY2hlY2tzIHlldAorICAg ICAgICAgICAgaWYgc3RhcnR0bHMgPT0gInNtdHAiOgorICAgICAgICAgICAgICAgIGRhdGEgPSBj b25uZWN0aW9uLnNvY2tldC5yZWN2KDUwMCkKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnNv Y2tldC5zZW5kKCJFSExPIE0yQ3J5cHRvXHJcbiIuZW5jb2RlKCdhc2NpaScpKQorICAgICAgICAg ICAgICAgIGRhdGEgPSBjb25uZWN0aW9uLnNvY2tldC5yZWN2KDUwMCkKKyAgICAgICAgICAgICAg ICBjb25uZWN0aW9uLnNvY2tldC5zZW5kKCJTVEFSVFRMU1xyXG4iLmVuY29kZSgnYXNjaWknKSkK KyAgICAgICAgICAgICAgICBkYXRhID0gY29ubmVjdGlvbi5zb2NrZXQucmVjdig1MDApCisgICAg ICAgICAgICBlbGlmIHN0YXJ0dGxzID09ICJpbWFwIjoKKyAgICAgICAgICAgICAgICBkYXRhID0g Y29ubmVjdGlvbi5zb2NrZXQucmVjdig1MDApCisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5z b2NrZXQuc2VuZCgiLiBTVEFSVFRMU1xyXG4iLmVuY29kZSgnYXNjaWknKSkKKyAgICAgICAgICAg ICAgICBkYXRhID0gY29ubmVjdGlvbi5zb2NrZXQucmVjdig1MDApCisgICAgICAgICAgICBlbGlm IHN0YXJ0dGxzID09ICJmdHAiOgorICAgICAgICAgICAgICAgIGRhdGEgPSBjb25uZWN0aW9uLnNv Y2tldC5yZWN2KDUwMCkKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnNvY2tldC5zZW5kKCJB VVRIIFRMU1xyXG4iLmVuY29kZSgnYXNjaWknKSkKKyAgICAgICAgICAgICAgICBkYXRhID0gY29u bmVjdGlvbi5zb2NrZXQucmVjdig1MDApCisgICAgICAgICAgICBlbGlmIHN0YXJ0dGxzID09ICJw b3AzIjoKKyAgICAgICAgICAgICAgICBkYXRhID0gY29ubmVjdGlvbi5zb2NrZXQucmVjdig1MDAp CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zb2NrZXQuc2VuZCgiU1RMU1xyXG4iLmVuY29k ZSgnYXNjaWknKSkKKyAgICAgICAgICAgICAgICBkYXRhID0gY29ubmVjdGlvbi5zb2NrZXQucmVj dig1MDApCisgICAgICAgIGNvbm5lY3Rpb24uc2V0dXBfc3NsKCkKKyAgICAgICAgY29ubmVjdGlv bi5zZXRfY29ubmVjdF9zdGF0ZSgpCisgICAgICAgIHJldCA9IGNvbm5lY3Rpb24uY29ubmVjdF9z c2woKQorICAgICAgICBjaGVjayA9IGdldGF0dHIoY29ubmVjdGlvbiwgJ3Bvc3RDb25uZWN0aW9u Q2hlY2snLCBjb25uZWN0aW9uLmNsaWVudFBvc3RDb25uZWN0aW9uQ2hlY2spCisgICAgICAgIGlm IGNoZWNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgbm90IGNoZWNrKGNvbm5lY3Rpb24u Z2V0X3BlZXJfY2VydCgpLCBjb25uZWN0aW9uLmFkZHJbMF0pOgorICAgICAgICAgICAgICAgIHJh aXNlIENoZWNrZXIuU1NMVmVyaWZpY2F0aW9uRXJyb3IoJ3Bvc3QgY29ubmVjdGlvbiBjaGVjayBm YWlsZWQnKQorICAgICAgICByZXR1cm4gcmV0CisKK2RlZiBnZXRIYXNoKGNlcnRpZmljYXRlLCBt dHlwZSk6CisJIiIiSGFzaGVzIHRoZSBjZXJ0aWZpY2F0ZSBiYXNlZCBvbiB0aGUgbXR5cGUuCisJ VGhlIGNlcnRpZmljYXRlIHNob3VsZCBiZSBhbiBNMkNyeXB0by5YNTA5Llg1MDkgb2JqZWN0IChv ciB0aGUgcmVzdWx0IG9mIHRoZSBnZXRfcHVia2V5KCkgZnVuY3Rpb24gb24gc2FpZCBvYmplY3Qp CisJIiIiCisJY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZS5hc19kZXIoKQorCWlmIG10eXBlID09 IDA6CisJCXJldHVybiBjZXJ0aWZpY2F0ZS5oZXgoKQorCWVsaWYgbXR5cGUgPT0gMToKKwkJcmV0 dXJuIHNoYTI1NihjZXJ0aWZpY2F0ZSkuaGV4ZGlnZXN0KCkKKwllbGlmIG10eXBlID09IDI6CisJ CXJldHVybiBzaGE1MTIoY2VydGlmaWNhdGUpLmhleGRpZ2VzdCgpCisJZWxzZToKKwkJcmFpc2Ug RXhjZXB0aW9uKCdtdHlwZSBzaG91bGQgYmUgMCwxLDInKQorCitkZWYgZ2V0VExTQShob3N0bmFt ZSwgcG9ydD00NDMsIHByb3RvY29sPSd0Y3AnLCBzZWN1cmU9VHJ1ZSk6CisJIiIiCisJVGhpcyBm dW5jdGlvbiB0cmllcyB0byBkbyBhIHNlY3VyZSBsb29rdXAgb2YgdGhlIFRMU0EgcmVjb3JkLgor CUF0IHRoZSBtb21lbnQgaXQgcmVxdWVzdHMgdGhlIFRZUEU1MiByZWNvcmQgYW5kIHBhcnNlcyBp dCBpbnRvIGEgJ3ZhbGlkJyBUTFNBIHJlY29yZAorCUl0IHJldHVybnMgYSBsaXN0IG9mIFRMU0FS ZWNvcmQgb2JqZWN0cworCSIiIgorCWlmIGhvc3RuYW1lWy0xXSAhPSAnLic6CisJCWhvc3RuYW1l ICs9ICcuJworCisJaWYgbm90IHByb3RvY29sLmxvd2VyKCkgaW4gWyd0Y3AnLCAndWRwJywgJ3Nj dHAnXToKKwkJcmFpc2UgRXhjZXB0aW9uKCdFcnJvcjogdW5rbm93biBwcm90b2NvbDogJXMuIFNo b3VsZCBiZSBvbmUgb2YgdGNwLCB1ZHAgb3Igc2N0cCcgJSBwcm90b2NvbCkKKwl0cnk6CisJCWlm IHBvcnQgPT0gJyonOgorCQkJcmVjb3JkcyA9IGdldFJlY29yZHMoJyouXyVzLiVzJyAlIChwcm90 b2NvbC5sb3dlcigpLCBob3N0bmFtZSksIHJydHlwZT01Miwgc2VjdXJlPXNlY3VyZSkKKwkJZWxz ZToKKwkJCXJlY29yZHMgPSBnZXRSZWNvcmRzKCdfJXMuXyVzLiVzJyAlIChwb3J0LCBwcm90b2Nv bC5sb3dlcigpLCBob3N0bmFtZSksIHJydHlwZT01Miwgc2VjdXJlPXNlY3VyZSkKKwlleGNlcHQg SW5zZWN1cmVMb29rdXBFeGNlcHRpb24gYXMgZToKKwkJcHJpbnQoc3RyKGUpKQorCQlzeXMuZXhp dCgxKQorCWV4Y2VwdCBETlNMb29rdXBFcnJvciBhcyBlOgorCQlwcmludCgnVW5hYmxlIHRvIHJl c29sdmUgJXM6ICVzJyAlIChob3N0bmFtZSwgc3RyKGUpKSkKKwkJc3lzLmV4aXQoMSkKKwlyZXQg PSBbXQorCWZvciByZWNvcmQgaW4gcmVjb3JkczoKKwkJaGV4ZGF0YSA9IGIyYV9oZXgocmVjb3Jk KQorCQlpZiBwb3J0ID09ICcqJzoKKwkJCXJldC5hcHBlbmQoVExTQVJlY29yZCgnKi5fJXMuJXMn ICUgKHByb3RvY29sLmxvd2VyKCksIGhvc3RuYW1lKSwgaW50KGhleGRhdGFbMDoyXSwxNiksIGlu dChoZXhkYXRhWzI6NF0sMTYpLCBpbnQoaGV4ZGF0YVs0OjZdLDE2KSwgaGV4ZGF0YVs2Ol0uZGVj b2RlKCdhc2NpaScpKSkKKwkJZWxzZToKKwkJCXJldC5hcHBlbmQoVExTQVJlY29yZCgnXyVzLl8l cy4lcycgJSAocG9ydCwgcHJvdG9jb2wubG93ZXIoKSwgaG9zdG5hbWUpLCBpbnQoaGV4ZGF0YVsw OjJdLDE2KSwgaW50KGhleGRhdGFbMjo0XSwxNiksIGludChoZXhkYXRhWzQ6Nl0sMTYpLCBoZXhk YXRhWzY6XS5kZWNvZGUoJ2FzY2lpJykpKQorCXJldHVybiByZXQKKworZGVmIHZlcmlmeUNlcnRN YXRjaChyZWNvcmQsIGNlcnQpOgorCSIiIgorCVZlcmlmeSB0aGUgY2VydGlmaWNhdGUgd2l0aCB0 aGUgcmVjb3JkLgorCXJlY29yZCBzaG91bGQgYmUgYSBUTFNBUmVjb3JkIGFuZCBjZXJ0IHNob3Vs ZCBiZSBhIE0yQ3J5cHRvLlg1MDkuWDUwOQorCSIiIgorCWlmIG5vdCBpc2luc3RhbmNlKGNlcnQs IFg1MDkuWDUwOSk6CisJCXJldHVybgorCWlmIG5vdCBpc2luc3RhbmNlKHJlY29yZCwgVExTQVJl Y29yZCk6CisJCXJldHVybgorCisJaWYgcmVjb3JkLnNlbGVjdG9yID09IDE6CisJCWNlcnRoYXNo ID0gZ2V0SGFzaChjZXJ0LmdldF9wdWJrZXkoKSwgcmVjb3JkLm10eXBlKQorCWVsc2U6CisJCWNl cnRoYXNoID0gZ2V0SGFzaChjZXJ0LCByZWNvcmQubXR5cGUpCisKKwlpZiBub3QgY2VydGhhc2g6 CisJCXJldHVybgorCisJaWYgY2VydGhhc2ggPT0gcmVjb3JkLmNlcnQ6CisJCXJldHVybiBUcnVl CisJZWxzZToKKwkJcmV0dXJuIEZhbHNlCisKK2RlZiB2ZXJpZnlDZXJ0TmFtZVdpdGhIb3N0TmFt ZShjZXJ0LCBob3N0bmFtZSwgd2l0aF9tc2c9RmFsc2UpOgorCSIiIlZlcmlmeSB0aGUgbmFtZSBv biB0aGUgY2VydGlmaWNhdGUgd2l0aCBhIGhvc3RuYW1lLCB3ZSBuZWVkIHRoaXMgYmVjYXVzZSB3 ZSBnZXQgdGhlIGNlcnQgYmFzZWQgb24gSVAgYWRkcmVzcyBhbmQgdGh1c2x5IGNhbm5vdCByZWx5 IG9uIE0yQ3J5cHRvIHRvIHZlcmlmeSB0aGlzIiIiCisJaWYgbm90IGlzaW5zdGFuY2UoY2VydCwg WDUwOS5YNTA5KToKKwkJcmV0dXJuCisJaWYgbm90IGlzaW5zdGFuY2UoaG9zdG5hbWUsIHN0cik6 CisJCXJldHVybgorCisJaWYgaG9zdG5hbWVbLTFdID09ICcuJzoKKwkJaG9zdG5hbWUgPSBob3N0 bmFtZVswOi0xXQorCWhvc3RuYW1lID0gaG9zdG5hbWUubG93ZXIoKQorCisJY2VydG5hbWVzID0g W10KKwlmb3IgZW50cnkgaW4gc3RyKGNlcnQuZ2V0X3N1YmplY3QoKSkubG93ZXIoKS5zcGxpdCgi LyIpOgorCQlpZiBlbnRyeS5zdGFydHN3aXRoKCJjbj0iKToKKwkJCWNlcnRuYW1lcy5hcHBlbmQo ZW50cnlbMzpdKQorCXRyeToKKwkJZm9yIHZhbHVlIGluIHJlLnNwbGl0KCIsID8iLCBjZXJ0Lmdl dF9leHQoJ3N1YmplY3RBbHROYW1lJykuZ2V0X3ZhbHVlKCkubG93ZXIoKSk6CisJCQlpZiB2YWx1 ZS5zdGFydHN3aXRoKCJkbnM6Iik6CisJCQkJY2VydG5hbWVzLmFwcGVuZCh2YWx1ZVs0Ol0pCisJ ZXhjZXB0OgorCQlwYXNzCisJaWYgaG9zdG5hbWUgaW4gY2VydG5hbWVzOgorCQlyZXR1cm4gVHJ1 ZQorCWZvciBjZXJ0bmFtZSBpbiBjZXJ0bmFtZXM6CisJCWlmIGNlcnRuYW1lWzBdID09ICcqJyBh bmQgaG9zdG5hbWUuZW5kc3dpdGgoY2VydG5hbWVbMTpdKToKKwkJCXJldHVybiBUcnVlCisKKwlp ZiB3aXRoX21zZzoKKwkJcHJpbnQoJ1dBUk5JTkc6IE5hbWUgb24gdGhlIGNlcnRpZmljYXRlIChT dWJqZWN0OiAlcywgU3ViamVjdEFsdE5hbWU6ICVzKSBkb2VzblwndCBtYXRjaCByZXF1ZXN0ZWQg aG9zdG5hbWUgKCVzKS4nICUgKHN0cihjZXJ0LmdldF9zdWJqZWN0KCkpLCBjZXJ0LmdldF9leHQo J3N1YmplY3RBbHROYW1lJykuZ2V0X3ZhbHVlKCksIGhvc3RuYW1lKSkKKwlyZXR1cm4gRmFsc2UK KworZGVmIGNoZWNrQ2hhaW5MaW5rKGNoYWluLCByZWNvcmQ9Tm9uZSk6CisJcHJldmlvdXNfaXNz dWVyID0gTm9uZQorCWNoYWluZWQgPSBUcnVlCisJbWF0Y2hlZCA9IE5vbmUKKwlmb3IgY2VydCBp biBjaGFpbjoKKwkJaWYgcHJldmlvdXNfaXNzdWVyOgorCQkJaWYgbm90IHN0cihwcmV2aW91c19p c3N1ZXIpID09IHN0cihjZXJ0LmdldF9zdWJqZWN0KCkpOiAjIFRoZSBjaGFpbiBjYW5ub3QgYmUg dmFsaWQKKwkJCQljaGFpbmVkID0gRmFsc2UKKwkJCQlicmVhaworCQlwcmV2aW91c19pc3N1ZXIg PSBjZXJ0LmdldF9pc3N1ZXIoKQorCQlpZiByZWNvcmQgYW5kIHZlcmlmeUNlcnRNYXRjaChyZWNv cmQsIGNlcnQpOgorCQkJbWF0Y2hlZCA9IGNlcnQKKwlyZXR1cm4gY2hhaW5lZCwgbWF0Y2hlZAor CitkZWYgZ2V0TG9jYWxDaGFpbihmaWxlbmFtZSwgZGVidWcpOgorCSIiIlJldHVybnMgbGlzdCBv ZiBNMkNyeXB0by5YNTA5Llg1MDkgb2JqZWN0cyBhbmQgdmVyaWZpY2F0aW9uIHJlc3VsdCIiIgor CWNoYWluID0gW10KKwliaW8gPSBCSU8ub3BlbmZpbGUoZmlsZW5hbWUpCisJRXJyID0gTm9uZQor CXdoaWxlIFRydWU6CisJCXRyeToKKwkJCWNwdHIgPSBtMi54NTA5X3JlYWRfcGVtKGJpby5fcHRy KCkpCisJCWV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKwkJCUVyciA9IGUKKwkJCWJyZWFrOworCQlp ZiBub3QgY3B0cjoKKwkJCWJyZWFrCisJCWNoYWluLmFwcGVuZChYNTA5Llg1MDkoY3B0ciwgX3B5 ZnJlZT0xKSkKKwlpZiBub3QgY2hhaW46CisJCWlmIEVycjoKKwkJCXJhaXNlCisJCWVsc2U6CisJ CQlyYWlzZSBFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2FkICVzIiAlIGZpbGVuYW1lKQorCSMgRklY TUUgLSBpcyB0aGlzIHBvc3NpYmxlIHVzaW5nIHRoZSBsaWJyYXJ5ICh3aXRob3V0IGEgY2FsbCB0 byBvcGVuc3NsIHRvb2wpPworCWNtZCA9IFsib3BlbnNzbCIsICJ2ZXJpZnkiLCBmaWxlbmFtZV0K Kwlwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUs IHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisJKHN0ZG91dCwgc3RkZXJyKSA9IHByb2Nlc3MuY29t bXVuaWNhdGUoKQorCWlmIGRlYnVnOgorCQlwcmludChzdGRlcnIsIGZpbGU9c3lzLnN0ZGVycikK KwlpZiBzdGRvdXQuZW5kc3dpdGgoYiJPS1xuIik6CisJCXZlcmlmeV9yZXN1bHQgPSAwCisJZWxz ZToKKwkJdmVyaWZ5X3Jlc3VsdCA9ICIlcyVzIiAlIChzdGRvdXQsIHN0ZGVycikKKwlyZXR1cm4g Y2hhaW4sIHZlcmlmeV9yZXN1bHQKKworZGVmIHVzYWdlVGV4dCh1c2FnZSk6CisJbmFtZXMgPSBb IlBLSVgtQ0EiLCAiUEtJWC1FRSIsICJEQU5FLVRBIiwgIkRBTkUtRUUiXQorCXJldHVybiAiVXNh Z2UgJWQgWyVzXSIgJSAodXNhZ2UsIG5hbWVzW3VzYWdlXSkKKworZGVmIHZlcmlmeUNoYWluKHJl Y29yZCwgY2hhaW4sIHZlcmlmeV9yZXN1bHQsIHByZV9leGl0LCBsb2NhbCwgc291cmNlKToKKwlz b3VyY2UgPSAiJXMgZm9yICVzIiAlIChyZWNvcmQuZ2V0U2hvcnRUZXh0KCksIHNvdXJjZSkKKwlp ZiBsb2NhbDoKKwkJdGV4dF9jZXJ0ID0gIkxvY2FsIGNlcnRpZmljYXRlIgorCQl0ZXh0X2NoYWlu ID0gImNlcnRpZmljYXRlIGluIHRoZSBsb2NhbCBjZXJ0aWZpY2F0ZSBjaGFpbiIKKwllbHNlOgor CQl0ZXh0X2NlcnQgPSAiQ2VydGlmaWNhdGUgb2ZmZXJlZCBieSB0aGUgc2VydmVyIgorCQl0ZXh0 X2NoYWluID0gImNlcnRpZmljYXRlIGluIHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiBvZmZlcmVkIGJ5 IHRoZSBzZXJ2ZXIiCisKKwlpZiBub3QgdmVyaWZ5Q2VydE5hbWVXaXRoSG9zdE5hbWUoY2VydD1j aGFpblswXSwgaG9zdG5hbWU9c3RyKGFyZ3MuaG9zdCksIHdpdGhfbXNnPVRydWUpOgorCQkjIFRo ZSBuYW1lIG9uIHRoZSBjZXJ0IGRvZXNuJ3QgbWF0Y2ggdGhlIGhvc3RuYW1lLi4uIHdlIGRvbid0 IHZlcmlmeSB0aGUgVExTQSByZWNvcmQKKwkJcHJpbnQoJ0NhdXRpb246ICVzIGRvZXMgbm90IG1h dGNoIGhvc3RuYW1lICglcyknICUgKHRleHRfY2VydCwgc291cmNlKSkKKwl1dCA9IHVzYWdlVGV4 dChyZWNvcmQudXNhZ2UpCisJaWYgcmVjb3JkLnVzYWdlID09IDE6ICMgRW5kLWhvc3QgY2VydAor CQljaGFpbmVkLCBtYXRjaGVkID0gY2hlY2tDaGFpbkxpbmsoKGNoYWluWzBdLCksIHJlY29yZCkK KwkJaWYgbm90IGNoYWluZWQ6CisJCQlwcmludCgiV0FSTjogQ2VydGlmaWNhdGVzIGRvbid0IGNo YWluIikKKwkJaWYgbWF0Y2hlZDoKKwkJCWlmIHZlcmlmeV9yZXN1bHQgPT0gMDogIyBUaGUgY2Vy dCBjaGFpbnMgdG8gYSB2YWxpZCBDQSBjZXJ0IGFjY29yZGluZyB0byB0aGUgc3lzdGVtLWNlcnRp ZmljYXRlcworCQkJCXByaW50KCdTVUNDRVNTICglcyk6ICVzIG1hdGNoZXMgdGhlIG9uZSBtZW50 aW9uZWQgaW4gdGhlIFRMU0EgcmVjb3JkIGFuZCBjaGFpbnMgdG8gYSB2YWxpZCBDQSBjZXJ0aWZp Y2F0ZSAoJXMpJyAlICh1dCwgdGV4dF9jZXJ0LCBzb3VyY2UpKQorCQkJZWxzZToKKwkJCQlpZiBs b2NhbDoKKwkJCQkJcmVhc29uID0gdmVyaWZ5X3Jlc3VsdAorCQkJCWVsc2U6CisJCQkJCXJlYXNv biA9IGdldFZlcmlmaWNhdGlvbkVycm9yUmVhc29uKHZlcmlmeV9yZXN1bHQpCisJCQkJcHJpbnQo J0ZBSUwgKCVzKTogJXMgbWF0Y2hlcyB0aGUgb25lIG1lbnRpb25lZCBpbiB0aGUgVExTQSByZWNv cmQgYnV0IHRoZSBmb2xsb3dpbmcgZXJyb3Igd2FzIHJhaXNlZCBkdXJpbmcgUEtJWCB2YWxpZGF0 aW9uICglcyk6ICVzJyAlICh1dCwgdGV4dF9jZXJ0LCBzb3VyY2UsIHJlYXNvbikpCisJCQkJaWYg cHJlX2V4aXQgPT0gMDogcHJlX2V4aXQgPSAyCisJCQlpZiBhcmdzLmRlYnVnOiBwcmludCgnVGhl IG1hdGNoZWQgY2VydGlmaWNhdGUgaGFzIFN1YmplY3Q6ICVzJyAlIGNlcnQuZ2V0X3N1YmplY3Qo KSkKKwkJZWxzZToKKwkJCXByaW50KCdGQUlMOiAlcyBkb2VzIG5vdCBtYXRjaCB0aGUgVExTQSBy ZWNvcmQgKCVzKScgJSAodGV4dF9jZXJ0LCBzb3VyY2UpKQorCQkJaWYgcHJlX2V4aXQgPT0gMDog cHJlX2V4aXQgPSAyCisKKwllbGlmIHJlY29yZC51c2FnZSA9PSAwOiAjIENBIGNvbnN0cmFpbnQK KwkJIyBGSVhNRTogRG9lcyBuZWl0aGVyIGhhbmRsZSBjaGFpbiBkYXRhIGluIGZ1bGwgY2VydCBU TFNBIHJlY29yZHMgKHR5cGUgMCkgY29ycmVjdGx5CisJCSMgbm9yIGhhbmRsZXMgc2hvcnQgY2Vy dGlmaWNhdGlvbiBjaGFpbnMKKwkJIyBJbiB0aGVzZSBjYXNlIHRoZSBjaGFpbiBzaG91bGQgYmUg Y29tcGxldGVkIHdpdGggbWlzc2luZyByZWNvcmRzIGVpdGhlcgorCQkjIGZyb20gVExTQSBvciBs b2NhbCBjZXJ0aWZpY2F0ZSBzdG9yZQorCisJCSMgUmVtb3ZlIHRoZSBmaXJzdCAoPSBFbmQtRW50 aXR5IGNlcnQpIGZyb20gdGhlIGNoYWluCisJCWNoYWluZWQsIG1hdGNoZWQgPSBjaGVja0NoYWlu TGluayhjaGFpblsxOl0sIHJlY29yZCkKKwkJaWYgbm90IGNoYWluZWQ6CisJCQlwcmludCgiV0FS TjogQ2VydGlmaWNhdGVzIGRvbid0IGNoYWluIikKKwkJaWYgbWF0Y2hlZDoKKwkJCWlmIGNlcnQu Y2hlY2tfY2EoKToKKwkJCQlpZiB2ZXJpZnlfcmVzdWx0ID09IDA6CisJCQkJCXByaW50KCdTVUND RVNTICglcyk6IEEgJXMgbWF0Y2hlcyB0aGUgb25lIG1lbnRpb25lZCBpbiB0aGUgVExTQSByZWNv cmQgYW5kIGlzIGEgQ0EgY2VydGlmaWNhdGUgKCVzKScgJSAodXQsIHRleHRfY2hhaW4sIHNvdXJj ZSkpCisJCQkJZWxzZToKKwkJCQkJaWYgbG9jYWw6CisJCQkJCQlyZWFzb24gPSB2ZXJpZnlfcmVz dWx0CisJCQkJCWVsc2U6CisJCQkJCQlyZWFzb24gPSBnZXRWZXJpZmljYXRpb25FcnJvclJlYXNv bih2ZXJpZnlfcmVzdWx0KQorCQkJCQlwcmludCgnRkFJTCAoJXMpOiBBICVzIG1hdGNoZXMgdGhl IG9uZSBtZW50aW9uZWQgaW4gdGhlIFRMU0EgcmVjb3JkIGFuZCBpcyBhIENBIGNlcnRpZmljYXRl LCBidXQgdGhlIGZvbGxvd2luZyBlcnJvciB3YXMgcmFpc2VkIGR1cmluZyBQS0lYIHZhbGlkYXRp b24gKCVzKTogJXMnICUgKHV0LCB0ZXh0X2NoYWluLCBzb3VyY2UsIHJlYXNvbikpCisJCQkJCWlm IHByZV9leGl0ID09IDA6IHByZV9leGl0ID0gMgorCQkJZWxzZToKKwkJCQlwcmludCgnRkFJTCAo JXMpOiBBICVzIG1hdGNoZXMgdGhlIG9uZSBtZW50aW9uZWQgaW4gdGhlIFRMU0EgcmVjb3JkIGJ1 dCBpcyBub3QgYSBDQSBjZXJ0aWZpY2F0ZSAoJXMpJyAlICh1dCwgdGV4dF9jaGFpbiwgc291cmNl KSkKKwkJCQlpZiBwcmVfZXhpdCA9PSAwOiBwcmVfZXhpdCA9IDIKKwkJCWlmIGFyZ3MuZGVidWc6 IHByaW50KCdUaGUgbWF0Y2hlZCBjZXJ0aWZpY2F0ZSBoYXMgU3ViamVjdDogJXMnICUgY2VydC5n ZXRfc3ViamVjdCgpKQorCQllbHNlOgorCQkJcHJpbnQoJ0ZBSUwgKCVzKTogTm8gJXMgbWF0Y2hl cyB0aGUgVExTQSByZWNvcmQgKCVzKScgJSAodXQsIHRleHRfY2hhaW4sIHNvdXJjZSkpCisJCQlp ZiBwcmVfZXhpdCA9PSAwOiBwcmVfZXhpdCA9IDIKKworCWVsaWYgcmVjb3JkLnVzYWdlID09IDI6 ICMgVXNhZ2UgMiwgdXNlIHRoZSBjZXJ0IGluIHRoZSByZWNvcmQgYXMgdHJ1c3QgYW5jaG9yCisJ CSMgRklYTUU6IERvZXMgbm90IGhhbmRsZSBjaGFpbiBkYXRhIGluIGZ1bGwgY2VydCBUTFNBIHJl Y29yZHMgKHR5cGUgMCkgY29ycmVjdGx5CisJCSMgSW4gdGhpcyBjYXNlIHRoZSBjaGFpbiBzaG91 bGQgYmUgY29tcGxldGVkIHdpdGggbWlzc2luZyByZWNvcmRzIGlmIGNoYWluIGlzCisJCSMgbm90 IGNvbXBsZXRlCisJCWNoYWluZWQsIG1hdGNoZWQgPSBjaGVja0NoYWluTGluayhjaGFpbiwgcmVj b3JkKQorCQlpZiBtYXRjaGVkOgorCQkJaWYgbm90IGNoYWluZWQ6CisJCQkJcHJpbnQoIldBUk46 IENlcnRpZmljYXRlcyBkb24ndCBjaGFpbiIpCisJCQlwcmludCgnU1VDQ0VTUyAoJXMpOiBBICVz IChpbmNsdWRpbmcgdGhlIGVuZC1lbnRpdHkgY2VydGlmaWNhdGUpIG1hdGNoZXMgdGhlIFRMU0Eg cmVjb3JkICglcyknICUgKHV0LCB0ZXh0X2NoYWluLCBzb3VyY2UpKQorCQkJaWYgYXJncy5kZWJ1 ZzogcHJpbnQoJ1RoZSBtYXRjaGVkIGNlcnRpZmljYXRlIGhhcyBTdWJqZWN0OiAlcycgJSBtYXRj aGVkLmdldF9zdWJqZWN0KCkpCisJCWVsc2U6CisJCQlpZiBub3QgY2hhaW5lZDoKKwkJCQlwcmlu dCgiRkFJTDogQ2VydGlmaWNhdGVzIGRvbid0IGNoYWluIikKKwkJCXByaW50KCdGQUlMICglcyk6 IE5vICVzIChpbmNsdWRpbmcgdGhlIGVuZC1lbnRpdHkgY2VydGlmaWNhdGUpIG1hdGNoZXMgdGhl IFRMU0EgcmVjb3JkICglcyknICUgKHV0LCB0ZXh0X2NoYWluLCBzb3VyY2UpKQorCQkJaWYgcHJl X2V4aXQgPT0gMDogcHJlX2V4aXQgPSAyCisKKwllbGlmIHJlY29yZC51c2FnZSA9PSAzOiAjIEVF IGNlcnQgTVVTVCBtYXRjaAorCQljaGFpbmVkLCBtYXRjaGVkID0gY2hlY2tDaGFpbkxpbmsoKGNo YWluWzBdLCksIHJlY29yZCkKKwkJaWYgbm90IGNoYWluZWQ6CisJCQlwcmludCgiV0FSTjogQ2Vy dGlmaWNhdGVzIGRvbid0IGNoYWluIikKKwkJaWYgbWF0Y2hlZDoKKwkJCXByaW50KCdTVUNDRVNT ICglcyk6ICVzIG1hdGNoZXMgdGhlIFRMU0EgcmVjb3JkICglcyknICUgKHV0LCB0ZXh0X2NlcnQs IHNvdXJjZSkpCisJCQlpZiBhcmdzLmRlYnVnOiBwcmludCgnVGhlIG1hdGNoZWQgY2VydGlmaWNh dGUgaGFzIFN1YmplY3Q6ICVzJyAlIGNoYWluWzBdLmdldF9zdWJqZWN0KCkpCisJCWVsc2U6CisJ CQlwcmludCgnRkFJTCAoJXMpOiAlcyBkb2VzIG5vdCBtYXRjaCB0aGUgVExTQSByZWNvcmQgKCVz KScgJSAodXQsIHRleHRfY2VydCwgc291cmNlKSkKKwkJCWlmIHByZV9leGl0ID09IDA6IHByZV9l eGl0ID0gMgorCXJldHVybiBwcmVfZXhpdAorCitjbGFzcyBUTFNBUmVjb3JkOgorCSIiIldoZW4g aW5zdGFuY2lhdGVkLCB0aGlzIGNsYXNzIGNvbnRhaW5zIGFsbCB0aGUgZmllbGRzIG9mIGEgVExT QSByZWNvcmQuCisJIiIiCisJZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVzYWdlLCBzZWxlY3Rv ciwgbXR5cGUsIGNlcnQpOgorCQlyIiIibmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgUlIgaW4gdGhl IGZvcm1hdDogL14oX1xkezEsNX18XCopXC5fKHRjcHx1ZHB8c2N0cClcLihbYS16MC05XSpcLil7 Mix9JC8KKwkJdXNhZ2UsIHNlbGVjdG9yIGFuZCBtdHlwZSBzaG91bGQgYmUgYW4gaW50ZWdlcgor CQljZXJ0IHNob3VsZCBiZSBhIGhleGlkZWNpbWFsIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNl cnRpZmljYXRlIHRvIGJlIG1hdGNoZWQgZmllbGQKKwkJIiIiCisJCXRyeToKKwkJCXNlbGYucnJ0 eXBlID0gNTIgICAgIyBUTFNBIHBlciBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9k bnMtcGFyYW1ldGVycworCQkJc2VsZi5ycmNsYXNzID0gMSAgICAjIElOCisJCQlzZWxmLm5hbWUg PSBzdHIobmFtZSkKKwkJCXNlbGYudXNhZ2UgPSBpbnQodXNhZ2UpCisJCQlzZWxmLnNlbGVjdG9y ID0gaW50KHNlbGVjdG9yKQorCQkJc2VsZi5tdHlwZSA9IGludChtdHlwZSkKKwkJCXNlbGYuY2Vy dCA9IGNlcnQKKwkJZXhjZXB0OgorCQkJcmFpc2UgRXhjZXB0aW9uKCdJbnZhbGlkIHZhbHVlIHBh c3NlZCwgdW5hYmxlIHRvIGNyZWF0ZSBhIFRMU0FSZWNvcmQnKQorCisJZGVmIGdldFJlY29yZChz ZWxmLCBnZW5lcmljPUZhbHNlKToKKwkJIiIiUmV0dXJucyB0aGUgUlIgc3RyaW5nIG9mIHRoaXMg VExTQVJlY29yZCwgZWl0aGVyIGluIHJmYyAoZGVmYXVsdCkgb3IgZ2VuZXJpYyBmb3JtYXQiIiIK KwkJaWYgZ2VuZXJpYzoKKwkJCXJldHVybiByJyVzIElOIFRZUEU1MiBcIyAlcyAlcyVzJXMlcycg JSAoc2VsZi5uYW1lLCAobGVuKHNlbGYuY2VydCkvLzIpKzMgLCBzZWxmLl90b0hleChzZWxmLnVz YWdlKSwgc2VsZi5fdG9IZXgoc2VsZi5zZWxlY3RvciksIHNlbGYuX3RvSGV4KHNlbGYubXR5cGUp LCBzZWxmLmNlcnQpCisJCXJldHVybiAnJXMgSU4gVExTQSAlcyAlcyAlcyAlcycgJSAoc2VsZi5u YW1lLCBzZWxmLnVzYWdlLCBzZWxmLnNlbGVjdG9yLCBzZWxmLm10eXBlLCBzZWxmLmNlcnQpCisK KwlkZWYgX3RvSGV4KHNlbGYsIHZhbCk6CisJCSIiIkhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUg aGV4IHN0cmluZ3MgZnJvbSBpbnRlZ2VycyIiIgorCQlyZXR1cm4gIiUwLjJ4IiAlIHZhbAorCisJ ZGVmIGlzVmFsaWQoc2VsZiwgcmFpc2VFeGNlcHRpb249RmFsc2UpOgorCQkiIiJDaGVjayB3aGV0 aGVyIGFsbCBmaWVsZHMgaW4gdGhlIFRMU0EgcmVjb3JkIGFyZSBjb25mb3JtaW5nIHRvIHRoZSBz cGVjIGFuZCBjaGVjayBpZiB0aGUgcG9ydCwgcHJvdG9jb2wgYW5kIG5hbWUgYXJlIGdvb2QiIiIK KwkJZXJyID1bXQorCQl0cnk6CisJCQlpZiBub3QgMSA8PSBpbnQoc2VsZi5nZXRQb3J0KCkpIDw9 IDY1NTM1OgorCQkJCWVyci5hcHBlbmQoJ1BvcnQgJXMgbm90IHdpdGhpbiBjb3JyZWN0IHJhbmdl ICgxIDw9IHBvcnQgPD0gNjU1MzUpJyAlIHNlbGYuZ2V0UG9ydCgpKQorCQlleGNlcHQ6CisJCQlp ZiBzZWxmLmdldFBvcnQoKSAhPSAnKic6CisJCQkJZXJyLmFwcGVuZCgnUG9ydCAlcyBub3QgYSBu dW1iZXInICUgc2VsZi5nZXRQb3J0KCkpCisJCWlmIG5vdCBzZWxmLnVzYWdlIGluIFswLDEsMiwz XToKKwkJCWVyci5hcHBlbmQoJ1VzYWdlOiBpbnZhbGlkICglcyBpcyBub3Qgb25lIG9mIDAgW1BL SVgtQ0FdLCAxIFtQS0lYLUVFXSwgMiBbREFORS1UQV0gb3IgMyBbREFORS1FRV0pJyAlIHNlbGYu dXNhZ2UpCisJCWlmIG5vdCBzZWxmLnNlbGVjdG9yIGluIFswLDFdOgorCQkJZXJyLmFwcGVuZCgn U2VsZWN0b3I6IGludmFsaWQgKCVzIGlzIG5vdCBvbmUgb2YgMCBbQ2VydF0gb3IgMSBbU1BLSV0p JyAlIHNlbGYuc2VsZWN0b3IpCisJCWlmIG5vdCBzZWxmLm10eXBlIGluIFswLDEsMl06CisJCQll cnIuYXBwZW5kKCdNYXRjaGluZyBUeXBlOiBpbnZhbGlkICglcyBpcyBub3Qgb25lIG9mIDAgW0ZV TExdLCAxIFtTSEEtMjU2XSBvciAyIFtTSEEtNTEyXSknICUgc2VsZi5tdHlwZSkKKwkJaWYgbm90 IHNlbGYuaXNOYW1lVmFsaWQoKToKKwkJCWVyci5hcHBlbmQoJ05hbWUgKCVzKSBpcyBub3QgaW4g dGhlIGNvcnJlY3QgZm9ybWF0OiBfcG9ydG51bWJlci5fdHJhbnNwb3J0cHJvdG9jb2wuaG9zdG5h bWUuZG9tLicgJSBzZWxmLm5hbWUpCisJCSMgQSBjZXJ0aWZpY2F0ZSBsZW5ndGggb2YgMCBpcyBh Y2NlcHRlZAorCQlpZiBzZWxmLm10eXBlIGluIFsxLDJdIGFuZCBsZW4oc2VsZi5jZXJ0KSAhPSAw OgorCQkJaWYgbm90IGxlbihzZWxmLmNlcnQpID09IHsxOjY0LDI6MTI4fVtzZWxmLm10eXBlXToK KwkJCQllcnIuYXBwZW5kKCdDZXJ0aWZpY2F0ZSBmb3IgQXNzb2NpYXRpb246IGludmFsaWQgKEhh c2ggbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGhhc2gtdHlwZSBpbiBNYXRjaGluZyBUeXBlKCVzKSkn ICUgezE6J1NIQS0yNTYnLDI6J1NIQS01MTInfVtzZWxmLm10eXBlXSkKKwkJaWYgbGVuKGVycikg IT0gMDoKKwkJCWlmIG5vdCByYWlzZUV4Y2VwdGlvbjoKKwkJCQlyZXR1cm4gRmFsc2UKKwkJCWVs c2U6CisJCQkJbXNnID0gJ1RoZSBUTFNBIHJlY29yZCBpcyBpbnZhbGlkLicKKwkJCQlmb3IgZXJy b3IgaW4gZXJyOgorCQkJCQltc2cgKz0gJ1xuXHQlcycgJSBlcnJvcgorCQkJCXJhaXNlIFJlY29y ZFZhbGlkaXR5RXhjZXB0aW9uKG1zZykKKwkJZWxzZToKKwkJCXJldHVybiBUcnVlCisKKwlkZWYg aXNOYW1lVmFsaWQoc2VsZik6CisJCSIiIkNoZWNrIGlmIHRoZSBuYW1lIGlmIGluIHRoZSBjb3Jy ZWN0IGZvcm1hdCIiIgorCQlpZiBub3QgcmUubWF0Y2gocideKF9cZHsxLDV9fFwqKVwuXyh0Y3B8 dWRwfHNjdHApXC4oWy1hLXowLTldKlwuKXsyLH0kJywgc2VsZi5uYW1lKToKKwkJCXJldHVybiBG YWxzZQorCQlyZXR1cm4gVHJ1ZQorCisJZGVmIGdldFByb3RvY29sKHNlbGYpOgorCQkiIiJSZXR1 cm5zIHRoZSBwcm90b2NvbCBiYXNlZCBvbiB0aGUgbmFtZSIiIgorCQlyZXR1cm4gcmUuc3BsaXQo cidcLicsIHNlbGYubmFtZSlbMV1bMTpdCisKKwlkZWYgZ2V0UG9ydChzZWxmKToKKwkJIiIiUmV0 dXJucyB0aGUgcG9ydCBiYXNlZCBvbiB0aGUgbmFtZSIiIgorCQlpZiByZS5zcGxpdChyJ1wuJywg c2VsZi5uYW1lKVswXVswXSA9PSAnKic6CisJCQlyZXR1cm4gJyonCisJCWVsc2U6CisJCQlyZXR1 cm4gcmUuc3BsaXQocidcLicsIHNlbGYubmFtZSlbMF1bMTpdCisKKwlkZWYgZ2V0U2hvcnRUZXh0 KHNlbGYpOgorCQlyZXR1cm4gIiVkICVkICVkICUuOHMuLi4iICUgKHNlbGYudXNhZ2UsIHNlbGYu c2VsZWN0b3IsIHNlbGYubXR5cGUsIHNlbGYuY2VydCkKKworY2xhc3MgQVJlY29yZDoKKwkiIiJB biBvYmplY3QgcmVwcmVzZW50aW5nIGFuIEEgUmVjb3JkIChJUHY0IGFkZHJlc3MpIiIiCisJZGVm IF9faW5pdF9fKHNlbGYsIGhvc3RuYW1lLCBhZGRyZXNzKToKKwkJc2VsZi5ycnR5cGUgPSAxCisJ CXNlbGYuaG9zdG5hbWUgPSBob3N0bmFtZQorCQlzZWxmLmFkZHJlc3MgPSBhZGRyZXNzCisKKwlk ZWYgX19zdHJfXyhzZWxmKToKKwkJcmV0dXJuIHNlbGYuYWRkcmVzcworCisJZGVmIGlzVmFsaWQo c2VsZik6CisJCXRyeToKKwkJCUlQdjRBZGRyZXNzKHNlbGYuYWRkcmVzcykKKwkJCXJldHVybiBU cnVlCisJCWV4Y2VwdDoKKwkJCXJldHVybiBGYWxzZQorCitjbGFzcyBBQUFBUmVjb3JkOgorCSIi IkFuIG9iamVjdCByZXByZXNlbnRpbmcgYW4gQUFBQSBSZWNvcmQgKElQdjYgYWRkcmVzcykiIiIK KwlkZWYgX19pbml0X18oc2VsZiwgaG9zdG5hbWUsIGFkZHJlc3MpOgorCQlzZWxmLnJydHlwZSA9 IDI4CisJCXNlbGYuaG9zdG5hbWUgPSBob3N0bmFtZQorCQlzZWxmLmFkZHJlc3MgPSBhZGRyZXNz CisKKwlkZWYgX19zdHJfXyhzZWxmKToKKwkJcmV0dXJuIHNlbGYuYWRkcmVzcworCisJZGVmIGlz VmFsaWQoc2VsZik6CisJCXRyeToKKwkJCUlQdjZBZGRyZXNzKHNlbGYuYWRkcmVzcykKKwkJCXJl dHVybiBUcnVlCisJCWV4Y2VwdDoKKwkJCXJldHVybiBGYWxzZQorCisjIEV4Y2VwdGlvbnMKK2Ns YXNzIFJlY29yZFZhbGlkaXR5RXhjZXB0aW9uKEV4Y2VwdGlvbik6CisJcGFzcworCitjbGFzcyBJ bnNlY3VyZUxvb2t1cEV4Y2VwdGlvbihFeGNlcHRpb24pOgorCXBhc3MKKworY2xhc3MgRE5TTG9v a3VwRXJyb3IoRXhjZXB0aW9uKToKKwlwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6 CisJaW1wb3J0IGFyZ3BhcnNlCisJIyBjcmVhdGUgdGhlIHBhcnNlcgorCXBhcnNlciA9IGFyZ3Bh cnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdDcmVhdGUgYW5kIHZlcmlmeSBUTFNBIHJl Y29yZHMuJywgZXBpbG9nPSdGb3IgYnVncy4gc2VlIHRsc2FAbm9oYXRzLmNhJykKKworCSMgQ2F2 ZWF0OiBGb3IgVExTQSB2YWxpZGF0aW9uLCB0aGlzIHByb2dyYW0gY2hhc2VzIHRocm91Z2ggdGhl IGNlcnRpZmljYXRlIGNoYWluIG9mZmVyZWQgYnkgdGhlIHNlcnZlciwgbm90IGl0cyBsb2NhbCBj ZXJ0aWZpY2F0ZXMuJworCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tdmVyaWZ5JywnLXYnLCBhY3Rp b249J3N0b3JlX3RydWUnLCBoZWxwPSdWZXJpZnkgYSBUTFNBIHJlY29yZCwgZXhpdCAwIHdoZW4g YWxsIFRMU0EgcmVjb3JkcyBhcmUgbWF0Y2hlZCwgZXhpdCAyIHdoZW4gYSByZWNvcmQgZG9lcyBu b3QgbWF0Y2ggdGhlIHJlY2VpdmVkIGNlcnRpZmljYXRlLCBleGl0IDEgb24gZXJyb3IuJykKKwor CXBhcnNlci5hZGRfYXJndW1lbnQoJy0tY3JlYXRlJywnLWMnLCBhY3Rpb249J3N0b3JlX3RydWUn LCBoZWxwPSdDcmVhdGUgYSBUTFNBIHJlY29yZCcpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgnLS12 ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0ndGxzYSB2ZXJzaW9uOiAlcyclVkVS U0lPTiwgaGVscD0nc2hvdyB2ZXJzaW9uIGFuZCBleGl0JykKKworCXBhcnNlci5hZGRfYXJndW1l bnQoJy00JywgJy0taXB2NCcsIGRlc3Q9J2lwdjQnLCBhY3Rpb249J3N0b3JlX3RydWUnLGhlbHA9 J3VzZSBpcHY0IG5ldHdvcmtpbmcgb25seScpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgnLTYnLCAn LS1pcHY2JywgZGVzdD0naXB2NicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsaGVscD0ndXNlIGlwdjYg bmV0d29ya2luZyBvbmx5JykKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWluc2VjdXJlJywgYWN0 aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwgaGVscD0nQWxsb3cgdXNlIG9mIG5vbi1k bnNzZWMgc2VjdXJlZCBhbnN3ZXJzJykKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJlc29sdmNv bmYnLCBtZXRhdmFyPScvUEFUSC9UTy9SRVNPTFYuQ09ORicsIGFjdGlvbj0nc3RvcmUnLCBkZWZh dWx0PScvZXRjL3Jlc29sdi5jb25mJywgaGVscD0nVXNlIGEgcmVjdXJzaXZlIHJlc29sdmVyIGxp c3RlZCBpbiBhIHJlc29sdi5jb25mIGZpbGUgKGRlZmF1bHQ6IC9ldGMvcmVzb2x2LmNvbmYpJykK KwlwYXJzZXIuYWRkX2FyZ3VtZW50KCdob3N0JywgbWV0YXZhcj0iaG9zdG5hbWUiKQorCisJcGFy c2VyLmFkZF9hcmd1bWVudCgnLS1wb3J0JywgJy1wJywgYWN0aW9uPSdzdG9yZScsIGRlZmF1bHQ9 JzQ0MycsIGhlbHA9J1RoZSBwb3J0LCBvciBcJypcJyB3aGVyZSBydW5uaW5nIFRMUyBpcyBsb2Nh dGVkIChkZWZhdWx0OiAlKGRlZmF1bHQpcykuJykKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXN0 YXJ0dGxzJywgJy10JywgYWN0aW9uPSdzdG9yZScsIGNob2ljZXM9WydubycsICdzbXRwJywgJ2lt YXAnLCAncG9wMycsICdmdHAnXSwgaGVscD0nUHJvdG9jb2wgbmVlZHMgc3BlY2lhbCBzdGFydCBw cm9jZWR1cmUsIHJlcXVpcmVzIHByb3RvY29sIG5hbWUuJykKKwlwYXJzZXIuYWRkX2FyZ3VtZW50 KCctLXByb3RvY29sJywgYWN0aW9uPSdzdG9yZScsIGNob2ljZXM9Wyd0Y3AnLCd1ZHAnLCdzY3Rw J10sIGRlZmF1bHQ9J3RjcCcsIGhlbHA9J1RoZSBwcm90b2NvbCB0aGUgVExTIHNlcnZpY2UgaXMg dXNpbmcgKGRlZmF1bHQ6ICUoZGVmYXVsdClzKS4nKQorCXBhcnNlci5hZGRfYXJndW1lbnQoJy0t b25seS1ycicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J09ubHkgdmVyaWZ5IHRoYXQgdGhl IFRMU0EgcmVzb3VyY2UgcmVjb3JkIGlzIGNvcnJlY3QgKGRvIG5vdCBjaGVjayBjZXJ0aWZpY2F0 ZSknKQorCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tcm9vdGtleScsIG1ldGF2YXI9Jy9QQVRIL1RP L1JPT1QuS0VZJywgYWN0aW9uPSdzdG9yZScsIGhlbHA9J1NwZWNpZnkgZmlsZSBsb2NhdGlvbiBj b250YWluaW5nIHRoZSBETlNTRUMgcm9vdCBrZXknKQorCisJaWYgb3MucGF0aC5pc2RpcigiL2V0 Yy9wa2kvdGxzL2NlcnRzLyIpOgorCQljYWRpciA9ICIvZXRjL3BraS90bHMvY2VydHMvIgorCWVs aWYgb3MucGF0aC5pc2RpcigiL2V0Yy9zc2wvY2VydHMvIik6CisJCWNhZGlyID0gIi9ldGMvc3Ns L2NlcnRzLyIKKwllbHNlOgorCQljYWRpciA9ICIuIgorCQlwcmludCAoIndhcm5pbmc6IG5vIHN5 c3RlbSB3aWRlIENBZGlyIGZvdW5kLCB1c2luZyBjdXJyZW50IGRpcmVjdG9yeSIpCisKKwlwYXJz ZXIuYWRkX2FyZ3VtZW50KCctLWNhLWNlcnQnLCBtZXRhdmFyPScvUEFUSC9UTy9DRVJUU1RPUkUn LCBhY3Rpb249J3N0b3JlJywgZGVmYXVsdCA9IGNhZGlyLCBoZWxwPSdQYXRoIHRvIGEgQ0EgY2Vy dGlmaWNhdGUgb3IgYSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgY2VydGlmaWNhdGVzIChkZWZh dWx0OiAlKGRlZmF1bHQpcyknKQorCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGVidWcnLCAnLWQn LCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdQcmludCBkZXRhaWxzIHBsdXMgdGhlIHJlc3Vs dCBvZiB0aGUgdmFsaWRhdGlvbicpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1xdWlldCcsICct cScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J0lnbm9yZWQgZm9yIGJhY2t3YXJkcyBjb21w YXRpYmlsaXR5JykKKworCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tY2VydGlmaWNhdGUnLCBoZWxw PSdUaGUgY2VydGlmaWNhdGUgdXNlZCBmb3IgdGhlIGhvc3QuIElmIGNlcnRpZmljYXRlIGlzIGVt cHR5LCB0aGUgY2VydGlmaWNhdGUgd2lsbCBiZSBkb3dubG9hZGVkIGZyb20gdGhlIHNlcnZlcicp CisJcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vdXRwdXQnLCAnLW8nLCBhY3Rpb249J3N0b3JlJywg ZGVmYXVsdD0ncmZjJywgY2hvaWNlcz1bJ2dlbmVyaWMnLCdyZmMnLCdib3RoJ10sIGhlbHA9J1Ro ZSB0eXBlIG9mIG91dHB1dC4gR2VuZXJpYyAoUkZDIDM1OTcsIFRZUEU1MiksIFJGQyAoVExTQSkg b3IgYm90aCAoZGVmYXVsdDogJShkZWZhdWx0KXMpLicpCisKKwkjIFVzYWdlIG9mIHRoZSBjZXJ0 aWZpY2F0ZQorCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tdXNhZ2UnLCAnLXUnLCBhY3Rpb249J3N0 b3JlJywgdHlwZT1pbnQsIGRlZmF1bHQ9MywgY2hvaWNlcz1bMCwxLDIsM10sIGhlbHA9J1RoZSBV c2FnZSBvZiB0aGUgQ2VydGlmaWNhdGUgZm9yIEFzc29jaWF0aW9uLiBcJzBcJyBmb3IgQ0EgW1BL SVgtQ0FdLCBcJzFcJyBmb3IgRW5kIEVudGl0eSBbUEtJWC1FRV0sIFwnMlwnIGZvciB0cnVzdC1h bmNob3IgW0RBTkUtVEFdLCBcJzNcJyBmb3IgT05MWSBFbmQtRW50aXR5IG1hdGNoIFtEQU5FLUVF XSAoZGVmYXVsdDogJShkZWZhdWx0KXMpLicpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zZWxl Y3RvcicsICctcycsIGFjdGlvbj0nc3RvcmUnLCB0eXBlPWludCwgZGVmYXVsdD0wLCBjaG9pY2Vz PVswLDFdLCBoZWxwPSdUaGUgU2VsZWN0b3IgZm9yIHRoZSBDZXJ0aWZpY2F0ZSBmb3IgQXNzb2Np YXRpb24uIFwnMFwnIGZvciBGdWxsIENlcnRpZmljYXRlIFtDZXJ0XSwgXCcxXCcgZm9yIFN1Ympl Y3RQdWJsaWNLZXlJbmZvIFtTUEtJXSAoZGVmYXVsdDogJShkZWZhdWx0KXMpLicpCisJcGFyc2Vy LmFkZF9hcmd1bWVudCgnLS1tdHlwZScsICctbScsIGFjdGlvbj0nc3RvcmUnLCB0eXBlPWludCwg ZGVmYXVsdD0xLCBjaG9pY2VzPVswLDEsMl0sIGhlbHA9J1RoZSBNYXRjaGluZyBUeXBlIG9mIHRo ZSBDZXJ0aWZpY2F0ZSBmb3IgQXNzb2NpYXRpb24uIFwnMFwnIGZvciBFeGFjdCBtYXRjaCwgXCcx XCcgZm9yIFNIQS0yNTYgaGFzaCwgXCcyXCcgZm9yIFNIQS01MTIgKGRlZmF1bHQ6ICUoZGVmYXVs dClzKS4nKQorCisJYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworCWlmIGFyZ3Mucm9vdGtl eToKKwkJaWYgb3MucGF0aC5pc2ZpbGUoYXJncy5yb290a2V5KToKKwkJCVJPT1RLRVkgPSBhcmdz LnJvb3RrZXkKKwkJZWxzZToKKwkJCXByaW50KCJpZ25vcmVkIHNwZWNpZmllZCBub24tZXhpc3Rp bmcgcm9vdGtleSBmaWxlICVzIiVhcmdzLnJvb3RrZXkpCisKKwkjIGNoZWNrIHdoZXRoZXIgaXQn cyBBU0NJSSBvciBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgaW50byBQdW5ueWNvZGUKKwl0cnk6CisJ CWFyZ3MuaG9zdC5lbmNvZGUoJ2FzY2lpJykKKwlleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgor CQlhcmdzLmhvc3QgPSBzdHIoYXJncy5ob3N0LmVuY29kZSgnaWRuYScpLCAndXRmLTgnKQorCisJ aWYgYXJncy5ob3N0Wy0xXSAhPSAnLic6CisJCWFyZ3MuaG9zdCArPSAnLicKKwlzbmlob3N0ID0g YXJncy5ob3N0WzA6LTFdCisKKwlpZiBub3QgYXJncy5zdGFydHRsczoKKwkJaWYgYXJncy5wb3J0 ID09ICIyNSIgb3IgYXJncy5wb3J0ID09ICI1ODciOgorCQkJYXJncy5zdGFydHRscyA9ICJzbXRw IgorCQllbGlmIGFyZ3MucG9ydCA9PSAiMTQzIjoKKwkJCWFyZ3Muc3RhcnR0bHMgPSAiaW1hcCIK KwkJZWxpZiBhcmdzLnBvcnQgPT0gIjExMCI6CisJCQlhcmdzLnN0YXJ0dGxzID0gInBvcDMiCisJ CWVsaWYgYXJncy5wb3J0ID09ICIyMSI6CisJCQlhcmdzLnN0YXJ0dGxzID0gImZ0cCIKKwllbGlm IGFyZ3Muc3RhcnR0bHMgPT0gIm5vIjoKKwkJYXJncy5zdGFydHRscyA9IE5vbmUKKworCWdsb2Jh bCByZXNvbHZjb25mCisJaWYgYXJncy5yZXNvbHZjb25mOgorCQlpZiBvcy5wYXRoLmlzZmlsZShh cmdzLnJlc29sdmNvbmYpOgorCQkJcmVzb2x2Y29uZiA9IGFyZ3MucmVzb2x2Y29uZgorCQllbHNl OgorCQkJcHJpbnQoJyVzIGlzIG5vdCBhIGZpbGUuIFVuYWJsZSB0byB1c2UgaXQgYXMgcmVzb2x2 LmNvbmYnICUgYXJncy5yZXNvbHZjb25mLCBmaWxlPXN5cy5zdGRvdXQpCisJCQlzeXMuZXhpdCgx KQorCWVsc2U6CisJCXJlc29sdmNvbmYgPSBOb25lCisKKwkjIG5vdCBvcGVyYXRpb25zIGFyZSBm dW4hCisJc2VjdXJlID0gbm90IGFyZ3MuaW5zZWN1cmUKKworCWlmIGFyZ3MudmVyaWZ5OgorCQly ZWNvcmRzID0gZ2V0VExTQShhcmdzLmhvc3QsIGFyZ3MucG9ydCwgYXJncy5wcm90b2NvbCwgc2Vj dXJlKQorCQlpZiBsZW4ocmVjb3JkcykgPT0gMDoKKwkJCXN5cy5leGl0KDEpCisJCXByZV9leGl0 ID0gMAorCQlmb3IgcmVjb3JkIGluIHJlY29yZHM6CisJCQkjIEZpcnN0LCBjaGVjayBpZiB0aGUg Zmlyc3QgdGhyZWUgZmllbGRzIGhhdmUgY29ycmVjdCB2YWx1ZXMuCisJCQlpZiBhcmdzLmRlYnVn OgorCQkJCXByaW50KCdSZWNlaXZlZCB0aGUgZm9sbG93aW5nIHJlY29yZCBmb3IgbmFtZSAlczon ICUgcmVjb3JkLm5hbWUpCisJCQkJcHJpbnQoJ1x0VXNhZ2U6XHRcdFx0XHQlZCAoJXMpJyAlIChy ZWNvcmQudXNhZ2UsIHswOidDQSBDb25zdHJhaW50IFtQS0lYLUNBXScsIDE6J0VuZC1FbnRpdHkg Q29uc3RyYWludCArIGNoYWluIHRvIENBIFtQS0lYLUVFXScsIDI6J1RydXN0IEFuY2hvciBbREFO RS1UQV0nLCAzOidFbmQtRW50aXR5IFtEQU5FLUVFXSd9LmdldChyZWNvcmQudXNhZ2UsICdJTlZB TElEJykpKQorCQkJCXByaW50KCdcdFNlbGVjdG9yOlx0XHRcdCVkICglcyknICUgKHJlY29yZC5z ZWxlY3RvciwgezA6J0NlcnRpZmljYXRlIFtDZXJ0XScsIDE6J1N1YmplY3RQdWJsaWNLZXlJbmZv IFtTUEtJXSd9LmdldChyZWNvcmQuc2VsZWN0b3IsICdJTlZBTElEJykpKQorCQkJCXByaW50KCdc dE1hdGNoaW5nIFR5cGU6XHRcdFx0JWQgKCVzKScgJSAocmVjb3JkLm10eXBlLCB7MDonRnVsbCBD ZXJ0aWZpY2F0ZScsIDE6J1NIQS0yNTYnLCAyOidTSEEtNTEyJ30uZ2V0KHJlY29yZC5tdHlwZSwg J0lOVkFMSUQnKSkpCisJCQkJcHJpbnQoJ1x0Q2VydGlmaWNhdGUgZm9yIEFzc29jaWF0aW9uOlx0 JXMnICUgcmVjb3JkLmNlcnQpCisKKwkJCXRyeToKKwkJCQlyZWNvcmQuaXNWYWxpZChyYWlzZUV4 Y2VwdGlvbj1UcnVlKQorCQkJZXhjZXB0IFJlY29yZFZhbGlkaXR5RXhjZXB0aW9uIGFzIGU6CisJ CQkJcHJpbnQoJ0Vycm9yOiAlcycgJSBzdHIoZSksIGZpbGU9c3lzLnN0ZGVycikKKwkJCQljb250 aW51ZQorCQkJZWxzZToKKwkJCQlpZiBhcmdzLmRlYnVnOgorCQkJCQlwcmludCgnVGhpcyByZWNv cmQgaXMgdmFsaWQgKHdlbGwtZm9ybWVkKS4nKQorCisJCQlpZiBhcmdzLm9ubHlfcnI6CisJCQkJ IyBHbyB0byB0aGUgbmV4dCByZWNvcmQKKwkJCQljb250aW51ZQorCisJCQkjIFdoZW4gd2UgYXJl IGhlcmUsIFRoZSB1c2VyIGFsc28gd2FudHMgdG8gdmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZXMgd2l0 aCB0aGUgcmVjb3JkCisJCQlpZiBhcmdzLnByb3RvY29sICE9ICd0Y3AnOgorCQkJCXByaW50KCdP bmx5IFNTTCBvdmVyIFRDUCBpcyBzdXBwb3J0ZWQgKHNvcnJ5KScsIGZpbGU9c3lzLnN0ZGVycikK KwkJCQlzeXMuZXhpdCgwKQorCisJCQlpZiBhcmdzLmRlYnVnOgorCQkJCXByaW50KCdBdHRlbXB0 aW5nIHRvIHZlcmlmeSB0aGUgcmVjb3JkIHdpdGggdGhlIFRMUyBzZXJ2aWNlLi4uJykKKworCQkJ aWYgbm90IGFyZ3MuaXB2NCBhbmQgbm90IGFyZ3MuaXB2NjoKKwkJCQlhZGRyZXNzZXMgPSBnZXRB KGFyZ3MuaG9zdCwgc2VjdXJlPXNlY3VyZSkgKyBnZXRBQUFBKGFyZ3MuaG9zdCwgc2VjdXJlPXNl Y3VyZSkKKwkJCWVsaWYgYXJncy5pcHY0OgorCQkJCWFkZHJlc3NlcyA9IGdldEEoYXJncy5ob3N0 LCBzZWN1cmU9c2VjdXJlKQorCQkJZWxzZToKKwkJCQlhZGRyZXNzZXMgPSBnZXRBQUFBKGFyZ3Mu aG9zdCwgc2VjdXJlPXNlY3VyZSkKKworCQkJaWYgYXJncy5jZXJ0aWZpY2F0ZToKKwkJCQl0cnk6 CisJCQkJCWNoYWluLCB2ZXJpZnlfcmVzdWx0ID0gZ2V0TG9jYWxDaGFpbihhcmdzLmNlcnRpZmlj YXRlLCBhcmdzLmRlYnVnKQorCQkJCQlwcmVfZXhpdCA9IHZlcmlmeUNoYWluKHJlY29yZCwgY2hh aW4sIHZlcmlmeV9yZXN1bHQsIHByZV9leGl0LCBUcnVlLCBhcmdzLmNlcnRpZmljYXRlKQorCQkJ CWV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKwkJCQkJcHJpbnQoJ0NvdWxkIG5vdCB2ZXJpZnkgbG9j YWwgY2VydGlmaWNhdGU6ICVzLicgJSBlKQorCQkJCQlzeXMuZXhpdCgwKQorCQkJZm9yIGFkZHJl c3MgaW4gYWRkcmVzc2VzOgorCQkJCWlmIGFyZ3MuZGVidWc6CisJCQkJCXByaW50KCdHb3QgdGhl IGZvbGxvd2luZyBJUDogJXMnICUgc3RyKGFkZHJlc3MpKQorCQkJCSMgV2UgZG8gdGhlIGNlcnRp ZmljYXRlIGhhbmRsaW5nIGhlcmUsIGFzIE0yQ3J5cHRvIGtlZXBzIHNlZ2ZhdWx0aW5nIHdoZW4g d2UgZG8gaXQgaW4gYSBtZXRob2QKKwkJCQljdHggPSBTU0wuQ29udGV4dCgpCisJCQkJaWYgb3Mu cGF0aC5pc2ZpbGUoYXJncy5jYV9jZXJ0KToKKwkJCQkJaWYgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0 aW9ucyhjYWZpbGU9YXJncy5jYV9jZXJ0KSAhPSAxOiByYWlzZSBFeGNlcHRpb24oJ05vIENBIGNl cnQnKQorCQkJCWVsaWYgb3MucGF0aC5leGlzdHMoYXJncy5jYV9jZXJ0KToKKwkJCQkJaWYgY3R4 LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYXBhdGg9YXJncy5jYV9jZXJ0KSAhPSAxOiByYWlzZSBF eGNlcHRpb24oJ05vIENBIGNlcnRzJykKKwkJCQllbHNlOgorCQkJCQlwcmludCgnJXMgaXMgbmVp dGhlciBhIGZpbGUgbm9yIGEgZGlyZWN0b3J5LCB1bmFibGUgdG8gY29udGludWUnICUgYXJncy5j YV9jZXJ0LCBmaWxlPXN5cy5zdGRlcnIpCisJCQkJCXN5cy5leGl0KDEpCisJCQkJIyBEb24ndCBl cnJvciB3aGVuIHRoZSB2ZXJpZmljYXRpb24gZmFpbHMgaW4gdGhlIFNTTCBoYW5kc2hha2UKKwkJ CQljdHguc2V0X3ZlcmlmeShTU0wudmVyaWZ5X25vbmUsIGRlcHRoPTkpCisJCQkJaWYgaXNpbnN0 YW5jZShhZGRyZXNzLCBBQUFBUmVjb3JkKToKKwkJCQkJc29jayA9IHNvY2tldC5zb2NrZXQoc29j a2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19TVFJFQU0pCisJCQkJCXNvY2suc2V0c29ja29wdChz b2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKKwkJCQllbHNlOgorCQkJ CQlzb2NrID0gTm9uZQorCQkJCWNvbm5lY3Rpb24gPSBTU0wuQ29ubmVjdGlvbihjdHgsIHNvY2s9 c29jaykKKwkJCQl0cnk6CisJCQkJCWNvbm5lY3Rpb24uc2V0X3Rsc2V4dF9ob3N0X25hbWUoc25p aG9zdCkKKwkJCQkJaWYoYXJncy5kZWJ1Zyk6CisJCQkJCQlwcmludCgnRGlkIHNldCBzZXJ2ZXJu YW1lICVzJyAlIHNuaWhvc3QpCisJCQkJZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorCQkJCQlwcmlu dCgnQ291bGQgbm90IHNldCBTTkkgKG9sZCBNMkNyeXB0byB2ZXJzaW9uPyknKQorCQkJCWV4Y2Vw dDoKKwkJCQkJcHJpbnQoJ0NvdWxkIG5vdCBzZXQgU05JJykKKwkJCQl0cnk6CisJCQkJCWlmIGFy Z3Muc3RhcnR0bHM6CisJCQkJCQlzc2xTdGFydFRMU0Nvbm5lY3QoY29ubmVjdGlvbiwgKHN0cihh ZGRyZXNzKSwgaW50KGFyZ3MucG9ydCkpLCBhcmdzLnN0YXJ0dGxzKQorCQkJCQkJI2Nvbm5lY3Rp b24uY29ubmVjdCgoc3RyKGFkZHJlc3MpLCBpbnQoYXJncy5wb3J0KSksIGFyZ3Muc3RhcnR0bHMp CisJCQkJCWVsc2U6CisJCQkJCQljb25uZWN0aW9uLmNvbm5lY3QoKHN0cihhZGRyZXNzKSwgaW50 KGFyZ3MucG9ydCkpKQorCQkJCSNleGNlcHQgVHlwZUVycm9yOgorCQkJCSMJcHJpbnQgJ0Nhbm5v dCBjb25uZWN0IHRvICVzIChvbGQgTTJDcnlwdG8gdmVyc2lvbiBub3Qgc3VwcG9ydGluZyBzdGFy dCBzY3JpcHQ/KScgJSBhZGRyZXNzCisJCQkJIwljb250aW51ZQorCQkJCWV4Y2VwdCBTU0wuQ2hl Y2tlci5Xcm9uZ0hvc3QgYXMgZToKKwkJCQkJIyBUaGUgbmFtZSBvbiB0aGUgcmVtb3RlIGNlcnQg ZG9lc24ndCBtYXRjaCB0aGUgaG9zdG5hbWUgYmVjYXVzZSB3ZSBjb25uZWN0IG9uIElQLCBub3Qg aG9zdG5hbWUgKGFzIHdlIHdhbnQgc2VjdXJlIGxvb2t1cCkKKwkJCQkJcGFzcworCQkJCWV4Y2Vw dCBzb2NrZXQuZXJyb3IgYXMgZToKKwkJCQkJcHJpbnQoJ0Nhbm5vdCBjb25uZWN0IHRvICVzOiAl cycgJSAoYWRkcmVzcywgc3RyKGUpKSkKKwkJCQkJY29udGludWUKKwkJCQljaGFpbiA9IGNvbm5l Y3Rpb24uZ2V0X3BlZXJfY2VydF9jaGFpbigpCisJCQkJdmVyaWZ5X3Jlc3VsdCA9IGNvbm5lY3Rp b24uZ2V0X3ZlcmlmeV9yZXN1bHQoKQorCisJCQkJIyBHb29kLCBub3cgbGV0J3MgdmVyaWZ5CisJ CQkJcHJlX2V4aXQgPSB2ZXJpZnlDaGFpbihyZWNvcmQsIGNoYWluLCB2ZXJpZnlfcmVzdWx0LCBw cmVfZXhpdCwgRmFsc2UsIGFkZHJlc3MpCisJCQkJIyBDbGVhbnVwLCBqdXN0IGluIGNhc2UKKwkJ CQljb25uZWN0aW9uLmNsZWFyKCkKKwkJCQljb25uZWN0aW9uLmNsb3NlKCkKKwkJCQljdHguY2xv c2UoKQorCisJCQkjIEVORCBmb3IgYWRkcmVzcyBpbiBhZGRyZXNzZXMKKwkJIyBFTkQgZm9yIHJl Y29yZCBpbiByZWNvcmRzCisJCXN5cy5leGl0KHByZV9leGl0KQorCSMgRU5EIGlmIGFyZ3MudmVy aWZ5CisKKwllbHNlOiAjIHdlIHdhbnQgdG8gY3JlYXRlCisJCWNlcnQgPSBOb25lCisJCWlmIG5v dCBhcmdzLmNlcnRpZmljYXRlOgorCQkJaWYgYXJncy5wcm90b2NvbCAhPSAndGNwJzoKKwkJCQlw cmludCgnT25seSBTU0wgb3ZlciBUQ1AgaXMgc3VwcG9ydGVkIChzb3JyeSknLCBmaWxlPXN5cy5z dGRlcnIpCisJCQkJc3lzLmV4aXQoMSkKKwkJCWlmIGFyZ3MuZGVidWc6CisJCQkJcHJpbnQoJ05v IGNlcnRpZmljYXRlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUsIGF0dGVtcHRpbmcgdG8g cmV0cmlldmUgaXQgZnJvbSB0aGUgc2VydmVyICVzJyAlIChhcmdzLmhvc3QpKQorCQkJY29ubmVj dGlvbl9wb3J0ID0gYXJncy5wb3J0CisJCQlpZiBhcmdzLnBvcnQgPT0gJyonOgorCQkJCXN5cy5z dGRvdXQud3JpdGUoJ1RoZSBwb3J0IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUgaXMgKiwg cGxlYXNlIHNwZWNpZnkgdGhlIHBvcnQgb2YgdGhlIFRMUyBzZXJ2aWNlIG9uICVzICg0NDMpOiAn ICUgYXJncy5ob3N0KQorCQkJCWlucHV0X29rID0gRmFsc2UKKwkJCQl3aGlsZSBub3QgaW5wdXRf b2s6CisJCQkJCXVzZXJfaW5wdXQgPSBpbnB1dCgpCisJCQkJCWlmIHVzZXJfaW5wdXQgPT0gJyc6 CisJCQkJCQljb25uZWN0aW9uX3BvcnQgPSA0NDMKKwkJCQkJCWJyZWFrCisJCQkJCXRyeToKKwkJ CQkJCWlmIDEgPD0gaW50KHVzZXJfaW5wdXQpIDw9IDY1NTM1OgorCQkJCQkJCWNvbm5lY3Rpb25f cG9ydCA9IHVzZXJfaW5wdXQKKwkJCQkJCQlpbnB1dF9vayA9IFRydWUKKwkJCQkJZXhjZXB0Ogor CQkJCQkJc3lzLnN0ZG91dC53cml0ZSgnUG9ydCAlcyBub3QgbnVtZXJpY2FsIG9yIHdpdGhpbiBj b3JyZWN0IHJhbmdlICgxIDw9IHBvcnQgPD0gNjU1MzUpLCB0cnkgYWdhaW4gKGhpdCBlbnRlciBm b3IgZGVmYXVsdCA0NDMpOiAnICUgdXNlcl9pbnB1dCkKKwkJCSMgR2V0IHRoZSBhZGRyZXNzIHJl Y29yZHMgZm9yIHRoZSBob3N0CisJCQl0cnk6CisJCQkJI2FkZHJlc3NlcyA9IGdldEEoYXJncy5o b3N0LCBzZWN1cmU9c2VjdXJlKSArIGdldEFBQUEoYXJncy5ob3N0LCBzZWN1cmU9c2VjdXJlKQor CQkJCWlmIG5vdCBhcmdzLmlwdjQgYW5kIG5vdCBhcmdzLmlwdjY6CisJCQkJCWFkZHJlc3NlcyA9 IGdldEEoYXJncy5ob3N0LCBzZWN1cmU9c2VjdXJlKSArIGdldEFBQUEoYXJncy5ob3N0LCBzZWN1 cmU9c2VjdXJlKQorCisJCQkJZWxpZiBhcmdzLmlwdjQ6CisJCQkJCWFkZHJlc3NlcyA9IGdldEEo YXJncy5ob3N0LCBzZWN1cmU9c2VjdXJlKQorCQkJCWVsc2U6CisJCQkJCWFkZHJlc3NlcyA9IGdl dEFBQUEoYXJncy5ob3N0LCBzZWN1cmU9c2VjdXJlKQorCisJCQlleGNlcHQgSW5zZWN1cmVMb29r dXBFeGNlcHRpb24gYXMgZToKKwkJCQlwcmludChzdHIoZSksIGZpbGU9c3lzLnN0ZGVycikKKwkJ CQlzeXMuZXhpdCgxKQorCisJCQlmb3IgYWRkcmVzcyBpbiBhZGRyZXNzZXM6CisJCQkJaWYgYXJn cy5kZWJ1ZzoKKwkJCQkJcHJpbnQoJ0F0dGVtcHRpbmcgdG8gZ2V0IGNlcnRpZmljYXRlIGZyb20g JXMnICUgc3RyKGFkZHJlc3MpKQorCQkJCSMgV2UgZG8gdGhlIGNlcnRpZmljYXRlIGhhbmRsaW5n IGhlcmUsIGFzIE0yQ3J5cHRvIGtlZXBzIHNlZ2ZhdWx0aW5nIHdoZW4gdHJ5IHRvIGRvIHN0dWZm IHdpdGggdGhlIGNlcnQgaWYgd2UgZG9uJ3QKKwkJCQljdHggPSBTU0wuQ29udGV4dCgpCisJCQkJ Y3R4LnNldF92ZXJpZnkoU1NMLnZlcmlmeV9ub25lLCBkZXB0aD05KQorCQkJCWlmIGlzaW5zdGFu Y2UoYWRkcmVzcywgQUFBQVJlY29yZCk6CisJCQkJCXNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tl dC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfU1RSRUFNKQorCQkJCQlzb2NrLnNldHNvY2tvcHQoc29j a2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisJCQkJZWxzZToKKwkJCQkJ c29jayA9IE5vbmUKKwkJCQljb25uZWN0aW9uID0gU1NMLkNvbm5lY3Rpb24oY3R4LCBzb2NrPXNv Y2spCisJCQkJdHJ5OgorCQkJCQljb25uZWN0aW9uLnNldF90bHNleHRfaG9zdF9uYW1lKHNuaWhv c3QpCisJCQkJCWlmKGFyZ3MuZGVidWcpOgorCQkJCQkJcHJpbnQoJ0RpZCBzZXQgc2VydmVybmFt ZSAlcycgJSBzbmlob3N0KQorCQkJCWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKwkJCQkJcHJpbnQo J0NvdWxkIG5vdCBzZXQgU05JIChvbGQgTTJDcnlwdG8gdmVyc2lvbj8pJykKKwkJCQlleGNlcHQ6 CisJCQkJCXByaW50KCdDb3VsZCBub3Qgc2V0IFNOSScpCisJCQkJdHJ5OgorCQkJCQlpZiBhcmdz LnN0YXJ0dGxzOgorCQkJCQkJc3NsU3RhcnRUTFNDb25uZWN0KGNvbm5lY3Rpb24sIChzdHIoYWRk cmVzcyksIGludChjb25uZWN0aW9uX3BvcnQpKSwgYXJncy5zdGFydHRscykKKwkJCQkJCSNjb25u ZWN0aW9uLmNvbm5lY3QoKHN0cihhZGRyZXNzKSwgaW50KGNvbm5lY3Rpb25fcG9ydCkpLCBhcmdz LnN0YXJ0dGxzKQorCQkJCQllbHNlOgorCQkJCQkJY29ubmVjdGlvbi5jb25uZWN0KChzdHIoYWRk cmVzcyksIGludChjb25uZWN0aW9uX3BvcnQpKSkKKwkJCQkjZXhjZXB0IFR5cGVFcnJvcjoKKwkJ CQkjCXByaW50ICdDYW5ub3QgY29ubmVjdCB0byAlcyAob2xkIE0yQ3J5cHRvIHZlcnNpb24gbm90 IHN1cHBvcnRpbmcgc3RhcnQgc2NyaXB0PyknICUgYWRkcmVzcworCQkJCSMJY29udGludWUKKwkJ CQlleGNlcHQgU1NMLkNoZWNrZXIuV3JvbmdIb3N0OgorCQkJCQlwYXNzCisJCQkJZXhjZXB0IHNv Y2tldC5lcnJvciBhcyBlOgorCQkJCQlwcmludCgnQ2Fubm90IGNvbm5lY3QgdG8gJXM6ICVzJyAl IChhZGRyZXNzLCBzdHIoZSkpKQorCQkJCQljb250aW51ZQorCisJCQkJY2hhaW4gPSBjb25uZWN0 aW9uLmdldF9wZWVyX2NlcnRfY2hhaW4oKQorCQkJCWlmIG5vdCB2ZXJpZnlDZXJ0TmFtZVdpdGhI b3N0TmFtZShjZXJ0PWNoYWluWzBdLCBob3N0bmFtZT1zdHIoYXJncy5ob3N0KSwgd2l0aF9tc2c9 YXJncy5kZWJ1Zyk6CisJCQkJCXByaW50KCdXQVJOSU5HOiBDZXJ0aWZpY2F0ZSBuYW1lIGRvZXMg bm90IG1hdGNoIHRoZSBob3N0bmFtZScpCisJCQkJZ2VuUmVjb3JkcyhhcmdzLmhvc3QsIGFkZHJl c3MsIGFyZ3MucHJvdG9jb2wsIGFyZ3MucG9ydCwgY2hhaW4sIGFyZ3Mub3V0cHV0LCBhcmdzLnVz YWdlLCBhcmdzLnNlbGVjdG9yLCBhcmdzLm10eXBlKQorCQkJCSMgQ2xlYW51cCB0aGUgY29ubmVj dGlvbiBhbmQgY29udGV4dAorCQkJCWNvbm5lY3Rpb24uY2xlYXIoKQorCQkJCWNvbm5lY3Rpb24u Y2xvc2UoKQorCQkJCWN0eC5jbG9zZSgpCisKKwkJZWxzZTogIyBQYXNzIHRoZSBwYXRoIHRvIHRo ZSBjZXJ0aWZpY2F0ZSB0byB0aGUgZ2VuVExTQSBmdW5jdGlvbgorCQkJdHJ5OgorCQkJCWNoYWlu LCB2ZXJpZnlfcmVzdWx0ID0gZ2V0TG9jYWxDaGFpbihhcmdzLmNlcnRpZmljYXRlLCBhcmdzLmRl YnVnKQorCQkJCWlmIGFyZ3MudXNhZ2UgPT0gMCBvciBhcmdzLnVzYWdlID09IDEgYW5kIG5vdCB2 ZXJpZnlfcmVzdWx0OgorCQkJCQlwcmludCgnRm9sbG93aW5nIGVycm9yIHdhcyByYWlzZWQgZHVy aW5nIFBLSVggdmFsaWRhdGlvbjogJXMnICUgdmVyaWZ5X3Jlc3VsdCkKKwkJCQlnZW5SZWNvcmRz KGFyZ3MuaG9zdCwgYXJncy5ob3N0LCBhcmdzLnByb3RvY29sLCBhcmdzLnBvcnQsIGNoYWluLCBh cmdzLm91dHB1dCwgYXJncy51c2FnZSwgYXJncy5zZWxlY3RvciwgYXJncy5tdHlwZSkKKwkJCWV4 Y2VwdCBFeGNlcHRpb24gYXMgZToKKwkJCQlwcmludCgnQ291bGQgbm90IHZlcmlmeSBsb2NhbCBj ZXJ0aWZpY2F0ZTogJXMuJyAlIGUpCg==