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] epel10: Upgrade to new upstream version and fixes for tlsa Date: Fri, 31 Jul 2026 05:29:21 GMT Message-ID: <178547576117.1.17533761965623166405.rpms-hash-slinger-6b766c0ef79d@fedoraproject.org> List-ID: X-Git-Repo: rpms/hash-slinger X-Git-Branch: epel10 X-Git-Rev: 6b766c0ef79d2c395c2bb55492ce3d03bad0f15f QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvaGFzaC1zbGluZ2Vy CkJyYW5jaCA6IGVwZWwxMApDb21taXQgOiA2Yjc2NmMwZWY3OWQyYzM5NWMyYmI1NTQ5MmNlM2Qw M2JhZDBmMTVmCkF1dGhvciA6IEZyYW5rIENyYXdmb3JkIDxmcmFua0BjcmF3Zm9yZC5lbXUuaWQu YXU+CkRhdGUgICA6IDIwMjYtMDctMzFUMTQ6MjE6MzkrMTA6MDAKU3RhdHMgIDogKzkzMy8tNCBp biAzIGZpbGUocykKVVJMICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBtcy9o YXNoLXNsaW5nZXIvYy82Yjc2NmMwZWY3OWQyYzM5NWMyYmI1NTQ5MmNlM2QwM2JhZDBmMTVmP2Jy YW5jaD1lcGVsMTAKCkxvZzoKVXBncmFkZSB0byBuZXcgdXBzdHJlYW0gdmVyc2lvbiBhbmQgZml4 ZXMgZm9yIHRsc2EKCi0tLQpkaWZmIC0tZ2l0IGEvaGFzaC1zbGluZ2VyLnNwZWMgYi9oYXNoLXNs aW5nZXIuc3BlYwppbmRleCA3OWI5ZDI3Li45ZjE4ODE2IDEwMDY0NAotLS0gYS9oYXNoLXNsaW5n ZXIuc3BlYworKysgYi9oYXNoLXNsaW5nZXIuc3BlYwpAQCAtMiwyMCArMiwzNSBAQAogCiBTdW1t YXJ5OiBHZW5lcmF0ZSBhbmQgdmVyaWZ5IHZhcmlvdXMgRE5TIHJlY29yZHMgc3VjaCBhcyBTU0hG UCwgVExTQSBhbmQgT1BFTlBHUEtFWQogTmFtZTogaGFzaC1zbGluZ2VyCi1WZXJzaW9uOiAzLjUK LVJlbGVhc2U6IDElez9kaXN0fQorVmVyc2lvbjogMy42CitSZWxlYXNlOiAyJXs/ZGlzdH0KIExp Y2Vuc2U6IEdQTC0yLjAtb3ItbGF0ZXIKIFVybDogIGh0dHBzOi8vZ2l0aHViLmNvbS9sZXRvYW1z LyV7bmFtZX0vCi1Tb3VyY2U6ICAle3VybH1hcmNoaXZlLyV7dmVyc2lvbn0vJXtuYW1lfS0le3Zl cnNpb259LnRhci5negorU291cmNlMDogICV7dXJsfWFyY2hpdmUvJXt2ZXJzaW9ufS8le25hbWV9 LSV7dmVyc2lvbn0udGFyLmd6CisjIGJhY2sgcG9ydCB0bHNhIGZyb20gdjMuNCBmb3IgUkhFTCBz eXN0ZW1zIGFzIHB5dGhvbiA8IDMuMTMgZXhjZXB0IFJIRUwxMAorIyBodHRwczovL2dpdGh1Yi5j b20vbGV0b2Ftcy9oYXNoLXNsaW5nZXIvaXNzdWVzLzU0CitTb3VyY2UxOiAgdGxzYS12My40CiAl aWYgJXt3aXRoIG1hbn0KICMgT25seSB0byByZWdlbmVyYXRlIHRoZSBtYW4gcGFnZSwgd2hpY2gg aXMgc2hpcHBlZCBwZXIgZGVmYXVsdAogQnVpbGRyZXF1aXJlczogeG1sdG8KICVlbmRpZgogQnVp bGRSZXF1aXJlczogcHl0aG9uMy1kZXZlbCwgbWFrZQorJWlmIDAlez9yaGVsfSAmJiAwJXs/cmhl bH0gPD0gOQogUmVxdWlyZXM6IHB5dGhvbjMgPj0gMy40CislZWxzZQorJWlmIDAlez9yaGVsfSA9 PSAxMAorIyBUaGlzIGlzIG5vdCBxdWl0ZSByaWdodCBmb3IgdGxzYSwgYnV0IHdpbGwgd29yayBm b3IgbW9zdCB1c2VzCitSZXF1aXJlczogcHl0aG9uMyA+PSAzLjEyCislZWxzZQorUmVxdWlyZXM6 IHB5dGhvbjMgPj0gMy4xMworJWVuZGlmCislZW5kaWYKIFJlcXVpcmVzOiBweXRob24zLWRucywg cHl0aG9uMy11bmJvdW5kCiBSZXF1aXJlczogb3BlbnNzaC1jbGllbnRzID49IDQsIHB5dGhvbjMt Z251cGcgPj0gMC4zLjcKIFJlcXVpcmVzOiBweXRob24zLWNyeXB0b2dyYXBoeQorJWlmIDAlez9y aGVsfSAmJiAwJXs/cmhlbH0gPD0gOQorUmVxdWlyZXM6IHB5dGhvbjMtbTJjcnlwdG8KKyVlbmRp ZgogQnVpbGRBcmNoOiBub2FyY2gKIE9ic29sZXRlczogc3NoZnAgPCAyLjAKIFByb3ZpZGVzOiBz c2hmcCAgPSAle3ZlcnNpb259CkBAIC0zNSw2ICs1MCw5IEBAIFRoaXMgcGFja2FnZSBoYXMgaW5j b3Jwb3JhdGVkIHRoZSBvbGQgJ3NzaGZwJyBhbmQgJ3N3ZWRlJyBjb21tYW5kcy9wYWNrYWdlcwog CiAlcHJlcAogJWF1dG9zZXR1cCAtcDEKKyVpZiAwJXs/cmhlbH0gJiYgMCV7P3JoZWx9IDw9IDkK K2NwICV7U09VUkNFMX0gdGxzYQorJWVuZGlmCiAKICVidWlsZAogJW1ha2VfYnVpbGQgYWxsCkBA IC00OSw2ICs2NywxNSBAQCBUaGlzIHBhY2thZ2UgaGFzIGluY29ycG9yYXRlZCB0aGUgb2xkICdz c2hmcCcgYW5kICdzd2VkZScgY29tbWFuZHMvcGFja2FnZXMKICVkb2MgJXtfbWFuZGlyfS9tYW4x LyoKIAogJWNoYW5nZWxvZworKiBGcmkgSnVsIDMxIDIwMjYgRnJhbmsgQ3Jhd2ZvcmQgPGZyYW5r QGNyYXdmb3JkLmVtdS5pZC5hdT4gLSAzLjYtMgorLSBCYWNrcG9ydCB0bHNhIGZyb20gdjMuNCBm b3Igb2xkZXIgUkhFTCBzeXN0ZW1zIGFzIHB5dGhvbiA8IDMuMTMKKworKiBTYXQgSnVsIDI1IDIw MjYgRnJhbmsgQ3Jhd2ZvcmQgPGZyYW5rQGNyYXdmb3JkLmVtdS5pZC5hdT4gLSAzLjYtMQorLSBV cGRhdGVkIHRvIDMuNgorCisqIFRodSBKdWwgMTYgMjAyNiBGZWRvcmEgUmVsZWFzZSBFbmdpbmVl cmluZyA8cmVsZW5nQGZlZG9yYXByb2plY3Qub3JnPiAtIDMuNS0yCistIFJlYnVpbHQgZm9yIGh0 dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9GZWRvcmFfNDVfTWFzc19SZWJ1aWxkCisKICog VHVlIEZlYiAyNCAyMDI2IEZyYW5rIENyYXdmb3JkIDxmcmFua0BjcmF3Zm9yZC5lbXUuaWQuYXU+ IC0gMy41LTEKIC0gVXBkYXRlZCB0byAzLjUKIC0gUmVlbmFibGUgdGxzYSB1c2luZyBweXRob24z LWNyeXB0b2dyYXBoeSAtIEJaMjMxODMwNiBhbmQgQloyMzY3MTE1CgpkaWZmIC0tZ2l0IGEvc291 cmNlcyBiL3NvdXJjZXMKaW5kZXggY2E4ODBjNC4uYmRkY2U3MSAxMDA2NDQKLS0tIGEvc291cmNl cworKysgYi9zb3VyY2VzCkBAIC0xICsxIEBACi1TSEE1MTIgKGhhc2gtc2xpbmdlci0zLjUudGFy Lmd6KSA9IGFjMzBjZmZhMGRiYjgzMzg5ZjIxNTEwMDAzNWFkZTg0MGY4ZmM5NDdlOGY2MjVlMTgw NjhmYTZkMmFjNDljNWU3ZjViZTZjZDI0N2Y3MGY0NmM3MzQ3MmNjMTM3NDQzOTQ0YzIwZDdiNzY2 ZmNjYmJjYjU3NTI0Yjg4ODdhNDMxCitTSEE1MTIgKGhhc2gtc2xpbmdlci0zLjYudGFyLmd6KSA9 IDc2NzE4MTA3M2NmZTRkZTNlZmEwNWIyNWFkMzFkNTI1ODE0MjA2MzRkMTQyYzlkODQzYzkyYjNi NzUyMTE4YTNjM2JhMjIzY2EwYzcyMjcxODhmMDJiODlmODk5ZDdmZDVjMWYxN2Q0MzNmZTYxZGFl Nzk2NjA3NTVmM2MzMjMyCgpkaWZmIC0tZ2l0IGEvdGxzYS12My40IGIvdGxzYS12My40Cm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YmY0MjQKLS0tIC9kZXYvbnVsbAorKysg Yi90bHNhLXYzLjQKQEAgLTAsMCArMSw5MDIgQEAKKyMhL3Vzci9iaW4vcHl0aG9uMworCisjIHRs c2EgLSBBIHRvb2wgdG8gY3JlYXRlIERBTkUvVExTQSByZWNvcmRzLiAoY2FsbGVkICdzd2VkZScg YmVmb3JlKQorIworIyBUaGlzIHRvb2wgaXMgbG9vc2x5IGJhc2VkIG9uIHRoZSAnZGFuZScgcHJv Z3JhbSBpbiB0aGUgc3NoZnAgcGFja2FnZSBieSBQYXVsCisjIFdvdXRlcnMgYW5kIENocmlzdG9w aGVyIE9sYWgKKyMKKyMgQ29weXJpZ2h0IDIwMTIgUGlldGVyIExleGlzIDxwaWV0ZXIubGV4aXNA b3MzLm5sPgorIyBDb3B5cmlnaHQgMjAxNCBQYXVsIFdvdXRlcnMgPHB3b3V0ZXJzQHJlZGhhdC5j b20+CisjIENvcHlyaWdodCAyMDE1LTIwMTkgRGlyayBTdG9lY2tlciA8aGFzaHNsaW5nZXJAZHN0 b2Vja2VyLmRlPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgor IyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitWRVJTSU9O PSIzLjQiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHNvY2tldAoraW1wb3J0IHVu Ym91bmQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgcmUKK2Zyb20gTTJDcnlwdG8gaW1wb3J0 IFg1MDksIFNTTCwgQklPLCBtMgorZnJvbSBiaW5hc2NpaSBpbXBvcnQgYjJhX2hleAorZnJvbSBo YXNobGliIGltcG9ydCBzaGEyNTYsIHNoYTUxMgorZnJvbSBpcGFkZHJlc3MgaW1wb3J0IElQdjRB ZGRyZXNzLCBJUHY2QWRkcmVzcworCitST09US0VZPSJub25lIgorY2F1bGRyb24gPSAoICIvdmFy L2xpYi91bmJvdW5kL3Jvb3QuYW5jaG9yIiwgIi92YXIvbGliL3VuYm91bmQvcm9vdC5rZXkiLCAi L2V0Yy91bmJvdW5kL3Jvb3Qua2V5IiwgIi91c3Ivc2hhcmUvZG5zL3Jvb3Qua2V5IiApCitmb3Ig cm9vdCBpbiBjYXVsZHJvbjoKKwlpZiBvcy5wYXRoLmlzZmlsZShyb290KToKKwkJUk9PVEtFWT1y b290CisJCWJyZWFrCisKK2RlZiBnZW5UTFNBKGhvc3RuYW1lLCBwcm90b2NvbCwgcG9ydCwgY2Vy dGlmaWNhdGUsIG91dHB1dD0ncmZjJywgdXNhZ2U9MSwgc2VsZWN0b3I9MCwgbXR5cGU9MSk6CisJ IiIiVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgYSBUTFNBUmVjb3JkIG9iamVjdCB1c2luZyB0aGUg ZGF0YSBwYXNzZWQgaW4gdGhlIHBhcmFtZXRlcnMsCisJaXQgdGhlbiB2YWxpZGF0ZXMgdGhlIHJl Y29yZCBhbmQgcmV0dXJucyB0aGUgUlIgYXMgYSBzdHJpbmcuCisJIiIiCisJIyBjaGVjayBpZiB2 YWxpZCB2YXJzIHdlcmUgcGFzc2VkCisJaWYgaG9zdG5hbWVbLTFdICE9ICcuJzoKKwkJaG9zdG5h bWUgKz0gJy4nCisKKwkjIENyZWF0ZSB0aGUgcmVjb3JkIHdpdGhvdXQgYSBjZXJ0aWZpY2F0ZQor CWlmIHBvcnQgPT0gJyonOgorCQlyZWNvcmQgPSBUTFNBUmVjb3JkKG5hbWU9JyVzLl8lcy4lcycl KHBvcnQscHJvdG9jb2wsaG9zdG5hbWUpLCB1c2FnZT11c2FnZSwgc2VsZWN0b3I9c2VsZWN0b3Is IG10eXBlPW10eXBlLCBjZXJ0ID0nJykKKwllbHNlOgorCQlyZWNvcmQgPSBUTFNBUmVjb3JkKG5h bWU9J18lcy5fJXMuJXMnJShwb3J0LHByb3RvY29sLGhvc3RuYW1lKSwgdXNhZ2U9dXNhZ2UsIHNl bGVjdG9yPXNlbGVjdG9yLCBtdHlwZT1tdHlwZSwgY2VydCA9JycpCisJIyBDaGVjayBpZiB0aGUg cmVjb3JkIGlzIHZhbGlkCisJaWYgcmVjb3JkLmlzVmFsaWQ6CisJCWlmIHJlY29yZC5zZWxlY3Rv ciA9PSAwOgorCQkJIyBIYXNoIHRoZSBGdWxsIGNlcnRpZmljYXRlCisJCQlyZWNvcmQuY2VydCA9 IGdldEhhc2goY2VydGlmaWNhdGUsIHJlY29yZC5tdHlwZSkKKwkJZWxzZToKKwkJCSMgSGFzaCBv bmx5IHRoZSBTdWJqZWN0UHVibGljS2V5SW5mbworCQkJcmVjb3JkLmNlcnQgPSBnZXRIYXNoKGNl cnRpZmljYXRlLmdldF9wdWJrZXkoKSwgcmVjb3JkLm10eXBlKQorCisJcmVjb3JkLmlzVmFsaWQo cmFpc2VFeGNlcHRpb249VHJ1ZSkKKworCWlmIG91dHB1dCA9PSAnZ2VuZXJpYyc6CisJCXJldHVy biByZWNvcmQuZ2V0UmVjb3JkKGdlbmVyaWM9VHJ1ZSkKKwlyZXR1cm4gcmVjb3JkLmdldFJlY29y ZCgpCisKK2RlZiBnZW5SZWNvcmRzKGhvc3RuYW1lLCBhZGRyZXNzLCBwcm90b2NvbCwgcG9ydCwg Y2hhaW4sIG91dHB1dD0ncmZjJywgdXNhZ2U9MSwgc2VsZWN0b3I9MCwgbXR5cGU9MSk6CisJY2Vy dCA9IE5vbmUKKwljaGFpbmVkID0gY2hlY2tDaGFpbkxpbmsoY2hhaW4pWzBdCisJaWYgbm90IGNo YWluZWQ6CisJCXByaW50KCJXQVJOOiBDZXJ0aWZpY2F0ZXMgZG9uJ3QgY2hhaW4iKQorCWNlcnRz bGVmdCA9IGxlbihjaGFpbikKKwlmb3IgY2hhaW5jZXJ0IGluIGNoYWluOgorCQljZXJ0c2xlZnQg LT0gMQorCQlpZiB1c2FnZSA9PSAxIG9yIHVzYWdlID09IDM6CisJCQkjIFRoZSBmaXJzdCBjZXJ0 IGlzIHRoZSBlbmQtZW50aXR5IGNlcnQKKwkJCXByaW50KCdHb3QgYSBjZXJ0aWZpY2F0ZSBmb3Ig JXMgd2l0aCBTdWJqZWN0OiAlcycgJSAoYWRkcmVzcywgY2hhaW5jZXJ0LmdldF9zdWJqZWN0KCkp KQorCQkJY2VydCA9IGNoYWluY2VydAorCQkJYnJlYWsKKwkJZWxzZToKKwkJCWlmICh1c2FnZSA9 PSAwIGFuZCBjaGFpbmNlcnQuY2hlY2tfY2EoKSkgb3IgdXNhZ2UgPT0gMjoKKwkJCQlpZiBjZXJ0 c2xlZnQ6ICMgZG9uJ3QgYXNrIGZvciB0aGUgbGFzdCBvbmUKKwkJCQkJc3lzLnN0ZG91dC53cml0 ZSgnR290IGEgY2VydGlmaWNhdGUgd2l0aCB0aGUgZm9sbG93aW5nIFN1YmplY3Q6XG5cdCVzXG5V c2UgdGhpcyBhcyBjZXJ0aWZpY2F0ZSB0byBtYXRjaD8gW3kvTl0gJyAlIGNoYWluY2VydC5nZXRf c3ViamVjdCgpKQorCQkJCQlpbnB1dF9vayA9IEZhbHNlCisJCQkJCXdoaWxlIG5vdCBpbnB1dF9v azoKKwkJCQkJCXVzZXJfaW5wdXQgPSBpbnB1dCgpCisJCQkJCQlpZiB1c2VyX2lucHV0IGluIFsn JywnbicsJ04nXToKKwkJCQkJCQlpbnB1dF9vaz1UcnVlCisJCQkJCQllbGlmIHVzZXJfaW5wdXQg aW4gWyd5JywgJ1knXToKKwkJCQkJCQlpbnB1dF9vayA9IFRydWUKKwkJCQkJCQljZXJ0ID0gY2hh aW5jZXJ0CisJCQkJCQllbHNlOgorCQkJCQkJCXN5cy5zdGRvdXQud3JpdGUoJ1BsZWFzZSBhbnN3 ZXIgWSBvciBOJykKKwkJCQllbHNlOgorCQkJCQlwcmludCgnVXNpbmcgY2VydGlmaWNhdGUgd2l0 aCB0aGUgZm9sbG93aW5nIFN1YmplY3Q6XG5cdCVzXG4nICUgY2hhaW5jZXJ0LmdldF9zdWJqZWN0 KCkpCisJCQkJCWNlcnQgPSBjaGFpbmNlcnQKKwkJCWlmIGNlcnQ6CisJCQkJYnJlYWsKKworCWlm IGNlcnQ6ICMgUHJpbnQgdGhlIHJlcXVlc3RlZCByZWNvcmRzIGJhc2VkIG9uIHRoZSByZXRyaWV2 ZWQgY2VydGlmaWNhdGVzCisJCWlmIG91dHB1dCA9PSAnYm90aCc6CisJCQlwcmludChnZW5UTFNB KGhvc3RuYW1lLCBwcm90b2NvbCwgcG9ydCwgY2VydCwgJ2RyYWZ0JywgdXNhZ2UsIHNlbGVjdG9y LCBtdHlwZSkpCisJCQlwcmludChnZW5UTFNBKGhvc3RuYW1lLCBwcm90b2NvbCwgcG9ydCwgY2Vy dCwgJ3JmYycsIHVzYWdlLCBzZWxlY3RvciwgbXR5cGUpKQorCQllbHNlOgorCQkJcHJpbnQoZ2Vu VExTQShob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQsIGNlcnQsIG91dHB1dCwgdXNhZ2UsIHNlbGVj dG9yLCBtdHlwZSkpCisKKwkjIENsZWFyIHRoZSBjZXJ0IGZyb20gbWVtb3J5ICh0byBzdG9wIE0y Q3J5cHRvIGZyb20gc2VnZmF1bHRpbmcpCisJY2VydD1Ob25lCisKK2RlZiBnZXRBKGhvc3RuYW1l LCBzZWN1cmU9VHJ1ZSk6CisJIiIiR2V0cyBhIGxpc3Qgb2YgQSByZWNvcmRzIGZvciBob3N0bmFt ZSwgcmV0dXJucyBhIGxpc3Qgb2YgQVJlY29yZHMiIiIKKwlyZWNvcmRzID0gW10KKwl0cnk6CisJ CXJlY29yZHMgPSBnZXRSZWNvcmRzKGhvc3RuYW1lLCBycnR5cGU9J0EnLCBzZWN1cmU9c2VjdXJl KQorCWV4Y2VwdCBJbnNlY3VyZUxvb2t1cEV4Y2VwdGlvbiBhcyBlOgorCQlwcmludChzdHIoZSkp CisJZXhjZXB0IEROU0xvb2t1cEVycm9yIGFzIGU6CisJCXByaW50KCdVbmFibGUgdG8gcmVzb2x2 ZSAlczogJXMnICUgKGhvc3RuYW1lLCBzdHIoZSkpKQorCXJldCA9IFtdCisJZm9yIHJlY29yZCBp biByZWNvcmRzOgorCQlyZXQuYXBwZW5kKEFSZWNvcmQoaG9zdG5hbWUsIHN0cihJUHY0QWRkcmVz cyhpbnQoYjJhX2hleChyZWNvcmQpLDE2KSkpKSkKKwlyZXR1cm4gcmV0CisKK2RlZiBnZXRBQUFB KGhvc3RuYW1lLCBzZWN1cmU9VHJ1ZSk6CisJIiIiR2V0cyBhIGxpc3Qgb2YgQUFBQSByZWNvcmRz IGZvciBob3N0bmFtZSwgcmV0dXJucyBhIGxpc3Qgb2YgQUFBQVJlY29yZHMiIiIKKwlyZWNvcmRz ID0gW10KKwl0cnk6CisJCXJlY29yZHMgPSBnZXRSZWNvcmRzKGhvc3RuYW1lLCBycnR5cGU9J0FB QUEnLCBzZWN1cmU9c2VjdXJlKQorCWV4Y2VwdCBJbnNlY3VyZUxvb2t1cEV4Y2VwdGlvbiBhcyBl OgorCQlwcmludChzdHIoZSkpCisJZXhjZXB0IEROU0xvb2t1cEVycm9yIGFzIGU6CisJCXByaW50 KCdVbmFibGUgdG8gcmVzb2x2ZSAlczogJXMnICUgKGhvc3RuYW1lLCBzdHIoZSkpKQorCXJldCA9 IFtdCisJZm9yIHJlY29yZCBpbiByZWNvcmRzOgorCQlyZXQuYXBwZW5kKEFBQUFSZWNvcmQoaG9z dG5hbWUsIHN0cihJUHY2QWRkcmVzcyhpbnQoYjJhX2hleChyZWNvcmQpLDE2KSkpKSkKKwlyZXR1 cm4gcmV0CisKK2RlZiBnZXRWZXJpZmljYXRpb25FcnJvclJlYXNvbihudW0pOgorCSIiIlRoaXMg ZnVuY3Rpb24gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgWDUwOSBFcnJvciBiYXNlZCBvbiBpbnQo bnVtKQorCSIiIgorCSMgVGhlc2Ugd2VyZSB0YWtlbiBmcm9tIHRoZSBNMkNyeXB0by5tMiBjb2Rl CisJcmV0dXJuIHsKKzUwOiAiWDUwOV9WX0VSUl9BUFBMSUNBVElPTl9WRVJJRklDQVRJT04iLAor MjI6ICJYNTA5X1ZfRVJSX0NFUlRfQ0hBSU5fVE9PX0xPTkciLAorMTA6ICJYNTA5X1ZfRVJSX0NF UlRfSEFTX0VYUElSRUQiLAorOTogICJYNTA5X1ZfRVJSX0NFUlRfTk9UX1lFVF9WQUxJRCIsCisy ODogIlg1MDlfVl9FUlJfQ0VSVF9SRUpFQ1RFRCIsCisyMzogIlg1MDlfVl9FUlJfQ0VSVF9SRVZP S0VEIiwKKzc6ICAiWDUwOV9WX0VSUl9DRVJUX1NJR05BVFVSRV9GQUlMVVJFIiwKKzI3OiAiWDUw OV9WX0VSUl9DRVJUX1VOVFJVU1RFRCIsCisxMjogIlg1MDlfVl9FUlJfQ1JMX0hBU19FWFBJUkVE IiwKKzExOiAiWDUwOV9WX0VSUl9DUkxfTk9UX1lFVF9WQUxJRCIsCis4OiAgIlg1MDlfVl9FUlJf Q1JMX1NJR05BVFVSRV9GQUlMVVJFIiwKKzE4OiAiWDUwOV9WX0VSUl9ERVBUSF9aRVJPX1NFTEZf U0lHTkVEX0NFUlQiLAorMTQ6ICJYNTA5X1ZfRVJSX0VSUk9SX0lOX0NFUlRfTk9UX0FGVEVSX0ZJ RUxEIiwKKzEzOiAiWDUwOV9WX0VSUl9FUlJPUl9JTl9DRVJUX05PVF9CRUZPUkVfRklFTEQiLAor MTU6ICJYNTA5X1ZfRVJSX0VSUk9SX0lOX0NSTF9MQVNUX1VQREFURV9GSUVMRCIsCisxNjogIlg1 MDlfVl9FUlJfRVJST1JfSU5fQ1JMX05FWFRfVVBEQVRFX0ZJRUxEIiwKKzI0OiAiWDUwOV9WX0VS Ul9JTlZBTElEX0NBIiwKKzI2OiAiWDUwOV9WX0VSUl9JTlZBTElEX1BVUlBPU0UiLAorMTc6ICJY NTA5X1ZfRVJSX09VVF9PRl9NRU0iLAorMjU6ICJYNTA5X1ZfRVJSX1BBVEhfTEVOR1RIX0VYQ0VF REVEIiwKKzE5OiAiWDUwOV9WX0VSUl9TRUxGX1NJR05FRF9DRVJUX0lOX0NIQUlOIiwKKzY6ICAi WDUwOV9WX0VSUl9VTkFCTEVfVE9fREVDT0RFX0lTU1VFUl9QVUJMSUNfS0VZIiwKKzQ6ICAiWDUw OV9WX0VSUl9VTkFCTEVfVE9fREVDUllQVF9DRVJUX1NJR05BVFVSRSIsCis1OiAgIlg1MDlfVl9F UlJfVU5BQkxFX1RPX0RFQ1JZUFRfQ1JMX1NJR05BVFVSRSIsCiszOiAgIlg1MDlfVl9FUlJfVU5B QkxFX1RPX0dFVF9DUkwiLAorMjogICJYNTA5X1ZfRVJSX1VOQUJMRV9UT19HRVRfSVNTVUVSX0NF UlQiLAorMjA6ICJYNTA5X1ZfRVJSX1VOQUJMRV9UT19HRVRfSVNTVUVSX0NFUlRfTE9DQUxMWSIs CisyMTogIlg1MDlfVl9FUlJfVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRSIsCiswOiAg Ilg1MDlfVl9PSyJ9W2ludChudW0pXQorCitkZWYgZ2V0UmVjb3Jkcyhob3N0bmFtZSwgcnJ0eXBl PSdBJywgc2VjdXJlPVRydWUsIG5vcmVzb2x2ZXI9RmFsc2UpOgorCSIiIkRvIGEgbG9va3VwIG9m IGEgbmFtZSBhbmQgYSBycnR5cGUsIHJldHVybnMgYSBsaXN0IG9mIGJpbmFyeSBjb2RlZCBzdHJp bmdzLiBPbmx5IHF1ZXJpZXMgZm9yIHJyX2NsYXNzIElOLiIiIgorCWdsb2JhbCByZXNvbHZjb25m CisJY3R4ID0gdW5ib3VuZC51Yl9jdHgoKQorCWlmIG9zLnBhdGguaXNmaWxlKFJPT1RLRVkpOgor CQkjIGZpbGUgZm9ybWF0IGd1ZXNzaW5nIC0gdW5ib3VuZCBzaG91bGQgZGVhbCB3aXRoIHRoaXMg OigKKwkJdHJ5OgorCQkJY3R4LmFkZF90YV9maWxlKFJPT1RLRVkpCisJCWV4Y2VwdDoKKwkJCXVu Ym91bmQudWJfY3R4X3RydXN0ZWRrZXlzKGN0eCxST09US0VZKQorCSMgVXNlIHRoZSBsb2NhbCBj YWNoZSBhbmQgZW11bGF0ZSAvZXRjL2hvc3RzCisJY3R4Lmhvc3RzKCIvZXRjL2hvc3RzIikKKwlp ZiByZXNvbHZjb25mIGFuZCBub3Qgbm9yZXNvbHZlcjoKKwkJY3R4LnJlc29sdmNvbmYocmVzb2x2 Y29uZikKKworCWlmIHJydHlwZSA9PSA1MjoKKwkJcnJ0eXBlc3RyID0gIlRMU0EiCisJZWxzZToK KwkJcnJ0eXBlc3RyID0gcnJ0eXBlCisJaWYgdHlwZShycnR5cGUpID09IHN0cjoKKwkJaWYgJ1JS X1RZUEVfJyArIHJydHlwZSBpbiBkaXIodW5ib3VuZCk6CisJCQlycnR5cGUgPSBnZXRhdHRyKHVu Ym91bmQsICdSUl9UWVBFXycgKyBycnR5cGUpCisJCWVsc2U6CisJCQlyYWlzZSBFeGNlcHRpb24o J0Vycm9yOiB1bmtub3duIFJSIFRZUEU6ICVzLicgJSBycnR5cGUpCisJZWxpZiB0eXBlKHJydHlw ZSkgIT0gaW50OgorCQlyYWlzZSBFeGNlcHRpb24oJ0Vycm9yOiBycnR5cGUgaW4gd3JvbmcgZm9y bWF0LCBuZWl0aGVyIGludCBub3Igc3RyLicpCisKKwlzdGF0dXMsIHJlc3VsdCA9IGN0eC5yZXNv bHZlKGhvc3RuYW1lLCBycnR5cGU9cnJ0eXBlKQorCWlmIHN0YXR1cyA9PSAwIGFuZCByZXN1bHQu aGF2ZWRhdGE6CisJCWlmIG5vdCByZXN1bHQuc2VjdXJlOgorCQkJaWYgc2VjdXJlOgorCQkJCWlm IG5vdCBub3Jlc29sdmVyIGFuZCByZXNvbHZjb25mOgorCQkJCQlyZXR2YWwgPSBnZXRSZWNvcmRz KGhvc3RuYW1lLCBycnR5cGUsIHNlY3VyZSwgVHJ1ZSkKKwkJCQkJcHJpbnQoJ1dhcm5pbmc6IGlu aXRpYWwgcXVlcnkgdXNpbmcgcmVzb2x2ZXIgY29uZmlnIGZpbGUgd2FzIG5vdCBzZWN1cmUgKHRy eSBvcHRpb24gLS1yZXNvbHZjb25mPSIiKS4nLCBmaWxlPXN5cy5zdGRlcnIpCisJCQkJCXJlc29s dmNvbmYgPSBOb25lCisJCQkJCXJldHVybiByZXR2YWwKKwkJCQkjIFRoZSBkYXRhIGlzIGluc2Vj dXJlIGFuZCBhIHNlY3VyZSBsb29rdXAgd2FzIHJlcXVlc3RlZAorCQkJCXJhaXNlIEluc2VjdXJl TG9va3VwRXhjZXB0aW9uKCdFcnJvcjogQW5zd2VyIHdhcyBub3QgRE5TU0VDLXNlY3VyZScpCisJ CQllbHNlOgorCQkJCXByaW50KCdXYXJuaW5nOiBxdWVyeSBkYXRhIGlzIG5vdCBzZWN1cmUuJywg ZmlsZT1zeXMuc3RkZXJyKQorCQkjIElmIHdlIGFyZSBoZXJlIHRoZSBkYXRhIHdhcyBlaXRoZXIg c2VjdXJlIG9yIGluc2VjdXJlIGRhdGEgaXMgYWNjZXB0ZWQKKwkJcmV0dXJuIHJlc3VsdC5kYXRh LnJhdworCWVsc2U6CisJCXJhaXNlIEROU0xvb2t1cEVycm9yKCdVbnN1Y2Nlc3NmdWwgRE5TIGxv b2t1cCBvciBubyBkYXRhIHJldHVybmVkIGZvciBycnR5cGUgJXMgKCVzKS4nICUgKHJydHlwZXN0 ciwgcnJ0eXBlKSkKKworIyBpZGVudGljYWwgdG8gQ29ubmVjdGlvbi5jb25uZWN0KCkgZXhjZXB0 IGZvciB0aGUgbGFzdCBwYXJhbWV0ZXIKK2RlZiBzc2xTdGFydFRMU0Nvbm5lY3QoY29ubmVjdGlv biwgYWRkciwgc3RhcnR0bHM9Tm9uZSk6CisgICAgICAgIGNvbm5lY3Rpb24uc29ja2V0LmNvbm5l Y3QoYWRkcikKKyAgICAgICAgY29ubmVjdGlvbi5hZGRyID0gYWRkcgorICAgICAgICBpZiBzdGFy dHRsczoKKyAgICAgICAgICAgICMgcHJpbWl0aXZlIG1ldGhvZCwgbm8gZXJyb3IgY2hlY2tzIHll dAorICAgICAgICAgICAgaWYgc3RhcnR0bHMgPT0gInNtdHAiOgorICAgICAgICAgICAgICAgIGRh dGEgPSBjb25uZWN0aW9uLnNvY2tldC5yZWN2KDUwMCkKKyAgICAgICAgICAgICAgICBjb25uZWN0 aW9uLnNvY2tldC5zZW5kKCJFSExPIE0yQ3J5cHRvXHJcbiIuZW5jb2RlKCdhc2NpaScpKQorICAg ICAgICAgICAgICAgIGRhdGEgPSBjb25uZWN0aW9uLnNvY2tldC5yZWN2KDUwMCkKKyAgICAgICAg ICAgICAgICBjb25uZWN0aW9uLnNvY2tldC5zZW5kKCJTVEFSVFRMU1xyXG4iLmVuY29kZSgnYXNj aWknKSkKKyAgICAgICAgICAgICAgICBkYXRhID0gY29ubmVjdGlvbi5zb2NrZXQucmVjdig1MDAp CisgICAgICAgICAgICBlbGlmIHN0YXJ0dGxzID09ICJpbWFwIjoKKyAgICAgICAgICAgICAgICBk YXRhID0gY29ubmVjdGlvbi5zb2NrZXQucmVjdig1MDApCisgICAgICAgICAgICAgICAgY29ubmVj dGlvbi5zb2NrZXQuc2VuZCgiLiBTVEFSVFRMU1xyXG4iLmVuY29kZSgnYXNjaWknKSkKKyAgICAg ICAgICAgICAgICBkYXRhID0gY29ubmVjdGlvbi5zb2NrZXQucmVjdig1MDApCisgICAgICAgICAg ICBlbGlmIHN0YXJ0dGxzID09ICJmdHAiOgorICAgICAgICAgICAgICAgIGRhdGEgPSBjb25uZWN0 aW9uLnNvY2tldC5yZWN2KDUwMCkKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnNvY2tldC5z ZW5kKCJBVVRIIFRMU1xyXG4iLmVuY29kZSgnYXNjaWknKSkKKyAgICAgICAgICAgICAgICBkYXRh ID0gY29ubmVjdGlvbi5zb2NrZXQucmVjdig1MDApCisgICAgICAgICAgICBlbGlmIHN0YXJ0dGxz ID09ICJwb3AzIjoKKyAgICAgICAgICAgICAgICBkYXRhID0gY29ubmVjdGlvbi5zb2NrZXQucmVj dig1MDApCisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zb2NrZXQuc2VuZCgiU1RMU1xyXG4i LmVuY29kZSgnYXNjaWknKSkKKyAgICAgICAgICAgICAgICBkYXRhID0gY29ubmVjdGlvbi5zb2Nr ZXQucmVjdig1MDApCisgICAgICAgIGNvbm5lY3Rpb24uc2V0dXBfc3NsKCkKKyAgICAgICAgY29u bmVjdGlvbi5zZXRfY29ubmVjdF9zdGF0ZSgpCisgICAgICAgIHJldCA9IGNvbm5lY3Rpb24uY29u bmVjdF9zc2woKQorICAgICAgICBjaGVjayA9IGdldGF0dHIoY29ubmVjdGlvbiwgJ3Bvc3RDb25u ZWN0aW9uQ2hlY2snLCBjb25uZWN0aW9uLmNsaWVudFBvc3RDb25uZWN0aW9uQ2hlY2spCisgICAg ICAgIGlmIGNoZWNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgbm90IGNoZWNrKGNvbm5l Y3Rpb24uZ2V0X3BlZXJfY2VydCgpLCBjb25uZWN0aW9uLmFkZHJbMF0pOgorICAgICAgICAgICAg ICAgIHJhaXNlIENoZWNrZXIuU1NMVmVyaWZpY2F0aW9uRXJyb3IoJ3Bvc3QgY29ubmVjdGlvbiBj aGVjayBmYWlsZWQnKQorICAgICAgICByZXR1cm4gcmV0CisKK2RlZiBnZXRIYXNoKGNlcnRpZmlj YXRlLCBtdHlwZSk6CisJIiIiSGFzaGVzIHRoZSBjZXJ0aWZpY2F0ZSBiYXNlZCBvbiB0aGUgbXR5 cGUuCisJVGhlIGNlcnRpZmljYXRlIHNob3VsZCBiZSBhbiBNMkNyeXB0by5YNTA5Llg1MDkgb2Jq ZWN0IChvciB0aGUgcmVzdWx0IG9mIHRoZSBnZXRfcHVia2V5KCkgZnVuY3Rpb24gb24gc2FpZCBv YmplY3QpCisJIiIiCisJY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZS5hc19kZXIoKQorCWlmIG10 eXBlID09IDA6CisJCXJldHVybiBjZXJ0aWZpY2F0ZS5oZXgoKQorCWVsaWYgbXR5cGUgPT0gMToK KwkJcmV0dXJuIHNoYTI1NihjZXJ0aWZpY2F0ZSkuaGV4ZGlnZXN0KCkKKwllbGlmIG10eXBlID09 IDI6CisJCXJldHVybiBzaGE1MTIoY2VydGlmaWNhdGUpLmhleGRpZ2VzdCgpCisJZWxzZToKKwkJ cmFpc2UgRXhjZXB0aW9uKCdtdHlwZSBzaG91bGQgYmUgMCwxLDInKQorCitkZWYgZ2V0VExTQSho b3N0bmFtZSwgcG9ydD00NDMsIHByb3RvY29sPSd0Y3AnLCBzZWN1cmU9VHJ1ZSk6CisJIiIiCisJ VGhpcyBmdW5jdGlvbiB0cmllcyB0byBkbyBhIHNlY3VyZSBsb29rdXAgb2YgdGhlIFRMU0EgcmVj b3JkLgorCUF0IHRoZSBtb21lbnQgaXQgcmVxdWVzdHMgdGhlIFRZUEU1MiByZWNvcmQgYW5kIHBh cnNlcyBpdCBpbnRvIGEgJ3ZhbGlkJyBUTFNBIHJlY29yZAorCUl0IHJldHVybnMgYSBsaXN0IG9m IFRMU0FSZWNvcmQgb2JqZWN0cworCSIiIgorCWlmIGhvc3RuYW1lWy0xXSAhPSAnLic6CisJCWhv c3RuYW1lICs9ICcuJworCisJaWYgbm90IHByb3RvY29sLmxvd2VyKCkgaW4gWyd0Y3AnLCAndWRw JywgJ3NjdHAnXToKKwkJcmFpc2UgRXhjZXB0aW9uKCdFcnJvcjogdW5rbm93biBwcm90b2NvbDog JXMuIFNob3VsZCBiZSBvbmUgb2YgdGNwLCB1ZHAgb3Igc2N0cCcgJSBwcm90b2NvbCkKKwl0cnk6 CisJCWlmIHBvcnQgPT0gJyonOgorCQkJcmVjb3JkcyA9IGdldFJlY29yZHMoJyouXyVzLiVzJyAl IChwcm90b2NvbC5sb3dlcigpLCBob3N0bmFtZSksIHJydHlwZT01Miwgc2VjdXJlPXNlY3VyZSkK KwkJZWxzZToKKwkJCXJlY29yZHMgPSBnZXRSZWNvcmRzKCdfJXMuXyVzLiVzJyAlIChwb3J0LCBw cm90b2NvbC5sb3dlcigpLCBob3N0bmFtZSksIHJydHlwZT01Miwgc2VjdXJlPXNlY3VyZSkKKwll eGNlcHQgSW5zZWN1cmVMb29rdXBFeGNlcHRpb24gYXMgZToKKwkJcHJpbnQoc3RyKGUpKQorCQlz eXMuZXhpdCgxKQorCWV4Y2VwdCBETlNMb29rdXBFcnJvciBhcyBlOgorCQlwcmludCgnVW5hYmxl IHRvIHJlc29sdmUgJXM6ICVzJyAlIChob3N0bmFtZSwgc3RyKGUpKSkKKwkJc3lzLmV4aXQoMSkK KwlyZXQgPSBbXQorCWZvciByZWNvcmQgaW4gcmVjb3JkczoKKwkJaGV4ZGF0YSA9IGIyYV9oZXgo cmVjb3JkKQorCQlpZiBwb3J0ID09ICcqJzoKKwkJCXJldC5hcHBlbmQoVExTQVJlY29yZCgnKi5f JXMuJXMnICUgKHByb3RvY29sLmxvd2VyKCksIGhvc3RuYW1lKSwgaW50KGhleGRhdGFbMDoyXSwx NiksIGludChoZXhkYXRhWzI6NF0sMTYpLCBpbnQoaGV4ZGF0YVs0OjZdLDE2KSwgaGV4ZGF0YVs2 Ol0uZGVjb2RlKCdhc2NpaScpKSkKKwkJZWxzZToKKwkJCXJldC5hcHBlbmQoVExTQVJlY29yZCgn XyVzLl8lcy4lcycgJSAocG9ydCwgcHJvdG9jb2wubG93ZXIoKSwgaG9zdG5hbWUpLCBpbnQoaGV4 ZGF0YVswOjJdLDE2KSwgaW50KGhleGRhdGFbMjo0XSwxNiksIGludChoZXhkYXRhWzQ6Nl0sMTYp LCBoZXhkYXRhWzY6XS5kZWNvZGUoJ2FzY2lpJykpKQorCXJldHVybiByZXQKKworZGVmIHZlcmlm eUNlcnRNYXRjaChyZWNvcmQsIGNlcnQpOgorCSIiIgorCVZlcmlmeSB0aGUgY2VydGlmaWNhdGUg d2l0aCB0aGUgcmVjb3JkLgorCXJlY29yZCBzaG91bGQgYmUgYSBUTFNBUmVjb3JkIGFuZCBjZXJ0 IHNob3VsZCBiZSBhIE0yQ3J5cHRvLlg1MDkuWDUwOQorCSIiIgorCWlmIG5vdCBpc2luc3RhbmNl KGNlcnQsIFg1MDkuWDUwOSk6CisJCXJldHVybgorCWlmIG5vdCBpc2luc3RhbmNlKHJlY29yZCwg VExTQVJlY29yZCk6CisJCXJldHVybgorCisJaWYgcmVjb3JkLnNlbGVjdG9yID09IDE6CisJCWNl cnRoYXNoID0gZ2V0SGFzaChjZXJ0LmdldF9wdWJrZXkoKSwgcmVjb3JkLm10eXBlKQorCWVsc2U6 CisJCWNlcnRoYXNoID0gZ2V0SGFzaChjZXJ0LCByZWNvcmQubXR5cGUpCisKKwlpZiBub3QgY2Vy dGhhc2g6CisJCXJldHVybgorCisJaWYgY2VydGhhc2ggPT0gcmVjb3JkLmNlcnQ6CisJCXJldHVy biBUcnVlCisJZWxzZToKKwkJcmV0dXJuIEZhbHNlCisKK2RlZiB2ZXJpZnlDZXJ0TmFtZVdpdGhI b3N0TmFtZShjZXJ0LCBob3N0bmFtZSwgd2l0aF9tc2c9RmFsc2UpOgorCSIiIlZlcmlmeSB0aGUg bmFtZSBvbiB0aGUgY2VydGlmaWNhdGUgd2l0aCBhIGhvc3RuYW1lLCB3ZSBuZWVkIHRoaXMgYmVj YXVzZSB3ZSBnZXQgdGhlIGNlcnQgYmFzZWQgb24gSVAgYWRkcmVzcyBhbmQgdGh1c2x5IGNhbm5v dCByZWx5IG9uIE0yQ3J5cHRvIHRvIHZlcmlmeSB0aGlzIiIiCisJaWYgbm90IGlzaW5zdGFuY2Uo Y2VydCwgWDUwOS5YNTA5KToKKwkJcmV0dXJuCisJaWYgbm90IGlzaW5zdGFuY2UoaG9zdG5hbWUs IHN0cik6CisJCXJldHVybgorCisJaWYgaG9zdG5hbWVbLTFdID09ICcuJzoKKwkJaG9zdG5hbWUg PSBob3N0bmFtZVswOi0xXQorCWhvc3RuYW1lID0gaG9zdG5hbWUubG93ZXIoKQorCisJY2VydG5h bWVzID0gW10KKwlmb3IgZW50cnkgaW4gc3RyKGNlcnQuZ2V0X3N1YmplY3QoKSkubG93ZXIoKS5z cGxpdCgiLyIpOgorCQlpZiBlbnRyeS5zdGFydHN3aXRoKCJjbj0iKToKKwkJCWNlcnRuYW1lcy5h cHBlbmQoZW50cnlbMzpdKQorCXRyeToKKwkJZm9yIHZhbHVlIGluIHJlLnNwbGl0KCIsID8iLCBj ZXJ0LmdldF9leHQoJ3N1YmplY3RBbHROYW1lJykuZ2V0X3ZhbHVlKCkubG93ZXIoKSk6CisJCQlp ZiB2YWx1ZS5zdGFydHN3aXRoKCJkbnM6Iik6CisJCQkJY2VydG5hbWVzLmFwcGVuZCh2YWx1ZVs0 Ol0pCisJZXhjZXB0OgorCQlwYXNzCisJaWYgaG9zdG5hbWUgaW4gY2VydG5hbWVzOgorCQlyZXR1 cm4gVHJ1ZQorCWZvciBjZXJ0bmFtZSBpbiBjZXJ0bmFtZXM6CisJCWlmIGNlcnRuYW1lWzBdID09 ICcqJyBhbmQgaG9zdG5hbWUuZW5kc3dpdGgoY2VydG5hbWVbMTpdKToKKwkJCXJldHVybiBUcnVl CisKKwlpZiB3aXRoX21zZzoKKwkJcHJpbnQoJ1dBUk5JTkc6IE5hbWUgb24gdGhlIGNlcnRpZmlj YXRlIChTdWJqZWN0OiAlcywgU3ViamVjdEFsdE5hbWU6ICVzKSBkb2VzblwndCBtYXRjaCByZXF1 ZXN0ZWQgaG9zdG5hbWUgKCVzKS4nICUgKHN0cihjZXJ0LmdldF9zdWJqZWN0KCkpLCBjZXJ0Lmdl dF9leHQoJ3N1YmplY3RBbHROYW1lJykuZ2V0X3ZhbHVlKCksIGhvc3RuYW1lKSkKKwlyZXR1cm4g RmFsc2UKKworZGVmIGNoZWNrQ2hhaW5MaW5rKGNoYWluLCByZWNvcmQ9Tm9uZSk6CisJcHJldmlv dXNfaXNzdWVyID0gTm9uZQorCWNoYWluZWQgPSBUcnVlCisJbWF0Y2hlZCA9IE5vbmUKKwlmb3Ig Y2VydCBpbiBjaGFpbjoKKwkJaWYgcHJldmlvdXNfaXNzdWVyOgorCQkJaWYgbm90IHN0cihwcmV2 aW91c19pc3N1ZXIpID09IHN0cihjZXJ0LmdldF9zdWJqZWN0KCkpOiAjIFRoZSBjaGFpbiBjYW5u b3QgYmUgdmFsaWQKKwkJCQljaGFpbmVkID0gRmFsc2UKKwkJCQlicmVhaworCQlwcmV2aW91c19p c3N1ZXIgPSBjZXJ0LmdldF9pc3N1ZXIoKQorCQlpZiByZWNvcmQgYW5kIHZlcmlmeUNlcnRNYXRj aChyZWNvcmQsIGNlcnQpOgorCQkJbWF0Y2hlZCA9IGNlcnQKKwlyZXR1cm4gY2hhaW5lZCwgbWF0 Y2hlZAorCitkZWYgZ2V0TG9jYWxDaGFpbihmaWxlbmFtZSwgZGVidWcpOgorCSIiIlJldHVybnMg bGlzdCBvZiBNMkNyeXB0by5YNTA5Llg1MDkgb2JqZWN0cyBhbmQgdmVyaWZpY2F0aW9uIHJlc3Vs dCIiIgorCWNoYWluID0gW10KKwliaW8gPSBCSU8ub3BlbmZpbGUoZmlsZW5hbWUpCisJRXJyID0g Tm9uZQorCXdoaWxlIFRydWU6CisJCXRyeToKKwkJCWNwdHIgPSBtMi54NTA5X3JlYWRfcGVtKGJp by5fcHRyKCkpCisJCWV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKwkJCUVyciA9IGUKKwkJCWJyZWFr OworCQlpZiBub3QgY3B0cjoKKwkJCWJyZWFrCisJCWNoYWluLmFwcGVuZChYNTA5Llg1MDkoY3B0 ciwgX3B5ZnJlZT0xKSkKKwlpZiBub3QgY2hhaW46CisJCWlmIEVycjoKKwkJCXJhaXNlCisJCWVs c2U6CisJCQlyYWlzZSBFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2FkICVzIiAlIGZpbGVuYW1lKQor CSMgRklYTUUgLSBpcyB0aGlzIHBvc3NpYmxlIHVzaW5nIHRoZSBsaWJyYXJ5ICh3aXRob3V0IGEg Y2FsbCB0byBvcGVuc3NsIHRvb2wpPworCWNtZCA9IFsib3BlbnNzbCIsICJ2ZXJpZnkiLCBmaWxl bmFtZV0KKwlwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNz LlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisJKHN0ZG91dCwgc3RkZXJyKSA9IHByb2Nl c3MuY29tbXVuaWNhdGUoKQorCWlmIGRlYnVnOgorCQlwcmludChzdGRlcnIsIGZpbGU9c3lzLnN0 ZGVycikKKwlpZiBzdGRvdXQuZW5kc3dpdGgoYiJPS1xuIik6CisJCXZlcmlmeV9yZXN1bHQgPSAw CisJZWxzZToKKwkJdmVyaWZ5X3Jlc3VsdCA9ICIlcyVzIiAlIChzdGRvdXQsIHN0ZGVycikKKwly ZXR1cm4gY2hhaW4sIHZlcmlmeV9yZXN1bHQKKworZGVmIHVzYWdlVGV4dCh1c2FnZSk6CisJbmFt ZXMgPSBbIlBLSVgtQ0EiLCAiUEtJWC1FRSIsICJEQU5FLVRBIiwgIkRBTkUtRUUiXQorCXJldHVy biAiVXNhZ2UgJWQgWyVzXSIgJSAodXNhZ2UsIG5hbWVzW3VzYWdlXSkKKworZGVmIHZlcmlmeUNo YWluKHJlY29yZCwgY2hhaW4sIHZlcmlmeV9yZXN1bHQsIHByZV9leGl0LCBsb2NhbCwgc291cmNl KToKKwlzb3VyY2UgPSAiJXMgZm9yICVzIiAlIChyZWNvcmQuZ2V0U2hvcnRUZXh0KCksIHNvdXJj ZSkKKwlpZiBsb2NhbDoKKwkJdGV4dF9jZXJ0ID0gIkxvY2FsIGNlcnRpZmljYXRlIgorCQl0ZXh0 X2NoYWluID0gImNlcnRpZmljYXRlIGluIHRoZSBsb2NhbCBjZXJ0aWZpY2F0ZSBjaGFpbiIKKwll bHNlOgorCQl0ZXh0X2NlcnQgPSAiQ2VydGlmaWNhdGUgb2ZmZXJlZCBieSB0aGUgc2VydmVyIgor CQl0ZXh0X2NoYWluID0gImNlcnRpZmljYXRlIGluIHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiBvZmZl cmVkIGJ5IHRoZSBzZXJ2ZXIiCisKKwlpZiBub3QgdmVyaWZ5Q2VydE5hbWVXaXRoSG9zdE5hbWUo Y2VydD1jaGFpblswXSwgaG9zdG5hbWU9c3RyKGFyZ3MuaG9zdCksIHdpdGhfbXNnPVRydWUpOgor CQkjIFRoZSBuYW1lIG9uIHRoZSBjZXJ0IGRvZXNuJ3QgbWF0Y2ggdGhlIGhvc3RuYW1lLi4uIHdl IGRvbid0IHZlcmlmeSB0aGUgVExTQSByZWNvcmQKKwkJcHJpbnQoJ0NhdXRpb246ICVzIGRvZXMg bm90IG1hdGNoIGhvc3RuYW1lICglcyknICUgKHRleHRfY2VydCwgc291cmNlKSkKKwl1dCA9IHVz YWdlVGV4dChyZWNvcmQudXNhZ2UpCisJaWYgcmVjb3JkLnVzYWdlID09IDE6ICMgRW5kLWhvc3Qg Y2VydAorCQljaGFpbmVkLCBtYXRjaGVkID0gY2hlY2tDaGFpbkxpbmsoKGNoYWluWzBdLCksIHJl Y29yZCkKKwkJaWYgbm90IGNoYWluZWQ6CisJCQlwcmludCgiV0FSTjogQ2VydGlmaWNhdGVzIGRv bid0IGNoYWluIikKKwkJaWYgbWF0Y2hlZDoKKwkJCWlmIHZlcmlmeV9yZXN1bHQgPT0gMDogIyBU aGUgY2VydCBjaGFpbnMgdG8gYSB2YWxpZCBDQSBjZXJ0IGFjY29yZGluZyB0byB0aGUgc3lzdGVt LWNlcnRpZmljYXRlcworCQkJCXByaW50KCdTVUNDRVNTICglcyk6ICVzIG1hdGNoZXMgdGhlIG9u ZSBtZW50aW9uZWQgaW4gdGhlIFRMU0EgcmVjb3JkIGFuZCBjaGFpbnMgdG8gYSB2YWxpZCBDQSBj ZXJ0aWZpY2F0ZSAoJXMpJyAlICh1dCwgdGV4dF9jZXJ0LCBzb3VyY2UpKQorCQkJZWxzZToKKwkJ CQlpZiBsb2NhbDoKKwkJCQkJcmVhc29uID0gdmVyaWZ5X3Jlc3VsdAorCQkJCWVsc2U6CisJCQkJ CXJlYXNvbiA9IGdldFZlcmlmaWNhdGlvbkVycm9yUmVhc29uKHZlcmlmeV9yZXN1bHQpCisJCQkJ cHJpbnQoJ0ZBSUwgKCVzKTogJXMgbWF0Y2hlcyB0aGUgb25lIG1lbnRpb25lZCBpbiB0aGUgVExT QSByZWNvcmQgYnV0IHRoZSBmb2xsb3dpbmcgZXJyb3Igd2FzIHJhaXNlZCBkdXJpbmcgUEtJWCB2 YWxpZGF0aW9uICglcyk6ICVzJyAlICh1dCwgdGV4dF9jZXJ0LCBzb3VyY2UsIHJlYXNvbikpCisJ CQkJaWYgcHJlX2V4aXQgPT0gMDogcHJlX2V4aXQgPSAyCisJCQlpZiBhcmdzLmRlYnVnOiBwcmlu dCgnVGhlIG1hdGNoZWQgY2VydGlmaWNhdGUgaGFzIFN1YmplY3Q6ICVzJyAlIGNlcnQuZ2V0X3N1 YmplY3QoKSkKKwkJZWxzZToKKwkJCXByaW50KCdGQUlMOiAlcyBkb2VzIG5vdCBtYXRjaCB0aGUg VExTQSByZWNvcmQgKCVzKScgJSAodGV4dF9jZXJ0LCBzb3VyY2UpKQorCQkJaWYgcHJlX2V4aXQg PT0gMDogcHJlX2V4aXQgPSAyCisKKwllbGlmIHJlY29yZC51c2FnZSA9PSAwOiAjIENBIGNvbnN0 cmFpbnQKKwkJIyBGSVhNRTogRG9lcyBuZWl0aGVyIGhhbmRsZSBjaGFpbiBkYXRhIGluIGZ1bGwg Y2VydCBUTFNBIHJlY29yZHMgKHR5cGUgMCkgY29ycmVjdGx5CisJCSMgbm9yIGhhbmRsZXMgc2hv cnQgY2VydGlmaWNhdGlvbiBjaGFpbnMKKwkJIyBJbiB0aGVzZSBjYXNlIHRoZSBjaGFpbiBzaG91 bGQgYmUgY29tcGxldGVkIHdpdGggbWlzc2luZyByZWNvcmRzIGVpdGhlcgorCQkjIGZyb20gVExT QSBvciBsb2NhbCBjZXJ0aWZpY2F0ZSBzdG9yZQorCisJCSMgUmVtb3ZlIHRoZSBmaXJzdCAoPSBF bmQtRW50aXR5IGNlcnQpIGZyb20gdGhlIGNoYWluCisJCWNoYWluZWQsIG1hdGNoZWQgPSBjaGVj a0NoYWluTGluayhjaGFpblsxOl0sIHJlY29yZCkKKwkJaWYgbm90IGNoYWluZWQ6CisJCQlwcmlu dCgiV0FSTjogQ2VydGlmaWNhdGVzIGRvbid0IGNoYWluIikKKwkJaWYgbWF0Y2hlZDoKKwkJCWlm IGNlcnQuY2hlY2tfY2EoKToKKwkJCQlpZiB2ZXJpZnlfcmVzdWx0ID09IDA6CisJCQkJCXByaW50 KCdTVUNDRVNTICglcyk6IEEgJXMgbWF0Y2hlcyB0aGUgb25lIG1lbnRpb25lZCBpbiB0aGUgVExT QSByZWNvcmQgYW5kIGlzIGEgQ0EgY2VydGlmaWNhdGUgKCVzKScgJSAodXQsIHRleHRfY2hhaW4s IHNvdXJjZSkpCisJCQkJZWxzZToKKwkJCQkJaWYgbG9jYWw6CisJCQkJCQlyZWFzb24gPSB2ZXJp ZnlfcmVzdWx0CisJCQkJCWVsc2U6CisJCQkJCQlyZWFzb24gPSBnZXRWZXJpZmljYXRpb25FcnJv clJlYXNvbih2ZXJpZnlfcmVzdWx0KQorCQkJCQlwcmludCgnRkFJTCAoJXMpOiBBICVzIG1hdGNo ZXMgdGhlIG9uZSBtZW50aW9uZWQgaW4gdGhlIFRMU0EgcmVjb3JkIGFuZCBpcyBhIENBIGNlcnRp ZmljYXRlLCBidXQgdGhlIGZvbGxvd2luZyBlcnJvciB3YXMgcmFpc2VkIGR1cmluZyBQS0lYIHZh bGlkYXRpb24gKCVzKTogJXMnICUgKHV0LCB0ZXh0X2NoYWluLCBzb3VyY2UsIHJlYXNvbikpCisJ CQkJCWlmIHByZV9leGl0ID09IDA6IHByZV9leGl0ID0gMgorCQkJZWxzZToKKwkJCQlwcmludCgn RkFJTCAoJXMpOiBBICVzIG1hdGNoZXMgdGhlIG9uZSBtZW50aW9uZWQgaW4gdGhlIFRMU0EgcmVj b3JkIGJ1dCBpcyBub3QgYSBDQSBjZXJ0aWZpY2F0ZSAoJXMpJyAlICh1dCwgdGV4dF9jaGFpbiwg c291cmNlKSkKKwkJCQlpZiBwcmVfZXhpdCA9PSAwOiBwcmVfZXhpdCA9IDIKKwkJCWlmIGFyZ3Mu ZGVidWc6IHByaW50KCdUaGUgbWF0Y2hlZCBjZXJ0aWZpY2F0ZSBoYXMgU3ViamVjdDogJXMnICUg Y2VydC5nZXRfc3ViamVjdCgpKQorCQllbHNlOgorCQkJcHJpbnQoJ0ZBSUwgKCVzKTogTm8gJXMg bWF0Y2hlcyB0aGUgVExTQSByZWNvcmQgKCVzKScgJSAodXQsIHRleHRfY2hhaW4sIHNvdXJjZSkp CisJCQlpZiBwcmVfZXhpdCA9PSAwOiBwcmVfZXhpdCA9IDIKKworCWVsaWYgcmVjb3JkLnVzYWdl ID09IDI6ICMgVXNhZ2UgMiwgdXNlIHRoZSBjZXJ0IGluIHRoZSByZWNvcmQgYXMgdHJ1c3QgYW5j aG9yCisJCSMgRklYTUU6IERvZXMgbm90IGhhbmRsZSBjaGFpbiBkYXRhIGluIGZ1bGwgY2VydCBU TFNBIHJlY29yZHMgKHR5cGUgMCkgY29ycmVjdGx5CisJCSMgSW4gdGhpcyBjYXNlIHRoZSBjaGFp biBzaG91bGQgYmUgY29tcGxldGVkIHdpdGggbWlzc2luZyByZWNvcmRzIGlmIGNoYWluIGlzCisJ CSMgbm90IGNvbXBsZXRlCisJCWNoYWluZWQsIG1hdGNoZWQgPSBjaGVja0NoYWluTGluayhjaGFp biwgcmVjb3JkKQorCQlpZiBtYXRjaGVkOgorCQkJaWYgbm90IGNoYWluZWQ6CisJCQkJcHJpbnQo IldBUk46IENlcnRpZmljYXRlcyBkb24ndCBjaGFpbiIpCisJCQlwcmludCgnU1VDQ0VTUyAoJXMp OiBBICVzIChpbmNsdWRpbmcgdGhlIGVuZC1lbnRpdHkgY2VydGlmaWNhdGUpIG1hdGNoZXMgdGhl IFRMU0EgcmVjb3JkICglcyknICUgKHV0LCB0ZXh0X2NoYWluLCBzb3VyY2UpKQorCQkJaWYgYXJn cy5kZWJ1ZzogcHJpbnQoJ1RoZSBtYXRjaGVkIGNlcnRpZmljYXRlIGhhcyBTdWJqZWN0OiAlcycg JSBtYXRjaGVkLmdldF9zdWJqZWN0KCkpCisJCWVsc2U6CisJCQlpZiBub3QgY2hhaW5lZDoKKwkJ CQlwcmludCgiRkFJTDogQ2VydGlmaWNhdGVzIGRvbid0IGNoYWluIikKKwkJCXByaW50KCdGQUlM ICglcyk6IE5vICVzIChpbmNsdWRpbmcgdGhlIGVuZC1lbnRpdHkgY2VydGlmaWNhdGUpIG1hdGNo ZXMgdGhlIFRMU0EgcmVjb3JkICglcyknICUgKHV0LCB0ZXh0X2NoYWluLCBzb3VyY2UpKQorCQkJ aWYgcHJlX2V4aXQgPT0gMDogcHJlX2V4aXQgPSAyCisKKwllbGlmIHJlY29yZC51c2FnZSA9PSAz OiAjIEVFIGNlcnQgTVVTVCBtYXRjaAorCQljaGFpbmVkLCBtYXRjaGVkID0gY2hlY2tDaGFpbkxp bmsoKGNoYWluWzBdLCksIHJlY29yZCkKKwkJaWYgbm90IGNoYWluZWQ6CisJCQlwcmludCgiV0FS TjogQ2VydGlmaWNhdGVzIGRvbid0IGNoYWluIikKKwkJaWYgbWF0Y2hlZDoKKwkJCXByaW50KCdT VUNDRVNTICglcyk6ICVzIG1hdGNoZXMgdGhlIFRMU0EgcmVjb3JkICglcyknICUgKHV0LCB0ZXh0 X2NlcnQsIHNvdXJjZSkpCisJCQlpZiBhcmdzLmRlYnVnOiBwcmludCgnVGhlIG1hdGNoZWQgY2Vy dGlmaWNhdGUgaGFzIFN1YmplY3Q6ICVzJyAlIGNoYWluWzBdLmdldF9zdWJqZWN0KCkpCisJCWVs c2U6CisJCQlwcmludCgnRkFJTCAoJXMpOiAlcyBkb2VzIG5vdCBtYXRjaCB0aGUgVExTQSByZWNv cmQgKCVzKScgJSAodXQsIHRleHRfY2VydCwgc291cmNlKSkKKwkJCWlmIHByZV9leGl0ID09IDA6 IHByZV9leGl0ID0gMgorCXJldHVybiBwcmVfZXhpdAorCitjbGFzcyBUTFNBUmVjb3JkOgorCSIi IldoZW4gaW5zdGFuY2lhdGVkLCB0aGlzIGNsYXNzIGNvbnRhaW5zIGFsbCB0aGUgZmllbGRzIG9m IGEgVExTQSByZWNvcmQuCisJIiIiCisJZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVzYWdlLCBz ZWxlY3RvciwgbXR5cGUsIGNlcnQpOgorCQlyIiIibmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgUlIg aW4gdGhlIGZvcm1hdDogL14oX1xkezEsNX18XCopXC5fKHRjcHx1ZHB8c2N0cClcLihbYS16MC05 XSpcLil7Mix9JC8KKwkJdXNhZ2UsIHNlbGVjdG9yIGFuZCBtdHlwZSBzaG91bGQgYmUgYW4gaW50 ZWdlcgorCQljZXJ0IHNob3VsZCBiZSBhIGhleGlkZWNpbWFsIHN0cmluZyByZXByZXNlbnRpbmcg dGhlIGNlcnRpZmljYXRlIHRvIGJlIG1hdGNoZWQgZmllbGQKKwkJIiIiCisJCXRyeToKKwkJCXNl bGYucnJ0eXBlID0gNTIgICAgIyBUTFNBIHBlciBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25t ZW50cy9kbnMtcGFyYW1ldGVycworCQkJc2VsZi5ycmNsYXNzID0gMSAgICAjIElOCisJCQlzZWxm Lm5hbWUgPSBzdHIobmFtZSkKKwkJCXNlbGYudXNhZ2UgPSBpbnQodXNhZ2UpCisJCQlzZWxmLnNl bGVjdG9yID0gaW50KHNlbGVjdG9yKQorCQkJc2VsZi5tdHlwZSA9IGludChtdHlwZSkKKwkJCXNl bGYuY2VydCA9IGNlcnQKKwkJZXhjZXB0OgorCQkJcmFpc2UgRXhjZXB0aW9uKCdJbnZhbGlkIHZh bHVlIHBhc3NlZCwgdW5hYmxlIHRvIGNyZWF0ZSBhIFRMU0FSZWNvcmQnKQorCisJZGVmIGdldFJl Y29yZChzZWxmLCBnZW5lcmljPUZhbHNlKToKKwkJIiIiUmV0dXJucyB0aGUgUlIgc3RyaW5nIG9m IHRoaXMgVExTQVJlY29yZCwgZWl0aGVyIGluIHJmYyAoZGVmYXVsdCkgb3IgZ2VuZXJpYyBmb3Jt YXQiIiIKKwkJaWYgZ2VuZXJpYzoKKwkJCXJldHVybiByJyVzIElOIFRZUEU1MiBcIyAlcyAlcyVz JXMlcycgJSAoc2VsZi5uYW1lLCAobGVuKHNlbGYuY2VydCkvLzIpKzMgLCBzZWxmLl90b0hleChz ZWxmLnVzYWdlKSwgc2VsZi5fdG9IZXgoc2VsZi5zZWxlY3RvciksIHNlbGYuX3RvSGV4KHNlbGYu bXR5cGUpLCBzZWxmLmNlcnQpCisJCXJldHVybiAnJXMgSU4gVExTQSAlcyAlcyAlcyAlcycgJSAo c2VsZi5uYW1lLCBzZWxmLnVzYWdlLCBzZWxmLnNlbGVjdG9yLCBzZWxmLm10eXBlLCBzZWxmLmNl cnQpCisKKwlkZWYgX3RvSGV4KHNlbGYsIHZhbCk6CisJCSIiIkhlbHBlciBmdW5jdGlvbiB0byBj cmVhdGUgaGV4IHN0cmluZ3MgZnJvbSBpbnRlZ2VycyIiIgorCQlyZXR1cm4gIiUwLjJ4IiAlIHZh bAorCisJZGVmIGlzVmFsaWQoc2VsZiwgcmFpc2VFeGNlcHRpb249RmFsc2UpOgorCQkiIiJDaGVj ayB3aGV0aGVyIGFsbCBmaWVsZHMgaW4gdGhlIFRMU0EgcmVjb3JkIGFyZSBjb25mb3JtaW5nIHRv IHRoZSBzcGVjIGFuZCBjaGVjayBpZiB0aGUgcG9ydCwgcHJvdG9jb2wgYW5kIG5hbWUgYXJlIGdv b2QiIiIKKwkJZXJyID1bXQorCQl0cnk6CisJCQlpZiBub3QgMSA8PSBpbnQoc2VsZi5nZXRQb3J0 KCkpIDw9IDY1NTM1OgorCQkJCWVyci5hcHBlbmQoJ1BvcnQgJXMgbm90IHdpdGhpbiBjb3JyZWN0 IHJhbmdlICgxIDw9IHBvcnQgPD0gNjU1MzUpJyAlIHNlbGYuZ2V0UG9ydCgpKQorCQlleGNlcHQ6 CisJCQlpZiBzZWxmLmdldFBvcnQoKSAhPSAnKic6CisJCQkJZXJyLmFwcGVuZCgnUG9ydCAlcyBu b3QgYSBudW1iZXInICUgc2VsZi5nZXRQb3J0KCkpCisJCWlmIG5vdCBzZWxmLnVzYWdlIGluIFsw LDEsMiwzXToKKwkJCWVyci5hcHBlbmQoJ1VzYWdlOiBpbnZhbGlkICglcyBpcyBub3Qgb25lIG9m IDAgW1BLSVgtQ0FdLCAxIFtQS0lYLUVFXSwgMiBbREFORS1UQV0gb3IgMyBbREFORS1FRV0pJyAl IHNlbGYudXNhZ2UpCisJCWlmIG5vdCBzZWxmLnNlbGVjdG9yIGluIFswLDFdOgorCQkJZXJyLmFw cGVuZCgnU2VsZWN0b3I6IGludmFsaWQgKCVzIGlzIG5vdCBvbmUgb2YgMCBbQ2VydF0gb3IgMSBb U1BLSV0pJyAlIHNlbGYuc2VsZWN0b3IpCisJCWlmIG5vdCBzZWxmLm10eXBlIGluIFswLDEsMl06 CisJCQllcnIuYXBwZW5kKCdNYXRjaGluZyBUeXBlOiBpbnZhbGlkICglcyBpcyBub3Qgb25lIG9m IDAgW0ZVTExdLCAxIFtTSEEtMjU2XSBvciAyIFtTSEEtNTEyXSknICUgc2VsZi5tdHlwZSkKKwkJ aWYgbm90IHNlbGYuaXNOYW1lVmFsaWQoKToKKwkJCWVyci5hcHBlbmQoJ05hbWUgKCVzKSBpcyBu b3QgaW4gdGhlIGNvcnJlY3QgZm9ybWF0OiBfcG9ydG51bWJlci5fdHJhbnNwb3J0cHJvdG9jb2wu aG9zdG5hbWUuZG9tLicgJSBzZWxmLm5hbWUpCisJCSMgQSBjZXJ0aWZpY2F0ZSBsZW5ndGggb2Yg MCBpcyBhY2NlcHRlZAorCQlpZiBzZWxmLm10eXBlIGluIFsxLDJdIGFuZCBsZW4oc2VsZi5jZXJ0 KSAhPSAwOgorCQkJaWYgbm90IGxlbihzZWxmLmNlcnQpID09IHsxOjY0LDI6MTI4fVtzZWxmLm10 eXBlXToKKwkJCQllcnIuYXBwZW5kKCdDZXJ0aWZpY2F0ZSBmb3IgQXNzb2NpYXRpb246IGludmFs aWQgKEhhc2ggbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGhhc2gtdHlwZSBpbiBNYXRjaGluZyBUeXBl KCVzKSknICUgezE6J1NIQS0yNTYnLDI6J1NIQS01MTInfVtzZWxmLm10eXBlXSkKKwkJaWYgbGVu KGVycikgIT0gMDoKKwkJCWlmIG5vdCByYWlzZUV4Y2VwdGlvbjoKKwkJCQlyZXR1cm4gRmFsc2UK KwkJCWVsc2U6CisJCQkJbXNnID0gJ1RoZSBUTFNBIHJlY29yZCBpcyBpbnZhbGlkLicKKwkJCQlm b3IgZXJyb3IgaW4gZXJyOgorCQkJCQltc2cgKz0gJ1xuXHQlcycgJSBlcnJvcgorCQkJCXJhaXNl IFJlY29yZFZhbGlkaXR5RXhjZXB0aW9uKG1zZykKKwkJZWxzZToKKwkJCXJldHVybiBUcnVlCisK KwlkZWYgaXNOYW1lVmFsaWQoc2VsZik6CisJCSIiIkNoZWNrIGlmIHRoZSBuYW1lIGlmIGluIHRo ZSBjb3JyZWN0IGZvcm1hdCIiIgorCQlpZiBub3QgcmUubWF0Y2gocideKF9cZHsxLDV9fFwqKVwu Xyh0Y3B8dWRwfHNjdHApXC4oWy1hLXowLTldKlwuKXsyLH0kJywgc2VsZi5uYW1lKToKKwkJCXJl dHVybiBGYWxzZQorCQlyZXR1cm4gVHJ1ZQorCisJZGVmIGdldFByb3RvY29sKHNlbGYpOgorCQki IiJSZXR1cm5zIHRoZSBwcm90b2NvbCBiYXNlZCBvbiB0aGUgbmFtZSIiIgorCQlyZXR1cm4gcmUu c3BsaXQocidcLicsIHNlbGYubmFtZSlbMV1bMTpdCisKKwlkZWYgZ2V0UG9ydChzZWxmKToKKwkJ IiIiUmV0dXJucyB0aGUgcG9ydCBiYXNlZCBvbiB0aGUgbmFtZSIiIgorCQlpZiByZS5zcGxpdChy J1wuJywgc2VsZi5uYW1lKVswXVswXSA9PSAnKic6CisJCQlyZXR1cm4gJyonCisJCWVsc2U6CisJ CQlyZXR1cm4gcmUuc3BsaXQocidcLicsIHNlbGYubmFtZSlbMF1bMTpdCisKKwlkZWYgZ2V0U2hv cnRUZXh0KHNlbGYpOgorCQlyZXR1cm4gIiVkICVkICVkICUuOHMuLi4iICUgKHNlbGYudXNhZ2Us IHNlbGYuc2VsZWN0b3IsIHNlbGYubXR5cGUsIHNlbGYuY2VydCkKKworY2xhc3MgQVJlY29yZDoK KwkiIiJBbiBvYmplY3QgcmVwcmVzZW50aW5nIGFuIEEgUmVjb3JkIChJUHY0IGFkZHJlc3MpIiIi CisJZGVmIF9faW5pdF9fKHNlbGYsIGhvc3RuYW1lLCBhZGRyZXNzKToKKwkJc2VsZi5ycnR5cGUg PSAxCisJCXNlbGYuaG9zdG5hbWUgPSBob3N0bmFtZQorCQlzZWxmLmFkZHJlc3MgPSBhZGRyZXNz CisKKwlkZWYgX19zdHJfXyhzZWxmKToKKwkJcmV0dXJuIHNlbGYuYWRkcmVzcworCisJZGVmIGlz VmFsaWQoc2VsZik6CisJCXRyeToKKwkJCUlQdjRBZGRyZXNzKHNlbGYuYWRkcmVzcykKKwkJCXJl dHVybiBUcnVlCisJCWV4Y2VwdDoKKwkJCXJldHVybiBGYWxzZQorCitjbGFzcyBBQUFBUmVjb3Jk OgorCSIiIkFuIG9iamVjdCByZXByZXNlbnRpbmcgYW4gQUFBQSBSZWNvcmQgKElQdjYgYWRkcmVz cykiIiIKKwlkZWYgX19pbml0X18oc2VsZiwgaG9zdG5hbWUsIGFkZHJlc3MpOgorCQlzZWxmLnJy dHlwZSA9IDI4CisJCXNlbGYuaG9zdG5hbWUgPSBob3N0bmFtZQorCQlzZWxmLmFkZHJlc3MgPSBh ZGRyZXNzCisKKwlkZWYgX19zdHJfXyhzZWxmKToKKwkJcmV0dXJuIHNlbGYuYWRkcmVzcworCisJ ZGVmIGlzVmFsaWQoc2VsZik6CisJCXRyeToKKwkJCUlQdjZBZGRyZXNzKHNlbGYuYWRkcmVzcykK KwkJCXJldHVybiBUcnVlCisJCWV4Y2VwdDoKKwkJCXJldHVybiBGYWxzZQorCisjIEV4Y2VwdGlv bnMKK2NsYXNzIFJlY29yZFZhbGlkaXR5RXhjZXB0aW9uKEV4Y2VwdGlvbik6CisJcGFzcworCitj bGFzcyBJbnNlY3VyZUxvb2t1cEV4Y2VwdGlvbihFeGNlcHRpb24pOgorCXBhc3MKKworY2xhc3Mg RE5TTG9va3VwRXJyb3IoRXhjZXB0aW9uKToKKwlwYXNzCisKK2lmIF9fbmFtZV9fID09ICdfX21h aW5fXyc6CisJaW1wb3J0IGFyZ3BhcnNlCisJIyBjcmVhdGUgdGhlIHBhcnNlcgorCXBhcnNlciA9 IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdDcmVhdGUgYW5kIHZlcmlmeSBU TFNBIHJlY29yZHMuJywgZXBpbG9nPSdGb3IgYnVncy4gc2VlIHRsc2FAbm9oYXRzLmNhJykKKwor CSMgQ2F2ZWF0OiBGb3IgVExTQSB2YWxpZGF0aW9uLCB0aGlzIHByb2dyYW0gY2hhc2VzIHRocm91 Z2ggdGhlIGNlcnRpZmljYXRlIGNoYWluIG9mZmVyZWQgYnkgdGhlIHNlcnZlciwgbm90IGl0cyBs b2NhbCBjZXJ0aWZpY2F0ZXMuJworCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tdmVyaWZ5JywnLXYn LCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdWZXJpZnkgYSBUTFNBIHJlY29yZCwgZXhpdCAw IHdoZW4gYWxsIFRMU0EgcmVjb3JkcyBhcmUgbWF0Y2hlZCwgZXhpdCAyIHdoZW4gYSByZWNvcmQg ZG9lcyBub3QgbWF0Y2ggdGhlIHJlY2VpdmVkIGNlcnRpZmljYXRlLCBleGl0IDEgb24gZXJyb3Iu JykKKworCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tY3JlYXRlJywnLWMnLCBhY3Rpb249J3N0b3Jl X3RydWUnLCBoZWxwPSdDcmVhdGUgYSBUTFNBIHJlY29yZCcpCisJcGFyc2VyLmFkZF9hcmd1bWVu dCgnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0ndGxzYSB2ZXJzaW9uOiAl cyclVkVSU0lPTiwgaGVscD0nc2hvdyB2ZXJzaW9uIGFuZCBleGl0JykKKworCXBhcnNlci5hZGRf YXJndW1lbnQoJy00JywgJy0taXB2NCcsIGRlc3Q9J2lwdjQnLCBhY3Rpb249J3N0b3JlX3RydWUn LGhlbHA9J3VzZSBpcHY0IG5ldHdvcmtpbmcgb25seScpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgn LTYnLCAnLS1pcHY2JywgZGVzdD0naXB2NicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsaGVscD0ndXNl IGlwdjYgbmV0d29ya2luZyBvbmx5JykKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWluc2VjdXJl JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwgaGVscD0nQWxsb3cgdXNlIG9m IG5vbi1kbnNzZWMgc2VjdXJlZCBhbnN3ZXJzJykKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJl c29sdmNvbmYnLCBtZXRhdmFyPScvUEFUSC9UTy9SRVNPTFYuQ09ORicsIGFjdGlvbj0nc3RvcmUn LCBkZWZhdWx0PScvZXRjL3Jlc29sdi5jb25mJywgaGVscD0nVXNlIGEgcmVjdXJzaXZlIHJlc29s dmVyIGxpc3RlZCBpbiBhIHJlc29sdi5jb25mIGZpbGUgKGRlZmF1bHQ6IC9ldGMvcmVzb2x2LmNv bmYpJykKKwlwYXJzZXIuYWRkX2FyZ3VtZW50KCdob3N0JywgbWV0YXZhcj0iaG9zdG5hbWUiKQor CisJcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1wb3J0JywgJy1wJywgYWN0aW9uPSdzdG9yZScsIGRl ZmF1bHQ9JzQ0MycsIGhlbHA9J1RoZSBwb3J0LCBvciBcJypcJyB3aGVyZSBydW5uaW5nIFRMUyBp cyBsb2NhdGVkIChkZWZhdWx0OiAlKGRlZmF1bHQpcykuJykKKwlwYXJzZXIuYWRkX2FyZ3VtZW50 KCctLXN0YXJ0dGxzJywgJy10JywgYWN0aW9uPSdzdG9yZScsIGNob2ljZXM9WydubycsICdzbXRw JywgJ2ltYXAnLCAncG9wMycsICdmdHAnXSwgaGVscD0nUHJvdG9jb2wgbmVlZHMgc3BlY2lhbCBz dGFydCBwcm9jZWR1cmUsIHJlcXVpcmVzIHByb3RvY29sIG5hbWUuJykKKwlwYXJzZXIuYWRkX2Fy Z3VtZW50KCctLXByb3RvY29sJywgYWN0aW9uPSdzdG9yZScsIGNob2ljZXM9Wyd0Y3AnLCd1ZHAn LCdzY3RwJ10sIGRlZmF1bHQ9J3RjcCcsIGhlbHA9J1RoZSBwcm90b2NvbCB0aGUgVExTIHNlcnZp Y2UgaXMgdXNpbmcgKGRlZmF1bHQ6ICUoZGVmYXVsdClzKS4nKQorCXBhcnNlci5hZGRfYXJndW1l bnQoJy0tb25seS1ycicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J09ubHkgdmVyaWZ5IHRo YXQgdGhlIFRMU0EgcmVzb3VyY2UgcmVjb3JkIGlzIGNvcnJlY3QgKGRvIG5vdCBjaGVjayBjZXJ0 aWZpY2F0ZSknKQorCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tcm9vdGtleScsIG1ldGF2YXI9Jy9Q QVRIL1RPL1JPT1QuS0VZJywgYWN0aW9uPSdzdG9yZScsIGhlbHA9J1NwZWNpZnkgZmlsZSBsb2Nh dGlvbiBjb250YWluaW5nIHRoZSBETlNTRUMgcm9vdCBrZXknKQorCisJaWYgb3MucGF0aC5pc2Rp cigiL2V0Yy9wa2kvdGxzL2NlcnRzLyIpOgorCQljYWRpciA9ICIvZXRjL3BraS90bHMvY2VydHMv IgorCWVsaWYgb3MucGF0aC5pc2RpcigiL2V0Yy9zc2wvY2VydHMvIik6CisJCWNhZGlyID0gIi9l dGMvc3NsL2NlcnRzLyIKKwllbHNlOgorCQljYWRpciA9ICIuIgorCQlwcmludCAoIndhcm5pbmc6 IG5vIHN5c3RlbSB3aWRlIENBZGlyIGZvdW5kLCB1c2luZyBjdXJyZW50IGRpcmVjdG9yeSIpCisK KwlwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNhLWNlcnQnLCBtZXRhdmFyPScvUEFUSC9UTy9DRVJU U1RPUkUnLCBhY3Rpb249J3N0b3JlJywgZGVmYXVsdCA9IGNhZGlyLCBoZWxwPSdQYXRoIHRvIGEg Q0EgY2VydGlmaWNhdGUgb3IgYSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgY2VydGlmaWNhdGVz IChkZWZhdWx0OiAlKGRlZmF1bHQpcyknKQorCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tZGVidWcn LCAnLWQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdQcmludCBkZXRhaWxzIHBsdXMgdGhl IHJlc3VsdCBvZiB0aGUgdmFsaWRhdGlvbicpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1xdWll dCcsICctcScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J0lnbm9yZWQgZm9yIGJhY2t3YXJk cyBjb21wYXRpYmlsaXR5JykKKworCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tY2VydGlmaWNhdGUn LCBoZWxwPSdUaGUgY2VydGlmaWNhdGUgdXNlZCBmb3IgdGhlIGhvc3QuIElmIGNlcnRpZmljYXRl IGlzIGVtcHR5LCB0aGUgY2VydGlmaWNhdGUgd2lsbCBiZSBkb3dubG9hZGVkIGZyb20gdGhlIHNl cnZlcicpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vdXRwdXQnLCAnLW8nLCBhY3Rpb249J3N0 b3JlJywgZGVmYXVsdD0ncmZjJywgY2hvaWNlcz1bJ2dlbmVyaWMnLCdyZmMnLCdib3RoJ10sIGhl bHA9J1RoZSB0eXBlIG9mIG91dHB1dC4gR2VuZXJpYyAoUkZDIDM1OTcsIFRZUEU1MiksIFJGQyAo VExTQSkgb3IgYm90aCAoZGVmYXVsdDogJShkZWZhdWx0KXMpLicpCisKKwkjIFVzYWdlIG9mIHRo ZSBjZXJ0aWZpY2F0ZQorCXBhcnNlci5hZGRfYXJndW1lbnQoJy0tdXNhZ2UnLCAnLXUnLCBhY3Rp b249J3N0b3JlJywgdHlwZT1pbnQsIGRlZmF1bHQ9MywgY2hvaWNlcz1bMCwxLDIsM10sIGhlbHA9 J1RoZSBVc2FnZSBvZiB0aGUgQ2VydGlmaWNhdGUgZm9yIEFzc29jaWF0aW9uLiBcJzBcJyBmb3Ig Q0EgW1BLSVgtQ0FdLCBcJzFcJyBmb3IgRW5kIEVudGl0eSBbUEtJWC1FRV0sIFwnMlwnIGZvciB0 cnVzdC1hbmNob3IgW0RBTkUtVEFdLCBcJzNcJyBmb3IgT05MWSBFbmQtRW50aXR5IG1hdGNoIFtE QU5FLUVFXSAoZGVmYXVsdDogJShkZWZhdWx0KXMpLicpCisJcGFyc2VyLmFkZF9hcmd1bWVudCgn LS1zZWxlY3RvcicsICctcycsIGFjdGlvbj0nc3RvcmUnLCB0eXBlPWludCwgZGVmYXVsdD0wLCBj aG9pY2VzPVswLDFdLCBoZWxwPSdUaGUgU2VsZWN0b3IgZm9yIHRoZSBDZXJ0aWZpY2F0ZSBmb3Ig QXNzb2NpYXRpb24uIFwnMFwnIGZvciBGdWxsIENlcnRpZmljYXRlIFtDZXJ0XSwgXCcxXCcgZm9y IFN1YmplY3RQdWJsaWNLZXlJbmZvIFtTUEtJXSAoZGVmYXVsdDogJShkZWZhdWx0KXMpLicpCisJ cGFyc2VyLmFkZF9hcmd1bWVudCgnLS1tdHlwZScsICctbScsIGFjdGlvbj0nc3RvcmUnLCB0eXBl PWludCwgZGVmYXVsdD0xLCBjaG9pY2VzPVswLDEsMl0sIGhlbHA9J1RoZSBNYXRjaGluZyBUeXBl IG9mIHRoZSBDZXJ0aWZpY2F0ZSBmb3IgQXNzb2NpYXRpb24uIFwnMFwnIGZvciBFeGFjdCBtYXRj aCwgXCcxXCcgZm9yIFNIQS0yNTYgaGFzaCwgXCcyXCcgZm9yIFNIQS01MTIgKGRlZmF1bHQ6ICUo ZGVmYXVsdClzKS4nKQorCisJYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworCWlmIGFyZ3Mu cm9vdGtleToKKwkJaWYgb3MucGF0aC5pc2ZpbGUoYXJncy5yb290a2V5KToKKwkJCVJPT1RLRVkg PSBhcmdzLnJvb3RrZXkKKwkJZWxzZToKKwkJCXByaW50KCJpZ25vcmVkIHNwZWNpZmllZCBub24t ZXhpc3Rpbmcgcm9vdGtleSBmaWxlICVzIiVhcmdzLnJvb3RrZXkpCisKKwkjIGNoZWNrIHdoZXRo ZXIgaXQncyBBU0NJSSBvciBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgaW50byBQdW5ueWNvZGUKKwl0 cnk6CisJCWFyZ3MuaG9zdC5lbmNvZGUoJ2FzY2lpJykKKwlleGNlcHQgVW5pY29kZUVuY29kZUVy cm9yOgorCQlhcmdzLmhvc3QgPSBzdHIoYXJncy5ob3N0LmVuY29kZSgnaWRuYScpLCAndXRmLTgn KQorCisJaWYgYXJncy5ob3N0Wy0xXSAhPSAnLic6CisJCWFyZ3MuaG9zdCArPSAnLicKKwlzbmlo b3N0ID0gYXJncy5ob3N0WzA6LTFdCisKKwlpZiBub3QgYXJncy5zdGFydHRsczoKKwkJaWYgYXJn cy5wb3J0ID09ICIyNSIgb3IgYXJncy5wb3J0ID09ICI1ODciOgorCQkJYXJncy5zdGFydHRscyA9 ICJzbXRwIgorCQllbGlmIGFyZ3MucG9ydCA9PSAiMTQzIjoKKwkJCWFyZ3Muc3RhcnR0bHMgPSAi aW1hcCIKKwkJZWxpZiBhcmdzLnBvcnQgPT0gIjExMCI6CisJCQlhcmdzLnN0YXJ0dGxzID0gInBv cDMiCisJCWVsaWYgYXJncy5wb3J0ID09ICIyMSI6CisJCQlhcmdzLnN0YXJ0dGxzID0gImZ0cCIK KwllbGlmIGFyZ3Muc3RhcnR0bHMgPT0gIm5vIjoKKwkJYXJncy5zdGFydHRscyA9IE5vbmUKKwor CWdsb2JhbCByZXNvbHZjb25mCisJaWYgYXJncy5yZXNvbHZjb25mOgorCQlpZiBvcy5wYXRoLmlz ZmlsZShhcmdzLnJlc29sdmNvbmYpOgorCQkJcmVzb2x2Y29uZiA9IGFyZ3MucmVzb2x2Y29uZgor CQllbHNlOgorCQkJcHJpbnQoJyVzIGlzIG5vdCBhIGZpbGUuIFVuYWJsZSB0byB1c2UgaXQgYXMg cmVzb2x2LmNvbmYnICUgYXJncy5yZXNvbHZjb25mLCBmaWxlPXN5cy5zdGRvdXQpCisJCQlzeXMu ZXhpdCgxKQorCWVsc2U6CisJCXJlc29sdmNvbmYgPSBOb25lCisKKwkjIG5vdCBvcGVyYXRpb25z IGFyZSBmdW4hCisJc2VjdXJlID0gbm90IGFyZ3MuaW5zZWN1cmUKKworCWlmIGFyZ3MudmVyaWZ5 OgorCQlyZWNvcmRzID0gZ2V0VExTQShhcmdzLmhvc3QsIGFyZ3MucG9ydCwgYXJncy5wcm90b2Nv bCwgc2VjdXJlKQorCQlpZiBsZW4ocmVjb3JkcykgPT0gMDoKKwkJCXN5cy5leGl0KDEpCisJCXBy ZV9leGl0ID0gMAorCQlmb3IgcmVjb3JkIGluIHJlY29yZHM6CisJCQkjIEZpcnN0LCBjaGVjayBp ZiB0aGUgZmlyc3QgdGhyZWUgZmllbGRzIGhhdmUgY29ycmVjdCB2YWx1ZXMuCisJCQlpZiBhcmdz LmRlYnVnOgorCQkJCXByaW50KCdSZWNlaXZlZCB0aGUgZm9sbG93aW5nIHJlY29yZCBmb3IgbmFt ZSAlczonICUgcmVjb3JkLm5hbWUpCisJCQkJcHJpbnQoJ1x0VXNhZ2U6XHRcdFx0XHQlZCAoJXMp JyAlIChyZWNvcmQudXNhZ2UsIHswOidDQSBDb25zdHJhaW50IFtQS0lYLUNBXScsIDE6J0VuZC1F bnRpdHkgQ29uc3RyYWludCArIGNoYWluIHRvIENBIFtQS0lYLUVFXScsIDI6J1RydXN0IEFuY2hv ciBbREFORS1UQV0nLCAzOidFbmQtRW50aXR5IFtEQU5FLUVFXSd9LmdldChyZWNvcmQudXNhZ2Us ICdJTlZBTElEJykpKQorCQkJCXByaW50KCdcdFNlbGVjdG9yOlx0XHRcdCVkICglcyknICUgKHJl Y29yZC5zZWxlY3RvciwgezA6J0NlcnRpZmljYXRlIFtDZXJ0XScsIDE6J1N1YmplY3RQdWJsaWNL ZXlJbmZvIFtTUEtJXSd9LmdldChyZWNvcmQuc2VsZWN0b3IsICdJTlZBTElEJykpKQorCQkJCXBy aW50KCdcdE1hdGNoaW5nIFR5cGU6XHRcdFx0JWQgKCVzKScgJSAocmVjb3JkLm10eXBlLCB7MDon RnVsbCBDZXJ0aWZpY2F0ZScsIDE6J1NIQS0yNTYnLCAyOidTSEEtNTEyJ30uZ2V0KHJlY29yZC5t dHlwZSwgJ0lOVkFMSUQnKSkpCisJCQkJcHJpbnQoJ1x0Q2VydGlmaWNhdGUgZm9yIEFzc29jaWF0 aW9uOlx0JXMnICUgcmVjb3JkLmNlcnQpCisKKwkJCXRyeToKKwkJCQlyZWNvcmQuaXNWYWxpZChy YWlzZUV4Y2VwdGlvbj1UcnVlKQorCQkJZXhjZXB0IFJlY29yZFZhbGlkaXR5RXhjZXB0aW9uIGFz IGU6CisJCQkJcHJpbnQoJ0Vycm9yOiAlcycgJSBzdHIoZSksIGZpbGU9c3lzLnN0ZGVycikKKwkJ CQljb250aW51ZQorCQkJZWxzZToKKwkJCQlpZiBhcmdzLmRlYnVnOgorCQkJCQlwcmludCgnVGhp cyByZWNvcmQgaXMgdmFsaWQgKHdlbGwtZm9ybWVkKS4nKQorCisJCQlpZiBhcmdzLm9ubHlfcnI6 CisJCQkJIyBHbyB0byB0aGUgbmV4dCByZWNvcmQKKwkJCQljb250aW51ZQorCisJCQkjIFdoZW4g d2UgYXJlIGhlcmUsIFRoZSB1c2VyIGFsc28gd2FudHMgdG8gdmVyaWZ5IHRoZSBjZXJ0aWZpY2F0 ZXMgd2l0aCB0aGUgcmVjb3JkCisJCQlpZiBhcmdzLnByb3RvY29sICE9ICd0Y3AnOgorCQkJCXBy aW50KCdPbmx5IFNTTCBvdmVyIFRDUCBpcyBzdXBwb3J0ZWQgKHNvcnJ5KScsIGZpbGU9c3lzLnN0 ZGVycikKKwkJCQlzeXMuZXhpdCgwKQorCisJCQlpZiBhcmdzLmRlYnVnOgorCQkJCXByaW50KCdB dHRlbXB0aW5nIHRvIHZlcmlmeSB0aGUgcmVjb3JkIHdpdGggdGhlIFRMUyBzZXJ2aWNlLi4uJykK KworCQkJaWYgbm90IGFyZ3MuaXB2NCBhbmQgbm90IGFyZ3MuaXB2NjoKKwkJCQlhZGRyZXNzZXMg PSBnZXRBKGFyZ3MuaG9zdCwgc2VjdXJlPXNlY3VyZSkgKyBnZXRBQUFBKGFyZ3MuaG9zdCwgc2Vj dXJlPXNlY3VyZSkKKwkJCWVsaWYgYXJncy5pcHY0OgorCQkJCWFkZHJlc3NlcyA9IGdldEEoYXJn cy5ob3N0LCBzZWN1cmU9c2VjdXJlKQorCQkJZWxzZToKKwkJCQlhZGRyZXNzZXMgPSBnZXRBQUFB KGFyZ3MuaG9zdCwgc2VjdXJlPXNlY3VyZSkKKworCQkJaWYgYXJncy5jZXJ0aWZpY2F0ZToKKwkJ CQl0cnk6CisJCQkJCWNoYWluLCB2ZXJpZnlfcmVzdWx0ID0gZ2V0TG9jYWxDaGFpbihhcmdzLmNl cnRpZmljYXRlLCBhcmdzLmRlYnVnKQorCQkJCQlwcmVfZXhpdCA9IHZlcmlmeUNoYWluKHJlY29y ZCwgY2hhaW4sIHZlcmlmeV9yZXN1bHQsIHByZV9leGl0LCBUcnVlLCBhcmdzLmNlcnRpZmljYXRl KQorCQkJCWV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKwkJCQkJcHJpbnQoJ0NvdWxkIG5vdCB2ZXJp ZnkgbG9jYWwgY2VydGlmaWNhdGU6ICVzLicgJSBlKQorCQkJCQlzeXMuZXhpdCgwKQorCQkJZm9y IGFkZHJlc3MgaW4gYWRkcmVzc2VzOgorCQkJCWlmIGFyZ3MuZGVidWc6CisJCQkJCXByaW50KCdH b3QgdGhlIGZvbGxvd2luZyBJUDogJXMnICUgc3RyKGFkZHJlc3MpKQorCQkJCSMgV2UgZG8gdGhl IGNlcnRpZmljYXRlIGhhbmRsaW5nIGhlcmUsIGFzIE0yQ3J5cHRvIGtlZXBzIHNlZ2ZhdWx0aW5n IHdoZW4gd2UgZG8gaXQgaW4gYSBtZXRob2QKKwkJCQljdHggPSBTU0wuQ29udGV4dCgpCisJCQkJ aWYgb3MucGF0aC5pc2ZpbGUoYXJncy5jYV9jZXJ0KToKKwkJCQkJaWYgY3R4LmxvYWRfdmVyaWZ5 X2xvY2F0aW9ucyhjYWZpbGU9YXJncy5jYV9jZXJ0KSAhPSAxOiByYWlzZSBFeGNlcHRpb24oJ05v IENBIGNlcnQnKQorCQkJCWVsaWYgb3MucGF0aC5leGlzdHMoYXJncy5jYV9jZXJ0KToKKwkJCQkJ aWYgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYXBhdGg9YXJncy5jYV9jZXJ0KSAhPSAxOiBy YWlzZSBFeGNlcHRpb24oJ05vIENBIGNlcnRzJykKKwkJCQllbHNlOgorCQkJCQlwcmludCgnJXMg aXMgbmVpdGhlciBhIGZpbGUgbm9yIGEgZGlyZWN0b3J5LCB1bmFibGUgdG8gY29udGludWUnICUg YXJncy5jYV9jZXJ0LCBmaWxlPXN5cy5zdGRlcnIpCisJCQkJCXN5cy5leGl0KDEpCisJCQkJIyBE b24ndCBlcnJvciB3aGVuIHRoZSB2ZXJpZmljYXRpb24gZmFpbHMgaW4gdGhlIFNTTCBoYW5kc2hh a2UKKwkJCQljdHguc2V0X3ZlcmlmeShTU0wudmVyaWZ5X25vbmUsIGRlcHRoPTkpCisJCQkJaWYg aXNpbnN0YW5jZShhZGRyZXNzLCBBQUFBUmVjb3JkKToKKwkJCQkJc29jayA9IHNvY2tldC5zb2Nr ZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19TVFJFQU0pCisJCQkJCXNvY2suc2V0c29j a29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKKwkJCQllbHNl OgorCQkJCQlzb2NrID0gTm9uZQorCQkJCWNvbm5lY3Rpb24gPSBTU0wuQ29ubmVjdGlvbihjdHgs IHNvY2s9c29jaykKKwkJCQl0cnk6CisJCQkJCWNvbm5lY3Rpb24uc2V0X3Rsc2V4dF9ob3N0X25h bWUoc25paG9zdCkKKwkJCQkJaWYoYXJncy5kZWJ1Zyk6CisJCQkJCQlwcmludCgnRGlkIHNldCBz ZXJ2ZXJuYW1lICVzJyAlIHNuaWhvc3QpCisJCQkJZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorCQkJ CQlwcmludCgnQ291bGQgbm90IHNldCBTTkkgKG9sZCBNMkNyeXB0byB2ZXJzaW9uPyknKQorCQkJ CWV4Y2VwdDoKKwkJCQkJcHJpbnQoJ0NvdWxkIG5vdCBzZXQgU05JJykKKwkJCQl0cnk6CisJCQkJ CWlmIGFyZ3Muc3RhcnR0bHM6CisJCQkJCQlzc2xTdGFydFRMU0Nvbm5lY3QoY29ubmVjdGlvbiwg KHN0cihhZGRyZXNzKSwgaW50KGFyZ3MucG9ydCkpLCBhcmdzLnN0YXJ0dGxzKQorCQkJCQkJI2Nv bm5lY3Rpb24uY29ubmVjdCgoc3RyKGFkZHJlc3MpLCBpbnQoYXJncy5wb3J0KSksIGFyZ3Muc3Rh cnR0bHMpCisJCQkJCWVsc2U6CisJCQkJCQljb25uZWN0aW9uLmNvbm5lY3QoKHN0cihhZGRyZXNz KSwgaW50KGFyZ3MucG9ydCkpKQorCQkJCSNleGNlcHQgVHlwZUVycm9yOgorCQkJCSMJcHJpbnQg J0Nhbm5vdCBjb25uZWN0IHRvICVzIChvbGQgTTJDcnlwdG8gdmVyc2lvbiBub3Qgc3VwcG9ydGlu ZyBzdGFydCBzY3JpcHQ/KScgJSBhZGRyZXNzCisJCQkJIwljb250aW51ZQorCQkJCWV4Y2VwdCBT U0wuQ2hlY2tlci5Xcm9uZ0hvc3QgYXMgZToKKwkJCQkJIyBUaGUgbmFtZSBvbiB0aGUgcmVtb3Rl IGNlcnQgZG9lc24ndCBtYXRjaCB0aGUgaG9zdG5hbWUgYmVjYXVzZSB3ZSBjb25uZWN0IG9uIElQ LCBub3QgaG9zdG5hbWUgKGFzIHdlIHdhbnQgc2VjdXJlIGxvb2t1cCkKKwkJCQkJcGFzcworCQkJ CWV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKwkJCQkJcHJpbnQoJ0Nhbm5vdCBjb25uZWN0IHRv ICVzOiAlcycgJSAoYWRkcmVzcywgc3RyKGUpKSkKKwkJCQkJY29udGludWUKKwkJCQljaGFpbiA9 IGNvbm5lY3Rpb24uZ2V0X3BlZXJfY2VydF9jaGFpbigpCisJCQkJdmVyaWZ5X3Jlc3VsdCA9IGNv bm5lY3Rpb24uZ2V0X3ZlcmlmeV9yZXN1bHQoKQorCisJCQkJIyBHb29kLCBub3cgbGV0J3MgdmVy aWZ5CisJCQkJcHJlX2V4aXQgPSB2ZXJpZnlDaGFpbihyZWNvcmQsIGNoYWluLCB2ZXJpZnlfcmVz dWx0LCBwcmVfZXhpdCwgRmFsc2UsIGFkZHJlc3MpCisJCQkJIyBDbGVhbnVwLCBqdXN0IGluIGNh c2UKKwkJCQljb25uZWN0aW9uLmNsZWFyKCkKKwkJCQljb25uZWN0aW9uLmNsb3NlKCkKKwkJCQlj dHguY2xvc2UoKQorCisJCQkjIEVORCBmb3IgYWRkcmVzcyBpbiBhZGRyZXNzZXMKKwkJIyBFTkQg Zm9yIHJlY29yZCBpbiByZWNvcmRzCisJCXN5cy5leGl0KHByZV9leGl0KQorCSMgRU5EIGlmIGFy Z3MudmVyaWZ5CisKKwllbHNlOiAjIHdlIHdhbnQgdG8gY3JlYXRlCisJCWNlcnQgPSBOb25lCisJ CWlmIG5vdCBhcmdzLmNlcnRpZmljYXRlOgorCQkJaWYgYXJncy5wcm90b2NvbCAhPSAndGNwJzoK KwkJCQlwcmludCgnT25seSBTU0wgb3ZlciBUQ1AgaXMgc3VwcG9ydGVkIChzb3JyeSknLCBmaWxl PXN5cy5zdGRlcnIpCisJCQkJc3lzLmV4aXQoMSkKKwkJCWlmIGFyZ3MuZGVidWc6CisJCQkJcHJp bnQoJ05vIGNlcnRpZmljYXRlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUsIGF0dGVtcHRp bmcgdG8gcmV0cmlldmUgaXQgZnJvbSB0aGUgc2VydmVyICVzJyAlIChhcmdzLmhvc3QpKQorCQkJ Y29ubmVjdGlvbl9wb3J0ID0gYXJncy5wb3J0CisJCQlpZiBhcmdzLnBvcnQgPT0gJyonOgorCQkJ CXN5cy5zdGRvdXQud3JpdGUoJ1RoZSBwb3J0IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZGxpbmUg aXMgKiwgcGxlYXNlIHNwZWNpZnkgdGhlIHBvcnQgb2YgdGhlIFRMUyBzZXJ2aWNlIG9uICVzICg0 NDMpOiAnICUgYXJncy5ob3N0KQorCQkJCWlucHV0X29rID0gRmFsc2UKKwkJCQl3aGlsZSBub3Qg aW5wdXRfb2s6CisJCQkJCXVzZXJfaW5wdXQgPSBpbnB1dCgpCisJCQkJCWlmIHVzZXJfaW5wdXQg PT0gJyc6CisJCQkJCQljb25uZWN0aW9uX3BvcnQgPSA0NDMKKwkJCQkJCWJyZWFrCisJCQkJCXRy eToKKwkJCQkJCWlmIDEgPD0gaW50KHVzZXJfaW5wdXQpIDw9IDY1NTM1OgorCQkJCQkJCWNvbm5l Y3Rpb25fcG9ydCA9IHVzZXJfaW5wdXQKKwkJCQkJCQlpbnB1dF9vayA9IFRydWUKKwkJCQkJZXhj ZXB0OgorCQkJCQkJc3lzLnN0ZG91dC53cml0ZSgnUG9ydCAlcyBub3QgbnVtZXJpY2FsIG9yIHdp dGhpbiBjb3JyZWN0IHJhbmdlICgxIDw9IHBvcnQgPD0gNjU1MzUpLCB0cnkgYWdhaW4gKGhpdCBl bnRlciBmb3IgZGVmYXVsdCA0NDMpOiAnICUgdXNlcl9pbnB1dCkKKwkJCSMgR2V0IHRoZSBhZGRy ZXNzIHJlY29yZHMgZm9yIHRoZSBob3N0CisJCQl0cnk6CisJCQkJI2FkZHJlc3NlcyA9IGdldEEo YXJncy5ob3N0LCBzZWN1cmU9c2VjdXJlKSArIGdldEFBQUEoYXJncy5ob3N0LCBzZWN1cmU9c2Vj dXJlKQorCQkJCWlmIG5vdCBhcmdzLmlwdjQgYW5kIG5vdCBhcmdzLmlwdjY6CisJCQkJCWFkZHJl c3NlcyA9IGdldEEoYXJncy5ob3N0LCBzZWN1cmU9c2VjdXJlKSArIGdldEFBQUEoYXJncy5ob3N0 LCBzZWN1cmU9c2VjdXJlKQorCisJCQkJZWxpZiBhcmdzLmlwdjQ6CisJCQkJCWFkZHJlc3NlcyA9 IGdldEEoYXJncy5ob3N0LCBzZWN1cmU9c2VjdXJlKQorCQkJCWVsc2U6CisJCQkJCWFkZHJlc3Nl cyA9IGdldEFBQUEoYXJncy5ob3N0LCBzZWN1cmU9c2VjdXJlKQorCisJCQlleGNlcHQgSW5zZWN1 cmVMb29rdXBFeGNlcHRpb24gYXMgZToKKwkJCQlwcmludChzdHIoZSksIGZpbGU9c3lzLnN0ZGVy cikKKwkJCQlzeXMuZXhpdCgxKQorCisJCQlmb3IgYWRkcmVzcyBpbiBhZGRyZXNzZXM6CisJCQkJ aWYgYXJncy5kZWJ1ZzoKKwkJCQkJcHJpbnQoJ0F0dGVtcHRpbmcgdG8gZ2V0IGNlcnRpZmljYXRl IGZyb20gJXMnICUgc3RyKGFkZHJlc3MpKQorCQkJCSMgV2UgZG8gdGhlIGNlcnRpZmljYXRlIGhh bmRsaW5nIGhlcmUsIGFzIE0yQ3J5cHRvIGtlZXBzIHNlZ2ZhdWx0aW5nIHdoZW4gdHJ5IHRvIGRv IHN0dWZmIHdpdGggdGhlIGNlcnQgaWYgd2UgZG9uJ3QKKwkJCQljdHggPSBTU0wuQ29udGV4dCgp CisJCQkJY3R4LnNldF92ZXJpZnkoU1NMLnZlcmlmeV9ub25lLCBkZXB0aD05KQorCQkJCWlmIGlz aW5zdGFuY2UoYWRkcmVzcywgQUFBQVJlY29yZCk6CisJCQkJCXNvY2sgPSBzb2NrZXQuc29ja2V0 KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfU1RSRUFNKQorCQkJCQlzb2NrLnNldHNvY2tv cHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisJCQkJZWxzZToK KwkJCQkJc29jayA9IE5vbmUKKwkJCQljb25uZWN0aW9uID0gU1NMLkNvbm5lY3Rpb24oY3R4LCBz b2NrPXNvY2spCisJCQkJdHJ5OgorCQkJCQljb25uZWN0aW9uLnNldF90bHNleHRfaG9zdF9uYW1l KHNuaWhvc3QpCisJCQkJCWlmKGFyZ3MuZGVidWcpOgorCQkJCQkJcHJpbnQoJ0RpZCBzZXQgc2Vy dmVybmFtZSAlcycgJSBzbmlob3N0KQorCQkJCWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKwkJCQkJ cHJpbnQoJ0NvdWxkIG5vdCBzZXQgU05JIChvbGQgTTJDcnlwdG8gdmVyc2lvbj8pJykKKwkJCQll eGNlcHQ6CisJCQkJCXByaW50KCdDb3VsZCBub3Qgc2V0IFNOSScpCisJCQkJdHJ5OgorCQkJCQlp ZiBhcmdzLnN0YXJ0dGxzOgorCQkJCQkJc3NsU3RhcnRUTFNDb25uZWN0KGNvbm5lY3Rpb24sIChz dHIoYWRkcmVzcyksIGludChjb25uZWN0aW9uX3BvcnQpKSwgYXJncy5zdGFydHRscykKKwkJCQkJ CSNjb25uZWN0aW9uLmNvbm5lY3QoKHN0cihhZGRyZXNzKSwgaW50KGNvbm5lY3Rpb25fcG9ydCkp LCBhcmdzLnN0YXJ0dGxzKQorCQkJCQllbHNlOgorCQkJCQkJY29ubmVjdGlvbi5jb25uZWN0KChz dHIoYWRkcmVzcyksIGludChjb25uZWN0aW9uX3BvcnQpKSkKKwkJCQkjZXhjZXB0IFR5cGVFcnJv cjoKKwkJCQkjCXByaW50ICdDYW5ub3QgY29ubmVjdCB0byAlcyAob2xkIE0yQ3J5cHRvIHZlcnNp b24gbm90IHN1cHBvcnRpbmcgc3RhcnQgc2NyaXB0PyknICUgYWRkcmVzcworCQkJCSMJY29udGlu dWUKKwkJCQlleGNlcHQgU1NMLkNoZWNrZXIuV3JvbmdIb3N0OgorCQkJCQlwYXNzCisJCQkJZXhj ZXB0IHNvY2tldC5lcnJvciBhcyBlOgorCQkJCQlwcmludCgnQ2Fubm90IGNvbm5lY3QgdG8gJXM6 ICVzJyAlIChhZGRyZXNzLCBzdHIoZSkpKQorCQkJCQljb250aW51ZQorCisJCQkJY2hhaW4gPSBj b25uZWN0aW9uLmdldF9wZWVyX2NlcnRfY2hhaW4oKQorCQkJCWlmIG5vdCB2ZXJpZnlDZXJ0TmFt ZVdpdGhIb3N0TmFtZShjZXJ0PWNoYWluWzBdLCBob3N0bmFtZT1zdHIoYXJncy5ob3N0KSwgd2l0 aF9tc2c9YXJncy5kZWJ1Zyk6CisJCQkJCXByaW50KCdXQVJOSU5HOiBDZXJ0aWZpY2F0ZSBuYW1l IGRvZXMgbm90IG1hdGNoIHRoZSBob3N0bmFtZScpCisJCQkJZ2VuUmVjb3JkcyhhcmdzLmhvc3Qs IGFkZHJlc3MsIGFyZ3MucHJvdG9jb2wsIGFyZ3MucG9ydCwgY2hhaW4sIGFyZ3Mub3V0cHV0LCBh cmdzLnVzYWdlLCBhcmdzLnNlbGVjdG9yLCBhcmdzLm10eXBlKQorCQkJCSMgQ2xlYW51cCB0aGUg Y29ubmVjdGlvbiBhbmQgY29udGV4dAorCQkJCWNvbm5lY3Rpb24uY2xlYXIoKQorCQkJCWNvbm5l Y3Rpb24uY2xvc2UoKQorCQkJCWN0eC5jbG9zZSgpCisKKwkJZWxzZTogIyBQYXNzIHRoZSBwYXRo IHRvIHRoZSBjZXJ0aWZpY2F0ZSB0byB0aGUgZ2VuVExTQSBmdW5jdGlvbgorCQkJdHJ5OgorCQkJ CWNoYWluLCB2ZXJpZnlfcmVzdWx0ID0gZ2V0TG9jYWxDaGFpbihhcmdzLmNlcnRpZmljYXRlLCBh cmdzLmRlYnVnKQorCQkJCWlmIGFyZ3MudXNhZ2UgPT0gMCBvciBhcmdzLnVzYWdlID09IDEgYW5k IG5vdCB2ZXJpZnlfcmVzdWx0OgorCQkJCQlwcmludCgnRm9sbG93aW5nIGVycm9yIHdhcyByYWlz ZWQgZHVyaW5nIFBLSVggdmFsaWRhdGlvbjogJXMnICUgdmVyaWZ5X3Jlc3VsdCkKKwkJCQlnZW5S ZWNvcmRzKGFyZ3MuaG9zdCwgYXJncy5ob3N0LCBhcmdzLnByb3RvY29sLCBhcmdzLnBvcnQsIGNo YWluLCBhcmdzLm91dHB1dCwgYXJncy51c2FnZSwgYXJncy5zZWxlY3RvciwgYXJncy5tdHlwZSkK KwkJCWV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKwkJCQlwcmludCgnQ291bGQgbm90IHZlcmlmeSBs b2NhbCBjZXJ0aWZpY2F0ZTogJXMuJyAlIGUpCg==