From: Dyre Tjeldvoll Date: November 19 2012 1:01pm Subject: bzr push into mysql-5.5-cluster-7.2 branch (Dyre.Tjeldvoll:4109 to 4110) List-Archive: http://lists.mysql.com/commits/145327 Message-Id: <20121119130150.1817.83825.4110@khepri17.no.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 IDQxMTAgRHlyZSBUamVsZHZvbGwJMjAxMi0xMS0xOQogICAgICBJbmNsdWRlIHVuaXR0ZXN0MiBp biB0c3QgZGlyIHNvIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGluIFBCw4MKCiAgICBhZGRlZDoKICAg ICAgc3RvcmFnZS9uZGIvbWNjL3RzdC91bml0dGVzdDIvCiAgICAgIHN0b3JhZ2UvbmRiL21jYy90 c3QvdW5pdHRlc3QyL19faW5pdF9fLnB5CiAgICAgIHN0b3JhZ2UvbmRiL21jYy90c3QvdW5pdHRl c3QyL19fbWFpbl9fLnB5CiAgICAgIHN0b3JhZ2UvbmRiL21jYy90c3QvdW5pdHRlc3QyL2Nhc2Uu cHkKICAgICAgc3RvcmFnZS9uZGIvbWNjL3RzdC91bml0dGVzdDIvY29sbGVjdG9yLnB5CiAgICAg IHN0b3JhZ2UvbmRiL21jYy90c3QvdW5pdHRlc3QyL2NvbXBhdGliaWxpdHkucHkKICAgICAgc3Rv cmFnZS9uZGIvbWNjL3RzdC91bml0dGVzdDIvbG9hZGVyLnB5CiAgICAgIHN0b3JhZ2UvbmRiL21j Yy90c3QvdW5pdHRlc3QyL21haW4ucHkKICAgICAgc3RvcmFnZS9uZGIvbWNjL3RzdC91bml0dGVz dDIvcmVzdWx0LnB5CiAgICAgIHN0b3JhZ2UvbmRiL21jYy90c3QvdW5pdHRlc3QyL3J1bm5lci5w eQogICAgICBzdG9yYWdlL25kYi9tY2MvdHN0L3VuaXR0ZXN0Mi9zaWduYWxzLnB5CiAgICAgIHN0 b3JhZ2UvbmRiL21jYy90c3QvdW5pdHRlc3QyL3N1aXRlLnB5CiAgICAgIHN0b3JhZ2UvbmRiL21j Yy90c3QvdW5pdHRlc3QyL3V0aWwucHkKICAgIG1vZGlmaWVkOgogICAgICBzdG9yYWdlL25kYi9t Y2MvdHN0L3RzdF9tYWluLnB5CiA0MTA5IER5cmUgVGplbGR2b2xsCTIwMTItMTEtMTUKICAgICAg UHJlZmVyIHJ1bm5pbmcgdW5pdCB0ZXN0cyB3aXRoIGJ1bmRsZWQgcHl0aG9uIGlmIGF2YWlsYWJs ZQoKICAgIG1vZGlmaWVkOgogICAgICBteXNxbC10ZXN0L3N1aXRlL25kYi90L21jY19weXVuaXQu dGVzdAo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvbWNjL3RzdC90c3RfbWFpbi5weScK LS0tIGEvc3RvcmFnZS9uZGIvbWNjL3RzdC90c3RfbWFpbi5weQkyMDEyLTExLTA5IDE0OjQyOjMy ICswMDAwCisrKyBiL3N0b3JhZ2UvbmRiL21jYy90c3QvdHN0X21haW4ucHkJMjAxMi0xMS0xOSAx MzowMDo0NCArMDAwMApAQCAtMjYsOSArMjYsOSBAQCBzeXMucGF0aCArPSBbJy4uJywgJy91c3Iv bG9jYWwvbGliL2J6ci0yCiAKIGltcG9ydCBsb2dnaW5nCiBpZiBweW1pbm9yIDwgNzoKLSAgICBz eXMucGF0aCArPSBbJy9leHBvcnQvaG9tZS90bXAvc3JjL3B5dGhvbi91bml0dGVzdDItMC41LjEn LCAnL2hvbWUvZHRqZWxkdm8vdW5pdHRlc3QyLTAuNS4xJyBdCi0gICAgbG9nZ2luZy5kZWJ1Zygn UnVubmluZyB3aXRoIFB5dGhvbiB2ZXJzaW9uICVzJywgCi0gICAgICAgICAgICAgICAgICBzdHIo cGxhdGZvcm0ucHl0aG9uX3ZlcnNpb25fdHVwbGUoKSkpCisjICAgIHN5cy5wYXRoICs9IFsnL2V4 cG9ydC9ob21lL3RtcC9zcmMvcHl0aG9uL3VuaXR0ZXN0Mi0wLjUuMScsICcvaG9tZS9kdGplbGR2 by91bml0dGVzdDItMC41LjEnIF0KKyAgICBwcmludCgnUnVubmluZyB3aXRoIFB5dGhvbiB2ZXJz aW9uICVzJywgCisgICAgICAgICAgc3RyKHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uX3R1cGxlKCkp KQogICAgIGltcG9ydCB1bml0dGVzdDIgYXMgdW5pdHRlc3QKIGVsc2U6CiAgICAgaW1wb3J0IHVu aXR0ZXN0Cgo9PT0gYWRkZWQgZGlyZWN0b3J5ICdzdG9yYWdlL25kYi9tY2MvdHN0L3VuaXR0ZXN0 MicKPT09IGFkZGVkIGZpbGUgJ3N0b3JhZ2UvbmRiL21jYy90c3QvdW5pdHRlc3QyL19faW5pdF9f LnB5JwotLS0gYS9zdG9yYWdlL25kYi9tY2MvdHN0L3VuaXR0ZXN0Mi9fX2luaXRfXy5weQkxOTcw LTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBiL3N0b3JhZ2UvbmRiL21jYy90c3QvdW5pdHRlc3Qy L19faW5pdF9fLnB5CTIwMTItMTEtMTkgMTM6MDA6NDQgKzAwMDAKQEAgLTAsMCArMSw2OCBAQAor IiIiCit1bml0dGVzdDIKKwordW5pdHRlc3QyIGlzIGEgYmFja3BvcnQgb2YgdGhlIG5ldyBmZWF0 dXJlcyBhZGRlZCB0byB0aGUgdW5pdHRlc3QgdGVzdGluZworZnJhbWV3b3JrIGluIFB5dGhvbiAy LjcuIEl0IGlzIHRlc3RlZCB0byBydW4gb24gUHl0aG9uIDIuNCAtIDIuNi4KKworVG8gdXNlIHVu aXR0ZXN0MiBpbnN0ZWFkIG9mIHVuaXR0ZXN0IHNpbXBseSByZXBsYWNlIGBgaW1wb3J0IHVuaXR0 ZXN0YGAgd2l0aAorYGBpbXBvcnQgdW5pdHRlc3QyYGAuCisKKworQ29weXJpZ2h0IChjKSAxOTk5 LTIwMDMgU3RldmUgUHVyY2VsbAorQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgUHl0aG9uIFNvZnR3 YXJlIEZvdW5kYXRpb24KK1RoaXMgbW9kdWxlIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgbWF5 IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBh cyBQeXRob24gaXRzZWxmLCBzbyBsb25nIGFzIHRoaXMgY29weXJpZ2h0IG1lc3NhZ2UKK2FuZCBk aXNjbGFpbWVyIGFyZSByZXRhaW5lZCBpbiB0aGVpciBvcmlnaW5hbCBmb3JtLgorCitJTiBOTyBF VkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SIERJUkVDVCwg SU5ESVJFQ1QsCitTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg QVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRgorVEhJUyBDT0RFLCBFVkVOIElGIFRIRSBBVVRIT1Ig SEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFLgorCitU SEUgQVVUSE9SIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBDT0RF IFBST1ZJREVEIEhFUkVVTkRFUiBJUyBPTiBBTiAiQVMgSVMiIEJBU0lTLAorQU5EIFRIRVJFIElT IE5PIE9CTElHQVRJT04gV0hBVFNPRVZFUiBUTyBQUk9WSURFIE1BSU5URU5BTkNFLAorU1VQUE9S VCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgorIiIiCisKK19fYWxs X18gPSBbJ1Rlc3RSZXN1bHQnLCAnVGVzdENhc2UnLCAnVGVzdFN1aXRlJywKKyAgICAgICAgICAg J1RleHRUZXN0UnVubmVyJywgJ1Rlc3RMb2FkZXInLCAnRnVuY3Rpb25UZXN0Q2FzZScsICdtYWlu JywKKyAgICAgICAgICAgJ2RlZmF1bHRUZXN0TG9hZGVyJywgJ1NraXBUZXN0JywgJ3NraXAnLCAn c2tpcElmJywgJ3NraXBVbmxlc3MnLAorICAgICAgICAgICAnZXhwZWN0ZWRGYWlsdXJlJywgJ1Rl eHRUZXN0UmVzdWx0JywgJ19fdmVyc2lvbl9fJywgJ2NvbGxlY3RvciddCisKK19fdmVyc2lvbl9f ID0gJzAuNS4xJworCisjIEV4cG9zZSBvYnNvbGV0ZSBmdW5jdGlvbnMgZm9yIGJhY2t3YXJkcyBj b21wYXRpYmlsaXR5CitfX2FsbF9fLmV4dGVuZChbJ2dldFRlc3RDYXNlTmFtZXMnLCAnbWFrZVN1 aXRlJywgJ2ZpbmRUZXN0Q2FzZXMnXSkKKworCitmcm9tIHVuaXR0ZXN0Mi5jb2xsZWN0b3IgaW1w b3J0IGNvbGxlY3RvcgorZnJvbSB1bml0dGVzdDIucmVzdWx0IGltcG9ydCBUZXN0UmVzdWx0Citm cm9tIHVuaXR0ZXN0Mi5jYXNlIGltcG9ydCAoCisgICAgVGVzdENhc2UsIEZ1bmN0aW9uVGVzdENh c2UsIFNraXBUZXN0LCBza2lwLCBza2lwSWYsCisgICAgc2tpcFVubGVzcywgZXhwZWN0ZWRGYWls dXJlCispCitmcm9tIHVuaXR0ZXN0Mi5zdWl0ZSBpbXBvcnQgQmFzZVRlc3RTdWl0ZSwgVGVzdFN1 aXRlCitmcm9tIHVuaXR0ZXN0Mi5sb2FkZXIgaW1wb3J0ICgKKyAgICBUZXN0TG9hZGVyLCBkZWZh dWx0VGVzdExvYWRlciwgbWFrZVN1aXRlLCBnZXRUZXN0Q2FzZU5hbWVzLAorICAgIGZpbmRUZXN0 Q2FzZXMKKykKK2Zyb20gdW5pdHRlc3QyLm1haW4gaW1wb3J0IFRlc3RQcm9ncmFtLCBtYWluLCBt YWluXworZnJvbSB1bml0dGVzdDIucnVubmVyIGltcG9ydCBUZXh0VGVzdFJ1bm5lciwgVGV4dFRl c3RSZXN1bHQKKwordHJ5OgorICAgIGZyb20gdW5pdHRlc3QyLnNpZ25hbHMgaW1wb3J0ICgKKyAg ICAgICAgaW5zdGFsbEhhbmRsZXIsIHJlZ2lzdGVyUmVzdWx0LCByZW1vdmVSZXN1bHQsIHJlbW92 ZUhhbmRsZXIKKyAgICApCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyBDb21wYXRpYmlsaXR5 IHdpdGggcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZSB0aGUgc2lnbmFsIG1vZHVsZQorICAgIHBh c3MKK2Vsc2U6CisgICAgX19hbGxfXy5leHRlbmQoWydpbnN0YWxsSGFuZGxlcicsICdyZWdpc3Rl clJlc3VsdCcsICdyZW1vdmVSZXN1bHQnLCAKKyAgICAgICAgICAgICAgICAgICAgJ3JlbW92ZUhh bmRsZXInXSkKKworIyBkZXByZWNhdGVkCitfVGV4dFRlc3RSZXN1bHQgPSBUZXh0VGVzdFJlc3Vs dAorCitfX3VuaXR0ZXN0ID0gVHJ1ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKCj09PSBh ZGRlZCBmaWxlICdzdG9yYWdlL25kYi9tY2MvdHN0L3VuaXR0ZXN0Mi9fX21haW5fXy5weScKLS0t IGEvc3RvcmFnZS9uZGIvbWNjL3RzdC91bml0dGVzdDIvX19tYWluX18ucHkJMTk3MC0wMS0wMSAw MDowMDowMCArMDAwMAorKysgYi9zdG9yYWdlL25kYi9tY2MvdHN0L3VuaXR0ZXN0Mi9fX21haW5f Xy5weQkyMDEyLTExLTE5IDEzOjAwOjQ0ICswMDAwCkBAIC0wLDAgKzEsMTAgQEAKKyIiIk1haW4g ZW50cnkgcG9pbnQiIiIKKworaW1wb3J0IHN5cworaWYgc3lzLmFyZ3ZbMF0uZW5kc3dpdGgoIl9f bWFpbl9fLnB5Iik6CisgICAgc3lzLmFyZ3ZbMF0gPSAidW5pdHRlc3QyIgorCitfX3VuaXR0ZXN0 ID0gVHJ1ZQorCitmcm9tIHVuaXR0ZXN0Mi5tYWluIGltcG9ydCBtYWluXworbWFpbl8oKQoKPT09 IGFkZGVkIGZpbGUgJ3N0b3JhZ2UvbmRiL21jYy90c3QvdW5pdHRlc3QyL2Nhc2UucHknCi0tLSBh L3N0b3JhZ2UvbmRiL21jYy90c3QvdW5pdHRlc3QyL2Nhc2UucHkJMTk3MC0wMS0wMSAwMDowMDow MCArMDAwMAorKysgYi9zdG9yYWdlL25kYi9tY2MvdHN0L3VuaXR0ZXN0Mi9jYXNlLnB5CTIwMTIt MTEtMTkgMTM6MDA6NDQgKzAwMDAKQEAgLTAsMCArMSwxMDg0IEBACisiIiJUZXN0IGNhc2UgaW1w bGVtZW50YXRpb24iIiIKKworaW1wb3J0IHN5cworaW1wb3J0IGRpZmZsaWIKK2ltcG9ydCBwcHJp bnQKK2ltcG9ydCByZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKKworZnJvbSB1 bml0dGVzdDIgaW1wb3J0IHJlc3VsdAorZnJvbSB1bml0dGVzdDIudXRpbCBpbXBvcnQgKAorICAg IHNhZmVfcmVwciwgc2FmZV9zdHIsIHN0cmNsYXNzLAorICAgIHVub3JkZXJhYmxlX2xpc3RfZGlm ZmVyZW5jZQorKQorCitmcm9tIHVuaXR0ZXN0Mi5jb21wYXRpYmlsaXR5IGltcG9ydCB3cmFwcwor CitfX3VuaXR0ZXN0ID0gVHJ1ZQorCisKK0RJRkZfT01JVFRFRCA9ICgnXG5EaWZmIGlzICVzIGNo YXJhY3RlcnMgbG9uZy4gJworICAgICAgICAgICAgICAgICAnU2V0IHNlbGYubWF4RGlmZiB0byBO b25lIHRvIHNlZSBpdC4nKQorCitjbGFzcyBTa2lwVGVzdChFeGNlcHRpb24pOgorICAgICIiIgor ICAgIFJhaXNlIHRoaXMgZXhjZXB0aW9uIGluIGEgdGVzdCB0byBza2lwIGl0LgorCisgICAgVXN1 YWxseSB5b3UgY2FuIHVzZSBUZXN0UmVzdWx0LnNraXAoKSBvciBvbmUgb2YgdGhlIHNraXBwaW5n IGRlY29yYXRvcnMKKyAgICBpbnN0ZWFkIG9mIHJhaXNpbmcgdGhpcyBkaXJlY3RseS4KKyAgICAi IiIKKworY2xhc3MgX0V4cGVjdGVkRmFpbHVyZShFeGNlcHRpb24pOgorICAgICIiIgorICAgIFJh aXNlIHRoaXMgd2hlbiBhIHRlc3QgaXMgZXhwZWN0ZWQgdG8gZmFpbC4KKworICAgIFRoaXMgaXMg YW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNl bGYsIGV4Y19pbmZvKToKKyAgICAgICAgIyBjYW4ndCB1c2Ugc3VwZXIgYmVjYXVzZSBQeXRob24g Mi40IGV4Y2VwdGlvbnMgYXJlIG9sZCBzdHlsZQorICAgICAgICBFeGNlcHRpb24uX19pbml0X18o c2VsZikKKyAgICAgICAgc2VsZi5leGNfaW5mbyA9IGV4Y19pbmZvCisKK2NsYXNzIF9VbmV4cGVj dGVkU3VjY2VzcyhFeGNlcHRpb24pOgorICAgICIiIgorICAgIFRoZSB0ZXN0IHdhcyBzdXBwb3Nl ZCB0byBmYWlsLCBidXQgaXQgZGlkbid0IQorICAgICIiIgorCitkZWYgX2lkKG9iaik6CisgICAg cmV0dXJuIG9iagorCitkZWYgc2tpcChyZWFzb24pOgorICAgICIiIgorICAgIFVuY29uZGl0aW9u YWxseSBza2lwIGEgdGVzdC4KKyAgICAiIiIKKyAgICBkZWYgZGVjb3JhdG9yKHRlc3RfaXRlbSk6 CisgICAgICAgIGlmIG5vdCAoaXNpbnN0YW5jZSh0ZXN0X2l0ZW0sIHR5cGUpIGFuZCBpc3N1YmNs YXNzKHRlc3RfaXRlbSwgVGVzdENhc2UpKToKKyAgICAgICAgICAgIEB3cmFwcyh0ZXN0X2l0ZW0p CisgICAgICAgICAgICBkZWYgc2tpcF93cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAg ICAgICAgICAgcmFpc2UgU2tpcFRlc3QocmVhc29uKQorICAgICAgICAgICAgdGVzdF9pdGVtID0g c2tpcF93cmFwcGVyCisgICAgICAgIAorICAgICAgICB0ZXN0X2l0ZW0uX191bml0dGVzdF9za2lw X18gPSBUcnVlCisgICAgICAgIHRlc3RfaXRlbS5fX3VuaXR0ZXN0X3NraXBfd2h5X18gPSByZWFz b24KKyAgICAgICAgcmV0dXJuIHRlc3RfaXRlbQorICAgIHJldHVybiBkZWNvcmF0b3IKKworZGVm IHNraXBJZihjb25kaXRpb24sIHJlYXNvbik6CisgICAgIiIiCisgICAgU2tpcCBhIHRlc3QgaWYg dGhlIGNvbmRpdGlvbiBpcyB0cnVlLgorICAgICIiIgorICAgIGlmIGNvbmRpdGlvbjoKKyAgICAg ICAgcmV0dXJuIHNraXAocmVhc29uKQorICAgIHJldHVybiBfaWQKKworZGVmIHNraXBVbmxlc3Mo Y29uZGl0aW9uLCByZWFzb24pOgorICAgICIiIgorICAgIFNraXAgYSB0ZXN0IHVubGVzcyB0aGUg Y29uZGl0aW9uIGlzIHRydWUuCisgICAgIiIiCisgICAgaWYgbm90IGNvbmRpdGlvbjoKKyAgICAg ICAgcmV0dXJuIHNraXAocmVhc29uKQorICAgIHJldHVybiBfaWQKKworCitkZWYgZXhwZWN0ZWRG YWlsdXJlKGZ1bmMpOgorICAgIEB3cmFwcyhmdW5jKQorICAgIGRlZiB3cmFwcGVyKCphcmdzLCAq Kmt3YXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdz KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmFpc2UgX0V4cGVjdGVk RmFpbHVyZShzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgcmFpc2UgX1VuZXhwZWN0ZWRTdWNjZXNz CisgICAgcmV0dXJuIHdyYXBwZXIKKworCitjbGFzcyBfQXNzZXJ0UmFpc2VzQ29udGV4dChvYmpl Y3QpOgorICAgICIiIkEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gaW1wbGVtZW50IFRlc3RDYXNl LmFzc2VydFJhaXNlcyogbWV0aG9kcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHBl Y3RlZCwgdGVzdF9jYXNlLCBleHBlY3RlZF9yZWdleHA9Tm9uZSk6CisgICAgICAgIHNlbGYuZXhw ZWN0ZWQgPSBleHBlY3RlZAorICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24gPSB0ZXN0X2Nh c2UuZmFpbHVyZUV4Y2VwdGlvbgorICAgICAgICBzZWxmLmV4cGVjdGVkX3JlZ2V4cCA9IGV4cGVj dGVkX3JlZ2V4cAorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl bGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0Yik6Cisg ICAgICAgIGlmIGV4Y190eXBlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg ICAgICAgZXhjX25hbWUgPSBzZWxmLmV4cGVjdGVkLl9fbmFtZV9fCisgICAgICAgICAgICBleGNl cHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjX25hbWUgPSBzdHIoc2VsZi5l eHBlY3RlZCkKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbigKKyAgICAg ICAgICAgICAgICAiJXMgbm90IHJhaXNlZCIgJSAoZXhjX25hbWUsKSkKKyAgICAgICAgaWYgbm90 IGlzc3ViY2xhc3MoZXhjX3R5cGUsIHNlbGYuZXhwZWN0ZWQpOgorICAgICAgICAgICAgIyBsZXQg dW5leHBlY3RlZCBleGNlcHRpb25zIHBhc3MgdGhyb3VnaAorICAgICAgICAgICAgcmV0dXJuIEZh bHNlCisgICAgICAgIHNlbGYuZXhjZXB0aW9uID0gZXhjX3ZhbHVlICMgc3RvcmUgZm9yIGxhdGVy IHJldHJpZXZhbAorICAgICAgICBpZiBzZWxmLmV4cGVjdGVkX3JlZ2V4cCBpcyBOb25lOgorICAg ICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBleHBlY3RlZF9yZWdleHAgPSBzZWxmLmV4 cGVjdGVkX3JlZ2V4cAorICAgICAgICBpZiBpc2luc3RhbmNlKGV4cGVjdGVkX3JlZ2V4cCwgYmFz ZXN0cmluZyk6CisgICAgICAgICAgICBleHBlY3RlZF9yZWdleHAgPSByZS5jb21waWxlKGV4cGVj dGVkX3JlZ2V4cCkKKyAgICAgICAgaWYgbm90IGV4cGVjdGVkX3JlZ2V4cC5zZWFyY2goc3RyKGV4 Y192YWx1ZSkpOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKCciJXMi IGRvZXMgbm90IG1hdGNoICIlcyInICUKKyAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZF9y ZWdleHAucGF0dGVybiwgc3RyKGV4Y192YWx1ZSkpKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisK K2NsYXNzIF9UeXBlRXF1YWxpdHlEaWN0KG9iamVjdCk6CisgICAgCisgICAgZGVmIF9faW5pdF9f KHNlbGYsIHRlc3RjYXNlKToKKyAgICAgICAgc2VsZi50ZXN0Y2FzZSA9IHRlc3RjYXNlCisgICAg ICAgIHNlbGYuX3N0b3JlID0ge30KKyAgICAKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5 LCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3N0b3JlW2tleV0gPSB2YWx1ZQorICAgIAorICAgIGRl ZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuX3N0b3JlW2tl eV0KKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAg ICByZXR1cm4gZ2V0YXR0cihzZWxmLnRlc3RjYXNlLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHZh bHVlCisgICAgCisgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAg IGlmIGtleSBpbiBzZWxmLl9zdG9yZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmW2tleV0KKyAg ICAgICAgcmV0dXJuIGRlZmF1bHQKKworCitjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2Fz ZSk6CisgICAgIiIiQSBjbGFzcyB3aG9zZSBpbnN0YW5jZXMgYXJlIHNpbmdsZSB0ZXN0IGNhc2Vz LgorCisgICAgQnkgZGVmYXVsdCwgdGhlIHRlc3QgY29kZSBpdHNlbGYgc2hvdWxkIGJlIHBsYWNl ZCBpbiBhIG1ldGhvZCBuYW1lZAorICAgICdydW5UZXN0Jy4KKworICAgIElmIHRoZSBmaXh0dXJl IG1heSBiZSB1c2VkIGZvciBtYW55IHRlc3QgY2FzZXMsIGNyZWF0ZSBhcworICAgIG1hbnkgdGVz dCBtZXRob2RzIGFzIGFyZSBuZWVkZWQuIFdoZW4gaW5zdGFudGlhdGluZyBzdWNoIGEgVGVzdENh c2UKKyAgICBzdWJjbGFzcywgc3BlY2lmeSBpbiB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzIHRo ZSBuYW1lIG9mIHRoZSB0ZXN0IG1ldGhvZAorICAgIHRoYXQgdGhlIGluc3RhbmNlIGlzIHRvIGV4 ZWN1dGUuCisKKyAgICBUZXN0IGF1dGhvcnMgc2hvdWxkIHN1YmNsYXNzIFRlc3RDYXNlIGZvciB0 aGVpciBvd24gdGVzdHMuIENvbnN0cnVjdGlvbgorICAgIGFuZCBkZWNvbnN0cnVjdGlvbiBvZiB0 aGUgdGVzdCdzIGVudmlyb25tZW50ICgnZml4dHVyZScpIGNhbiBiZQorICAgIGltcGxlbWVudGVk IGJ5IG92ZXJyaWRpbmcgdGhlICdzZXRVcCcgYW5kICd0ZWFyRG93bicgbWV0aG9kcyByZXNwZWN0 aXZlbHkuCisKKyAgICBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gb3ZlcnJpZGUgdGhlIF9faW5pdF9f IG1ldGhvZCwgdGhlIGJhc2UgY2xhc3MKKyAgICBfX2luaXRfXyBtZXRob2QgbXVzdCBhbHdheXMg YmUgY2FsbGVkLiBJdCBpcyBpbXBvcnRhbnQgdGhhdCBzdWJjbGFzc2VzCisgICAgc2hvdWxkIG5v dCBjaGFuZ2UgdGhlIHNpZ25hdHVyZSBvZiB0aGVpciBfX2luaXRfXyBtZXRob2QsIHNpbmNlIGlu c3RhbmNlcworICAgIG9mIHRoZSBjbGFzc2VzIGFyZSBpbnN0YW50aWF0ZWQgYXV0b21hdGljYWxs eSBieSBwYXJ0cyBvZiB0aGUgZnJhbWV3b3JrCisgICAgaW4gb3JkZXIgdG8gYmUgcnVuLgorICAg ICIiIgorCisgICAgIyBUaGlzIGF0dHJpYnV0ZSBkZXRlcm1pbmVzIHdoaWNoIGV4Y2VwdGlvbiB3 aWxsIGJlIHJhaXNlZCB3aGVuCisgICAgIyB0aGUgaW5zdGFuY2UncyBhc3NlcnRpb24gbWV0aG9k cyBmYWlsOyB0ZXN0IG1ldGhvZHMgcmFpc2luZyB0aGlzCisgICAgIyBleGNlcHRpb24gd2lsbCBi ZSBkZWVtZWQgdG8gaGF2ZSAnZmFpbGVkJyByYXRoZXIgdGhhbiAnZXJyb3JlZCcKKworICAgIGZh aWx1cmVFeGNlcHRpb24gPSBBc3NlcnRpb25FcnJvcgorCisgICAgIyBUaGlzIGF0dHJpYnV0ZSBz ZXRzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGRpZmYgaW4gZmFpbHVyZSBtZXNzYWdlcworICAg ICMgYnkgYXNzZXJ0IG1ldGhvZHMgdXNpbmcgZGlmZmxpYi4gSXQgaXMgbG9va2VkIHVwIGFzIGFu IGluc3RhbmNlIGF0dHJpYnV0ZQorICAgICMgc28gY2FuIGJlIGNvbmZpZ3VyZWQgYnkgaW5kaXZp ZHVhbCB0ZXN0cyBpZiByZXF1aXJlZC4KKworICAgIG1heERpZmYgPSA4MCo4CisKKyAgICAjIFRo aXMgYXR0cmlidXRlIGRldGVybWluZXMgd2hldGhlciBsb25nIG1lc3NhZ2VzIChpbmNsdWRpbmcg cmVwciBvZgorICAgICMgb2JqZWN0cyB1c2VkIGluIGFzc2VydCBtZXRob2RzKSB3aWxsIGJlIHBy aW50ZWQgb24gZmFpbHVyZSBpbiAqYWRkaXRpb24qCisgICAgIyB0byBhbnkgZXhwbGljaXQgbWVz c2FnZSBwYXNzZWQuCisKKyAgICBsb25nTWVzc2FnZSA9IFRydWUKKyAgICAKKyAgICAjIEF0dHJp YnV0ZSB1c2VkIGJ5IFRlc3RTdWl0ZSBmb3IgY2xhc3NTZXRVcAorICAgIAorICAgIF9jbGFzc1Nl dHVwRmFpbGVkID0gRmFsc2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdy dW5UZXN0Jyk6CisgICAgICAgICIiIkNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgdGhh dCB3aWxsIHVzZSB0aGUgbmFtZWQgdGVzdAorICAgICAgICAgICBtZXRob2Qgd2hlbiBleGVjdXRl ZC4gUmFpc2VzIGEgVmFsdWVFcnJvciBpZiB0aGUgaW5zdGFuY2UgZG9lcworICAgICAgICAgICBu b3QgaGF2ZSBhIG1ldGhvZCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZS4KKyAgICAgICAgIiIiCisg ICAgICAgIHNlbGYuX3Rlc3RNZXRob2ROYW1lID0gbWV0aG9kTmFtZQorICAgICAgICBzZWxmLl9y ZXN1bHRGb3JEb0NsZWFudXBzID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0 TWV0aG9kID0gZ2V0YXR0cihzZWxmLCBtZXRob2ROYW1lKQorICAgICAgICBleGNlcHQgQXR0cmli dXRlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJubyBzdWNoIHRlc3QgbWV0 aG9kIGluICVzOiAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAoc2VsZi5fX2NsYXNzX18sIG1l dGhvZE5hbWUpKQorICAgICAgICBzZWxmLl90ZXN0TWV0aG9kRG9jID0gdGVzdE1ldGhvZC5fX2Rv Y19fCisgICAgICAgIHNlbGYuX2NsZWFudXBzID0gW10KKworICAgICAgICAjIE1hcCB0eXBlcyB0 byBjdXN0b20gYXNzZXJ0RXF1YWwgZnVuY3Rpb25zIHRoYXQgd2lsbCBjb21wYXJlCisgICAgICAg ICMgaW5zdGFuY2VzIG9mIHNhaWQgdHlwZSBpbiBtb3JlIGRldGFpbCB0byBnZW5lcmF0ZSBhIG1v cmUgdXNlZnVsCisgICAgICAgICMgZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgc2VsZi5fdHlwZV9l cXVhbGl0eV9mdW5jcyA9IF9UeXBlRXF1YWxpdHlEaWN0KHNlbGYpCisgICAgICAgIHNlbGYuYWRk VHlwZUVxdWFsaXR5RnVuYyhkaWN0LCAnYXNzZXJ0RGljdEVxdWFsJykKKyAgICAgICAgc2VsZi5h ZGRUeXBlRXF1YWxpdHlGdW5jKGxpc3QsICdhc3NlcnRMaXN0RXF1YWwnKQorICAgICAgICBzZWxm LmFkZFR5cGVFcXVhbGl0eUZ1bmModHVwbGUsICdhc3NlcnRUdXBsZUVxdWFsJykKKyAgICAgICAg c2VsZi5hZGRUeXBlRXF1YWxpdHlGdW5jKHNldCwgJ2Fzc2VydFNldEVxdWFsJykKKyAgICAgICAg c2VsZi5hZGRUeXBlRXF1YWxpdHlGdW5jKGZyb3plbnNldCwgJ2Fzc2VydFNldEVxdWFsJykKKyAg ICAgICAgc2VsZi5hZGRUeXBlRXF1YWxpdHlGdW5jKHVuaWNvZGUsICdhc3NlcnRNdWx0aUxpbmVF cXVhbCcpCisKKyAgICBkZWYgYWRkVHlwZUVxdWFsaXR5RnVuYyhzZWxmLCB0eXBlb2JqLCBmdW5j dGlvbik6CisgICAgICAgICIiIkFkZCBhIHR5cGUgc3BlY2lmaWMgYXNzZXJ0RXF1YWwgc3R5bGUg ZnVuY3Rpb24gdG8gY29tcGFyZSBhIHR5cGUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZm9y IHVzZSBieSBUZXN0Q2FzZSBzdWJjbGFzc2VzIHRoYXQgbmVlZCB0byByZWdpc3RlcgorICAgICAg ICB0aGVpciBvd24gdHlwZSBlcXVhbGl0eSBmdW5jdGlvbnMgdG8gcHJvdmlkZSBuaWNlciBlcnJv ciBtZXNzYWdlcy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgdHlwZW9iajogVGhlIGRh dGEgdHlwZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gb24gd2hlbiBib3RoIHZhbHVlcworICAgICAg ICAgICAgICAgICAgICBhcmUgb2YgdGhlIHNhbWUgdHlwZSBpbiBhc3NlcnRFcXVhbCgpLgorICAg ICAgICAgICAgZnVuY3Rpb246IFRoZSBjYWxsYWJsZSB0YWtpbmcgdHdvIGFyZ3VtZW50cyBhbmQg YW4gb3B0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgbXNnPSBhcmd1bWVudCB0aGF0IHJhaXNl cyBzZWxmLmZhaWx1cmVFeGNlcHRpb24gd2l0aCBhCisgICAgICAgICAgICAgICAgICAgIHVzZWZ1 bCBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIHR3byBhcmd1bWVudHMgYXJlIG5vdCBlcXVhbC4KKyAg ICAgICAgIiIiCisgICAgICAgIHNlbGYuX3R5cGVfZXF1YWxpdHlfZnVuY3NbdHlwZW9ial0gPSBm dW5jdGlvbgorCisgICAgZGVmIGFkZENsZWFudXAoc2VsZiwgZnVuY3Rpb24sICphcmdzLCAqKmt3 YXJncyk6CisgICAgICAgICIiIkFkZCBhIGZ1bmN0aW9uLCB3aXRoIGFyZ3VtZW50cywgdG8gYmUg Y2FsbGVkIHdoZW4gdGhlIHRlc3QgaXMKKyAgICAgICAgY29tcGxldGVkLiBGdW5jdGlvbnMgYWRk ZWQgYXJlIGNhbGxlZCBvbiBhIExJRk8gYmFzaXMgYW5kIGFyZQorICAgICAgICBjYWxsZWQgYWZ0 ZXIgdGVhckRvd24gb24gdGVzdCBmYWlsdXJlIG9yIHN1Y2Nlc3MuCisKKyAgICAgICAgQ2xlYW51 cCBpdGVtcyBhcmUgY2FsbGVkIGV2ZW4gaWYgc2V0VXAgZmFpbHMgKHVubGlrZSB0ZWFyRG93biku IiIiCisgICAgICAgIHNlbGYuX2NsZWFudXBzLmFwcGVuZCgoZnVuY3Rpb24sIGFyZ3MsIGt3YXJn cykpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICJIb29rIG1ldGhvZCBmb3Igc2V0 dGluZyB1cCB0aGUgdGVzdCBmaXh0dXJlIGJlZm9yZSBleGVyY2lzaW5nIGl0LiIKKyAgICAKKyAg ICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAiSG9vayBt ZXRob2QgZm9yIHNldHRpbmcgdXAgY2xhc3MgZml4dHVyZSBiZWZvcmUgcnVubmluZyB0ZXN0cyBp biB0aGUgY2xhc3MuIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Mo Y2xzKToKKyAgICAgICAgIkhvb2sgbWV0aG9kIGZvciBkZWNvbnN0cnVjdGluZyB0aGUgY2xhc3Mg Zml4dHVyZSBhZnRlciBydW5uaW5nIGFsbCB0ZXN0cyBpbiB0aGUgY2xhc3MuIgorCisgICAgZGVm IHRlYXJEb3duKHNlbGYpOgorICAgICAgICAiSG9vayBtZXRob2QgZm9yIGRlY29uc3RydWN0aW5n IHRoZSB0ZXN0IGZpeHR1cmUgYWZ0ZXIgdGVzdGluZyBpdC4iCisKKyAgICBkZWYgY291bnRUZXN0 Q2FzZXMoc2VsZik6CisgICAgICAgIHJldHVybiAxCisKKyAgICBkZWYgZGVmYXVsdFRlc3RSZXN1 bHQoc2VsZik6CisgICAgICAgIHJldHVybiByZXN1bHQuVGVzdFJlc3VsdCgpCisKKyAgICBkZWYg c2hvcnREZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBhIG9uZS1saW5lIGRl c2NyaXB0aW9uIG9mIHRoZSB0ZXN0LCBvciBOb25lIGlmIG5vCisgICAgICAgIGRlc2NyaXB0aW9u IGhhcyBiZWVuIHByb3ZpZGVkLgorCisgICAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9u IG9mIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGxpbmUgb2YKKyAgICAgICAgdGhlIHNw ZWNpZmllZCB0ZXN0IG1ldGhvZCdzIGRvY3N0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIGRv YyA9IHNlbGYuX3Rlc3RNZXRob2REb2MKKyAgICAgICAgcmV0dXJuIGRvYyBhbmQgZG9jLnNwbGl0 KCJcbiIpWzBdLnN0cmlwKCkgb3IgTm9uZQorCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAg IHJldHVybiAiJXMuJXMiICUgKHN0cmNsYXNzKHNlbGYuX19jbGFzc19fKSwgc2VsZi5fdGVzdE1l dGhvZE5hbWUpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgdHlw ZShzZWxmKSBpcyBub3QgdHlwZShvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVt ZW50ZWQKKworICAgICAgICByZXR1cm4gc2VsZi5fdGVzdE1ldGhvZE5hbWUgPT0gb3RoZXIuX3Rl c3RNZXRob2ROYW1lCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0 dXJuIG5vdCBzZWxmID09IG90aGVyCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAg IHJldHVybiBoYXNoKCh0eXBlKHNlbGYpLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkpCisKKyAgICBk ZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcyAoJXMpIiAlIChzZWxmLl90ZXN0 TWV0aG9kTmFtZSwgc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pKQorCisgICAgZGVmIF9fcmVwcl9f KHNlbGYpOgorICAgICAgICByZXR1cm4gIjwlcyB0ZXN0TWV0aG9kPSVzPiIgJSBcCisgICAgICAg ICAgICAgICAoc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkK KyAgICAKKyAgICBkZWYgX2FkZFNraXAoc2VsZiwgcmVzdWx0LCByZWFzb24pOgorICAgICAgICBh ZGRTa2lwID0gZ2V0YXR0cihyZXN1bHQsICdhZGRTa2lwJywgTm9uZSkKKyAgICAgICAgaWYgYWRk U2tpcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFkZFNraXAoc2VsZiwgcmVhc29uKQorICAg ICAgICBlbHNlOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVXNlIG9mIGEgVGVzdFJlc3Vs dCB3aXRob3V0IGFuIGFkZFNraXAgbWV0aG9kIGlzIGRlcHJlY2F0ZWQiLCAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICAgICAgICAgcmVzdWx0 LmFkZFN1Y2Nlc3Moc2VsZikKKworICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0PU5vbmUpOgorICAg ICAgICBvcmlnX3Jlc3VsdCA9IHJlc3VsdAorICAgICAgICBpZiByZXN1bHQgaXMgTm9uZToKKyAg ICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZGVmYXVsdFRlc3RSZXN1bHQoKQorICAgICAgICAgICAg c3RhcnRUZXN0UnVuID0gZ2V0YXR0cihyZXN1bHQsICdzdGFydFRlc3RSdW4nLCBOb25lKQorICAg ICAgICAgICAgaWYgc3RhcnRUZXN0UnVuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHN0 YXJ0VGVzdFJ1bigpCisKKyAgICAgICAgc2VsZi5fcmVzdWx0Rm9yRG9DbGVhbnVwcyA9IHJlc3Vs dAorICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHNlbGYpCisgICAgICAgIAorICAgICAgICB0ZXN0 TWV0aG9kID0gZ2V0YXR0cihzZWxmLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkKKyAgICAgICAgCisg ICAgICAgIGlmIChnZXRhdHRyKHNlbGYuX19jbGFzc19fLCAiX191bml0dGVzdF9za2lwX18iLCBG YWxzZSkgb3IgCisgICAgICAgICAgICBnZXRhdHRyKHRlc3RNZXRob2QsICJfX3VuaXR0ZXN0X3Nr aXBfXyIsIEZhbHNlKSk6CisgICAgICAgICAgICAjIElmIHRoZSBjbGFzcyBvciBtZXRob2Qgd2Fz IHNraXBwZWQuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2tpcF93aHkgPSAo Z2V0YXR0cihzZWxmLl9fY2xhc3NfXywgJ19fdW5pdHRlc3Rfc2tpcF93aHlfXycsICcnKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGdldGF0dHIodGVzdE1ldGhvZCwgJ19fdW5pdHRl c3Rfc2tpcF93aHlfXycsICcnKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3Vs dCwgc2tpcF93aHkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJlc3Vs dC5zdG9wVGVzdChzZWxmKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAg ICAgICAgIHN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg IHNlbGYuc2V0VXAoKQorICAgICAgICAgICAgZXhjZXB0IFNraXBUZXN0LCBlOgorICAgICAgICAg ICAgICAgIHNlbGYuX2FkZFNraXAocmVzdWx0LCBzdHIoZSkpCisgICAgICAgICAgICBleGNlcHQg RXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRFcnJvcihzZWxmLCBzeXMuZXhj X2luZm8oKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAg ICAgICAgICAgICAgICB0ZXN0TWV0aG9kKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgc2VsZi5m YWlsdXJlRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShz ZWxmLCBzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgX0V4cGVjdGVkRmFp bHVyZSwgZToKKyAgICAgICAgICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlID0gZ2V0YXR0 cihyZXN1bHQsICdhZGRFeHBlY3RlZEZhaWx1cmUnLCBOb25lKQorICAgICAgICAgICAgICAgICAg ICBpZiBhZGRFeHBlY3RlZEZhaWx1cmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAg ICAgICBhZGRFeHBlY3RlZEZhaWx1cmUoc2VsZiwgZS5leGNfaW5mbykKKyAgICAgICAgICAgICAg ICAgICAgZWxzZTogCisgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJVc2Ug b2YgYSBUZXN0UmVzdWx0IHdpdGhvdXQgYW4gYWRkRXhwZWN0ZWRGYWlsdXJlIG1ldGhvZCBpcyBk ZXByZWNhdGVkIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJl Y2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNz KHNlbGYpCisgICAgICAgICAgICAgICAgZXhjZXB0IF9VbmV4cGVjdGVkU3VjY2VzczoKKyAgICAg ICAgICAgICAgICAgICAgYWRkVW5leHBlY3RlZFN1Y2Nlc3MgPSBnZXRhdHRyKHJlc3VsdCwgJ2Fk ZFVuZXhwZWN0ZWRTdWNjZXNzJywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgYWRkVW5l eHBlY3RlZFN1Y2Nlc3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRV bmV4cGVjdGVkU3VjY2VzcyhzZWxmKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg ICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVXNlIG9mIGEgVGVzdFJlc3VsdCB3aXRo b3V0IGFuIGFkZFVuZXhwZWN0ZWRTdWNjZXNzIG1ldGhvZCBpcyBkZXByZWNhdGVkIiwgCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAg ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRGYWlsdXJlKHNlbGYsIHN5cy5leGNfaW5m bygpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBTa2lwVGVzdCwgZToKKyAgICAgICAgICAgICAg ICAgICAgc2VsZi5fYWRkU2tpcChyZXN1bHQsIHN0cihlKSkKKyAgICAgICAgICAgICAgICBleGNl cHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3Ioc2VsZiwg c3lzLmV4Y19pbmZvKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg ICAgc3VjY2VzcyA9IFRydWUKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg ICAgICAgc2VsZi50ZWFyRG93bigpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoK KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHNlbGYsIHN5cy5leGNfaW5mbygp KQorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gRmFsc2UKKworICAgICAgICAgICAgY2xl YW5VcFN1Y2Nlc3MgPSBzZWxmLmRvQ2xlYW51cHMoKQorICAgICAgICAgICAgc3VjY2VzcyA9IHN1 Y2Nlc3MgYW5kIGNsZWFuVXBTdWNjZXNzCisgICAgICAgICAgICBpZiBzdWNjZXNzOgorICAgICAg ICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCisgICAgICAgIGZpbmFsbHk6CisgICAg ICAgICAgICByZXN1bHQuc3RvcFRlc3Qoc2VsZikKKyAgICAgICAgICAgIGlmIG9yaWdfcmVzdWx0 IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc3RvcFRlc3RSdW4gPSBnZXRhdHRyKHJlc3VsdCwg J3N0b3BUZXN0UnVuJywgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBzdG9wVGVzdFJ1biBpcyBu b3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc3RvcFRlc3RSdW4oKQorCisgICAgZGVmIGRv Q2xlYW51cHMoc2VsZik6CisgICAgICAgICIiIkV4ZWN1dGUgYWxsIGNsZWFudXAgZnVuY3Rpb25z LiBOb3JtYWxseSBjYWxsZWQgZm9yIHlvdSBhZnRlcgorICAgICAgICB0ZWFyRG93bi4iIiIKKyAg ICAgICAgcmVzdWx0ID0gc2VsZi5fcmVzdWx0Rm9yRG9DbGVhbnVwcworICAgICAgICBvayA9IFRy dWUKKyAgICAgICAgd2hpbGUgc2VsZi5fY2xlYW51cHM6CisgICAgICAgICAgICBmdW5jdGlvbiwg YXJncywga3dhcmdzID0gc2VsZi5fY2xlYW51cHMucG9wKC0xKQorICAgICAgICAgICAgdHJ5Ogor ICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIGV4 Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgb2sgPSBGYWxzZQorICAgICAgICAgICAg ICAgIHJlc3VsdC5hZGRFcnJvcihzZWxmLCBzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgcmV0dXJu IG9rCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJl dHVybiBzZWxmLnJ1bigqYXJncywgKiprd2RzKQorCisgICAgZGVmIGRlYnVnKHNlbGYpOgorICAg ICAgICAiIiJSdW4gdGhlIHRlc3Qgd2l0aG91dCBjb2xsZWN0aW5nIGVycm9ycyBpbiBhIFRlc3RS ZXN1bHQiIiIKKyAgICAgICAgc2VsZi5zZXRVcCgpCisgICAgICAgIGdldGF0dHIoc2VsZiwgc2Vs Zi5fdGVzdE1ldGhvZE5hbWUpKCkKKyAgICAgICAgc2VsZi50ZWFyRG93bigpCisgICAgICAgIHdo aWxlIHNlbGYuX2NsZWFudXBzOgorICAgICAgICAgICAgZnVuY3Rpb24sIGFyZ3MsIGt3YXJncyA9 IHNlbGYuX2NsZWFudXBzLnBvcCgtMSkKKyAgICAgICAgICAgIGZ1bmN0aW9uKCphcmdzLCAqKmt3 YXJncykKKworICAgIGRlZiBza2lwVGVzdChzZWxmLCByZWFzb24pOgorICAgICAgICAiIiJTa2lw IHRoaXMgdGVzdC4iIiIKKyAgICAgICAgcmFpc2UgU2tpcFRlc3QocmVhc29uKQorCisgICAgZGVm IGZhaWwoc2VsZiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJGYWlsIGltbWVkaWF0ZWx5LCB3aXRo IHRoZSBnaXZlbiBtZXNzYWdlLiIiIgorICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRp b24obXNnKQorCisgICAgZGVmIGFzc2VydEZhbHNlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKKyAg ICAgICAgIkZhaWwgdGhlIHRlc3QgaWYgdGhlIGV4cHJlc3Npb24gaXMgdHJ1ZS4iCisgICAgICAg IGlmIGV4cHI6CisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgIiVz IGlzIG5vdCBGYWxzZSIgJSBzYWZlX3JlcHIoZXhwcikpCisgICAgICAgICAgICByYWlzZSBzZWxm LmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisgICAgZGVmIGFzc2VydFRydWUoc2VsZiwgZXhwciwg bXNnPU5vbmUpOgorICAgICAgICAiIiJGYWlsIHRoZSB0ZXN0IHVubGVzcyB0aGUgZXhwcmVzc2lv biBpcyB0cnVlLiIiIgorICAgICAgICBpZiBub3QgZXhwcjoKKyAgICAgICAgICAgIG1zZyA9IHNl bGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCAiJXMgaXMgbm90IFRydWUiICUgc2FmZV9yZXByKGV4cHIp KQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworICAgIGRl ZiBfZm9ybWF0TWVzc2FnZShzZWxmLCBtc2csIHN0YW5kYXJkTXNnKToKKyAgICAgICAgIiIiSG9u b3VyIHRoZSBsb25nTWVzc2FnZSBhdHRyaWJ1dGUgd2hlbiBnZW5lcmF0aW5nIGZhaWx1cmUgbWVz c2FnZXMuCisgICAgICAgIElmIGxvbmdNZXNzYWdlIGlzIEZhbHNlIHRoaXMgbWVhbnM6CisgICAg ICAgICogVXNlIG9ubHkgYW4gZXhwbGljaXQgbWVzc2FnZSBpZiBpdCBpcyBwcm92aWRlZAorICAg ICAgICAqIE90aGVyd2lzZSB1c2UgdGhlIHN0YW5kYXJkIG1lc3NhZ2UgZm9yIHRoZSBhc3NlcnQK KworICAgICAgICBJZiBsb25nTWVzc2FnZSBpcyBUcnVlOgorICAgICAgICAqIFVzZSB0aGUgc3Rh bmRhcmQgbWVzc2FnZQorICAgICAgICAqIElmIGFuIGV4cGxpY2l0IG1lc3NhZ2UgaXMgcHJvdmlk ZWQsIHBsdXMgJyA6ICcgYW5kIHRoZSBleHBsaWNpdCBtZXNzYWdlCisgICAgICAgICIiIgorICAg ICAgICBpZiBub3Qgc2VsZi5sb25nTWVzc2FnZToKKyAgICAgICAgICAgIHJldHVybiBtc2cgb3Ig c3RhbmRhcmRNc2cKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4g c3RhbmRhcmRNc2cKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuICclcyA6ICVzJyAl IChzdGFuZGFyZE1zZywgbXNnKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgor ICAgICAgICAgICAgcmV0dXJuICclcyA6ICVzJyAlIChzYWZlX3N0cihzdGFuZGFyZE1zZyksIHNh ZmVfc3RyKG1zZykpCisKKworICAgIGRlZiBhc3NlcnRSYWlzZXMoc2VsZiwgZXhjQ2xhc3MsIGNh bGxhYmxlT2JqPU5vbmUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkZhaWwgdW5sZXNz IGFuIGV4Y2VwdGlvbiBvZiBjbGFzcyBleGNDbGFzcyBpcyB0aHJvd24KKyAgICAgICAgICAgYnkg Y2FsbGFibGVPYmogd2hlbiBpbnZva2VkIHdpdGggYXJndW1lbnRzIGFyZ3MgYW5kIGtleXdvcmQK KyAgICAgICAgICAgYXJndW1lbnRzIGt3YXJncy4gSWYgYSBkaWZmZXJlbnQgdHlwZSBvZiBleGNl cHRpb24gaXMKKyAgICAgICAgICAgdGhyb3duLCBpdCB3aWxsIG5vdCBiZSBjYXVnaHQsIGFuZCB0 aGUgdGVzdCBjYXNlIHdpbGwgYmUKKyAgICAgICAgICAgZGVlbWVkIHRvIGhhdmUgc3VmZmVyZWQg YW4gZXJyb3IsIGV4YWN0bHkgYXMgZm9yIGFuCisgICAgICAgICAgIHVuZXhwZWN0ZWQgZXhjZXB0 aW9uLgorCisgICAgICAgICAgIElmIGNhbGxlZCB3aXRoIGNhbGxhYmxlT2JqIG9taXR0ZWQgb3Ig Tm9uZSwgd2lsbCByZXR1cm4gYQorICAgICAgICAgICBjb250ZXh0IG9iamVjdCB1c2VkIGxpa2Ug dGhpczo6CisKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFNvbWVFeGNl cHRpb24pOgorICAgICAgICAgICAgICAgICAgICBkb19zb21ldGhpbmcoKQorCisgICAgICAgICAg IFRoZSBjb250ZXh0IG1hbmFnZXIga2VlcHMgYSByZWZlcmVuY2UgdG8gdGhlIGV4Y2VwdGlvbiBh cworICAgICAgICAgICB0aGUgJ2V4Y2VwdGlvbicgYXR0cmlidXRlLiBUaGlzIGFsbG93cyB5b3Ug dG8gaW5zcGVjdCB0aGUKKyAgICAgICAgICAgZXhjZXB0aW9uIGFmdGVyIHRoZSBhc3NlcnRpb246 OgorCisgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFNvbWVFeGNlcHRpb24p IGFzIGNtOgorICAgICAgICAgICAgICAgICAgIGRvX3NvbWV0aGluZygpCisgICAgICAgICAgICAg ICB0aGVfZXhjZXB0aW9uID0gY20uZXhjZXB0aW9uCisgICAgICAgICAgICAgICBzZWxmLmFzc2Vy dEVxdWFsKHRoZV9leGNlcHRpb24uZXJyb3JfY29kZSwgMykKKyAgICAgICAgIiIiCisgICAgICAg IGlmIGNhbGxhYmxlT2JqIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gX0Fzc2VydFJhaXNl c0NvbnRleHQoZXhjQ2xhc3MsIHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhbGxh YmxlT2JqKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IGV4Y0NsYXNzOgorICAgICAg ICAgICAgcmV0dXJuCisgICAgICAgIAorICAgICAgICBpZiBoYXNhdHRyKGV4Y0NsYXNzLCdfX25h bWVfXycpOgorICAgICAgICAgICAgZXhjTmFtZSA9IGV4Y0NsYXNzLl9fbmFtZV9fCisgICAgICAg IGVsc2U6CisgICAgICAgICAgICBleGNOYW1lID0gc3RyKGV4Y0NsYXNzKQorICAgICAgICByYWlz ZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24sICIlcyBub3QgcmFpc2VkIiAlIGV4Y05hbWUKKworICAg IGRlZiBfZ2V0QXNzZXJ0RXF1YWxpdHlGdW5jKHNlbGYsIGZpcnN0LCBzZWNvbmQpOgorICAgICAg ICAiIiJHZXQgYSBkZXRhaWxlZCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciB0aGUgdHlwZXMgb2Yg dGhlIHR3byBhcmdzLgorCisgICAgICAgIFJldHVybnM6IEEgY2FsbGFibGUgYWNjZXB0aW5nIChm aXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSkgdGhhdCB3aWxsCisgICAgICAgIHJhaXNlIGEgZmFpbHVy ZSBleGNlcHRpb24gaWYgZmlyc3QgIT0gc2Vjb25kIHdpdGggYSB1c2VmdWwgaHVtYW4KKyAgICAg ICAgcmVhZGFibGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhvc2UgdHlwZXMuCisgICAgICAgICIiIgor ICAgICAgICAjCisgICAgICAgICMgTk9URShncmVnb3J5LnAuc21pdGgpOiBJIGNvbnNpZGVyZWQg aXNpbnN0YW5jZShmaXJzdCwgdHlwZShzZWNvbmQpKQorICAgICAgICAjIGFuZCB2aWNlIHZlcnNh LiAgSSBvcHRlZCBmb3IgdGhlIGNvbnNlcnZhdGl2ZSBhcHByb2FjaCBpbiBjYXNlCisgICAgICAg ICMgc3ViY2xhc3NlcyBhcmUgbm90IGludGVuZGVkIHRvIGJlIGNvbXBhcmVkIGluIGRldGFpbCB0 byB0aGVpciBzdXBlcgorICAgICAgICAjIGNsYXNzIGluc3RhbmNlcyB1c2luZyBhIHR5cGUgZXF1 YWxpdHkgZnVuYy4gIFRoaXMgbWVhbnMgdGVzdGluZworICAgICAgICAjIHN1YnR5cGVzIHdvbid0 IGF1dG9tYWdpY2FsbHkgdXNlIHRoZSBkZXRhaWxlZCBjb21wYXJpc29uLiAgQ2FsbGVycworICAg ICAgICAjIHNob3VsZCB1c2UgdGhlaXIgdHlwZSBzcGVjaWZpYyBhc3NlcnRTcGFtRXF1YWwgbWV0 aG9kIHRvIGNvbXBhcmUKKyAgICAgICAgIyBzdWJjbGFzc2VzIGlmIHRoZSBkZXRhaWxlZCBjb21w YXJpc29uIGlzIGRlc2lyZWQgYW5kIGFwcHJvcHJpYXRlLgorICAgICAgICAjIFNlZSB0aGUgZGlz Y3Vzc2lvbiBpbiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjU3OC4KKyAgICAgICAgIwor ICAgICAgICBpZiB0eXBlKGZpcnN0KSBpcyB0eXBlKHNlY29uZCk6CisgICAgICAgICAgICBhc3Nl cnRlciA9IHNlbGYuX3R5cGVfZXF1YWxpdHlfZnVuY3MuZ2V0KHR5cGUoZmlyc3QpKQorICAgICAg ICAgICAgaWYgYXNzZXJ0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFz c2VydGVyCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Jhc2VBc3NlcnRFcXVhbAorCisgICAgZGVm IF9iYXNlQXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgorICAgICAg ICAiIiJUaGUgZGVmYXVsdCBhc3NlcnRFcXVhbCBpbXBsZW1lbnRhdGlvbiwgbm90IHR5cGUgc3Bl Y2lmaWMuIiIiCisgICAgICAgIGlmIG5vdCBmaXJzdCA9PSBzZWNvbmQ6CisgICAgICAgICAgICBz dGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGZpcnN0KSwgc2FmZV9yZXByKHNl Y29uZCkpCisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRh cmRNc2cpCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisg ICAgZGVmIGFzc2VydEVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKToKKyAgICAg ICAgIiIiRmFpbCBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIHVuZXF1YWwgYXMgZGV0ZXJtaW5lZCBi eSB0aGUgJz09JworICAgICAgICAgICBvcGVyYXRvci4KKyAgICAgICAgIiIiCisgICAgICAgIGFz c2VydGlvbl9mdW5jID0gc2VsZi5fZ2V0QXNzZXJ0RXF1YWxpdHlGdW5jKGZpcnN0LCBzZWNvbmQp CisgICAgICAgIGFzc2VydGlvbl9mdW5jKGZpcnN0LCBzZWNvbmQsIG1zZz1tc2cpCisKKyAgICBk ZWYgYXNzZXJ0Tm90RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgorICAgICAg ICAiIiJGYWlsIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgZXF1YWwgYXMgZGV0ZXJtaW5lZCBieSB0 aGUgJz09JworICAgICAgICAgICBvcGVyYXRvci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5v dCBmaXJzdCAhPSBzZWNvbmQ6CisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdl KG1zZywgJyVzID09ICVzJyAlIChzYWZlX3JlcHIoZmlyc3QpLCAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29u ZCkpKQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworICAg IGRlZiBhc3NlcnRBbG1vc3RFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBwbGFjZXM9Tm9uZSwg bXNnPU5vbmUsIGRlbHRhPU5vbmUpOgorICAgICAgICAiIiJGYWlsIGlmIHRoZSB0d28gb2JqZWN0 cyBhcmUgdW5lcXVhbCBhcyBkZXRlcm1pbmVkIGJ5IHRoZWlyCisgICAgICAgICAgIGRpZmZlcmVu Y2Ugcm91bmRlZCB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzCisgICAgICAg ICAgIChkZWZhdWx0IDcpIGFuZCBjb21wYXJpbmcgdG8gemVybywgb3IgYnkgY29tcGFyaW5nIHRo YXQgdGhlCisgICAgICAgICAgIGJldHdlZW4gdGhlIHR3byBvYmplY3RzIGlzIG1vcmUgdGhhbiB0 aGUgZ2l2ZW4gZGVsdGEuCisKKyAgICAgICAgICAgTm90ZSB0aGF0IGRlY2ltYWwgcGxhY2VzIChm cm9tIHplcm8pIGFyZSB1c3VhbGx5IG5vdCB0aGUgc2FtZQorICAgICAgICAgICBhcyBzaWduaWZp Y2FudCBkaWdpdHMgKG1lYXN1cmVkIGZyb20gdGhlIG1vc3Qgc2lnbmZpY2FudCBkaWdpdCkuCisK KyAgICAgICAgICAgSWYgdGhlIHR3byBvYmplY3RzIGNvbXBhcmUgZXF1YWwgdGhlbiB0aGV5IHdp bGwgYXV0b21hdGljYWxseQorICAgICAgICAgICBjb21wYXJlIGFsbW9zdCBlcXVhbC4KKyAgICAg ICAgIiIiCisgICAgICAgIGlmIGZpcnN0ID09IHNlY29uZDoKKyAgICAgICAgICAgICMgc2hvcnRj dXQKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBkZWx0YSBpcyBub3QgTm9uZSBhbmQg cGxhY2VzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzcGVjaWZ5 IGRlbHRhIG9yIHBsYWNlcyBub3QgYm90aCIpCisgICAgICAgIAorICAgICAgICBpZiBkZWx0YSBp cyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGFicyhmaXJzdCAtIHNlY29uZCkgPD0gZGVsdGE6 CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIAorICAgICAgICAgICAgc3RhbmRhcmRN c2cgPSAnJXMgIT0gJXMgd2l0aGluICVzIGRlbHRhJyAlIChzYWZlX3JlcHIoZmlyc3QpLCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Fm ZV9yZXByKHNlY29uZCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoZGVsdGEpKQorICAgICAgICBlbHNlOgorICAgICAg ICAgICAgaWYgcGxhY2VzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcGxhY2VzID0gNworICAg ICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgcm91bmQoYWJzKHNlY29uZC1maXJzdCksIHBs YWNlcykgPT0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgCisgICAgICAgICAg ICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcyB3aXRoaW4gJXIgcGxhY2VzJyAlIChzYWZlX3JlcHIo Zmlyc3QpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzYWZlX3JlcHIoc2Vjb25kKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VzKQorICAgICAgICBtc2cgPSBz ZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCisgICAgICAgIHJhaXNlIHNlbGYu ZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKyAgICBkZWYgYXNzZXJ0Tm90QWxtb3N0RXF1YWwoc2Vs ZiwgZmlyc3QsIHNlY29uZCwgcGxhY2VzPU5vbmUsIG1zZz1Ob25lLCBkZWx0YT1Ob25lKToKKyAg ICAgICAgIiIiRmFpbCBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIGVxdWFsIGFzIGRldGVybWluZWQg YnkgdGhlaXIKKyAgICAgICAgICAgZGlmZmVyZW5jZSByb3VuZGVkIHRvIHRoZSBnaXZlbiBudW1i ZXIgb2YgZGVjaW1hbCBwbGFjZXMKKyAgICAgICAgICAgKGRlZmF1bHQgNykgYW5kIGNvbXBhcmlu ZyB0byB6ZXJvLCBvciBieSBjb21wYXJpbmcgdGhhdCB0aGUKKyAgICAgICAgICAgYmV0d2VlbiB0 aGUgdHdvIG9iamVjdHMgaXMgbGVzcyB0aGFuIHRoZSBnaXZlbiBkZWx0YS4KKworICAgICAgICAg ICBOb3RlIHRoYXQgZGVjaW1hbCBwbGFjZXMgKGZyb20gemVybykgYXJlIHVzdWFsbHkgbm90IHRo ZSBzYW1lCisgICAgICAgICAgIGFzIHNpZ25pZmljYW50IGRpZ2l0cyAobWVhc3VyZWQgZnJvbSB0 aGUgbW9zdCBzaWduZmljYW50IGRpZ2l0KS4KKworICAgICAgICAgICBPYmplY3RzIHRoYXQgYXJl IGVxdWFsIGF1dG9tYXRpY2FsbHkgZmFpbC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGRlbHRh IGlzIG5vdCBOb25lIGFuZCBwbGFjZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBU eXBlRXJyb3IoInNwZWNpZnkgZGVsdGEgb3IgcGxhY2VzIG5vdCBib3RoIikKKyAgICAgICAgaWYg ZGVsdGEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBub3QgKGZpcnN0ID09IHNlY29uZCkg YW5kIGFicyhmaXJzdCAtIHNlY29uZCkgPiBkZWx0YToKKyAgICAgICAgICAgICAgICByZXR1cm4K KyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzID09ICVzIHdpdGhpbiAlcyBkZWx0YScgJSAo c2FmZV9yZXByKGZpcnN0KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihzZWNvbmQpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoZGVsdGEpKQor ICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcGxhY2VzIGlzIE5vbmU6CisgICAgICAgICAg ICAgICAgcGxhY2VzID0gNworICAgICAgICAgICAgaWYgbm90IChmaXJzdCA9PSBzZWNvbmQpIGFu ZCByb3VuZChhYnMoc2Vjb25kLWZpcnN0KSwgcGxhY2VzKSAhPSAwOgorICAgICAgICAgICAgICAg IHJldHVybgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgPT0gJXMgd2l0aGluICVyIHBs YWNlcycgJSAoc2FmZV9yZXByKGZpcnN0KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoc2Vjb25kKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlcykK KworICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCisg ICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKyAgICAjIFN5bm9ueW1z IGZvciBhc3NlcnRpb24gbWV0aG9kcworCisgICAgIyBUaGUgcGx1cmFscyBhcmUgdW5kb2N1bWVu dGVkLiAgS2VlcCB0aGVtIHRoYXQgd2F5IHRvIGRpc2NvdXJhZ2UgdXNlLgorICAgICMgRG8gbm90 IGFkZCBtb3JlLiAgRG8gbm90IHJlbW92ZS4KKyAgICAjIEdvaW5nIHRocm91Z2ggYSBkZXByZWNh dGlvbiBjeWNsZSBvbiB0aGVzZSB3b3VsZCBhbm5veSBtYW55IHBlb3BsZS4KKyAgICBhc3NlcnRF cXVhbHMgPSBhc3NlcnRFcXVhbAorICAgIGFzc2VydE5vdEVxdWFscyA9IGFzc2VydE5vdEVxdWFs CisgICAgYXNzZXJ0QWxtb3N0RXF1YWxzID0gYXNzZXJ0QWxtb3N0RXF1YWwKKyAgICBhc3NlcnRO b3RBbG1vc3RFcXVhbHMgPSBhc3NlcnROb3RBbG1vc3RFcXVhbAorICAgIGFzc2VydF8gPSBhc3Nl cnRUcnVlCisKKyAgICAjIFRoZXNlIGZhaWwqIGFzc2VydGlvbiBtZXRob2QgbmFtZXMgYXJlIHBl bmRpbmcgZGVwcmVjYXRpb24gYW5kIHdpbGwKKyAgICAjIGJlIGEgRGVwcmVjYXRpb25XYXJuaW5n IGluIDMuMjsgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI1NzgKKyAgICBkZWYgX2RlcHJl Y2F0ZShvcmlnaW5hbF9mdW5jKToKKyAgICAgICAgZGVmIGRlcHJlY2F0ZWRfZnVuYygqYXJncywg Kiprd2FyZ3MpOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAo J1BsZWFzZSB1c2UgJXMgaW5zdGVhZC4nICUgb3JpZ2luYWxfZnVuYy5fX25hbWVfXyksCisgICAg ICAgICAgICAgICAgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgICAgIHJl dHVybiBvcmlnaW5hbF9mdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgcmV0dXJuIGRlcHJl Y2F0ZWRfZnVuYworCisgICAgZmFpbFVubGVzc0VxdWFsID0gX2RlcHJlY2F0ZShhc3NlcnRFcXVh bCkKKyAgICBmYWlsSWZFcXVhbCA9IF9kZXByZWNhdGUoYXNzZXJ0Tm90RXF1YWwpCisgICAgZmFp bFVubGVzc0FsbW9zdEVxdWFsID0gX2RlcHJlY2F0ZShhc3NlcnRBbG1vc3RFcXVhbCkKKyAgICBm YWlsSWZBbG1vc3RFcXVhbCA9IF9kZXByZWNhdGUoYXNzZXJ0Tm90QWxtb3N0RXF1YWwpCisgICAg ZmFpbFVubGVzcyA9IF9kZXByZWNhdGUoYXNzZXJ0VHJ1ZSkKKyAgICBmYWlsVW5sZXNzUmFpc2Vz ID0gX2RlcHJlY2F0ZShhc3NlcnRSYWlzZXMpCisgICAgZmFpbElmID0gX2RlcHJlY2F0ZShhc3Nl cnRGYWxzZSkKKworICAgIGRlZiBhc3NlcnRTZXF1ZW5jZUVxdWFsKHNlbGYsIHNlcTEsIHNlcTIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPU5vbmUsIHNlcV90eXBlPU5vbmUsIG1h eF9kaWZmPTgwKjgpOgorICAgICAgICAiIiJBbiBlcXVhbGl0eSBhc3NlcnRpb24gZm9yIG9yZGVy ZWQgc2VxdWVuY2VzIChsaWtlIGxpc3RzIGFuZCB0dXBsZXMpLgorCisgICAgICAgIEZvciB0aGUg cHVycG9zZXMgb2YgdGhpcyBmdW5jdGlvbiwgYSB2YWxpZCBvcmRlcmVkIHNlcXVlbmNlIHR5cGUg aXMgb25lCisgICAgICAgIHdoaWNoIGNhbiBiZSBpbmRleGVkLCBoYXMgYSBsZW5ndGgsIGFuZCBo YXMgYW4gZXF1YWxpdHkgb3BlcmF0b3IuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHNl cTE6IFRoZSBmaXJzdCBzZXF1ZW5jZSB0byBjb21wYXJlLgorICAgICAgICAgICAgc2VxMjogVGhl IHNlY29uZCBzZXF1ZW5jZSB0byBjb21wYXJlLgorICAgICAgICAgICAgc2VxX3R5cGU6IFRoZSBl eHBlY3RlZCBkYXRhdHlwZSBvZiB0aGUgc2VxdWVuY2VzLCBvciBOb25lIGlmIG5vCisgICAgICAg ICAgICAgICAgICAgIGRhdGF0eXBlIHNob3VsZCBiZSBlbmZvcmNlZC4KKyAgICAgICAgICAgIG1z ZzogT3B0aW9uYWwgbWVzc2FnZSB0byB1c2Ugb24gZmFpbHVyZSBpbnN0ZWFkIG9mIGEgbGlzdCBv ZgorICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlcy4KKyAgICAgICAgICAgIG1heF9kaWZm OiBNYXhpbXVtIHNpemUgb2ZmIHRoZSBkaWZmLCBsYXJnZXIgZGlmZnMgYXJlIG5vdCBzaG93bgor ICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VxX3R5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAg ICBzZXFfdHlwZV9uYW1lID0gc2VxX3R5cGUuX19uYW1lX18KKyAgICAgICAgICAgIGlmIG5vdCBp c2luc3RhbmNlKHNlcTEsIHNlcV90eXBlKToKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLmZh aWx1cmVFeGNlcHRpb24oJ0ZpcnN0IHNlcXVlbmNlIGlzIG5vdCBhICVzOiAlcycKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VxX3R5cGVfbmFtZSwgc2Fm ZV9yZXByKHNlcTEpKSkKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlcTIsIHNlcV90 eXBlKToKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24oJ1NlY29u ZCBzZXF1ZW5jZSBpcyBub3QgYSAlczogJXMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICUgKHNlcV90eXBlX25hbWUsIHNhZmVfcmVwcihzZXEyKSkpCisgICAg ICAgIGVsc2U6CisgICAgICAgICAgICBzZXFfdHlwZV9uYW1lID0gInNlcXVlbmNlIgorCisgICAg ICAgIGRpZmZlcmluZyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGVuMSA9IGxl bihzZXExKQorICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcik6 CisgICAgICAgICAgICBkaWZmZXJpbmcgPSAnRmlyc3QgJXMgaGFzIG5vIGxlbmd0aC4gICAgTm9u LXNlcXVlbmNlPycgJSAoCisgICAgICAgICAgICAgICAgICAgIHNlcV90eXBlX25hbWUpCisKKyAg ICAgICAgaWYgZGlmZmVyaW5nIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAg ICAgICAgbGVuMiA9IGxlbihzZXEyKQorICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIE5v dEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIGRpZmZlcmluZyA9ICdTZWNvbmQg JXMgaGFzIG5vIGxlbmd0aC4gICAgTm9uLXNlcXVlbmNlPycgJSAoCisgICAgICAgICAgICAgICAg ICAgICAgICBzZXFfdHlwZV9uYW1lKQorCisgICAgICAgIGlmIGRpZmZlcmluZyBpcyBOb25lOgor ICAgICAgICAgICAgaWYgc2VxMSA9PSBzZXEyOgorICAgICAgICAgICAgICAgIHJldHVybgorCisg ICAgICAgICAgICBzZXExX3JlcHIgPSByZXByKHNlcTEpCisgICAgICAgICAgICBzZXEyX3JlcHIg PSByZXByKHNlcTIpCisgICAgICAgICAgICBpZiBsZW4oc2VxMV9yZXByKSA+IDMwOgorICAgICAg ICAgICAgICAgIHNlcTFfcmVwciA9IHNlcTFfcmVwcls6MzBdICsgJy4uLicKKyAgICAgICAgICAg IGlmIGxlbihzZXEyX3JlcHIpID4gMzA6CisgICAgICAgICAgICAgICAgc2VxMl9yZXByID0gc2Vx Ml9yZXByWzozMF0gKyAnLi4uJworICAgICAgICAgICAgZWxlbWVudHMgPSAoc2VxX3R5cGVfbmFt ZS5jYXBpdGFsaXplKCksIHNlcTFfcmVwciwgc2VxMl9yZXByKQorICAgICAgICAgICAgZGlmZmVy aW5nID0gJyVzcyBkaWZmZXI6ICVzICE9ICVzXG4nICUgZWxlbWVudHMKKworICAgICAgICAgICAg Zm9yIGkgaW4geHJhbmdlKG1pbihsZW4xLCBsZW4yKSk6CisgICAgICAgICAgICAgICAgdHJ5Ogor ICAgICAgICAgICAgICAgICAgICBpdGVtMSA9IHNlcTFbaV0KKyAgICAgICAgICAgICAgICBleGNl cHQgKFR5cGVFcnJvciwgSW5kZXhFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAg ICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ1xuVW5hYmxlIHRvIGluZGV4IGVsZW1lbnQgJWQg b2YgZmlyc3QgJXNcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGksIHNl cV90eXBlX25hbWUpKQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAg ICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpdGVtMiA9IHNlcTJbaV0KKyAgICAgICAgICAg ICAgICBleGNlcHQgKFR5cGVFcnJvciwgSW5kZXhFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcik6 CisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ1xuVW5hYmxlIHRvIGluZGV4IGVs ZW1lbnQgJWQgb2Ygc2Vjb25kICVzXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChpLCBzZXFfdHlwZV9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAg ICAgICAgICAgICAgIGlmIGl0ZW0xICE9IGl0ZW0yOgorICAgICAgICAgICAgICAgICAgICBkaWZm ZXJpbmcgKz0gKCdcbkZpcnN0IGRpZmZlcmluZyBlbGVtZW50ICVkOlxuJXNcbiVzXG4nICUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpLCBpdGVtMSwgaXRlbTIpKQorICAgICAg ICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBp ZiAobGVuMSA9PSBsZW4yIGFuZCBzZXFfdHlwZSBpcyBOb25lIGFuZAorICAgICAgICAgICAgICAg ICAgICB0eXBlKHNlcTEpICE9IHR5cGUoc2VxMikpOgorICAgICAgICAgICAgICAgICAgICAjIFRo ZSBzZXF1ZW5jZXMgYXJlIHRoZSBzYW1lLCBidXQgaGF2ZSBkaWZmZXJpbmcgdHlwZXMuCisgICAg ICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiBsZW4xID4gbGVuMjoKKyAg ICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdcbkZpcnN0ICVzIGNvbnRhaW5zICVkIGFkZGl0 aW9uYWwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWxlbWVudHMuXG4nICUgKHNl cV90eXBlX25hbWUsIGxlbjEgLSBsZW4yKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAg ICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ0ZpcnN0IGV4dHJhIGVsZW1lbnQgJWQ6XG4lc1xu JyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbjIsIHNlcTFbbGVuMl0p KQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBJbmRleEVycm9yLCBOb3RJbXBs ZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnVW5hYmxl IHRvIGluZGV4IGVsZW1lbnQgJWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdvZiBmaXJzdCAlc1xuJyAlIChsZW4yLCBzZXFfdHlwZV9uYW1lKSkKKyAgICAgICAgICAgIGVs aWYgbGVuMSA8IGxlbjI6CisgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnXG5TZWNvbmQg JXMgY29udGFpbnMgJWQgYWRkaXRpb25hbCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdlbGVtZW50cy5cbicgJSAoc2VxX3R5cGVfbmFtZSwgbGVuMiAtIGxlbjEpKQorICAgICAgICAg ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnRmlyc3QgZXh0 cmEgZWxlbWVudCAlZDpcbiVzXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAobGVuMSwgc2VxMltsZW4xXSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3Is IEluZGV4RXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBk aWZmZXJpbmcgKz0gKCdVbmFibGUgdG8gaW5kZXggZWxlbWVudCAlZCAnCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ29mIHNlY29uZCAlc1xuJyAlIChsZW4xLCBzZXFfdHlwZV9u YW1lKSkKKyAgICAgICAgc3RhbmRhcmRNc2cgPSBkaWZmZXJpbmcKKyAgICAgICAgZGlmZk1zZyA9 ICdcbicgKyAnXG4nLmpvaW4oCisgICAgICAgICAgICBkaWZmbGliLm5kaWZmKHBwcmludC5wZm9y bWF0KHNlcTEpLnNwbGl0bGluZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50 LnBmb3JtYXQoc2VxMikuc3BsaXRsaW5lcygpKSkKKworICAgICAgICBzdGFuZGFyZE1zZyA9IHNl bGYuX3RydW5jYXRlTWVzc2FnZShzdGFuZGFyZE1zZywgZGlmZk1zZykKKyAgICAgICAgbXNnID0g c2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQorICAgICAgICBzZWxmLmZhaWwo bXNnKQorCisgICAgZGVmIF90cnVuY2F0ZU1lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgZGlmZik6Cisg ICAgICAgIG1heF9kaWZmID0gc2VsZi5tYXhEaWZmCisgICAgICAgIGlmIG1heF9kaWZmIGlzIE5v bmUgb3IgbGVuKGRpZmYpIDw9IG1heF9kaWZmOgorICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2Ug KyBkaWZmCisgICAgICAgIHJldHVybiBtZXNzYWdlICsgKERJRkZfT01JVFRFRCAlIGxlbihkaWZm KSkKKworICAgIGRlZiBhc3NlcnRMaXN0RXF1YWwoc2VsZiwgbGlzdDEsIGxpc3QyLCBtc2c9Tm9u ZSk6CisgICAgICAgICIiIkEgbGlzdC1zcGVjaWZpYyBlcXVhbGl0eSBhc3NlcnRpb24uCisKKyAg ICAgICAgQXJnczoKKyAgICAgICAgICAgIGxpc3QxOiBUaGUgZmlyc3QgbGlzdCB0byBjb21wYXJl LgorICAgICAgICAgICAgbGlzdDI6IFRoZSBzZWNvbmQgbGlzdCB0byBjb21wYXJlLgorICAgICAg ICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHRvIHVzZSBvbiBmYWlsdXJlIGluc3RlYWQgb2Yg YSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzLgorCisgICAgICAgICIi IgorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwobGlzdDEsIGxpc3QyLCBtc2csIHNl cV90eXBlPWxpc3QpCisKKyAgICBkZWYgYXNzZXJ0VHVwbGVFcXVhbChzZWxmLCB0dXBsZTEsIHR1 cGxlMiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJBIHR1cGxlLXNwZWNpZmljIGVxdWFsaXR5IGFz c2VydGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgdHVwbGUxOiBUaGUgZmlyc3Qg dHVwbGUgdG8gY29tcGFyZS4KKyAgICAgICAgICAgIHR1cGxlMjogVGhlIHNlY29uZCB0dXBsZSB0 byBjb21wYXJlLgorICAgICAgICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHRvIHVzZSBvbiBm YWlsdXJlIGluc3RlYWQgb2YgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVu Y2VzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHR1cGxl MSwgdHVwbGUyLCBtc2csIHNlcV90eXBlPXR1cGxlKQorCisgICAgZGVmIGFzc2VydFNldEVxdWFs KHNlbGYsIHNldDEsIHNldDIsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiQSBzZXQtc3BlY2lmaWMg ZXF1YWxpdHkgYXNzZXJ0aW9uLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzZXQxOiBU aGUgZmlyc3Qgc2V0IHRvIGNvbXBhcmUuCisgICAgICAgICAgICBzZXQyOiBUaGUgc2Vjb25kIHNl dCB0byBjb21wYXJlLgorICAgICAgICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHRvIHVzZSBv biBmYWlsdXJlIGluc3RlYWQgb2YgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIGRpZmZl cmVuY2VzLgorCisgICAgICAgIGFzc2VydFNldEVxdWFsIHVzZXMgZHVja3R5cGluZyB0byBzdXBw b3J0CisgICAgICAgIGRpZmZlcmVudCB0eXBlcyBvZiBzZXRzLCBhbmQgaXMgb3B0aW1pemVkIGZv ciBzZXRzIHNwZWNpZmljYWxseQorICAgICAgICAocGFyYW1ldGVycyBtdXN0IHN1cHBvcnQgYSBk aWZmZXJlbmNlIG1ldGhvZCkuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAg ICBkaWZmZXJlbmNlMSA9IHNldDEuZGlmZmVyZW5jZShzZXQyKQorICAgICAgICBleGNlcHQgVHlw ZUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdpbnZhbGlkIHR5cGUgd2hlbiBhdHRl bXB0aW5nIHNldCBkaWZmZXJlbmNlOiAlcycgJSBlKQorICAgICAgICBleGNlcHQgQXR0cmlidXRl RXJyb3IsIGU6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZpcnN0IGFyZ3VtZW50IGRvZXMgbm90 IHN1cHBvcnQgc2V0IGRpZmZlcmVuY2U6ICVzJyAlIGUpCisKKyAgICAgICAgdHJ5OgorICAgICAg ICAgICAgZGlmZmVyZW5jZTIgPSBzZXQyLmRpZmZlcmVuY2Uoc2V0MSkKKyAgICAgICAgZXhjZXB0 IFR5cGVFcnJvciwgZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnaW52YWxpZCB0eXBlIHdoZW4g YXR0ZW1wdGluZyBzZXQgZGlmZmVyZW5jZTogJXMnICUgZSkKKyAgICAgICAgZXhjZXB0IEF0dHJp YnV0ZUVycm9yLCBlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdzZWNvbmQgYXJndW1lbnQgZG9l cyBub3Qgc3VwcG9ydCBzZXQgZGlmZmVyZW5jZTogJXMnICUgZSkKKworICAgICAgICBpZiBub3Qg KGRpZmZlcmVuY2UxIG9yIGRpZmZlcmVuY2UyKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAg ICAgIGxpbmVzID0gW10KKyAgICAgICAgaWYgZGlmZmVyZW5jZTE6CisgICAgICAgICAgICBsaW5l cy5hcHBlbmQoJ0l0ZW1zIGluIHRoZSBmaXJzdCBzZXQgYnV0IG5vdCB0aGUgc2Vjb25kOicpCisg ICAgICAgICAgICBmb3IgaXRlbSBpbiBkaWZmZXJlbmNlMToKKyAgICAgICAgICAgICAgICBsaW5l cy5hcHBlbmQocmVwcihpdGVtKSkKKyAgICAgICAgaWYgZGlmZmVyZW5jZTI6CisgICAgICAgICAg ICBsaW5lcy5hcHBlbmQoJ0l0ZW1zIGluIHRoZSBzZWNvbmQgc2V0IGJ1dCBub3QgdGhlIGZpcnN0 OicpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBkaWZmZXJlbmNlMjoKKyAgICAgICAgICAgICAg ICBsaW5lcy5hcHBlbmQocmVwcihpdGVtKSkKKworICAgICAgICBzdGFuZGFyZE1zZyA9ICdcbicu am9pbihsaW5lcykKKyAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBz dGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0SW4oc2VsZiwgbWVtYmVyLCBjb250YWluZXIs IG1zZz1Ob25lKToKKyAgICAgICAgIiIiSnVzdCBsaWtlIHNlbGYuYXNzZXJ0VHJ1ZShhIGluIGIp LCBidXQgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIKKyAgICAgICAgaWYgbWVtYmVy IG5vdCBpbiBjb250YWluZXI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyBub3QgZm91 bmQgaW4gJXMnICUgKHNhZmVfcmVwcihtZW1iZXIpLCAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihjb250YWluZXIpKQorICAgICAg ICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisK KyAgICBkZWYgYXNzZXJ0Tm90SW4oc2VsZiwgbWVtYmVyLCBjb250YWluZXIsIG1zZz1Ob25lKToK KyAgICAgICAgIiIiSnVzdCBsaWtlIHNlbGYuYXNzZXJ0VHJ1ZShhIG5vdCBpbiBiKSwgYnV0IHdp dGggYSBuaWNlciBkZWZhdWx0IG1lc3NhZ2UuIiIiCisgICAgICAgIGlmIG1lbWJlciBpbiBjb250 YWluZXI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyB1bmV4cGVjdGVkbHkgZm91bmQg aW4gJXMnICUgKHNhZmVfcmVwcihtZW1iZXIpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihjb250YWluZXIpKQor ICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1z ZykpCisKKyAgICBkZWYgYXNzZXJ0SXMoc2VsZiwgZXhwcjEsIGV4cHIyLCBtc2c9Tm9uZSk6Cisg ICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSBpcyBiKSwgYnV0IHdpdGggYSBu aWNlciBkZWZhdWx0IG1lc3NhZ2UuIiIiCisgICAgICAgIGlmIGV4cHIxIGlzIG5vdCBleHByMjoK KyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzIGlzIG5vdCAlcycgJSAoc2FmZV9yZXByKGV4 cHIxKSwgc2FmZV9yZXByKGV4cHIyKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3Jt YXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydElzTm90KHNlbGYs IGV4cHIxLCBleHByMiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJKdXN0IGxpa2Ugc2VsZi5hc3Nl cnRUcnVlKGEgaXMgbm90IGIpLCBidXQgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIK KyAgICAgICAgaWYgZXhwcjEgaXMgZXhwcjI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICd1 bmV4cGVjdGVkbHkgaWRlbnRpY2FsOiAlcycgJSAoc2FmZV9yZXByKGV4cHIxKSwpCisgICAgICAg ICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKwor ICAgIGRlZiBhc3NlcnREaWN0RXF1YWwoc2VsZiwgZDEsIGQyLCBtc2c9Tm9uZSk6CisgICAgICAg IHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGQxLCBkaWN0KSwgJ0ZpcnN0IGFyZ3VtZW50IGlzIG5v dCBhIGRpY3Rpb25hcnknKQorICAgICAgICBzZWxmLmFzc2VydF8oaXNpbnN0YW5jZShkMiwgZGlj dCksICdTZWNvbmQgYXJndW1lbnQgaXMgbm90IGEgZGljdGlvbmFyeScpCisKKyAgICAgICAgaWYg ZDEgIT0gZDI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9y ZXByKGQxLCBUcnVlKSwgc2FmZV9yZXByKGQyLCBUcnVlKSkKKyAgICAgICAgICAgIGRpZmYgPSAo J1xuJyArICdcbicuam9pbihkaWZmbGliLm5kaWZmKAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHByaW50LnBmb3JtYXQoZDEpLnNwbGl0bGluZXMoKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBwcmludC5wZm9ybWF0KGQyKS5zcGxpdGxpbmVzKCkpKSkKKyAgICAgICAgICAgIHN0 YW5kYXJkTXNnID0gc2VsZi5fdHJ1bmNhdGVNZXNzYWdlKHN0YW5kYXJkTXNnLCBkaWZmKQorICAg ICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykp CisKKyAgICBkZWYgYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHNlbGYsIGV4cGVjdGVkLCBhY3R1 YWwsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiQ2hlY2tzIHdoZXRoZXIgYWN0dWFsIGlzIGEgc3Vw ZXJzZXQgb2YgZXhwZWN0ZWQuIiIiCisgICAgICAgIG1pc3NpbmcgPSBbXQorICAgICAgICBtaXNt YXRjaGVkID0gW10KKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZXhwZWN0ZWQuaXRlcml0ZW1z KCk6CisgICAgICAgICAgICBpZiBrZXkgbm90IGluIGFjdHVhbDoKKyAgICAgICAgICAgICAgICBt aXNzaW5nLmFwcGVuZChrZXkpCisgICAgICAgICAgICBlbGlmIHZhbHVlICE9IGFjdHVhbFtrZXld OgorICAgICAgICAgICAgICAgIG1pc21hdGNoZWQuYXBwZW5kKCclcywgZXhwZWN0ZWQ6ICVzLCBh Y3R1YWw6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNhZmVfcmVw cihrZXkpLCBzYWZlX3JlcHIodmFsdWUpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2FmZV9yZXByKGFjdHVhbFtrZXldKSkpCisKKyAgICAgICAgaWYgbm90IChtaXNzaW5n IG9yIG1pc21hdGNoZWQpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc3RhbmRhcmRN c2cgPSAnJworICAgICAgICBpZiBtaXNzaW5nOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAn TWlzc2luZzogJXMnICUgJywnLmpvaW4oc2FmZV9yZXByKG0pIGZvciBtIGluIAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmcpCisgICAg ICAgIGlmIG1pc21hdGNoZWQ6CisgICAgICAgICAgICBpZiBzdGFuZGFyZE1zZzoKKyAgICAgICAg ICAgICAgICBzdGFuZGFyZE1zZyArPSAnOyAnCisgICAgICAgICAgICBzdGFuZGFyZE1zZyArPSAn TWlzbWF0Y2hlZCB2YWx1ZXM6ICVzJyAlICcsJy5qb2luKG1pc21hdGNoZWQpCisKKyAgICAgICAg c2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBk ZWYgYXNzZXJ0SXRlbXNFcXVhbChzZWxmLCBleHBlY3RlZF9zZXEsIGFjdHVhbF9zZXEsIG1zZz1O b25lKToKKyAgICAgICAgIiIiQW4gdW5vcmRlcmVkIHNlcXVlbmNlIHNwZWNpZmljIGNvbXBhcmlz b24uIEl0IGFzc2VydHMgdGhhdAorICAgICAgICBleHBlY3RlZF9zZXEgYW5kIGFjdHVhbF9zZXEg Y29udGFpbiB0aGUgc2FtZSBlbGVtZW50cy4gSXQgaXMKKyAgICAgICAgdGhlIGVxdWl2YWxlbnQg b2Y6OgorICAgICAgICAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGV4cGVj dGVkX3NlcSksIHNvcnRlZChhY3R1YWxfc2VxKSkKKworICAgICAgICBSYWlzZXMgd2l0aCBhbiBl cnJvciBtZXNzYWdlIGxpc3Rpbmcgd2hpY2ggZWxlbWVudHMgb2YgZXhwZWN0ZWRfc2VxCisgICAg ICAgIGFyZSBtaXNzaW5nIGZyb20gYWN0dWFsX3NlcSBhbmQgdmljZSB2ZXJzYSBpZiBhbnkuCisg ICAgICAgIAorICAgICAgICBBc3NlcnRzIHRoYXQgZWFjaCBlbGVtZW50IGhhcyB0aGUgc2FtZSBj b3VudCBpbiBib3RoIHNlcXVlbmNlcy4KKyAgICAgICAgRXhhbXBsZToKKyAgICAgICAgICAgIC0g WzAsIDEsIDFdIGFuZCBbMSwgMCwgMV0gY29tcGFyZSBlcXVhbC4KKyAgICAgICAgICAgIC0gWzAs IDAsIDFdIGFuZCBbMCwgMV0gY29tcGFyZSB1bmVxdWFsLgorICAgICAgICAiIiIKKyAgICAgICAg dHJ5OgorICAgICAgICAgICAgZXhwZWN0ZWQgPSBzb3J0ZWQoZXhwZWN0ZWRfc2VxKQorICAgICAg ICAgICAgYWN0dWFsID0gc29ydGVkKGFjdHVhbF9zZXEpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJy b3I6CisgICAgICAgICAgICAjIFVuc29ydGFibGUgaXRlbXMgKGV4YW1wbGU6IHNldCgpLCBjb21w bGV4KCksIC4uLikKKyAgICAgICAgICAgIGV4cGVjdGVkID0gbGlzdChleHBlY3RlZF9zZXEpCisg ICAgICAgICAgICBhY3R1YWwgPSBsaXN0KGFjdHVhbF9zZXEpCisgICAgICAgICAgICBtaXNzaW5n LCB1bmV4cGVjdGVkID0gdW5vcmRlcmFibGVfbGlzdF9kaWZmZXJlbmNlKAorICAgICAgICAgICAg ICAgIGV4cGVjdGVkLCBhY3R1YWwsIGlnbm9yZV9kdXBsaWNhdGU9RmFsc2UKKyAgICAgICAgICAg ICkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmFzc2VydFNlcXVlbmNl RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCwgbXNnPW1zZykKKworICAgICAgICBlcnJvcnMgPSBbXQor ICAgICAgICBpZiBtaXNzaW5nOgorICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgnRXhwZWN0ZWQs IGJ1dCBtaXNzaW5nOlxuICAgICVzJyAlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Fm ZV9yZXByKG1pc3NpbmcpKQorICAgICAgICBpZiB1bmV4cGVjdGVkOgorICAgICAgICAgICAgZXJy b3JzLmFwcGVuZCgnVW5leHBlY3RlZCwgYnV0IHByZXNlbnQ6XG4gICAgJXMnICUgCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIodW5leHBlY3RlZCkpCisgICAgICAgIGlmIGVy cm9yczoKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJ1xuJy5qb2luKGVycm9ycykKKyAgICAg ICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQor CisgICAgZGVmIGFzc2VydE11bHRpTGluZUVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIG1zZz1O b25lKToKKyAgICAgICAgIiIiQXNzZXJ0IHRoYXQgdHdvIG11bHRpLWxpbmUgc3RyaW5ncyBhcmUg ZXF1YWwuIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKGZpcnN0LCBiYXNlc3Ry aW5nKSwgKAorICAgICAgICAgICAgICAgICdGaXJzdCBhcmd1bWVudCBpcyBub3QgYSBzdHJpbmcn KSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKGlzaW5zdGFuY2Uoc2Vjb25kLCBiYXNlc3RyaW5nKSwg KAorICAgICAgICAgICAgICAgICdTZWNvbmQgYXJndW1lbnQgaXMgbm90IGEgc3RyaW5nJykpCisK KyAgICAgICAgaWYgZmlyc3QgIT0gc2Vjb25kOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAn JXMgIT0gJXMnICUgKHNhZmVfcmVwcihmaXJzdCwgVHJ1ZSksIHNhZmVfcmVwcihzZWNvbmQsIFRy dWUpKQorICAgICAgICAgICAgZGlmZiA9ICdcbicgKyAnJy5qb2luKGRpZmZsaWIubmRpZmYoZmly c3Quc3BsaXRsaW5lcyhUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzZWNvbmQuc3BsaXRsaW5lcyhUcnVlKSkpCisgICAgICAgICAg ICBzdGFuZGFyZE1zZyA9IHNlbGYuX3RydW5jYXRlTWVzc2FnZShzdGFuZGFyZE1zZywgZGlmZikK KyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRN c2cpKQorCisgICAgZGVmIGFzc2VydExlc3Moc2VsZiwgYSwgYiwgbXNnPU5vbmUpOgorICAgICAg ICAiIiJKdXN0IGxpa2Ugc2VsZi5hc3NlcnRUcnVlKGEgPCBiKSwgYnV0IHdpdGggYSBuaWNlciBk ZWZhdWx0IG1lc3NhZ2UuIiIiCisgICAgICAgIGlmIG5vdCBhIDwgYjoKKyAgICAgICAgICAgIHN0 YW5kYXJkTXNnID0gJyVzIG5vdCBsZXNzIHRoYW4gJXMnICUgKHNhZmVfcmVwcihhKSwgc2FmZV9y ZXByKGIpKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBz dGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0TGVzc0VxdWFsKHNlbGYsIGEsIGIsIG1zZz1O b25lKToKKyAgICAgICAgIiIiSnVzdCBsaWtlIHNlbGYuYXNzZXJ0VHJ1ZShhIDw9IGIpLCBidXQg d2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIKKyAgICAgICAgaWYgbm90IGEgPD0gYjoK KyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8g JXMnICUgKHNhZmVfcmVwcihhKSwgc2FmZV9yZXByKGIpKQorICAgICAgICAgICAgc2VsZi5mYWls KHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0 R3JlYXRlcihzZWxmLCBhLCBiLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkp1c3QgbGlrZSBzZWxm LmFzc2VydFRydWUoYSA+IGIpLCBidXQgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIK KyAgICAgICAgaWYgbm90IGEgPiBiOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgbm90 IGdyZWF0ZXIgdGhhbiAlcycgJSAoc2FmZV9yZXByKGEpLCBzYWZlX3JlcHIoYikpCisgICAgICAg ICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKwor ICAgIGRlZiBhc3NlcnRHcmVhdGVyRXF1YWwoc2VsZiwgYSwgYiwgbXNnPU5vbmUpOgorICAgICAg ICAiIiJKdXN0IGxpa2Ugc2VsZi5hc3NlcnRUcnVlKGEgPj0gYiksIGJ1dCB3aXRoIGEgbmljZXIg ZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBub3QgYSA+PSBiOgorICAgICAgICAgICAg c3RhbmRhcmRNc2cgPSAnJXMgbm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycgJSAoc2Fm ZV9yZXByKGEpLCBzYWZlX3JlcHIoYikpCisgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9y bWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnRJc05vbmUoc2Vs Ziwgb2JqLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIlNhbWUgYXMgc2VsZi5hc3NlcnRUcnVlKG9i aiBpcyBOb25lKSwgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIKKyAgICAgICAgaWYg b2JqIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgaXMgbm90IE5v bmUnICUgKHNhZmVfcmVwcihvYmopLCkKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3Jt YXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydElzTm90Tm9uZShz ZWxmLCBvYmosIG1zZz1Ob25lKToKKyAgICAgICAgIiIiSW5jbHVkZWQgZm9yIHN5bW1ldHJ5IHdp dGggYXNzZXJ0SXNOb25lLiIiIgorICAgICAgICBpZiBvYmogaXMgTm9uZToKKyAgICAgICAgICAg IHN0YW5kYXJkTXNnID0gJ3VuZXhwZWN0ZWRseSBOb25lJworICAgICAgICAgICAgc2VsZi5mYWls KHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0 SXNJbnN0YW5jZShzZWxmLCBvYmosIGNscywgbXNnPU5vbmUpOgorICAgICAgICAiIiJTYW1lIGFz IHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iaiwgY2xzKSksIHdpdGggYSBuaWNlcgorICAg ICAgICBkZWZhdWx0IG1lc3NhZ2UuIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG9iaiwg Y2xzKToKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzIGlzIG5vdCBhbiBpbnN0YW5jZSBv ZiAlcicgJSAoc2FmZV9yZXByKG9iaiksIGNscykKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxm Ll9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydE5vdElz SW5zdGFuY2Uoc2VsZiwgb2JqLCBjbHMsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiSW5jbHVkZWQg Zm9yIHN5bW1ldHJ5IHdpdGggYXNzZXJ0SXNJbnN0YW5jZS4iIiIKKyAgICAgICAgaWYgaXNpbnN0 YW5jZShvYmosIGNscyk6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyBpcyBhbiBpbnN0 YW5jZSBvZiAlcicgJSAoc2FmZV9yZXByKG9iaiksIGNscykKKyAgICAgICAgICAgIHNlbGYuZmFp bChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2Vy dFJhaXNlc1JlZ2V4cChzZWxmLCBleHBlY3RlZF9leGNlcHRpb24sIGV4cGVjdGVkX3JlZ2V4cCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxhYmxlX29iaj1Ob25lLCAqYXJncywgKipr d2FyZ3MpOgorICAgICAgICAiIiJBc3NlcnRzIHRoYXQgdGhlIG1lc3NhZ2UgaW4gYSByYWlzZWQg ZXhjZXB0aW9uIG1hdGNoZXMgYSByZWdleHAuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAg IGV4cGVjdGVkX2V4Y2VwdGlvbjogRXhjZXB0aW9uIGNsYXNzIGV4cGVjdGVkIHRvIGJlIHJhaXNl ZC4KKyAgICAgICAgICAgIGV4cGVjdGVkX3JlZ2V4cDogUmVnZXhwIChyZSBwYXR0ZXJuIG9iamVj dCBvciBzdHJpbmcpIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIGZvdW5kIGlu IGVycm9yIG1lc3NhZ2UuCisgICAgICAgICAgICBjYWxsYWJsZV9vYmo6IEZ1bmN0aW9uIHRvIGJl IGNhbGxlZC4KKyAgICAgICAgICAgIGFyZ3M6IEV4dHJhIGFyZ3MuCisgICAgICAgICAgICBrd2Fy Z3M6IEV4dHJhIGt3YXJncy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGNhbGxhYmxlX29iaiBp cyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIF9Bc3NlcnRSYWlzZXNDb250ZXh0KGV4cGVjdGVk X2V4Y2VwdGlvbiwgc2VsZiwgZXhwZWN0ZWRfcmVnZXhwKQorICAgICAgICB0cnk6CisgICAgICAg ICAgICBjYWxsYWJsZV9vYmooKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQgZXhwZWN0 ZWRfZXhjZXB0aW9uLCBleGNfdmFsdWU6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4cGVj dGVkX3JlZ2V4cCwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXhw ID0gcmUuY29tcGlsZShleHBlY3RlZF9yZWdleHApCisgICAgICAgICAgICBpZiBub3QgZXhwZWN0 ZWRfcmVnZXhwLnNlYXJjaChzdHIoZXhjX3ZhbHVlKSk6CisgICAgICAgICAgICAgICAgcmFpc2Ug c2VsZi5mYWlsdXJlRXhjZXB0aW9uKCciJXMiIGRvZXMgbm90IG1hdGNoICIlcyInICUKKyAgICAg ICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRfcmVnZXhwLnBhdHRlcm4sIHN0cihleGNfdmFs dWUpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoZXhwZWN0ZWRfZXhj ZXB0aW9uLCAnX19uYW1lX18nKTogCisgICAgICAgICAgICAgICAgZXhjTmFtZSA9IGV4cGVjdGVk X2V4Y2VwdGlvbi5fX25hbWVfXworICAgICAgICAgICAgZWxzZTogCisgICAgICAgICAgICAgICAg ZXhjTmFtZSA9IHN0cihleHBlY3RlZF9leGNlcHRpb24pCisgICAgICAgICAgICByYWlzZSBzZWxm LmZhaWx1cmVFeGNlcHRpb24sICIlcyBub3QgcmFpc2VkIiAlIGV4Y05hbWUKKworCisgICAgZGVm IGFzc2VydFJlZ2V4cE1hdGNoZXMoc2VsZiwgdGV4dCwgZXhwZWN0ZWRfcmVnZXhwLCBtc2c9Tm9u ZSk6CisgICAgICAgICIiIkZhaWwgdGhlIHRlc3QgdW5sZXNzIHRoZSB0ZXh0IG1hdGNoZXMgdGhl IHJlZ3VsYXIgZXhwcmVzc2lvbi4iIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3RlZF9y ZWdleHAsIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXhwID0gcmUuY29t cGlsZShleHBlY3RlZF9yZWdleHApCisgICAgICAgIGlmIG5vdCBleHBlY3RlZF9yZWdleHAuc2Vh cmNoKHRleHQpOgorICAgICAgICAgICAgbXNnID0gbXNnIG9yICJSZWdleHAgZGlkbid0IG1hdGNo IgorICAgICAgICAgICAgbXNnID0gJyVzOiAlciBub3QgZm91bmQgaW4gJXInICUgKG1zZywgZXhw ZWN0ZWRfcmVnZXhwLnBhdHRlcm4sIHRleHQpCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1 cmVFeGNlcHRpb24obXNnKQorCisgICAgZGVmIGFzc2VydE5vdFJlZ2V4cE1hdGNoZXMoc2VsZiwg dGV4dCwgdW5leHBlY3RlZF9yZWdleHAsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiRmFpbCB0aGUg dGVzdCBpZiB0aGUgdGV4dCBtYXRjaGVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uIiIiCisgICAg ICAgIGlmIGlzaW5zdGFuY2UodW5leHBlY3RlZF9yZWdleHAsIGJhc2VzdHJpbmcpOgorICAgICAg ICAgICAgdW5leHBlY3RlZF9yZWdleHAgPSByZS5jb21waWxlKHVuZXhwZWN0ZWRfcmVnZXhwKQor ICAgICAgICBtYXRjaCA9IHVuZXhwZWN0ZWRfcmVnZXhwLnNlYXJjaCh0ZXh0KQorICAgICAgICBp ZiBtYXRjaDoKKyAgICAgICAgICAgIG1zZyA9IG1zZyBvciAiUmVnZXhwIG1hdGNoZWQiCisgICAg ICAgICAgICBtc2cgPSAnJXM6ICVyIG1hdGNoZXMgJXIgaW4gJXInICUgKG1zZywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFttYXRjaC5zdGFydCgp Om1hdGNoLmVuZCgpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5leHBlY3RlZF9yZWdleHAucGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCkKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFp bHVyZUV4Y2VwdGlvbihtc2cpCisKK2NsYXNzIEZ1bmN0aW9uVGVzdENhc2UoVGVzdENhc2UpOgor ICAgICIiIkEgdGVzdCBjYXNlIHRoYXQgd3JhcHMgYSB0ZXN0IGZ1bmN0aW9uLgorCisgICAgVGhp cyBpcyB1c2VmdWwgZm9yIHNsaXBwaW5nIHByZS1leGlzdGluZyB0ZXN0IGZ1bmN0aW9ucyBpbnRv IHRoZQorICAgIHVuaXR0ZXN0IGZyYW1ld29yay4gT3B0aW9uYWxseSwgc2V0LXVwIGFuZCB0aWR5 LXVwIGZ1bmN0aW9ucyBjYW4gYmUKKyAgICBzdXBwbGllZC4gQXMgd2l0aCBUZXN0Q2FzZSwgdGhl IHRpZHktdXAgKCd0ZWFyRG93bicpIGZ1bmN0aW9uIHdpbGwKKyAgICBhbHdheXMgYmUgY2FsbGVk IGlmIHRoZSBzZXQtdXAgKCdzZXRVcCcpIGZ1bmN0aW9uIHJhbiBzdWNjZXNzZnVsbHkuCisgICAg IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdEZ1bmMsIHNldFVwPU5vbmUsIHRlYXJE b3duPU5vbmUsIGRlc2NyaXB0aW9uPU5vbmUpOgorICAgICAgICBzdXBlcihGdW5jdGlvblRlc3RD YXNlLCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYuX3NldFVwRnVuYyA9IHNldFVwCisg ICAgICAgIHNlbGYuX3RlYXJEb3duRnVuYyA9IHRlYXJEb3duCisgICAgICAgIHNlbGYuX3Rlc3RG dW5jID0gdGVzdEZ1bmMKKyAgICAgICAgc2VsZi5fZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgor CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9zZXRVcEZ1bmMgaXMgbm90 IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zZXRVcEZ1bmMoKQorCisgICAgZGVmIHRlYXJEb3du KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl90ZWFyRG93bkZ1bmMgaXMgbm90IE5vbmU6CisgICAg ICAgICAgICBzZWxmLl90ZWFyRG93bkZ1bmMoKQorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6Cisg ICAgICAgIHNlbGYuX3Rlc3RGdW5jKCkKKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgcmV0 dXJuIHNlbGYuX3Rlc3RGdW5jLl9fbmFtZV9fCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVy KToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKToKKyAg ICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIHJldHVybiBzZWxmLl9z ZXRVcEZ1bmMgPT0gb3RoZXIuX3NldFVwRnVuYyBhbmQgXAorICAgICAgICAgICAgICAgc2VsZi5f dGVhckRvd25GdW5jID09IG90aGVyLl90ZWFyRG93bkZ1bmMgYW5kIFwKKyAgICAgICAgICAgICAg IHNlbGYuX3Rlc3RGdW5jID09IG90aGVyLl90ZXN0RnVuYyBhbmQgXAorICAgICAgICAgICAgICAg c2VsZi5fZGVzY3JpcHRpb24gPT0gb3RoZXIuX2Rlc2NyaXB0aW9uCisKKyAgICBkZWYgX19uZV9f KHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCisKKyAgICBk ZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKCh0eXBlKHNlbGYpLCBzZWxm Ll9zZXRVcEZ1bmMsIHNlbGYuX3RlYXJEb3duRnVuYywKKyAgICAgICAgICAgICAgICAgICAgIHNl bGYuX3Rlc3RGdW5jLCBzZWxmLl9kZXNjcmlwdGlvbikpCisKKyAgICBkZWYgX19zdHJfXyhzZWxm KToKKyAgICAgICAgcmV0dXJuICIlcyAoJXMpIiAlIChzdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdEZ1bmMuX19uYW1lX18pCisK KyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPCVzIHRlc3RGdW5jPSVz PiIgJSAoc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNlbGYuX3Rlc3RGdW5jKQorCisgICAgZGVmIHNob3J0RGVzY3JpcHRpb24o c2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Rlc2NyaXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAg ICAgICAgcmV0dXJuIHNlbGYuX2Rlc2NyaXB0aW9uCisgICAgICAgIGRvYyA9IHNlbGYuX3Rlc3RG dW5jLl9fZG9jX18KKyAgICAgICAgcmV0dXJuIGRvYyBhbmQgZG9jLnNwbGl0KCJcbiIpWzBdLnN0 cmlwKCkgb3IgTm9uZQoKPT09IGFkZGVkIGZpbGUgJ3N0b3JhZ2UvbmRiL21jYy90c3QvdW5pdHRl c3QyL2NvbGxlY3Rvci5weScKLS0tIGEvc3RvcmFnZS9uZGIvbWNjL3RzdC91bml0dGVzdDIvY29s bGVjdG9yLnB5CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGIvc3RvcmFnZS9uZGIvbWNj L3RzdC91bml0dGVzdDIvY29sbGVjdG9yLnB5CTIwMTItMTEtMTkgMTM6MDA6NDQgKzAwMDAKQEAg LTAsMCArMSw5IEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gdW5pdHRlc3QyLmxvYWRl ciBpbXBvcnQgZGVmYXVsdFRlc3RMb2FkZXIKKworZGVmIGNvbGxlY3RvcigpOgorICAgICMgaW1w b3J0IF9fbWFpbl9fIHRyaWdnZXJzIGNvZGUgcmUtZXhlY3V0aW9uCisgICAgX19tYWluX18gPSBz eXMubW9kdWxlc1snX19tYWluX18nXQorICAgIHNldHVwRGlyID0gb3MucGF0aC5hYnNwYXRoKG9z LnBhdGguZGlybmFtZShfX21haW5fXy5fX2ZpbGVfXykpCisgICAgcmV0dXJuIGRlZmF1bHRUZXN0 TG9hZGVyLmRpc2NvdmVyKHNldHVwRGlyKQoKPT09IGFkZGVkIGZpbGUgJ3N0b3JhZ2UvbmRiL21j Yy90c3QvdW5pdHRlc3QyL2NvbXBhdGliaWxpdHkucHknCi0tLSBhL3N0b3JhZ2UvbmRiL21jYy90 c3QvdW5pdHRlc3QyL2NvbXBhdGliaWxpdHkucHkJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMAor KysgYi9zdG9yYWdlL25kYi9tY2MvdHN0L3VuaXR0ZXN0Mi9jb21wYXRpYmlsaXR5LnB5CTIwMTIt MTEtMTkgMTM6MDA6NDQgKzAwMDAKQEAgLTAsMCArMSw2NCBAQAoraW1wb3J0IG9zCitpbXBvcnQg c3lzCisKK3RyeToKKyAgICBmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKK2V4Y2VwdCBJbXBv cnRFcnJvcjoKKyAgICAjIG9ubHkgbmVlZGVkIGZvciBQeXRob24gMi40CisgICAgZGVmIHdyYXBz KF8pOgorICAgICAgICBkZWYgX3dyYXBzKGZ1bmMpOgorICAgICAgICAgICAgcmV0dXJuIGZ1bmMK KyAgICAgICAgcmV0dXJuIF93cmFwcworCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCitkZWYgX3JlbHBh dGhfbnQocGF0aCwgc3RhcnQ9b3MucGF0aC5jdXJkaXIpOgorICAgICIiIlJldHVybiBhIHJlbGF0 aXZlIHZlcnNpb24gb2YgYSBwYXRoIiIiCisKKyAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgcmFp c2UgVmFsdWVFcnJvcigibm8gcGF0aCBzcGVjaWZpZWQiKQorICAgIHN0YXJ0X2xpc3QgPSBvcy5w YXRoLmFic3BhdGgoc3RhcnQpLnNwbGl0KG9zLnBhdGguc2VwKQorICAgIHBhdGhfbGlzdCA9IG9z LnBhdGguYWJzcGF0aChwYXRoKS5zcGxpdChvcy5wYXRoLnNlcCkKKyAgICBpZiBzdGFydF9saXN0 WzBdLmxvd2VyKCkgIT0gcGF0aF9saXN0WzBdLmxvd2VyKCk6CisgICAgICAgIHVuY19wYXRoLCBy ZXN0ID0gb3MucGF0aC5zcGxpdHVuYyhwYXRoKQorICAgICAgICB1bmNfc3RhcnQsIHJlc3QgPSBv cy5wYXRoLnNwbGl0dW5jKHN0YXJ0KQorICAgICAgICBpZiBib29sKHVuY19wYXRoKSBeIGJvb2wo dW5jX3N0YXJ0KToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBtaXggVU5D IGFuZCBub24tVU5DIHBhdGhzICglcyBhbmQgJXMpIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBhdGgsIHN0YXJ0KSkK KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBhdGggaXMgb24g ZHJpdmUgJXMsIHN0YXJ0IG9uIGRyaXZlICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJSAocGF0aF9saXN0WzBdLCBzdGFydF9saXN0WzBdKSkKKyAg ICAjIFdvcmsgb3V0IGhvdyBtdWNoIG9mIHRoZSBmaWxlcGF0aCBpcyBzaGFyZWQgYnkgc3RhcnQg YW5kIHBhdGguCisgICAgZm9yIGkgaW4gcmFuZ2UobWluKGxlbihzdGFydF9saXN0KSwgbGVuKHBh dGhfbGlzdCkpKToKKyAgICAgICAgaWYgc3RhcnRfbGlzdFtpXS5sb3dlcigpICE9IHBhdGhfbGlz dFtpXS5sb3dlcigpOgorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBpICs9 IDEKKworICAgIHJlbF9saXN0ID0gW29zLnBhdGgucGFyZGlyXSAqIChsZW4oc3RhcnRfbGlzdCkt aSkgKyBwYXRoX2xpc3RbaTpdCisgICAgaWYgbm90IHJlbF9saXN0OgorICAgICAgICByZXR1cm4g b3MucGF0aC5jdXJkaXIKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKCpyZWxfbGlzdCkKKworIyBk ZWZhdWx0IHRvIHBvc2l4cGF0aCBkZWZpbml0aW9uCitkZWYgX3JlbHBhdGhfcG9zaXgocGF0aCwg c3RhcnQ9b3MucGF0aC5jdXJkaXIpOgorICAgICIiIlJldHVybiBhIHJlbGF0aXZlIHZlcnNpb24g b2YgYSBwYXRoIiIiCisKKyAgICBpZiBub3QgcGF0aDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJv cigibm8gcGF0aCBzcGVjaWZpZWQiKQorICAgIAorICAgIHN0YXJ0X2xpc3QgPSBvcy5wYXRoLmFi c3BhdGgoc3RhcnQpLnNwbGl0KG9zLnBhdGguc2VwKQorICAgIHBhdGhfbGlzdCA9IG9zLnBhdGgu YWJzcGF0aChwYXRoKS5zcGxpdChvcy5wYXRoLnNlcCkKKworICAgICMgV29yayBvdXQgaG93IG11 Y2ggb2YgdGhlIGZpbGVwYXRoIGlzIHNoYXJlZCBieSBzdGFydCBhbmQgcGF0aC4KKyAgICBpID0g bGVuKG9zLnBhdGguY29tbW9ucHJlZml4KFtzdGFydF9saXN0LCBwYXRoX2xpc3RdKSkKKworICAg IHJlbF9saXN0ID0gW29zLnBhdGgucGFyZGlyXSAqIChsZW4oc3RhcnRfbGlzdCktaSkgKyBwYXRo X2xpc3RbaTpdCisgICAgaWYgbm90IHJlbF9saXN0OgorICAgICAgICByZXR1cm4gb3MucGF0aC5j dXJkaXIKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKCpyZWxfbGlzdCkKKworaWYgb3MucGF0aCBp cyBzeXMubW9kdWxlcy5nZXQoJ250cGF0aCcpOgorICAgIHJlbHBhdGggPSBfcmVscGF0aF9udAor ZWxzZToKKyAgICByZWxwYXRoID0gX3JlbHBhdGhfcG9zaXgKCj09PSBhZGRlZCBmaWxlICdzdG9y YWdlL25kYi9tY2MvdHN0L3VuaXR0ZXN0Mi9sb2FkZXIucHknCi0tLSBhL3N0b3JhZ2UvbmRiL21j Yy90c3QvdW5pdHRlc3QyL2xvYWRlci5weQkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBi L3N0b3JhZ2UvbmRiL21jYy90c3QvdW5pdHRlc3QyL2xvYWRlci5weQkyMDEyLTExLTE5IDEzOjAw OjQ0ICswMDAwCkBAIC0wLDAgKzEsMzIyIEBACisiIiJMb2FkaW5nIHVuaXR0ZXN0cy4iIiIKKwor aW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9y dCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaAor Citmcm9tIHVuaXR0ZXN0MiBpbXBvcnQgY2FzZSwgc3VpdGUKKwordHJ5OgorICAgIGZyb20gb3Mu cGF0aCBpbXBvcnQgcmVscGF0aAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gdW5pdHRl c3QyLmNvbXBhdGliaWxpdHkgaW1wb3J0IHJlbHBhdGgKKworX191bml0dGVzdCA9IFRydWUKKwor CitkZWYgX0NtcFRvS2V5KG15Y21wKToKKyAgICAnQ29udmVydCBhIGNtcD0gZnVuY3Rpb24gaW50 byBhIGtleT0gZnVuY3Rpb24nCisgICAgY2xhc3MgSyhvYmplY3QpOgorICAgICAgICBkZWYgX19p bml0X18oc2VsZiwgb2JqKToKKyAgICAgICAgICAgIHNlbGYub2JqID0gb2JqCisgICAgICAgIGRl ZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIG15Y21wKHNlbGYub2Jq LCBvdGhlci5vYmopID09IC0xCisgICAgcmV0dXJuIEsKKworCisjIHdoYXQgYWJvdXQgLnB5YyBv ciAucHlvIChldGMpCisjIHdlIHdvdWxkIG5lZWQgdG8gYXZvaWQgbG9hZGluZyB0aGUgc2FtZSB0 ZXN0cyBtdWx0aXBsZSB0aW1lcworIyBmcm9tICcucHknLCAnLnB5YycgKmFuZCogJy5weW8nCitW QUxJRF9NT0RVTEVfTkFNRSA9IHJlLmNvbXBpbGUocidbX2Etel1cdypcLnB5JCcsIHJlLklHTk9S RUNBU0UpCisKKworZGVmIF9tYWtlX2ZhaWxlZF9pbXBvcnRfdGVzdChuYW1lLCBzdWl0ZUNsYXNz KToKKyAgICBtZXNzYWdlID0gJ0ZhaWxlZCB0byBpbXBvcnQgdGVzdCBtb2R1bGU6ICVzJyAlIG5h bWUKKyAgICBpZiBoYXNhdHRyKHRyYWNlYmFjaywgJ2Zvcm1hdF9leGMnKToKKyAgICAgICAgIyBQ eXRob24gMi4zIGNvbXBhdGliaWxpdHkKKyAgICAgICAgIyBmb3JtYXRfZXhjIHJldHVybnMgdHdv IGZyYW1lcyBvZiBkaXNjb3Zlci5weSBhcyB3ZWxsCisgICAgICAgIG1lc3NhZ2UgKz0gJ1xuJXMn ICUgdHJhY2ViYWNrLmZvcm1hdF9leGMoKQorICAgIHJldHVybiBfbWFrZV9mYWlsZWRfdGVzdCgn TW9kdWxlSW1wb3J0RmFpbHVyZScsIG5hbWUsIEltcG9ydEVycm9yKG1lc3NhZ2UpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZUNsYXNzKQorCitkZWYgX21ha2VfZmFpbGVkX2xv YWRfdGVzdHMobmFtZSwgZXhjZXB0aW9uLCBzdWl0ZUNsYXNzKToKKyAgICByZXR1cm4gX21ha2Vf ZmFpbGVkX3Rlc3QoJ0xvYWRUZXN0c0ZhaWx1cmUnLCBuYW1lLCBleGNlcHRpb24sIHN1aXRlQ2xh c3MpCisKK2RlZiBfbWFrZV9mYWlsZWRfdGVzdChjbGFzc25hbWUsIG1ldGhvZG5hbWUsIGV4Y2Vw dGlvbiwgc3VpdGVDbGFzcyk6CisgICAgZGVmIHRlc3RGYWlsdXJlKHNlbGYpOgorICAgICAgICBy YWlzZSBleGNlcHRpb24KKyAgICBhdHRycyA9IHttZXRob2RuYW1lOiB0ZXN0RmFpbHVyZX0KKyAg ICBUZXN0Q2xhc3MgPSB0eXBlKGNsYXNzbmFtZSwgKGNhc2UuVGVzdENhc2UsKSwgYXR0cnMpCisg ICAgcmV0dXJuIHN1aXRlQ2xhc3MoKFRlc3RDbGFzcyhtZXRob2RuYW1lKSwpKQorICAgIAorCitj bGFzcyBUZXN0TG9hZGVyKHVuaXR0ZXN0LlRlc3RMb2FkZXIpOgorICAgICIiIgorICAgIFRoaXMg Y2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgdGVzdHMgYWNjb3JkaW5nIHRvIHZhcmlv dXMgY3JpdGVyaWEKKyAgICBhbmQgcmV0dXJuaW5nIHRoZW0gd3JhcHBlZCBpbiBhIFRlc3RTdWl0 ZQorICAgICIiIgorICAgIHRlc3RNZXRob2RQcmVmaXggPSAndGVzdCcKKyAgICBzb3J0VGVzdE1l dGhvZHNVc2luZyA9IGNtcAorICAgIHN1aXRlQ2xhc3MgPSBzdWl0ZS5UZXN0U3VpdGUKKyAgICBf dG9wX2xldmVsX2RpciA9IE5vbmUKKworICAgIGRlZiBsb2FkVGVzdHNGcm9tVGVzdENhc2Uoc2Vs ZiwgdGVzdENhc2VDbGFzcyk6CisgICAgICAgICIiIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0 cyBjYXNlcyBjb250YWluZWQgaW4gdGVzdENhc2VDbGFzcyIiIgorICAgICAgICBpZiBpc3N1YmNs YXNzKHRlc3RDYXNlQ2xhc3MsIHN1aXRlLlRlc3RTdWl0ZSk6CisgICAgICAgICAgICByYWlzZSBU eXBlRXJyb3IoIlRlc3QgY2FzZXMgc2hvdWxkIG5vdCBiZSBkZXJpdmVkIGZyb20gVGVzdFN1aXRl LiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIE1heWJlIHlvdSBtZWFudCB0byBkZXJp dmUgZnJvbSBUZXN0Q2FzZT8iKQorICAgICAgICB0ZXN0Q2FzZU5hbWVzID0gc2VsZi5nZXRUZXN0 Q2FzZU5hbWVzKHRlc3RDYXNlQ2xhc3MpCisgICAgICAgIGlmIG5vdCB0ZXN0Q2FzZU5hbWVzIGFu ZCBoYXNhdHRyKHRlc3RDYXNlQ2xhc3MsICdydW5UZXN0Jyk6CisgICAgICAgICAgICB0ZXN0Q2Fz ZU5hbWVzID0gWydydW5UZXN0J10KKyAgICAgICAgbG9hZGVkX3N1aXRlID0gc2VsZi5zdWl0ZUNs YXNzKG1hcCh0ZXN0Q2FzZUNsYXNzLCB0ZXN0Q2FzZU5hbWVzKSkKKyAgICAgICAgcmV0dXJuIGxv YWRlZF9zdWl0ZQorCisgICAgZGVmIGxvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZiwgbW9kdWxlLCB1 c2VfbG9hZF90ZXN0cz1UcnVlKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRl c3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgZ2l2ZW4gbW9kdWxlIiIiCisgICAgICAgIHRlc3Rz ID0gW10KKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyKG1vZHVsZSk6CisgICAgICAgICAgICBvYmog PSBnZXRhdHRyKG1vZHVsZSwgbmFtZSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB0 eXBlKSBhbmQgaXNzdWJjbGFzcyhvYmosIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAg ICAgICB0ZXN0cy5hcHBlbmQoc2VsZi5sb2FkVGVzdHNGcm9tVGVzdENhc2Uob2JqKSkKKworICAg ICAgICBsb2FkX3Rlc3RzID0gZ2V0YXR0cihtb2R1bGUsICdsb2FkX3Rlc3RzJywgTm9uZSkKKyAg ICAgICAgdGVzdHMgPSBzZWxmLnN1aXRlQ2xhc3ModGVzdHMpCisgICAgICAgIGlmIHVzZV9sb2Fk X3Rlc3RzIGFuZCBsb2FkX3Rlc3RzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAg ICAgICAgICAgICAgIHJldHVybiBsb2FkX3Rlc3RzKHNlbGYsIHRlc3RzLCBOb25lKQorICAgICAg ICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgICAgICAgICByZXR1cm4gX21ha2Vf ZmFpbGVkX2xvYWRfdGVzdHMobW9kdWxlLl9fbmFtZV9fLCBlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN1aXRlQ2xhc3MpCisgICAgICAgIHJl dHVybiB0ZXN0cworCisgICAgZGVmIGxvYWRUZXN0c0Zyb21OYW1lKHNlbGYsIG5hbWUsIG1vZHVs ZT1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGdp dmVuIGEgc3RyaW5nIHNwZWNpZmllci4KKworICAgICAgICBUaGUgbmFtZSBtYXkgcmVzb2x2ZSBl aXRoZXIgdG8gYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhCisgICAgICAgIHRlc3QgbWV0 aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2gK KyAgICAgICAgcmV0dXJucyBhIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4KKworICAg ICAgICBUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgdGhlIG5hbWVzIHJlbGF0aXZlIHRv IGEgZ2l2ZW4gbW9kdWxlLgorICAgICAgICAiIiIKKyAgICAgICAgcGFydHMgPSBuYW1lLnNwbGl0 KCcuJykKKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICBwYXJ0c19jb3B5 ID0gcGFydHNbOl0KKyAgICAgICAgICAgIHdoaWxlIHBhcnRzX2NvcHk6CisgICAgICAgICAgICAg ICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKCcuJy5qb2lu KHBhcnRzX2NvcHkpKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAg IGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZGVsIHBhcnRzX2NvcHlb LTFdCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJ0c19jb3B5OgorICAgICAgICAgICAg ICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHBhcnRzID0gcGFydHNbMTpdCisgICAgICAg IG9iaiA9IG1vZHVsZQorICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgIHBh cmVudCwgb2JqID0gb2JqLCBnZXRhdHRyKG9iaiwgcGFydCkKKworICAgICAgICBpZiBpc2luc3Rh bmNlKG9iaiwgdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5sb2Fk VGVzdHNGcm9tTW9kdWxlKG9iaikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgdHlwZSkg YW5kIGlzc3ViY2xhc3Mob2JqLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICByZXR1 cm4gc2VsZi5sb2FkVGVzdHNGcm9tVGVzdENhc2Uob2JqKQorICAgICAgICBlbGlmIChpc2luc3Rh bmNlKG9iaiwgdHlwZXMuVW5ib3VuZE1ldGhvZFR5cGUpIGFuZAorICAgICAgICAgICAgICBpc2lu c3RhbmNlKHBhcmVudCwgdHlwZSkgYW5kCisgICAgICAgICAgICAgIGlzc3ViY2xhc3MocGFyZW50 LCBjYXNlLlRlc3RDYXNlKSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKFtw YXJlbnQob2JqLl9fbmFtZV9fKV0pCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIHVuaXR0 ZXN0LlRlc3RTdWl0ZSk6CisgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgIGVsaWYgaGFz YXR0cihvYmosICdfX2NhbGxfXycpOgorICAgICAgICAgICAgdGVzdCA9IG9iaigpCisgICAgICAg ICAgICBpZiBpc2luc3RhbmNlKHRlc3QsIHVuaXR0ZXN0LlRlc3RTdWl0ZSk6CisgICAgICAgICAg ICAgICAgcmV0dXJuIHRlc3QKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0ZXN0LCB1bml0 dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcyhb dGVzdF0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJv cigiY2FsbGluZyAlcyByZXR1cm5lZCAlcywgbm90IGEgdGVzdCIgJQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAob2JqLCB0ZXN0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg IHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gbWFrZSB0ZXN0IGZyb206ICVzIiAl IG9iaikKKworICAgIGRlZiBsb2FkVGVzdHNGcm9tTmFtZXMoc2VsZiwgbmFtZXMsIG1vZHVsZT1O b25lKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGZvdW5k IHVzaW5nIHRoZSBnaXZlbiBzZXF1ZW5jZQorICAgICAgICBvZiBzdHJpbmcgc3BlY2lmaWVycy4g U2VlICdsb2FkVGVzdHNGcm9tTmFtZSgpJy4KKyAgICAgICAgIiIiCisgICAgICAgIHN1aXRlcyA9 IFtzZWxmLmxvYWRUZXN0c0Zyb21OYW1lKG5hbWUsIG1vZHVsZSkgZm9yIG5hbWUgaW4gbmFtZXNd CisgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3Moc3VpdGVzKQorCisgICAgZGVmIGdldFRl c3RDYXNlTmFtZXMoc2VsZiwgdGVzdENhc2VDbGFzcyk6CisgICAgICAgICIiIlJldHVybiBhIHNv cnRlZCBzZXF1ZW5jZSBvZiBtZXRob2QgbmFtZXMgZm91bmQgd2l0aGluIHRlc3RDYXNlQ2xhc3MK KyAgICAgICAgIiIiCisgICAgICAgIGRlZiBpc1Rlc3RNZXRob2QoYXR0cm5hbWUsIHRlc3RDYXNl Q2xhc3M9dGVzdENhc2VDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9c2Vs Zi50ZXN0TWV0aG9kUHJlZml4KToKKyAgICAgICAgICAgIHJldHVybiBhdHRybmFtZS5zdGFydHN3 aXRoKHByZWZpeCkgYW5kIFwKKyAgICAgICAgICAgICAgICBoYXNhdHRyKGdldGF0dHIodGVzdENh c2VDbGFzcywgYXR0cm5hbWUpLCAnX19jYWxsX18nKQorICAgICAgICB0ZXN0Rm5OYW1lcyA9IGZp bHRlcihpc1Rlc3RNZXRob2QsIGRpcih0ZXN0Q2FzZUNsYXNzKSkKKyAgICAgICAgaWYgc2VsZi5z b3J0VGVzdE1ldGhvZHNVc2luZzoKKyAgICAgICAgICAgIHRlc3RGbk5hbWVzLnNvcnQoa2V5PV9D bXBUb0tleShzZWxmLnNvcnRUZXN0TWV0aG9kc1VzaW5nKSkKKyAgICAgICAgcmV0dXJuIHRlc3RG bk5hbWVzCisKKyAgICBkZWYgZGlzY292ZXIoc2VsZiwgc3RhcnRfZGlyLCBwYXR0ZXJuPSd0ZXN0 Ki5weScsIHRvcF9sZXZlbF9kaXI9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgYW5kIHJldHVybiBh bGwgdGVzdCBtb2R1bGVzIGZyb20gdGhlIHNwZWNpZmllZCBzdGFydAorICAgICAgICBkaXJlY3Rv cnksIHJlY3Vyc2luZyBpbnRvIHN1YmRpcmVjdG9yaWVzIHRvIGZpbmQgdGhlbS4gT25seSB0ZXN0 IGZpbGVzCisgICAgICAgIHRoYXQgbWF0Y2ggdGhlIHBhdHRlcm4gd2lsbCBiZSBsb2FkZWQuIChV c2luZyBzaGVsbCBzdHlsZSBwYXR0ZXJuCisgICAgICAgIG1hdGNoaW5nLikKKworICAgICAgICBB bGwgdGVzdCBtb2R1bGVzIG11c3QgYmUgaW1wb3J0YWJsZSBmcm9tIHRoZSB0b3AgbGV2ZWwgb2Yg dGhlIHByb2plY3QuCisgICAgICAgIElmIHRoZSBzdGFydCBkaXJlY3RvcnkgaXMgbm90IHRoZSB0 b3AgbGV2ZWwgZGlyZWN0b3J5IHRoZW4gdGhlIHRvcAorICAgICAgICBsZXZlbCBkaXJlY3Rvcnkg bXVzdCBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseS4KKworICAgICAgICBJZiBhIHRlc3QgcGFja2Fn ZSBuYW1lIChkaXJlY3Rvcnkgd2l0aCAnX19pbml0X18ucHknKSBtYXRjaGVzIHRoZQorICAgICAg ICBwYXR0ZXJuIHRoZW4gdGhlIHBhY2thZ2Ugd2lsbCBiZSBjaGVja2VkIGZvciBhICdsb2FkX3Rl c3RzJyBmdW5jdGlvbi4gSWYKKyAgICAgICAgdGhpcyBleGlzdHMgdGhlbiBpdCB3aWxsIGJlIGNh bGxlZCB3aXRoIGxvYWRlciwgdGVzdHMsIHBhdHRlcm4uCisKKyAgICAgICAgSWYgbG9hZF90ZXN0 cyBleGlzdHMgdGhlbiBkaXNjb3ZlcnkgZG9lcyAgKm5vdCogcmVjdXJzZSBpbnRvIHRoZSBwYWNr YWdlLAorICAgICAgICBsb2FkX3Rlc3RzIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIGFsbCB0 ZXN0cyBpbiB0aGUgcGFja2FnZS4KKworICAgICAgICBUaGUgcGF0dGVybiBpcyBkZWxpYmVyYXRl bHkgbm90IHN0b3JlZCBhcyBhIGxvYWRlciBhdHRyaWJ1dGUgc28gdGhhdAorICAgICAgICBwYWNr YWdlcyBjYW4gY29udGludWUgZGlzY292ZXJ5IHRoZW1zZWx2ZXMuIHRvcF9sZXZlbF9kaXIgaXMg c3RvcmVkIHNvCisgICAgICAgIGxvYWRfdGVzdHMgZG9lcyBub3QgbmVlZCB0byBwYXNzIHRoaXMg YXJndW1lbnQgaW4gdG8gbG9hZGVyLmRpc2NvdmVyKCkuCisgICAgICAgICIiIgorICAgICAgICBz ZXRfaW1wbGljaXRfdG9wID0gRmFsc2UKKyAgICAgICAgaWYgdG9wX2xldmVsX2RpciBpcyBOb25l IGFuZCBzZWxmLl90b3BfbGV2ZWxfZGlyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBtYWtl IHRvcF9sZXZlbF9kaXIgb3B0aW9uYWwgaWYgY2FsbGVkIGZyb20gbG9hZF90ZXN0cyBpbiBhIHBh Y2thZ2UKKyAgICAgICAgICAgIHRvcF9sZXZlbF9kaXIgPSBzZWxmLl90b3BfbGV2ZWxfZGlyCisg ICAgICAgIGVsaWYgdG9wX2xldmVsX2RpciBpcyBOb25lOgorICAgICAgICAgICAgc2V0X2ltcGxp Y2l0X3RvcCA9IFRydWUKKyAgICAgICAgICAgIHRvcF9sZXZlbF9kaXIgPSBzdGFydF9kaXIKKwor ICAgICAgICB0b3BfbGV2ZWxfZGlyID0gb3MucGF0aC5hYnNwYXRoKHRvcF9sZXZlbF9kaXIpCisK KyAgICAgICAgaWYgbm90IHRvcF9sZXZlbF9kaXIgaW4gc3lzLnBhdGg6CisgICAgICAgICAgICAj IGFsbCB0ZXN0IG1vZHVsZXMgbXVzdCBiZSBpbXBvcnRhYmxlIGZyb20gdGhlIHRvcCBsZXZlbCBk aXJlY3RvcnkKKyAgICAgICAgICAgICMgc2hvdWxkIHdlICp1bmNvbmRpdGlvbmFsbHkqIHB1dCB0 aGUgc3RhcnQgZGlyZWN0b3J5IGluIGZpcnN0CisgICAgICAgICAgICAjIGluIHN5cy5wYXRoIHRv IG1pbmltaXNlIGxpa2VsaWhvb2Qgb2YgY29uZmxpY3RzIGJldHdlZW4gaW5zdGFsbGVkCisgICAg ICAgICAgICAjIG1vZHVsZXMgYW5kIGRldmVsb3BtZW50IHZlcnNpb25zPworICAgICAgICAgICAg c3lzLnBhdGguaW5zZXJ0KDAsIHRvcF9sZXZlbF9kaXIpCisgICAgICAgIHNlbGYuX3RvcF9sZXZl bF9kaXIgPSB0b3BfbGV2ZWxfZGlyCisKKyAgICAgICAgaXNfbm90X2ltcG9ydGFibGUgPSBGYWxz ZQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguYWJzcGF0aChzdGFydF9kaXIpKToK KyAgICAgICAgICAgIHN0YXJ0X2RpciA9IG9zLnBhdGguYWJzcGF0aChzdGFydF9kaXIpCisgICAg ICAgICAgICBpZiBzdGFydF9kaXIgIT0gdG9wX2xldmVsX2RpcjoKKyAgICAgICAgICAgICAgICBp c19ub3RfaW1wb3J0YWJsZSA9IG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3RhcnRf ZGlyLCAnX19pbml0X18ucHknKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgc3VwcG9y dCBmb3IgZGlzY292ZXJ5IGZyb20gZG90dGVkIG1vZHVsZSBuYW1lcworICAgICAgICAgICAgdHJ5 OgorICAgICAgICAgICAgICAgIF9faW1wb3J0X18oc3RhcnRfZGlyKQorICAgICAgICAgICAgZXhj ZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIGlzX25vdF9pbXBvcnRhYmxlID0gVHJ1 ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0aGVfbW9kdWxlID0gc3lzLm1v ZHVsZXNbc3RhcnRfZGlyXQorICAgICAgICAgICAgICAgIHRvcF9wYXJ0ID0gc3RhcnRfZGlyLnNw bGl0KCcuJylbMF0KKyAgICAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgo b3MucGF0aC5kaXJuYW1lKCh0aGVfbW9kdWxlLl9fZmlsZV9fKSkpCisgICAgICAgICAgICAgICAg aWYgc2V0X2ltcGxpY2l0X3RvcDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdG9wX2xldmVs X2RpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN5 cy5tb2R1bGVzW3RvcF9wYXJ0XS5fX2ZpbGVfXykpKQorICAgICAgICAgICAgICAgICAgICBzeXMu cGF0aC5yZW1vdmUodG9wX2xldmVsX2RpcikKKworICAgICAgICBpZiBpc19ub3RfaW1wb3J0YWJs ZToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdTdGFydCBkaXJlY3RvcnkgaXMgbm90 IGltcG9ydGFibGU6ICVyJyAlIHN0YXJ0X2RpcikKKworICAgICAgICB0ZXN0cyA9IGxpc3Qoc2Vs Zi5fZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4pKQorICAgICAgICByZXR1cm4gc2VsZi5z dWl0ZUNsYXNzKHRlc3RzKQorCisgICAgZGVmIF9nZXRfbmFtZV9mcm9tX3BhdGgoc2VsZiwgcGF0 aCk6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGgubm9ybXBhdGgocGF0 aCkpWzBdCisKKyAgICAgICAgX3JlbHBhdGggPSByZWxwYXRoKHBhdGgsIHNlbGYuX3RvcF9sZXZl bF9kaXIpCisgICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5pc2FicyhfcmVscGF0aCksICJQYXRo IG11c3QgYmUgd2l0aGluIHRoZSBwcm9qZWN0IgorICAgICAgICBhc3NlcnQgbm90IF9yZWxwYXRo LnN0YXJ0c3dpdGgoJy4uJyksICJQYXRoIG11c3QgYmUgd2l0aGluIHRoZSBwcm9qZWN0IgorCisg ICAgICAgIG5hbWUgPSBfcmVscGF0aC5yZXBsYWNlKG9zLnBhdGguc2VwLCAnLicpCisgICAgICAg IHJldHVybiBuYW1lCisKKyAgICBkZWYgX2dldF9tb2R1bGVfZnJvbV9uYW1lKHNlbGYsIG5hbWUp OgorICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tu YW1lXQorCisgICAgZGVmIF9tYXRjaF9wYXRoKHNlbGYsIHBhdGgsIGZ1bGxfcGF0aCwgcGF0dGVy bik6CisgICAgICAgICMgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gdXNlIGFsdGVybmF0aXZlIG1h dGNoaW5nIHN0cmF0ZWd5CisgICAgICAgIHJldHVybiBmbm1hdGNoKHBhdGgsIHBhdHRlcm4pCisg ICAgCisgICAgZGVmIF9maW5kX3Rlc3RzKHNlbGYsIHN0YXJ0X2RpciwgcGF0dGVybik6CisgICAg ICAgICIiIlVzZWQgYnkgZGlzY292ZXJ5LiBZaWVsZHMgdGVzdCBzdWl0ZXMgaXQgbG9hZHMuIiIi CisgICAgICAgIHBhdGhzID0gb3MubGlzdGRpcihzdGFydF9kaXIpCisKKyAgICAgICAgZm9yIHBh dGggaW4gcGF0aHM6CisgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oc3RhcnRf ZGlyLCBwYXRoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZnVsbF9wYXRoKToKKyAg ICAgICAgICAgICAgICBpZiBub3QgVkFMSURfTU9EVUxFX05BTUUubWF0Y2gocGF0aCk6CisgICAg ICAgICAgICAgICAgICAgICMgdmFsaWQgUHl0aG9uIGlkZW50aWZpZXJzIG9ubHkKKyAgICAgICAg ICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fbWF0Y2hf cGF0aChwYXRoLCBmdWxsX3BhdGgsIHBhdHRlcm4pOgorICAgICAgICAgICAgICAgICAgICBjb250 aW51ZQorICAgICAgICAgICAgICAgICMgaWYgdGhlIHRlc3QgZmlsZSBtYXRjaGVzLCBsb2FkIGl0 CisgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuX2dldF9uYW1lX2Zyb21fcGF0aChmdWxsX3Bh dGgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBz ZWxmLl9nZXRfbW9kdWxlX2Zyb21fbmFtZShuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoK KyAgICAgICAgICAgICAgICAgICAgeWllbGQgX21ha2VfZmFpbGVkX2ltcG9ydF90ZXN0KG5hbWUs IHNlbGYuc3VpdGVDbGFzcykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg ICAgICBtb2RfZmlsZSA9IG9zLnBhdGguYWJzcGF0aChnZXRhdHRyKG1vZHVsZSwgJ19fZmlsZV9f JywgZnVsbF9wYXRoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVhbHBhdGggPSBvcy5wYXRoLnNw bGl0ZXh0KG1vZF9maWxlKVswXQorICAgICAgICAgICAgICAgICAgICBmdWxscGF0aF9ub2V4dCA9 IG9zLnBhdGguc3BsaXRleHQoZnVsbF9wYXRoKVswXQorICAgICAgICAgICAgICAgICAgICBpZiBy ZWFscGF0aC5sb3dlcigpICE9IGZ1bGxwYXRoX25vZXh0Lmxvd2VyKCk6CisgICAgICAgICAgICAg ICAgICAgICAgICBtb2R1bGVfZGlyID0gb3MucGF0aC5kaXJuYW1lKHJlYWxwYXRoKQorICAgICAg ICAgICAgICAgICAgICAgICAgbW9kX25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFz ZW5hbWUoZnVsbF9wYXRoKSlbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2Rp ciA9IG9zLnBhdGguZGlybmFtZShmdWxsX3BhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICBt c2cgPSAoIiVyIG1vZHVsZSBpbmNvcnJlY3RseSBpbXBvcnRlZCBmcm9tICVyLiBFeHBlY3RlZCAl ci4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJcyB0aGlzIG1vZHVsZSBnbG9i YWxseSBpbnN0YWxsZWQ/IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVy cm9yKG1zZyAlIChtb2RfbmFtZSwgbW9kdWxlX2RpciwgZXhwZWN0ZWRfZGlyKSkKKyAgICAgICAg ICAgICAgICAgICAgeWllbGQgc2VsZi5sb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSkKKyAgICAg ICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihmdWxsX3BhdGgpOgorICAgICAgICAgICAgICAgIGlm IG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZnVsbF9wYXRoLCAnX19pbml0X18ucHkn KSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBsb2Fk X3Rlc3RzID0gTm9uZQorICAgICAgICAgICAgICAgIHRlc3RzID0gTm9uZQorICAgICAgICAgICAg ICAgIGlmIGZubWF0Y2gocGF0aCwgcGF0dGVybik6CisgICAgICAgICAgICAgICAgICAgICMgb25s eSBjaGVjayBsb2FkX3Rlc3RzIGlmIHRoZSBwYWNrYWdlIGRpcmVjdG9yeSBpdHNlbGYgbWF0Y2hl cyB0aGUgZmlsdGVyCisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxmLl9nZXRfbmFtZV9m cm9tX3BhdGgoZnVsbF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlID0gc2VsZi5f Z2V0X21vZHVsZV9mcm9tX25hbWUobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgbG9hZF90ZXN0 cyA9IGdldGF0dHIocGFja2FnZSwgJ2xvYWRfdGVzdHMnLCBOb25lKQorICAgICAgICAgICAgICAg ICAgICB0ZXN0cyA9IHNlbGYubG9hZFRlc3RzRnJvbU1vZHVsZShwYWNrYWdlLCB1c2VfbG9hZF90 ZXN0cz1GYWxzZSkKKworICAgICAgICAgICAgICAgIGlmIGxvYWRfdGVzdHMgaXMgTm9uZToKKyAg ICAgICAgICAgICAgICAgICAgaWYgdGVzdHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg ICAgICAgICAjIHRlc3RzIGxvYWRlZCBmcm9tIHBhY2thZ2UgZmlsZQorICAgICAgICAgICAgICAg ICAgICAgICAgeWllbGQgdGVzdHMKKyAgICAgICAgICAgICAgICAgICAgIyByZWN1cnNlIGludG8g dGhlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fZmluZF90 ZXN0cyhmdWxsX3BhdGgsIHBhdHRlcm4pOgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQg dGVzdAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAg ICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGxvYWRfdGVzdHMoc2VsZiwgdGVzdHMsIHBhdHRl cm4pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAg ICAgICAgICAgICAgICB5aWVsZCBfbWFrZV9mYWlsZWRfbG9hZF90ZXN0cyhwYWNrYWdlLl9fbmFt ZV9fLCBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2VsZi5zdWl0ZUNsYXNzKQorCitkZWZhdWx0VGVzdExvYWRlciA9IFRlc3RMb2FkZXIo KQorCisKK2RlZiBfbWFrZUxvYWRlcihwcmVmaXgsIHNvcnRVc2luZywgc3VpdGVDbGFzcz1Ob25l KToKKyAgICBsb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICBsb2FkZXIuc29ydFRlc3RNZXRob2Rz VXNpbmcgPSBzb3J0VXNpbmcKKyAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9IHByZWZpeAor ICAgIGlmIHN1aXRlQ2xhc3M6CisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gc3VpdGVDbGFz cworICAgIHJldHVybiBsb2FkZXIKKworZGVmIGdldFRlc3RDYXNlTmFtZXModGVzdENhc2VDbGFz cywgcHJlZml4LCBzb3J0VXNpbmc9Y21wKToKKyAgICByZXR1cm4gX21ha2VMb2FkZXIocHJlZml4 LCBzb3J0VXNpbmcpLmdldFRlc3RDYXNlTmFtZXModGVzdENhc2VDbGFzcykKKworZGVmIG1ha2VT dWl0ZSh0ZXN0Q2FzZUNsYXNzLCBwcmVmaXg9J3Rlc3QnLCBzb3J0VXNpbmc9Y21wLAorICAgICAg ICAgICAgICBzdWl0ZUNsYXNzPXN1aXRlLlRlc3RTdWl0ZSk6CisgICAgcmV0dXJuIF9tYWtlTG9h ZGVyKHByZWZpeCwgc29ydFVzaW5nLCBzdWl0ZUNsYXNzKS5sb2FkVGVzdHNGcm9tVGVzdENhc2Uo dGVzdENhc2VDbGFzcykKKworZGVmIGZpbmRUZXN0Q2FzZXMobW9kdWxlLCBwcmVmaXg9J3Rlc3Qn LCBzb3J0VXNpbmc9Y21wLAorICAgICAgICAgICAgICAgICAgc3VpdGVDbGFzcz1zdWl0ZS5UZXN0 U3VpdGUpOgorICAgIHJldHVybiBfbWFrZUxvYWRlcihwcmVmaXgsIHNvcnRVc2luZywgc3VpdGVD bGFzcykubG9hZFRlc3RzRnJvbU1vZHVsZShtb2R1bGUpCgo9PT0gYWRkZWQgZmlsZSAnc3RvcmFn ZS9uZGIvbWNjL3RzdC91bml0dGVzdDIvbWFpbi5weScKLS0tIGEvc3RvcmFnZS9uZGIvbWNjL3Rz dC91bml0dGVzdDIvbWFpbi5weQkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBiL3N0b3Jh Z2UvbmRiL21jYy90c3QvdW5pdHRlc3QyL21haW4ucHkJMjAxMi0xMS0xOSAxMzowMDo0NCArMDAw MApAQCAtMCwwICsxLDI0MSBAQAorIiIiVW5pdHRlc3QgbWFpbiBwcm9ncmFtIiIiCisKK2ltcG9y dCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHR5cGVzCisKK2Zyb20gdW5pdHRlc3QyIGltcG9ydCBs b2FkZXIsIHJ1bm5lcgordHJ5OgorICAgIGZyb20gdW5pdHRlc3QyLnNpZ25hbHMgaW1wb3J0IGlu c3RhbGxIYW5kbGVyCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW5zdGFsbEhhbmRsZXIgPSBO b25lCisKK19fdW5pdHRlc3QgPSBUcnVlCisKK0ZBSUxGQVNUICAgICA9ICIgIC1mLCAtLWZhaWxm YXN0ICAgU3RvcCBvbiBmaXJzdCBmYWlsdXJlXG4iCitDQVRDSEJSRUFLICAgPSAiICAtYywgLS1j YXRjaCAgICAgIENhdGNoIGNvbnRyb2wtQyBhbmQgZGlzcGxheSByZXN1bHRzXG4iCitCVUZGRVJP VVRQVVQgPSAiICAtYiwgLS1idWZmZXIgICAgIEJ1ZmZlciBzdGRvdXQgYW5kIHN0ZGVyciBkdXJp bmcgdGVzdCBydW5zXG4iCisKK1VTQUdFX0FTX01BSU4gPSAiIiJcCitVc2FnZTogJShwcm9nTmFt ZSlzIFtvcHRpb25zXSBbdGVzdHNdCisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAgICAgICAgU2hv dyB0aGlzIG1lc3NhZ2UKKyAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAorICAtcSwg LS1xdWlldCAgICAgIE1pbmltYWwgb3V0cHV0CislKGZhaWxmYXN0KXMlKGNhdGNoYnJlYWspcyUo YnVmZmVyKXMKK0V4YW1wbGVzOgorICAlKHByb2dOYW1lKXMgdGVzdF9tb2R1bGUgICAgICAgICAg ICAgICAgICAgICAgIC0gcnVuIHRlc3RzIGZyb20gdGVzdF9tb2R1bGUKKyAgJShwcm9nTmFtZSlz IHRlc3RfbW9kdWxlLlRlc3RDbGFzcyAgICAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X21vZHVs ZS5UZXN0Q2xhc3MKKyAgJShwcm9nTmFtZSlzIHRlc3RfbW9kdWxlLlRlc3RDbGFzcy50ZXN0X21l dGhvZCAtIHJ1biBzcGVjaWZpZWQgdGVzdCBtZXRob2QKKworW3Rlc3RzXSBjYW4gYmUgYSBsaXN0 IG9mIGFueSBudW1iZXIgb2YgdGVzdCBtb2R1bGVzLCBjbGFzc2VzIGFuZCB0ZXN0CittZXRob2Rz LgorCitBbHRlcm5hdGl2ZSBVc2FnZTogJShwcm9nTmFtZSlzIGRpc2NvdmVyIFtvcHRpb25zXQor CitPcHRpb25zOgorICAtdiwgLS12ZXJib3NlICAgIFZlcmJvc2Ugb3V0cHV0CislKGZhaWxmYXN0 KXMlKGNhdGNoYnJlYWspcyUoYnVmZmVyKXMgIC1zIGRpcmVjdG9yeSAgICAgRGlyZWN0b3J5IHRv IHN0YXJ0IGRpc2NvdmVyeSAoJy4nIGRlZmF1bHQpCisgIC1wIHBhdHRlcm4gICAgICAgUGF0dGVy biB0byBtYXRjaCB0ZXN0IGZpbGVzICgndGVzdCoucHknIGRlZmF1bHQpCisgIC10IGRpcmVjdG9y eSAgICAgVG9wIGxldmVsIGRpcmVjdG9yeSBvZiBwcm9qZWN0IChkZWZhdWx0IHRvCisgICAgICAg ICAgICAgICAgICAgc3RhcnQgZGlyZWN0b3J5KQorCitGb3IgdGVzdCBkaXNjb3ZlcnkgYWxsIHRl c3QgbW9kdWxlcyBtdXN0IGJlIGltcG9ydGFibGUgZnJvbSB0aGUgdG9wCitsZXZlbCBkaXJlY3Rv cnkgb2YgdGhlIHByb2plY3QuCisiIiIKKworVVNBR0VfRlJPTV9NT0RVTEUgPSAiIiJcCitVc2Fn ZTogJShwcm9nTmFtZSlzIFtvcHRpb25zXSBbdGVzdF0gWy4uLl0KKworT3B0aW9uczoKKyAgLWgs IC0taGVscCAgICAgICBTaG93IHRoaXMgbWVzc2FnZQorICAtdiwgLS12ZXJib3NlICAgIFZlcmJv c2Ugb3V0cHV0CisgIC1xLCAtLXF1aWV0ICAgICAgTWluaW1hbCBvdXRwdXQKKyUoZmFpbGZhc3Qp cyUoY2F0Y2hicmVhaylzJShidWZmZXIpcworRXhhbXBsZXM6CisgICUocHJvZ05hbWUpcyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtIHJ1biBkZWZhdWx0IHNldCBvZiB0ZXN0cworICAl KHByb2dOYW1lKXMgTXlUZXN0U3VpdGUgICAgICAgICAgICAgICAgICAgLSBydW4gc3VpdGUgJ015 VGVzdFN1aXRlJworICAlKHByb2dOYW1lKXMgTXlUZXN0Q2FzZS50ZXN0U29tZXRoaW5nICAgICAg LSBydW4gTXlUZXN0Q2FzZS50ZXN0U29tZXRoaW5nCisgICUocHJvZ05hbWUpcyBNeVRlc3RDYXNl ICAgICAgICAgICAgICAgICAgICAtIHJ1biBhbGwgJ3Rlc3QqJyB0ZXN0IG1ldGhvZHMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gTXlUZXN0Q2FzZQor IiIiCisKKworY2xhc3MgVGVzdFByb2dyYW0ob2JqZWN0KToKKyAgICAiIiJBIGNvbW1hbmQtbGlu ZSBwcm9ncmFtIHRoYXQgcnVucyBhIHNldCBvZiB0ZXN0czsgdGhpcyBpcyBwcmltYXJpbHkKKyAg ICAgICBmb3IgbWFraW5nIHRlc3QgbW9kdWxlcyBjb252ZW5pZW50bHkgZXhlY3V0YWJsZS4KKyAg ICAiIiIKKyAgICBVU0FHRSA9IFVTQUdFX0ZST01fTU9EVUxFCisgICAgCisgICAgIyBkZWZhdWx0 cyBmb3IgdGVzdGluZworICAgIGZhaWxmYXN0ID0gY2F0Y2hicmVhayA9IGJ1ZmZlciA9IHByb2dO YW1lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZHVsZT0nX19tYWluX18nLCBk ZWZhdWx0VGVzdD1Ob25lLAorICAgICAgICAgICAgICAgICBhcmd2PU5vbmUsIHRlc3RSdW5uZXI9 Tm9uZSwKKyAgICAgICAgICAgICAgICAgdGVzdExvYWRlcj1sb2FkZXIuZGVmYXVsdFRlc3RMb2Fk ZXIsIGV4aXQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgdmVyYm9zaXR5PTEsIGZhaWxmYXN0PU5v bmUsIGNhdGNoYnJlYWs9Tm9uZSwgYnVmZmVyPU5vbmUpOgorICAgICAgICBpZiBpc2luc3RhbmNl KG1vZHVsZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICBzZWxmLm1vZHVsZSA9IF9faW1wb3J0 X18obW9kdWxlKQorICAgICAgICAgICAgZm9yIHBhcnQgaW4gbW9kdWxlLnNwbGl0KCcuJylbMTpd OgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlID0gZ2V0YXR0cihzZWxmLm1vZHVsZSwgcGFy dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlID0gbW9kdWxlCisgICAg ICAgIGlmIGFyZ3YgaXMgTm9uZToKKyAgICAgICAgICAgIGFyZ3YgPSBzeXMuYXJndgorCisgICAg ICAgIHNlbGYuZXhpdCA9IGV4aXQKKyAgICAgICAgc2VsZi52ZXJib3NpdHkgPSB2ZXJib3NpdHkK KyAgICAgICAgc2VsZi5mYWlsZmFzdCA9IGZhaWxmYXN0CisgICAgICAgIHNlbGYuY2F0Y2hicmVh ayA9IGNhdGNoYnJlYWsKKyAgICAgICAgc2VsZi5idWZmZXIgPSBidWZmZXIKKyAgICAgICAgc2Vs Zi5kZWZhdWx0VGVzdCA9IGRlZmF1bHRUZXN0CisgICAgICAgIHNlbGYudGVzdFJ1bm5lciA9IHRl c3RSdW5uZXIKKyAgICAgICAgc2VsZi50ZXN0TG9hZGVyID0gdGVzdExvYWRlcgorICAgICAgICBz ZWxmLnByb2dOYW1lID0gb3MucGF0aC5iYXNlbmFtZShhcmd2WzBdKQorICAgICAgICBzZWxmLnBh cnNlQXJncyhhcmd2KQorICAgICAgICBzZWxmLnJ1blRlc3RzKCkKKworICAgIGRlZiB1c2FnZUV4 aXQoc2VsZiwgbXNnPU5vbmUpOgorICAgICAgICBpZiBtc2c6CisgICAgICAgICAgICBwcmludCBt c2cKKyAgICAgICAgdXNhZ2UgPSB7J3Byb2dOYW1lJzogc2VsZi5wcm9nTmFtZSwgJ2NhdGNoYnJl YWsnOiAnJywgJ2ZhaWxmYXN0JzogJycsCisgICAgICAgICAgICAgICAgICdidWZmZXInOiAnJ30K KyAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCAhPSBGYWxzZToKKyAgICAgICAgICAgIHVzYWdlWydm YWlsZmFzdCddID0gRkFJTEZBU1QKKyAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrICE9IEZhbHNl IGFuZCBpbnN0YWxsSGFuZGxlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHVzYWdlWydjYXRj aGJyZWFrJ10gPSBDQVRDSEJSRUFLCisgICAgICAgIGlmIHNlbGYuYnVmZmVyICE9IEZhbHNlOgor ICAgICAgICAgICAgdXNhZ2VbJ2J1ZmZlciddID0gQlVGRkVST1VUUFVUCisgICAgICAgIHByaW50 IHNlbGYuVVNBR0UgJSB1c2FnZQorICAgICAgICBzeXMuZXhpdCgyKQorCisgICAgZGVmIHBhcnNl QXJncyhzZWxmLCBhcmd2KToKKyAgICAgICAgaWYgbGVuKGFyZ3YpID4gMSBhbmQgYXJndlsxXS5s b3dlcigpID09ICdkaXNjb3Zlcic6CisgICAgICAgICAgICBzZWxmLl9kb19kaXNjb3ZlcnkoYXJn dlsyOl0pCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpbXBvcnQgZ2V0b3B0CisgICAg ICAgIGxvbmdfb3B0cyA9IFsnaGVscCcsICd2ZXJib3NlJywgJ3F1aWV0JywgJ2ZhaWxmYXN0Jywg J2NhdGNoJywgJ2J1ZmZlciddCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9wdGlvbnMsIGFy Z3MgPSBnZXRvcHQuZ2V0b3B0KGFyZ3ZbMTpdLCAnaEh2cWZjYicsIGxvbmdfb3B0cykKKyAgICAg ICAgICAgIGZvciBvcHQsIHZhbHVlIGluIG9wdGlvbnM6CisgICAgICAgICAgICAgICAgaWYgb3B0 IGluICgnLWgnLCctSCcsJy0taGVscCcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnVzYWdl RXhpdCgpCisgICAgICAgICAgICAgICAgaWYgb3B0IGluICgnLXEnLCctLXF1aWV0Jyk6CisgICAg ICAgICAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMAorICAgICAgICAgICAgICAgIGlmIG9w dCBpbiAoJy12JywnLS12ZXJib3NlJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYudmVyYm9z aXR5ID0gMgorICAgICAgICAgICAgICAgIGlmIG9wdCBpbiAoJy1mJywnLS1mYWlsZmFzdCcpOgor ICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmZhaWxmYXN0IGlzIE5vbmU6CisgICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLmZhaWxmYXN0ID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAj IFNob3VsZCB0aGlzIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiAtZiBpcyBub3QgdmFsaWQ/CisgICAg ICAgICAgICAgICAgaWYgb3B0IGluICgnLWMnLCctLWNhdGNoJyk6CisgICAgICAgICAgICAgICAg ICAgIGlmIHNlbGYuY2F0Y2hicmVhayBpcyBOb25lIGFuZCBpbnN0YWxsSGFuZGxlciBpcyBub3Qg Tm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2F0Y2hicmVhayA9IFRydWUKKyAg ICAgICAgICAgICAgICAgICAgIyBTaG91bGQgdGhpcyByYWlzZSBhbiBleGNlcHRpb24gaWYgLWMg aXMgbm90IHZhbGlkPworICAgICAgICAgICAgICAgIGlmIG9wdCBpbiAoJy1iJywnLS1idWZmZXIn KToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5idWZmZXIgaXMgTm9uZToKKyAgICAgICAg ICAgICAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAj IFNob3VsZCB0aGlzIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiAtYiBpcyBub3QgdmFsaWQ/CisgICAg ICAgICAgICBpZiBsZW4oYXJncykgPT0gMCBhbmQgc2VsZi5kZWZhdWx0VGVzdCBpcyBOb25lOgor ICAgICAgICAgICAgICAgICMgY3JlYXRlVGVzdHMgd2lsbCBsb2FkIHRlc3RzIGZyb20gc2VsZi5t b2R1bGUKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IE5vbmUKKyAgICAgICAgICAg IGVsaWYgbGVuKGFyZ3MpID4gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IGFy Z3MKKyAgICAgICAgICAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICAg ICAgICAgICAgICAjIHRvIHN1cHBvcnQgcHl0aG9uIC1tIHVuaXR0ZXN0IC4uLgorICAgICAgICAg ICAgICAgICAgICBzZWxmLm1vZHVsZSA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg ICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSAoc2VsZi5kZWZhdWx0VGVzdCwpCisgICAgICAgICAg ICBzZWxmLmNyZWF0ZVRlc3RzKCkKKyAgICAgICAgZXhjZXB0IGdldG9wdC5lcnJvciwgbXNnOgor ICAgICAgICAgICAgc2VsZi51c2FnZUV4aXQobXNnKQorCisgICAgZGVmIGNyZWF0ZVRlc3RzKHNl bGYpOgorICAgICAgICBpZiBzZWxmLnRlc3ROYW1lcyBpcyBOb25lOgorICAgICAgICAgICAgc2Vs Zi50ZXN0ID0gc2VsZi50ZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZi5tb2R1bGUp CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRlc3QgPSBzZWxmLnRlc3RMb2FkZXIu bG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYudGVzdE5hbWVzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSkKKworICAg IGRlZiBfZG9fZGlzY292ZXJ5KHNlbGYsIGFyZ3YsIExvYWRlcj1sb2FkZXIuVGVzdExvYWRlcik6 CisgICAgICAgICMgaGFuZGxlIGNvbW1hbmQgbGluZSBhcmdzIGZvciB0ZXN0IGRpc2NvdmVyeQor ICAgICAgICBzZWxmLnByb2dOYW1lID0gJyVzIGRpc2NvdmVyJyAlIHNlbGYucHJvZ05hbWUKKyAg ICAgICAgaW1wb3J0IG9wdHBhcnNlCisgICAgICAgIHBhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBh cnNlcigpCisgICAgICAgIHBhcnNlci5wcm9nID0gc2VsZi5wcm9nTmFtZQorICAgICAgICBwYXJz ZXIuYWRkX29wdGlvbignLXYnLCAnLS12ZXJib3NlJywgZGVzdD0ndmVyYm9zZScsIGRlZmF1bHQ9 RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1ZlcmJvc2Ugb3V0cHV0Jywg YWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCAhPSBGYWxzZToK KyAgICAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctZicsICctLWZhaWxmYXN0JywgZGVzdD0n ZmFpbGZhc3QnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aGVscD0nU3RvcCBvbiBmaXJzdCBmYWlsIG9yIGVycm9yJywgCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBpZiBzZWxmLmNhdGNoYnJl YWsgIT0gRmFsc2UgYW5kIGluc3RhbGxIYW5kbGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg cGFyc2VyLmFkZF9vcHRpb24oJy1jJywgJy0tY2F0Y2gnLCBkZXN0PSdjYXRjaGJyZWFrJywgZGVm YXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NhdGNoIGN0 cmwtQyBhbmQgZGlzcGxheSByZXN1bHRzIHNvIGZhcicsIAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgaWYgc2VsZi5idWZmZXIgIT0g RmFsc2U6CisgICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWInLCAnLS1idWZmZXInLCBk ZXN0PSdidWZmZXInLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaGVscD0nQnVmZmVyIHN0ZG91dCBhbmQgc3RkZXJyIGR1cmluZyB0ZXN0cycsIAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgcGFy c2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc3RhcnQtZGlyZWN0b3J5JywgZGVzdD0nc3RhcnQnLCBk ZWZhdWx0PScuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRGlyZWN0b3J5IHRv IHN0YXJ0IGRpc2NvdmVyeSAoJy4nIGRlZmF1bHQpIikKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRp b24oJy1wJywgJy0tcGF0dGVybicsIGRlc3Q9J3BhdHRlcm4nLCBkZWZhdWx0PSd0ZXN0Ki5weScs CisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdHRlcm4gdG8gbWF0Y2ggdGVzdHMg KCd0ZXN0Ki5weScgZGVmYXVsdCkiKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAn LS10b3AtbGV2ZWwtZGlyZWN0b3J5JywgZGVzdD0ndG9wJywgZGVmYXVsdD1Ob25lLAorICAgICAg ICAgICAgICAgICAgICAgICAgICBoZWxwPSdUb3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHByb2plY3Qg KGRlZmF1bHRzIHRvIHN0YXJ0IGRpcmVjdG9yeSknKQorCisgICAgICAgIG9wdGlvbnMsIGFyZ3Mg PSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQorICAgICAgICBpZiBsZW4oYXJncykgPiAzOgorICAg ICAgICAgICAgc2VsZi51c2FnZUV4aXQoKQorCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiB6 aXAoKCdzdGFydCcsICdwYXR0ZXJuJywgJ3RvcCcpLCBhcmdzKToKKyAgICAgICAgICAgIHNldGF0 dHIob3B0aW9ucywgbmFtZSwgdmFsdWUpCisgICAgICAgIAorICAgICAgICAjIG9ubHkgc2V0IG9w dGlvbnMgZnJvbSB0aGUgcGFyc2luZyBoZXJlCisgICAgICAgICMgaWYgdGhleSB3ZXJlbid0IHNl dCBleHBsaWNpdGx5IGluIHRoZSBjb25zdHJ1Y3RvcgorICAgICAgICBpZiBzZWxmLmZhaWxmYXN0 IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmZhaWxmYXN0ID0gb3B0aW9ucy5mYWlsZmFzdAor ICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgaXMgTm9uZSBhbmQgaW5zdGFsbEhhbmRsZXIgaXMg bm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBvcHRpb25zLmNhdGNoYnJl YWsKKyAgICAgICAgaWYgc2VsZi5idWZmZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYnVm ZmVyID0gb3B0aW9ucy5idWZmZXIKKyAgICAgICAgCisgICAgICAgIGlmIG9wdGlvbnMudmVyYm9z ZToKKyAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMgorCisgICAgICAgIHN0YXJ0X2RpciA9 IG9wdGlvbnMuc3RhcnQKKyAgICAgICAgcGF0dGVybiA9IG9wdGlvbnMucGF0dGVybgorICAgICAg ICB0b3BfbGV2ZWxfZGlyID0gb3B0aW9ucy50b3AKKworICAgICAgICBsb2FkZXIgPSBMb2FkZXIo KQorICAgICAgICBzZWxmLnRlc3QgPSBsb2FkZXIuZGlzY292ZXIoc3RhcnRfZGlyLCBwYXR0ZXJu LCB0b3BfbGV2ZWxfZGlyKQorCisgICAgZGVmIHJ1blRlc3RzKHNlbGYpOgorICAgICAgICBpZiBz ZWxmLmNhdGNoYnJlYWs6CisgICAgICAgICAgICBpbnN0YWxsSGFuZGxlcigpCisgICAgICAgIGlm IHNlbGYudGVzdFJ1bm5lciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi50ZXN0UnVubmVyID0g cnVubmVyLlRleHRUZXN0UnVubmVyCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi50ZXN0UnVu bmVyLCAodHlwZSwgdHlwZXMuQ2xhc3NUeXBlKSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAg ICAgICAgICAgdGVzdFJ1bm5lciA9IHNlbGYudGVzdFJ1bm5lcih2ZXJib3NpdHk9c2VsZi52ZXJi b3NpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWls ZmFzdD1zZWxmLmZhaWxmYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnVmZmVyPXNlbGYuYnVmZmVyKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJv cjoKKyAgICAgICAgICAgICAgICAjIGRpZG4ndCBhY2NlcHQgdGhlIHZlcmJvc2l0eSwgYnVmZmVy IG9yIGZhaWxmYXN0IGFyZ3VtZW50cworICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIgPSBzZWxm LnRlc3RSdW5uZXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBpdCBpcyBhc3N1bWVk IHRvIGJlIGEgVGVzdFJ1bm5lciBpbnN0YW5jZQorICAgICAgICAgICAgdGVzdFJ1bm5lciA9IHNl bGYudGVzdFJ1bm5lcgorICAgICAgICBzZWxmLnJlc3VsdCA9IHRlc3RSdW5uZXIucnVuKHNlbGYu dGVzdCkKKyAgICAgICAgaWYgc2VsZi5leGl0OgorICAgICAgICAgICAgc3lzLmV4aXQobm90IHNl bGYucmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKworbWFpbiA9IFRlc3RQcm9ncmFtCisKK2RlZiBt YWluXygpOgorICAgIFRlc3RQcm9ncmFtLlVTQUdFID0gVVNBR0VfQVNfTUFJTgorICAgIG1haW4o bW9kdWxlPU5vbmUpCisKCj09PSBhZGRlZCBmaWxlICdzdG9yYWdlL25kYi9tY2MvdHN0L3VuaXR0 ZXN0Mi9yZXN1bHQucHknCi0tLSBhL3N0b3JhZ2UvbmRiL21jYy90c3QvdW5pdHRlc3QyL3Jlc3Vs dC5weQkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBiL3N0b3JhZ2UvbmRiL21jYy90c3Qv dW5pdHRlc3QyL3Jlc3VsdC5weQkyMDEyLTExLTE5IDEzOjAwOjQ0ICswMDAwCkBAIC0wLDAgKzEs MTgzIEBACisiIiJUZXN0IHJlc3VsdCBvYmplY3QiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IHRy YWNlYmFjaworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lP CisKK2Zyb20gdW5pdHRlc3QyIGltcG9ydCB1dGlsCitmcm9tIHVuaXR0ZXN0Mi5jb21wYXRpYmls aXR5IGltcG9ydCB3cmFwcworCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCitkZWYgZmFpbGZhc3QobWV0 aG9kKToKKyAgICBAd3JhcHMobWV0aG9kKQorICAgIGRlZiBpbm5lcihzZWxmLCAqYXJncywgKipr dyk6CisgICAgICAgIGlmIGdldGF0dHIoc2VsZiwgJ2ZhaWxmYXN0JywgRmFsc2UpOgorICAgICAg ICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgcmV0dXJuIG1ldGhvZChzZWxmLCAqYXJncywgKipr dykKKyAgICByZXR1cm4gaW5uZXIKKworCitTVERPVVRfTElORSA9ICdcblN0ZG91dDpcbiVzJwor U1RERVJSX0xJTkUgPSAnXG5TdGRlcnI6XG4lcycKKworY2xhc3MgVGVzdFJlc3VsdCh1bml0dGVz dC5UZXN0UmVzdWx0KToKKyAgICAiIiJIb2xkZXIgZm9yIHRlc3QgcmVzdWx0IGluZm9ybWF0aW9u LgorCisgICAgVGVzdCByZXN1bHRzIGFyZSBhdXRvbWF0aWNhbGx5IG1hbmFnZWQgYnkgdGhlIFRl c3RDYXNlIGFuZCBUZXN0U3VpdGUKKyAgICBjbGFzc2VzLCBhbmQgZG8gbm90IG5lZWQgdG8gYmUg ZXhwbGljaXRseSBtYW5pcHVsYXRlZCBieSB3cml0ZXJzIG9mIHRlc3RzLgorCisgICAgRWFjaCBp bnN0YW5jZSBob2xkcyB0aGUgdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1biwgYW5kIGNvbGxlY3Rp b25zIG9mCisgICAgZmFpbHVyZXMgYW5kIGVycm9ycyB0aGF0IG9jY3VycmVkIGFtb25nIHRob3Nl IHRlc3QgcnVucy4gVGhlIGNvbGxlY3Rpb25zCisgICAgY29udGFpbiB0dXBsZXMgb2YgKHRlc3Rj YXNlLCBleGNlcHRpb25pbmZvKSwgd2hlcmUgZXhjZXB0aW9uaW5mbyBpcyB0aGUKKyAgICBmb3Jt YXR0ZWQgdHJhY2ViYWNrIG9mIHRoZSBlcnJvciB0aGF0IG9jY3VycmVkLgorICAgICIiIgorICAg IF9wcmV2aW91c1Rlc3RDbGFzcyA9IE5vbmUKKyAgICBfbW9kdWxlU2V0VXBGYWlsZWQgPSBGYWxz ZQorICAgIAorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5mYWlsZmFzdCA9 IEZhbHNlCisgICAgICAgIHNlbGYuZmFpbHVyZXMgPSBbXQorICAgICAgICBzZWxmLmVycm9ycyA9 IFtdCisgICAgICAgIHNlbGYudGVzdHNSdW4gPSAwCisgICAgICAgIHNlbGYuc2tpcHBlZCA9IFtd CisgICAgICAgIHNlbGYuZXhwZWN0ZWRGYWlsdXJlcyA9IFtdCisgICAgICAgIHNlbGYudW5leHBl Y3RlZFN1Y2Nlc3NlcyA9IFtdCisgICAgICAgIHNlbGYuc2hvdWxkU3RvcCA9IEZhbHNlCisgICAg ICAgIHNlbGYuYnVmZmVyID0gRmFsc2UKKyAgICAgICAgc2VsZi5fc3Rkb3V0X2J1ZmZlciA9IE5v bmUKKyAgICAgICAgc2VsZi5fc3RkZXJyX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fb3Jp Z2luYWxfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICBzZWxmLl9vcmlnaW5hbF9zdGRlcnIg PSBzeXMuc3RkZXJyCisgICAgICAgIHNlbGYuX21pcnJvck91dHB1dCA9IEZhbHNlCisgICAgCisg ICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgIkNhbGxlZCB3aGVuIHRoZSBn aXZlbiB0ZXN0IGlzIGFib3V0IHRvIGJlIHJ1biIKKyAgICAgICAgc2VsZi50ZXN0c1J1biArPSAx CisgICAgICAgIHNlbGYuX21pcnJvck91dHB1dCA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuYnVm ZmVyOgorICAgICAgICAgICAgaWYgc2VsZi5fc3RkZXJyX2J1ZmZlciBpcyBOb25lOgorICAgICAg ICAgICAgICAgIHNlbGYuX3N0ZGVycl9idWZmZXIgPSBTdHJpbmdJTygpCisgICAgICAgICAgICAg ICAgc2VsZi5fc3Rkb3V0X2J1ZmZlciA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHN5cy5zdGRv dXQgPSBzZWxmLl9zdGRvdXRfYnVmZmVyCisgICAgICAgICAgICBzeXMuc3RkZXJyID0gc2VsZi5f c3RkZXJyX2J1ZmZlcgorCisgICAgZGVmIHN0YXJ0VGVzdFJ1bihzZWxmKToKKyAgICAgICAgIiIi Q2FsbGVkIG9uY2UgYmVmb3JlIGFueSB0ZXN0cyBhcmUgZXhlY3V0ZWQuCisKKyAgICAgICAgU2Vl IHN0YXJ0VGVzdCBmb3IgYSBtZXRob2QgY2FsbGVkIGJlZm9yZSBlYWNoIHRlc3QuCisgICAgICAg ICIiIgorCisgICAgZGVmIHN0b3BUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICAiIiJDYWxsZWQg d2hlbiB0aGUgZ2l2ZW4gdGVzdCBoYXMgYmVlbiBydW4iIiIKKyAgICAgICAgaWYgc2VsZi5idWZm ZXI6CisgICAgICAgICAgICBpZiBzZWxmLl9taXJyb3JPdXRwdXQ6CisgICAgICAgICAgICAgICAg b3V0cHV0ID0gc3lzLnN0ZG91dC5nZXR2YWx1ZSgpCisgICAgICAgICAgICAgICAgZXJyb3IgPSBz eXMuc3RkZXJyLmdldHZhbHVlKCkKKyAgICAgICAgICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAg ICAgICAgICAgICAgIGlmIG5vdCBvdXRwdXQuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAg ICAgICAgICAgICBvdXRwdXQgKz0gJ1xuJworICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcmln aW5hbF9zdGRvdXQud3JpdGUoU1RET1VUX0xJTkUgJSBvdXRwdXQpCisgICAgICAgICAgICAgICAg aWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBlcnJvci5lbmRzd2l0aCgnXG4n KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yICs9ICdcbicKKyAgICAgICAgICAgICAg ICAgICAgc2VsZi5fb3JpZ2luYWxfc3RkZXJyLndyaXRlKFNUREVSUl9MSU5FICUgZXJyb3IpCisg ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5fb3JpZ2luYWxf c3Rkb3V0CisgICAgICAgICAgICBzeXMuc3RkZXJyID0gc2VsZi5fb3JpZ2luYWxfc3RkZXJyCisg ICAgICAgICAgICBzZWxmLl9zdGRvdXRfYnVmZmVyLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYu X3N0ZG91dF9idWZmZXIudHJ1bmNhdGUoKQorICAgICAgICAgICAgc2VsZi5fc3RkZXJyX2J1ZmZl ci5zZWVrKDApCisgICAgICAgICAgICBzZWxmLl9zdGRlcnJfYnVmZmVyLnRydW5jYXRlKCkKKyAg ICAgICAgc2VsZi5fbWlycm9yT3V0cHV0ID0gRmFsc2UKKyAgICAgICAgCisKKyAgICBkZWYgc3Rv cFRlc3RSdW4oc2VsZik6CisgICAgICAgICIiIkNhbGxlZCBvbmNlIGFmdGVyIGFsbCB0ZXN0cyBh cmUgZXhlY3V0ZWQuCisKKyAgICAgICAgU2VlIHN0b3BUZXN0IGZvciBhIG1ldGhvZCBjYWxsZWQg YWZ0ZXIgZWFjaCB0ZXN0LgorICAgICAgICAiIiIKKworICAgIEBmYWlsZmFzdAorICAgIGRlZiBh ZGRFcnJvcihzZWxmLCB0ZXN0LCBlcnIpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhbiBlcnJv ciBoYXMgb2NjdXJyZWQuICdlcnInIGlzIGEgdHVwbGUgb2YgdmFsdWVzIGFzCisgICAgICAgIHJl dHVybmVkIGJ5IHN5cy5leGNfaW5mbygpLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5lcnJv cnMuYXBwZW5kKCh0ZXN0LCBzZWxmLl9leGNfaW5mb190b19zdHJpbmcoZXJyLCB0ZXN0KSkpCisg ICAgICAgIHNlbGYuX21pcnJvck91dHB1dCA9IFRydWUKKworICAgIEBmYWlsZmFzdAorICAgIGRl ZiBhZGRGYWlsdXJlKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIGFu IGVycm9yIGhhcyBvY2N1cnJlZC4gJ2VycicgaXMgYSB0dXBsZSBvZiB2YWx1ZXMgYXMKKyAgICAg ICAgcmV0dXJuZWQgYnkgc3lzLmV4Y19pbmZvKCkuIiIiCisgICAgICAgIHNlbGYuZmFpbHVyZXMu YXBwZW5kKCh0ZXN0LCBzZWxmLl9leGNfaW5mb190b19zdHJpbmcoZXJyLCB0ZXN0KSkpCisgICAg ICAgIHNlbGYuX21pcnJvck91dHB1dCA9IFRydWUKKworICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYs IHRlc3QpOgorICAgICAgICAiQ2FsbGVkIHdoZW4gYSB0ZXN0IGhhcyBjb21wbGV0ZWQgc3VjY2Vz c2Z1bGx5IgorICAgICAgICBwYXNzCisKKyAgICBkZWYgYWRkU2tpcChzZWxmLCB0ZXN0LCByZWFz b24pOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhIHRlc3QgaXMgc2tpcHBlZC4iIiIKKyAgICAg ICAgc2VsZi5za2lwcGVkLmFwcGVuZCgodGVzdCwgcmVhc29uKSkKKworICAgIGRlZiBhZGRFeHBl Y3RlZEZhaWx1cmUoc2VsZiwgdGVzdCwgZXJyKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYW4g ZXhwZWN0ZWQgZmFpbHVyZS9lcnJvciBvY2N1cmVkLiIiIgorICAgICAgICBzZWxmLmV4cGVjdGVk RmFpbHVyZXMuYXBwZW5kKAorICAgICAgICAgICAgKHRlc3QsIHNlbGYuX2V4Y19pbmZvX3RvX3N0 cmluZyhlcnIsIHRlc3QpKSkKKworICAgIEBmYWlsZmFzdAorICAgIGRlZiBhZGRVbmV4cGVjdGVk U3VjY2VzcyhzZWxmLCB0ZXN0KToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSB0ZXN0IHdhcyBl eHBlY3RlZCB0byBmYWlsLCBidXQgc3VjY2VlZC4iIiIKKyAgICAgICAgc2VsZi51bmV4cGVjdGVk U3VjY2Vzc2VzLmFwcGVuZCh0ZXN0KQorCisgICAgZGVmIHdhc1N1Y2Nlc3NmdWwoc2VsZik6Cisg ICAgICAgICJUZWxscyB3aGV0aGVyIG9yIG5vdCB0aGlzIHJlc3VsdCB3YXMgYSBzdWNjZXNzIgor ICAgICAgICByZXR1cm4gKGxlbihzZWxmLmZhaWx1cmVzKSArIGxlbihzZWxmLmVycm9ycykgPT0g MCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiSW5kaWNhdGVzIHRoYXQgdGhlIHRl c3RzIHNob3VsZCBiZSBhYm9ydGVkIgorICAgICAgICBzZWxmLnNob3VsZFN0b3AgPSBUcnVlCisK KyAgICBkZWYgX2V4Y19pbmZvX3RvX3N0cmluZyhzZWxmLCBlcnIsIHRlc3QpOgorICAgICAgICAi IiJDb252ZXJ0cyBhIHN5cy5leGNfaW5mbygpLXN0eWxlIHR1cGxlIG9mIHZhbHVlcyBpbnRvIGEg c3RyaW5nLiIiIgorICAgICAgICBleGN0eXBlLCB2YWx1ZSwgdGIgPSBlcnIKKyAgICAgICAgIyBT a2lwIHRlc3QgcnVubmVyIHRyYWNlYmFjayBsZXZlbHMKKyAgICAgICAgd2hpbGUgdGIgYW5kIHNl bGYuX2lzX3JlbGV2YW50X3RiX2xldmVsKHRiKToKKyAgICAgICAgICAgIHRiID0gdGIudGJfbmV4 dAorICAgICAgICBpZiBleGN0eXBlIGlzIHRlc3QuZmFpbHVyZUV4Y2VwdGlvbjoKKyAgICAgICAg ICAgICMgU2tpcCBhc3NlcnQqKCkgdHJhY2ViYWNrIGxldmVscworICAgICAgICAgICAgbGVuZ3Ro ID0gc2VsZi5fY291bnRfcmVsZXZhbnRfdGJfbGV2ZWxzKHRiKQorICAgICAgICAgICAgbXNnTGlu ZXMgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbihleGN0eXBlLCB2YWx1ZSwgdGIsIGxlbmd0 aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZ0xpbmVzID0gdHJhY2ViYWNrLmZvcm1h dF9leGNlcHRpb24oZXhjdHlwZSwgdmFsdWUsIHRiKQorICAgICAgICAKKyAgICAgICAgaWYgc2Vs Zi5idWZmZXI6CisgICAgICAgICAgICBvdXRwdXQgPSBzeXMuc3Rkb3V0LmdldHZhbHVlKCkKKyAg ICAgICAgICAgIGVycm9yID0gc3lzLnN0ZGVyci5nZXR2YWx1ZSgpICAgICAgICAgICAgCisgICAg ICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgaWYgbm90IG91dHB1dC5lbmRzd2l0 aCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9ICdcbicKKyAgICAgICAgICAg ICAgICBtc2dMaW5lcy5hcHBlbmQoU1RET1VUX0xJTkUgJSBvdXRwdXQpCisgICAgICAgICAgICBp ZiBlcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBub3QgZXJyb3IuZW5kc3dpdGgoJ1xuJyk6Cisg ICAgICAgICAgICAgICAgICAgIGVycm9yICs9ICdcbicKKyAgICAgICAgICAgICAgICBtc2dMaW5l cy5hcHBlbmQoU1RERVJSX0xJTkUgJSBlcnJvcikKKyAgICAgICAgcmV0dXJuICcnLmpvaW4obXNn TGluZXMpCisKKyAgICBkZWYgX2lzX3JlbGV2YW50X3RiX2xldmVsKHNlbGYsIHRiKToKKyAgICAg ICAgcmV0dXJuICdfX3VuaXR0ZXN0JyBpbiB0Yi50Yl9mcmFtZS5mX2dsb2JhbHMKKworICAgIGRl ZiBfY291bnRfcmVsZXZhbnRfdGJfbGV2ZWxzKHNlbGYsIHRiKToKKyAgICAgICAgbGVuZ3RoID0g MAorICAgICAgICB3aGlsZSB0YiBhbmQgbm90IHNlbGYuX2lzX3JlbGV2YW50X3RiX2xldmVsKHRi KToKKyAgICAgICAgICAgIGxlbmd0aCArPSAxCisgICAgICAgICAgICB0YiA9IHRiLnRiX25leHQK KyAgICAgICAgcmV0dXJuIGxlbmd0aAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAg ICByZXR1cm4gIjwlcyBydW49JWkgZXJyb3JzPSVpIGZhaWx1cmVzPSVpPiIgJSBcCisgICAgICAg ICAgICAgICAodXRpbC5zdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIHNlbGYudGVzdHNSdW4sIGxl bihzZWxmLmVycm9ycyksCisgICAgICAgICAgICAgICAgbGVuKHNlbGYuZmFpbHVyZXMpKQoKPT09 IGFkZGVkIGZpbGUgJ3N0b3JhZ2UvbmRiL21jYy90c3QvdW5pdHRlc3QyL3J1bm5lci5weScKLS0t IGEvc3RvcmFnZS9uZGIvbWNjL3RzdC91bml0dGVzdDIvcnVubmVyLnB5CTE5NzAtMDEtMDEgMDA6 MDA6MDAgKzAwMDAKKysrIGIvc3RvcmFnZS9uZGIvbWNjL3RzdC91bml0dGVzdDIvcnVubmVyLnB5 CTIwMTItMTEtMTkgMTM6MDA6NDQgKzAwMDAKQEAgLTAsMCArMSwyMDYgQEAKKyIiIlJ1bm5pbmcg dGVzdHMiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitm cm9tIHVuaXR0ZXN0MiBpbXBvcnQgcmVzdWx0CisKK3RyeToKKyAgICBmcm9tIHVuaXR0ZXN0Mi5z aWduYWxzIGltcG9ydCByZWdpc3RlclJlc3VsdAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGRl ZiByZWdpc3RlclJlc3VsdChfKToKKyAgICAgICAgcGFzcworICAgIAorX191bml0dGVzdCA9IFRy dWUKKworCitjbGFzcyBfV3JpdGVsbkRlY29yYXRvcihvYmplY3QpOgorICAgICIiIlVzZWQgdG8g ZGVjb3JhdGUgZmlsZS1saWtlIG9iamVjdHMgd2l0aCBhIGhhbmR5ICd3cml0ZWxuJyBtZXRob2Qi IiIKKyAgICBkZWYgX19pbml0X18oc2VsZixzdHJlYW0pOgorICAgICAgICBzZWxmLnN0cmVhbSA9 IHN0cmVhbQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgorICAgICAgICBpZiBh dHRyIGluICgnc3RyZWFtJywgJ19fZ2V0c3RhdGVfXycpOgorICAgICAgICAgICAgcmFpc2UgQXR0 cmlidXRlRXJyb3IoYXR0cikKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5zdHJlYW0sYXR0 cikKKworICAgIGRlZiB3cml0ZWxuKHNlbGYsIGFyZz1Ob25lKToKKyAgICAgICAgaWYgYXJnOgor ICAgICAgICAgICAgc2VsZi53cml0ZShhcmcpCisgICAgICAgIHNlbGYud3JpdGUoJ1xuJykgIyB0 ZXh0LW1vZGUgc3RyZWFtcyB0cmFuc2xhdGUgdG8gXHJcbiBpZiBuZWVkZWQKKworCitjbGFzcyBU ZXh0VGVzdFJlc3VsdChyZXN1bHQuVGVzdFJlc3VsdCk6CisgICAgIiIiQSB0ZXN0IHJlc3VsdCBj bGFzcyB0aGF0IGNhbiBwcmludCBmb3JtYXR0ZWQgdGV4dCByZXN1bHRzIHRvIGEgc3RyZWFtLgor CisgICAgVXNlZCBieSBUZXh0VGVzdFJ1bm5lci4KKyAgICAiIiIKKyAgICBzZXBhcmF0b3IxID0g Jz0nICogNzAKKyAgICBzZXBhcmF0b3IyID0gJy0nICogNzAKKworICAgIGRlZiBfX2luaXRfXyhz ZWxmLCBzdHJlYW0sIGRlc2NyaXB0aW9ucywgdmVyYm9zaXR5KToKKyAgICAgICAgc3VwZXIoVGV4 dFRlc3RSZXN1bHQsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5zdHJlYW0gPSBzdHJl YW0KKyAgICAgICAgc2VsZi5zaG93QWxsID0gdmVyYm9zaXR5ID4gMQorICAgICAgICBzZWxmLmRv dHMgPSB2ZXJib3NpdHkgPT0gMQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9ucyA9IGRlc2NyaXB0 aW9ucworCisgICAgZGVmIGdldERlc2NyaXB0aW9uKHNlbGYsIHRlc3QpOgorICAgICAgICBkb2Nf Zmlyc3RfbGluZSA9IHRlc3Quc2hvcnREZXNjcmlwdGlvbigpCisgICAgICAgIGlmIHNlbGYuZGVz Y3JpcHRpb25zIGFuZCBkb2NfZmlyc3RfbGluZToKKyAgICAgICAgICAgIHJldHVybiAnXG4nLmpv aW4oKHN0cih0ZXN0KSwgZG9jX2ZpcnN0X2xpbmUpKQorICAgICAgICBlbHNlOgorICAgICAgICAg ICAgcmV0dXJuIHN0cih0ZXN0KQorCisgICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKKyAg ICAgICAgc3VwZXIoVGV4dFRlc3RSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdCh0ZXN0KQorICAgICAg ICBpZiBzZWxmLnNob3dBbGw6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZShzZWxmLmdl dERlc2NyaXB0aW9uKHRlc3QpKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoIiAuLi4g IikKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNoKCkKKworICAgIGRlZiBhZGRTdWNjZXNz KHNlbGYsIHRlc3QpOgorICAgICAgICBzdXBlcihUZXh0VGVzdFJlc3VsdCwgc2VsZikuYWRkU3Vj Y2Vzcyh0ZXN0KQorICAgICAgICBpZiBzZWxmLnNob3dBbGw6CisgICAgICAgICAgICBzZWxmLnN0 cmVhbS53cml0ZWxuKCJvayIpCisgICAgICAgIGVsaWYgc2VsZi5kb3RzOgorICAgICAgICAgICAg c2VsZi5zdHJlYW0ud3JpdGUoJy4nKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQor CisgICAgZGVmIGFkZEVycm9yKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAgIHN1cGVyKFRleHRU ZXN0UmVzdWx0LCBzZWxmKS5hZGRFcnJvcih0ZXN0LCBlcnIpCisgICAgICAgIGlmIHNlbGYuc2hv d0FsbDoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIkVSUk9SIikKKyAgICAgICAg ZWxpZiBzZWxmLmRvdHM6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnRScpCisgICAg ICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCisKKyAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCB0 ZXN0LCBlcnIpOgorICAgICAgICBzdXBlcihUZXh0VGVzdFJlc3VsdCwgc2VsZikuYWRkRmFpbHVy ZSh0ZXN0LCBlcnIpCisgICAgICAgIGlmIHNlbGYuc2hvd0FsbDoKKyAgICAgICAgICAgIHNlbGYu c3RyZWFtLndyaXRlbG4oIkZBSUwiKQorICAgICAgICBlbGlmIHNlbGYuZG90czoKKyAgICAgICAg ICAgIHNlbGYuc3RyZWFtLndyaXRlKCdGJykKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNo KCkKKworICAgIGRlZiBhZGRTa2lwKHNlbGYsIHRlc3QsIHJlYXNvbik6CisgICAgICAgIHN1cGVy KFRleHRUZXN0UmVzdWx0LCBzZWxmKS5hZGRTa2lwKHRlc3QsIHJlYXNvbikKKyAgICAgICAgaWYg c2VsZi5zaG93QWxsOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigic2tpcHBlZCAl ciIgJSAocmVhc29uLCkpCisgICAgICAgIGVsaWYgc2VsZi5kb3RzOgorICAgICAgICAgICAgc2Vs Zi5zdHJlYW0ud3JpdGUoInMiKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQorCisg ICAgZGVmIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCB0ZXN0LCBlcnIpOgorICAgICAgICBzdXBl cihUZXh0VGVzdFJlc3VsdCwgc2VsZikuYWRkRXhwZWN0ZWRGYWlsdXJlKHRlc3QsIGVycikKKyAg ICAgICAgaWYgc2VsZi5zaG93QWxsOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigi ZXhwZWN0ZWQgZmFpbHVyZSIpCisgICAgICAgIGVsaWYgc2VsZi5kb3RzOgorICAgICAgICAgICAg c2VsZi5zdHJlYW0ud3JpdGUoIngiKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQor CisgICAgZGVmIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYsIHRlc3QpOgorICAgICAgICBzdXBl cihUZXh0VGVzdFJlc3VsdCwgc2VsZikuYWRkVW5leHBlY3RlZFN1Y2Nlc3ModGVzdCkKKyAgICAg ICAgaWYgc2VsZi5zaG93QWxsOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigidW5l eHBlY3RlZCBzdWNjZXNzIikKKyAgICAgICAgZWxpZiBzZWxmLmRvdHM6CisgICAgICAgICAgICBz ZWxmLnN0cmVhbS53cml0ZSgidSIpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCisK KyAgICBkZWYgcHJpbnRFcnJvcnMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZG90cyBvciBzZWxm LnNob3dBbGw6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCkKKyAgICAgICAgc2Vs Zi5wcmludEVycm9yTGlzdCgnRVJST1InLCBzZWxmLmVycm9ycykKKyAgICAgICAgc2VsZi5wcmlu dEVycm9yTGlzdCgnRkFJTCcsIHNlbGYuZmFpbHVyZXMpCisKKyAgICBkZWYgcHJpbnRFcnJvckxp c3Qoc2VsZiwgZmxhdm91ciwgZXJyb3JzKToKKyAgICAgICAgZm9yIHRlc3QsIGVyciBpbiBlcnJv cnM6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKHNlbGYuc2VwYXJhdG9yMSkKKyAg ICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIiVzOiAlcyIgJSAoZmxhdm91ciwgc2VsZi5n ZXREZXNjcmlwdGlvbih0ZXN0KSkpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKHNl bGYuc2VwYXJhdG9yMikKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIiVzIiAlIGVy cikKKworICAgIGRlZiBzdG9wVGVzdFJ1bihzZWxmKToKKyAgICAgICAgc3VwZXIoVGV4dFRlc3RS ZXN1bHQsIHNlbGYpLnN0b3BUZXN0UnVuKCkKKyAgICAgICAgc2VsZi5wcmludEVycm9ycygpCisK KworY2xhc3MgVGV4dFRlc3RSdW5uZXIodW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIpOgorICAgICIi IkEgdGVzdCBydW5uZXIgY2xhc3MgdGhhdCBkaXNwbGF5cyByZXN1bHRzIGluIHRleHR1YWwgZm9y bS4KKworICAgIEl0IHByaW50cyBvdXQgdGhlIG5hbWVzIG9mIHRlc3RzIGFzIHRoZXkgYXJlIHJ1 biwgZXJyb3JzIGFzIHRoZXkKKyAgICBvY2N1ciwgYW5kIGEgc3VtbWFyeSBvZiB0aGUgcmVzdWx0 cyBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHJ1bi4KKyAgICAiIiIKKyAgICByZXN1bHRjbGFzcyA9 IFRleHRUZXN0UmVzdWx0CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtPXN5cy5zdGRl cnIsIGRlc2NyaXB0aW9ucz1UcnVlLCB2ZXJib3NpdHk9MSwKKyAgICAgICAgICAgICAgICAgICAg ZmFpbGZhc3Q9RmFsc2UsIGJ1ZmZlcj1GYWxzZSwgcmVzdWx0Y2xhc3M9Tm9uZSk6CisgICAgICAg IHNlbGYuc3RyZWFtID0gX1dyaXRlbG5EZWNvcmF0b3Ioc3RyZWFtKQorICAgICAgICBzZWxmLmRl c2NyaXB0aW9ucyA9IGRlc2NyaXB0aW9ucworICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IHZlcmJv c2l0eQorICAgICAgICBzZWxmLmZhaWxmYXN0ID0gZmFpbGZhc3QKKyAgICAgICAgc2VsZi5idWZm ZXIgPSBidWZmZXIKKyAgICAgICAgaWYgcmVzdWx0Y2xhc3MgaXMgbm90IE5vbmU6CisgICAgICAg ICAgICBzZWxmLnJlc3VsdGNsYXNzID0gcmVzdWx0Y2xhc3MKKworICAgIGRlZiBfbWFrZVJlc3Vs dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0Y2xhc3Moc2VsZi5zdHJlYW0sIHNl bGYuZGVzY3JpcHRpb25zLCBzZWxmLnZlcmJvc2l0eSkKKworICAgIGRlZiBydW4oc2VsZiwgdGVz dCk6CisgICAgICAgICJSdW4gdGhlIGdpdmVuIHRlc3QgY2FzZSBvciB0ZXN0IHN1aXRlLiIKKyAg ICAgICAgcmVzdWx0ID0gc2VsZi5fbWFrZVJlc3VsdCgpCisgICAgICAgIHJlc3VsdC5mYWlsZmFz dCA9IHNlbGYuZmFpbGZhc3QKKyAgICAgICAgcmVzdWx0LmJ1ZmZlciA9IHNlbGYuYnVmZmVyCisg ICAgICAgIHJlZ2lzdGVyUmVzdWx0KHJlc3VsdCkKKyAgICAgICAgCisgICAgICAgIHN0YXJ0VGlt ZSA9IHRpbWUudGltZSgpCisgICAgICAgIHN0YXJ0VGVzdFJ1biA9IGdldGF0dHIocmVzdWx0LCAn c3RhcnRUZXN0UnVuJywgTm9uZSkKKyAgICAgICAgaWYgc3RhcnRUZXN0UnVuIGlzIG5vdCBOb25l OgorICAgICAgICAgICAgc3RhcnRUZXN0UnVuKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg dGVzdChyZXN1bHQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzdG9wVGVzdFJ1biA9 IGdldGF0dHIocmVzdWx0LCAnc3RvcFRlc3RSdW4nLCBOb25lKQorICAgICAgICAgICAgaWYgc3Rv cFRlc3RSdW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3RvcFRlc3RSdW4oKQorICAg ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXN1bHQucHJpbnRFcnJvcnMoKQorICAg ICAgICBzdG9wVGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIHRpbWVUYWtlbiA9IHN0b3BUaW1l IC0gc3RhcnRUaW1lCisgICAgICAgIGlmIGhhc2F0dHIocmVzdWx0LCAnc2VwYXJhdG9yMicpOgor ICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbihyZXN1bHQuc2VwYXJhdG9yMikKKyAgICAg ICAgcnVuID0gcmVzdWx0LnRlc3RzUnVuCisgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIlJh biAlZCB0ZXN0JXMgaW4gJS4zZnMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnVu LCBydW4gIT0gMSBhbmQgInMiIG9yICIiLCB0aW1lVGFrZW4pKQorICAgICAgICBzZWxmLnN0cmVh bS53cml0ZWxuKCkKKyAgICAgICAgCisgICAgICAgIGV4cGVjdGVkRmFpbHMgPSB1bmV4cGVjdGVk U3VjY2Vzc2VzID0gc2tpcHBlZCA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0 cyA9IG1hcChsZW4sIChyZXN1bHQuZXhwZWN0ZWRGYWlsdXJlcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVzdWx0LnVuZXhwZWN0ZWRTdWNjZXNzZXMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5za2lwcGVkKSkKKyAgICAgICAgICAgIGV4cGVjdGVk RmFpbHMsIHVuZXhwZWN0ZWRTdWNjZXNzZXMsIHNraXBwZWQgPSByZXN1bHRzCisgICAgICAgIGV4 Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaW5mb3MgPSBb XQorICAgICAgICBpZiBub3QgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKToKKyAgICAgICAgICAgIHNl bGYuc3RyZWFtLndyaXRlKCJGQUlMRUQiKQorICAgICAgICAgICAgZmFpbGVkLCBlcnJvcmVkID0g bWFwKGxlbiwgKHJlc3VsdC5mYWlsdXJlcywgcmVzdWx0LmVycm9ycykpCisgICAgICAgICAgICBp ZiBmYWlsZWQ6CisgICAgICAgICAgICAgICAgaW5mb3MuYXBwZW5kKCJmYWlsdXJlcz0lZCIgJSBm YWlsZWQpCisgICAgICAgICAgICBpZiBlcnJvcmVkOgorICAgICAgICAgICAgICAgIGluZm9zLmFw cGVuZCgiZXJyb3JzPSVkIiAlIGVycm9yZWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBz ZWxmLnN0cmVhbS53cml0ZSgiT0siKQorICAgICAgICBpZiBza2lwcGVkOgorICAgICAgICAgICAg aW5mb3MuYXBwZW5kKCJza2lwcGVkPSVkIiAlIHNraXBwZWQpCisgICAgICAgIGlmIGV4cGVjdGVk RmFpbHM6CisgICAgICAgICAgICBpbmZvcy5hcHBlbmQoImV4cGVjdGVkIGZhaWx1cmVzPSVkIiAl IGV4cGVjdGVkRmFpbHMpCisgICAgICAgIGlmIHVuZXhwZWN0ZWRTdWNjZXNzZXM6CisgICAgICAg ICAgICBpbmZvcy5hcHBlbmQoInVuZXhwZWN0ZWQgc3VjY2Vzc2VzPSVkIiAlIHVuZXhwZWN0ZWRT dWNjZXNzZXMpCisgICAgICAgIGlmIGluZm9zOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3Jp dGVsbigiICglcykiICUgKCIsICIuam9pbihpbmZvcyksKSkKKyAgICAgICAgZWxzZToKKyAgICAg ICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCJcbiIpCisgICAgICAgIHJldHVybiByZXN1bHQKCj09 PSBhZGRlZCBmaWxlICdzdG9yYWdlL25kYi9tY2MvdHN0L3VuaXR0ZXN0Mi9zaWduYWxzLnB5Jwot LS0gYS9zdG9yYWdlL25kYi9tY2MvdHN0L3VuaXR0ZXN0Mi9zaWduYWxzLnB5CTE5NzAtMDEtMDEg MDA6MDA6MDAgKzAwMDAKKysrIGIvc3RvcmFnZS9uZGIvbWNjL3RzdC91bml0dGVzdDIvc2lnbmFs cy5weQkyMDEyLTExLTE5IDEzOjAwOjQ0ICswMDAwCkBAIC0wLDAgKzEsNTcgQEAKK2ltcG9ydCBz aWduYWwKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gdW5pdHRlc3QyLmNvbXBhdGliaWxpdHkgaW1w b3J0IHdyYXBzCisKK19fdW5pdHRlc3QgPSBUcnVlCisKKworY2xhc3MgX0ludGVycnVwdEhhbmRs ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGVmYXVsdF9oYW5kbGVyKToKKyAg ICAgICAgc2VsZi5jYWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmRlZmF1bHRfaGFuZGxlciA9 IGRlZmF1bHRfaGFuZGxlcgorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHNpZ251bSwgZnJhbWUp OgorICAgICAgICBpbnN0YWxsZWRfaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJ R0lOVCkKKyAgICAgICAgaWYgaW5zdGFsbGVkX2hhbmRsZXIgaXMgbm90IHNlbGY6CisgICAgICAg ICAgICAjIGlmIHdlIGFyZW4ndCB0aGUgaW5zdGFsbGVkIGhhbmRsZXIsIHRoZW4gZGVsZWdhdGUg aW1tZWRpYXRlbHkKKyAgICAgICAgICAgICMgdG8gdGhlIGRlZmF1bHQgaGFuZGxlcgorICAgICAg ICAgICAgc2VsZi5kZWZhdWx0X2hhbmRsZXIoc2lnbnVtLCBmcmFtZSkKKyAgICAgICAgICAgIAor ICAgICAgICBpZiBzZWxmLmNhbGxlZDoKKyAgICAgICAgICAgIHNlbGYuZGVmYXVsdF9oYW5kbGVy KHNpZ251bSwgZnJhbWUpCisgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQorICAgICAgICBmb3Ig cmVzdWx0IGluIF9yZXN1bHRzLmtleXMoKToKKyAgICAgICAgICAgIHJlc3VsdC5zdG9wKCkKKwor X3Jlc3VsdHMgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KCkKK2RlZiByZWdpc3RlclJlc3Vs dChyZXN1bHQpOgorICAgIF9yZXN1bHRzW3Jlc3VsdF0gPSAxCisKK2RlZiByZW1vdmVSZXN1bHQo cmVzdWx0KToKKyAgICByZXR1cm4gYm9vbChfcmVzdWx0cy5wb3AocmVzdWx0LCBOb25lKSkKKwor X2ludGVycnVwdF9oYW5kbGVyID0gTm9uZQorZGVmIGluc3RhbGxIYW5kbGVyKCk6CisgICAgZ2xv YmFsIF9pbnRlcnJ1cHRfaGFuZGxlcgorICAgIGlmIF9pbnRlcnJ1cHRfaGFuZGxlciBpcyBOb25l OgorICAgICAgICBkZWZhdWx0X2hhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJ TlQpCisgICAgICAgIF9pbnRlcnJ1cHRfaGFuZGxlciA9IF9JbnRlcnJ1cHRIYW5kbGVyKGRlZmF1 bHRfaGFuZGxlcikKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBfaW50ZXJy dXB0X2hhbmRsZXIpCisKKworZGVmIHJlbW92ZUhhbmRsZXIobWV0aG9kPU5vbmUpOgorICAgIGlm IG1ldGhvZCBpcyBub3QgTm9uZToKKyAgICAgICAgQHdyYXBzKG1ldGhvZCkKKyAgICAgICAgZGVm IGlubmVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBpbml0aWFsID0gc2lnbmFsLmdl dHNpZ25hbChzaWduYWwuU0lHSU5UKQorICAgICAgICAgICAgcmVtb3ZlSGFuZGxlcigpCisgICAg ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZCgqYXJncywgKiprd2Fy Z3MpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwo c2lnbmFsLlNJR0lOVCwgaW5pdGlhbCkKKyAgICAgICAgcmV0dXJuIGlubmVyCisKKyAgICBnbG9i YWwgX2ludGVycnVwdF9oYW5kbGVyCisgICAgaWYgX2ludGVycnVwdF9oYW5kbGVyIGlzIG5vdCBO b25lOgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIF9pbnRlcnJ1cHRfaGFu ZGxlci5kZWZhdWx0X2hhbmRsZXIpCgo9PT0gYWRkZWQgZmlsZSAnc3RvcmFnZS9uZGIvbWNjL3Rz dC91bml0dGVzdDIvc3VpdGUucHknCi0tLSBhL3N0b3JhZ2UvbmRiL21jYy90c3QvdW5pdHRlc3Qy L3N1aXRlLnB5CTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDAKKysrIGIvc3RvcmFnZS9uZGIvbWNj L3RzdC91bml0dGVzdDIvc3VpdGUucHkJMjAxMi0xMS0xOSAxMzowMDo0NCArMDAwMApAQCAtMCww ICsxLDI4NyBAQAorIiIiVGVzdFN1aXRlIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVz dAorZnJvbSB1bml0dGVzdDIgaW1wb3J0IGNhc2UsIHV0aWwKKworX191bml0dGVzdCA9IFRydWUK KworCitjbGFzcyBCYXNlVGVzdFN1aXRlKHVuaXR0ZXN0LlRlc3RTdWl0ZSk6CisgICAgIiIiQSBz aW1wbGUgdGVzdCBzdWl0ZSB0aGF0IGRvZXNuJ3QgcHJvdmlkZSBjbGFzcyBvciBtb2R1bGUgc2hh cmVkIGZpeHR1cmVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0cz0oKSk6 CisgICAgICAgIHNlbGYuX3Rlc3RzID0gW10KKyAgICAgICAgc2VsZi5hZGRUZXN0cyh0ZXN0cykK KworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMgdGVzdHM9JXM+ IiAlICh1dGlsLnN0cmNsYXNzKHNlbGYuX19jbGFzc19fKSwgbGlzdChzZWxmKSkKKworICAgIGRl ZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwg c2VsZi5fX2NsYXNzX18pOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAg ICAgIHJldHVybiBsaXN0KHNlbGYpID09IGxpc3Qob3RoZXIpCisKKyAgICBkZWYgX19uZV9fKHNl bGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCisKKyAgICAjIENh bid0IGd1YXJhbnRlZSBoYXNoIGludmFyaWFudCwgc28gZmxhZyBhcyB1bmhhc2hhYmxlCisgICAg X19oYXNoX18gPSBOb25lCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVy biBpdGVyKHNlbGYuX3Rlc3RzKQorCisgICAgZGVmIGNvdW50VGVzdENhc2VzKHNlbGYpOgorICAg ICAgICBjYXNlcyA9IDAKKyAgICAgICAgZm9yIHRlc3QgaW4gc2VsZjoKKyAgICAgICAgICAgIGNh c2VzICs9IHRlc3QuY291bnRUZXN0Q2FzZXMoKQorICAgICAgICByZXR1cm4gY2FzZXMKKworICAg IGRlZiBhZGRUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICAjIHNhbml0eSBjaGVja3MKKyAgICAg ICAgaWYgbm90IGhhc2F0dHIodGVzdCwgJ19fY2FsbF9fJyk6CisgICAgICAgICAgICByYWlzZSBU eXBlRXJyb3IoIiVyIGlzIG5vdCBjYWxsYWJsZSIgJSAocmVwcih0ZXN0KSwpKQorICAgICAgICBp ZiBpc2luc3RhbmNlKHRlc3QsIHR5cGUpIGFuZCBpc3N1YmNsYXNzKHRlc3QsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhc2UuVGVzdENhc2UsIFRl c3RTdWl0ZSkpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJUZXN0Q2FzZXMgYW5kIFRl c3RTdWl0ZXMgbXVzdCBiZSBpbnN0YW50aWF0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJiZWZvcmUgcGFzc2luZyB0aGVtIHRvIGFkZFRlc3QoKSIpCisgICAgICAgIHNlbGYuX3Rl c3RzLmFwcGVuZCh0ZXN0KQorCisgICAgZGVmIGFkZFRlc3RzKHNlbGYsIHRlc3RzKToKKyAgICAg ICAgaWYgaXNpbnN0YW5jZSh0ZXN0cywgYmFzZXN0cmluZyk6CisgICAgICAgICAgICByYWlzZSBU eXBlRXJyb3IoInRlc3RzIG11c3QgYmUgYW4gaXRlcmFibGUgb2YgdGVzdHMsIG5vdCBhIHN0cmlu ZyIpCisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgc2VsZi5hZGRUZXN0 KHRlc3QpCisKKyAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdCk6CisgICAgICAgIGZvciB0ZXN0IGlu IHNlbGY6CisgICAgICAgICAgICBpZiByZXN1bHQuc2hvdWxkU3RvcDoKKyAgICAgICAgICAgICAg ICBicmVhaworICAgICAgICAgICAgdGVzdChyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQK KworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgcmV0dXJu IHNlbGYucnVuKCphcmdzLCAqKmt3ZHMpCisKKyAgICBkZWYgZGVidWcoc2VsZik6CisgICAgICAg ICIiIlJ1biB0aGUgdGVzdHMgd2l0aG91dCBjb2xsZWN0aW5nIGVycm9ycyBpbiBhIFRlc3RSZXN1 bHQiIiIKKyAgICAgICAgZm9yIHRlc3QgaW4gc2VsZjoKKyAgICAgICAgICAgIHRlc3QuZGVidWco KQorCisKK2NsYXNzIFRlc3RTdWl0ZShCYXNlVGVzdFN1aXRlKToKKyAgICAiIiJBIHRlc3Qgc3Vp dGUgaXMgYSBjb21wb3NpdGUgdGVzdCBjb25zaXN0aW5nIG9mIGEgbnVtYmVyIG9mIFRlc3RDYXNl cy4KKworICAgIEZvciB1c2UsIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBUZXN0U3VpdGUsIHRoZW4g YWRkIHRlc3QgY2FzZSBpbnN0YW5jZXMuCisgICAgV2hlbiBhbGwgdGVzdHMgaGF2ZSBiZWVuIGFk ZGVkLCB0aGUgc3VpdGUgY2FuIGJlIHBhc3NlZCB0byBhIHRlc3QKKyAgICBydW5uZXIsIHN1Y2gg YXMgVGV4dFRlc3RSdW5uZXIuIEl0IHdpbGwgcnVuIHRoZSBpbmRpdmlkdWFsIHRlc3QgY2FzZXMK KyAgICBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIGFkZGVkLCBhZ2dyZWdhdGluZyB0 aGUgcmVzdWx0cy4gV2hlbgorICAgIHN1YmNsYXNzaW5nLCBkbyBub3QgZm9yZ2V0IHRvIGNhbGwg dGhlIGJhc2UgY2xhc3MgY29uc3RydWN0b3IuCisgICAgIiIiCisgICAgCisKKyAgICBkZWYgcnVu KHNlbGYsIHJlc3VsdCk6CisgICAgICAgIHNlbGYuX3dyYXBwZWRfcnVuKHJlc3VsdCkKKyAgICAg ICAgc2VsZi5fdGVhckRvd25QcmV2aW91c0NsYXNzKE5vbmUsIHJlc3VsdCkKKyAgICAgICAgc2Vs Zi5faGFuZGxlTW9kdWxlVGVhckRvd24ocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0CisK KyAgICBkZWYgZGVidWcoc2VsZik6CisgICAgICAgICIiIlJ1biB0aGUgdGVzdHMgd2l0aG91dCBj b2xsZWN0aW5nIGVycm9ycyBpbiBhIFRlc3RSZXN1bHQiIiIKKyAgICAgICAgZGVidWcgPSBfRGVi dWdSZXN1bHQoKQorICAgICAgICBzZWxmLl93cmFwcGVkX3J1bihkZWJ1ZywgVHJ1ZSkKKyAgICAg ICAgc2VsZi5fdGVhckRvd25QcmV2aW91c0NsYXNzKE5vbmUsIGRlYnVnKQorICAgICAgICBzZWxm Ll9oYW5kbGVNb2R1bGVUZWFyRG93bihkZWJ1ZykKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCisgICAgIyBwcml2YXRlIG1ldGhvZHMKKyAgICBkZWYgX3dyYXBwZWRfcnVu KHNlbGYsIHJlc3VsdCwgZGVidWc9RmFsc2UpOgorICAgICAgICBmb3IgdGVzdCBpbiBzZWxmOgor ICAgICAgICAgICAgaWYgcmVzdWx0LnNob3VsZFN0b3A6CisgICAgICAgICAgICAgICAgYnJlYWsK KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgX2lzbm90c3VpdGUodGVzdCk6CisgICAgICAg ICAgICAgICAgc2VsZi5fdGVhckRvd25QcmV2aW91c0NsYXNzKHRlc3QsIHJlc3VsdCkKKyAgICAg ICAgICAgICAgICBzZWxmLl9oYW5kbGVNb2R1bGVGaXh0dXJlKHRlc3QsIHJlc3VsdCkKKyAgICAg ICAgICAgICAgICBzZWxmLl9oYW5kbGVDbGFzc1NldFVwKHRlc3QsIHJlc3VsdCkKKyAgICAgICAg ICAgICAgICByZXN1bHQuX3ByZXZpb3VzVGVzdENsYXNzID0gdGVzdC5fX2NsYXNzX18KKyAgICAg ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZ2V0YXR0cih0ZXN0Ll9fY2xhc3NfXywg J19jbGFzc1NldHVwRmFpbGVkJywgRmFsc2UpIG9yIAorICAgICAgICAgICAgICAgICAgICBnZXRh dHRyKHJlc3VsdCwgJ19tb2R1bGVTZXRVcEZhaWxlZCcsIEZhbHNlKSk6CisgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIGhhc2F0dHIodGVz dCwgJ193cmFwcGVkX3J1bicpOgorICAgICAgICAgICAgICAgIHRlc3QuX3dyYXBwZWRfcnVuKHJl c3VsdCwgZGVidWcpCisgICAgICAgICAgICBlbGlmIG5vdCBkZWJ1ZzoKKyAgICAgICAgICAgICAg ICB0ZXN0KHJlc3VsdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGVzdC5k ZWJ1ZygpCisgICAgCisgICAgZGVmIF9oYW5kbGVDbGFzc1NldFVwKHNlbGYsIHRlc3QsIHJlc3Vs dCk6CisgICAgICAgIHByZXZpb3VzQ2xhc3MgPSBnZXRhdHRyKHJlc3VsdCwgJ19wcmV2aW91c1Rl c3RDbGFzcycsIE5vbmUpCisgICAgICAgIGN1cnJlbnRDbGFzcyA9IHRlc3QuX19jbGFzc19fCisg ICAgICAgIGlmIGN1cnJlbnRDbGFzcyA9PSBwcmV2aW91c0NsYXNzOgorICAgICAgICAgICAgcmV0 dXJuCisgICAgICAgIGlmIHJlc3VsdC5fbW9kdWxlU2V0VXBGYWlsZWQ6CisgICAgICAgICAgICBy ZXR1cm4KKyAgICAgICAgaWYgZ2V0YXR0cihjdXJyZW50Q2xhc3MsICJfX3VuaXR0ZXN0X3NraXBf XyIsIEZhbHNlKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAKKyAgICAgICAgdHJ5Ogor ICAgICAgICAgICAgY3VycmVudENsYXNzLl9jbGFzc1NldHVwRmFpbGVkID0gRmFsc2UKKyAgICAg ICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICMgdGVzdCBtYXkgYWN0dWFsbHkgYmUg YSBmdW5jdGlvbgorICAgICAgICAgICAgIyBzbyBpdHMgY2xhc3Mgd2lsbCBiZSBhIGJ1aWx0aW4t dHlwZQorICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgCisgICAgICAgIHNldFVwQ2xhc3Mg PSBnZXRhdHRyKGN1cnJlbnRDbGFzcywgJ3NldFVwQ2xhc3MnLCBOb25lKQorICAgICAgICBpZiBz ZXRVcENsYXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAg IHNldFVwQ2xhc3MoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAg ICAgICAgICBpZiBpc2luc3RhbmNlKHJlc3VsdCwgX0RlYnVnUmVzdWx0KToKKyAgICAgICAgICAg ICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBjdXJyZW50Q2xhc3MuX2NsYXNzU2V0dXBG YWlsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gdXRpbC5zdHJjbGFzcyhj dXJyZW50Q2xhc3MpCisgICAgICAgICAgICAgICAgZXJyb3JOYW1lID0gJ3NldFVwQ2xhc3MgKCVz KScgJSBjbGFzc05hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRDbGFzc09yTW9kdWxlTGV2 ZWxFeGNlcHRpb24ocmVzdWx0LCBlLCBlcnJvck5hbWUpCisgICAgCisgICAgZGVmIF9nZXRfcHJl dmlvdXNfbW9kdWxlKHNlbGYsIHJlc3VsdCk6CisgICAgICAgIHByZXZpb3VzTW9kdWxlID0gTm9u ZQorICAgICAgICBwcmV2aW91c0NsYXNzID0gZ2V0YXR0cihyZXN1bHQsICdfcHJldmlvdXNUZXN0 Q2xhc3MnLCBOb25lKQorICAgICAgICBpZiBwcmV2aW91c0NsYXNzIGlzIG5vdCBOb25lOgorICAg ICAgICAgICAgcHJldmlvdXNNb2R1bGUgPSBwcmV2aW91c0NsYXNzLl9fbW9kdWxlX18KKyAgICAg ICAgcmV0dXJuIHByZXZpb3VzTW9kdWxlCisgICAgICAgIAorICAgICAgICAKKyAgICBkZWYgX2hh bmRsZU1vZHVsZUZpeHR1cmUoc2VsZiwgdGVzdCwgcmVzdWx0KToKKyAgICAgICAgcHJldmlvdXNN b2R1bGUgPSBzZWxmLl9nZXRfcHJldmlvdXNfbW9kdWxlKHJlc3VsdCkKKyAgICAgICAgY3VycmVu dE1vZHVsZSA9IHRlc3QuX19jbGFzc19fLl9fbW9kdWxlX18KKyAgICAgICAgaWYgY3VycmVudE1v ZHVsZSA9PSBwcmV2aW91c01vZHVsZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAKKyAg ICAgICAgc2VsZi5faGFuZGxlTW9kdWxlVGVhckRvd24ocmVzdWx0KQorCisgICAgICAgIAorICAg ICAgICByZXN1bHQuX21vZHVsZVNldFVwRmFpbGVkID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAg ICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbY3VycmVudE1vZHVsZV0KKyAgICAgICAgZXhj ZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNldFVwTW9kdWxlID0g Z2V0YXR0cihtb2R1bGUsICdzZXRVcE1vZHVsZScsIE5vbmUpCisgICAgICAgIGlmIHNldFVwTW9k dWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNldFVw TW9kdWxlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAg ICAgaWYgaXNpbnN0YW5jZShyZXN1bHQsIF9EZWJ1Z1Jlc3VsdCk6CisgICAgICAgICAgICAgICAg ICAgIHJhaXNlCisgICAgICAgICAgICAgICAgcmVzdWx0Ll9tb2R1bGVTZXRVcEZhaWxlZCA9IFRy dWUKKyAgICAgICAgICAgICAgICBlcnJvck5hbWUgPSAnc2V0VXBNb2R1bGUgKCVzKScgJSBjdXJy ZW50TW9kdWxlCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkQ2xhc3NPck1vZHVsZUxldmVsRXhj ZXB0aW9uKHJlc3VsdCwgZSwgZXJyb3JOYW1lKQorCisgICAgZGVmIF9hZGRDbGFzc09yTW9kdWxl TGV2ZWxFeGNlcHRpb24oc2VsZiwgcmVzdWx0LCBleGNlcHRpb24sIGVycm9yTmFtZSk6CisgICAg ICAgIGVycm9yID0gX0Vycm9ySG9sZGVyKGVycm9yTmFtZSkKKyAgICAgICAgYWRkU2tpcCA9IGdl dGF0dHIocmVzdWx0LCAnYWRkU2tpcCcsIE5vbmUpCisgICAgICAgIGlmIGFkZFNraXAgaXMgbm90 IE5vbmUgYW5kIGlzaW5zdGFuY2UoZXhjZXB0aW9uLCBjYXNlLlNraXBUZXN0KToKKyAgICAgICAg ICAgIGFkZFNraXAoZXJyb3IsIHN0cihleGNlcHRpb24pKQorICAgICAgICBlbHNlOgorICAgICAg ICAgICAgcmVzdWx0LmFkZEVycm9yKGVycm9yLCBzeXMuZXhjX2luZm8oKSkKKyAgICAKKyAgICBk ZWYgX2hhbmRsZU1vZHVsZVRlYXJEb3duKHNlbGYsIHJlc3VsdCk6CisgICAgICAgIHByZXZpb3Vz TW9kdWxlID0gc2VsZi5fZ2V0X3ByZXZpb3VzX21vZHVsZShyZXN1bHQpCisgICAgICAgIGlmIHBy ZXZpb3VzTW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgcmVz dWx0Ll9tb2R1bGVTZXRVcEZhaWxlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAg CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW3ByZXZpb3Vz TW9kdWxlXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKwor ICAgICAgICB0ZWFyRG93bk1vZHVsZSA9IGdldGF0dHIobW9kdWxlLCAndGVhckRvd25Nb2R1bGUn LCBOb25lKQorICAgICAgICBpZiB0ZWFyRG93bk1vZHVsZSBpcyBub3QgTm9uZToKKyAgICAgICAg ICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZWFyRG93bk1vZHVsZSgpCisgICAgICAgICAgICBl eGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0 LCBfRGVidWdSZXN1bHQpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAg ICAgIGVycm9yTmFtZSA9ICd0ZWFyRG93bk1vZHVsZSAoJXMpJyAlIHByZXZpb3VzTW9kdWxlCisg ICAgICAgICAgICAgICAgc2VsZi5fYWRkQ2xhc3NPck1vZHVsZUxldmVsRXhjZXB0aW9uKHJlc3Vs dCwgZSwgZXJyb3JOYW1lKQorICAgIAorICAgIGRlZiBfdGVhckRvd25QcmV2aW91c0NsYXNzKHNl bGYsIHRlc3QsIHJlc3VsdCk6CisgICAgICAgIHByZXZpb3VzQ2xhc3MgPSBnZXRhdHRyKHJlc3Vs dCwgJ19wcmV2aW91c1Rlc3RDbGFzcycsIE5vbmUpCisgICAgICAgIGN1cnJlbnRDbGFzcyA9IHRl c3QuX19jbGFzc19fCisgICAgICAgIGlmIGN1cnJlbnRDbGFzcyA9PSBwcmV2aW91c0NsYXNzOgor ICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGdldGF0dHIocHJldmlvdXNDbGFzcywgJ19j bGFzc1NldHVwRmFpbGVkJywgRmFsc2UpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlm IGdldGF0dHIocmVzdWx0LCAnX21vZHVsZVNldFVwRmFpbGVkJywgRmFsc2UpOgorICAgICAgICAg ICAgcmV0dXJuCisgICAgICAgIGlmIGdldGF0dHIocHJldmlvdXNDbGFzcywgIl9fdW5pdHRlc3Rf c2tpcF9fIiwgRmFsc2UpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIAorICAgICAgICB0 ZWFyRG93bkNsYXNzID0gZ2V0YXR0cihwcmV2aW91c0NsYXNzLCAndGVhckRvd25DbGFzcycsIE5v bmUpCisgICAgICAgIGlmIHRlYXJEb3duQ2xhc3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0 cnk6CisgICAgICAgICAgICAgICAgdGVhckRvd25DbGFzcygpCisgICAgICAgICAgICBleGNlcHQg RXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0LCBfRGVi dWdSZXN1bHQpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGNs YXNzTmFtZSA9IHV0aWwuc3RyY2xhc3MocHJldmlvdXNDbGFzcykKKyAgICAgICAgICAgICAgICBl cnJvck5hbWUgPSAndGVhckRvd25DbGFzcyAoJXMpJyAlIGNsYXNzTmFtZQorICAgICAgICAgICAg ICAgIHNlbGYuX2FkZENsYXNzT3JNb2R1bGVMZXZlbEV4Y2VwdGlvbihyZXN1bHQsIGUsIGVycm9y TmFtZSkKKworCitjbGFzcyBfRXJyb3JIb2xkZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBQbGFj ZWhvbGRlciBmb3IgYSBUZXN0Q2FzZSBpbnNpZGUgYSByZXN1bHQuIEFzIGZhciBhcyBhIFRlc3RS ZXN1bHQKKyAgICBpcyBjb25jZXJuZWQsIHRoaXMgbG9va3MgZXhhY3RseSBsaWtlIGEgdW5pdCB0 ZXN0LiBVc2VkIHRvIGluc2VydAorICAgIGFyYml0cmFyeSBlcnJvcnMgaW50byBhIHRlc3Qgc3Vp dGUgcnVuLgorICAgICIiIgorICAgICMgSW5zcGlyZWQgYnkgdGhlIEVycm9ySG9sZGVyIGZyb20g VHdpc3RlZDoKKyAgICAjIGh0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS90cmFjL2Jyb3dzZXIvdHJ1 bmsvdHdpc3RlZC90cmlhbC9ydW5uZXIucHkKKworICAgICMgYXR0cmlidXRlIHVzZWQgYnkgVGVz dFJlc3VsdC5fZXhjX2luZm9fdG9fc3RyaW5nCisgICAgZmFpbHVyZUV4Y2VwdGlvbiA9IE5vbmUK KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXNjcmlwdGlvbik6CisgICAgICAgIHNlbGYuZGVz Y3JpcHRpb24gPSBkZXNjcmlwdGlvbgorCisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1 cm4gc2VsZi5kZXNjcmlwdGlvbgorCisgICAgZGVmIHNob3J0RGVzY3JpcHRpb24oc2VsZik6Cisg ICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJl dHVybiAiPEVycm9ySG9sZGVyIGRlc2NyaXB0aW9uPSVyPiIgJSAoc2VsZi5kZXNjcmlwdGlvbiwp CisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaWQoKQorCisg ICAgZGVmIHJ1bihzZWxmLCByZXN1bHQpOgorICAgICAgICAjIGNvdWxkIGNhbGwgcmVzdWx0LmFk ZEVycm9yKC4uLikgLSBidXQgdGhpcyB0ZXN0LWxpa2Ugb2JqZWN0CisgICAgICAgICMgc2hvdWxk bid0IGJlIHJ1biBhbnl3YXkKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYs IHJlc3VsdCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bihyZXN1bHQpCisKKyAgICBkZWYgY291 bnRUZXN0Q2FzZXMoc2VsZik6CisgICAgICAgIHJldHVybiAwCisKK2RlZiBfaXNub3RzdWl0ZSh0 ZXN0KToKKyAgICAiQSBjcnVkZSB3YXkgdG8gdGVsbCBhcGFydCB0ZXN0Y2FzZXMgYW5kIHN1aXRl cyB3aXRoIGR1Y2stdHlwaW5nIgorICAgIHRyeToKKyAgICAgICAgaXRlcih0ZXN0KQorICAgIGV4 Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisK KworY2xhc3MgX0RlYnVnUmVzdWx0KG9iamVjdCk6CisgICAgIlVzZWQgYnkgdGhlIFRlc3RTdWl0 ZSB0byBob2xkIHByZXZpb3VzIGNsYXNzIHdoZW4gcnVubmluZyBpbiBkZWJ1Zy4iCisgICAgX3By ZXZpb3VzVGVzdENsYXNzID0gTm9uZQorICAgIF9tb2R1bGVTZXRVcEZhaWxlZCA9IEZhbHNlCisg ICAgc2hvdWxkU3RvcCA9IEZhbHNlCgo9PT0gYWRkZWQgZmlsZSAnc3RvcmFnZS9uZGIvbWNjL3Rz dC91bml0dGVzdDIvdXRpbC5weScKLS0tIGEvc3RvcmFnZS9uZGIvbWNjL3RzdC91bml0dGVzdDIv dXRpbC5weQkxOTcwLTAxLTAxIDAwOjAwOjAwICswMDAwCisrKyBiL3N0b3JhZ2UvbmRiL21jYy90 c3QvdW5pdHRlc3QyL3V0aWwucHkJMjAxMi0xMS0xOSAxMzowMDo0NCArMDAwMApAQCAtMCwwICsx LDk5IEBACisiIiJWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zLiIiIgorCitfX3VuaXR0ZXN0ID0g VHJ1ZQorCisKK19NQVhfTEVOR1RIID0gODAKK2RlZiBzYWZlX3JlcHIob2JqLCBzaG9ydD1GYWxz ZSk6CisgICAgdHJ5OgorICAgICAgICByZXN1bHQgPSByZXByKG9iaikKKyAgICBleGNlcHQgRXhj ZXB0aW9uOgorICAgICAgICByZXN1bHQgPSBvYmplY3QuX19yZXByX18ob2JqKQorICAgIGlmIG5v dCBzaG9ydCBvciBsZW4ocmVzdWx0KSA8IF9NQVhfTEVOR1RIOgorICAgICAgICByZXR1cm4gcmVz dWx0CisgICAgcmV0dXJuIHJlc3VsdFs6X01BWF9MRU5HVEhdICsgJyBbdHJ1bmNhdGVkXS4uLicK KworZGVmIHNhZmVfc3RyKG9iaik6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gc3RyKG9iaikK KyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXR1cm4gb2JqZWN0Ll9fc3RyX18ob2Jq KQorCitkZWYgc3RyY2xhc3MoY2xzKToKKyAgICByZXR1cm4gIiVzLiVzIiAlIChjbHMuX19tb2R1 bGVfXywgY2xzLl9fbmFtZV9fKQorCitkZWYgc29ydGVkX2xpc3RfZGlmZmVyZW5jZShleHBlY3Rl ZCwgYWN0dWFsKToKKyAgICAiIiJGaW5kcyBlbGVtZW50cyBpbiBvbmx5IG9uZSBvciB0aGUgb3Ro ZXIgb2YgdHdvLCBzb3J0ZWQgaW5wdXQgbGlzdHMuCisKKyAgICBSZXR1cm5zIGEgdHdvLWVsZW1l bnQgdHVwbGUgb2YgbGlzdHMuICAgIFRoZSBmaXJzdCBsaXN0IGNvbnRhaW5zIHRob3NlCisgICAg ZWxlbWVudHMgaW4gdGhlICJleHBlY3RlZCIgbGlzdCBidXQgbm90IGluIHRoZSAiYWN0dWFsIiBs aXN0LCBhbmQgdGhlCisgICAgc2Vjb25kIGNvbnRhaW5zIHRob3NlIGVsZW1lbnRzIGluIHRoZSAi YWN0dWFsIiBsaXN0IGJ1dCBub3QgaW4gdGhlCisgICAgImV4cGVjdGVkIiBsaXN0LiAgICBEdXBs aWNhdGUgZWxlbWVudHMgaW4gZWl0aGVyIGlucHV0IGxpc3QgYXJlIGlnbm9yZWQuCisgICAgIiIi CisgICAgaSA9IGogPSAwCisgICAgbWlzc2luZyA9IFtdCisgICAgdW5leHBlY3RlZCA9IFtdCisg ICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZSA9IGV4cGVjdGVkW2ld CisgICAgICAgICAgICBhID0gYWN0dWFsW2pdCisgICAgICAgICAgICBpZiBlIDwgYToKKyAgICAg ICAgICAgICAgICBtaXNzaW5nLmFwcGVuZChlKQorICAgICAgICAgICAgICAgIGkgKz0gMQorICAg ICAgICAgICAgICAgIHdoaWxlIGV4cGVjdGVkW2ldID09IGU6CisgICAgICAgICAgICAgICAgICAg IGkgKz0gMQorICAgICAgICAgICAgZWxpZiBlID4gYToKKyAgICAgICAgICAgICAgICB1bmV4cGVj dGVkLmFwcGVuZChhKQorICAgICAgICAgICAgICAgIGogKz0gMQorICAgICAgICAgICAgICAgIHdo aWxlIGFjdHVhbFtqXSA9PSBhOgorICAgICAgICAgICAgICAgICAgICBqICs9IDEKKyAgICAgICAg ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAgICAgdHJ5Ogor ICAgICAgICAgICAgICAgICAgICB3aGlsZSBleHBlY3RlZFtpXSA9PSBlOgorICAgICAgICAgICAg ICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg ICAgICAgICAgaiArPSAxCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIGFjdHVhbFtqXSA9PSBh OgorICAgICAgICAgICAgICAgICAgICAgICAgaiArPSAxCisgICAgICAgIGV4Y2VwdCBJbmRleEVy cm9yOgorICAgICAgICAgICAgbWlzc2luZy5leHRlbmQoZXhwZWN0ZWRbaTpdKQorICAgICAgICAg ICAgdW5leHBlY3RlZC5leHRlbmQoYWN0dWFsW2o6XSkKKyAgICAgICAgICAgIGJyZWFrCisgICAg cmV0dXJuIG1pc3NpbmcsIHVuZXhwZWN0ZWQKKworZGVmIHVub3JkZXJhYmxlX2xpc3RfZGlmZmVy ZW5jZShleHBlY3RlZCwgYWN0dWFsLCBpZ25vcmVfZHVwbGljYXRlPUZhbHNlKToKKyAgICAiIiJT YW1lIGJlaGF2aW9yIGFzIHNvcnRlZF9saXN0X2RpZmZlcmVuY2UgYnV0CisgICAgZm9yIGxpc3Rz IG9mIHVub3JkZXJhYmxlIGl0ZW1zIChsaWtlIGRpY3RzKS4KKworICAgIEFzIGl0IGRvZXMgYSBs aW5lYXIgc2VhcmNoIHBlciBpdGVtIChyZW1vdmUpIGl0CisgICAgaGFzIE8obipuKSBwZXJmb3Jt YW5jZS4KKyAgICAiIiIKKyAgICBtaXNzaW5nID0gW10KKyAgICB1bmV4cGVjdGVkID0gW10KKyAg ICB3aGlsZSBleHBlY3RlZDoKKyAgICAgICAgaXRlbSA9IGV4cGVjdGVkLnBvcCgpCisgICAgICAg IHRyeToKKyAgICAgICAgICAgIGFjdHVhbC5yZW1vdmUoaXRlbSkKKyAgICAgICAgZXhjZXB0IFZh bHVlRXJyb3I6CisgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZChpdGVtKQorICAgICAgICBpZiBp Z25vcmVfZHVwbGljYXRlOgorICAgICAgICAgICAgZm9yIGxzdCBpbiBleHBlY3RlZCwgYWN0dWFs OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToK KyAgICAgICAgICAgICAgICAgICAgICAgIGxzdC5yZW1vdmUoaXRlbSkKKyAgICAgICAgICAgICAg ICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgIGlmIGln bm9yZV9kdXBsaWNhdGU6CisgICAgICAgIHdoaWxlIGFjdHVhbDoKKyAgICAgICAgICAgIGl0ZW0g PSBhY3R1YWwucG9wKCkKKyAgICAgICAgICAgIHVuZXhwZWN0ZWQuYXBwZW5kKGl0ZW0pCisgICAg ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAg ICAgICAgYWN0dWFsLnJlbW92ZShpdGVtKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6 CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gbWlzc2luZywgdW5leHBlY3Rl ZAorCisgICAgIyBhbnl0aGluZyBsZWZ0IGluIGFjdHVhbCBpcyB1bmV4cGVjdGVkCisgICAgcmV0 dXJuIG1pc3NpbmcsIGFjdHVhbAoKTm8gYnVuZGxlIChyZWFzb246IHVzZWxlc3MgZm9yIHB1c2gg ZW1haWxzKS4=