ZGlmZiAtLWdpdCBhL01hYy9EZW1vL2FwcGxlc2NyaXB0Lmh0bWwgYi9NYWMvRGVtby9hcHBsZXNjcmlwdC5odG1sCmluZGV4IGY1MjdiNTIuLjhhMjZhOWIgMTAwNjQ0Ci0tLSBhL01hYy9EZW1vL2FwcGxlc2NyaXB0Lmh0bWwKKysrIGIvTWFjL0RlbW8vYXBwbGVzY3JpcHQuaHRtbApAQCAtMyw4ICszLDcgQEAKIDxIMT5Vc2luZyBPcGVuIFNjcmlwdGluZyBFeHRlbnNpb24gZnJvbSBQeXRob248L0gxPgogPEhSPgogCi1PU0Egc3VwcG9ydCBpbiBQeXRob24gaXMgc3RpbGwgZmFyIGZyb20gY29tcGxldGUsIGFuZCB3aGF0Ci1zdXBwb3J0IHRoZXJlIGlzIGlzIGxpa2VseSB0byBjaGFuZ2UgaW4gdGhlIGZvcnNlZWFibGUgZnV0dXJlLiBTdGlsbCwKK09TQSBzdXBwb3J0IGluIFB5dGhvbiBpcyBzdGlsbCBub3QgMTAwJSBjb21wbGV0ZSwgYnV0CiB0aGVyZSBpcyBhbHJlYWR5IGVub3VnaCBpbiBwbGFjZSB0byBhbGxvdyB5b3UgdG8gZG8gc29tZSBuaWZ0eSB0aGluZ3MKIHRvIG90aGVyIHByb2dyYW1zIGZyb20geW91ciBweXRob24gcHJvZ3JhbS4gIDxQPgogCkBAIC0yMCwxMSArMTksMjcgQEAKIHRvIGNvbmNlbnRyYXRlIG9uIHRoZSBPU0EgZGV0YWlscyB3ZSBkb24ndCBib3RoZXIgd2l0aCBhIHJlYWwKIHVzZXItaW50ZXJmYWNlIGZvciBvdXIgYXBwbGljYXRpb24uIDxwPgogCi1UaGUgYXBwbGljYXRpb24gd2UgYXJlIGdvaW5nIHRvIHNjcmlwdCBpcyBFdWRvcmEgTGlnaHQsIGEgZnJlZSBtYWlsCi1wcm9ncmFtIGZyb20gPEEgSFJFRj0iaHR0cDovL3d3dy5xdWFsY29tbS5jb20iPlF1YWxDb21tPC9BPi4gVGhpcyBpcyBhCi12ZXJ5IHZlcnNhdGlsZSBtYWlsLXJlYWRlciwgYW5kIFF1YWxDb21tIGhhcyBhbiBhY2NvbXBhbnlpbmcKLWNvbW1lcmNpYWwgdmVyc2lvbiBvbmNlIHlvdXIgbmVlZHMgb3V0Z3JvdyBFdWRvcmEgTGlnaHQuIE91ciBwcm9ncmFtCi13aWxsIHRlbGwgRXVkb3JhIHRvIHNlbmQgcXVldWVkIG1haWwsIHJldHJpZXZlIG1haWwgb3IgcXVpdC4gPHA+CitUaGUgYXBwbGljYXRpb24gd2UgYXJlIGdvaW5nIHRvIHNjcmlwdCBpcyBEaXNrIENvcHksIEFwcGxlJ3Mgc3RhbmRhcmQKK3V0aWxpdHkgZm9yIG1ha2luZyBjb3BpZXMgb2YgZmxvcHBpZXMsIGNyZWF0aW5nIGZpbGVzIHRoYXQgYXJlIG1vdW50YWJsZQorYXMgZGlzayBpbWFnZXMsIGV0Yy4gPHA+CisKKzxIMj5QeXRob24gT1NBIGFyY2hpdGVjdHVyZTwvSDI+CisKK09wZW4gU2NyaXB0aW5nIHN1aXRlcyBhbmQgaW5oZXJpdGFuY2UgY2FuIGJlIG1vZGVsbGVkIHJhdGhlciBuaWNlbHkgd2l0aAord2l0aCBQeXRob24gcGFja2FnZXMsIHNvIGZvciBlYWNoIGFwcGxpY2F0aW9uIHdlIHdhbnQgdG8gc2NyaXB0IHdlIGdlbmVyYXRlCithIHBhY2thZ2UuIEVhY2ggc3VpdGUgZGVmaW5lZCBpbiB0aGUgYXBwbGljYXRpb24gYmVjb21lcyBhIG1vZHVsZSBpbiB0aGUKK3BhY2thZ2UsIGFuZCB0aGUgcGFja2FnZSBtYWluIG1vZHVsZSBpbXBvcnRzIGV2ZXJ5dGhpbmcgZnJvbSBhbGwgdGhlCitzdWJtb2R1bGVzIGFuZCBnbHVlcyBhbGwgdGhlIGNsYXNzZXMgKFB5dGhvbiB0ZXJtaW5vbG9neSwgT1NBIHRlcm1pbm9sb2d5IGlzCitldmVudHMsIEFwcGxlU2NyaXB0IHRlcm1pbm9sb2d5IGlzIHZlcmJzKSB0b2dldGhlci4gPHA+CisKK0Egc3VpdGUgaW4gYW4gT1NBIGFwcGxpY2F0aW9uIGNhbiBleHRlbmQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYSBzdGFuZGFyZAorc3VpdGUsIGFuZCB0aGlzIGlzIGltcGxlbWVudGVkIGluIFB5dGhvbiBieSBpbXBvcnRpbmcgZXZlcnl0aGluZyBmcm9tIHRoZQorbW9kdWxlIHRoYXQgaW1wbGVtZW50cyB0aGUgc3RhbmRhcmQgc3VpdGUgYW5kIG92ZXJyaWRpbmcgYW55dGhpbmcgdGhhdCBoYXMKK2JlZW4gZXh0ZW5kZWQuIFRoZSBzdGFuZGFyZCBzdWl0ZXMgbGl2ZSBpbiB0aGUgU3RkU3VpdGUgcGFja2FnZS4gPHA+CisKK1RoaXMgYWxsIHNvdW5kcyBjb21wbGljYXRlZCwgYW5kIHlvdSBjYW4gZG8gc3RyYW5nZSBhbmQgd29uZHJvdXMgdGhpbmdzCit3aXRoIGl0IG9uY2UgeW91IGZ1bGx5IHVuZGVyc3RhbmQgaXQsIGJ1dCB0aGUgZ29vZCBuZXdzIGlzIHRoYXQgc2ltcGxlCitzY3JpcHRpbmcgaXMgYWN0dWFsbHkgcHJldHR5IHNpbXBsZS4gPHA+CiAKIDxIMj5DcmVhdGluZyB0aGUgUHl0aG9uIGludGVyZmFjZSBtb2R1bGU8L0gyPgogCkBAIC0zMyw1MSArNDgsNjAgQEAKIEFwcGxlU2NyaXB0IGRpY3Rpb25hcnkuIFRoaXMgdG9vbCBpcyBjYWxsZWQKIDxDT0RFPmdlbnN1aXRlbW9kdWxlLnB5PC9DT0RFPiwgYW5kIGxpdmVzIGluIDxDT0RFPk1hYzpzY3JpcHRzPC9DT0RFPi4KIFdoZW4gd2Ugc3RhcnQgaXQsIGl0IGFza3MgdXMgZm9yIGFuIGlucHV0IGZpbGUgYW5kIHdlIHBvaW50IGl0IHRvIHRoZQotRXVkb3JhIExpZ2h0IGV4ZWN1dGFibGUuIEl0IHN0YXJ0cyBwYXJzaW5nIHRoZSBBRVRFIHJlc291cmNlLCBhbmQgZm9yCitEaXNrIENvcHkgZXhlY3V0YWJsZS4gPHA+CisKK05leHQgaXQgd2FudHMgYSBmb2xkZXIgd2hlcmUgaXQgd2lsbCBzdG9yZSB0aGUgcGFja2FnZSBpdCBpcyBnb2luZyB0byBnZW5lcmF0ZS4KK05vdGUgdGhhdCB0aGlzIGlzIHRoZSBwYWNrYWdlIGZvbGRlciwgbm90IHRoZSBwYXJlbnQgZm9sZGVyLCBzbyB3ZQorbmF2aWdhdGUgdG8gPGNvZGU+UHl0aG9uOk1hYzpEZW1vOmFwcGxlc2NyaXB0PC9jb2RlPiwgY3JlYXRlIGEgZm9sZGVyCis8Y29kZT5EaXNrX0NvcHk8L2NvZGU+IGFuZCBzZWxlY3QgdGhhdC4gPHA+CisKK05leHQgaXQgd2FudHMgdGhlIGZvbGRlciBmcm9tIHdoaWNoIGl0IHNob3VsZCBpbXBvcnQgdGhlIHN0YW5kYXJkIHN1aXRlcy4gSGVyZQoreW91IGFsd2F5cyBzZWxlY3QgPGNvZGU+UHl0aG9uOk1hYzpMaWI6bGliLXNjcmlwdHBhY2thZ2VzPC9jb2RlPi4gKFRoZXJlIGlzCitvbmUgZXhjZXB0aW9uIHRvIHRoaXMgcnVsZTogd2hlbiB5b3UgYXJlIGdlbmVyYXRpbmcgPGNvZGU+U3RkU3VpdGVzPC9jb2RlPiBpdHNlbGYKK3lvdSBzZWxlY3QgPGNvZGU+Y2FuY2VsPC9jb2RlPiwgZm9yIG9idmlvdXMgcmVhc29ucykuIDxwPgorCitJdCBzdGFydHMgcGFyc2luZyB0aGUgQUVURSByZXNvdXJjZSwgYW5kIGZvcgogZWFjaCBBcHBsZUV2ZW50IHN1aXRlIGl0IGZpbmRzIGl0IHByb21wdHMgdXMgZm9yIHRoZSBmaWxlbmFtZSBvZiB0aGUKIHJlc3VsdGluZyBweXRob24gbW9kdWxlLiBSZW1lbWJlciB0byBjaGFuZ2UgZm9sZGVycyBmb3IgdGhlIGZpcnN0CiBtb2R1bGUsIHlvdSBkb24ndCB3YW50IHRvIGNsdXR0ZXIgdXAgdGhlIEV1ZG9yYSBmb2xkZXIgd2l0aCB5b3VyIHB5dGhvbgogaW50ZXJmYWNlcy4gSWYgeW91IHdhbnQgdG8gc2tpcCBhIHN1aXRlIHlvdSBwcmVzcyBjYW5jZWwgYW5kIHRoZSBwcm9jZXNzCi1jb250aW51ZXMgd2l0aCB0aGUgbmV4dCBzdWl0ZS4gSW4gdGhlIGNhc2Ugb2YgRXVkb3JhLCB5b3UgZG8KLTxFTT5ub3Q8L0VNPiB3YW50IHRvIGdlbmVyYXRlIHRoZSBSZXF1aXJlZCBhbmQgU3RhbmRhcmQgc3VpdGVzLCBiZWNhdXNlCi10aGV5IGFyZSBpZGVudGljYWwgdG8gdGhlIHN0YW5kYXJkIG9uZXMgd2hpY2ggYXJlIHByZWdlbmVyYXRlZCAoYW5kCi1lbXB0eSBpbiB0aGUgZXVkb3JhIGJpbmFyeSkuIEFwcGxlU2NyaXB0IHVuZGVyc3RhbmRzIHRoYXQgYW4gZW1wdHkgc3VpdGUKLW1lYW5zICJpbmNvcnBvcmF0ZSB0aGUgd2hvbGUgc3RhbmRhcmQgc3VpdGUgYnkgdGhpcyBuYW1lIiwKLWdlbnN1aXRlbW9kdWxlIGRvZXMgbm90IGN1cnJlbnRseSB1bmRlcnN0YW5kIHRoaXMuIENyZWF0aW5nIHRoZSBlbXB0eQotPENPREU+UmVxdWlyZWRfU3VpdGUucHk8L0NPREU+IHdvdWxkIGhpZGUgdGhlIGNvcnJlY3QgbW9kdWxlIG9mIHRoYXQKLW5hbWUgZnJvbSBvdXIgYXBwbGljYXRpb24uIDxwPgorY29udGludWVzIHdpdGggdGhlIG5leHQgc3VpdGUuIDxwPgogCiBHZW5zdWl0ZW1vZHVsZSBtYXkgYXNrIHlvdSBxdWVzdGlvbnMgbGlrZSAiV2hlcmUgaXMgZW51bSAneHl6ICcgZGVjbGFyZWQ/Ii4KLUZvciB0aGUgZmlyc3QgdGltZSwgY2FuY2VsIG91dCBvZiB0aGlzIGRpYWxvZyBhZnRlciB0YWtpbmcgZG93biB0aGUKLWVudW0gKG9yIGNsYXNzIG9yIHByb3ApIG5hbWUuIEFmdGVyIHlvdSd2ZSBjcmVhdGVkIGFsbCB0aGUgc3VpdGVzIGxvb2sKLWZvciB0aGVzZSBjb2RlcywgaW4gdGhlIHN1aXRlcyBnZW5lcmF0ZWQgaGVyZSBhbmQgaW4gdGhlIHN0YW5kYXJkIHN1aXRlcy4KLUlmIHlvdSd2ZSBmb3VuZCB0aGVtIGFsbCBydW4gZ2Vuc3VpdGVtb2R1bGUgYWdhaW4gYW5kIHBvaW50IGl0IHRvIHRoZSByaWdodAotZmlsZSBmb3IgZWFjaCBkZWNsYXJhdGlvbi4gR2Vuc3VpdGVtb2R1bGUgd2lsbCBnZW5lcmF0ZSB0aGUgaW1wb3J0cyB0byBtYWtlIHRoZQotcmVmZXJlbmNlIHdvcmsuIDxwPgorVGhpcyBpcyBlaXRoZXIgZHVlIHRvIGEgbWlzdW5kZXJzdGFuZGluZyBvbiBteSBwYXJ0IG9yIChyYXRoZXIgdG9vIGNvbW1vbikKK2J1Z3MgaW4gdGhlIEFFVEUgcmVzb3VyY2VzLiBQcmVzc2luZyA8Y29kZT5jYW5jZWw8L2NvZGU+IGlzIHVzdWFsbHkgdGhlCityaWdodCBvcHRpb24sIGl0IHdpbGwgY2F1c2UgdGhlIHNwZWNpZmljIGVudW0gbm90IHRvIGJlIHRyZWF0ZWQgYXMgYW4gZW51bQorYnV0IGFzIGEgIm5vcm1hbCIgdHlwZS4gQXMgdGhpbmdzIGxpa2UgZnNzcGVjcyBhbmQgVEVYVCBzdHJpbmdzIGNsZWFybHkgYXJlCitub3QgZW51bWVyYXRvcnMgdGhpcyBpcyBjb3JyZWN0LiBJZiBzb21lb25lIHVuZGVyc3RhbmRzIHdoYXQgaXMgcmVhbGx5IGdvaW5nIG9uCitoZXJlIHBsZWFzZSBsZXQgbWUga25vdy4gPHA+CiAKIDxCTE9DS1FVT1RFPgotVGltZSBmb3IgYSBzaWRlYmFyLiBJZiB5b3Ugd2FudCB0byByZS1jcmVhdGUKLTxDT0RFPlJlcXVpcmVkX1N1aXRlLnB5PC9DT0RFPiBvciBvbmUgb2YgdGhlIG90aGVyIHN0YW5kYXJkIG1vZHVsZXMKLXlvdSBzaG91bGQgbG9vayBpbiA8Q09ERT5TeXN0ZW0gRm9sZGVyOkV4dGVuc2lvbnM6U2NyaXB0aW5nCi1BZGRpdGlvbnM6RGlhbGVjdHM6RW5nbGlzaCBEaWFsZWN0PC9DT0RFPiwgdGhhdCBpcyB3aGVyZSB0aGUgY29yZQotQXBwbGVFdmVudCBkaWN0aW9uYXJpZXMgbGl2ZS4gQWxzbywgaWYgeW91IGFyZSBsb29raW5nIGZvciB0aGUKLTxDT0RFPkZpbmRlcl9TdWl0ZTwvQ09ERT4gaW50ZXJmYWNlOiBkb24ndCBsb29rIGluIHRoZSBmaW5kZXIgKGl0IGhhcwotYW4gb2xkIFN5c3RlbSA3LjAgc2NyaXB0aW5nIHN1aXRlKSwgbG9vayBhdCB0aGUgZXh0ZW5zaW9uIDxDT0RFPkZpbmRlcgotU2NyaXB0aW5nIEV4dGVuc2lvbjwvQ09ERT4uIDxwPgorVGltZSBmb3IgYSBzaWRlYmFyLiBJZiB5b3Ugd2FudCB0byByZS1jcmVhdGUgdGhlIFN0ZFN1aXRlIG1vZHVsZXMKK3lvdSBzaG91bGQgbG9vayBpbiBvbmUgb2YgdHdvIHBsYWNlcy4gT24gb2xkZXIgc3lzdGVtcyB5b3Ugd2lsbCBmaW5kIHRoZQorQUVVVCByZXNvdXJjZXMgaW4gPENPREU+U3lzdGVtIEZvbGRlcjpFeHRlbnNpb25zOlNjcmlwdGluZworQWRkaXRpb25zOkRpYWxlY3RzOkVuZ2xpc2ggRGlhbGVjdDwvQ09ERT4uIE9uIG5ld2VyIHN5c3RlbXMgeW91IHdpbGwKK2ZpbmQgdGhlbSBpbiA8Y29kZT5TeXN0ZW0gRm9sZGVyOkV4dGVuc2lvbnM6QXBwbGVzY3JpcHQ8L2NvZGU+LiA8cD4KIDwvQkxPQ0tRVU9URT4KIAogTGV0J3MgZ2xhbmNlIGF0IHRoZSA8QQotSFJFRj0ic2NyaXB0aW5nL0V1ZG9yYV9TdWl0ZS5weSI+RXVkb3JhX1N1aXRlLnB5PC9BPiBqdXN0IGNyZWF0ZWQuIFlvdQorSFJFRj0iYXBwbGVzY3JpcHQvRGlza19Db3B5Ij5EaXNrX0NvcHk8L0E+IHBhY2thZ2UganVzdCBjcmVhdGVkLiBZb3UKIG1heSB3YW50IHRvIG9wZW4gU2NyaXB0IEVkaXRvciBhbG9uZ3NpZGUsIGFuZCBoYXZlIGEgbG9vayBhdCBob3cgaXQKLWludGVycHJldHMgdGhlIGRpY3Rpb25hcnkuIEV1ZG9yYVN1aXRlLnB5IHN0YXJ0cyB3aXRoIHNvbWUKLWJvaWxlcnBsYXRlLCB0aGVuIGEgYmlnIGNsYXNzIGRlZmluaXRpb24gd2l0aCBtZXRob2RzIGZvciBlYWNoCi1BcHBsZVNjcmlwdCBWZXJiLCB0aGVuIHNvbWUgc21hbGwgY2xhc3MgZGVmaW5pdGlvbnMgYW5kIHRoZW4gc29tZSBkaWN0aW9uYXJ5Ci1pbml0aWFsaXphdGlvbnMuIDxwPgoraW50ZXJwcmV0cyB0aGUgZGljdGlvbmFyeS4gVGhlIG1haW4gcGFja2FnZSBtb2R1bGUgaXMgaW4gPGNvZGU+X19pbml0X18ucHk8L2NvZGU+CithbmQgdGhlIG9ubHkgaW50ZXJlc3RpbmcgYml0IGlzIHRoZSA8Y29kZT5EaXNrX0NvcHk8L2NvZGU+IGNsYXNzLCB3aGljaAoraW5jbHVkZXMgdGhlIGV2ZW50IGhhbmRsaW5nIGNsYXNzZXMgZnJvbSB0aGUgaW5kaXZpZHVhbCBzdWl0ZXMuIEl0IGFsc28KK2luaGVyaXRzIDxjb2RlPmFldG9vbHMuVGFsa1RvPC9jb2RlPiwgd2hpY2ggaXMgYSBiYXNlIGNsYXNzIHRoYXQgaGFuZGxlcyBhbGwKK2RldGFpbHMgb24gaG93IHRvIHN0YXJ0IHRoZSBwcm9ncmFtIGFuZCB0YWxrIHRvIGl0LCBhbmQgYSBjbGFzcyB2YXJpYWJsZQorPGNvZGU+X3NpZ25hdHVyZTwvY29kZT4gd2hpY2ggaXMgdGhlIGRlZmF1bHQgYXBwbGljYXRpb24gdGhpcyBjbGFzcyB3aWxsIHRhbGsKK3RvICh5b3UgY2FuIG92ZXJyaWRlIHRoaXMgaW4gdmFyaW91cyB3aGVuIHlvdSBpbnN0YW50aWF0ZSB5b3VyIGNsYXNzLCBzZWUKKzxjb2RlPmFldG9vbHMucHk8L2NvZGU+IGZvciBkZXRhaWxzKS4KKyA8cD4KIAotVGhlIDxDT0RFPkV1ZG9yYV9TdWl0ZTwvQ09ERT4gY2xhc3MgaXMgdGhlIGJ1bGsgb2YgdGhlIGNvZGUKK1RoZSA8YSBocmVmPSJhcHBsZXNjcmlwdC9EaXNrX0NvcHkvU3BlY2lhbF9FdmVudHMucHkiPlNwZWNpYWxfRXZlbnRzPC9hPgorbW9kdWxlIGlzIGEgbmljZSBleGFtcGxlIG9mIGEgc3VpdGUgbW9kdWxlLgorVGhlIDxDT0RFPlNwZWNpYWxfRXZlbnRzX0V2ZW50czwvQ09ERT4gY2xhc3MgaXMgdGhlIGJ1bGsgb2YgdGhlIGNvZGUKIGdlbmVyYXRlZC4gRm9yIGVhY2ggdmVyYiBpdCBjb250YWlucyBhIG1ldGhvZC4gRWFjaCBtZXRob2Qga25vd3Mgd2hhdAotYXJndW1lbnRzIHRoZSB2ZXJiIGV4cGVjdHMsIGFuZCBpdCBtYWtlcyBoYW5keSB1c2Ugb2YgdGhlIGtleXdvcmQKLWFyZ3VtZW50IHNjaGVtZSBpbnRyb2R1Y2VkIGluIFB5dGhvbiAxLjMgdG8gcHJlc2VudCBhIHBhbGF0YWJsZQorYXJndW1lbnRzIHRoZSB2ZXJiIGV4cGVjdHMsIGFuZCBpdCBtYWtlcyBoYW5keSB1c2Ugb2Yga2V5d29yZAorYXJndW1lbnRzIHRvIHByZXNlbnQgYSBwYWxhdGFibGUKIGludGVyZmFjZSB0byB0aGUgcHl0aG9uIHByb2dyYW1tZXIuIFlvdSB3aWxsIHNlZSB0aGF0IGVhY2ggbWV0aG9kCiBjYWxscyBzb21lIHJvdXRpbmVzIGZyb20gPENPREU+YWV0b29sczwvQ09ERT4sIGFuIGF1eGlsaWFyeSBtb2R1bGUKIGxpdmluZyBpbiA8Q09ERT5MaWI6dG9vbGJveDwvQ09ERT4gd2hpY2ggY29udGFpbnMgc29tZSBvdGhlciBuaWZ0eQpAQCAtODUsOSArMTA5LDcgQEAKIGNvdXJzZSkgbm8gZG9jdW1lbnRhdGlvbiB5ZXQuIDxwPgogCiBUaGUgb3RoZXIgdGhpbmcgeW91IG5vdGljZSBpcyB0aGF0IGVhY2ggbWV0aG9kIGNhbGxzCi08Q09ERT5zZWxmLnNlbmQ8L0NPREU+LCBidXQgbm8gc3VjaCBtZXRob2QgaXMgZGVmaW5lZC4gWW91IHdpbGwgaGF2ZQotdG8gcHJvdmlkZSBpdCBieSBzdWJjbGFzc2luZyBvciBtdWx0aXBsZSBpbmhlcml0YW5jZSwgYXMgd2Ugc2hhbGwgc2VlCi1sYXRlci4gPHA+Cis8Q09ERT5zZWxmLnNlbmQ8L0NPREU+LCB0aGlzIGNvbWVzIGZyb20gdGhlIDxjb2RlPmFldG9vbHMuVGFsa1RvPC9jb2RlPiBiYXNlY2xhc3MuIDxwPgogCiBBZnRlciB0aGUgYmlnIGNsYXNzIHdlIGdldCBhIG51bWJlciBvZiBsaXR0bGUgY2xhc3MgZGVjbGFyYXRpb25zLiBUaGVzZQogZGVjbGFyYXRpb25zIGFyZSBmb3IgdGhlIChhcHBsZWV2ZW50KSBjbGFzc2VzIGFuZCBwcm9wZXJ0aWVzIGluIHRoZSBzdWl0ZS4KQEAgLTk1LDcgKzExNyw3IEBACiBGb3IgaW5zdGFuY2UsIHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgc2VuZGVyIG9mIHRoZSBmaXJzdCBtZXNzYWdlIGluIG1haWxib3gKIGluYm94IHlvdSB3b3VsZCB1c2UgPGNvZGU+bWFpbGJveCgiaW5ib3giKS5tZXNzYWdlKDEpLnNlbmRlcjwvY29kZT4uIEl0IGlzCiBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgdGhpcyBhcyA8Y29kZT5zZW5kZXIobWVzc2FnZSgxLCBtYWlsYm94KCJpbmJveCIpKSk8L2NvZGU+LAotd2hpY2ggaXMgc29tZXRpbWVzIG5lZWRlZCBiZWNhdXNlIHRoZXNlIGNsYXNzZXMgZG9uJ3QgaW5oZXJpdCBjb3JyZWN0bHkKK3doaWNoIGlzIHNvbWV0aW1lcyBuZWVkZWQgYmVjYXVzZSB0aGVzZSBjbGFzc2VzIGRvbid0IGFsd2F5cyBpbmhlcml0IGNvcnJlY3RseQogZnJvbSBiYXNlY2xhc3Nlcywgc28geW91IG1heSBoYXZlIHRvIHVzZSBhIGNsYXNzIG9yIHByb3BlcnR5IGZyb20gYW5vdGhlciBzdWl0ZS4gPHA+CiAKIDxibG9ja3F1b3RlPgpAQCAtMTEyLDExICsxMzQsMTEgQEAKIGVuZ2xpc2ggbmFtZXMgYXMgYXJndW1lbnRzIHRvIHZlcmJzLCBzbyB5b3UgZG9uJ3QgaGF2ZSB0byBib3RoZXIgd2l0aCB0aGUgNC1sZXR0ZXIKIHR5cGUgY29kZS4gU28sIHlvdSBjYW4gc2F5CiA8Q09ERT48UFJFPgotCWV1ZG9yYS5ub3RpY2Uob2NjdXJyZW5jZT0ibWFpbF9hcnJpdmVzIikKKwlkaXNrY29weS5jcmVhdGUoLi4uLCBmaWxlc3lzdGVtPSJNYWMgT1MgU3RhbmRhcmQiKQogPC9QUkU+PC9DT0RFPgotaW5zdGVhZCBvZiB0aGUgcmF0aGVyIG1vcmUgY3J5cHRpYworYXMgaXQgaXMgY2FsbGVkIGluIFNjcmlwdCBFZGl0b3IsIGluIHN0ZWFkIG9mIHRoZSBjcnlwdGljIGxvd2xldmVsCiA8Q09ERT48UFJFPgotCWV1ZG9yYS5ub3RpY2Uob2NjdXJyZW5jZT0id0FydiIpCisJZGlza2NvcHkuY3JlYXRlKC4uLiwgZmlsZXN5c3RlbT0iRmhmcyIpCiA8L1BSRT48L0NPREU+PHA+CiAKIEZpbmFsbHksIHdlIGdldCB0aGUgInRhYmxlIG9mIGNvbnRlbnRzIiBvZiB0aGUgbW9kdWxlLCBsaXN0aW5nIGFsbCBjbGFzc2VzIGFuZCBzdWNoCkBAIC0xMjQsNTQgKzE0NiwyNSBAQAogCiA8SDI+VXNpbmcgYSBQeXRob24gc3VpdGUgbW9kdWxlPC9IMj4KIAotTm93IHRoYXQgd2UgaGF2ZSBjcmVhdGVkIHRoZSBzdWl0ZSBtb2R1bGUgd2UgY2FuIHVzZSBpdCBpbiBhbgotYXBwbGljYXRpb24uIFdlIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSBjbGFzcyB0aGF0IGluaGVyaXRzCi08Q09ERT5FdWRvcmFfU3VpdGU8L0NPREU+IGFuZCB0aGUgPENPREU+VGFsa1RvPC9DT0RFPiBjbGFzcyBmcm9tCi08Q09ERT5hZXRvb2xzPC9DT0RFPi4gVGhlIDxDT0RFPlRhbGtUbzwvQ09ERT4gY2xhc3MgaXMgYmFzaWNhbGx5IGEKLWNvbnRhaW5lciBmb3IgdGhlIDxDT0RFPnNlbmQ8L0NPREU+IG1ldGhvZCB1c2VkIGJ5IHRoZSBtZXRob2RzIGZyb20KLXRoZSBzdWl0ZSBjbGFzc2VzLiA8cD4KK05vdyB0aGF0IHdlIGhhdmUgY3JlYXRlZCB0aGUgc3VpdGUgbW9kdWxlIHdlIGNhbiB1c2UgaXQgaW4gYSBQeXRob24gc2NyaXB0LgogCi1BY3R1YWxseSwgb3VyIGNsYXNzIHdpbGwgYWxzbyBpbmhlcml0IDxDT0RFPlJlcXVpcmVkX1N1aXRlPC9DT0RFPiwKLWJlY2F1c2Ugd2UgYWxzbyBuZWVkIGZ1bmN0aW9uYWxpdHkgZnJvbSB0aGF0IHN1aXRlOiB0aGUgcXVpdAotY29tbWFuZC4gR2Vuc3VpdGVtb2R1bGUgY291bGQgaGF2ZSBjcmVhdGVkIHRoaXMgY29tcGxldGVseSBkZXJpdmVkCi1jbGFzcyBmb3IgdXMsIHNpbmNlIGl0IGhhcyBhY2Nlc3MgdG8gYWxsIGluZm9ybWF0aW9uIG5lZWRlZCB0byBidWlsZAotdGhlIGNsYXNzIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGRvZXMgbm90IGRvIHNvIGF0IHRoZSBtb21lbnQuIEFsbCBpbgotYWxsLCB0aGUgaGVhcnQgb2Ygb3VyIHByb2dyYW0gbG9va3MgbGlrZSB0aGlzOgorSW4gb2xkZXIgTWFjUHl0aG9uIGRpc3RyaWJ1dGlvbnMgdGhpcyB1c2VkIHRvIGJlIGEgcmF0aGVyCitjb21wbGljYXRlZCBhZmZhaXIsIGJ1dCB3aXRoIHRoZSBwYWNrYWdlIHNjaGVtZSBhbmQgd2l0aCB0aGUgYXBwbGljYXRpb24gc2lnbmF0dXJlCitrbm93biBieSB0aGUgcGFja2FnZSBpdCBpcyB2ZXJ5IHNpbXBsZTogeW91IGltcG9ydCB0aGUgcGFja2FnZSBhbmQgaW5zdGFudGlhdGUKK3RoZSBjbGFzcywgYXMKIDxDT0RFPjxQUkU+Ci0JaW1wb3J0IEV1ZG9yYV9TdWl0ZSwgUmVxdWlyZWRfU3VpdGUsIGFldG9vbHMKLQkKLQljbGFzcyBFdWRvcmEoRXVkb3JhX1N1aXRlLkV1ZG9yYV9TdWl0ZSwgUmVxdWlyZWRfU3VpdGUuUmVxdWlyZWRfU3VpdGUsIFwKLQkJCQlhZXRvb2xzLlRhbGtUbyk6Ci0JCXBhc3MKKwl0YWxrZXIgPSBEaXNrX0NvcHkuRGlza19Db3B5KHN0YXJ0PTEpCiA8L1BSRT48L0NPREU+Ci0KLVllcywgb3VyIGNsYXNzIGJvZHkgaXMgPENPREU+cGFzczwvQ09ERT4sIGFsbCBmdW5jdGlvbmFsaXR5IGlzIGFscmVhZHkKLXByb3ZpZGVkIGJ5IHRoZSBiYXNlIGNsYXNzZXMsIHRoZSBvbmx5IHRoaW5nIHdlIGhhdmUgdG8gZG8gaXMgZ2x1ZSBpdAotdG9nZXRoZXIgaW4gdGhlIHJpZ2h0IHdheS4gPHA+CitZb3Ugd2lsbCB1c3VhbGx5IHNwZWNpZnkgdGhlIHN0YXJ0PTE6IGl0IHdpbGwgcnVuIHRoZSBhcHBsaWNhdGlvbiBpZiBpdCBpcworbm90IGFscmVhZHkgcnVubmluZy4gWW91IG1heSB3YW50IHRvIG9taXQgaXQgaWYgeW91IHdhbnQgdG8gdGFsayB0byB0aGUgYXBwbGljYXRpb24KK29ubHkgaWYgaXQgaXMgYWxyZWFkeSBydW5uaW5nLCBvciBpZiB0aGUgYXBwbGljYXRpb24gaXMgc29tZXRoaW5nIGxpa2UgdGhlIEZpbmRlci4gPHA+CiAKIExvb2tpbmcgYXQgdGhlIHNvdXJjZWZpbGUgPEEKLUhSRUY9InNjcmlwdGluZy90ZXN0ZXVkb3JhLnB5Ij50ZXN0ZXVkb3JhLnB5PC9BPiB3ZSBzZWUgdGhhdCBpdCBzdGFydHMKLXdpdGggc29tZSBpbXBvcnRzLiBUaGVuIHdlIGdldCB0aGUgY2xhc3MgZGVmaW5pdGlvbgotZm9yIG91ciBtYWluIG9iamVjdCBhbmQgYSBjb25zdGFudCBnaXZpbmcgdGhlIHNpZ25hdHVyZSBvZiBFdWRvcmEuIDxwPgotCi1UaGlzLCBhZ2FpbiwgbmVlZHMgYSBsaXR0bGUgZXhwbGFuYXRpb24uIFRoZXJlIGFyZSB2YXJpb3VzIHdheXMgdG8KLWRlc2NyaWJlIHRvIEFwcGxlU2NyaXB0IHdoaWNoIHByb2dyYW0gd2Ugd2FudCB0byB0YWxrIHRvLCBidXQgdGhlCi1lYXNpZXN0IG9uZSB0byB1c2UgKGZyb20gUHl0aG9uLCBhdCBsZWFzdCkgaXMgY3JlYXRvcgotc2lnbmF0dXJlLiBBcHBsaWNhdGlvbiBuYW1lIHdvdWxkIGJlIG11Y2ggbmljZXIsIGJ1dCBQeXRob24gY3VycmVudGx5Ci1kb2VzIG5vdCBoYXZlIGEgbW9kdWxlIHRoYXQgaW50ZXJmYWNlcyB0byB0aGUgRmluZGVyIGRhdGFiYXNlICh3aGljaAotd291bGQgYWxsb3cgdXMgdG8gbWFwIG5hbWVzIHRvIHNpZ25hdHVyZXMpLiBUaGUgb3RoZXIgYWx0ZXJuYXRpdmUsCi08Q09ERT5DaG9vc2VBcHBsaWNhdGlvbjwvQ09ERT4gZnJvbSB0aGUgcHJvZ3JhbS10by1wcm9ncmFtIHRvb2xib3gsIGlzCi1hbHNvIG5vdCBhdmFpbGFibGUgZnJvbSBQeXRob24gYXQgdGhlIG1vbWVudC4gPHA+Ci0KLUlmIHlvdSBzcGVjaWZ5IHRoZSBhcHBsaWNhdGlvbiBieSBjcmVhdG9yIHlvdSBjYW4gc3BlY2lmeSBhbiBvcHRpb25hbAotPENPREU+c3RhcnQ8L0NPREU+IHBhcmFtZXRlciwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgYXBwbGljYXRpb24gdG8gYmUKLXN0YXJ0ZWQgaWYgaXQgaXMgbm90IHJ1bm5pbmcuICA8UD4KK0hSRUY9ImFwcGxlc2NyaXB0L21ha2VkaXNrLnB5Ij5tYWtlZGlzay5weTwvQT4gd2Ugc2VlIHRoYXQgaXQgc3RhcnRzCit3aXRoIHNvbWUgaW1wb3J0cy4gCiAKIFRoZSBtYWluIHByb2dyYW0gaXRzZWxmIGlzIGEgd29uZGVyIG9mIHNpbXBsaWNpdHkuIFdlIGNyZWF0ZSB0aGUKLW9iamVjdCB0aGF0IHRhbGtzIHRvIEV1ZG9yYSAocGFzc2luZyB0aGUgc2lnbmF0dXJlIGFzIGFyZ3VtZW50KSwgYXNrCi10aGUgdXNlciB3aGF0IHNoZSB3YW50cyBhbmQgY2FsbCB0aGUgYXBwcm9wcmlhdGUgbWV0aG9kIG9mIHRoZSB0YWxrZXIKLW9iamVjdC4gVGhlIHVzZSBvZiBrZXl3b3JkIGFyZ3VtZW50cyB3aXRoIHRoZSBzYW1lIG5hbWVzIGFzIHVzZWQgYnkKLUFwcGxlU2NyaXB0IG1ha2UgcGFzc2luZyB0aGUgcGFyYW1ldGVycyBhIGJyZWV6ZS4gPHA+CitvYmplY3QgdGhhdCB0YWxrcyB0byBEaXNrIENvcHksIGNyZWF0ZXMgYSBkaXNrIGFuZCBtb3VudHMgaXQuIDxwPgogCiBUaGUgZXhjZXB0aW9uIGhhbmRsaW5nIGRvZXMgbmVlZCBhIGZldyBjb21tZW50cywgdGhvdWdoLiBTaW5jZQogQXBwbGVTY3JpcHQgaXMgYmFzaWNhbGx5IGEgY29ubmVjdGlvbmxlc3MgUlBDIHByb3RvY29sIG5vdGhpbmcgaGFwcGVucwpAQCAtMTg4LDggKzE4MSw3IEBACiBldmVyeWRheSBzcGVlY2gpIGZyb20gYSBQeXRob24gcHJvZ3JhbSB5b3UgY2FuIHVzZSB0aGUgc2FtZSBtZXRob2QKIGFzIGZvciBhcHBsaWNhdGlvbnMsIGkuZS4gcnVuIDxDT0RFPmdlbnN1aXRlbW9kdWxlPC9DT0RFPiBvbiB0aGUKIE9TQVggKGNvbW1vbmx5IGZvdW5kIGluIDxDT0RFPlN5c3RlbSBGb2xkZXI6RXh0ZW5zaW9uczpTY3JpcHRpbmcgQWRkaXRpb25zPC9DT0RFPgotb3Igc29tZXRoaW5nIHNpbWlsYXIpLCBkZWZpbmUgYSBjbGFzcyB3aGljaCBpbmhlcml0cyB0aGUgZ2VuZXJhdGVkCi1jbGFzcyBhbmQgPENPREU+YWV0b29scy5UYWxrVG88L0NPREU+IGFuZCBpbnN0YW50aWF0ZSBpdC4gVGhlIGFwcGxpY2F0aW9uCitvciBzb21ldGhpbmcgc2ltaWxhcikuIFRoZXJlIGlzIG9uZSBtaW5vciBnb3RjaGE6IHRoZSBhcHBsaWNhdGlvbgogc2lnbmF0dXJlIHRvIHVzZSBpcyA8Q09ERT4nTUFDUyc8L0NPREU+LiA8UD4KIAogVGhlcmUgYXJlIHR3byBtaW5vciBwb2ludHMgdG8gd2F0Y2ggb3V0IGZvciB3aGVuIHVzaW5nIGdlbnN1aXRlbW9kdWxlCkBAIC0xOTksMTEgKzE5MSw4IEBACiAoc29tZSBvZiB0aGUgbm9uLWVuZ2xpc2ggZGlhbGVjdHMgY2F1c2UgZ2Vuc3VpdGVtb2R1bGUgdG8gZ2VuZXJhdGUgaW5jb3JyZWN0CiBQeXRob24gY29kZSkuIDxQPgogCi1UaGF0IGNvbmNsdWRlcyBvdXIgc2ltcGxlIGV4YW1wbGUuIEFnYWluLCBsZXQgbWUgZW1waGFzaXplIHRoYXQKLXNjcmlwdGluZyBzdXBwb3J0IGluIFB5dGhvbiBpcyBub3QgdmVyeSBjb21wbGV0ZSBhdCB0aGUgbW9tZW50LCBhbmQKLXRoZSBkZXRhaWxzIG9mIGhvdyB0byB1c2UgQXBwbGVFdmVudHMgd2lsbCBkZWZpbml0ZWx5IGNoYW5nZSBpbiB0aGUKLW5lYXIgZnV0dXJlLiBUaGlzIHdpbGwgbm90IG9ubHkgZml4IGFsbCB0aGUgaWRlb3N5bmNyYWNpZXMgbm90ZWQgaW4KLXRoaXMgZG9jdW1lbnQgYnV0IGFsc28gYnJlYWsgZXhpc3RpbmcgcHJvZ3JhbXMsIHNpbmNlIHRoZSBjdXJyZW50Ci1zdWl0ZSBvcmdhbml6YXRpb24gd2lsbCBoYXZlIHRvIGNoYW5nZSB0byBmaXggc29tZSBvZiB0aGUgcHJvYmxlbXMuCi1TdGlsbCwgaWYgeW91IHdhbnQgdG8gZXhwZXJpbWVudCB3aXRoIEFwcGxlRXZlbnRzIHJpZ2h0IG5vdzogZ28gYWhlYWQhCi08cD4KKzxIMj5GdXJ0aGVyIFJlYWRpbmc8L0gyPgorCitJZiB5b3Ugd2FudCB0byBsb29rIGF0IG1vcmUgaW52b2x2ZWQgZXhhbXBsZXMgb2YgYXBwbGVzY3JpcHRpbmcgbG9vayBhdCB0aGUgc3RhbmRhcmQKK21vZHVsZXMgPGNvZGU+ZmluZGVydG9vbHM8L2NvZGU+IGFuZCA8Y29kZT5uc3JlbW90ZTwvY29kZT4sIG9yIChwb3NzaWJseSBiZXR0ZXIsIGFzIGl0CitpcyBtb3JlIGludm9sdmVkKSA8Y29kZT5mdWxsYnVpbGQ8L2NvZGU+IGZyb20gdGhlIE1hYzpzY3JpcHRzIGZvbGRlci4KZGlmZiAtLWdpdCBhL01hYy9EZW1vL2FwcGxlc2NyaXB0L0Rpc2tfQ29weS9TcGVjaWFsX0V2ZW50cy5weSBiL01hYy9EZW1vL2FwcGxlc2NyaXB0L0Rpc2tfQ29weS9TcGVjaWFsX0V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTM4NzA2Ci0tLSAvZGV2L251bGwKKysrIGIvTWFjL0RlbW8vYXBwbGVzY3JpcHQvRGlza19Db3B5L1NwZWNpYWxfRXZlbnRzLnB5CkBAIC0wLDAgKzEsNDI0IEBACisiIiJTdWl0ZSBTcGVjaWFsIEV2ZW50czogQ29tbWFuZHMgZm9yIG1vdW50aW5nIERpc2sgQ29weSBpbWFnZXMKK0xldmVsIDEsIHZlcnNpb24gMQorCitHZW5lcmF0ZWQgZnJvbSBNYWNpbnRvc2ggSEQ6SHVscHByb2dyYW1tYSdzOkRpc2sgQ29weQorQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8wLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAorIiIiCisKK2ltcG9ydCBhZXRvb2xzCitpbXBvcnQgTWFjT1MKKworX2NvZGUgPSAnZGRzaycKKworY2xhc3MgU3BlY2lhbF9FdmVudHNfRXZlbnRzOgorCisJX2FyZ21hcF9tb3VudCA9IHsKKwkJJ2FjY2Vzc19tb2RlJyA6ICdBY3NzJywKKwkJJ2NoZWNrc3VtX3ZlcmlmaWNhdGlvbicgOiAnVkNoaycsCisJCSdzaWduYXR1cmVfdmVyaWZpY2F0aW9uJyA6ICdWU2lnJywKKwkJJ1JBTV9jYWNoaW5nJyA6ICdDYWNoJywKKwl9CisKKwlkZWYgbW91bnQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CisJCSIiIm1vdW50OiBNb3VudHMgYW4gRGlzayBDb3B5IGltYWdlIGFzIGEgZGlzayB2b2x1bWUKKwkJUmVxdWlyZWQgYXJndW1lbnQ6IGEgcmVmZXJlbmNlIHRvIHRoZSBkaXNrIGltYWdlIHRvIGJlIG1vdW50ZWQKKwkJS2V5d29yZCBhcmd1bWVudCBhY2Nlc3NfbW9kZTogdGhlIGFjY2VzcyBtb2RlIGZvciBtb3VudGVkIHZvbHVtZSAoZGVmYXVsdCBpcyAiYW55IiwgaS5lLiBiZXN0IHBvc3NpYmxlKQorCQlLZXl3b3JkIGFyZ3VtZW50IGNoZWNrc3VtX3ZlcmlmaWNhdGlvbjogVmVyaWZ5IHRoZSBjaGVja3N1bSBiZWZvcmUgbW91bnRpbmc/CisJCUtleXdvcmQgYXJndW1lbnQgc2lnbmF0dXJlX3ZlcmlmaWNhdGlvbjogVmVyaWZ5IHRoZSBEaWdpU2lnboEgc2lnbmF0dXJlIGJlZm9yZSBtb3VudGluZz8KKwkJS2V5d29yZCBhcmd1bWVudCBSQU1fY2FjaGluZzogQ2FjaGUgdGhlIGRpc2sgaW1hZ2UgaW4gUkFNPyAoaWYgb21pdHRlZCwgZG9uJ3QgY2FjaGUpCisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJUmV0dXJuczogYSByZWZlcmVuY2UgdG8gbW91bnRlZCBkaXNrCisJCSIiIgorCQlfY29kZSA9ICdkZHNrJworCQlfc3ViY29kZSA9ICdNb3VuJworCisJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX21vdW50KQorCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CisKKwkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ0Fjc3MnLCBfRW51bV9BY3NzKQorCQlhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAnVkNoaycsIF9FbnVtX2Jvb2wpCisJCWFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdWU2lnJywgX0VudW1fYm9vbCkKKwkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ0NhY2gnLCBfRW51bV9ib29sKQorCisJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAorCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKwkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCV9hcmdtYXBfZXhlY3V0ZV9EaXNrU2NyaXB0ID0geworCQknY2hlY2tzdW1fdmVyaWZpY2F0aW9uJyA6ICdWQ2hrJywKKwkJJ3NpZ25hdHVyZV92ZXJpZmljYXRpb24nIDogJ1ZTaWcnLAorCX0KKworCWRlZiBleGVjdXRlX0Rpc2tTY3JpcHQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CisJCSIiImV4ZWN1dGUgRGlza1NjcmlwdDogRXhlY3V0ZXMgYSBEaXNrIENvcHktc3BlY2lmaWMgRGlza1NjcmlwdAorCQlSZXF1aXJlZCBhcmd1bWVudDogYSByZWZlcmVuY2UgdG8gdGhlIERpc2tTY3JpcHQgdG8gZXhlY3V0ZQorCQlLZXl3b3JkIGFyZ3VtZW50IGNoZWNrc3VtX3ZlcmlmaWNhdGlvbjogU2hvdWxkIGNoZWNrc3VtcyBiZSB2ZXJpZmllZCB3aGVuIG1vdW50aW5nIGltYWdlcyByZWZlcmVuY2VkIGluIHRoZSBEaXNrU2NyaXB0PworCQlLZXl3b3JkIGFyZ3VtZW50IHNpZ25hdHVyZV92ZXJpZmljYXRpb246IFNob3VsZCB0aGUgRGlnaVNpZ26BIHNpZ25hdHVyZSBvZiB0aGUgRGlza1NjcmlwdCBhbmQgdGhlIGltYWdlcyBpdCByZWZlcmVuY2VzIGJlIHZlcmlmaWVkPworCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CisJCSIiIgorCQlfY29kZSA9ICdkZHNrJworCQlfc3ViY29kZSA9ICdYRVFkJworCisJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX2V4ZWN1dGVfRGlza1NjcmlwdCkKKwkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAorCisJCWFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdWQ2hrJywgX0VudW1fYm9vbCkKKwkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ1ZTaWcnLCBfRW51bV9ib29sKQorCisJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAorCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKwkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCWRlZiB1bm1vdW50KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJ1bm1vdW50OiBVbm1vdW50IGFuZCBlamVjdCAoaWYgbmVjZXNzYXJ5KSBhIHZvbHVtZQorCQlSZXF1aXJlZCBhcmd1bWVudDogYSByZWZlcmVuY2UgdG8gZGlzayB0byBiZSB1bm1vdW50ZWQgKGFuZCBlamVjdGVkKQorCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CisJCSIiIgorCQlfY29kZSA9ICdkZHNrJworCQlfc3ViY29kZSA9ICdVbW50JworCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCisJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKKworCisJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAorCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKwkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCV9hcmdtYXBfY3JlYXRlID0geworCQknc2F2aW5nX2FzJyA6ICdTdkFzJywKKwkJJ2xvZ2ljYWxfYmxvY2tzJyA6ICdCbGtzJywKKwkJJ3plcm9pbmcnIDogJ1plcm8nLAorCQknbGVhdmVfaW1hZ2VfbW91bnRlZCcgOiAnTW91bicsCisJCSdmaWxlc3lzdGVtJyA6ICdGc3lzJywKKwl9CisKKwlkZWYgY3JlYXRlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJjcmVhdGU6IENyZWF0ZSBhIG5ldyBEaXNrIENvcHkgZG9jdW1lbnQKKwkJUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBuYW1lIG9mIHRoZSB2b2x1bWUgdG8gY3JlYXRlCisJCUtleXdvcmQgYXJndW1lbnQgc2F2aW5nX2FzOiB0aGUgZGlzayBpbWFnZSB0byBiZSBjcmVhdGVkCisJCUtleXdvcmQgYXJndW1lbnQgbG9naWNhbF9ibG9ja3M6IHRoZSBudW1iZXIgb2YgbG9naWNhbCBibG9ja3MKKwkJS2V5d29yZCBhcmd1bWVudCB6ZXJvaW5nOiBTaG91bGQgYWxsIGJsb2NrcyBvbiB0aGUgZGlzayBiZSBzZXQgdG8gemVybz8KKwkJS2V5d29yZCBhcmd1bWVudCBsZWF2ZV9pbWFnZV9tb3VudGVkOiBTaG91bGQgdGhlIGltYWdlIGJlIG1vdW50ZWQgYWZ0ZXIgaXQgaXMgY3JlYXRlZD8KKwkJS2V5d29yZCBhcmd1bWVudCBmaWxlc3lzdGVtOiBmaWxlIHN5c3RlbSB0byB1c2UgKE1hYyBPUyBTdGFuZGFyZC9jb21wYXRpYmxlLCBNYWMgT1MgRW5oYW5jZWQpCisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJUmV0dXJuczogYSByZWZlcmVuY2UgdG8gbmV3bHkgY3JlYXRlZCBkaXNrIGltYWdlIChvciBuZXdseSBtb3VudGVkIGRpc2spCisJCSIiIgorCQlfY29kZSA9ICdkZHNrJworCQlfc3ViY29kZSA9ICdDcmVhJworCisJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX2NyZWF0ZSkKKwkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAorCisJCWFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdTdkFzJywgX0VudW1fZnNzXykKKwkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ0Jsa3MnLCBfRW51bV9sb25nKQorCQlhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAnWmVybycsIF9FbnVtX2Jvb2wpCisJCWFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdNb3VuJywgX0VudW1fYm9vbCkKKwkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ0ZzeXMnLCBfRW51bV9Gc3lzKQorCisJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAorCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKwkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCWRlZiB2ZXJpZnlfY2hlY2tzdW0oc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CisJCSIiInZlcmlmeSBjaGVja3N1bTogVmVyaWZ5IHRoZSBjaGVja3N1bSBvZiBhIERpc2sgQ29weSA0LjIgb3IgYSBEaXNrIENvcHkgNi4wIHJlYWQtb25seSBkb2N1bWVudAorCQlSZXF1aXJlZCBhcmd1bWVudDogdGhlIGRpc2sgaW1hZ2UgdG8gYmUgdmVyaWZpZWQKKwkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQorCQlSZXR1cm5zOiB0aGUgcmVzdWx0IG9mIHRoZSBjaGVja3N1bSB2ZXJpZmljYXRpb24KKwkJIiIiCisJCV9jb2RlID0gJ2Rkc2snCisJCV9zdWJjb2RlID0gJ1ZjcmMnCisKKwkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKKwkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAorCisKKwkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCisJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQorCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQorCisJZGVmIHZlcmlmeV9zaWduYXR1cmUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CisJCSIiInZlcmlmeSBzaWduYXR1cmU6IFZlcmlmeSB0aGUgRGlnaVNpZ26BIHNpZ25hdHVyZSBmb3IgYSBEaXNrIENvcHkgZG9jdW1lbnQKKwkJUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBkaXNrIGltYWdlIHRvIGJlIHZlcmlmaWVkCisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJUmV0dXJuczogSXMgdGhlIERpZ2lTaWdugSBzaWduYXR1cmUgdmFsaWQ/CisJCSIiIgorCQlfY29kZSA9ICdkZHNrJworCQlfc3ViY29kZSA9ICdWc2lnJworCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCisJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKKworCisJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAorCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKwkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCV9hcmdtYXBfc2lnbl9pbWFnZSA9IHsKKwkJJ3VzaW5nX3NpZ25lcicgOiAnU2lucicsCisJfQorCisJZGVmIHNpZ25faW1hZ2Uoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CisJCSIiInNpZ24gaW1hZ2U6IEFkZCBhIERpZ2lTaWdugSBzaWduYXR1cmUgdG8gYSBEaXNrIENvcHkgZG9jdW1lbnQKKwkJUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBkaXNrIGltYWdlIHRvIGJlIHNpZ25lZAorCQlLZXl3b3JkIGFyZ3VtZW50IHVzaW5nX3NpZ25lcjogYSByZWZlcmVuY2UgdG8gc2lnbmVyIGZpbGUgdG8gdXNlCisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJIiIiCisJCV9jb2RlID0gJ2Rkc2snCisJCV9zdWJjb2RlID0gJ0FzaWcnCisKKwkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfc2lnbl9pbWFnZSkKKwkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAorCisJCWFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdTaW5yJywgX0VudW1fYWxpcykKKworCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKKwkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CisJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCisJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CisJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCisKKwlfYXJnbWFwX2NyZWF0ZV9hX2Zsb3BweV9mcm9tID0geworCQknc2lnbmF0dXJlX3ZlcmlmaWNhdGlvbicgOiAnVlNpZycsCisJCSdlcmFzZV9jb25maXJtYXRpb24nIDogJ0Nmcm0nLAorCQknbWFrZV9tdWx0aXBsZV9mbG9wcGllcycgOiAnTXVsdCcsCisJfQorCisJZGVmIGNyZWF0ZV9hX2Zsb3BweV9mcm9tKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJjcmVhdGUgYSBmbG9wcHkgZnJvbTogY3JlYXRlIGEgZmxvcHB5IGRpc2sgZnJvbSBhIERpc2sgQ29weSBkb2N1bWVudAorCQlSZXF1aXJlZCBhcmd1bWVudDogdGhlIGRpc2sgaW1hZ2UgdG8gbWFrZSBhIGZsb3BweSBmcm9tCisJCUtleXdvcmQgYXJndW1lbnQgc2lnbmF0dXJlX3ZlcmlmaWNhdGlvbjogU2hvdWxkIHRoZSBEaWdpU2lnboEgc2lnbmF0dXJlIGJlIHZlcmlmaWVkIGJlZm9yZSBjcmVhdGluZyBhIGZsb3BweSBkaXNrPworCQlLZXl3b3JkIGFyZ3VtZW50IGVyYXNlX2NvbmZpcm1hdGlvbjogU2hvdWxkIHRoZSB1c2VyIGJlIGFza2VkIHRvIGNvbmZpcm0gdGhlIGVyYXN1cmUgb2YgdGhlIHByZXZpb3VzIGNvbnRlbnRzIG9mIGZsb3BweSBkaXNrcz8KKwkJS2V5d29yZCBhcmd1bWVudCBtYWtlX211bHRpcGxlX2Zsb3BwaWVzOiBTaG91bGQgdGhlIHVzZXIgYmUgcHJvbXB0ZWQgdG8gY3JlYXRlIG11bHRpcGxlIGZsb3BweSBkaXNrcz8KKwkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQorCQkiIiIKKwkJX2NvZGUgPSAnZGRzaycKKwkJX3N1YmNvZGUgPSAnQmZweScKKworCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9jcmVhdGVfYV9mbG9wcHlfZnJvbSkKKwkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAorCisJCWFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdWU2lnJywgX0VudW1fYm9vbCkKKwkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ0Nmcm0nLCBfRW51bV9ib29sKQorCQlhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAnTXVsdCcsIF9FbnVtX2Jvb2wpCisKKwkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCisJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQorCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQorCisJX2FyZ21hcF9jaGVja19pbWFnZSA9IHsKKwkJJ2RldGFpbHMnIDogJ0NoRGUnLAorCX0KKworCWRlZiBjaGVja19pbWFnZShzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKKwkJIiIiY2hlY2sgaW1hZ2U6IENoZWNrIHRoZSBkaXNrIGltYWdluXMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBhbnkgaW5jb25zaXN0ZW5jaWVzLiAgV29ya3Mgb24gTkRJRiwgRGlzayBDb3B5IDQuMiwgREFSVIEsIG9yIERpc2tTZXQgaW1hZ2VzLgorCQlSZXF1aXJlZCBhcmd1bWVudDogdGhlIGRpc2sgaW1hZ2UgdG8gYmUgdmVyaWZpZWQKKwkJS2V5d29yZCBhcmd1bWVudCBkZXRhaWxzOiBTaG91bGQgdGhlIGRpc2sgaW1hZ2UgZGV0YWlscyBiZSBkaXNwbGF5ZWQ/CisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJUmV0dXJuczogYSByZWNvcmQgY29udGFpbmluZyBhIGJvb2xlYW4gKHRydWUvZmFsc2UpIHZhbHVlIGlmIHRoZSBpbWFnZSBwYXNzZXMgY29uc2lzdGVuY3kgdGVzdHMsIGFuZCB0aGUgbnVtYmVycyBvZiB3YXJuaW5ncyBhbmQgZXJyb3JzCisJCSIiIgorCQlfY29kZSA9ICdkZHNrJworCQlfc3ViY29kZSA9ICdDaGVrJworCisJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX2NoZWNrX2ltYWdlKQorCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CisKKwkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ0NoRGUnLCBfRW51bV9ib29sKQorCisJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAorCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKwkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCV9hcmdtYXBfc2VnbWVudF9pbWFnZSA9IHsKKwkJJ3NlZ21lbnRfY291bnQnIDogJ1NHQ1QnLAorCQknc2VnbWVudF9zaXplJyA6ICdTR1NaJywKKwkJJ3NlZ21lbnRfbmFtZScgOiAnU0dOTScsCisJCSdpbWFnZV9JRCcgOiAnU0dJRCcsCisJfQorCisJZGVmIHNlZ21lbnRfaW1hZ2Uoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CisJCSIiInNlZ21lbnQgaW1hZ2U6IFNlZ21lbnQgYSBORElGIFIvVyBvciBSL08gaW1hZ2UgaW50byBzbWFsbGVyIHBpZWNlcworCQlSZXF1aXJlZCBhcmd1bWVudDogdGhlIGRpc2sgaW1hZ2UgdG8gYmUgc2VnbWVudGVkCisJCUtleXdvcmQgYXJndW1lbnQgc2VnbWVudF9jb3VudDogdGhlIG51bWJlciBvZiBpbWFnZSBzZWdtZW50cyB0byBjcmVhdGUKKwkJS2V5d29yZCBhcmd1bWVudCBzZWdtZW50X3NpemU6IHRoZSBzaXplIG9mIGltYWdlIHNlZ21lbnRzIChpbiBibG9ja3MpIHRvIGNyZWF0ZQorCQlLZXl3b3JkIGFyZ3VtZW50IHNlZ21lbnRfbmFtZTogdGhlIHJvb3QgbmFtZSBmb3IgZWFjaCBpbWFnZSBzZWdtZW50IGZpbGUKKwkJS2V5d29yZCBhcmd1bWVudCBpbWFnZV9JRDogc3RyaW5nIHVzZWQgdG8gZ2VuZXJhdGUgYSB1bmlxdWUgaW1hZ2UgSUQgdG8gZ3JvdXAgdGhlIHNlZ21lbnRzCisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJUmV0dXJuczogYSBsaXN0IG9mIHJlZmVyZW5jZXMgdG8gdGhlIGltYWdlIHNlZ21lbnRzIGNyZWF0ZWQKKwkJIiIiCisJCV9jb2RlID0gJ2Rkc2snCisJCV9zdWJjb2RlID0gJ1NHTVQnCisKKwkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfc2VnbWVudF9pbWFnZSkKKwkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAorCisKKwkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCisJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQorCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQorCisJX2FyZ21hcF9jcmVhdGVfU01JID0geworCQknc291cmNlX2ltYWdlcycgOiAnU01JMScsCisJCSdsYXVuY2hpbmdfYXBwbGljYXRpb24nIDogJ1NNSTInLAorCQknbGF1bmNoaW5nX2RvY3VtZW50JyA6ICdTTUkzJywKKwkJJ3ZlcnNpb25fc3RyaW5nJyA6ICdTTUk0JywKKwkJJ2NoZWNrc3VtX3ZlcmlmaWNhdGlvbicgOiAnVkNoaycsCisJCSdzaWduYXR1cmVfdmVyaWZpY2F0aW9uJyA6ICdWU2lnJywKKwkJJ2ltYWdlX3NpZ25pbmcnIDogJ1NJbWcnLAorCX0KKworCWRlZiBjcmVhdGVfU01JKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJjcmVhdGUgU01JOiBDcmVhdGVzIGEgc2VsZi1tb3VudGluZyBpbWFnZSAoU01JKSBmcm9tIGEgbGlzdCBvZiBORElGIGRpc2sgaW1hZ2VzCisJCVJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgc2VsZi1tb3VudGluZyBpbWFnZSB0byBjcmVhdGUKKwkJS2V5d29yZCBhcmd1bWVudCBzb3VyY2VfaW1hZ2VzOiBhIGxpc3Qgb2YgcmVmZXJlbmNlcyB0byBzb3VyY2VzIGltYWdlcworCQlLZXl3b3JkIGFyZ3VtZW50IGxhdW5jaGluZ19hcHBsaWNhdGlvbjogdGhlIHBhdGggdG8gYW4gYXBwbGljYXRpb24gdG8gbGF1bmNoCisJCUtleXdvcmQgYXJndW1lbnQgbGF1bmNoaW5nX2RvY3VtZW50OiB0aGUgcGF0aCB0byBhIGRvY3VtZW50IHRvIG9wZW4KKwkJS2V5d29yZCBhcmd1bWVudCB2ZXJzaW9uX3N0cmluZzogc2V0cyB0aGUgJ3ZlcnMnIDEgcmVzb3VyY2Ugb2YgdGhlIHNlbGYtbW91bnRpbmcgaW1hZ2UKKwkJS2V5d29yZCBhcmd1bWVudCBjaGVja3N1bV92ZXJpZmljYXRpb246IFNob3VsZCB0aGUgY2hlY2tzdW0gb2YgdGhlIHNvdXJjZSBpbWFnZXMgYmUgdmVyaWZpZWQgYmVmb3JlIGNyZWF0aW5nIHRoZSBTTUk/CisJCUtleXdvcmQgYXJndW1lbnQgc2lnbmF0dXJlX3ZlcmlmaWNhdGlvbjogU2hvdWxkIHRoZSBEaWdpU2lnboEgc2lnbmF0dXJlIG9mIHRoZSBzb3VyY2UgaW1hZ2VzIGJlIHZlcmlmaWVkIGJlZm9yZSBjcmVhdGluZyB0aGUgU01JPworCQlLZXl3b3JkIGFyZ3VtZW50IGltYWdlX3NpZ25pbmc6IFNob3VsZCB0aGUgU01JIGJlIGdpdmVuIGEgZGlnaXRhbCBzaWduYXR1cmUgd2hlbiBpdCBpcyBjcmVhdGVkPworCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CisJCVJldHVybnM6IGEgcmVmZXJlbmNlIHRvIHRoZSBzZWxmLW1vdW50aW5nIGltYWdlIGNyZWF0ZWQKKwkJIiIiCisJCV9jb2RlID0gJ2Rkc2snCisJCV9zdWJjb2RlID0gJ01TTUknCisKKwkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfY3JlYXRlX1NNSSkKKwkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAorCisJCWFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdWQ2hrJywgX0VudW1fYm9vbCkKKwkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ1ZTaWcnLCBfRW51bV9ib29sKQorCQlhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAnU0ltZycsIF9FbnVtX2Jvb2wpCisKKwkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCisJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQorCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQorCisKK2NsYXNzIFZlcmlmeV9DaGVja3N1bV9yZXBseV9yZWNvcmQoYWV0b29scy5Db21wb25lbnRJdGVtKToKKwkiIiJWZXJpZnkgQ2hlY2tzdW0gcmVwbHkgcmVjb3JkIC0gICIiIgorCXdhbnQgPSAnUmNyYycKK2NsYXNzIHZhbGlkaXR5KGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJ2YWxpZGl0eSAtIHRydWUgaWYgY2hlY2tzdW0gaXMgdmFsaWQgIiIiCisJd2hpY2ggPSAnVmxpZCcKKwl3YW50ID0gJ2Jvb2wnCitjbGFzcyBleHBlY3RlZF9jaGVja3N1bShhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIiZXhwZWN0ZWQgY2hlY2tzdW0gLSBjaGVja3N1bSB2YWx1ZSBzdG9yZWQgaW4gdGhlIGltYWdlIGhlYWRlciAoaW4gaGV4YWRlY2ltYWwpICIiIgorCXdoaWNoID0gJ2NyY0UnCisJd2FudCA9ICdURVhUJworY2xhc3MgY2FsY3VsYXRlZF9jaGVja3N1bShhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIiY2FsY3VsYXRlZCBjaGVja3N1bSAtIGNoZWNrc3VtIHZhbHVlIGFjdHVhbGx5IGNhbGN1bGF0ZWQgKGluIGhleGFkZWNpbWFsKSAiIiIKKwl3aGljaCA9ICdjcmNBJworCXdhbnQgPSAnVEVYVCcKKworY2xhc3MgQ2hlY2tfSW1hZ2VfcmVwbHlfcmVjb3JkKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CisJIiIiQ2hlY2sgSW1hZ2UgcmVwbHkgcmVjb3JkIC0gICIiIgorCXdhbnQgPSAnUmNoaycKK2NsYXNzIGNvbnNpc3RlbmN5KGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJjb25zaXN0ZW5jeSAtIERvZXMgdGhlIGltYWdlIHBhc3MgY29uc2lzdGVuY3kgY2hlY2tzPyAiIiIKKwl3aGljaCA9ICdSY2gxJworCXdhbnQgPSAnYm9vbCcKK2NsYXNzIGVycm9yX2NvdW50KGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJlcnJvciBjb3VudCAtIHRoZSBudW1iZXIgb2YgZXJyb3JzIHJlY29yZGVkICIiIgorCXdoaWNoID0gJ1JjaDInCisJd2FudCA9ICdsb25nJworY2xhc3Mgd2FybmluZ19jb3VudChhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIid2FybmluZyBjb3VudCAtIHRoZSBudW1iZXIgb2Ygd2FybmluZ3MgcmVjb3JkZWQgIiIiCisJd2hpY2ggPSAnUmNoMycKKwl3YW50ID0gJ2xvbmcnCitWZXJpZnlfQ2hlY2tzdW1fcmVwbHlfcmVjb3JkLl9wcm9wZGljdCA9IHsKKwkndmFsaWRpdHknIDogdmFsaWRpdHksCisJJ2V4cGVjdGVkX2NoZWNrc3VtJyA6IGV4cGVjdGVkX2NoZWNrc3VtLAorCSdjYWxjdWxhdGVkX2NoZWNrc3VtJyA6IGNhbGN1bGF0ZWRfY2hlY2tzdW0sCit9CitWZXJpZnlfQ2hlY2tzdW1fcmVwbHlfcmVjb3JkLl9lbGVtZGljdCA9IHsKK30KK0NoZWNrX0ltYWdlX3JlcGx5X3JlY29yZC5fcHJvcGRpY3QgPSB7CisJJ2NvbnNpc3RlbmN5JyA6IGNvbnNpc3RlbmN5LAorCSdlcnJvcl9jb3VudCcgOiBlcnJvcl9jb3VudCwKKwknd2FybmluZ19jb3VudCcgOiB3YXJuaW5nX2NvdW50LAorfQorQ2hlY2tfSW1hZ2VfcmVwbHlfcmVjb3JkLl9lbGVtZGljdCA9IHsKK30KK19FbnVtX0Fjc3MgPSB7CisJJ3JlYWRfYW5kX3dyaXRlJyA6ICdSZFdyJywJIyByZWFkL3dyaXRlIGFjY2VzcworCSdyZWFkX29ubHknIDogJ1JkeHgnLAkjIHJlYWQtb25seSBhY2Nlc3MKKwknYW55JyA6ICdBbnl4JywJIyBiZXN0IHBvc3NpYmxlIGFjY2VzcworfQorCitfRW51bV9Gc3lzID0geworCSdNYWNfT1NfU3RhbmRhcmQnIDogJ0ZoZnMnLAkjIGNsYXNzaWMgSEZTIGZpbGUgc3lzdGVtCisJJ2NvbXBhdGlibGVfTWFjX09TX0V4dGVuZGVkJyA6ICdGaGYrJywJIyBuZXcgSEZTKyBmaWxlIHN5c3RlbQorfQorCitfRW51bV9hbGlzID0gTm9uZSAjIFhYWFggZW51bSBhbGlzIG5vdCBmb3VuZCEhCitfRW51bV9mc3NfID0gTm9uZSAjIFhYWFggZW51bSBmc3MgIG5vdCBmb3VuZCEhCitfRW51bV9sb25nID0gTm9uZSAjIFhYWFggZW51bSBsb25nIG5vdCBmb3VuZCEhCitfRW51bV9ib29sID0gTm9uZSAjIFhYWFggZW51bSBib29sIG5vdCBmb3VuZCEhCisKKyMKKyMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQorIworX2NsYXNzZGVjbGFyYXRpb25zID0geworCSdSY2hrJyA6IENoZWNrX0ltYWdlX3JlcGx5X3JlY29yZCwKKwknUmNyYycgOiBWZXJpZnlfQ2hlY2tzdW1fcmVwbHlfcmVjb3JkLAorfQorCitfcHJvcGRlY2xhcmF0aW9ucyA9IHsKKwknY3JjRScgOiBleHBlY3RlZF9jaGVja3N1bSwKKwknUmNoMicgOiBlcnJvcl9jb3VudCwKKwknY3JjQScgOiBjYWxjdWxhdGVkX2NoZWNrc3VtLAorCSdSY2gzJyA6IHdhcm5pbmdfY291bnQsCisJJ1ZsaWQnIDogdmFsaWRpdHksCisJJ1JjaDEnIDogY29uc2lzdGVuY3ksCit9CisKK19jb21wZGVjbGFyYXRpb25zID0geworfQorCitfZW51bWRlY2xhcmF0aW9ucyA9IHsKKwknQWNzcycgOiBfRW51bV9BY3NzLAorCSdGc3lzJyA6IF9FbnVtX0ZzeXMsCit9CmRpZmYgLS1naXQgYS9NYWMvRGVtby9hcHBsZXNjcmlwdC9EaXNrX0NvcHkvU3RhbmRhcmRfU3VpdGUucHkgYi9NYWMvRGVtby9hcHBsZXNjcmlwdC9EaXNrX0NvcHkvU3RhbmRhcmRfU3VpdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIxMWVjMQotLS0gL2Rldi9udWxsCisrKyBiL01hYy9EZW1vL2FwcGxlc2NyaXB0L0Rpc2tfQ29weS9TdGFuZGFyZF9TdWl0ZS5weQpAQCAtMCwwICsxLDQ3NyBAQAorIiIiU3VpdGUgU3RhbmRhcmQgU3VpdGU6IENvbW1vbiB0ZXJtcyBmb3IgbW9zdCBhcHBsaWNhdGlvbnMKK0xldmVsIDEsIHZlcnNpb24gMQorCitHZW5lcmF0ZWQgZnJvbSBNYWNpbnRvc2ggSEQ6SHVscHByb2dyYW1tYSdzOkRpc2sgQ29weQorQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8wLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAorIiIiCisKK2ltcG9ydCBhZXRvb2xzCitpbXBvcnQgTWFjT1MKKworX2NvZGUgPSAnQ29yZScKKworY2xhc3MgU3RhbmRhcmRfU3VpdGVfRXZlbnRzOgorCisJX2FyZ21hcF9zYXZlID0geworCQknX2luJyA6ICdrZmlsJywKKwkJJ3VzaW5nX2Zvcm1hdCcgOiAnU3ZBcycsCisJCSdjaGVja3N1bV92ZXJpZmljYXRpb24nIDogJ1ZDaGsnLAorCQknc2lnbmF0dXJlX3ZlcmlmaWNhdGlvbicgOiAnVlNpZycsCisJCSdpbWFnZV9zaWduaW5nJyA6ICdTSW1nJywKKwkJJ2xlYXZlX2ltYWdlX21vdW50ZWQnIDogJ01vdW4nLAorCQkncGVyY2VudF9mcmVlX3NwYWNlJyA6ICdTbG9wJywKKwkJJ2xvZ2ljYWxfYmxvY2tzJyA6ICdCbGtzJywKKwkJJ3plcm9pbmcnIDogJ1plcm8nLAorCX0KKworCWRlZiBzYXZlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJzYXZlOiBTYXZlIGFuIG9iamVjdAorCQlSZXF1aXJlZCBhcmd1bWVudDogdGhlIHNvdXJjZSBvYmplY3QKKwkJS2V5d29yZCBhcmd1bWVudCBfaW46IHRoZSB0YXJnZXQgb2JqZWN0CisJCUtleXdvcmQgYXJndW1lbnQgdXNpbmdfZm9ybWF0OiB0aGUgZm9ybWF0IGZvciB0aGUgdGFyZ2V0CisJCUtleXdvcmQgYXJndW1lbnQgY2hlY2tzdW1fdmVyaWZpY2F0aW9uOiBTaG91bGQgdGhlIGNoZWNrc3VtIGJlIHZlcmlmaWVkIGJlZm9yZSBzYXZpbmc/CisJCUtleXdvcmQgYXJndW1lbnQgc2lnbmF0dXJlX3ZlcmlmaWNhdGlvbjogU2hvdWxkIHRoZSBEaWdpU2lnboEgc2lnbmF0dXJlIGJlIHZlcmlmaWVkIGJlZm9yZSBzYXZpbmc/CisJCUtleXdvcmQgYXJndW1lbnQgaW1hZ2Vfc2lnbmluZzogU2hvdWxkIHRoZSBpbWFnZSBiZSBzaWduZWQ/CisJCUtleXdvcmQgYXJndW1lbnQgbGVhdmVfaW1hZ2VfbW91bnRlZDogU2hvdWxkIHRoZSBpbWFnZSBiZSBtb3VudGVkIGFmdGVyIHNhdmluZz8KKwkJS2V5d29yZCBhcmd1bWVudCBwZXJjZW50X2ZyZWVfc3BhY2U6IHBlcmNlbnQgZnJlZSBzcGFjZSB0byByZXNlcnZlIChmb3IgaW1hZ2UgZm9sZGVyIG9wZXJhdGlvbiwgMC0yNTUlKQorCQlLZXl3b3JkIGFyZ3VtZW50IGxvZ2ljYWxfYmxvY2tzOiBudW1iZXIgb2YgbG9naWNhbCBibG9ja3MgaW4gdGhlIGltYWdlIChmb3IgaW1hZ2UgZm9sZGVyIG9wZXJhdGlvbikKKwkJS2V5d29yZCBhcmd1bWVudCB6ZXJvaW5nOiBTaG91bGQgYWxsIHRoZSBibG9ja3MgaW4gdGhlIGltYWdlIGJlIHNldCB0byB6ZXJvcz8gKGZvciBpbWFnZSBmb2xkZXIgb3BlcmF0aW9uKQorCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CisJCVJldHVybnM6IHRoZSByZXN1bHQgb2YgdGhlIHNhdmUgb3BlcmF0aW9uCisJCSIiIgorCQlfY29kZSA9ICdjb3JlJworCQlfc3ViY29kZSA9ICdzYXZlJworCisJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX3NhdmUpCisJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKKworCQlhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAna2ZpbCcsIF9FbnVtX29ial8pCisJCWFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdTdkFzJywgX0VudW1fU3ZBcykKKwkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ1ZDaGsnLCBfRW51bV9ib29sKQorCQlhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAnVlNpZycsIF9FbnVtX2Jvb2wpCisJCWFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdTSW1nJywgX0VudW1fYm9vbCkKKwkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ01vdW4nLCBfRW51bV9ib29sKQorCQlhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAnU2xvcCcsIF9FbnVtX2xvbmcpCisJCWFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdCbGtzJywgX0VudW1fbG9uZykKKwkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ1plcm8nLCBfRW51bV9ib29sKQorCisJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAorCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKwkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCWRlZiBkb19zY3JpcHQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CisJCSIiImRvIHNjcmlwdDogRXhlY3V0ZSBhbiBhdHRhY2hlZCBzY3JpcHQgbG9jYXRlZCBpbiB0aGUgZm9sZGVyICJTY3JpcHRzIgorCQlSZXF1aXJlZCBhcmd1bWVudDogdGhlIHNjcmlwdCB0byBiZSBleGVjdXRlZAorCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CisJCSIiIgorCQlfY29kZSA9ICdjb3JlJworCQlfc3ViY29kZSA9ICdkb3NjJworCisJCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCisJCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKKworCisJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAorCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKwkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCitjbGFzcyBhcHBsaWNhdGlvbihhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgorCSIiImFwcGxpY2F0aW9uIC0gVGhlIERpc2sgQ29weSBhcHBsaWNhdGlvbiAiIiIKKwl3YW50ID0gJ2NhcHAnCitjbGFzcyB2ZXJzaW9uKGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJ2ZXJzaW9uIC0gdGhlIHZlcnNpb24gb2YgdGhpcyBhcHBsaWNhdGlvbiAiIiIKKwl3aGljaCA9ICd2ZXJzJworCXdhbnQgPSAndmVycycKK2NsYXNzIG5hbWUoYWV0b29scy5OUHJvcGVydHkpOgorCSIiIm5hbWUgLSB0aGUgbmFtZSBvZiB0aGlzIGFwcGxpY2F0aW9uICIiIgorCXdoaWNoID0gJ3BuYW0nCisJd2FudCA9ICdURVhUJworY2xhc3MgY29tbWVudChhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIiY29tbWVudCAtIHRoZSBjb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgYXBwbGljYXRpb24gIiIiCisJd2hpY2ggPSAnY29tdCcKKwl3YW50ID0gJ1RFWFQnCitjbGFzcyBkcml2ZXJfdmVyc2lvbihhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIiZHJpdmVyIHZlcnNpb24gLSB0aGUgdmVyc2lvbiBvZiB0aGUgZGlzayBpbWFnZSBkcml2ZXIgIiIiCisJd2hpY2ggPSAnZFZlcicKKwl3YW50ID0gJ3ZlcnMnCitjbGFzcyBub25lamVjdGFibGVfbW9kZShhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIibm9uZWplY3RhYmxlIG1vZGUgLSBTaG91bGQgbW91bnRlZCBpbWFnZXMgYmUgbm9uLWVqZWN0YWJsZT8gIiIiCisJd2hpY2ggPSAnb3R0bycKKwl3YW50ID0gJ2Jvb2wnCitjbGFzcyBzYXZlX2xvZ19maWxlKGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJzYXZlIGxvZyBmaWxlIC0gU2hvdWxkIHRoZSBsb2cgZmlsZSBiZSBzYXZlZCBvbiBkaXNrPyAiIiIKKwl3aGljaCA9ICdQU2FMJworCXdhbnQgPSAnYm9vbCcKK2NsYXNzIHVzZV9zcGVlY2goYWV0b29scy5OUHJvcGVydHkpOgorCSIiInVzZSBzcGVlY2ggLSBTaG91bGQgRGlzayBDb3B5IHVzZSBzcG9rZW4gZmVlZGJhY2s/ICIiIgorCXdoaWNoID0gJ1BUbGsnCisJd2FudCA9ICdib29sJworY2xhc3Mgc21hcnRfU2F2ZV9BcyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIic21hcnQgU2F2ZSBBcyAtIFNob3VsZCB0aGUgU2F2ZSBBcy4uLiBkaWFsb2cgYm94IGF1dG9tYXRpY2FsbHkgZ28gdG8gdGhlIHJpZ2h0IGZvbGRlcj8gIiIiCisJd2hpY2ggPSAnUFNTUCcKKwl3YW50ID0gJ2Jvb2wnCitjbGFzcyBjaGVja3N1bV92ZXJpZmljYXRpb24oYWV0b29scy5OUHJvcGVydHkpOgorCSIiImNoZWNrc3VtIHZlcmlmaWNhdGlvbiAtIFNob3VsZCBpbWFnZSBjaGVja3N1bXMgYmUgdmVyaWZpZWQ/ICIiIgorCXdoaWNoID0gJ1BWZUMnCisJd2FudCA9ICdib29sJworY2xhc3Mgc2lnbmF0dXJlX3ZlcmlmaWNhdGlvbihhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiAtIFNob3VsZCBkaWdpdGFsIHNpZ25hdHVyZXMgYmUgdmVyaWZpZWQ/ICIiIgorCXdoaWNoID0gJ1BWZVMnCisJd2FudCA9ICdib29sJworY2xhc3MgZXhjbHVkZV9EaXNrU2NyaXB0cyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIiZXhjbHVkZSBEaXNrU2NyaXB0cyAtIFNob3VsZCBpbWFnZXMgcmVmZXJlbmNlZCBpbiBEaXNrU2NyaXB0cy9EaXNrU2V0cyBiZSBleGNsdWRlZCBmcm9tIHZlcmlmaWNhdGlvbj8gIiIiCisJd2hpY2ggPSAnUEV4RCcKKwl3YW50ID0gJ2Jvb2wnCitjbGFzcyBleGNsdWRlX3JlbW90ZV9pbWFnZXMoYWV0b29scy5OUHJvcGVydHkpOgorCSIiImV4Y2x1ZGUgcmVtb3RlIGltYWdlcyAtIFNob3VsZCBpbWFnZXMgdGhhdCBhcmUgbG9jYXRlZCBvbiBuZXR3b3JrIHZvbHVtZXMgYmUgZXhjbHVkZWQgZnJvbSB2ZXJpZmljYXRpb24/ICIiIgorCXdoaWNoID0gJ1BFeFInCisJd2FudCA9ICdib29sJworY2xhc3MgaW1hZ2Vfc2lnbmluZyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIiaW1hZ2Ugc2lnbmluZyAtIFNob3VsZCBpbWFnZXMgYmUgc2lnbmVkIHdpdGggYSBkaWdpdGFsIHNpZ25hdHVyZT8gIiIiCisJd2hpY2ggPSAnUFNpSScKKwl3YW50ID0gJ2Jvb2wnCitjbGFzcyBsZWF2ZV9pbWFnZV9tb3VudGVkKGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJsZWF2ZSBpbWFnZSBtb3VudGVkIC0gU2hvdWxkIGltYWdlcyBiZSBtb3VudGVkIGFmdGVyIHRoZXkgYXJlIGNyZWF0ZWQ/ICIiIgorCXdoaWNoID0gJ1BNb0EnCisJd2FudCA9ICdib29sJworY2xhc3MgZXJhc2VfY29uZmlybWF0aW9uKGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJlcmFzZSBjb25maXJtYXRpb24gLSBTaG91bGQgdGhlIHVzZXIgYmUgcmVxdWlyZWQgdG8gY29uZmlybSBjb21tYW5kcyB0aGF0IGVyYXNlIGRpc2tzPyAiIiIKKwl3aGljaCA9ICdQQ29FJworCXdhbnQgPSAnYm9vbCcKK2NsYXNzIHplcm9pbmcoYWV0b29scy5OUHJvcGVydHkpOgorCSIiInplcm9pbmcgLSBTaG91bGQgYWxsIGJsb2NrcyBvZiBhIG5ldyBpbWFnZSBiZSBzZXQgdG8gemVybz8gIiIiCisJd2hpY2ggPSAnUFplQicKKwl3YW50ID0gJ2Jvb2wnCitjbGFzcyBkZWZhdWx0X2NyZWF0ZV9zaXplKGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJkZWZhdWx0IGNyZWF0ZSBzaXplIC0gdGhlIGRlZmF1bHQgc2l6ZSBmb3IgYSBuZXcgaW1hZ2UsIGluIGJsb2NrcyAoNTEyIGJ5dGVzIHBlciBibG9jaykgIiIiCisJd2hpY2ggPSAnUERlUycKKwl3YW50ID0gJ2xvbmcnCitjbGFzcyBkZWZhdWx0X2NyZWF0ZV9uYW1lKGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJkZWZhdWx0IGNyZWF0ZSBuYW1lIC0gdGhlIGRlZmF1bHQgdm9sdW1lIG5hbWUgZm9yIGEgbmV3IGltYWdlICIiIgorCXdoaWNoID0gJ1BEZU4nCisJd2FudCA9ICdURVhUJworY2xhc3MgbWFrZV9tdWx0aXBsZV9mbG9wcGllcyhhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIibWFrZSBtdWx0aXBsZSBmbG9wcGllcyAtIFNob3VsZCB0aGUgdXNlciBiZSBwcm9tcHRlZCB0byBtYWtlIG11bHRpcGxlIGZsb3BweSBkaXNrIGltYWdlcyBhdCBhIHRpbWU/ICIiIgorCXdoaWNoID0gJ1BCdU0nCisJd2FudCA9ICdib29sJworY2xhc3MgYXV0b19pbWFnZV91cG9uX2luc2VydChhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIiYXV0byBpbWFnZSB1cG9uIGluc2VydCAtIFNob3VsZCBhIG5ld2x5LWluc2VydGVkIGRpc2sgYXV0b21hdGljYWxseSBiZSBwcm9jZXNzZWQgaW50byBhbiBpbWFnZT8gIiIiCisJd2hpY2ggPSAnUGFpbScKKwl3YW50ID0gJ2Jvb2wnCitjbGFzcyBlamVjdF9hZnRlcl9hdXRvX2ltYWdlKGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJlamVjdCBhZnRlciBhdXRvIGltYWdlIC0gU2hvdWxkIGF1dG8taW1hZ2VkIGRpc2tzIGJlIGVqZWN0ZWQgYWZ0ZXJ3YXJkcz8gIiIiCisJd2hpY2ggPSAnUGVqYycKKwl3YW50ID0gJ2Jvb2wnCitjbGFzcyBhdXRvX2NvcHlfdXBvbl9mbG9wcHlfaW5zZXJ0KGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJhdXRvIGNvcHkgdXBvbiBmbG9wcHkgaW5zZXJ0IC0gSW5zdGVhZCBvZiBhdXRvLWltYWdpbmcsIHNob3VsZCBuZXdseS1pbnNlcnRlZCBmbG9wcHkgZGlza3MgYmUgY29waWVkPyAiIiIKKwl3aGljaCA9ICdQY3BmJworCXdhbnQgPSAnYm9vbCcKK2NsYXNzIHZvbHVtZV9zdWZmaXgoYWV0b29scy5OUHJvcGVydHkpOgorCSIiInZvbHVtZSBzdWZmaXggLSB0aGUgZGVmYXVsdCB2b2x1bWUgbmFtZSBzdWZmaXggIiIiCisJd2hpY2ggPSAnUERpRScKKwl3YW50ID0gJ1RFWFQnCitjbGFzcyBpbWFnZV9zdWZmaXgoYWV0b29scy5OUHJvcGVydHkpOgorCSIiImltYWdlIHN1ZmZpeCAtIHRoZSBkZWZhdWx0IGltYWdlIG5hbWUgc3VmZml4ICIiIgorCXdoaWNoID0gJ1BJbUUnCisJd2FudCA9ICdURVhUJworY2xhc3MgZGVmYXVsdF9maWxlX3N5c3RlbShhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIiZGVmYXVsdCBmaWxlIHN5c3RlbSAtIHRoZSBkZWZhdWx0IGZpbGUgc3lzdGVtIHR5cGUgZm9yIG5ldyBibGFuayBpbWFnZXMgIiIiCisJd2hpY2ggPSAnUGZzeScKKwl3YW50ID0gJ0ZzeXMnCitjbGFzcyBkZWZhdWx0X2ltYWdlX2Zvcm1hdChhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIiZGVmYXVsdCBpbWFnZSBmb3JtYXQgLSB0aGUgZGVmYXVsdCBpbWFnZSBmaWxlIGZvcm1hdCAiIiIKKwl3aGljaCA9ICdQZGZtJworCXdhbnQgPSAnU3ZBcycKKworY2xhc3MgZGlzayhhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgorCSIiImRpc2sgLSBBIG1vdW50ZWQgdm9sdW1lICIiIgorCXdhbnQgPSAnRGlzaycKKworbmFtZSA9IG5hbWUKKworY29tbWVudCA9IGNvbW1lbnQKK2NsYXNzIGxvY2tlZChhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIibG9ja2VkIC0gSXMgdGhlIGRpc2sgbG9ja2VkPyAiIiIKKwl3aGljaCA9ICdpc2xrJworCXdhbnQgPSAnYm9vbCcKK2NsYXNzIGNyZWF0aW9uX2RhdGUoYWV0b29scy5OUHJvcGVydHkpOgorCSIiImNyZWF0aW9uIGRhdGUgLSB0aGUgY3JlYXRpb24gZGF0ZSBvZiBkaXNrICIiIgorCXdoaWNoID0gJ2FzY2QnCisJd2FudCA9ICdsZHQgJworY2xhc3MgbW9kaWZpY2F0aW9uX2RhdGUoYWV0b29scy5OUHJvcGVydHkpOgorCSIiIm1vZGlmaWNhdGlvbiBkYXRlIC0gdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIGRpc2sgIiIiCisJd2hpY2ggPSAnYXNtbycKKwl3YW50ID0gJ2xkdCAnCitjbGFzcyBjcmMzMl9jaGVja3N1bShhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIiY3JjMzIgY2hlY2tzdW0gLSB0aGUgY3JjLTMyIGNoZWNrc3VtIG9mIHRoZSBkaXNrICIiIgorCXdoaWNoID0gJ1hjcmMnCisJd2FudCA9ICdURVhUJworY2xhc3MgZGlza19jb3B5XzRfMmVfMl9jaGVja3N1bShhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIiZGlzayBjb3B5IDQuMiBjaGVja3N1bSAtIHRoZSBEaXNrIENvcHkgNC4yIGNoZWNrc3VtIG9mIHRoZSBkaXNrICIiIgorCXdoaWNoID0gJ1hjNDInCisJd2FudCA9ICdURVhUJworY2xhc3MgYmxvY2tfY291bnQoYWV0b29scy5OUHJvcGVydHkpOgorCSIiImJsb2NrIGNvdW50IC0gdGhlIG51bWJlciBvZiBibG9ja3Mgb24gZGlzayAiIiIKKwl3aGljaCA9ICdYYmxrJworCXdhbnQgPSAnbG9uZycKK2NsYXNzIGZpbGVfc3lzdGVtKGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJmaWxlIHN5c3RlbSAtIHRoZSBmaWxlIHN5c3RlbSB1c2VkIG9uIGRpc2sgIiIiCisJd2hpY2ggPSAnWGZzaScKKwl3YW50ID0gJ1RFWFQnCisKK2NsYXNzIGZvbGRlcihhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgorCSIiImZvbGRlciAtIEEgZm9sZGVyIG9yIGRpcmVjdG9yeSBvbiBhIGRpc2sgIiIiCisJd2FudCA9ICdGb2xkJworCituYW1lID0gbmFtZQorCitjb21tZW50ID0gY29tbWVudAorCitjcmVhdGlvbl9kYXRlID0gY3JlYXRpb25fZGF0ZQorCittb2RpZmljYXRpb25fZGF0ZSA9IG1vZGlmaWNhdGlvbl9kYXRlCisKK2NsYXNzIGRpc2tfaW1hZ2UoYWV0b29scy5Db21wb25lbnRJdGVtKToKKwkiIiJkaXNrIGltYWdlIC0gQSBkaXNrIGltYWdlIGZpbGUgIiIiCisJd2FudCA9ICdESW1nJworCituYW1lID0gbmFtZQorCitjb21tZW50ID0gY29tbWVudAorCitsb2NrZWQgPSBsb2NrZWQKKworY3JlYXRpb25fZGF0ZSA9IGNyZWF0aW9uX2RhdGUKKworbW9kaWZpY2F0aW9uX2RhdGUgPSBtb2RpZmljYXRpb25fZGF0ZQorY2xhc3MgZmlsZV9mb3JtYXQoYWV0b29scy5OUHJvcGVydHkpOgorCSIiImZpbGUgZm9ybWF0IC0gdGhlIGZvcm1hdCBvZiB0aGUgZGlzayBpbWFnZSBmaWxlICIiIgorCXdoaWNoID0gJ0lmbXQnCisJd2FudCA9ICdURVhUJworY2xhc3Mgc2lnbmVkKGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJzaWduZWQgLSBEb2VzIHRoZSBkaXNrIGltYWdlIGhhdmUgYSBEaWdpU2lnboEgc2lnbmF0dXJlPyAiIiIKKwl3aGljaCA9ICdJc2luJworCXdhbnQgPSAnYm9vbCcKK2NsYXNzIGNvbXByZXNzZWQoYWV0b29scy5OUHJvcGVydHkpOgorCSIiImNvbXByZXNzZWQgLSBJcyB0aGUgZGlzayBpbWFnZSBjb21wcmVzc2VkPyAiIiIKKwl3aGljaCA9ICdJY29tJworCXdhbnQgPSAnYm9vbCcKK2NsYXNzIHNlZ21lbnRlZChhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIic2VnbWVudGVkIC0gSXMgdGhlIGRpc2sgaW1hZ2Ugc2VnbWVudGVkPyAiIiIKKwl3aGljaCA9ICdJc2VnJworCXdhbnQgPSAnYm9vbCcKK2NsYXNzIHNlZ21lbnRzKGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJzZWdtZW50cyAtIGEgbGlzdCBvZiByZWZlcmVuY2VzIHRvIG90aGVyIHNlZ21lbnRzIHRoYXQgbWFrZSB1cCBhIGNvbXBsZXRlIGltYWdlICIiIgorCXdoaWNoID0gJ0lzZyMnCisJd2FudCA9ICdmc3MgJworY2xhc3MgZGlza19uYW1lKGFldG9vbHMuTlByb3BlcnR5KToKKwkiIiJkaXNrIG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZGlzayB0aGlzIGltYWdlIHJlcHJlc2VudHMgIiIiCisJd2hpY2ggPSAnSWRubScKKwl3YW50ID0gJ1RFWFQnCisKK2NyYzMyX2NoZWNrc3VtID0gY3JjMzJfY2hlY2tzdW0KKworZGlza19jb3B5XzRfMmVfMl9jaGVja3N1bSA9IGRpc2tfY29weV80XzJlXzJfY2hlY2tzdW0KKworYmxvY2tfY291bnQgPSBibG9ja19jb3VudAorCitmaWxlX3N5c3RlbSA9IGZpbGVfc3lzdGVtCitjbGFzcyBkYXRhX2Zvcmtfc2l6ZShhZXRvb2xzLk5Qcm9wZXJ0eSk6CisJIiIiZGF0YSBmb3JrIHNpemUgLSB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBkYXRhIGZvcmsgb2YgdGhlIGRpc2sgaW1hZ2UgIiIiCisJd2hpY2ggPSAnSWRmaycKKwl3YW50ID0gJ2xvbmcnCitjbGFzcyByZXNvdXJjZV9mb3JrX3NpemUoYWV0b29scy5OUHJvcGVydHkpOgorCSIiInJlc291cmNlIGZvcmsgc2l6ZSAtIHRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIHJlc291cmNlIGZvcmsgb2YgdGhlIGRpc2sgaW1hZ2UgIiIiCisJd2hpY2ggPSAnSXJmaycKKwl3YW50ID0gJ2xvbmcnCisKK2NsYXNzIFNhdmVfcmVwbHlfcmVjb3JkKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6CisJIiIiU2F2ZSByZXBseSByZWNvcmQgLSBSZXN1bHQgZnJvbSB0aGUgc2F2ZSBvcGVyYXRpb24gIiIiCisJd2FudCA9ICdjcHlSJworY2xhc3MgcmVzdWx0aW5nX3RhcmdldF9vYmplY3QoYWV0b29scy5OUHJvcGVydHkpOgorCSIiInJlc3VsdGluZyB0YXJnZXQgb2JqZWN0IC0gYSByZWZlcmVuY2UgdG8gdGhlIHRhcmdldCBvYmplY3QgYWZ0ZXIgaXQgaGFzIGJlZW4gc2F2ZWQgIiIiCisJd2hpY2ggPSAncmNwTycKKwl3YW50ID0gJ29iaiAnCitjbGFzcyBjb3B5X3R5cGUoYWV0b29scy5OUHJvcGVydHkpOgorCSIiImNvcHkgdHlwZSAtIHRoZSB3YXkgaW4gd2hpY2ggdGhlIHRhcmdldCBvYmplY3Qgd2FzIHNhdmVkICIiIgorCXdoaWNoID0gJ3JjcFQnCisJd2FudCA9ICdyY3BUJworYXBwbGljYXRpb24uX3Byb3BkaWN0ID0geworCSd2ZXJzaW9uJyA6IHZlcnNpb24sCisJJ25hbWUnIDogbmFtZSwKKwknY29tbWVudCcgOiBjb21tZW50LAorCSdkcml2ZXJfdmVyc2lvbicgOiBkcml2ZXJfdmVyc2lvbiwKKwknbm9uZWplY3RhYmxlX21vZGUnIDogbm9uZWplY3RhYmxlX21vZGUsCisJJ3NhdmVfbG9nX2ZpbGUnIDogc2F2ZV9sb2dfZmlsZSwKKwkndXNlX3NwZWVjaCcgOiB1c2Vfc3BlZWNoLAorCSdzbWFydF9TYXZlX0FzJyA6IHNtYXJ0X1NhdmVfQXMsCisJJ2NoZWNrc3VtX3ZlcmlmaWNhdGlvbicgOiBjaGVja3N1bV92ZXJpZmljYXRpb24sCisJJ3NpZ25hdHVyZV92ZXJpZmljYXRpb24nIDogc2lnbmF0dXJlX3ZlcmlmaWNhdGlvbiwKKwknZXhjbHVkZV9EaXNrU2NyaXB0cycgOiBleGNsdWRlX0Rpc2tTY3JpcHRzLAorCSdleGNsdWRlX3JlbW90ZV9pbWFnZXMnIDogZXhjbHVkZV9yZW1vdGVfaW1hZ2VzLAorCSdpbWFnZV9zaWduaW5nJyA6IGltYWdlX3NpZ25pbmcsCisJJ2xlYXZlX2ltYWdlX21vdW50ZWQnIDogbGVhdmVfaW1hZ2VfbW91bnRlZCwKKwknZXJhc2VfY29uZmlybWF0aW9uJyA6IGVyYXNlX2NvbmZpcm1hdGlvbiwKKwknemVyb2luZycgOiB6ZXJvaW5nLAorCSdkZWZhdWx0X2NyZWF0ZV9zaXplJyA6IGRlZmF1bHRfY3JlYXRlX3NpemUsCisJJ2RlZmF1bHRfY3JlYXRlX25hbWUnIDogZGVmYXVsdF9jcmVhdGVfbmFtZSwKKwknbWFrZV9tdWx0aXBsZV9mbG9wcGllcycgOiBtYWtlX211bHRpcGxlX2Zsb3BwaWVzLAorCSdhdXRvX2ltYWdlX3Vwb25faW5zZXJ0JyA6IGF1dG9faW1hZ2VfdXBvbl9pbnNlcnQsCisJJ2VqZWN0X2FmdGVyX2F1dG9faW1hZ2UnIDogZWplY3RfYWZ0ZXJfYXV0b19pbWFnZSwKKwknYXV0b19jb3B5X3Vwb25fZmxvcHB5X2luc2VydCcgOiBhdXRvX2NvcHlfdXBvbl9mbG9wcHlfaW5zZXJ0LAorCSd2b2x1bWVfc3VmZml4JyA6IHZvbHVtZV9zdWZmaXgsCisJJ2ltYWdlX3N1ZmZpeCcgOiBpbWFnZV9zdWZmaXgsCisJJ2RlZmF1bHRfZmlsZV9zeXN0ZW0nIDogZGVmYXVsdF9maWxlX3N5c3RlbSwKKwknZGVmYXVsdF9pbWFnZV9mb3JtYXQnIDogZGVmYXVsdF9pbWFnZV9mb3JtYXQsCit9CithcHBsaWNhdGlvbi5fZWxlbWRpY3QgPSB7Cit9CitkaXNrLl9wcm9wZGljdCA9IHsKKwknbmFtZScgOiBuYW1lLAorCSdjb21tZW50JyA6IGNvbW1lbnQsCisJJ2xvY2tlZCcgOiBsb2NrZWQsCisJJ2NyZWF0aW9uX2RhdGUnIDogY3JlYXRpb25fZGF0ZSwKKwknbW9kaWZpY2F0aW9uX2RhdGUnIDogbW9kaWZpY2F0aW9uX2RhdGUsCisJJ2NyYzMyX2NoZWNrc3VtJyA6IGNyYzMyX2NoZWNrc3VtLAorCSdkaXNrX2NvcHlfNF8yZV8yX2NoZWNrc3VtJyA6IGRpc2tfY29weV80XzJlXzJfY2hlY2tzdW0sCisJJ2Jsb2NrX2NvdW50JyA6IGJsb2NrX2NvdW50LAorCSdmaWxlX3N5c3RlbScgOiBmaWxlX3N5c3RlbSwKK30KK2Rpc2suX2VsZW1kaWN0ID0geworfQorZm9sZGVyLl9wcm9wZGljdCA9IHsKKwknbmFtZScgOiBuYW1lLAorCSdjb21tZW50JyA6IGNvbW1lbnQsCisJJ2NyZWF0aW9uX2RhdGUnIDogY3JlYXRpb25fZGF0ZSwKKwknbW9kaWZpY2F0aW9uX2RhdGUnIDogbW9kaWZpY2F0aW9uX2RhdGUsCit9Citmb2xkZXIuX2VsZW1kaWN0ID0geworfQorZGlza19pbWFnZS5fcHJvcGRpY3QgPSB7CisJJ25hbWUnIDogbmFtZSwKKwknY29tbWVudCcgOiBjb21tZW50LAorCSdsb2NrZWQnIDogbG9ja2VkLAorCSdjcmVhdGlvbl9kYXRlJyA6IGNyZWF0aW9uX2RhdGUsCisJJ21vZGlmaWNhdGlvbl9kYXRlJyA6IG1vZGlmaWNhdGlvbl9kYXRlLAorCSdmaWxlX2Zvcm1hdCcgOiBmaWxlX2Zvcm1hdCwKKwknc2lnbmVkJyA6IHNpZ25lZCwKKwknY29tcHJlc3NlZCcgOiBjb21wcmVzc2VkLAorCSdzZWdtZW50ZWQnIDogc2VnbWVudGVkLAorCSdzZWdtZW50cycgOiBzZWdtZW50cywKKwknZGlza19uYW1lJyA6IGRpc2tfbmFtZSwKKwknY3JjMzJfY2hlY2tzdW0nIDogY3JjMzJfY2hlY2tzdW0sCisJJ2Rpc2tfY29weV80XzJlXzJfY2hlY2tzdW0nIDogZGlza19jb3B5XzRfMmVfMl9jaGVja3N1bSwKKwknYmxvY2tfY291bnQnIDogYmxvY2tfY291bnQsCisJJ2ZpbGVfc3lzdGVtJyA6IGZpbGVfc3lzdGVtLAorCSdkYXRhX2Zvcmtfc2l6ZScgOiBkYXRhX2Zvcmtfc2l6ZSwKKwkncmVzb3VyY2VfZm9ya19zaXplJyA6IHJlc291cmNlX2Zvcmtfc2l6ZSwKK30KK2Rpc2tfaW1hZ2UuX2VsZW1kaWN0ID0geworfQorU2F2ZV9yZXBseV9yZWNvcmQuX3Byb3BkaWN0ID0geworCSdyZXN1bHRpbmdfdGFyZ2V0X29iamVjdCcgOiByZXN1bHRpbmdfdGFyZ2V0X29iamVjdCwKKwknY29weV90eXBlJyA6IGNvcHlfdHlwZSwKK30KK1NhdmVfcmVwbHlfcmVjb3JkLl9lbGVtZGljdCA9IHsKK30KK19FbnVtX1VJQWMgPSB7CisJJ25ldmVyX2ludGVyYWN0JyA6ICdlTnZyJywJIyBEb265dCBhbGxvdyBhbnkgaW50ZXJhY3Rpb24gYXQgYWxsCisJJ2ludGVyYWN0X3dpdGhfc2VsZicgOiAnZUluUycsCSMgT25seSBhbGxvdyBpbnRlcmFjdGlvbiBmcm9tIGludGVybmFsIGV2ZW50cworCSdpbnRlcmFjdF93aXRoX2xvY2FsJyA6ICdlSW5MJywJIyBBbGxvdyBpbnRlcmFjdGlvbiBmcm9tIGFueSBldmVudCBvcmlnaW5hdGluZyBvbiB0aGlzIG1hY2hpbmUKKwknaW50ZXJhY3Rfd2l0aF9hbGwnIDogJ2VJbkEnLAkjIEFsbG93IGludGVyYWN0aW9uIGZyb20gbmV0d29yayBldmVudHMKK30KKworX0VudW1fU3ZBcyA9IHsKKwknTkRJRl9SVycgOiAnUmRXcicsCSMgcmVhZC93cml0ZSBORElGIGRpc2sgaW1hZ2UKKwknTkRJRl9STycgOiAnUmR4eCcsCSMgcmVhZC1vbmx5IE5ESUYgZGlzayBpbWFnZQorCSdORElGX0NvbXByZXNzZWQnIDogJ1JPQ28nLAkjIGNvbXByZXNzZWQgTkRJRiBkaXNrIGltYWdlCisJJ0Rpc2tfQ29weV80XzJlXzInIDogJ0RDNDInLAkjIERpc2sgQ29weSA0LjIgZGlzayBpbWFnZQorfQorCitfRW51bV9yY3BUID0geworCSdibG9ja19kaXNrX2NvcHknIDogJ2NwQmwnLAkjIGJsb2NrLWJ5LWJsb2NrIGRpc2stbGV2ZWwgY29weQorCSdmaWxlc19hbmRfZmlsZV9JRF9jb3B5JyA6ICdjcElEJywJIyBhbGwgZmlsZXMgaW5jbHVkaW5nIGRlc2t0b3AgZGF0YWJhc2VzIGFuZCBmaWxlIElEuXMKKwknZmlsZXNfYW5kX2Rlc2t0b3BfaW5mbycgOiAnY3BEVCcsCSMgYWxsIGZpbGVzIGFuZCBtb3N0IGRlc2t0b3AgaW5mb3JtYXRpb24KKwknZmlsZXNfb25seScgOiAnY3BGSScsCSMgYWxsIGZpbGVzIGJ1dCBubyBkZXNrdG9wIGluZm9ybWF0aW9uCisJJ2Rpc2tfaW1hZ2VfY29udmVyc2lvbicgOiAnY3BDVicsCSMgZGlzayBpbWFnZSBmb3JtYXQgY29udmVyc2lvbgorCSdkaXNrX2ltYWdlX2NyZWF0aW9uJyA6ICdjcENSJywJIyBkaXNrIGltYWdlIGNyZWF0aW9uCit9CisKK19FbnVtX2xvbmcgPSBOb25lICMgWFhYWCBlbnVtIGxvbmcgbm90IGZvdW5kISEKK19FbnVtX2Jvb2wgPSBOb25lICMgWFhYWCBlbnVtIGJvb2wgbm90IGZvdW5kISEKK19FbnVtX29ial8gPSBOb25lICMgWFhYWCBlbnVtIG9iaiAgbm90IGZvdW5kISEKKworIworIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCisjCitfY2xhc3NkZWNsYXJhdGlvbnMgPSB7CisJJ0RJbWcnIDogZGlza19pbWFnZSwKKwknY2FwcCcgOiBhcHBsaWNhdGlvbiwKKwknRGlzaycgOiBkaXNrLAorCSdGb2xkJyA6IGZvbGRlciwKKwknY3B5UicgOiBTYXZlX3JlcGx5X3JlY29yZCwKK30KKworX3Byb3BkZWNsYXJhdGlvbnMgPSB7CisJJ1hjcmMnIDogY3JjMzJfY2hlY2tzdW0sCisJJ1BEZVMnIDogZGVmYXVsdF9jcmVhdGVfc2l6ZSwKKwknSWRubScgOiBkaXNrX25hbWUsCisJJ1BTU1AnIDogc21hcnRfU2F2ZV9BcywKKwknUGNwZicgOiBhdXRvX2NvcHlfdXBvbl9mbG9wcHlfaW5zZXJ0LAorCSdwbmFtJyA6IG5hbWUsCisJJ0lzaW4nIDogc2lnbmVkLAorCSdvdHRvJyA6IG5vbmVqZWN0YWJsZV9tb2RlLAorCSdQRXhEJyA6IGV4Y2x1ZGVfRGlza1NjcmlwdHMsCisJJ0lzZWcnIDogc2VnbWVudGVkLAorCSdpc2xrJyA6IGxvY2tlZCwKKwknYXNtbycgOiBtb2RpZmljYXRpb25fZGF0ZSwKKwknUFRsaycgOiB1c2Vfc3BlZWNoLAorCSdQZnN5JyA6IGRlZmF1bHRfZmlsZV9zeXN0ZW0sCisJJ1BWZUMnIDogY2hlY2tzdW1fdmVyaWZpY2F0aW9uLAorCSdYYzQyJyA6IGRpc2tfY29weV80XzJlXzJfY2hlY2tzdW0sCisJJ3JjcE8nIDogcmVzdWx0aW5nX3RhcmdldF9vYmplY3QsCisJJ1BhaW0nIDogYXV0b19pbWFnZV91cG9uX2luc2VydCwKKwknY29tdCcgOiBjb21tZW50LAorCSdQQ29FJyA6IGVyYXNlX2NvbmZpcm1hdGlvbiwKKwknZFZlcicgOiBkcml2ZXJfdmVyc2lvbiwKKwknUERlTicgOiBkZWZhdWx0X2NyZWF0ZV9uYW1lLAorCSdQQnVNJyA6IG1ha2VfbXVsdGlwbGVfZmxvcHBpZXMsCisJJ3JjcFQnIDogY29weV90eXBlLAorCSdQRGlFJyA6IHZvbHVtZV9zdWZmaXgsCisJJ0lmbXQnIDogZmlsZV9mb3JtYXQsCisJJ1BkZm0nIDogZGVmYXVsdF9pbWFnZV9mb3JtYXQsCisJJ2FzY2QnIDogY3JlYXRpb25fZGF0ZSwKKwknUGVqYycgOiBlamVjdF9hZnRlcl9hdXRvX2ltYWdlLAorCSdQWmVCJyA6IHplcm9pbmcsCisJJ1BFeFInIDogZXhjbHVkZV9yZW1vdGVfaW1hZ2VzLAorCSdQSW1FJyA6IGltYWdlX3N1ZmZpeCwKKwknUFZlUycgOiBzaWduYXR1cmVfdmVyaWZpY2F0aW9uLAorCSdQU2FMJyA6IHNhdmVfbG9nX2ZpbGUsCisJJ1hibGsnIDogYmxvY2tfY291bnQsCisJJ1BNb0EnIDogbGVhdmVfaW1hZ2VfbW91bnRlZCwKKwknSXNnIycgOiBzZWdtZW50cywKKwknSXJmaycgOiByZXNvdXJjZV9mb3JrX3NpemUsCisJJ0ljb20nIDogY29tcHJlc3NlZCwKKwknWGZzaScgOiBmaWxlX3N5c3RlbSwKKwknSWRmaycgOiBkYXRhX2Zvcmtfc2l6ZSwKKwkndmVycycgOiB2ZXJzaW9uLAorCSdQU2lJJyA6IGltYWdlX3NpZ25pbmcsCit9CisKK19jb21wZGVjbGFyYXRpb25zID0geworfQorCitfZW51bWRlY2xhcmF0aW9ucyA9IHsKKwknU3ZBcycgOiBfRW51bV9TdkFzLAorCSdVSUFjJyA6IF9FbnVtX1VJQWMsCisJJ3JjcFQnIDogX0VudW1fcmNwVCwKK30KZGlmZiAtLWdpdCBhL01hYy9EZW1vL2FwcGxlc2NyaXB0L0Rpc2tfQ29weS9VdGlsaXR5X0V2ZW50cy5weSBiL01hYy9EZW1vL2FwcGxlc2NyaXB0L0Rpc2tfQ29weS9VdGlsaXR5X0V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGFjOGY0Ci0tLSAvZGV2L251bGwKKysrIGIvTWFjL0RlbW8vYXBwbGVzY3JpcHQvRGlza19Db3B5L1V0aWxpdHlfRXZlbnRzLnB5CkBAIC0wLDAgKzEsMjEzIEBACisiIiJTdWl0ZSBVdGlsaXR5IEV2ZW50czogQ29tbWFuZHMgdGhhdCBhbGxvdyB0aGUgdXNlciB0byBzZWxlY3QgRGlzayBDb3B5IGZpbGVzCitMZXZlbCAxLCB2ZXJzaW9uIDEKKworR2VuZXJhdGVkIGZyb20gTWFjaW50b3NoIEhEOkh1bHBwcm9ncmFtbWEnczpEaXNrIENvcHkKK0FFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMCwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKKyIiIgorCitpbXBvcnQgYWV0b29scworaW1wb3J0IE1hY09TCisKK19jb2RlID0gJ2Rkc2snCisKK2NsYXNzIFV0aWxpdHlfRXZlbnRzX0V2ZW50czoKKworCV9hcmdtYXBfc2VsZWN0X2Rpc2tfaW1hZ2UgPSB7CisJCSd3aXRoX3Byb21wdCcgOiAnU0VMcCcsCisJfQorCisJZGVmIHNlbGVjdF9kaXNrX2ltYWdlKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6CisJCSIiInNlbGVjdCBkaXNrIGltYWdlOiBQcm9tcHQgdGhlIHVzZXIgdG8gc2VsZWN0IGEgZGlzayBpbWFnZQorCQlLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcHJvbXB0OiB0aGUgcHJvbXB0IHN0cmluZyB0byBiZSBkaXNwbGF5ZWQKKwkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQorCQlSZXR1cm5zOiBhIHJlZmVyZW5jZSB0byBhIGRpc2sgaW1hZ2UKKwkJIiIiCisJCV9jb2RlID0gJ1VUSUwnCisJCV9zdWJjb2RlID0gJ1NFTDEnCisKKwkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfc2VsZWN0X2Rpc2tfaW1hZ2UpCisJCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKKworCQlhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAnU0VMcCcsIF9FbnVtX1RFWFQpCisKKwkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCisJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQorCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQorCisJX2FyZ21hcF9zZWxlY3RfRGlza1NjcmlwdCA9IHsKKwkJJ3dpdGhfcHJvbXB0JyA6ICdTRUxwJywKKwl9CisKKwlkZWYgc2VsZWN0X0Rpc2tTY3JpcHQoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKKwkJIiIic2VsZWN0IERpc2tTY3JpcHQ6IFByb21wdCB0aGUgdXNlciB0byBzZWxlY3QgYSBEaXNrU2NyaXB0CisJCUtleXdvcmQgYXJndW1lbnQgd2l0aF9wcm9tcHQ6IHRoZSBwcm9tcHQgc3RyaW5nIHRvIGJlIGRpc3BsYXllZAorCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CisJCVJldHVybnM6IGEgcmVmZXJlbmNlIHRvIGEgRGlza1NjcmlwdAorCQkiIiIKKwkJX2NvZGUgPSAnVVRJTCcKKwkJX3N1YmNvZGUgPSAnU0VMMicKKworCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zZWxlY3RfRGlza1NjcmlwdCkKKwkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJworCisJCWFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdTRUxwJywgX0VudW1fVEVYVCkKKworCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKKwkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CisJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCisJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CisJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCisKKwlfYXJnbWFwX3NlbGVjdF9kaXNrX2ltYWdlX29yX0Rpc2tTY3JpcHQgPSB7CisJCSd3aXRoX3Byb21wdCcgOiAnU0VMcCcsCisJfQorCisJZGVmIHNlbGVjdF9kaXNrX2ltYWdlX29yX0Rpc2tTY3JpcHQoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKKwkJIiIic2VsZWN0IGRpc2sgaW1hZ2Ugb3IgRGlza1NjcmlwdDogUHJvbXB0IHRoZSB1c2VyIHRvIHNlbGVjdCBhIGRpc2sgaW1hZ2Ugb3IgRGlza1NjcmlwdAorCQlLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcHJvbXB0OiB0aGUgcHJvbXB0IHN0cmluZyB0byBiZSBkaXNwbGF5ZWQKKwkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQorCQlSZXR1cm5zOiBhIHJlZmVyZW5jZSB0byBkaXNrIGltYWdlIG9yIGEgRGlza1NjcmlwdAorCQkiIiIKKwkJX2NvZGUgPSAnVVRJTCcKKwkJX3N1YmNvZGUgPSAnU0VMMycKKworCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zZWxlY3RfZGlza19pbWFnZV9vcl9EaXNrU2NyaXB0KQorCQlpZiBfbm9fb2JqZWN0ICE9IE5vbmU6IHJhaXNlIFR5cGVFcnJvciwgJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnCisKKwkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ1NFTHAnLCBfRW51bV9URVhUKQorCisJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAorCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKwkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworCV9hcmdtYXBfc2VsZWN0X2Zsb3BweV9kaXNrX2ltYWdlID0geworCQknd2l0aF9wcm9tcHQnIDogJ1NFTHAnLAorCX0KKworCWRlZiBzZWxlY3RfZmxvcHB5X2Rpc2tfaW1hZ2Uoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKKwkJIiIic2VsZWN0IGZsb3BweSBkaXNrIGltYWdlOiBQcm9tcHQgdGhlIHVzZXIgdG8gc2VsZWN0IGEgZmxvcHB5IGRpc2sgaW1hZ2UKKwkJS2V5d29yZCBhcmd1bWVudCB3aXRoX3Byb21wdDogdGhlIHByb21wdCBzdHJpbmcgdG8gYmUgZGlzcGxheWVkCisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJUmV0dXJuczogYSByZWZlcmVuY2UgdG8gYSBmbG9wcHkgZGlzayBpbWFnZQorCQkiIiIKKwkJX2NvZGUgPSAnVVRJTCcKKwkJX3N1YmNvZGUgPSAnU0VMNCcKKworCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zZWxlY3RfZmxvcHB5X2Rpc2tfaW1hZ2UpCisJCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKKworCQlhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAnU0VMcCcsIF9FbnVtX1RFWFQpCisKKwkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCisJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQorCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQorCisJX2FyZ21hcF9zZWxlY3RfZGlzayA9IHsKKwkJJ3dpdGhfcHJvbXB0JyA6ICdTRUxwJywKKwl9CisKKwlkZWYgc2VsZWN0X2Rpc2soc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKKwkJIiIic2VsZWN0IGRpc2s6IFByb21wdCB0aGUgdXNlciB0byBzZWxlY3QgYSBkaXNrIHZvbHVtZQorCQlLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcHJvbXB0OiB0aGUgcHJvbXB0IHN0cmluZyB0byBiZSBkaXNwbGF5ZWQKKwkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQorCQlSZXR1cm5zOiBhIHJlZmVyZW5jZSB0byB0aGUgZGlzaworCQkiIiIKKwkJX2NvZGUgPSAnVVRJTCcKKwkJX3N1YmNvZGUgPSAnU0VMNScKKworCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zZWxlY3RfZGlzaykKKwkJaWYgX25vX29iamVjdCAhPSBOb25lOiByYWlzZSBUeXBlRXJyb3IsICdObyBkaXJlY3QgYXJnIGV4cGVjdGVkJworCisJCWFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdTRUxwJywgX0VudW1fVEVYVCkKKworCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKKwkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6CisJCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCisJCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKKwkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6CisJCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCisKKwlfYXJnbWFwX3NlbGVjdF9mb2xkZXIgPSB7CisJCSd3aXRoX3Byb21wdCcgOiAnU0VMcCcsCisJfQorCisJZGVmIHNlbGVjdF9mb2xkZXIoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKKwkJIiIic2VsZWN0IGZvbGRlcjogUHJvbXB0IHRoZSB1c2VyIHRvIHNlbGVjdCBhIGZvbGRlcgorCQlLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcHJvbXB0OiB0aGUgcHJvbXB0IHN0cmluZyB0byBiZSBkaXNwbGF5ZWQKKwkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQorCQlSZXR1cm5zOiBhIHJlZmVyZW5jZSB0byB0aGUgZm9sZGVyCisJCSIiIgorCQlfY29kZSA9ICdVVElMJworCQlfc3ViY29kZSA9ICdTRUw2JworCisJCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX3NlbGVjdF9mb2xkZXIpCisJCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKKworCQlhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAnU0VMcCcsIF9FbnVtX1RFWFQpCisKKwkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCisJCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgorCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQorCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0CisJCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgorCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQorCisJX2FyZ21hcF9sb2cgPSB7CisJCSd0aW1lX3N0YW1wJyA6ICdUU01QJywKKwl9CisKKwlkZWYgbG9nKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgorCQkiIiJsb2c6IEFkZCBhIHN0cmluZyB0byB0aGUgbG9nIHdpbmRvdworCQlSZXF1aXJlZCBhcmd1bWVudDogdGhlIHN0cmluZyB0byBhZGQgdG8gdGhlIGxvZyB3aW5kb3cKKwkJS2V5d29yZCBhcmd1bWVudCB0aW1lX3N0YW1wOiBTaG91bGQgdGhlIGxvZyBlbnRyeSBiZSB0aW1lLXN0YW1wZWQ/IChmYWxzZSBpZiBub3Qgc3VwcGxpZWQpCisJCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKKwkJIiIiCisJCV9jb2RlID0gJ1VUSUwnCisJCV9zdWJjb2RlID0gJ0xPRyAnCisKKwkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfbG9nKQorCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0CisKKwkJYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ1RTTVAnLCBfRW51bV9ib29sKQorCisJCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAorCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKKwkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKKwkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAorCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKKwkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KKworX0VudW1fVEVYVCA9IE5vbmUgIyBYWFhYIGVudW0gVEVYVCBub3QgZm91bmQhIQorX0VudW1fYm9vbCA9IE5vbmUgIyBYWFhYIGVudW0gYm9vbCBub3QgZm91bmQhIQorCisjCisjIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKKyMKK19jbGFzc2RlY2xhcmF0aW9ucyA9IHsKK30KKworX3Byb3BkZWNsYXJhdGlvbnMgPSB7Cit9CisKK19jb21wZGVjbGFyYXRpb25zID0geworfQorCitfZW51bWRlY2xhcmF0aW9ucyA9IHsKK30KZGlmZiAtLWdpdCBhL01hYy9EZW1vL2FwcGxlc2NyaXB0L0Rpc2tfQ29weS9fX2luaXRfXy5weSBiL01hYy9EZW1vL2FwcGxlc2NyaXB0L0Rpc2tfQ29weS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODE0MDU2Ci0tLSAvZGV2L251bGwKKysrIGIvTWFjL0RlbW8vYXBwbGVzY3JpcHQvRGlza19Db3B5L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMzYgQEAKKyIiIgorUGFja2FnZSBnZW5lcmF0ZWQgZnJvbSBNYWNpbnRvc2ggSEQ6SHVscHByb2dyYW1tYSdzOkRpc2sgQ29weQorUmVzb3VyY2UgYWV0ZSByZXNpZCAwIAorIiIiCitpbXBvcnQgYWV0b29scworRXJyb3IgPSBhZXRvb2xzLkVycm9yCitpbXBvcnQgU3RhbmRhcmRfU3VpdGUKK2ltcG9ydCBTcGVjaWFsX0V2ZW50cworaW1wb3J0IFV0aWxpdHlfRXZlbnRzCisKKworX2NvZGVfdG9fbW9kdWxlID0geworCSdDb3JlJyA6IFN0YW5kYXJkX1N1aXRlLAorCSdkZHNrJyA6IFNwZWNpYWxfRXZlbnRzLAorCSdkZHNrJyA6IFV0aWxpdHlfRXZlbnRzLAorfQorCisKKworX2NvZGVfdG9fZnVsbG5hbWUgPSB7CisJJ0NvcmUnIDogKCdEaXNrX0NvcHkuU3RhbmRhcmRfU3VpdGUnLCAnU3RhbmRhcmRfU3VpdGUnKSwKKwknZGRzaycgOiAoJ0Rpc2tfQ29weS5TcGVjaWFsX0V2ZW50cycsICdTcGVjaWFsX0V2ZW50cycpLAorCSdkZHNrJyA6ICgnRGlza19Db3B5LlV0aWxpdHlfRXZlbnRzJywgJ1V0aWxpdHlfRXZlbnRzJyksCit9CisKK2Zyb20gU3RhbmRhcmRfU3VpdGUgaW1wb3J0ICoKK2Zyb20gU3BlY2lhbF9FdmVudHMgaW1wb3J0ICoKK2Zyb20gVXRpbGl0eV9FdmVudHMgaW1wb3J0ICoKKworCitjbGFzcyBEaXNrX0NvcHkoU3RhbmRhcmRfU3VpdGVfRXZlbnRzLAorCQlTcGVjaWFsX0V2ZW50c19FdmVudHMsCisJCVV0aWxpdHlfRXZlbnRzX0V2ZW50cywKKwkJYWV0b29scy5UYWxrVG8pOgorCV9zaWduYXR1cmUgPSAnZGRzaycKKwpkaWZmIC0tZ2l0IGEvTWFjL0RlbW8vYXBwbGVzY3JpcHQvbWFrZWRpc2sucHkgYi9NYWMvRGVtby9hcHBsZXNjcmlwdC9tYWtlZGlzay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDE2OTY0Ci0tLSAvZGV2L251bGwKKysrIGIvTWFjL0RlbW8vYXBwbGVzY3JpcHQvbWFrZWRpc2sucHkKQEAgLTAsMCArMSwxNSBAQAoraW1wb3J0IERpc2tfQ29weQoraW1wb3J0IG1hY2ZzCitpbXBvcnQgc3lzCisKK3RhbGtlciA9IERpc2tfQ29weS5EaXNrX0NvcHkoc3RhcnQ9MSkKK3RhbGtlci5hY3RpdmF0ZSgpCitmaWxlc3BlYyA9IG1hY2ZzLkZTU3BlYygnbXkgZGlzayBpbWFnZS5pbWcnKQordHJ5OgorCW9ianJlZiA9IHRhbGtlci5jcmVhdGUoJ215IGRpc2sgaW1hZ2UnLCBzYXZpbmdfYXM9ZmlsZXNwZWMsIGxlYXZlX2ltYWdlX21vdW50ZWQ9MSkKK2V4Y2VwdCBEaXNrX0NvcHkuRXJyb3IsIGFyZzoKKwlwcmludCAiRVJST1I6IG15IGRpc2sgaW1hZ2U6IiwgYXJnCitlbHNlOgorCXByaW50ICdvYmpyZWY9Jywgb2JqcmVmCitwcmludCAnVHlwZSByZXR1cm4gdG8gZXhpdC0nCitzeXMuc3RkaW4ucmVhZGxpbmUoKQpkaWZmIC0tZ2l0IGEvTWFjL0RlbW8vc2NyaXB0aW5nL0V1ZG9yYV9TdWl0ZS5weSBiL01hYy9EZW1vL3NjcmlwdGluZy9FdWRvcmFfU3VpdGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMzgzZjUuLjAwMDAwMDAKLS0tIGEvTWFjL0RlbW8vc2NyaXB0aW5nL0V1ZG9yYV9TdWl0ZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDU0NyArMCwwIEBACi0iIiJTdWl0ZSBFdWRvcmEgU3VpdGU6IFRlcm1zIHNwZWNpZmljIHRvIEV1ZG9yYQotTGV2ZWwgMSwgdmVyc2lvbiAxCi0KLUdlbmVyYXRlZCBmcm9tIGZsYXA6UHJvZ3JhbW1hJ3M6RXVkb3JhIExpZ2h0Ci1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAyLzE2LCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnQ1NPbScKLQotY2xhc3MgRXVkb3JhX1N1aXRlOgotCi0JX2FyZ21hcF9jb25uZWN0ID0gewotCQknc2VuZGluZycgOiAnZVNlbicsCi0JCSdjaGVja2luZycgOiAnZUNoaycsCi0JCSd3YWl0aW5nJyA6ICdlSWRsJywKLQl9Ci0KLQlkZWYgY29ubmVjdChzZWxmLCBfbm9fb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJjb25uZWN0OiBDb25uZWN0IHRvIHRoZSBtYWlsIHNlcnZlciBhbmQgdHJhbnNmZXIgbWFpbAotCQlLZXl3b3JkIGFyZ3VtZW50IHNlbmRpbmc6IHRydWUgdG8gbWFrZSBldWRvcmEgc2VuZCBxdWV1ZWQgbWVzc2FnZXMKLQkJS2V5d29yZCBhcmd1bWVudCBjaGVja2luZzogdHJ1ZSB0byBtYWtlIGV1ZG9yYSBjaGVjayBmb3IgbWFpbAotCQlLZXl3b3JkIGFyZ3VtZW50IHdhaXRpbmc6IHRydWUgdG8gbWFrZSBldWRvcmEgd2FpdCBmb3IgaWRsZSB0aW1lIGJlZm9yZSBjaGVja2luZwotCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0JCSIiIgotCQlfY29kZSA9ICdDU09tJwotCQlfc3ViY29kZSA9ICdlQ29uJwotCi0JCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX2Nvbm5lY3QpCi0JCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKLQotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLQkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLQkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCV9hcmdtYXBfcmVwbHkgPSB7Ci0JCSdxdW90aW5nJyA6ICdlUVR4JywKLQkJJ2V2ZXJ5b25lJyA6ICdlUkFsJywKLQkJJ3NlbGYnIDogJ2VTbGYnLAotCX0KLQotCWRlZiByZXBseShzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLQkJIiIicmVwbHk6IFJlcGx5IHRvIGEgbWVzc2FnZQotCQlSZXF1aXJlZCBhcmd1bWVudDogdGhlIG1lc3NhZ2UgdG8gcmVwbHkgdG8KLQkJS2V5d29yZCBhcmd1bWVudCBxdW90aW5nOiB0cnVlIGlmIHlvdSB3YW50IHRvIHF1b3RlIHRoZSBvcmlnaW5hbCB0ZXh0IGluIHRoZSByZXBseQotCQlLZXl3b3JkIGFyZ3VtZW50IGV2ZXJ5b25lOiB0cnVlIGlmIHlvdSB3YW50IHRoZSByZXBseSB0byBnbyB0byBldmVyeW9uZSB3aG8gZ290IHRoZSBvcmlnaW5hbAotCQlLZXl3b3JkIGFyZ3VtZW50IHNlbGY6IHRydWUgaWYgeW91IHdhbnQgdGhlIHJlcGx5IHRvIGdvIHRvIHlvdXJzZWxmLCB0b28KLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQlSZXR1cm5zOiB0byB0aGUgcmVwbHkgbWVzc2FnZQotCQkiIiIKLQkJX2NvZGUgPSAnQ1NPbScKLQkJX3N1YmNvZGUgPSAnZVJlcCcKLQotCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9yZXBseSkKLQkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLQkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0JCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgotCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0JZGVmIGZvcndhcmQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0JCSIiImZvcndhcmQ6IEZvcndhcmQgYSBtZXNzYWdlCi0JCVJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgbWVzc2FnZSB0byBmb3J3YXJkCi0JCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLQkJUmV0dXJuczogdG8gdGhlIGZvcndhcmRlZCBtZXNzYWdlCi0JCSIiIgotCQlfY29kZSA9ICdDU09tJwotCQlfc3ViY29kZSA9ICdlRndkJwotCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCi0JCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLQkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLQkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCWRlZiByZWRpcmVjdChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLQkJIiIicmVkaXJlY3Q6IFJlZGlyZWN0IGEgbWVzc2FnZQotCQlSZXF1aXJlZCBhcmd1bWVudDogdGhlIG1lc3NhZ2UgdG8gcmVkaXJlY3QKLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQlSZXR1cm5zOiB0byB0aGUgcmVkaXJlY3RlZCBtZXNzYWdlCi0JCSIiIgotCQlfY29kZSA9ICdDU09tJwotCQlfc3ViY29kZSA9ICdlUmRyJwotCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCi0JCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLQkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLQkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCWRlZiBzZW5kX2FnYWluKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJzZW5kIGFnYWluOiBTZW5kIGEgbWVzc2FnZSBhZ2FpbgotCQlSZXF1aXJlZCBhcmd1bWVudDogdGhlIG1lc3NhZ2UgdG8gc2VuZCBhZ2FpbgotCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0JCVJldHVybnM6IHRvIHRoZSBtZXNzYWdlIHNlbnQgYWdhaW4KLQkJIiIiCi0JCV9jb2RlID0gJ0NTT20nCi0JCV9zdWJjb2RlID0gJ2VTYXYnCi0KLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKLQkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLQkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0JCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgotCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0JX2FyZ21hcF9xdWV1ZSA9IHsKLQkJJ19mb3InIDogJ2VXaG4nLAotCX0KLQotCWRlZiBxdWV1ZShzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLQkJIiIicXVldWU6IFF1ZXVlIGEgbWVzc2FnZSB0byBiZSBzZW50Ci0JCVJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgbWVzc2FnZSB0byBxdWV1ZQotCQlLZXl3b3JkIGFyZ3VtZW50IF9mb3I6IGRhdGUgdG8gc2VuZCB0aGUgbWVzc2FnZSwgaW4gc2Vjb25kcyBzaW5jZSAxOTA0LCBVVEMKLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQkiIiIKLQkJX2NvZGUgPSAnQ1NPbScKLQkJX3N1YmNvZGUgPSAnZVF1ZScKLQotCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9xdWV1ZSkKLQkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLQkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0JCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgotCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0JZGVmIHVucXVldWUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0JCSIiInVucXVldWU6IFJlbW92ZSBhIG1lc3NhZ2UgZnJvbSB0aGUgcXVldWUsIHNvIGl0IHdvbrl0IGJlIHNlbnQKLQkJUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBtZXNzYWdlIHRvIHVucXVldWUKLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQkiIiIKLQkJX2NvZGUgPSAnQ1NPbScKLQkJX3N1YmNvZGUgPSAnZVVuUScKLQotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwotCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLQkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6Ci0JCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0JCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0JCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQlfYXJnbWFwX2F0dGFjaF90byA9IHsKLQkJJ2RvY3VtZW50cycgOiAnZURjbCcsCi0JfQotCi0JZGVmIGF0dGFjaF90byhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLQkJIiIiYXR0YWNoIHRvOiBBdHRhY2ggZG9jdW1lbnRzIHRvIGEgbWVzc2FnZQotCQlSZXF1aXJlZCBhcmd1bWVudDogdGhlIG1lc3NhZ2UgdG8gYXR0YWNoIHRoZSBkb2N1bWVudHMgdG8KLQkJS2V5d29yZCBhcmd1bWVudCBkb2N1bWVudHM6IGxpc3Qgb2YgZG9jdW1lbnRzIHRvIGF0dGFjaAotCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0JCSIiIgotCQlfY29kZSA9ICdDU09tJwotCQlfc3ViY29kZSA9ICdlQXRjJwotCi0JCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX2F0dGFjaF90bykKLQkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLQkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0JCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgotCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0JX2FyZ21hcF9zdGFydF9ub3RpZnlpbmcgPSB7Ci0JCSd3aGVuJyA6ICdlV0hwJywKLQl9Ci0KLQlkZWYgc3RhcnRfbm90aWZ5aW5nKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJzdGFydCBub3RpZnlpbmc6IE5vdGlmeSBhbiBhcHBsaWNhdGlvbiBvZiB0aGluZ3MgdGhhdCBoYXBwZW4KLQkJUmVxdWlyZWQgYXJndW1lbnQ6IGFuIGFwcGxpY2F0aW9uIHRvIG5vdGlmeQotCQlLZXl3b3JkIGFyZ3VtZW50IHdoZW46IHdoYXQgdG8gbm90aWZ5IHRoZSBhcHBsaWNhdGlvbiBvZgotCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0JCSIiIgotCQlfY29kZSA9ICdDU09tJwotCQlfc3ViY29kZSA9ICduSW5zJwotCi0JCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX3N0YXJ0X25vdGlmeWluZykKLQkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLQkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0JCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgotCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0JX2FyZ21hcF9zdG9wX25vdGlmeWluZyA9IHsKLQkJJ3doZW4nIDogJ2VXSHAnLAotCX0KLQotCWRlZiBzdG9wX25vdGlmeWluZyhzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLQkJIiIic3RvcCBub3RpZnlpbmc6IFN0b3Agbm90aWZ5aW5nIGFwcGxpY2F0aW9ucyBvZiB0aGluZ3MgdGhhdCBhcmUgaGFwcGVuaW5nCi0JCVJlcXVpcmVkIGFyZ3VtZW50OiBhbiBhcHBsaWNhdGlvbiBjdXJyZW50bHkgYmVpbmcgbm90aWZpZWQKLQkJS2V5d29yZCBhcmd1bWVudCB3aGVuOiB0aGUgdGhpbmdzIG5vIGxvbmdlciB0byBub3RpZnkgaXQgb2YKLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQkiIiIKLQkJX2NvZGUgPSAnQ1NPbScKLQkJX3N1YmNvZGUgPSAnblJlbScKLQotCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zdG9wX25vdGlmeWluZykKLQkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLQkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0JCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgotCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0JX2FyZ21hcF9ub3RpY2UgPSB7Ci0JCSdvY2N1cnJlbmNlJyA6ICdlV0hwJywKLQkJJ21lc3NhZ2VzJyA6ICdlTUxzJywKLQl9Ci0KLQlkZWYgbm90aWNlKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0JCSIiIm5vdGljZTogRXVkb3JhIHNlbmRzIHRoaXMgZXZlbnQgdG8gbm90aWZ5IGFuIGFwcGxpY2F0aW9uIHRoYXQgc29tZXRoaW5nIGhhcHBlbmVkCi0JCUtleXdvcmQgYXJndW1lbnQgb2NjdXJyZW5jZTogd2hhdCBoYXBwZW5lZAotCQlLZXl3b3JkIGFyZ3VtZW50IG1lc3NhZ2VzOiBvZiB0aGUgbWVzc2FnZXMgaW52b2x2ZWQKLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQkiIiIKLQkJX2NvZGUgPSAnQ1NPbScKLQkJX3N1YmNvZGUgPSAnZU5vdCcKLQotCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9ub3RpY2UpCi0JCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKLQotCQlhZXRvb2xzLmVudW1zdWJzdChfYXJndW1lbnRzLCAnZVdIcCcsIF9FbnVtX2VOb3QpCi0KLQkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0JCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgotCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLWNsYXNzIG1haWxfZm9sZGVyKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0JIiIibWFpbCBmb2xkZXIgLSBBIGZvbGRlciBjb250YWluaW5nIG1haWxib3hlcyBvciBvdGhlciBtYWlsIGZvbGRlcnMuIiIiCi0Jd2FudCA9ICdldU1GJwotY2xhc3MgbmFtZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0JIiIibmFtZSAtIHRoZSBuYW1lIiIiCi0Jd2hpY2ggPSAncG5hbScKLQl3YW50ID0gJ2l0eHQnCi0jICAgICAgICBlbGVtZW50ICdldU1CJyBhcyBbJ2luZHgnLCAnbmFtZSddCi0jICAgICAgICBlbGVtZW50ICdldU1GJyBhcyBbJ2luZHgnLCAnbmFtZSddCi0KLWNsYXNzIG1haWxib3goYWV0b29scy5Db21wb25lbnRJdGVtKToKLQkiIiJtYWlsYm94IC0gQSBtYWlsYm94LiIiIgotCXdhbnQgPSAnZXVNQicKLSMgcmVwZWF0ZWQgcHJvcGVydHkgbmFtZSB0aGUgbmFtZSBvZiB0aGUgbWFpbCBmb2xkZXIKLWNsYXNzIHNwYWNlX3dhc3RlZChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0JIiIic3BhY2Ugd2FzdGVkIC0gdGhlIGFtb3VudCBvZiB3YXN0ZSBzcGFjZSBpbiB0aGUgbWFpbGJveCIiIgotCXdoaWNoID0gJ2V1V1MnCi0Jd2FudCA9ICdsb25nJwotY2xhc3Mgc3BhY2VfcmVxdWlyZWQoYWV0b29scy5OUHJvcGVydHkpOgotCSIiInNwYWNlIHJlcXVpcmVkIC0gdGhlIG1pbmltdW0gYW1vdW50IG9mIHNwYWNlIHJlcXVpcmVkIHRvIGhvbGQgdGhlIG1haWxib3giIiIKLQl3aGljaCA9ICdldU5TJwotCXdhbnQgPSAnbG9uZycKLWNsYXNzIGxvY2F0aW9uKGFldG9vbHMuTlByb3BlcnR5KToKLQkiIiJsb2NhdGlvbiAtIHRoZSBmaWxlIHRoZSBtYWlsYm94IGlzIHN0b3JlZCBpbiIiIgotCXdoaWNoID0gJ2V1RlMnCi0Jd2FudCA9ICdmc3MgJwotY2xhc3MgdG9jX2xvY2F0aW9uKGFldG9vbHMuTlByb3BlcnR5KToKLQkiIiJ0b2MgbG9jYXRpb24gLSB0aGUgZmlsZSB0aGUgdGFibGUgb2YgY29udGVudHMgaXMgc3RvcmVkIGluIiIiCi0Jd2hpY2ggPSAnZVRGUycKLQl3YW50ID0gJ2ZzcyAnCi0jICAgICAgICBlbGVtZW50ICdldU1TJyBhcyBbJ2luZHgnXQotCi1jbGFzcyBtZXNzYWdlKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0JIiIibWVzc2FnZSAtIEEgbWVzc2FnZSIiIgotCXdhbnQgPSAnZXVNUycKLWNsYXNzIGJvZHkoYWV0b29scy5OUHJvcGVydHkpOgotCSIiImJvZHkgLSB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZSIiIgotCXdoaWNoID0gJ2VCb2QnCi0Jd2FudCA9ICdURVhUJwotY2xhc3MgcHJpb3JpdHkoYWV0b29scy5OUHJvcGVydHkpOgotCSIiInByaW9yaXR5IC0gdGhlIHByaW9yaXR5IiIiCi0Jd2hpY2ggPSAnZXVQWScKLQl3YW50ID0gJ2xvbmcnCi1jbGFzcyBsYWJlbChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0JIiIibGFiZWwgLSB0aGUgaW5kZXggb2YgdGhlIGxhYmVsIiIiCi0Jd2hpY2ggPSAnZUxibCcKLQl3YW50ID0gJ2xvbmcnCi1jbGFzcyBzdGF0dXMoYWV0b29scy5OUHJvcGVydHkpOgotCSIiInN0YXR1cyAtIHRoZSBtZXNzYWdlIHN0YXR1cyIiIgotCXdoaWNoID0gJ2V1U1QnCi0Jd2FudCA9ICdlU3RhJwotY2xhc3Mgc2VuZGVyKGFldG9vbHMuTlByb3BlcnR5KToKLQkiIiJzZW5kZXIgLSB0aGUgc2VuZGVyIGFzIGFwcGVhcmluZyBpbiB0aGUgbWVzc2FnZSBzdW1tYXJ5IiIiCi0Jd2hpY2ggPSAnZXVTZScKLQl3YW50ID0gJ2l0eHQnCi1jbGFzcyBkYXRlKGFldG9vbHMuTlByb3BlcnR5KToKLQkiIiJkYXRlIC0gdGhlIGRhdGUgYXMgYXBwZWFyaW5nIGluIHRoZSBtZXNzYWdlIHN1bW1hcnkiIiIKLQl3aGljaCA9ICdldURhJwotCXdhbnQgPSAnaXR4dCcKLWNsYXNzIHN1YmplY3QoYWV0b29scy5OUHJvcGVydHkpOgotCSIiInN1YmplY3QgLSB0aGUgc3ViamVjdCBhcyBhcHBlYXJpbmcgaW4gdGhlIG1lc3NhZ2Ugc3VtbWFyeSIiIgotCXdoaWNoID0gJ2V1U3UnCi0Jd2FudCA9ICdpdHh0JwotY2xhc3Mgc2l6ZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0JIiIic2l6ZSAtIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlIiIiCi0Jd2hpY2ggPSAnZXVTaScKLQl3YW50ID0gJ2xvbmcnCi1jbGFzcyBvdXRnb2luZyhhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0JIiIib3V0Z29pbmcgLSBpcyB0aGUgbWVzc2FnZSBpcyBvdXRnb2luZz8iIiIKLQl3aGljaCA9ICdldU91JwotCXdhbnQgPSAnYm9vbCcKLWNsYXNzIHNpZ25hdHVyZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0JIiIic2lnbmF0dXJlIC0gd2hpY2ggc2lnbmF0dXJlIHRoZSBtZXNzYWdlIHNob3VsZCBoYXZlIiIiCi0Jd2hpY2ggPSAnZVNpZycKLQl3YW50ID0gJ2VTaWcnCi1jbGFzcyBRUChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0JIiIiUVAgLSBpcyBFdWRvcmEgYWxsb3dlZCB0byBlbmNvZGUgdGV4dD8iIiIKLQl3aGljaCA9ICdlTVFQJwotCXdhbnQgPSAnYm9vbCcKLWNsYXNzIHJldHVybl9yZWNlaXB0KGFldG9vbHMuTlByb3BlcnR5KToKLQkiIiJyZXR1cm4gcmVjZWlwdCAtIGlzIGEgcmV0dXJuIHJlY2VpcHQgaXMgcmVxdWVzdGVkPyIiIgotCXdoaWNoID0gJ2VSUlInCi0Jd2FudCA9ICdib29sJwotY2xhc3Mgd3JhcChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0JIiIid3JhcCAtIHNob3VsZCB0aGUgdGV4dCBiZSB3cmFwcGVkIHdoZW4gc2VudD8iIiIKLQl3aGljaCA9ICdlV3JwJwotCXdhbnQgPSAnYm9vbCcKLWNsYXNzIHRhYl9leHBhbnNpb24oYWV0b29scy5OUHJvcGVydHkpOgotCSIiInRhYiBleHBhbnNpb24gLSBzaG91bGQgdGFicyBnZXQgZXhwYW5kZWQgdG8gc3BhY2VzPyIiIgotCXdoaWNoID0gJ2VUYWInCi0Jd2FudCA9ICdib29sJwotY2xhc3Mga2VlcF9jb3B5KGFldG9vbHMuTlByb3BlcnR5KToKLQkiIiJrZWVwIGNvcHkgLSBzaG91bGQgYSBjb3B5IHNob3VsZCBiZSBrZXB0IGFmdGVyIG1lc3NhZ2UgaXMgc2VudD8iIiIKLQl3aGljaCA9ICdlQ3B5JwotCXdhbnQgPSAnYm9vbCcKLWNsYXNzIHByZXNlcnZlX21hY2ludG9zaF9pbmZvKGFldG9vbHMuTlByb3BlcnR5KToKLQkiIiJwcmVzZXJ2ZSBtYWNpbnRvc2ggaW5mbyAtIHNob3VsZCBNYWNpbnRvc2ggaW5mb3JtYXRpb24gYWx3YXlzIGJlIHNlbnQgd2l0aCBhdHRhY2htZW50cz8iIiIKLQl3aGljaCA9ICdlWFRYJwotCXdhbnQgPSAnYm9vbCcKLWNsYXNzIGF0dGFjaG1lbnRfZW5jb2RpbmcoYWV0b29scy5OUHJvcGVydHkpOgotCSIiImF0dGFjaG1lbnQgZW5jb2RpbmcgLSB0aGUgdHlwZSBvZiBlbmNvZGluZyB0byB1c2UgZm9yIGF0dGFjaG1lbnRzIiIiCi0Jd2hpY2ggPSAnZUFUeScKLQl3YW50ID0gJ2VBdHknCi1jbGFzcyBzaG93X2FsbF9oZWFkZXJzKGFldG9vbHMuTlByb3BlcnR5KToKLQkiIiJzaG93IGFsbCBoZWFkZXJzIC0gc2hvdWxkIGFsbCBoZWFkZXJzIGJlIHZpc2libGU/IiIiCi0Jd2hpY2ggPSAnZUJsYScKLQl3YW50ID0gJ2Jvb2wnCi1jbGFzcyB0cmFuc2xpdGVyYXRpb25fdGFibGUoYWV0b29scy5OUHJvcGVydHkpOgotCSIiInRyYW5zbGl0ZXJhdGlvbiB0YWJsZSAtIHRoZSByZXNvdXJjZSBpZCBvZiB0aGUgdHJhbnNsaXRlcmF0aW9uIHRhYmxlIiIiCi0Jd2hpY2ggPSAnZVRibCcKLQl3YW50ID0gJ2xvbmcnCi1jbGFzcyB3aWxsX2JlX2ZldGNoZWQoYWV0b29scy5OUHJvcGVydHkpOgotCSIiIndpbGwgYmUgZmV0Y2hlZCAtIHdpbGwgdGhlIG1lc3NhZ2UgYmUgW3JlXWZldGNoZWQgb24gbmV4dCBjaGVjaz8iIiIKLQl3aGljaCA9ICdlV0ZoJwotCXdhbnQgPSAnYm9vbCcKLWNsYXNzIHdpbGxfYmVfZGVsZXRlZChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0JIiIid2lsbCBiZSBkZWxldGVkIC0gd2lsbCB0aGUgbWVzc2FnZSBiZSBkZWxldGVkIGZyb20gc2VydmVyIG9uIG5leHQgY2hlY2s/IiIiCi0Jd2hpY2ggPSAnZVdEbCcKLQl3YW50ID0gJ2Jvb2wnCi0jICAgICAgICBlbGVtZW50ICdldUZkJyBhcyBbJ25hbWUnXQotCi1jbGFzcyBmaWVsZChhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgotCSIiImZpZWxkIC0gQW4gUkZDIDgyMiBoZWFkZXIgZmllbGQgaW4gYSBtZXNzYWdlIChmaWVsZCBuYW1lZCAiIiBpcyB0aGUgYm9keSkiIiIKLQl3YW50ID0gJ2V1RmQnCi0KLWNsYXNzIHNldHRpbmcoYWV0b29scy5Db21wb25lbnRJdGVtKToKLQkiIiJzZXR0aW5nIC0gRXVkb3JhJ3Mgc2V0dGluZ3MiIiIKLQl3YW50ID0gJ2VQcmYnCi1tYWlsX2ZvbGRlci5fcHJvcGRpY3QgPSB7Ci0JJ25hbWUnIDogbmFtZSwKLX0KLW1haWxfZm9sZGVyLl9lbGVtZGljdCA9IHsKLQknbWFpbGJveCcgOiBtYWlsYm94LAotCSdtYWlsX2ZvbGRlcicgOiBtYWlsX2ZvbGRlciwKLX0KLW1haWxib3guX3Byb3BkaWN0ID0gewotCSduYW1lJyA6IG5hbWUsCi0JJ3NwYWNlX3dhc3RlZCcgOiBzcGFjZV93YXN0ZWQsCi0JJ3NwYWNlX3JlcXVpcmVkJyA6IHNwYWNlX3JlcXVpcmVkLAotCSdsb2NhdGlvbicgOiBsb2NhdGlvbiwKLQkndG9jX2xvY2F0aW9uJyA6IHRvY19sb2NhdGlvbiwKLX0KLW1haWxib3guX2VsZW1kaWN0ID0gewotCSdtZXNzYWdlJyA6IG1lc3NhZ2UsCi19Ci1tZXNzYWdlLl9wcm9wZGljdCA9IHsKLQknYm9keScgOiBib2R5LAotCSdwcmlvcml0eScgOiBwcmlvcml0eSwKLQknbGFiZWwnIDogbGFiZWwsCi0JJ3N0YXR1cycgOiBzdGF0dXMsCi0JJ3NlbmRlcicgOiBzZW5kZXIsCi0JJ2RhdGUnIDogZGF0ZSwKLQknc3ViamVjdCcgOiBzdWJqZWN0LAotCSdzaXplJyA6IHNpemUsCi0JJ291dGdvaW5nJyA6IG91dGdvaW5nLAotCSdzaWduYXR1cmUnIDogc2lnbmF0dXJlLAotCSdRUCcgOiBRUCwKLQkncmV0dXJuX3JlY2VpcHQnIDogcmV0dXJuX3JlY2VpcHQsCi0JJ3dyYXAnIDogd3JhcCwKLQkndGFiX2V4cGFuc2lvbicgOiB0YWJfZXhwYW5zaW9uLAotCSdrZWVwX2NvcHknIDoga2VlcF9jb3B5LAotCSdwcmVzZXJ2ZV9tYWNpbnRvc2hfaW5mbycgOiBwcmVzZXJ2ZV9tYWNpbnRvc2hfaW5mbywKLQknYXR0YWNobWVudF9lbmNvZGluZycgOiBhdHRhY2htZW50X2VuY29kaW5nLAotCSdzaG93X2FsbF9oZWFkZXJzJyA6IHNob3dfYWxsX2hlYWRlcnMsCi0JJ3RyYW5zbGl0ZXJhdGlvbl90YWJsZScgOiB0cmFuc2xpdGVyYXRpb25fdGFibGUsCi0JJ3dpbGxfYmVfZmV0Y2hlZCcgOiB3aWxsX2JlX2ZldGNoZWQsCi0JJ3dpbGxfYmVfZGVsZXRlZCcgOiB3aWxsX2JlX2RlbGV0ZWQsCi19Ci1tZXNzYWdlLl9lbGVtZGljdCA9IHsKLQknZmllbGQnIDogZmllbGQsCi19Ci1maWVsZC5fcHJvcGRpY3QgPSB7Ci19Ci1maWVsZC5fZWxlbWRpY3QgPSB7Ci19Ci1zZXR0aW5nLl9wcm9wZGljdCA9IHsKLX0KLXNldHRpbmcuX2VsZW1kaWN0ID0gewotfQotX0VudW1fZVN0YSA9IHsKLQkndW5yZWFkJyA6ICdldVNcMDAxJywJIyBoYXMgbm90IGJlZW4gcmVhZAotCSdhbHJlYWR5X3JlYWQnIDogJ2V1U1wwMDInLAkjIGhhcyBiZWVuIHJlYWQKLQkncmVwbGllZCcgOiAnZXVTXDAwMycsCSMgaGFzIGJlZW4gcmVwbGllZCB0bwotCSdmb3J3YXJkZWQnIDogJ2V1U1wwMTAnLAkjIGhhcyBiZWVuIGZvcndhcmRlZAotCSdyZWRpcmVjdGVkJyA6ICdldVNcMDA0JywJIyBoYXMgYmVlbiByZWRpcmVjdGVkCi0JJ25vdF9zZW5kYWJsZScgOiAnZXVTXDAwNScsCSMgY2Fubm90IGJlIHNlbnQKLQknc2VuZGFibGUnIDogJ2V1U1wwMDYnLAkjIGNhbiBiZSBzZW50Ci0JJ3F1ZXVlZCcgOiAnZXVTXDAwNycsCSMgcXVldWVkIGZvciBkZWxpdmVyeQotCSdzZW50JyA6ICdldVNcMDExJywJIyBoYXMgYmVlbiBzZW50Ci0JJ25ldmVyX3NlbnQnIDogJ2V1U1wwMTInLAkjIG5ldmVyIHdhcyBzZW50Ci19Ci0KLV9FbnVtX2VTaWcgPSB7Ci0JJ25vbmUnIDogJ3NpZ1wwMDAnLAkjIG5vIHNpZ25hdHVyZQotCSdzdGFuZGFyZCcgOiAnc2lnXDAwMScsCSMgc3RhbmRhcmQgc2lnbmF0dXJlIGZpbGUKLQknYWx0ZXJuYXRlJyA6ICdzaWdcMDAyJywJIyBhbHRlcm5hdGUgc2lnbmF0dXJlIGZpbGUKLX0KLQotX0VudW1fZUF0eSA9IHsKLQknQXBwbGVEb3VibGUnIDogJ2F0Y1wwMDAnLAkjIEFwcGxlRG91YmxlIGZvcm1hdAotCSdBcHBsZVNpbmdsZScgOiAnYXRjXDAwMScsCSMgQXBwbGVTaW5nbGUgZm9ybWF0Ci0JJ0JpbkhleCcgOiAnYXRjXDAwMicsCSMgQmluSGV4IGZvcm1hdAotCSd1dWVuY29kZScgOiAnYXRjXDAwMycsCSMgdXVlbmNvZGUgZm9ybWF0Ci19Ci0KLV9FbnVtX2VOb3QgPSB7Ci0JJ21haWxfYXJyaXZlcycgOiAnd0FydicsCSMgbWFpbCBhcnJpdmFsCi0JJ21haWxfc2VudCcgOiAnd1NudCcsCSMgbWFpbCBoYXMgYmVlbiBzZW50Ci0JJ3dpbGxfY29ubmVjdCcgOiAnd1dDbicsCSMgZXVkb3JhIGlzIGFib3V0IHRvIGNvbm5lY3QgdG8gYSBtYWlsIHNlcnZlcgotCSdoYXNfY29ubmVjdGVkJyA6ICd3SENuJywJIyBldWRvcmEgaGFzIGZpbmlzaGVkIHRhbGtpbmcgdG8gYSBtYWlsIHNlcnZlcgotCSdoYXNfbWFudWFsbHlfZmlsdGVyZWQnIDogJ21GaWwnLAkjIGV1ZG9yYSBoYXMgZmluaXNoZWQgbWFudWFsbHkgZmlsdGVyaW5nIG1lc3NhZ2VzCi0JJ29wZW5zX2ZpbHRlcnMnIDogJ3dGaWwnLAkjIHVzZXIgaGFzIHJlcXVlc3RlZCBFdWRvcmEgb3BlbiB0aGUgZmlsdGVyIHdpbmRvdwotfQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotCSdldU1CJyA6IG1haWxib3gsCi0JJ2V1TVMnIDogbWVzc2FnZSwKLQknZXVNRicgOiBtYWlsX2ZvbGRlciwKLQknZVByZicgOiBzZXR0aW5nLAotCSdldUZkJyA6IGZpZWxkLAotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLQknZVdGaCcgOiB3aWxsX2JlX2ZldGNoZWQsCi0JJ2V1RGEnIDogZGF0ZSwKLQknZXVTaScgOiBzaXplLAotCSdlUlJSJyA6IHJldHVybl9yZWNlaXB0LAotCSdwbmFtJyA6IG5hbWUsCi0JJ2V1U2UnIDogc2VuZGVyLAotCSdlV3JwJyA6IHdyYXAsCi0JJ2VTaWcnIDogc2lnbmF0dXJlLAotCSdldU91JyA6IG91dGdvaW5nLAotCSdlTVFQJyA6IFFQLAotCSdlVEZTJyA6IHRvY19sb2NhdGlvbiwKLQknZVdEbCcgOiB3aWxsX2JlX2RlbGV0ZWQsCi0JJ2VMYmwnIDogbGFiZWwsCi0JJ2VBVHknIDogYXR0YWNobWVudF9lbmNvZGluZywKLQknZXVTdScgOiBzdWJqZWN0LAotCSdlQmxhJyA6IHNob3dfYWxsX2hlYWRlcnMsCi0JJ2VDcHknIDoga2VlcF9jb3B5LAotCSdldVdTJyA6IHNwYWNlX3dhc3RlZCwKLQknZUJvZCcgOiBib2R5LAotCSdldU5TJyA6IHNwYWNlX3JlcXVpcmVkLAotCSdlVGFiJyA6IHRhYl9leHBhbnNpb24sCi0JJ2VUYmwnIDogdHJhbnNsaXRlcmF0aW9uX3RhYmxlLAotCSdlWFRYJyA6IHByZXNlcnZlX21hY2ludG9zaF9pbmZvLAotCSdldUZTJyA6IGxvY2F0aW9uLAotCSdldVNUJyA6IHN0YXR1cywKLQknZXVQWScgOiBwcmlvcml0eSwKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotCSdlQXR5JyA6IF9FbnVtX2VBdHksCi0JJ2VOb3QnIDogX0VudW1fZU5vdCwKLQknZVN0YScgOiBfRW51bV9lU3RhLAotCSdlU2lnJyA6IF9FbnVtX2VTaWcsCi19CmRpZmYgLS1naXQgYS9NYWMvRGVtby9zY3JpcHRpbmcvU3RhbmRhcmRfU3VpdGUucHkgYi9NYWMvRGVtby9zY3JpcHRpbmcvU3RhbmRhcmRfU3VpdGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNWJhYWQuLjAwMDAwMDAKLS0tIGEvTWFjL0RlbW8vc2NyaXB0aW5nL1N0YW5kYXJkX1N1aXRlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjcyICswLDAgQEAKLSIiIlN1aXRlIFN0YW5kYXJkIFN1aXRlOiBDb21tb24gdGVybXMgZm9yIG1vc3QgYXBwbGljYXRpb25zCi1MZXZlbCAxLCB2ZXJzaW9uIDEKLQotR2VuZXJhdGVkIGZyb20gZmxhcDpQcm9ncmFtbWEnczpFdWRvcmEgTGlnaHQKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDIvMTYsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdDb1JlJwotCi1jbGFzcyBTdGFuZGFyZF9TdWl0ZToKLQotCWRlZiBjbG9zZShzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLQkJIiIiY2xvc2U6IENsb3NlIGFuIG9iamVjdAotCQlSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB0byBjbG9zZQotCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0JCSIiIgotCQlfY29kZSA9ICdjb3JlJwotCQlfc3ViY29kZSA9ICdjbG9zJwotCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCi0JCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLQkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLQkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCV9hcmdtYXBfY291bnQgPSB7Ci0JCSdlYWNoJyA6ICdrb2NsJywKLQl9Ci0KLQlkZWYgY291bnQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0JCSIiImNvdW50OiBSZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyBvZiBhIHBhcnRpY3VsYXIgY2xhc3Mgd2l0aGluIGFuIG9iamVjdAotCQlSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB3aG9zZSBlbGVtZW50cyBhcmUgdG8gYmUgY291bnRlZAotCQlLZXl3b3JkIGFyZ3VtZW50IGVhY2g6IHRoZSBjbGFzcyBvZiB0aGUgZWxlbWVudHMgdG8gYmUgY291bnRlZC4gS2V5d29yZCAnZWFjaCcgaXMgb3B0aW9uYWwgaW4gQXBwbGVTY3JpcHQKLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQlSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCi0JCSIiIgotCQlfY29kZSA9ICdjb3JlJwotCQlfc3ViY29kZSA9ICdjbnRlJwotCi0JCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX2NvdW50KQotCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLQkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6Ci0JCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0JCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0JCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQlkZWYgZXhpc3RzKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJleGlzdHM6IFZlcmlmeSBpZiBhbiBvYmplY3QgZXhpc3RzCi0JCVJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IGluIHF1ZXN0aW9uCi0JCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLQkJUmV0dXJuczogdHJ1ZSBpZiBpdCBleGlzdHMsIGZhbHNlIGlmIG5vdAotCQkiIiIKLQkJX2NvZGUgPSAnY29yZScKLQkJX3N1YmNvZGUgPSAnZG9leCcKLQotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwotCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLQkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6Ci0JCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0JCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0JCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQlkZWYgZ2V0KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJnZXQ6IEdldCB0aGUgZGF0YSBmb3IgYW4gb2JqZWN0Ci0JCVJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IHdob3NlIGRhdGEgaXMgdG8gYmUgcmV0dXJuZWQKLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQlSZXR1cm5zOiB0aGUgZGF0YSBmcm9tIHRoZSBvYmplY3QKLQkJIiIiCi0JCV9jb2RlID0gJ2NvcmUnCi0JCV9zdWJjb2RlID0gJ2dldGQnCi0KLQkJaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yLCAnTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcKLQkJX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLQkJX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0JCQkJX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnZXJybicpOgotCQkJcmFpc2UgYWV0b29scy5FcnJvciwgYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKQotCQkjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0JCWlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotCQkJcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0JX2FyZ21hcF9tYWtlID0gewotCQknbmV3JyA6ICdrb2NsJywKLQkJJ2F0JyA6ICdpbnNoJywKLQl9Ci0KLQlkZWYgbWFrZShzZWxmLCBfbm9fb2JqZWN0PU5vbmUsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJtYWtlOiBNYWtlIGEgbmV3IGVsZW1lbnQKLQkJS2V5d29yZCBhcmd1bWVudCBuZXc6IHRoZSBjbGFzcyBvZiB0aGUgbmV3IGVsZW1lbnQuIEtleXdvcmQgJ25ldycgaXMgb3B0aW9uYWwgaW4gQXBwbGVTY3JpcHQKLQkJS2V5d29yZCBhcmd1bWVudCBhdDogdGhlIGxvY2F0aW9uIGF0IHdoaWNoIHRvIGluc2VydCB0aGUgZWxlbWVudAotCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0JCVJldHVybnM6IHRvIHRoZSBuZXcgb2JqZWN0Ci0JCSIiIgotCQlfY29kZSA9ICdjb3JlJwotCQlfc3ViY29kZSA9ICdjcmVsJwotCi0JCWFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX21ha2UpCi0JCWlmIF9ub19vYmplY3QgIT0gTm9uZTogcmFpc2UgVHlwZUVycm9yLCAnTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcKLQotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLQkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLQkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCV9hcmdtYXBfbW92ZSA9IHsKLQkJJ3RvJyA6ICdpbnNoJywKLQl9Ci0KLQlkZWYgbW92ZShzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLQkJIiIibW92ZTogTW92ZSBvYmplY3QgdG8gYSBuZXcgbG9jYXRpb24KLQkJUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3QgdG8gbW92ZQotCQlLZXl3b3JkIGFyZ3VtZW50IHRvOiB0aGUgbmV3IGxvY2F0aW9uIGZvciB0aGUgb2JqZWN0Ci0JCUtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLQkJUmV0dXJuczogdG8gdGhlIG9iamVjdCBhZnRlciB0aGV5IGhhdmUgYmVlbiBtb3ZlZAotCQkiIiIKLQkJX2NvZGUgPSAnY29yZScKLQkJX3N1YmNvZGUgPSAnbW92ZScKLQotCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9tb3ZlKQotCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLQkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6Ci0JCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0JCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0JCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQlfYXJnbWFwX2R1cGxpY2F0ZSA9IHsKLQkJJ3RvJyA6ICdpbnNoJywKLQl9Ci0KLQlkZWYgZHVwbGljYXRlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJkdXBsaWNhdGU6IE1ha2UgYSBkdXBsaWNhdGUgb2JqZWN0Ci0JCVJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IHRvIG1vdmUKLQkJS2V5d29yZCBhcmd1bWVudCB0bzogdGhlIG5ldyBsb2NhdGlvbiBmb3IgdGhlIG9iamVjdAotCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0JCVJldHVybnM6IHRvIHRoZSBvYmplY3QgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gbW92ZWQKLQkJIiIiCi0JCV9jb2RlID0gJ2NvcmUnCi0JCV9zdWJjb2RlID0gJ2Nsb24nCi0KLQkJYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfZHVwbGljYXRlKQotCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLQkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6Ci0JCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0JCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0JCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQlkZWYgb3BlbihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLQkJIiIib3BlbjogT3BlbiB0aGUgc3BlY2lmaWVkIG9iamVjdAotCQlSZXF1aXJlZCBhcmd1bWVudDogbGlzdCBvZiBvYmplY3RzIHRvIG9wZW4KLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQkiIiIKLQkJX2NvZGUgPSAnYWV2dCcKLQkJX3N1YmNvZGUgPSAnb2RvYycKLQotCQlpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IsICdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJwotCQlfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotCQlfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLQkJCQlfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCdlcnJuJyk6Ci0JCQlyYWlzZSBhZXRvb2xzLkVycm9yLCBhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpCi0JCSMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLQkJaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0JCQlyZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQlkZWYgX3ByaW50KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJwcmludDogUHJpbnQgdGhlIHNwZWNpZmllZCBtZXNzYWdlCi0JCVJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgbWVzc2FnZSB0byBwcmludAotCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0JCSIiIgotCQlfY29kZSA9ICdhZXZ0JwotCQlfc3ViY29kZSA9ICdwZG9jJwotCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCi0JCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLQkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLQkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCWRlZiBzYXZlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotCQkiIiJzYXZlOiBTYXZlIGFuIG9iamVjdAotCQlSZXF1aXJlZCBhcmd1bWVudDogdGhlIGNvbXBvc2l0aW9uIG1lc3NhZ2UgdG8gc2F2ZQotCQlLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0JCSIiIgotCQlfY29kZSA9ICdjb3JlJwotCQlfc3ViY29kZSA9ICdzYXZlJwotCi0JCWlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvciwgJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnCi0JCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLQkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLQkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCV9hcmdtYXBfc2V0ID0gewotCQkndG8nIDogJ2RhdGEnLAotCX0KLQotCWRlZiBzZXQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0JCSIiInNldDogU2V0IGFuIG9iamVjdCdzIGRhdGEKLQkJUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3QgdG8gY2hhbmdlCi0JCUtleXdvcmQgYXJndW1lbnQgdG86IHRoZSBuZXcgdmFsdWUKLQkJS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotCQkiIiIKLQkJX2NvZGUgPSAnY29yZScKLQkJX3N1YmNvZGUgPSAnc2V0ZCcKLQotCQlhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zZXQpCi0JCV9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0JCV9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotCQkJCV9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJ2Vycm4nKToKLQkJCXJhaXNlIGFldG9vbHMuRXJyb3IsIGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykKLQkJIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotCQlpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLQkJCXJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCi0jICAgIENsYXNzICdhcHBsaWNhdGlvbicgKCdjYXBwJykgLS0gJ0FuIGFwcGxpY2F0aW9uIHByb2dyYW0nCi0jICAgICAgICBwcm9wZXJ0eSAndmVyc2lvbicgKCd2ZXJzJykgJ2l0eHQnIC0tICd0aGUgdmVyc2lvbiBudW1iZXInIFtdCi0jICAgICAgICBwcm9wZXJ0eSAnc2VsZWN0ZWQgdGV4dCcgKCdlU3R4JykgJ1RFWFQnIC0tICd0aGUgdGV4dCBvZiB0aGUgdXNlclwzMjVzIGN1cnJlbnQgc2VsZWN0aW9uJyBbXQotIyAgICAgICAgZWxlbWVudCAnZXVNRicgYXMgWydpbmR4JywgJ25hbWUnXQotIyAgICAgICAgZWxlbWVudCAnZVByZicgYXMgWydpbmR4J10KZGlmZiAtLWdpdCBhL01hYy9EZW1vL3NjcmlwdGluZy90ZXN0ZXVkb3JhLnB5IGIvTWFjL0RlbW8vc2NyaXB0aW5nL3Rlc3RldWRvcmEucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZGNlNDQuLjAwMDAwMDAKLS0tIGEvTWFjL0RlbW8vc2NyaXB0aW5nL3Rlc3RldWRvcmEucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0iIiJBIHRlc3QgcHJvZ3JhbSB0aGF0IGFsbG93cyB1cyB0byBjb250cm9sIEV1ZG9yYSIiIgotCi1pbXBvcnQgc3lzCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IEV1ZG9yYV9TdWl0ZQotaW1wb3J0IFJlcXVpcmVkX1N1aXRlCi1pbXBvcnQgU3RhbmRhcmRfU3VpdGUKLWltcG9ydCBNYWNPUwotCi1jbGFzcyBFdWRvcmEoRXVkb3JhX1N1aXRlLkV1ZG9yYV9TdWl0ZSwgUmVxdWlyZWRfU3VpdGUuUmVxdWlyZWRfU3VpdGUsIFwKLQkJCQlTdGFuZGFyZF9TdWl0ZS5TdGFuZGFyZF9TdWl0ZSwgYWV0b29scy5UYWxrVG8pOgotCSIiIkEgY2xhc3MgdGhhdCBjYW4gdGFsayB0byBFdWRvcmEiIiIKLQlwYXNzCi0JCi0jIFRoZSBDcmVhdG9yIHNpZ25hdHVyZSBvZiBldWRvcmE6Ci1TSUdOQVRVUkU9IkNTT20iCi0KLWRlZiBtYWluKCk6Ci0JdGFsa2VyID0gRXVkb3JhKFNJR05BVFVSRSwgc3RhcnQ9MSkKLQl3aGlsZSAxOgotCQlwcmludCAnZ2V0LCBwdXQsIG5hbWUgKG9mIGZpcnN0IGZvbGRlciksIGxpc3QgKGZvbGRlcm5hbWVzKSwgcXVpdCAoZXVkb3JhKSBvciBleGl0ICh0aGlzIHByb2dyYW0pID8nCi0JCWxpbmUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKQotCQl0cnk6Ci0JCQlpZiBsaW5lWzBdID09ICdnJzoKLQkJCQl0YWxrZXIuY29ubmVjdChjaGVja2luZz0xKQotCQkJZWxpZiBsaW5lWzBdID09ICdwJzoKLQkJCQl0YWxrZXIuY29ubmVjdChzZW5kaW5nPTEpCi0JCQllbGlmIGxpbmVbMF0gPT0gJ24nOgotCQkJCWlkID0gRXVkb3JhX1N1aXRlLm1haWxib3goMSkubmFtZQotCQkJCW5hbWUgPSB0YWxrZXIuX2dldChpZCwgYXM9J3RleHQnKQotCQkJCXByaW50ICJJdCBpcyBjYWxsZWQiLCBuYW1lCi0JCQllbGlmIGxpbmVbMF0gPT0gJ2wnOgotCQkJCXBhc3MKLQkJCWVsaWYgbGluZVswXSA9PSAncSc6Ci0JCQkJdGFsa2VyLnF1aXQoKQotCQkJZWxpZiBsaW5lWzBdID09ICdlJzoKLQkJCQlicmVhawotCQlleGNlcHQgTWFjT1MuRXJyb3IsIGFyZzoKLQkJCWlmIGFyZ1swXSA9PSAtNjA5OgotCQkJCXByaW50ICdDb25uZWN0aW9uIGludmFsaWQsIGlzIGV1ZG9yYSBydW5uaW5nPycKLQkJCWVsc2U6Ci0JCQkJcHJpbnQgJ01hY09TIEVycm9yOicsIGFyZ1sxXQotCQlleGNlcHQgYWV0b29scy5FcnJvciwgYXJnOgotCQkJcHJpbnQgJ0V1ZG9yYSByZXR1cm5lZCBlcnJvcjonLCBhcmcKLQkJCQotbWFpbigpCg==