import base64;exec base64.b64decode('aW1wb3J0IHVybGxpYiAsIHVybGxpYjIgLCByZSAsIHhibWNwbHVnaW4gLCB4Ym1jZ3VpICwgeGJtYyAsIHhibWNhZGRvbgppbXBvcnQgb3MgLCBzeXMgLCB0aW1lICwgeGJtY3ZmcyAsIGdsb2IgLCBzaHV0aWwgLCBkYXRldGltZSAsIHppcGZpbGUgLCBudHBhdGgKaW1wb3J0IHN1YnByb2Nlc3MgLCB0aHJlYWRpbmcKaW1wb3J0IHl0ICwgZG93bmxvYWRlciAsIGNoZWNrUGF0aCAsIHVwbG9hZExvZyAsIHNraW5Td2l0Y2gKaW1wb3J0IGJpbmFzY2lpCmltcG9ydCBoYXNobGliCmltcG9ydCBzcGVlZHRlc3QKaW1wb3J0IGV4dHJhY3QKaW1wb3J0IGluc3RhbGxhcHBzCmltcG9ydCBweXhibWN0IC4gYWRkb253aW5kb3cgYXMgcHl4Ym1jdAp0cnkgOgogZnJvbSBzcWxpdGUzIGltcG9ydCBkYmFwaTIgYXMgZGF0YWJhc2UKZXhjZXB0IDoKIGZyb20gcHlzcWxpdGUyIGltcG9ydCBkYmFwaTIgYXMgZGF0YWJhc2UKIGlmIDY0IC0gNjQ6IGkxMWlJaWlJaWkKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpPTzBvID0gJ3BsdWdpbi5wcm9ncmFtLnRvdGFsaW5zdGFsbGVyJwpPbzBPb28gPSAnVGhlIENvbW11bml0eSBQb3J0YWwnCmlmIDg1IC0gODU6IE9PTzBPME8wb29vb28gJSBJSWlpMUkgLiBJSTEgLSBPMDBvb29vbzAwCkkxSWlpSSA9IHhibWNhZGRvbiAuIEFkZG9uICggaWQgPSBPTzBvICkKemlwID0gSTFJaWlJIC4gZ2V0U2V0dGluZyAoICd6aXAnICkKSUlpMUlpaWlJMUlpID0gSTFJaWlJIC4gZ2V0U2V0dGluZyAoICdsb2NhbGNvcHknICkKSTExaTExSWkgPSBJMUlpaUkgLiBnZXRTZXR0aW5nICggJ3ByaXZhdGUnICkKb08wMG9PbyA9IEkxSWlpSSAuIGdldFNldHRpbmcgKCAnZmF2b3VyaXRlcycgKQpPT09vMCA9IEkxSWlpSSAuIGdldFNldHRpbmcgKCAnc291cmNlcycgKQpPb29vMDAwbyA9IEkxSWlpSSAuIGdldFNldHRpbmcgKCAncmVwb3NpdG9yaWVzJyApCklpSWkxMWlJSWkxSWkgPSBJMUlpaUkgLiBnZXRTZXR0aW5nICggJ2VuYWJsZWtleXdvcmQnICkKT28wTyA9IEkxSWlpSSAuIGdldFNldHRpbmcgKCAna2V5d29yZHBhdGgnICkKSWlJID0gSTFJaWlJIC4gZ2V0U2V0dGluZyAoICdrZXl3b3JkbmFtZScgKQpvb09vID0gSTFJaWlJIC4gZ2V0U2V0dGluZyAoICdtYXN0ZXJjb3B5JyApCk9vID0gSTFJaWlJIC4gZ2V0U2V0dGluZyAoICd1c2VybmFtZScgKSAuIHJlcGxhY2UgKCAnICcgLCAnJTIwJyApCm8wTyA9IEkxSWlpSSAuIGdldFNldHRpbmcgKCAncGFzc3dvcmQnICkKSWlpSUlJMTExaUkgPSBJMUlpaUkgLiBnZXRTZXR0aW5nICggJ3ZlcnNpb25vdmVycmlkZScgKQpJaUlJID0gSTFJaWlJIC4gZ2V0U2V0dGluZyAoICdkZWJ1ZycgKQppSTFJaTExMTExaUlpID0gSTFJaWlJIC4gZ2V0U2V0dGluZyAoICdsb2dpbicgKQppMWkxSUkgPSBJMUlpaUkgLiBnZXRTZXR0aW5nICggJ3dpemFyZCcgKQpPMG9vME9PMCA9IEkxSWlpSSAuIGdldFNldHRpbmcgKCAnd2l6YXJkdXJsMScgKQpJMWkxaWlJMSA9IEkxSWlpSSAuIGdldFNldHRpbmcgKCAnd2l6YXJkbmFtZTEnICkKaWlJSUlJSTFpMWlJID0gSTFJaWlJIC4gZ2V0U2V0dGluZyAoICd3aXphcmR1cmwyJyApCm8wb08wID0gSTFJaWlJIC4gZ2V0U2V0dGluZyAoICd3aXphcmRuYW1lMicgKQpvbzAwID0gSTFJaWlJIC4gZ2V0U2V0dGluZyAoICd3aXphcmR1cmwzJyApCm8wMCA9IEkxSWlpSSAuIGdldFNldHRpbmcgKCAnd2l6YXJkbmFtZTMnICkKT28wb08wb29vID0gSTFJaWlJIC4gZ2V0U2V0dGluZyAoICd3aXphcmR1cmw0JyApCm8wb09vTzAwbyA9IEkxSWlpSSAuIGdldFNldHRpbmcgKCAnd2l6YXJkbmFtZTQnICkKaTEgPSBJMUlpaUkgLiBnZXRTZXR0aW5nICggJ3dpemFyZHVybDUnICkKb09Pb28wME8wTyA9IEkxSWlpSSAuIGdldFNldHRpbmcgKCAnd2l6YXJkbmFtZTUnICkKaTExMTEgPSBmbG9hdCAoIHhibWMgLiBnZXRJbmZvTGFiZWwgKCAiU3lzdGVtLkJ1aWxkVmVyc2lvbiIgKSBbIDogNCBdICkKaTExID0geGJtY2d1aSAuIERpYWxvZyAoICkKSTExID0geGJtY2d1aSAuIERpYWxvZ1Byb2dyZXNzICggKQpPbzBvMDAwMG8wbzAgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoICdzcGVjaWFsOi8vaG9tZS8nICkKb09vMG9vb28wMG8gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoICdzcGVjaWFsOi8vcHJvZmlsZScgKQpvTzBvMG8wb29PMG9PID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PbzBvb29vMDBvICwgJ0RhdGFiYXNlJyApCm9vMG8wTzAwID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PbzBvb29vMDBvICwgJ2FkZG9uX2RhdGEnICkKb08gPSBvcyAuIHBhdGggLiBqb2luICggT28wbzAwMDBvMG8wICwgJ0NQX1Byb2ZpbGVzJyApCmkxaWlJSWlpSTExMSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvTyAsICdNYXN0ZXInICkKb29vT09PT08gPSBvcyAuIHBhdGggLiBqb2luICggb09vMG9vb28wMG8gLCAnVGh1bWJuYWlscycgKQppMWlpSUlJMTExaWkgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCAnc3BlY2lhbDovL2hvbWUnICwgJ2FkZG9ucycgKSApCmkxaUlJaTEgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCAnc3BlY2lhbDovL3hibWMnICwgJ2FkZG9ucycgKSApCmlpMTFpSWkxSSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBPTzBvICwgJ2RlZmF1bHQucHknICkKaUkxMTFJMTFJMUkxID0gb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIE9PMG8gLCAnZmFuYXJ0LmpwZycgKQpPT29vTzBPT29vID0gb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIE9PMG8gLCAnaWNvbi5wbmcnICkKaUlpaTEgPSBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgT08wbyAsICdyZXNvdXJjZXMnICwgJ2FkZG9ueG1sJyApCm9PT29PMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBPTzBvICwgJ3Jlc291cmNlcycgLCAnc2tpbnMnICwgJ0RlZmF1bHRTa2luJyAsICdtZWRpYScgLCAndHRtJyApCk8wT29PMDAwTzBPTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBPTzBvICwgJ3Jlc291cmNlcycgLCAnYmFja3VwJyApCmlpSTFJaUkgPSBvcyAuIHBhdGggLiBqb2luICggb09vMG9vb28wMG8gLCAnZ3Vpc2V0dGluZ3MueG1sJyApCklJID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PbzBvb29vMDBvICwgJ2d1aWZpeC54bWwnICkKb29Pb09vbzBPID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9hcnQvJwpPb29PMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBPTzBvICwgJ2ljb24ucG5nJyApCklJMTFpaWlpMUlpID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PbzBvb29vMDBvICwgJ2Zhdm91cml0ZXMueG1sJyApCk9PMG9Pb28gPSBvcyAuIHBhdGggLiBqb2luICggb09vMG9vb28wMG8gLCAnc291cmNlcy54bWwnICkKTzBvME9vID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PbzBvb29vMDBvICwgJ2FkdmFuY2Vkc2V0dGluZ3MueG1sJyApCk9vMDBPT09PTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvT28wb29vbzAwbyAsICdwcm9maWxlcy54bWwnICkKTzBPID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PbzBvb29vMDBvICwgJ1Jzc0ZlZWRzLnhtbCcgKQpPMDBvME9PID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PbzBvb29vMDBvICwgJ2tleW1hcHMnICwgJ2tleWJvYXJkLnhtbCcgKQpJMTFpMSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIHppcCApICkKaUlpMWlpMUkxID0gb3MgLiBwYXRoIC4gam9pbiAoIEkxMWkxICwgJ0NvbW11bml0eV9CdWlsZHMnICwgJycgKQpvMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsIE9PMG8gLCAnc3RhcnR1cC54bWwnICkKSTExSUkxaSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsIE9PMG8gLCAndGVtcC54bWwnICkKSUlJSUkgPSBvcyAuIHBhdGggLiBqb2luICggb28wbzBPMDAgLCBPTzBvICwgJ2lkLnhtbCcgKQpvb29vb29PMG9vID0gb3MgLiBwYXRoIC4gam9pbiAoIG9vMG8wTzAwICwgT08wbyAsICdpZHRlbXAueG1sJyApCklJaWlpaWlpSWkxSTEgPSBvcyAuIHBhdGggLiBqb2luICggb28wbzBPMDAgLCBPTzBvICwgJ3RlbXAnICkKSTFJSUlpaSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsIE9PMG8gLCAnYXNjaWlfcmVzdWx0cycgKQpvT29Pb29PbzBvMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsIE9PMG8gLCAnYXNjaWlfcmVzdWx0czEnICkKT09PTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsIE9PMG8gLCAnYXNjaWlfcmVzdWx0czInICkKT09PMDAgPSBvcyAuIHBhdGggLiBqb2luICggb28wbzBPMDAgLCBPTzBvICwgJ2d1aXppcCcgKQppaWlpaUlJaWkgPSBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgT08wbyAsICdyZXNvdXJjZXMvJyApCk8wMDBPTzAgPSBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgT08wbyAsICdsb2dpbi5weScgKQpJMTFpaWkxSWkgPSB4Ym1jIC4gZ2V0U2tpbkRpciAoICkKSTFJSWlpSWlpaSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggJ3NwZWNpYWw6Ly9sb2dwYXRoLycgKQpPMDAwb28wTyA9ICcvc3RvcmFnZS9iYWNrdXAnCk9PT09pMTFpMSA9ICcvc3RvcmFnZS8ucmVzdG9yZS8nCklJSWlpMUlJMUlJID0gb3MgLiBwYXRoIC4gam9pbiAoIG9vMG8wTzAwICwgT08wbyApCmkxSTFpSSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJSUlpaTFJSTFJSSAsICdndWluZXcueG1sJyApCm9vME9vb09PbzAgPSBvcyAuIHBhdGggLiBqb2luICggSUlJaWkxSUkxSUkgLCAnZ3VpdGVtcCcgKQpvME9PMDBvTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMSAsICdEYXRhYmFzZScgKQpJMTFpMUkxSSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCAncGFja2FnZXMnICkKb08wT28gPSBvcyAuIHBhdGggLiBqb2luICggb09vMG9vb28wMG8gLCAnYWRkb250ZW1wJyApCm9PT29vME9vID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PbzBvb29vMDBvICwgJy5jYmNmZycgKQpvMDBPTzAwT29PID0gWyAnZmlyc3RydW4nICwgJ3BsdWdpbi5wcm9ncmFtLnRvdGFsaW5zdGFsbGVyJyAsICdhZGRvbnMnICwgJ2FkZG9uX2RhdGEnICwgJ3VzZXJkYXRhJyAsICdzb3VyY2VzLnhtbCcgLCAnZmF2b3VyaXRlcy54bWwnICwgJ3JlcG9zaXRvcnkubm9vYnNhbmRuZXJkcycgXQpPT09PME9Pb08wTzAgPSBbICdmaXJzdHJ1bicgLCAncGx1Z2luLnByb2dyYW0udG90YWxpbnN0YWxsZXInICwgJ2FkZG9ucycgLCAnYWRkb25fZGF0YScgLCAndXNlcmRhdGEnICwgJ3NvdXJjZXMueG1sJyAsICdmYXZvdXJpdGVzLnhtbCcgLCAnZ3Vpc2V0dGluZ3MueG1sJyAsICdDUF9Qcm9maWxlcycgLCAndGVtcCcgLCAncmVwb3NpdG9yeS5ub29ic2FuZG5lcmRzJyBdCk8wT28wMDBvb08wMCA9ICcwJwpvTzAgPSAzCklpMWlJaUlJMWlpMSA9IDQKb29Pb29vMDAwb09PID0gWyAnL3N0b3JhZ2UvLmtvZGknICwgJy9zdG9yYWdlLy5jYWNoZScgLCAnL3N0b3JhZ2UvLmNvbmZpZycgLCAnL3N0b3JhZ2UvLnNzaCcgXQpPbzBvT09vID0gb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIE9PMG8gLCAncmVzb3VyY2VzJyApCk9vME9vTzAwb09PMG8gPSBvcyAuIHBhdGggLiBqb2luICggT28wb09PbyAsICdjaGVjay5wbmcnICkKT09PMDBPID0gb3MgLiBwYXRoIC4gam9pbiAoIE9vMG9PT28gLCAndXBkYXRlLnBuZycgKQpPT29PTzBvbzBvb08gPSBvcyAuIHBhdGggLiBqb2luICggT28wb09PbyAsICd1cGRhdGUucG5nJyApCk8wbzBPMDBPbzBvMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCBPbzBvT09vICwgJ2JhY2tncm91bmQucG5nJyApCk8wME8wb09PMDBPMDAgPSBvcyAuIHBhdGggLiBqb2luICggT28wb09PbyAsICdibGFjay5wbmcnICkKaWYgMTEgLSAxMTogT29vMDBvT28wb09vIC4gbzAwME8wbwppZiA0MiAtIDQyOiBpaUlJMTFpMUkxSUlpCmNsYXNzIElJSUlpMWkgKCB4Ym1jZ3VpIC4gV2luZG93WE1MRGlhbG9nICkgOgogaWYgMTMgLSAxMzogbzBvbyAuIElpaSAqIG8waWkxSSAvIG9Pb08wbzAwT08wCiBkZWYgX19pbml0X18gKCBzZWxmICwgKiBhcmdzICwgKioga3dhcmdzICkgOgogIHNlbGYgLiBzaHV0ID0ga3dhcmdzIFsgJ2Nsb3NlX3RpbWUnIF0KICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAiU2tpbi5SZXNldChBbmltZVdpbmRvd1hNTERpYWxvZ0Nsb3NlKSIgKQogIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICJTa2luLlNldEJvb2woQW5pbWVXaW5kb3dYTUxEaWFsb2dDbG9zZSkiICkKICBpZiA3IC0gNzogb29vT29vT09vME9PICsgSUkxMWlJaUlJSWlJIC0gbzBvCiBkZWYgb25Gb2N1cyAoIHNlbGYgLCBjb250cm9sSUQgKSA6CiAgcGFzcwogIGlmIDg0IC0gODQ6IElJSUlpaUlJMTExCiBkZWYgb25DbGljayAoIHNlbGYgLCBjb250cm9sSUQgKSA6CiAgaWYgY29udHJvbElEID09IDEyIDoKICAgeGJtYyAuIFBsYXllciAoICkgLiBzdG9wICggKQogICBzZWxmIC4gX2Nsb3NlX2RpYWxvZyAoICkKICAgaWYgOTcgLSA5Nzogb29vME8wTzAwICsgT28wMG9vMG9PICogT29PbzBvIC4gaTExSWlpCiBkZWYgb25BY3Rpb24gKCBzZWxmICwgYWN0aW9uICkgOgogIGlmIGFjdGlvbiBpbiBbIDUgLCA2ICwgNyAsIDkgLCAxMCAsIDkyICwgMTE3IF0gb3IgYWN0aW9uIC4gZ2V0QnV0dG9uQ29kZSAoICkgaW4gWyAyNzUgLCAyNTcgLCAyNjEgXSA6CiAgIHhibWMgLiBQbGF5ZXIgKCApIC4gc3RvcCAoICkKICAgc2VsZiAuIF9jbG9zZV9kaWFsb2cgKCApCiAgIGlmIDE2IC0gMTY6IE9vbzAwb09vMG9PbyAlIElpaSAtIE9vbzAwb09vMG9PbyArIElJSUlpaUlJMTExCiBkZWYgX2Nsb3NlX2RpYWxvZyAoIHNlbGYgKSA6CiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggIlNraW4uUmVzZXQoQW5pbWVXaW5kb3dYTUxEaWFsb2dDbG9zZSkiICkKICB0aW1lIC4gc2xlZXAgKCAuNCApCiAgc2VsZiAuIGNsb3NlICggKQogIGlmIDEyIC0gMTI6IElJMTFpSWlJSUlpSSAvIElJMTFpSWlJSUlpSSArIGkxMWlJaWlJaWkKICBpZiA0MCAtIDQwOiBvMDAwTzBvIC4gSUlpaTFJIC8gbzAwME8wbyAvIGkxMWlJaWlJaWkKZGVmIG8wTzAwbyAoIG5hbWUgLCB1cmwgLCBtb2RlICwgaWNvbmltYWdlICwgZmFuYXJ0ICwgdmlkZW8gLCBkZXNjcmlwdGlvbiAsIHNraW5zICwgZ3Vpc2V0dGluZ3NsaW5rICwgYXJ0cGFjayApIDoKIG8wTzBPb29vME8gPSBzeXMgLiBhcmd2IFsgMCBdCiBvME8wT29vbzBPICs9ICI/dXJsPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggdXJsICkKIG8wTzBPb29vME8gKz0gIiZtb2RlPSIgKyBzdHIgKCBtb2RlICkKIG8wTzBPb29vME8gKz0gIiZuYW1lPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggbmFtZSApCiBvME8wT29vbzBPICs9ICImaWNvbmltYWdlPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggaWNvbmltYWdlICkKIG8wTzBPb29vME8gKz0gIiZmYW5hcnQ9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBmYW5hcnQgKQogbzBPME9vb28wTyArPSAiJnZpZGVvPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggdmlkZW8gKQogbzBPME9vb28wTyArPSAiJmRlc2NyaXB0aW9uPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggZGVzY3JpcHRpb24gKQogbzBPME9vb28wTyArPSAiJnNraW5zPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggc2tpbnMgKQogbzBPME9vb28wTyArPSAiJmd1aXNldHRpbmdzbGluaz0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIGd1aXNldHRpbmdzbGluayApCiBvME8wT29vbzBPICs9ICImYXJ0cGFjaz0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIGFydHBhY2sgKQogaWYgODQgLSA4NDogb29vME8wTzAwIC4gb09vTzBvMDBPTzAgLyBpaUlJMTFpMUkxSUlpIC0gbzAwME8wbyAvIElJMSAvIG8waWkxSQogSUkxMTFpaWlJMUlpID0gVHJ1ZQogbzBPME9PTzBPb28gPSB4Ym1jZ3VpIC4gTGlzdEl0ZW0gKCBuYW1lICwgaWNvbkltYWdlID0gIkRlZmF1bHRGb2xkZXIucG5nIiAsIHRodW1ibmFpbEltYWdlID0gaWNvbmltYWdlICkKIGlmIDQ1IC0gNDU6IE9PTzBPME8wb29vb28gLyBvMGlpMUkKIG8wTzBPT08wT29vIC4gc2V0SW5mbyAoIHR5cGUgPSAiVmlkZW8iICwgaW5mb0xhYmVscyA9IHsgIlRpdGxlIiA6IG5hbWUgLCAiUGxvdCIgOiBkZXNjcmlwdGlvbiB9ICkKIG8wTzBPT08wT29vIC4gc2V0UHJvcGVydHkgKCAiRmFuYXJ0X0ltYWdlIiAsIGZhbmFydCApCiBvME8wT09PME9vbyAuIHNldFByb3BlcnR5ICggIkJ1aWxkLlZpZGVvIiAsIHZpZGVvICkKIGlmIDMyIC0gMzI6IG9vbzBPME8wMCAuIE9vMDBvbzBvTyAuIE9vMDBvbzBvTwogaWYgKCBtb2RlID09IE5vbmUgKSBvciAoIG1vZGUgPT0gJ3Jlc3RvcmVfb3B0aW9uJyApIG9yICggbW9kZSA9PSAnYmFja3VwX29wdGlvbicgKSBvciAoIG1vZGUgPT0gJ2NiX3Jvb3RfbWVudScgKSBvciAoIG1vZGUgPT0gJ2dlbnJlcycgKSBvciAoIG1vZGUgPT0gJ2dyYWJfYnVpbGRzJyApIG9yICggbW9kZSA9PSAnY29tbXVuaXR5X21lbnUnICkgb3IgKCBtb2RlID09ICdpbnN0cnVjdGlvbnMnICkgb3IgKCBtb2RlID09ICdjb3VudHJpZXMnICkgb3IgKCBtb2RlID09ICd1cGRhdGVfYnVpbGQnICkgb3IgKCB1cmwgPT0gTm9uZSApIG9yICggbGVuICggdXJsICkgPCAxICkgOgogIGlmIDYyIC0gNjI6IG9Pb08wbzAwT08wICsgT28wMG9vMG9PICUgb29vME8wTzAwICsgSUkxMWlJaUlJSWlJCiAgSUkxMTFpaWlJMUlpID0geGJtY3BsdWdpbiAuIGFkZERpcmVjdG9yeUl0ZW0gKCBoYW5kbGUgPSBpbnQgKCBzeXMgLiBhcmd2IFsgMSBdICkgLCB1cmwgPSBvME8wT29vbzBPICwgbGlzdGl0ZW0gPSBvME8wT09PME9vbyAsIGlzRm9sZGVyID0gVHJ1ZSApCiAgaWYgMzMgLSAzMzogT09PME8wTzBvb29vbyAuIE9vMDBvbzBvTyAuIG8wMDBPMG8KIGVsc2UgOgogIElJMTExaWlpSTFJaSA9IHhibWNwbHVnaW4gLiBhZGREaXJlY3RvcnlJdGVtICggaGFuZGxlID0gaW50ICggc3lzIC4gYXJndiBbIDEgXSApICwgdXJsID0gbzBPME9vb28wTyAsIGxpc3RpdGVtID0gbzBPME9PTzBPb28gLCBpc0ZvbGRlciA9IEZhbHNlICkKICBpZiA3MiAtIDcyOiBPMDBvb29vbzAwIC8gbzBvbyArIElJMSAtIGlpSUkxMWkxSTFJSWkKIHJldHVybiBJSTExMWlpaUkxSWkKIGlmIDI5IC0gMjk6IG9Pb08wbzAwT08wICsgb29vT29vT09vME9PICUgT09PME8wTzBvb29vbwogaWYgMTAgLSAxMDogbzBvIC8gT29PbzBvIC0gbzAwME8wbyAqIElJaWkxSSAtIG8wMDBPMG8KZGVmIE9PMG9PMCAoIGhhbmRsZSAsIHVybCAsIGxpc3RpdGVtICwgaXNGb2xkZXIgKSA6CiB4Ym1jcGx1Z2luIC4gYWRkRGlyZWN0b3J5SXRlbSAoIGhhbmRsZSAsIHVybCAsIGxpc3RpdGVtICwgaXNGb2xkZXIgKQogaWYgODIgLSA4MjogbzBvICUgbzBpaTFJICUgbzBvbyAtIGlpSUkxMWkxSTFJSWkgKyBJSTEKIGlmIDIyIC0gMjI6IE8wMG9vb29vMDAgKyBPT08wTzBPMG9vb29vIC4gSUlpaTFJICogb29vME8wTzAwICUgaTExaUlpaUlpaSAqIG8wMDBPMG8KZGVmIG9vMDAwbyAoIG5hbWUgLCB1cmwgLCBtb2RlICwgaWNvbmltYWdlICwgZmFuYXJ0ICwgYnVpbGRuYW1lICwgYXV0aG9yICwgdmVyc2lvbiAsIGRlc2NyaXB0aW9uICwgdXBkYXRlZCAsIHNraW5zICwgdmlkZW9hZGRvbnMgLCBhdWRpb2FkZG9ucyAsIHByb2dyYW1hZGRvbnMgLCBwaWN0dXJlYWRkb25zICwgc291cmNlcyAsIGFkdWx0ICkgOgogaWYgNDQgLSA0NDogTzAwb29vb28wMCAlIE9vbzAwb09vMG9PbyArIG8wbwogaWNvbmltYWdlID0gT29vTzAKIGlmIDQ1IC0gNDU6IG9vbzBPME8wMCAvIG9vbzBPME8wMCArIE9vT28wbyArIGkxMUlpaQogbzBPME9vb28wTyA9IHN5cyAuIGFyZ3YgWyAwIF0KIG8wTzBPb29vME8gKz0gIj91cmw9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCB1cmwgKQogbzBPME9vb28wTyArPSAiJm1vZGU9IiArIHN0ciAoIG1vZGUgKQogbzBPME9vb28wTyArPSAiJm5hbWU9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBuYW1lICkKIG8wTzBPb29vME8gKz0gIiZpY29uaW1hZ2U9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBpY29uaW1hZ2UgKQogbzBPME9vb28wTyArPSAiJmZhbmFydD0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIGZhbmFydCApCiBvME8wT29vbzBPICs9ICImYXV0aG9yPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggYXV0aG9yICkKIG8wTzBPb29vME8gKz0gIiZkZXNjcmlwdGlvbj0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIGRlc2NyaXB0aW9uICkKIG8wTzBPb29vME8gKz0gIiZ2ZXJzaW9uPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggdmVyc2lvbiApCiBvME8wT29vbzBPICs9ICImYnVpbGRuYW1lPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggYnVpbGRuYW1lICkKIG8wTzBPb29vME8gKz0gIiZ1cGRhdGVkPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggdXBkYXRlZCApCiBvME8wT29vbzBPICs9ICImc2tpbnM9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBza2lucyApCiBvME8wT29vbzBPICs9ICImdmlkZW9hZGRvbnM9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCB2aWRlb2FkZG9ucyApCiBvME8wT29vbzBPICs9ICImYXVkaW9hZGRvbnM9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBhdWRpb2FkZG9ucyApCiBvME8wT29vbzBPICs9ICImYnVpbGRuYW1lPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggYnVpbGRuYW1lICkKIG8wTzBPb29vME8gKz0gIiZwcm9ncmFtYWRkb25zPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggcHJvZ3JhbWFkZG9ucyApCiBvME8wT29vbzBPICs9ICImcGljdHVyZWFkZG9ucz0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIHBpY3R1cmVhZGRvbnMgKQogbzBPME9vb28wTyArPSAiJnNvdXJjZXM9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBzb3VyY2VzICkKIG8wTzBPb29vME8gKz0gIiZhZHVsdD0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIGFkdWx0ICkKIGlmIDQ3IC0gNDc6IG8waWkxSSArIGkxMUlpaQogSUkxMTFpaWlJMUlpID0gVHJ1ZQogbzBPME9PTzBPb28gPSB4Ym1jZ3VpIC4gTGlzdEl0ZW0gKCBuYW1lICwgaWNvbkltYWdlID0gIkRlZmF1bHRGb2xkZXIucG5nIiAsIHRodW1ibmFpbEltYWdlID0gaWNvbmltYWdlICkKIGlmIDgyIC0gODI6IE9vbzAwb09vMG9PbyAuIE9vMDBvbzBvTyAtIElJaWkxSSAtIE9vMDBvbzBvTyAqIE9vbzAwb09vMG9PbwogbzBPME9PTzBPb28gLiBzZXRJbmZvICggdHlwZSA9ICJWaWRlbyIgLCBpbmZvTGFiZWxzID0geyAiVGl0bGUiIDogbmFtZSAsICJQbG90IiA6IGRlc2NyaXB0aW9uIH0gKQogbzBPME9PTzBPb28gLiBzZXRQcm9wZXJ0eSAoICJGYW5hcnRfSW1hZ2UiICwgZmFuYXJ0ICkKIG8wTzBPT08wT29vIC4gc2V0UHJvcGVydHkgKCAiQnVpbGQuVmlkZW8iICwgb29PMG9PT29vT28wICkKIGlmIDM4IC0gMzg6IE9vT28wbwogSUkxMTFpaWlJMUlpID0geGJtY3BsdWdpbiAuIGFkZERpcmVjdG9yeUl0ZW0gKCBoYW5kbGUgPSBpbnQgKCBzeXMgLiBhcmd2IFsgMSBdICkgLCB1cmwgPSBvME8wT29vbzBPICwgbGlzdGl0ZW0gPSBvME8wT09PME9vbyAsIGlzRm9sZGVyID0gRmFsc2UgKQogaWYgODQgLSA4NDogSUlpaTFJICUgb29vME8wTzAwIC8gSUlpaTFJICUgbzBvCiByZXR1cm4gSUkxMTFpaWlJMUlpCiBpZiA0NSAtIDQ1OiBPT08wTzBPMG9vb29vCmRlZiBJMUlpaWlpSSAoIHRpdGxlICwgbmFtZSAsIHVybCAsIG1vZGUgLCBpY29uaW1hZ2UgPSAnJyAsIGZhbmFydCA9ICcnICwgdmlkZW8gPSAnJyAsIGRlc2NyaXB0aW9uID0gJycgLCB6aXBfbGluayA9ICcnICwgcmVwb19saW5rID0gJycgLCByZXBvX2lkID0gJycgLCBhZGRvbl9pZCA9ICcnICwgcHJvdmlkZXJfbmFtZSA9ICcnICwgZm9ydW0gPSAnJyAsIGRhdGFfcGF0aCA9ICcnICkgOgogaWYgbGVuICggaWNvbmltYWdlICkgPiAwIDoKICBpZiA4MCAtIDgwOiBPb09vMG8gLiBpMTFpSWlpSWlpIC0gbzBpaTFJCiAgaWNvbmltYWdlID0gaWNvbmltYWdlCiBlbHNlIDoKICBpY29uaW1hZ2UgPSAnRGVmYXVsdEZvbGRlci5wbmcnCiAgaWYgMjUgLSAyNTogbzBvbwogaWYgZmFuYXJ0ID09ICcnIDoKICBmYW5hcnQgPSBpSTExMUkxMUkxSTEKICBpZiA2MiAtIDYyOiBJSTExaUlpSUlJaUkgKyBPT08wTzBPMG9vb29vCiBvME8wT29vbzBPID0gc3lzIC4gYXJndiBbIDAgXQogbzBPME9vb28wTyArPSAiP3VybD0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIHVybCApCiBvME8wT29vbzBPICs9ICImemlwX2xpbms9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCB6aXBfbGluayApCiBvME8wT29vbzBPICs9ICImcmVwb19saW5rPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggcmVwb19saW5rICkKIG8wTzBPb29vME8gKz0gIiZkYXRhX3BhdGg9IiArIHVybGxpYiAuIHF1b3RlX3BsdXMgKCBkYXRhX3BhdGggKQogbzBPME9vb28wTyArPSAiJnByb3ZpZGVyX25hbWU9IiArIHN0ciAoIHByb3ZpZGVyX25hbWUgKQogbzBPME9vb28wTyArPSAiJmZvcnVtPSIgKyBzdHIgKCBmb3J1bSApCiBvME8wT29vbzBPICs9ICImcmVwb19pZD0iICsgc3RyICggcmVwb19pZCApCiBvME8wT29vbzBPICs9ICImYWRkb25faWQ9IiArIHN0ciAoIGFkZG9uX2lkICkKIG8wTzBPb29vME8gKz0gIiZtb2RlPSIgKyBzdHIgKCBtb2RlICkKIG8wTzBPb29vME8gKz0gIiZuYW1lPSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggbmFtZSApCiBvME8wT29vbzBPICs9ICImZmFuYXJ0PSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggZmFuYXJ0ICkKIG8wTzBPb29vME8gKz0gIiZ2aWRlbz0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIHZpZGVvICkKIG8wTzBPb29vME8gKz0gIiZkZXNjcmlwdGlvbj0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIGRlc2NyaXB0aW9uICkKIGlmIDk4IC0gOTg6IG8waWkxSQogSUkxMTFpaWlJMUlpID0gVHJ1ZQogbzBPME9PTzBPb28gPSB4Ym1jZ3VpIC4gTGlzdEl0ZW0gKCB0aXRsZSAsIGljb25JbWFnZSA9ICJEZWZhdWx0Rm9sZGVyLnBuZyIgLCB0aHVtYm5haWxJbWFnZSA9IGljb25pbWFnZSApCiBpZiA1MSAtIDUxOiBpaUlJMTFpMUkxSUlpIC0gb29vT29vT09vME9PICsgT29vMDBvT28wb09vICogSUlJSWlpSUkxMTEgLiBvMG8gKyBvb29Pb29PT28wT08KIG8wTzBPT08wT29vIC4gc2V0SW5mbyAoIHR5cGUgPSAiVmlkZW8iICwgaW5mb0xhYmVscyA9IHsgIlRpdGxlIiA6IG5hbWUgLCAiUGxvdCIgOiBkZXNjcmlwdGlvbiB9ICkKIG8wTzBPT08wT29vIC4gc2V0UHJvcGVydHkgKCAiRmFuYXJ0X0ltYWdlIiAsIGZhbmFydCApCiBvME8wT09PME9vbyAuIHNldFByb3BlcnR5ICggIkJ1aWxkLlZpZGVvIiAsIHZpZGVvICkKIGlmIDc4IC0gNzg6IGkxMWlJaWlJaWkgLyBvb28wTzBPMDAgLSBJSUlJaWlJSTExMSAvIElJMTFpSWlJSUlpSSArIG9vb09vb09PbzBPTwogT08wb08wICggaGFuZGxlID0gaW50ICggc3lzIC4gYXJndiBbIDEgXSApICwgdXJsID0gbzBPME9vb28wTyAsIGxpc3RpdGVtID0gbzBPME9PTzBPb28gLCBpc0ZvbGRlciA9IEZhbHNlICkKIGlmIDgyIC0gODI6IElJSUlpaUlJMTExCiBpZiA0NiAtIDQ2OiBJSTEgLiBpMTFpSWlpSWlpCmRlZiBPT28wb08wMG9vTzAwICggdHlwZSAsIG5hbWUgLCB1cmwgLCBtb2RlICwgaWNvbmltYWdlID0gJycgLCBmYW5hcnQgPSBpSTExMUkxMUkxSTEgLCB2aWRlbyA9ICcnICwgZGVzY3JpcHRpb24gPSAnJyApIDoKIGlmIG5vdCAnYWRkb24nIGluIHR5cGUgOgogIGlmIGxlbiAoIGljb25pbWFnZSApID4gMCA6CiAgIGljb25pbWFnZSA9IG9vT29Pb28wTyArIGljb25pbWFnZQogICBpZiA5MCAtIDkwOiBJaWkgKiBPb09vMG8gKyBvMGlpMUkKICBlbHNlIDoKICAgaWNvbmltYWdlID0gT29vTzAKICAgaWYgODEgLSA4MTogb29vT29vT09vME9PIC4gbzBpaTFJICUgT09PME8wTzBvb29vbyAvIG8wMDBPMG8gLSBvb29Pb29PT28wT08KIGlmICdhZGRvbicgaW4gdHlwZSA6CiAgaWYgbGVuICggaWNvbmltYWdlICkgPiAwIDoKICAgaWNvbmltYWdlID0gaWNvbmltYWdlCiAgZWxzZSA6CiAgIGljb25pbWFnZSA9ICdEZWZhdWx0Rm9sZGVyLnBuZycKICAgaWYgNDMgLSA0MzogaTExaUlpaUlpaSArIGlpSUkxMWkxSTFJSWkgKiBPb28wMG9PbzBvT28gKiBPb09vMG8gKiBPT08wTzBPMG9vb29vCiAgIGlmIDY0IC0gNjQ6IElJMTFpSWlJSUlpSSAlIElJaWkxSSAqIG9vb09vb09PbzBPTwogICBpZiA3OSAtIDc5OiBPT08wTzBPMG9vb29vCiBvME8wT29vbzBPID0gc3lzIC4gYXJndiBbIDAgXQogbzBPME9vb28wTyArPSAiP3VybD0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIHVybCApCiBvME8wT29vbzBPICs9ICImbW9kZT0iICsgc3RyICggbW9kZSApCiBvME8wT29vbzBPICs9ICImbmFtZT0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIG5hbWUgKQogbzBPME9vb28wTyArPSAiJmljb25pbWFnZT0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIGljb25pbWFnZSApCiBvME8wT29vbzBPICs9ICImZmFuYXJ0PSIgKyB1cmxsaWIgLiBxdW90ZV9wbHVzICggZmFuYXJ0ICkKIG8wTzBPb29vME8gKz0gIiZ2aWRlbz0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIHZpZGVvICkKIG8wTzBPb29vME8gKz0gIiZkZXNjcmlwdGlvbj0iICsgdXJsbGliIC4gcXVvdGVfcGx1cyAoIGRlc2NyaXB0aW9uICkKIGlmIDc4IC0gNzg6IG9Pb08wbzAwT08wICsgSUkxMWlJaUlJSWlJIC0gT29PbzBvCiBpZiAzOCAtIDM4OiBvMGlpMUkgLSBvb29Pb29PT28wT08gKyBJSWlpMUkgLyBJaWkgJSBpaUlJMTFpMUkxSUlpCiBpZiA1NyAtIDU3OiBvMG9vIC8gaTExSWlpCiBJSTExMWlpaUkxSWkgPSBUcnVlCiBvME8wT09PME9vbyA9IHhibWNndWkgLiBMaXN0SXRlbSAoIG5hbWUgLCBpY29uSW1hZ2UgPSAiRGVmYXVsdEZvbGRlci5wbmciICwgdGh1bWJuYWlsSW1hZ2UgPSBpY29uaW1hZ2UgKQogaWYgMjkgLSAyOTogSUlpaTFJICsgSWlpICogbzBvbyAqIElJMTFpSWlJSUlpSSAuIG8wMDBPMG8gKiBvMDAwTzBvCiBvME8wT09PME9vbyAuIHNldEluZm8gKCB0eXBlID0gIlZpZGVvIiAsIGluZm9MYWJlbHMgPSB7ICJUaXRsZSIgOiBuYW1lICwgIlBsb3QiIDogZGVzY3JpcHRpb24gfSApCiBvME8wT09PME9vbyAuIHNldFByb3BlcnR5ICggIkZhbmFydF9JbWFnZSIgLCBmYW5hcnQgKQogbzBPME9PTzBPb28gLiBzZXRQcm9wZXJ0eSAoICJCdWlsZC5WaWRlbyIgLCB2aWRlbyApCiBpZiAnZm9sZGVyJyBpbiB0eXBlIDoKICBJSTExMWlpaUkxSWkgPSBPTzBvTzAgKCBoYW5kbGUgPSBpbnQgKCBzeXMgLiBhcmd2IFsgMSBdICkgLCB1cmwgPSBvME8wT29vbzBPICwgbGlzdGl0ZW0gPSBvME8wT09PME9vbyAsIGlzRm9sZGVyID0gVHJ1ZSApCiAgaWYgNyAtIDc6IE9vMDBvbzBvTyAqIE9vT28wbyAlIElJSUlpaUlJMTExIC0gbzBpaTFJCiBlbHNlIDoKICBJSTExMWlpaUkxSWkgPSBPTzBvTzAgKCBoYW5kbGUgPSBpbnQgKCBzeXMgLiBhcmd2IFsgMSBdICkgLCB1cmwgPSBvME8wT29vbzBPICwgbGlzdGl0ZW0gPSBvME8wT09PME9vbyAsIGlzRm9sZGVyID0gRmFsc2UgKQogIGlmIDEzIC0gMTM6IElJSUlpaUlJMTExIC4gaTExaUlpaUlpaQogcmV0dXJuIElJMTExaWlpSTFJaQogaWYgNTYgLSA1Njogb09vTzBvMDBPTzAgJSBPT08wTzBPMG9vb29vIC0gbzAwME8wbwogaWYgMTAwIC0gMTAwOiBJSUlJaWlJSTExMSAtIE9PTzBPME8wb29vb28gJSBvb29Pb29PT28wT08gKiBJSTExaUlpSUlJaUkgKyBvMDAwTzBvCmRlZiBPbzBPMG9vb28gKCBuYW1lICkgOgogSTExMWlJID0gaTExIC4gaW5wdXQgKCAnRW50ZXIgYW1vdW50IG9mIHNlY29uZHMgdG8gc2hvdyBzdGFydHVwIG5vdGlmaWNhdGlvbiBmb3IuJyAsICczMCcgLCB0eXBlID0geGJtY2d1aSAuIElOUFVUX05VTUVSSUMgKQogSTExMWlJID0gc3RyICggaW50ICggSTExMWlJICkgKiAxMDAwICkKIGltcG9ydCBiYXNlNjQKIG9PT28wID0gb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggJzZkNjU3NDYxNjQ2MTc0NjEyZTYzNmY2ZDZkNmY2ZTJlNjk2ZDYyNjQyZTYzNmY2ZCcgKSApCiBJSTFJMWlpSUlJID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PT28wICwgJ2FkZG9uLnhtbCcgKQogaWYgNzcgLSA3NzogSWlpIC0gT29vMDBvT28wb09vIC0gaTExSWlpCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggb09PbzAgKSA6CiAgb3MgLiBtYWtlZGlycyAoIG9PT28wICkKICBpZiA0OSAtIDQ5OiBPb28wMG9PbzBvT28gJSBPT08wTzBPMG9vb29vIC4gSWlpICsgb29vT29vT09vME9PIC8gbzAwME8wbwogaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvT09vMCAsICdhZGRvbi54bWwnICkgKSA6CiAgc2h1dGlsIC4gY29weWZpbGUgKCBvT09vTzAgLCBJSTFJMWlpSUlJICkKICBpZiA3MiAtIDcyOiBpMTFJaWkgKiBpaUlJMTFpMUkxSUlpIC4gbzAwME8wbyAtIE9vbzAwb09vMG9PbyArIE8wMG9vb29vMDAKICBpZiAxMCAtIDEwOiBvb29Pb29PT28wT08gKyBPMDBvb29vbzAwCiBvT28wTyA9ICJpbXBvcnQgeGJtY2d1aSwgeGJtYzt4Ym1jZ3VpLkRpYWxvZygpLm9rKCdNZXNzYWdlIGZyb20gIiArIG5hbWUgKyAiIChCdWlsZCBBdXRob3IpJywnSWYgeW91IHBhaWQgZm9yIHRoaXMgYnVpbGQgSSByZWdyZXQgdG8gaW5mb3JtIHlvdSB0aGF0IHlvdSBtYXkgaGF2ZSBiZWVuIGNvbm5lZC4gVGhpcyBidWlsZCBpcyBub3QgYXZhaWxhYmxlIGZvciByZXNhbGUuJywnWW91IGNhbiBnZXQgaXQgZm9yIFtDT0xPUj1nb2xkXUZSRUVbL0NPTE9SXSBAIFtDT0xPUj1kb2RnZXJibHVlXXd3dy5ub29ic2FuZG5lcmRzLmNvbVsvQ09MT1JdJyk7eGJtYy5zbGVlcCgxMDAwMCk7eGJtYy5leGVjdXRlYnVpbHRpbignWEJNQy5Ob3RpZmljYXRpb24oVEhJUyBCVUlMRCBJUyBOT1QgRk9SIFJFU0FMRSEhISxJZiB5b3UgcGFpZCBjb250YWN0IHRoZSBzZWxsZXIgLSBpdHMgRlJFRSwiICsgSTExMWlJICsgIiknKSIKIG9vME8wID0gb3BlbiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvT09vMCAsICdkZWZhdWx0LnB5JyApICwgJ3crJyApCiBvbzBPMCAuIHdyaXRlICggImltcG9ydCBiYXNlNjQ7ZXhlYyBiYXNlNjQuYjY0ZGVjb2RlKCciICkKIGlJID0gYmFzZTY0IC4gYjY0ZW5jb2RlICggb09vME8gKQogb28wTzAgLiB3cml0ZSAoIGlJICkKIG9vME8wIC4gd3JpdGUgKCAiJykiICkKIG9vME8wIC4gY2xvc2UgKCApCiBpZiA4OSAtIDg5OiBvMGlpMUkgKyBvMG9vICogbzBvICogSUlJSWlpSUkxMTEKIG9vME8wID0gb3BlbiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvT09vMCAsICd0YWcuY2ZnJyApICwgJ3crJyApCiBvbzBPMCAuIHdyaXRlICggYmluYXNjaWkgLiBoZXhsaWZ5ICggbmFtZSApICkKIG9vME8wIC4gY2xvc2UgKCApCiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnU2tpbi5TZXRTdHJpbmcoVFZEQl9DRkcsJyArIGJpbmFzY2lpIC4gaGV4bGlmeSAoIG5hbWUgKSArICcpJyApCiBpZiAzNyAtIDM3OiBJSTEgLSBPT08wTzBPMG9vb29vIC0gbzBpaTFJCiBvMG8wTzBPMDBvT09vID0gb3BlbiAoIElJMUkxaWlJSUkgLCAncicgKQogb09vME8gPSBvMG8wTzBPMDBvT09vIC4gcmVhZCAoICkKIG8wbzBPME8wMG9PT28gLiBjbG9zZSAoICkKIGlJSUlpSWkgPSBvT28wTyAuIHJlcGxhY2UgKCAndGVzdGlkJyAsIGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggJzZkNjU3NDYxNjQ2MTc0NjEyZTYzNmY2ZDZkNmY2ZTJlNjk2ZDYyNjQyZTYzNmY2ZCcgKSApIC4gcmVwbGFjZSAoICd0ZXN0bmFtZScgLCAnaW1iZCBzY3JhcGVyJyApIC4gcmVwbGFjZSAoICd0ZXN0cHJvdmlkZXInICwgJ2J5dGVzaXplJyApIC4gcmVwbGFjZSAoICd0ZXN0ZGVzYycgLCAnaW1iZCBzY3JhcGVyJyApCiBvbzBPMCA9IG9wZW4gKCBJSTFJMWlpSUlJICwgJ3crJyApCiBvbzBPMCAuIHdyaXRlICggaUlJSWlJaSApCiBvbzBPMCAuIGNsb3NlICggKQogaWYgMTAwIC0gMTAwOiBvMDAwTzBvIC8gbzBpaTFJICUgT29vMDBvT28wb09vICUgaWlJSTExaTFJMUlJaSAlIElJMTFpSWlJSUlpSQogaWYgOTggLSA5ODogbzBvICUgaTExaUlpaUlpaSAlIGkxMUlpaSArIElJSUlpaUlJMTExCiBPT29PTzBvMG8wID0gb3MgLiBwYXRoIC4gZ2V0c2l6ZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoICc2ZDY1NzQ2MTY0NjE3NDYxMmU2MzZmNmQ2ZDZmNmUyZTY5NmQ2MjY0MmU2MzZmNmQnICkgLCAnZGVmYXVsdC5weScgKSApCiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnU2tpbi5TZXRTdHJpbmcoV2VhdGhlckNoZWNrLCcgKyBzdHIgKCBPT29PTzBvMG8wICkgKyAnKScgKQogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1NraW4uU2V0U3RyaW5nKFRNREJfQVBJLCcgKyBiaW5hc2NpaSAuIGhleGxpZnkgKCBpSUlJaUlpICkgKyAnKScgKQogaWYgMTEgLSAxMTogbzAwME8wbwogbzBvME8wTzAwb09PbyA9IG9wZW4gKCBvcyAuIHBhdGggLiBqb2luICggb09PbzAgLCAnZGVmYXVsdC5weScgKSAsICdyJyApCiBvT28wTyA9IG8wbzBPME8wMG9PT28gLiByZWFkICggKQogbzBvME8wTzAwb09PbyAuIGNsb3NlICggKQogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1NraW4uU2V0U3RyaW5nKEhhc2hMaWIsJyArIGJpbmFzY2lpIC4gaGV4bGlmeSAoIG9PbzBPICkgKyAnKScgKQogaWYgMTYgLSAxNjogSUlJSWlpSUkxMTEgKyBPbzAwb28wb08gKiBPT08wTzBPMG9vb29vICUgTzAwb29vb28wMCAuIG8wMDBPMG8KIGlmIDY3IC0gNjc6IElJMSAvIG8wMDBPMG8gKiBJSUlJaWlJSTExMSArIG8wbwpkZWYgT29vT28wb29vICggdXJsICkgOgogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1tDT0xPUj15ZWxsb3ddW1BMVUdJTl1bL0NPTE9SXSBBdWRpbycgLCB1cmwgKyAnJnR5cGV4PWF1ZGlvJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1tDT0xPUj15ZWxsb3ddW1BMVUdJTl1bL0NPTE9SXSBJbWFnZScgLCB1cmwgKyAnJnR5cGV4PWltYWdlJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1tDT0xPUj15ZWxsb3ddW1BMVUdJTl1bL0NPTE9SXSBQcm9ncmFtJyAsIHVybCArICcmdHlwZXg9cHJvZ3JhbScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdbQ09MT1I9eWVsbG93XVtQTFVHSU5dWy9DT0xPUl0gVmlkZW8nICwgdXJsICsgJyZ0eXBleD12aWRlbycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdbQ09MT1I9bGltZV1bU0NSQVBFUl1bL0NPTE9SXSBNb3ZpZXMgKFVzZWQgZm9yIGxpYnJhcnkgc2Nhbm5pbmcpJyAsIHVybCArICcmdHlwZXg9bW92aWUlMjBzY3JhcGVyJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1tDT0xPUj1saW1lXVtTQ1JBUEVSXVsvQ09MT1JdIFRWIFNob3dzIChVc2VkIGZvciBsaWJyYXJ5IHNjYW5uaW5nKScgLCB1cmwgKyAnJnR5cGV4PXR2JTIwc2hvdyUyMHNjcmFwZXInICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPWxpbWVdW1NDUkFQRVJdWy9DT0xPUl0gTXVzaWMgQXJ0aXN0cyAoVXNlZCBmb3IgbGlicmFyeSBzY2FubmluZyknICwgdXJsICsgJyZ0eXBleD1hcnRpc3QlMjBzY3JhcGVyJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1tDT0xPUj1saW1lXVtTQ1JBUEVSXVsvQ09MT1JdIE11c2ljIFZpZGVvcyAoVXNlZCBmb3IgbGlicmFyeSBzY2FubmluZyknICwgdXJsICsgJyZ0eXBleD1tdXNpYyUyMHZpZGVvJTIwc2NyYXBlcicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdbQ09MT1I9b3JhbmdlXVtTRVJWSUNFXVsvQ09MT1JdIEFsbCBTZXJ2aWNlcycgLCB1cmwgKyAnJnR5cGV4PXNlcnZpY2UnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPW9yYW5nZV1bU0VSVklDRV1bL0NPTE9SXSBXZWF0aGVyIFNlcnZpY2UnICwgdXJsICsgJyZ0eXBleD13ZWF0aGVyJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1tDT0xPUj1za3libHVlXVtPVEhFUl1bL0NPTE9SXSBSZXBvc2l0b3JpZXMnICwgdXJsICsgJyZ0eXBleD1yZXBvc2l0b3J5JyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1tDT0xPUj1za3libHVlXVtPVEhFUl1bL0NPTE9SXSBTY3JpcHRzIChQcm9ncmFtIEFkZC1vbnMpJyAsIHVybCArICcmdHlwZXg9ZXhlY3V0YWJsZScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdbQ09MT1I9c2t5Ymx1ZV1bT1RIRVJdWy9DT0xPUl0gU2NyZWVuc2F2ZXJzJyAsIHVybCArICcmdHlwZXg9c2NyZWVuc2F2ZXInICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPXNreWJsdWVdW09USEVSXVsvQ09MT1JdIFNjcmlwdCBNb2R1bGVzJyAsIHVybCArICcmdHlwZXg9c2NyaXB0JTIwbW9kdWxlJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1tDT0xPUj1za3libHVlXVtPVEhFUl1bL0NPTE9SXSBTa2lucycgLCB1cmwgKyAnJnR5cGV4PXNraW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPXNreWJsdWVdW09USEVSXVsvQ09MT1JdIFN1YnRpdGxlcycgLCB1cmwgKyAnJnR5cGV4PXN1YnRpdGxlcycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdbQ09MT1I9c2t5Ymx1ZV1bT1RIRVJdWy9DT0xPUl0gV2ViIEludGVyZmFjZScgLCB1cmwgKyAnJnR5cGV4PXdlYiUyMGludGVyZmFjZScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIDcxIC0gNzE6IE9vT28wbyArIElJSUlpaUlJMTExCiBpZiAyOCAtIDI4OiBJSTExaUlpSUlJaUkKZGVmIEkxMWlpMUlJaUlpICggKSA6CiBPb09PbzBPT29PICggKQogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ0FjdGl2YXRlV2luZG93KDEwMDQwLCJhZGRvbnM6Ly9vdXRkYXRlZC8iLHJldHVybiknICkKIGlmIDcyIC0gNzI6IElJSUlpaUlJMTExCiBpZiAxIC0gMTogbzBvbyAqIE9vMDBvbzBvTyAqIElJMSArIGkxMUlpaQpkZWYgSWlJSTExMWkxaTExICggdXJsICkgOgogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0FmcmljYW4nICwgdXJsICsgJyZnZW5yZT1hZnJpY2FuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0FyYWJpYycgLCB1cmwgKyAnJmdlbnJlPWFyYWJpYycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdBc2lhbicgLCB1cmwgKyAnJmdlbnJlPWFzaWFuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0F1c3RyYWxpYW4nICwgdXJsICsgJyZnZW5yZT1hdXN0cmFsaWFuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0F1c3RyaWFuJyAsIHVybCArICcmZ2VucmU9YXVzdHJpYW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQmVsZ2lhbicgLCB1cmwgKyAnJmdlbnJlPWJlbGdpYW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQnJhemlsaWFuJyAsIHVybCArICcmZ2VucmU9YnJhemlsaWFuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0NhbmFkaWFuJyAsIHVybCArICcmZ2VucmU9Y2FuYWRpYW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQ2hpbmVzZScgLCB1cmwgKyAnJmdlbnJlPWNoaW5lc2UnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQ29sb21iaWFuJyAsIHVybCArICcmZ2VucmU9Y29sdW1iaWFuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0Nyb2F0aWFuJyAsIHVybCArICcmZ2VucmU9Y3JvYXRpYW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQ3plY2gnICwgdXJsICsgJyZnZW5yZT1jemVjaCcgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdEYW5pc2gnICwgdXJsICsgJyZnZW5yZT1kYW5pc2gnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnRG9taW5pY2FuJyAsIHVybCArICcmZ2VucmU9ZG9taW5pY2FuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0R1dGNoJyAsIHVybCArICcmZ2VucmU9ZHV0Y2gnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnRWd5cHRpYW4nICwgdXJsICsgJyZnZW5yZT1lZ3lwdGlhbicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdGaWxpcGlubycgLCB1cmwgKyAnJmdlbnJlPWZpbGlwaW5vJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0Zpbm5pc2gnICwgdXJsICsgJyZnZW5yZT1maW5uaXNoJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0ZyZW5jaCcgLCB1cmwgKyAnJmdlbnJlPWZyZW5jaCcgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdHZXJtYW4nICwgdXJsICsgJyZnZW5yZT1nZXJtYW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnR3JlZWsnICwgdXJsICsgJyZnZW5yZT1ncmVlaycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdIZWJyZXcnICwgdXJsICsgJyZnZW5yZT1oZWJyZXcnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnSHVuZ2FyaWFuJyAsIHVybCArICcmZ2VucmU9aHVuZ2FyaWFuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0ljZWxhbmRpYycgLCB1cmwgKyAnJmdlbnJlPWljZWxhbmRpYycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdJbmRpYW4nICwgdXJsICsgJyZnZW5yZT1pbmRpYW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnSXJpc2gnICwgdXJsICsgJyZnZW5yZT1pcmlzaCcgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdJdGFsaWFuJyAsIHVybCArICcmZ2VucmU9aXRhbGlhbicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdKYXBhbmVzZScgLCB1cmwgKyAnJmdlbnJlPWphcGFuZXNlJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0tvcmVhbicgLCB1cmwgKyAnJmdlbnJlPWtvcmVhbicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdMZWJhbmVzZScgLCB1cmwgKyAnJmdlbnJlPWxlYmFuZXNlJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ01vbmdvbGlhbicgLCB1cmwgKyAnJmdlbnJlPW1vbmdvbGlhbicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdNb3JvY2NhbicgLCB1cmwgKyAnJmdlbnJlPW1vcm9jY2FuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ05lcGFsaScgLCB1cmwgKyAnJmdlbnJlPW5lcGFsaScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdOZXcgWmVhbGFuZCcgLCB1cmwgKyAnJmdlbnJlPW5ld3plYWxhbmQnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnTm9yd2VnaWFuJyAsIHVybCArICcmZ2VucmU9bm9yd2VnaWFuJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1Bha2lzdGFuaScgLCB1cmwgKyAnJmdlbnJlPXBha2lzdGFuaScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdQb2xpc2gnICwgdXJsICsgJyZnZW5yZT1wb2xpc2gnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnUG9ydHVndWVzZScgLCB1cmwgKyAnJmdlbnJlPXBvcnR1Z3Vlc2UnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnUm9tYW5pYW4nICwgdXJsICsgJyZnZW5yZT1yb21hbmlhbicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdSdXNzaWFuJyAsIHVybCArICcmZ2VucmU9cnVzc2lhbicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdTaW5nYXBvcmUnICwgdXJsICsgJyZnZW5yZT1zaW5nYXBvcmUnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnU3BhbmlzaCcgLCB1cmwgKyAnJmdlbnJlPXNwYW5pc2gnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnU3dlZGlzaCcgLCB1cmwgKyAnJmdlbnJlPXN3ZWRpc2gnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnU3dpc3MnICwgdXJsICsgJyZnZW5yZT1zd2lzcycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdTeXJpYW4nICwgdXJsICsgJyZnZW5yZT1zeXJpYW4nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnVGFtaWwnICwgdXJsICsgJyZnZW5yZT10YW1pbCcgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdUaGFpJyAsIHVybCArICcmZ2VucmU9dGhhaScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdUdXJraXNoJyAsIHVybCArICcmZ2VucmU9dHVya2lzaCcgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdVSycgLCB1cmwgKyAnJmdlbnJlPXVrJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1VTQScgLCB1cmwgKyAnJmdlbnJlPXVzYScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdWaWV0bmFtZXNlJyAsIHVybCArICcmZ2VucmU9dmlldG5hbWVzZScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIDQwIC0gNDA6IGkxMUlpaSAqIE9vMDBvbzBvTyAqIGkxMWlJaWlJaWkKIGlmIDU3IC0gNTc6IGkxMUlpaQpkZWYgSUkxMUlpaWkgKCApIDoKIGkxMUkgPSAwCiBvMDBPbzBvb29vb28gPSBvcyAuIGxpc3RkaXIgKCBvTzBvMG8wb29PMG9PICkKIGZvciBPMG9PMCBpbiBvMDBPbzBvb29vb28gOgogIGlmIE8wb08wIC4gbG93ZXIgKCApIC4gZW5kc3dpdGggKCAnLmRiJyApIGFuZCBPMG9PMCAuIGxvd2VyICggKSAuIHN0YXJ0c3dpdGggKCAnYWRkb25zJyApIDoKICAgaUlJMTEgPSBvcyAuIHBhdGggLiBqb2luICggb08wbzBvMG9vTzBvTyAsIE8wb08wICkKICAgaWlJaWlpMUlJSUlJID0gb3MgLiBwYXRoIC4gZ2V0bXRpbWUgKCBpSUkxMSApCiAgIGlmIGlpSWlpaTFJSUlJSSA+IGkxMUkgOgogICAgaTExSSA9IGlpSWlpaTFJSUlJSQogICAgbzAwbyA9IGlJSTExCiByZXR1cm4gbzAwbwogaWYgNDUgLSA0NTogb09vTzBvMDBPTzAgLiBvMGlpMUkgLiBvT29PMG8wME9PMCAtIG8wMDBPMG8gLiBvMGlpMUkKIGlmIDEyIC0gMTI6IE9PTzBPME8wb29vb28gLSBvMGlpMUkKZGVmIG9Pb08wME8wICggdXJsICkgOgogT08gPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0FkZG9uUG9ydGFsL2FkZG9uZGV0YWlscy5waHA/aWQ9JXMnICUgKCB1cmwgKQogSWkxaUkxMTFJSTFJMSA9IG9PT09Pb09PMG8gKCBPTyAsIDEwICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1xyJyAsICcnICkKIGlmIDEgLSAxOiBPb28wMG9PbzBvT28KIE8wb09vMDBvID0gcmUgLiBjb21waWxlICggJ2FkZG9uX3R5cGVzPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBvMG9vb29PMG8wTyA9IHJlIC4gY29tcGlsZSAoICduYW1lPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBpaUlpMTFpSTFpaWkgPSByZSAuIGNvbXBpbGUgKCAnVUlEPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBvbzAwMCA9IHJlIC4gY29tcGlsZSAoICdpZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogbzAwMDBvTyA9IHJlIC4gY29tcGlsZSAoICdwcm92aWRlcl9uYW1lPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBpSTFpMTExSTFJaSA9IHJlIC4gY29tcGlsZSAoICd2ZXJzaW9uPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBpMTFpMWlpMUkgPSByZSAuIGNvbXBpbGUgKCAnY3JlYXRlZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogbzBPTzBvMG8wMG8gPSByZSAuIGNvbXBpbGUgKCAnYWRkb25fdHlwZXM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIG9PbzAgPSByZSAuIGNvbXBpbGUgKCAndXBkYXRlZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogT09Pb09PID0gcmUgLiBjb21waWxlICggJ2Rvd25sb2Fkcz0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaWYgMTAgLSAxMDogb29vME8wTzAwICsgaWlJSTExaTFJMUlJaSAqIG9Pb08wbzAwT08wICsgSUlpaTFJIC8gT29PbzBvIC8gb09vTzBvMDBPTzAKIGlJMUlJID0gcmUgLiBjb21waWxlICggJ2Rlc2NyaXB0aW9uPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBvME9PbzBvME8wTyA9IHJlIC4gY29tcGlsZSAoICdkZXZicm9rZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogbzBPTzBvMG9PT08wTyA9IHJlIC4gY29tcGlsZSAoICdicm9rZW49IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIGlJSTFpMTEgPSByZSAuIGNvbXBpbGUgKCAnZGVsZXRlZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogT29vID0gcmUgLiBjb21waWxlICggJ21haW5icmFuY2hfbm90ZXM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIGlmIDIwIC0gMjA6IE9vbzAwb09vMG9PbyAlIGlpSUkxMWkxSTFJSWkgKyBvT29PMG8wME9PMCArIGkxMUlpaQogSUkxMWlJSWlpaUlJID0gcmUgLiBjb21waWxlICggJ3JlcG9fdXJsPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBPb09vbzAwT29vMDAgPSByZSAuIGNvbXBpbGUgKCAnZGF0YV91cmw9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIG9vME8wME9vb28wTzAgPSByZSAuIGNvbXBpbGUgKCAnemlwX3VybD0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogSTExT08gPSByZSAuIGNvbXBpbGUgKCAnZ2VucmVzPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBvME8wb28wT08wTyA9IHJlIC4gY29tcGlsZSAoICdmb3J1bT0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogT08wID0gcmUgLiBjb21waWxlICggJ3JlcG9faWQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIG8wT29vbyA9IHJlIC4gY29tcGlsZSAoICdsaWNlbnNlPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBpaUkgPSByZSAuIGNvbXBpbGUgKCAncGxhdGZvcm09IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIG9PSUlpSWkgPSByZSAuIGNvbXBpbGUgKCAndmlzaWJsZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogT09vT29vT29PT09vbyA9IHJlIC4gY29tcGlsZSAoICdzY3JpcHQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIElpaWkxaUkxaSA9IHJlIC4gY29tcGlsZSAoICdwcm9ncmFtX3BsdWdpbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogSTFpaTFpaTExaTFJID0gcmUgLiBjb21waWxlICggJ3NjcmlwdF9tb2R1bGU9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIG8wT29PTyA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19wbHVnaW49IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIE8wTzBPbzAwID0gcmUgLiBjb21waWxlICggJ2F1ZGlvX3BsdWdpbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogb09vTzAwbyA9IHJlIC4gY29tcGlsZSAoICdpbWFnZV9wbHVnaW49IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIG9PMDBPMCA9IHJlIC4gY29tcGlsZSAoICdyZXBvc2l0b3J5PSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBJSWkxSUlJaSA9IHJlIC4gY29tcGlsZSAoICd3ZWF0aGVyX3NlcnZpY2U9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIE8wME9vbyA9IHJlIC4gY29tcGlsZSAoICdza2luPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBPT09PME9PTyA9IHJlIC4gY29tcGlsZSAoICdzZXJ2aWNlPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBpMWkxaWkgPSByZSAuIGNvbXBpbGUgKCAnd2FybmluZz0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaUlJMWlpMSA9IHJlIC4gY29tcGlsZSAoICd3ZWJfaW50ZXJmYWNlPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBJMWkxaWlpSTEgPSByZSAuIGNvbXBpbGUgKCAnbW92aWVfc2NyYXBlcj0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaUlJaSA9IHJlIC4gY29tcGlsZSAoICd0dl9zY3JhcGVyPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBvTzBvMDBvbzAgPSByZSAuIGNvbXBpbGUgKCAnYXJ0aXN0X3NjcmFwZXI9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIGlpMUlJSUkgPSByZSAuIGNvbXBpbGUgKCAnbXVzaWNfdmlkZW9fc2NyYXBlcj0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogb08wMG9Pb29vb28wID0gcmUgLiBjb21waWxlICggJ3N1YnRpdGxlcz0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogb09vID0gcmUgLiBjb21waWxlICggJ3JlcXVpcmVzPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBPME9Pb29Pb08gPSByZSAuIGNvbXBpbGUgKCAnbW9kdWxlcz0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaTFJSTFJMUlpaTEgPSByZSAuIGNvbXBpbGUgKCAnaWNvbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaWlJMTFJaWkgPSByZSAuIGNvbXBpbGUgKCAndmlkZW9fcHJldmlldz0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogTzBvME8wID0gcmUgLiBjb21waWxlICggJ3ZpZGVvX2d1aWRlPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBJaTFJSTFJMTFpMSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19ndWlkZTE9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIG9Pb29vb29Pb08gPSByZSAuIGNvbXBpbGUgKCAndmlkZW9fZ3VpZGUyPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBJaTExMSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19ndWlkZTM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIEkxMTFpMWkxMTExID0gcmUgLiBjb21waWxlICggJ3ZpZGVvX2d1aWRlND0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogSUlJSTEgPSByZSAuIGNvbXBpbGUgKCAndmlkZW9fZ3VpZGU1PSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBJMUkxaSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19ndWlkZTY9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIEkxSUlJaUlpSWkgPSByZSAuIGNvbXBpbGUgKCAndmlkZW9fZ3VpZGU3PSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBJSUlJSTEgPSByZSAuIGNvbXBpbGUgKCAndmlkZW9fZ3VpZGU4PSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBpSWkxSWkxaTFpSSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19ndWlkZTk9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIElJaUkxID0gcmUgLiBjb21waWxlICggJ3ZpZGVvX2d1aWRlMTA9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIGkxaUkxID0gcmUgLiBjb21waWxlICggJ3ZpZGVvX2xhYmVsMT0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaWkxID0gcmUgLiBjb21waWxlICggJ3ZpZGVvX2xhYmVsMj0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogSTFJaWlJMWlpMWkgPSByZSAuIGNvbXBpbGUgKCAndmlkZW9fbGFiZWwzPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBPMG8gPSByZSAuIGNvbXBpbGUgKCAndmlkZW9fbGFiZWw0PSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBvTzBPb08wMG8gPSByZSAuIGNvbXBpbGUgKCAndmlkZW9fbGFiZWw1PSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBJSTFpaWlpSUkgPSByZSAuIGNvbXBpbGUgKCAndmlkZW9fbGFiZWw2PSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBPME9vT08wb28wID0gcmUgLiBjb21waWxlICggJ3ZpZGVvX2xhYmVsNz0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogb09PID0gcmUgLiBjb21waWxlICggJ3ZpZGVvX2xhYmVsOD0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogTzBvME9PMDAwMG9vbyA9IHJlIC4gY29tcGlsZSAoICd2aWRlb19sYWJlbDk9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIGlJSUlJMWlJSWlpID0gcmUgLiBjb21waWxlICggJ3ZpZGVvX2xhYmVsMTA9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIGlmIDUyIC0gNTI6IG8waWkxSSAlIGlpSUkxMWkxSTFJSWkKIGlmIDY0IC0gNjQ6IE9PTzBPME8wb29vb28gJSBvMG8gJSBPT08wTzBPMG9vb29vICogbzBvbyAuIG9vb09vb09PbzBPTyArIG8wMDBPMG8KIGlmIDc1IC0gNzU6IG8wbyAuIElJMSAlIG8waWkxSSAqIG8wbyAlIElJMQogSTExaTFpSWlJSUlJSWlpID0gTzBvT28wMG8gWyAwIF0gaWYgKCBsZW4gKCBPMG9PbzAwbyApID4gMCApIGVsc2UgJycKIE9PbzAgPSBvMG9vb29PMG8wTyBbIDAgXSBpZiAoIGxlbiAoIG8wb29vb08wbzBPICkgPiAwICkgZWxzZSAnJwogaWkxMUkxID0gaWlJaTExaUkxaWlpIFsgMCBdIGlmICggbGVuICggaWlJaTExaUkxaWlpICkgPiAwICkgZWxzZSAnJwogb08wb28gPSBvbzAwMCBbIDAgXSBpZiAoIGxlbiAoIG9vMDAwICkgPiAwICkgZWxzZSAnJwogSWkxMTFpSWkxaUlpID0gbzAwMDBvTyBbIDAgXSBpZiAoIGxlbiAoIG8wMDAwb08gKSA+IDAgKSBlbHNlICcnCiBJSUlJSW8wb29Pb08wMDBvTyA9IGlJMWkxMTFJMUlpIFsgMCBdIGlmICggbGVuICggaUkxaTExMUkxSWkgKSA+IDAgKSBlbHNlICcnCiBPT28gPSBpMTFpMWlpMUkgWyAwIF0gaWYgKCBsZW4gKCBpMTFpMWlpMUkgKSA+IDAgKSBlbHNlICcnCiBpMWkxMUkxSTFpaWkxID0gbzBPTzBvMG8wMG8gWyAwIF0gaWYgKCBsZW4gKCBvME9PMG8wbzAwbyApID4gMCApIGVsc2UgJycKIEkxaWlpMTEgPSBvT28wIFsgMCBdIGlmICggbGVuICggb09vMCApID4gMCApIGVsc2UgJycKIG9vbzBPID0gT09Pb09PIFsgMCBdIGlmICggbGVuICggT09Pb09PICkgPiAwICkgZWxzZSAnJwogaWYgMTYgLSAxNjogSWlpCiBJaWlpaWkxMTFpMWlpID0gJ1tDUl1bQ1JdW0NPTE9SPWRvZGdlcmJsdWVdRGVzY3JpcHRpb246IFsvQ09MT1JdJyArIGlJMUlJIFsgMCBdIGlmICggbGVuICggaUkxSUkgKSA+IDAgKSBlbHNlICcnCiBpMWkxaUlJMSA9IG8wT09vMG8wTzBPIFsgMCBdIGlmICggbGVuICggbzBPT28wbzBPME8gKSA+IDAgKSBlbHNlICcnCiBpaWkxMWkxSUlJSSA9IG8wT08wbzBvT09PME8gWyAwIF0gaWYgKCBsZW4gKCBvME9PMG8wb09PTzBPICkgPiAwICkgZWxzZSAnJwogSWkgPSAnW0NSXScgKyBpSUkxaTExIFsgMCBdIGlmICggbGVuICggaUlJMWkxMSApID4gMCApIGVsc2UgJycKIG8wMGlpSTFJaTEgPSAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1Vc2VyIE5vdGVzOiBbL0NPTE9SXScgKyBPb28gWyAwIF0gaWYgKCBsZW4gKCBPb28gKSA+IDAgKSBlbHNlICcnCiBpZiAxOCAtIDE4OiBPb28wMG9PbzBvT28gLyBPbzAwb28wb08KIElpSUlpaTEgPSBJSTExaUlJaWlpSUkgWyAwIF0gaWYgKCBsZW4gKCBJSTExaUlJaWlpSUkgKSA+IDAgKSBlbHNlICcnCiBPMDAwT09PME9PbyA9IE9vT29vMDBPb28wMCBbIDAgXSBpZiAoIGxlbiAoIE9vT29vMDBPb28wMCApID4gMCApIGVsc2UgJycKIGkxaTFJMTExaUlpMSA9IG9vME8wME9vb28wTzAgWyAwIF0gaWYgKCBsZW4gKCBvbzBPMDBPb29vME8wICkgPiAwICkgZWxzZSAnJwogb28wME8wMG9PMDAwbyA9IEkxMU9PIFsgMCBdIGlmICggbGVuICggSTExT08gKSA+IDAgKSBlbHNlICcnCiBPT28wME9vTyA9ICdbQ1JdW0NSXVtDT0xPUj1kb2RnZXJibHVlXVN1cHBvcnQgRm9ydW06IFsvQ09MT1JdJyArIG8wTzBvbzBPTzBPIFsgMCBdIGlmICggbGVuICggbzBPMG9vME9PME8gKSA+IDAgKSBlbHNlICdbQ1JdW0NSXVtDT0xPUj1kb2RnZXJibHVlXVN1cHBvcnQgRm9ydW06IFsvQ09MT1JdTm8gZm9ydW0gZGV0YWlscyBnaXZlbiBieSBkZXZlbG9wZXInCiBpSWkxID0gbzBPMG9vME9PME8gWyAwIF0gaWYgKCBsZW4gKCBvME8wb28wT08wTyApID4gMCApIGVsc2UgJ05vbmUnCiBpMTFpaUkxMTExID0gT08wIFsgMCBdIGlmICggbGVuICggT08wICkgPiAwICkgZWxzZSAnJwogbGljZW5zZSA9IG8wT29vbyBbIDAgXSBpZiAoIGxlbiAoIG8wT29vbyApID4gMCApIGVsc2UgJycKIG9Pb29vbzAwME9vMDAgPSAnW0NPTE9SPW9yYW5nZV0gICAgIFBsYXRmb3JtOiBbL0NPTE9SXScgKyBpaUkgWyAwIF0gaWYgKCBsZW4gKCBpaUkgKSA+IDAgKSBlbHNlICcnCiBPT29vID0gb09JSWlJaSBbIDAgXSBpZiAoIGxlbiAoIG9PSUlpSWkgKSA+IDAgKSBlbHNlICcnCiBvMDBPMDBvTzAwID0gT09vT29vT29PT09vbyBbIDAgXSBpZiAoIGxlbiAoIE9Pb09vb09vT09Pb28gKSA+IDAgKSBlbHNlICcnCiBJaTFpMWkxaTFJMUlpID0gSWlpaTFpSTFpIFsgMCBdIGlmICggbGVuICggSWlpaTFpSTFpICkgPiAwICkgZWxzZSAnJwogaWlpSTEgPSBJMWlpMWlpMTFpMUkgWyAwIF0gaWYgKCBsZW4gKCBJMWlpMWlpMTFpMUkgKSA+IDAgKSBlbHNlICcnCiBPT09vTzBPID0gbzBPb09PIFsgMCBdIGlmICggbGVuICggbzBPb09PICkgPiAwICkgZWxzZSAnJwogbzBpaWlJMUkxaUlJSWkxID0gTzBPME9vMDAgWyAwIF0gaWYgKCBsZW4gKCBPME8wT28wMCApID4gMCApIGVsc2UgJycKIElpaUkxaWlpaUkxaUkgPSBvT29PMDBvIFsgMCBdIGlmICggbGVuICggb09vTzAwbyApID4gMCApIGVsc2UgJycKIGlJaWlpaWkxaSA9IG9PMDBPMCBbIDAgXSBpZiAoIGxlbiAoIG9PMDBPMCApID4gMCApIGVsc2UgJycKIGlpSWkxSUlpSSA9IE9PT08wT09PIFsgMCBdIGlmICggbGVuICggT09PTzBPT08gKSA+IDAgKSBlbHNlICcnCiBJMTFpaWkxSWkgPSBPMDBPb28gWyAwIF0gaWYgKCBsZW4gKCBPMDBPb28gKSA+IDAgKSBlbHNlICcnCiBpMW9PME9PMCA9IGkxaTFpaSBbIDAgXSBpZiAoIGxlbiAoIGkxaTFpaSApID4gMCApIGVsc2UgJycKIG8wTzBPbzAwID0gaUlJMWlpMSBbIDAgXSBpZiAoIGxlbiAoIGlJSTFpaTEgKSA+IDAgKSBlbHNlICcnCiBPME9vMG8wMDBvTyA9IElJaTFJSUlpIFsgMCBdIGlmICggbGVuICggSUlpMUlJSWkgKSA+IDAgKSBlbHNlICcnCiBvTzBvMDBvT09vb08wID0gSTFpMWlpaUkxIFsgMCBdIGlmICggbGVuICggSTFpMWlpaUkxICkgPiAwICkgZWxzZSAnJwogT09Pb08wMDAgPSBpSUlpIFsgMCBdIGlmICggbGVuICggaUlJaSApID4gMCApIGVsc2UgJycKIG9PT09PID0gb08wbzAwb28wIFsgMCBdIGlmICggbGVuICggb08wbzAwb28wICkgPiAwICkgZWxzZSAnJwogSWlJaTFpaTExMWkxID0gaWkxSUlJSSBbIDAgXSBpZiAoIGxlbiAoIGlpMUlJSUkgKSA+IDAgKSBlbHNlICcnCiBpMWkxaTFJID0gb08wMG9Pb29vb28wIFsgMCBdIGlmICggbGVuICggb08wMG9Pb29vb28wICkgPiAwICkgZWxzZSAnJwogb09vbzAwMCA9IG9PbyBbIDAgXSBpZiAoIGxlbiAoIG9PbyApID4gMCApIGVsc2UgJycKIE9vb09vMDBvID0gTzBPT29vT29PIFsgMCBdIGlmICggbGVuICggTzBPT29vT29PICkgPiAwICkgZWxzZSAnJwogSWlJMTFpMUlJaWlJID0gaTFJSTFJMUlpaTEgWyAwIF0gaWYgKCBsZW4gKCBpMUlJMUkxSWlpMSApID4gMCApIGVsc2UgJycKIG9PT28wMDBvT29PMCA9IGlpSTExSWlpIFsgMCBdIGlmICggbGVuICggaWlJMTFJaWkgKSA+IDAgKSBlbHNlICdOb25lJwogT29PbzAwbzBPTyA9IE8wbzBPMCBbIDAgXSBpZiAoIGxlbiAoIE8wbzBPMCApID4gMCApIGVsc2UgJ05vbmUnCiBpaTFJSUlJaUkxMSA9IElpMUlJMUkxMWkxIFsgMCBdIGlmICggbGVuICggSWkxSUkxSTExaTEgKSA+IDAgKSBlbHNlICdOb25lJwogaUkxSUlJaWkgPSBvT29vb29vT29PIFsgMCBdIGlmICggbGVuICggb09vb29vb09vTyApID4gMCApIGVsc2UgJ05vbmUnCiBJMWkxMWlpMTEgPSBJaTExMSBbIDAgXSBpZiAoIGxlbiAoIElpMTExICkgPiAwICkgZWxzZSAnTm9uZScKIE9PMDBPMG9PTyA9IEkxMTFpMWkxMTExIFsgMCBdIGlmICggbGVuICggSTExMWkxaTExMTEgKSA+IDAgKSBlbHNlICdOb25lJwogSWkxaUkxMTEgPSBJSUlJMSBbIDAgXSBpZiAoIGxlbiAoIElJSUkxICkgPiAwICkgZWxzZSAnTm9uZScKIE8wb29vbzAwbzBPbyA9IEkxSTFpIFsgMCBdIGlmICggbGVuICggSTFJMWkgKSA+IDAgKSBlbHNlICdOb25lJwogSTFpaWkgPSBJMUlJSWlJaUlpIFsgMCBdIGlmICggbGVuICggSTFJSUlpSWlJaSApID4gMCApIGVsc2UgJ05vbmUnCiBvTzBvME8wT29vMG8gPSBJSUlJSTEgWyAwIF0gaWYgKCBsZW4gKCBJSUlJSTEgKSA+IDAgKSBlbHNlICdOb25lJwogaTFJaTExSUkgPSBpSWkxSWkxaTFpSSBbIDAgXSBpZiAoIGxlbiAoIGlJaTFJaTFpMWlJICkgPiAwICkgZWxzZSAnTm9uZScKIElpb08wb09PTzBPb28gPSBJSWlJMSBbIDAgXSBpZiAoIGxlbiAoIElJaUkxICkgPiAwICkgZWxzZSAnTm9uZScKIGkxaTFJID0gaTFpSTEgWyAwIF0gaWYgKCBsZW4gKCBpMWlJMSApID4gMCApIGVsc2UgJ05vbmUnCiBJaUlJaTEgPSBpaTEgWyAwIF0gaWYgKCBsZW4gKCBpaTEgKSA+IDAgKSBlbHNlICdOb25lJwogaUlJMTFJMUlpMSA9IEkxSWlpSTFpaTFpIFsgMCBdIGlmICggbGVuICggSTFJaWlJMWlpMWkgKSA+IDAgKSBlbHNlICdOb25lJwogbzBvMCA9IE8wbyBbIDAgXSBpZiAoIGxlbiAoIE8wbyApID4gMCApIGVsc2UgJ05vbmUnCiBvT28wb08gPSBvTzBPb08wMG8gWyAwIF0gaWYgKCBsZW4gKCBvTzBPb08wMG8gKSA+IDAgKSBlbHNlICdOb25lJwogSUlpMUlJSUlpID0gSUkxaWlpaUlJIFsgMCBdIGlmICggbGVuICggSUkxaWlpaUlJICkgPiAwICkgZWxzZSAnTm9uZScKIE9PT29PID0gTzBPb09PMG9vMCBbIDAgXSBpZiAoIGxlbiAoIE8wT29PTzBvbzAgKSA+IDAgKSBlbHNlICdOb25lJwogSTFpID0gb09PIFsgMCBdIGlmICggbGVuICggb09PICkgPiAwICkgZWxzZSAnTm9uZScKIGlpaUkgPSBPMG8wT08wMDAwb29vIFsgMCBdIGlmICggbGVuICggTzBvME9PMDAwMG9vbyApID4gMCApIGVsc2UgJ05vbmUnCiBJaUlpMSA9IGlJSUlJMWlJSWlpIFsgMCBdIGlmICggbGVuICggaUlJSUkxaUlJaWkgKSA+IDAgKSBlbHNlICdOb25lJwogaWYgMzQgLSAzNDogSUkxMWlJaUlJSWlJCiBwcmludCAiIyMjIEFkZG9uIERldGFpbHM6ICIgKyBPT28wCiBpZiA5MSAtIDkxOiBJSWlpMUkgJSBvMGlpMUkgLiBJSWlpMUkgJSBPMDBvb29vbzAwIC8gT29vMDBvT28wb09vICogSWlpCiBpZiBJaSAhPSAnJyA6CiAgaWkgPSAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1TdGF0dXM6IFsvQ09MT1JdW0NPTE9SPXJlZF1UaGlzIGFkZC1vbiBpcyBkZXByZWNpYXRlZCwgaXRcJ3Mgbm8gbG9uZ2VyIGF2YWlsYWJsZS5bL0NPTE9SXScKICBpZiA4MSAtIDgxOiBPT08wTzBPMG9vb29vICUgSUlJSWlpSUkxMTEKIGVsaWYgaWlpMTFpMUlJSUkgPT0gJycgYW5kIGkxaTFpSUkxID09ICcnIGFuZCBpMW9PME9PMCA9PSAnJyA6CiAgaWkgPSAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1TdGF0dXM6IFsvQ09MT1JdW0NPTE9SPWxpbWVdTm8gcmVwb3J0ZWQgcHJvYmxlbXNbL0NPTE9SXScKICBpZiA1IC0gNTogSUkxIC0gbzBvbyArIE9vMDBvbzBvTyAtIG9vbzBPME8wMCAuIG8wb28gLyBpMTFJaWkKIGVsaWYgaWlpMTFpMUlJSUkgPT0gJycgYW5kIGkxaTFpSUkxID09ICcnIGFuZCBpMW9PME9PMCAhPSAnJyBhbmQgSWkgPT0gJycgOgogIGlpID0gJ1tDUl1bQ1JdW0NPTE9SPWRvZGdlcmJsdWVdU3RhdHVzOiBbL0NPTE9SXVtDT0xPUj1vcmFuZ2VdQWx0aG91Z2ggdGhlcmUgaGF2ZSBiZWVuIG5vIHJlcG9ydGVkIHByb2JsZW1zIHRoZXJlIG1heSBiZSBpc3N1ZXMgd2l0aCB0aGlzIGFkZC1vbiwgc2VlIGJlbG93LlsvQ09MT1JdJwogIGlmIDI4IC0gMjg6IElJSUlpaUlJMTExICogSUlJSWlpSUkxMTEgLSBJSWlpMUkKIGVsaWYgaWlpMTFpMUlJSUkgPT0gJycgYW5kIGkxaTFpSUkxICE9ICcnIDoKICBpaSA9ICdbQ1JdW0NSXVtDT0xPUj1kb2RnZXJibHVlXVN0YXR1czogWy9DT0xPUl1NYXJrZWQgYXMgYnJva2VuIGJ5IHRoZSBhZGQtb24gZGV2ZWxvcGVyLltDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1EZXZlbG9wZXIgQ29tbWVudHM6IFsvQ09MT1JdJyArIGkxaTFpSUkxCiAgaWYgNzAgLSA3MDogT29PbzBvCiBlbGlmIGlpaTExaTFJSUlJICE9ICcnIGFuZCBpMWkxaUlJMSA9PSAnJyA6CiAgaWkgPSAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1TdGF0dXM6IFsvQ09MT1JdTWFya2VkIGFzIGJyb2tlbiBieSBhIG1lbWJlciBvZiB0aGUgY29tbXVuaXR5IGF0IFdXVy5OT09CU0FORE5FUkRTLkNPTVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1Vc2VyIENvbW1lbnRzOiBbL0NPTE9SXScgKyBpaWkxMWkxSUlJSQogIGlmIDE2IC0gMTY6IG9vbzBPME8wMCAtIElJMSAlIGlpSUkxMWkxSTFJSWkKIGVsaWYgaWlpMTFpMUlJSUkgIT0gJycgYW5kIGkxaTFpSUkxICE9ICcnIDoKICBpaSA9ICdbQ1JdW0NSXVtDT0xPUj1kb2RnZXJibHVlXVN0YXR1czogWy9DT0xPUl1NYXJrZWQgYXMgYnJva2VuIGJ5IGJvdGggdGhlIGFkZC1vbiBkZXZlbG9wZXIgYW5kIGEgbWVtYmVyIG9mIHRoZSBjb21tdW5pdHkgYXQgV1dXLk5PT0JTQU5ETkVSRFMuQ09NW0NSXVtDT0xPUj1kb2RnZXJibHVlXURldmVsb3BlciBDb21tZW50czogWy9DT0xPUl0nICsgaTFpMWlJSTEgKyAnW0NSXVtDT0xPUj1kb2RnZXJibHVlXVVzZXIgQ29tbWVudHM6IFsvQ09MT1JdJyArIGlpaTExaTFJSUlJCiAgaWYgMzYgLSAzNjogSUkxMWlJaUlJSWlJCiAgaWYgODQgLSA4NDogT29PbzBvIC4gbzBvbyAuIE9vbzAwb09vMG9PbyAuIG8wbyAvIElJSUlpaUlJMTExICUgb09vTzBvMDBPTzAKIE9PTzBvT29PME8gPSBzdHIgKCAnW0NPTE9SPW9yYW5nZV1OYW1lOiBbL0NPTE9SXScgKyBPT28wICsgJ1tDT0xPUj1vcmFuZ2VdICAgICBBdXRob3Iocyk6IFsvQ09MT1JdJyArIElpMTExaUlpMWlJaSArICdbQ09MT1I9b3JhbmdlXVtDUl1bQ1JdVmVyc2lvbjogWy9DT0xPUl0nICsgSUlJSUlvMG9vT29PMDAwb08gKyAnW0NPTE9SPW9yYW5nZV0gICAgIENyZWF0ZWQ6IFsvQ09MT1JdJyArIE9PbyArICdbQ09MT1I9b3JhbmdlXSAgICAgVXBkYXRlZDogWy9DT0xPUl0nICsgSTFpaWkxMSArICdbQ09MT1I9b3JhbmdlXVtDUl1bQ1JdUmVwb3NpdG9yeTogWy9DT0xPUl0nICsgaTExaWlJMTExMSArIG9Pb29vbzAwME9vMDAgKyAnW0NPTE9SPW9yYW5nZV0gICAgIEFkZC1vbiBUeXBlKHMpOiBbL0NPTE9SXScgKyBpMWkxMUkxSTFpaWkxICsgb09vbzAwMCArIGlpICsgSWkgKyBpMW9PME9PMCArIE9PbzAwT29PICsgSWlpaWlpMTExaTFpaSArIG8wMGlpSTFJaTEgKQogaWYgODQgLSA4NDogT09PME8wTzBvb29vbyAqIElJMSAtIE9vMDBvbzBvTyAqIE9vMDBvbzBvTwogaWYgOCAtIDg6IGkxMUlpaSAvIE8wMG9vb29vMDAgLiBvb29Pb29PT28wT08KIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBvTzBvbyApICkgOgogIGlmICdzY3JpcHQubW9kdWxlJyBpbiBvTzBvbyBvciAncmVwbycgaW4gb08wb28gOgogICBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPW9yYW5nZV0oQWxyZWFkeSBJbnN0YWxsZWQpWy9DT0xPUl0nICwgJycgLCAnJyAsIElpSTExaTFJSWlpSSAsICcnICwgJycgLCAnJyApCiAgZWxzZSA6CiAgIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9b3JhbmdlXShBbHJlYWR5IEluc3RhbGxlZClbL0NPTE9SXSBDbGljayBoZXJlIHRvIHJ1biB0aGUgYWRkLW9uJyAsIG9PMG9vICwgJ3J1bl9hZGRvbicgLCBJaUkxMWkxSUlpaUkgLCAnJyAsICcnICwgJycgKQogICBpZiA0MSAtIDQxOiBvb28wTzBPMDAgKyBvMG9vCiAgIGlmIDg2IC0gODY6IElpaSAuIElJaWkxSSAtIG8wb28KIGlmIE9PbzAgPT0gJycgOgogIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9eWVsbG93XVNvcnJ5IHJlcXVlc3QgZmFpbGVkIGR1ZSB0byBoaWdoIHRyYWZmaWMgb24gc2VydmVyLCBwbGVhc2UgdHJ5IGFnYWluWy9DT0xPUl0nICwgJycgLCAnJyAsIElpSTExaTFJSWlpSSAsICcnICwgJycgLCAnJyApCiAgaWYgNTYgLSA1NjogT09PME8wTzBvb29vbwogIGlmIDYxIC0gNjE6IG8waWkxSSAvIElJMTFpSWlJSUlpSSAvIGlpSUkxMWkxSTFJSWkgKiBPT08wTzBPMG9vb29vCiBlbGlmIE9PbzAgIT0gJycgOgogIGlmIDIzIC0gMjM6IG9vb09vb09PbzBPTyAtIElJMTFpSWlJSUlpSSArIG8wbwogIGlmICggaWlpMTFpMUlJSUkgPT0gJycgKSBhbmQgKCBpMWkxaUlJMSA9PSAnJyApIGFuZCAoIElpID09ICcnICkgYW5kICggaTFvTzBPTzAgPT0gJycgKSA6CiAgIE9PbzBvTzAwb29PMDAgKCAnYWRkb24nICwgJ1tDT0xPUj15ZWxsb3ddW0ZVTEwgREVUQUlMU11bL0NPTE9SXSBObyBwcm9ibGVtcyByZXBvcnRlZCcgLCBPT08wb09vTzBPICwgJ3RleHRfZ3VpZGUnICwgSWlJMTFpMUlJaWlJICwgJycgLCAnJyAsIE9PTzBvT29PME8gKQogICBpZiAxMiAtIDEyOiBvMDAwTzBvIC8gaTExSWlpICUgbzBpaTFJIC8gaTExaUlpaUlpaSAlIElJMQogIGlmICggaWlpMTFpMUlJSUkgIT0gJycgYW5kIElpID09ICcnICkgb3IgKCBpMWkxaUlJMSAhPSAnJyBhbmQgSWkgPT0gJycgKSBvciAoIGkxb08wT08wICE9ICcnIGFuZCBJaSA9PSAnJyApIDoKICAgT09vMG9PMDBvb08wMCAoICdhZGRvbicgLCAnW0NPTE9SPXllbGxvd11bRlVMTCBERVRBSUxTXVsvQ09MT1JdW0NPTE9SPW9yYW5nZV0gUG9zc2JpbGUgcHJvYmxlbXMgcmVwb3J0ZWRbL0NPTE9SXScgLCBPT08wb09vTzBPICwgJ3RleHRfZ3VpZGUnICwgSWlJMTFpMUlJaWlJICwgJycgLCAnJyAsIE9PTzBvT29PME8gKQogICBpZiAxNSAtIDE1OiBJSWlpMUkgJSBJSTEgLSBpaUlJMTFpMUkxSUlpICogSUlJSWlpSUkxMTEgKyBvMG8KICBpZiBJaSAhPSAnJyA6CiAgIE9PbzBvTzAwb29PMDAgKCAnYWRkb24nICwgJ1tDT0xPUj15ZWxsb3ddW0ZVTEwgREVUQUlMU11bL0NPTE9SXVtDT0xPUj1yZWRdIEFkZC1vbiBub3cgZGVwcmVjaWF0ZWRbL0NPTE9SXScgLCBPT08wb09vTzBPICwgJ3RleHRfZ3VpZGUnICwgSWlJMTFpMUlJaWlJICwgJycgLCAnJyAsIE9PTzBvT29PME8gKQogICBpZiAxMSAtIDExOiBvb28wTzBPMDAgKiBJSUlJaWlJSTExMSAtIElpaQogICBpZiA2NiAtIDY2OiBJaWkgLiBpMTFpSWlpSWlpIC0gb29vME8wTzAwICogbzBpaTFJICsgSUkxICogb09vTzBvMDBPTzAKICBpZiBJaSA9PSAnJyA6CiAgIGlmIDc0IC0gNzQ6IGlpSUkxMWkxSTFJSWkKICAgaWYgaTExaWlJMTExMSAhPSAnJyBhbmQgJ3N1cGVycmVwbycgbm90IGluIGkxMWlpSTExMTEgOgogICAgSTFJaWlpaUkgKCAnW0NPTE9SPWxpbWVdW0lOU1RBTEwgLSBSZWNvbW1lbmRlZF0gWy9DT0xPUl0nICsgT09vMCAsIE9PbzAgLCAnJyAsICdhZGRvbl9pbnN0YWxsX3plcm8nICwgSWlJMTFpMUlJaWlJICwgJycgLCAnJyAsIElpaWlpaTExMWkxaWkgLCBJMTFpMWlJaUlJSUlJaWkgLCBJaUlJaWkxICwgaTExaWlJMTExMSAsIG9PMG9vICwgSWkxMTFpSWkxaUlpICwgaUlpMSAsIE8wMDBPT08wT09vICkKICAgIEkxSWlpaWlJICggJ1tDT0xPUj1saW1lXVtJTlNUQUxMIC0gQmFja3VwIE9wdGlvbl0gWy9DT0xPUl0nICsgT09vMCAsIE9PbzAgLCAnJyAsICdhZGRvbl9pbnN0YWxsJyAsIElpSTExaTFJSWlpSSAsICcnICwgJycgLCBJaWlpaWkxMTFpMWlpICwgaTFpMUkxMTFpSWkxICwgSWlJSWlpMSAsIGkxMWlpSTExMTEgLCBvTzBvbyAsIElpMTExaUlpMWlJaSAsIGlJaTEgLCBPMDAwT09PME9PbyApCiAgICBpZiA2MSAtIDYxOiBpaUlJMTFpMUkxSUlpIC0gT29PbzBvICogT29vMDBvT28wb09vICUgaTExSWlpICogSUlpaTFJICsgbzBvbwogICBpZiBpMTFpaUkxMTExID09ICcnIG9yICdzdXBlcnJlcG8nIGluIGkxMWlpSTExMTEgOgogICAgSTFJaWlpaUkgKCAnW0NPTE9SPWxpbWVdW0lOU1RBTExdIFsvQ09MT1JdJyArIE9PbzAgKyAnIC0gVEhJUyBJUyBOT1QgSU4gQSBTRUxGIFVQREFUSU5HIFJFUE8nICwgT09vMCAsICcnICwgJ2FkZG9uX2luc3RhbGwnICwgJycgLCAnJyAsICcnICwgSWlpaWlpMTExaTFpaSAsIGkxaTFJMTExaUlpMSAsIElpSUlpaTEgLCBpMTFpaUkxMTExICwgb08wb28gLCBJaTExMWlJaTFpSWkgLCBpSWkxICwgTzAwME9PTzBPT28gKQogICAgaWYgNzEgLSA3MTogbzBvIC8gbzBvICogb29vT29vT09vME9PICogb29vT29vT09vME9PIC8gT29vMDBvT28wb09vCiAgICBpZiAzNSAtIDM1OiBJSTExaUlpSUlJaUkgKiBvMGlpMUkgKiBvMDAwTzBvICUgaWlJSTExaTFJMUlJaSAuIElpaQogIGlmIG9PT28wMDBvT29PMCAhPSAnTm9uZScgOgogICBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPWRvZGdlcmJsdWVdW1ZJREVPXVsvQ09MT1JdICBQcmV2aWV3JyAsIGlpMUlJSUlpSTExICwgJ3BsYXlfdmlkZW8nICwgJycgLCAnJyAsICcnICwgJycgKQogICBpZiA1OCAtIDU4OiBvMG8gKyBPb28wMG9PbzBvT28gKiBvb28wTzBPMDAgKiBpMTFpSWlpSWlpIC0gSUlpaTFJCiAgaWYgaWkxSUlJSWlJMTEgIT0gJ05vbmUnIDoKICAgT09vMG9PMDBvb08wMCAoICcnICwgJ1tDT0xPUj1kb2RnZXJibHVlXVtWSURFT11bL0NPTE9SXSAgJyArIGkxaTFJICwgaWkxSUlJSWlJMTEgLCAncGxheV92aWRlbycgLCAnJyAsICcnICwgJycgLCAnJyApCiAgIGlmIDY4IC0gNjg6IElJMSAlIE9vbzAwb09vMG9PbwogIGlmIGlJMUlJSWlpICE9ICdOb25lJyA6CiAgIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1bVklERU9dWy9DT0xPUl0gICcgKyBJaUlJaTEgLCBpSTFJSUlpaSAsICdwbGF5X3ZpZGVvJyAsICcnICwgJycgLCAnJyAsICcnICkKICAgaWYgMjYgLSAyNjogT29vMDBvT28wb09vICUgaTExaUlpaUlpaSAlIElJaWkxSSAlIG8wbyAqIG8wbyAqIG9Pb08wbzAwT08wCiAgaWYgSTFpMTFpaTExICE9ICdOb25lJyA6CiAgIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1bVklERU9dWy9DT0xPUl0gICcgKyBpSUkxMUkxSWkxICwgSTFpMTFpaTExICwgJ3BsYXlfdmlkZW8nICwgJycgLCAnJyAsICcnICwgJycgKQogICBpZiAyNCAtIDI0OiBPb28wMG9PbzBvT28gJSBPb09vMG8gLSBpMTFJaWkgKyBvMDAwTzBvICogb09vTzBvMDBPTzAKICBpZiBPTzAwTzBvT08gIT0gJ05vbmUnIDoKICAgT09vMG9PMDBvb08wMCAoICcnICwgJ1tDT0xPUj1kb2RnZXJibHVlXVtWSURFT11bL0NPTE9SXSAgJyArIG8wbzAgLCBPTzAwTzBvT08gLCAncGxheV92aWRlbycgLCAnJyAsICcnICwgJycgLCAnJyApCiAgIGlmIDIgLSAyOiBJSUlJaWlJSTExMSAtIE9vMDBvbzBvTwogIGlmIElpMWlJMTExICE9ICdOb25lJyA6CiAgIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1bVklERU9dWy9DT0xPUl0gICcgKyBvT28wb08gLCBJaTFpSTExMSAsICdwbGF5X3ZpZGVvJyAsICcnICwgJycgLCAnJyAsICcnICkKICAgaWYgODMgLSA4Mzogb29vT29vT09vME9PICUgbzBpaTFJICUgSUlJSWlpSUkxMTEgLSBPb28wMG9PbzBvT28gKiBJSTExaUlpSUlJaUkgLyBJSTEKICBpZiBPMG9vb28wMG8wT28gIT0gJ05vbmUnIDoKICAgT09vMG9PMDBvb08wMCAoICcnICwgJ1tDT0xPUj1kb2RnZXJibHVlXVtWSURFT11bL0NPTE9SXSAgJyArIElJaTFJSUlJaSAsIE8wb29vbzAwbzBPbyAsICdwbGF5X3ZpZGVvJyAsICcnICwgJycgLCAnJyAsICcnICkKICAgaWYgMTggLSAxODogbzBvbyArIElJaWkxSSAtIE9vbzAwb09vMG9PbyAtIG8wMDBPMG8KICBpZiBJMWlpaSAhPSAnTm9uZScgOgogICBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPWRvZGdlcmJsdWVdW1ZJREVPXVsvQ09MT1JdICAnICsgT09Pb08gLCBJMWlpaSAsICdwbGF5X3ZpZGVvJyAsICcnICwgJycgLCAnJyAsICcnICkKICAgaWYgNzEgLSA3MTogSUkxCiAgaWYgb08wbzBPME9vbzBvICE9ICdOb25lJyA6CiAgIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1bVklERU9dWy9DT0xPUl0gICcgKyBJMWkgLCBvTzBvME8wT29vMG8gLCAncGxheV92aWRlbycgLCAnJyAsICcnICwgJycgLCAnJyApCiAgIGlmIDMzIC0gMzM6IE9vT28wbwogIGlmIGkxSWkxMUlJICE9ICdOb25lJyA6CiAgIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1bVklERU9dWy9DT0xPUl0gICcgKyBpaWlJICwgaTFJaTExSUkgLCAncGxheV92aWRlbycgLCAnJyAsICcnICwgJycgLCAnJyApCiAgIGlmIDYyIC0gNjI6IG9Pb08wbzAwT08wICsgSUlJSWlpSUkxMTEgKyBPMDBvb29vbzAwIC8gSUkxCiAgaWYgSWlvTzBvT09PME9vbyAhPSAnTm9uZScgOgogICBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPWRvZGdlcmJsdWVdW1ZJREVPXVsvQ09MT1JdICAnICsgSWlJaTEgLCBJaW9PMG9PT08wT29vICwgJ3BsYXlfdmlkZW8nICwgJycgLCAnJyAsICcnICwgJycgKQogICBpZiA3IC0gNzogbzBpaTFJICsgTzAwb29vb28wMCAuIG8wMDBPMG8gLyBpaUlJMTFpMUkxSUlpCiAgIGlmIDIyIC0gMjI6IGkxMUlpaSAtIGkxMUlpaSAlIElJMTFpSWlJSUlpSSAuIE9vT28wbyArIG9vb09vb09PbzBPTwpkZWYgT28wME9PbzAwTyAoIHVybCApIDoKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdBbmltZScgLCB1cmwgKyAnJmdlbnJlPWFuaW1lJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0F1ZGlvYm9va3MnICwgdXJsICsgJyZnZW5yZT1hdWRpb2Jvb2tzJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0NvbWVkeScgLCB1cmwgKyAnJmdlbnJlPWNvbWVkeScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdDb21pY3MnICwgdXJsICsgJyZnZW5yZT1jb21pY3MnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnRG9jdW1lbnRhcnknICwgdXJsICsgJyZnZW5yZT1kb2N1bWVudGFyeScgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdEb3dubG9hZHMnICwgdXJsICsgJyZnZW5yZT1kb3dubG9hZHMnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnRm9vZCcgLCB1cmwgKyAnJmdlbnJlPWZvb2QnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnR2FtaW5nJyAsIHVybCArICcmZ2VucmU9Z2FtaW5nJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0hlYWx0aCcgLCB1cmwgKyAnJmdlbnJlPWhlYWx0aCcgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdIb3cgVG8uLi4nICwgdXJsICsgJyZnZW5yZT1ob3d0bycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdLaWRzJyAsIHVybCArICcmZ2VucmU9a2lkcycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdMaXZlIFRWJyAsIHVybCArICcmZ2VucmU9bGl2ZXR2JyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ01vdmllcycgLCB1cmwgKyAnJmdlbnJlPW1vdmllcycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdNdXNpYycgLCB1cmwgKyAnJmdlbnJlPW11c2ljJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ05ld3MnICwgdXJsICsgJyZnZW5yZT1uZXdzJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1Bob3RvcycgLCB1cmwgKyAnJmdlbnJlPXBob3RvcycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdQb2RjYXN0cycgLCB1cmwgKyAnJmdlbnJlPXBvZGNhc3RzJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1JhZGlvJyAsIHVybCArICcmZ2VucmU9cmFkaW8nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnUmVsaWdpb24nICwgdXJsICsgJyZnZW5yZT1yZWxpZ2lvbicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdTcGFjZScgLCB1cmwgKyAnJmdlbnJlPXNwYWNlJyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1Nwb3J0cycgLCB1cmwgKyAnJmdlbnJlPXNwb3J0cycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdTdWJzY3JpcHRpb24nICwgdXJsICsgJyZnZW5yZT1zdWJzY3JpcHRpb24nICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnVGVjaG5vbG9neScgLCB1cmwgKyAnJmdlbnJlPXRlY2gnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnVHJhaWxlcnMnICwgdXJsICsgJyZnZW5yZT10cmFpbGVycycgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdUViBTaG93cycgLCB1cmwgKyAnJmdlbnJlPXR2JyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ01pc2MuJyAsIHVybCArICcmZ2VucmU9b3RoZXInICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBpZiA4MSAtIDgxOiBPbzAwb28wb08gLiBvMGlpMUkgLyBPb09vMG8KIGlmIEkxSWlpSSAuIGdldFNldHRpbmcgKCAnYWR1bHQnICkgPT0gJ3RydWUnIDoKICBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnWFhYJyAsIHVybCArICcmZ2VucmU9YWR1bHQnICwgJ2dyYWJfYWRkb25zJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiAgaWYgMTcgLSAxNzogaTExaUlpaUlpaSAtIElJMTFpSWlJSUlpSSAuIE9vMDBvbzBvTyAlIElJaWkxSSArIG8wbyAtIGkxMUlpaQogIGlmIDc4IC0gNzg6IG8wbyAqIElpaSAuIE9PTzBPME8wb29vb28gLyBPT08wTzBPMG9vb29vCmRlZiBPb29PT09vMCAoIG5hbWUgLCB6aXBfbGluayAsIHJlcG9fbGluayAsIHJlcG9faWQgLCBhZGRvbl9pZCAsIHByb3ZpZGVyX25hbWUgLCBmb3J1bSAsIGRhdGFfcGF0aCApIDoKIGZvcnVtID0gc3RyICggZm9ydW0gKQogcmVwb19pZCA9IHN0ciAoIHJlcG9faWQgKQogTzBPMG8wbzBvID0gMQogSUlJSUlpSSA9IDEKIE9vMDAwME8wT09vb08gPSAxCiBPMDBPTyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIGFkZG9uX2lkICkgKQogaWYgNjUgLSA2NTogTzAwb29vb28wMCAuIElJMSAqIElJSUlpaUlJMTExIC8gT28wMG9vMG9PCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBPMDBPTyApIDoKICBPT09vb28wT29vT29PID0gMQogIGlmIDkxIC0gOTE6IG9vb09vb09PbzBPTyArIG8wMDBPMG8KIGVsc2UgOgogIE9PT29vbzBPb29Pb08gPSAwCiAgaWYgNTkgLSA1OTogbzAwME8wbyArIGkxMWlJaWlJaWkgKyBPMDBvb29vbzAwIC8gbzBvCiBJMTFpSWlJMSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIEkxMWkxSTFJICwgbmFtZSArICcuemlwJyApICkKIG9vMG9vb09vID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgYWRkb25faWQgKSApCiBpZiA1OSAtIDU5OiBPb09vMG8gLSBvMGlpMUkgLSBpMTFJaWkKIEkxMSAuIGNyZWF0ZSAoICJJbnN0YWxsaW5nIEFkZG9uIiAsICJQbGVhc2Ugd2FpdCB3aGlsc3QgeW91ciBhZGRvbiBpcyBpbnN0YWxsZWQiICwgJycgLCAnJyApCiBpZiA0OCAtIDQ4OiBPMDBvb29vbzAwICsgbzBvICUgSWlpIC8gaWlJSTExaTFJMUlJaSAtIG8waWkxSQogdHJ5IDoKICBkb3dubG9hZGVyIC4gZG93bmxvYWQgKCByZXBvX2xpbmsgLCBJMTFpSWlJMSAsIEkxMSApCiAgZXh0cmFjdCAuIGFsbCAoIEkxMWlJaUkxICwgaTFpaUlJSTExMWlpICwgSTExICkKICBpZiA2NyAtIDY3OiBvb29Pb29PT28wT08gJSBvMGlpMUkgLiBJSTEgKyBJSTExaUlpSUlJaUkgKiBvMG8gKiBJaWkKIGV4Y2VwdCA6CiAgaWYgMzYgLSAzNjogT09PME8wTzBvb29vbyArIGlpSUkxMWkxSTFJSWkKICB0cnkgOgogICBkb3dubG9hZGVyIC4gZG93bmxvYWQgKCB6aXBfbGluayAsIEkxMWlJaUkxICwgSTExICkKICAgZXh0cmFjdCAuIGFsbCAoIEkxMWlJaUkxICwgaTFpaUlJSTExMWlpICwgSTExICkKICAgaWYgNSAtIDU6IGlpSUkxMWkxSTFJSWkgKiBJaWkKICBleGNlcHQgOgogICBpZiA0NiAtIDQ2OiBpMTFJaWkKICAgdHJ5IDoKICAgIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBvbzBvb29PbyApIDoKICAgICBvcyAuIG1ha2VkaXJzICggb28wb29vT28gKQogICAgIGlmIDMzIC0gMzM6IG9vbzBPME8wMCAtIE9vbzAwb09vMG9PbyAqIElJMSAtIGlpSUkxMWkxSTFJSWkgLSBJSTExaUlpSUlJaUkKICAgIElpMWlJMTExSUkxSTEgPSBvT09PT29PTzBvICggZGF0YV9wYXRoICwgMTAgKSAuIHJlcGxhY2UgKCAnXG4nICwgJycgKSAuIHJlcGxhY2UgKCAnXHInICwgJycgKQogICAgTzBPTzBPID0gcmUgLiBjb21waWxlICggJ2hyZWY9IiguKz8pIicgLCByZSAuIERPVEFMTCApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogICAgaWYgNDkgLSA0OTogSUlpaTFJIC0gT09PME8wTzBvb29vbyAuIE8wMG9vb29vMDAgLSBJSTEKICAgIGZvciBJaTEgaW4gTzBPTzBPIDoKICAgICBvb28wb29PID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggb28wb29vT28gLCBJaTEgKSApCiAgICAgaWYgMTcgLSAxNzogb09vTzBvMDBPTzAgLiBPb28wMG9PbzBvT28gLiBpMTFJaWkgLyBvT29PMG8wME9PMAogICAgIGlmIGFkZG9uX2lkIG5vdCBpbiBJaTEgYW5kICcvJyBub3QgaW4gSWkxIDoKICAgICAgaWYgNTcgLSA1NzogbzBvCiAgICAgIHRyeSA6CiAgICAgICBJMTEgLiB1cGRhdGUgKCAwICwgIkRvd25sb2FkaW5nIFtDT0xPUj15ZWxsb3ddIiArIElpMSArICdbL0NPTE9SXScgLCAnJyAsICdQbGVhc2Ugd2FpdC4uLicgKQogICAgICAgZG93bmxvYWRlciAuIGRvd25sb2FkICggZGF0YV9wYXRoICsgSWkxICwgb29vMG9vTyAsIEkxMSApCiAgICAgICBpZiA2NyAtIDY3OiBvMG9vIC4gaTExSWlpCiAgICAgIGV4Y2VwdCA6CiAgICAgICBwcmludCAiZmFpbGVkIHRvIGluc3RhbGwiICsgSWkxCiAgICAgICBpZiA4NyAtIDg3OiBvb29Pb29PT28wT08gJSBJSUlJaWlJSTExMQogICAgIGlmICcvJyBpbiBJaTEgYW5kICcuLicgbm90IGluIElpMSBhbmQgJ2h0dHAnIG5vdCBpbiBJaTEgOgogICAgICBvbzBPT09vT28gPSBkYXRhX3BhdGggKyBJaTEKICAgICAgSUlpaUlJaTEgKCBvb28wb29PICwgb28wT09Pb09vICkKICAgICAgaWYgNTEgLSA1MTogSWlpCiAgIGV4Y2VwdCA6CiAgICBpMTEgLiBvayAoICJFcnJvciBkb3dubG9hZGluZyBhZGQtb24iICwgJ1RoZXJlIHdhcyBhbiBlcnJvciBkb3dubG9hZGluZyBbQ09MT1I9eWVsbG93XScgKyBuYW1lICwgJ1svQ09MT1JdUGxlYXNlIGNvbnNpZGVyIHVwZGF0aW5nIHRoZSBhZGQtb24gcG9ydGFsIHdpdGggZGV0YWlscyBvciByZXBvcnQgdGhlIGVycm9yIG9uIHRoZSBmb3J1bSBhdCBXV1cuTk9PQlNBTkRORVJEUy5DT00nICkKICAgIE8wTzBvMG8wbyA9IDAKICAgIGlmIDE0IC0gMTQ6IE9vMDBvbzBvTyAlIG9vb09vb09PbzBPTyAlIGlpSUkxMWkxSTFJSWkgLSBpMTFpSWlpSWlpCiBpZiBPME8wbzBvMG8gPT0gMSA6CiAgdGltZSAuIHNsZWVwICggMSApCiAgSTExIC4gdXBkYXRlICggMCAsICJbQ09MT1I9eWVsbG93XSIgKyBuYW1lICsgJ1svQ09MT1JdICBbQ09MT1I9bGltZV1TdWNjZXNzZnVsbHkgSW5zdGFsbGVkWy9DT0xPUl0nICwgJycgLCAnTm93IGluc3RhbGxpbmcgcmVwb3NpdG9yeScgKQogIHRpbWUgLiBzbGVlcCAoIDEgKQogIG8wT08wMDBvb09vID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgcmVwb19pZCApICkKICBpZiA4NiAtIDg2OiBvMG9vICogSUkxCiAgaWYgKCByZXBvX2lkICE9ICdyZXBvc2l0b3J5LnhibWMub3JnJyApIGFuZCBub3QgKCBvcyAuIHBhdGggLiBleGlzdHMgKCBvME9PMDAwb29PbyApICkgYW5kICggcmVwb19pZCAhPSAnJyApIGFuZCAoICdzdXBlcnJlcG8nIG5vdCBpbiByZXBvX2lkICkgOgogICBPb29PMG9PbyAoIHJlcG9faWQgKQogICBpZiA2NiAtIDY2OiBvMG9vICogaWlJSTExaTFJMUlJaQogIHhibWMgLiBzbGVlcCAoIDIwMDAgKQogIGlmIDI4IC0gMjg6IG8wb28gJSBJaWkgJSBvT29PMG8wME9PMCArIG8wMDBPMG8gLyBvMDAwTzBvCiAgaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggTzAwT08gKSBhbmQgT09Pb29vME9vb09vTyA9PSAwIDoKICAgT08wTzBvb09PTzAwID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9BZGRvblBvcnRhbC9kb3dubG9hZGNvdW50LnBocD9pZD0lcycgJSAoIGFkZG9uX2lkICkKICAgdHJ5IDoKICAgIG9PT09Pb09PMG8gKCBPTzBPMG9vT09PMDAgKQogICBleGNlcHQgOgogICAgcGFzcwogICAgaWYgMTcgLSAxNzogT09PME8wTzBvb29vbyAuIE9vT28wbyAuIE9PTzBPME8wb29vb28gKyBPT08wTzBPMG9vb29vIC8gaWlJSTExaTFJMUlJaSAuIGkxMUlpaQogIE9PMDBPT29PMG8gKCBuYW1lICwgYWRkb25faWQgKQogIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdVcGRhdGVMb2NhbEFkZG9ucycgKQogIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdVcGRhdGVBZGRvblJlcG9zJyApCiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ0NvbnRhaW5lci5SZWZyZXNoJyApCiAgaWYgNCAtIDQ6IE8wMG9vb29vMDAgLSBpMTFpSWlpSWlpIC8gaTExaUlpaUlpaSAvIElJMQogIGlmIElJSUlJaUkgPT0gMCA6CiAgIGkxMSAuIG9rICggbmFtZSArICIgSW5zdGFsbCBDb21wbGV0ZSIgLCAnVGhlIGFkZC1vbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkIGJ1dCcgLCAndGhlcmUgd2FzIGFuIGVycm9yIGluc3RhbGxpbmcgdGhlIHJlcG9zaXRvcnkuJyAsICdUaGlzIHdpbGwgbWVhbiB0aGUgYWRkLW9uIGZhaWxzIHRvIHVwZGF0ZScgKQogICBpZiAxMDAgLSAxMDA6IGlpSUkxMWkxSTFJSWkgKyBvMGlpMUkgLSBPT08wTzBPMG9vb29vICUgT29vMDBvT28wb09vIC4gb29vME8wTzAwCiAgaWYgT28wMDAwTzBPT29vTyA9PSAwIDoKICAgaTExIC4gb2sgKCBuYW1lICsgIiBJbnN0YWxsIENvbXBsZXRlIiAsICdUaGUgYWRkLW9uIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQgYnV0JyAsICd0aGVyZSB3YXMgYW4gZXJyb3IgaW5zdGFsbGluZyBtb2R1bGVzLicgLCAnVGhpcyBjb3VsZCByZXN1bHQgaW4gZXJyb3JzIHdpdGggdGhlIGFkZC1vbi4nICkKICAgaWYgOTIgLSA5MjogT29vMDBvT28wb09vICogSUkxIC0gT29PbzBvCiAgaWYgT28wMDAwTzBPT29vTyAhPSAwIGFuZCBJSUlJSWlJICE9IDAgYW5kIGZvcnVtICE9ICdOb25lJyA6CiAgIGkxMSAuIG9rICggbmFtZSArICIgSW5zdGFsbCBDb21wbGV0ZSIgLCAnUGxlYXNlIHN1cHBvcnQgdGhlIGRldmVsb3BlcihzKSBbQ09MT1I9ZG9kZ2VyYmx1ZV0nICsgcHJvdmlkZXJfbmFtZSAsICdbL0NPTE9SXVN1cHBvcnQgZm9yIHRoaXMgYWRkLW9uIGNhbiBiZSBmb3VuZCBhdCBbQ09MT1I9eWVsbG93XScgKyBmb3J1bSAsICdbL0NPTE9SXVtDUl1WaXNpdCBXV1cuTk9PQlNBTkRORVJEUy5DT00gZm9yIGFsbCB5b3VyIEtvZGkgbmVlZHMuJyApCiAgIGlmIDU4IC0gNTg6IElJaWkxSSArIE9PTzBPME8wb29vb28KICBpZiBPbzAwMDBPME9Pb29PICE9IDAgYW5kIElJSUlJaUkgIT0gMCBhbmQgZm9ydW0gPT0gJ05vbmUnIDoKICAgaTExIC4gb2sgKCBuYW1lICsgIiBJbnN0YWxsIENvbXBsZXRlIiAsICdQbGVhc2Ugc3VwcG9ydCB0aGUgZGV2ZWxvcGVyKHMpIFtDT0xPUj1kb2RnZXJibHVlXScgKyBwcm92aWRlcl9uYW1lICwgJ1svQ09MT1JdTm8gZGV0YWlscyBvZiBmb3J1bSBzdXBwb3J0IGhhdmUgYmVlbiBnaXZlbi4nICkKICAgaWYgMzAgLSAzMDogaTExSWlpICUgb29vME8wTzAwICogSUkxMWlJaUlJSWlJIC0gb09vTzBvMDBPTzAgKiBJSUlJaWlJSTExMSAlIGkxMUlpaQogICBpZiA0NiAtIDQ2OiBpMTFpSWlpSWlpIC0gT09PME8wTzBvb29vbyAuIG9vb09vb09PbzBPTwpkZWYgT28wT0lpMTEgKCBhZGRvbl9pZCApIDoKIHRyeSA6CiAgeGJtY2FkZG9uIC4gQWRkb24gKCBpZCA9IGFkZG9uX2lkICkgLiBnZXRBZGRvbkluZm8gKCAncGF0aCcgKQogIHJldHVybiBUcnVlCiBleGNlcHQgOgogIHJldHVybiBGYWxzZQogIGlmIDggLSA4OiBpaUlJMTFpMUkxSUlpICsgT29vMDBvT28wb09vICogSUkxMWlJaUlJSWlJICogSWlpICogbzBvIC8gT28wMG9vMG9PCiAgaWYgMjEgLSAyMTogb29vT29vT09vME9PIC8gSUkxCmRlZiBJSUkxSWlJSUkxICggYWRkb25faWQgKSA6CiBPTzBPMG9vT09PMDAgPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0FkZG9uUG9ydGFsL2Rvd25sb2FkY291bnQucGhwP2lkPSVzJyAlICggYWRkb25faWQgKQogdHJ5IDoKICBvT09PT29PTzBvICggT08wTzBvb09PTzAwICwgMTAgKQogZXhjZXB0IDoKICBwYXNzCiAgaWYgOTAgLSA5MDogaTExSWlpICsgT29vMDBvT28wb09vICogb09vTzBvMDBPTzAgLyBJSUlJaWlJSTExMSAuIG8waWkxSSArIG8waWkxSQogIGlmIDQwIC0gNDA6IGkxMUlpaSAvIElpaSAlIGkxMWlJaWlJaWkgJSBvT29PMG8wME9PMCAvIG8wMDBPMG8KZGVmIG9vT09PT28wICggbmFtZSAsIGNvbnRlbnR0eXBlcyAsIHJlcG9fbGluayAsIHJlcG9faWQgLCBhZGRvbl9pZCAsIHByb3ZpZGVyX25hbWUgLCBmb3J1bSAsIGRhdGFfcGF0aCApIDoKIGlmIDM4IC0gMzg6IElJMSAvIG9Pb08wbzAwT08wIC4gT09PME8wTzBvb29vbyAvIE8wMG9vb29vMDAgLyBpaUlJMTFpMUkxSUlpICsgSUlpaTFJCiBpZiA5NiAtIDk2OiBvb28wTzBPMDAKIGlmIE9vME9JaTExICggcmVwb19pZCApIGFuZCBub3QgT28wT0lpMTEgKCBhZGRvbl9pZCApIDoKICB4Ym1jIC4gbG9nICggJ1JlcG8gZXhpc3RzOiAlcycgJSByZXBvX2lkICkKICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnWEJNQy5SdW5QbHVnaW4ocGx1Z2luOi8vJXMpJyAlIGFkZG9uX2lkICkKICBpZiAxOCAtIDE4OiBvb28wTzBPMDAgKiBvMG8gLSBJSUlJaWlJSTExMQogIGlmIDMxIC0gMzE6IGlpSUkxMWkxSTFJSWkgLSBPT08wTzBPMG9vb29vICUgSWlpICUgb29vT29vT09vME9PCiAgaUkxaWlpID0gT09PbyAoICd5ZXNub2RpYWxvZycgKQogIGlmIDc5IC0gNzk6IElpaSAlIE9vMDBvbzBvTyAlIGlpSUkxMWkxSTFJSWkKICBpZiAyOSAtIDI5OiBJSTEgLiBvMDAwTzBvICUgb09vTzBvMDBPTzAgLSBvb28wTzBPMDAKICBpZiBPT09vICggJ29rZGlhbG9nJyApIDoKICAgeGJtYyAuIGxvZyAoICcjIyMgS29kaSBmYWlsZWQgdG8gaW5zdGFsbCBhZGQtb24nICkKICAgcmV0dXJuCiAgIGlmIDggLSA4OiBPMDBvb29vbzAwCiAgIGlmIDMyIC0gMzI6IG9vb09vb09PbzBPTyAvIE9vbzAwb09vMG9PbwogIE9PT28gKCAncHJvZ3Jlc3NkaWFsb2cnICkKICB4Ym1jIC4gc2xlZXAgKCAyMDAwICkKICBpZiBPbzBPSWkxMSAoIGFkZG9uX2lkICkgOgogICBJSUkxSWlJSUkxICggYWRkb25faWQgKQogICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnQ29udGFpbmVyLlJlZnJlc2gnICkKICBlbGlmIGlJMWlpaSA6CiAgIGkxMSAuIG9rICggJ1VOQUJMRSBUTyBJTlNUQUxMJyAsICdUaGUgbW9zdCBjb21tb24gY2F1c2UgZm9yIHRoaXMgaXMgeW91IGVpdGhlciBoYXZlIGEgYmFkIHJlcG8gb3IgbW9kdWxlIGluc3RhbGxlZCBzb21ld2hlcmUgb24geW91ciBzeXN0ZW0gb3IgdGhpcyBhZGQtb24gaXMgbm90IGRlc2lnbmVkIGZvciB0aGUgdmVyc2lvbiBvZiBLb2RpIHlvdVwncmUgcnVubmluZy4nICkKICBlbHNlIDoKICAgaTExIC4gb2sgKCAnVU5BQkxFIFRPIElOU1RBTEwnICwgJ1RoZSBtb3N0IGNvbW1vbiBjYXVzZSBmb3IgdGhpcyBpcyB0aGUgYWRkLW9uIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgb24gdGhlIHJlcG8uIElmIHlvdSBmaW5kIGFuIGFsdGVybmF0aXZlIHJlcG8gdGhhdCBoYXMgaXQgcGxlYXNlIGNvbnNpZGVyIHVwZGF0aW5nIHRoZSB0ZWFtIGF0IG5vb2JzYW5kbmVyZHMuY29tIHNvIHRoZXkgY2FuIGZpeCBpbiB0aGUgZGF0YWJhc2UuJyApCiAgIGlmIDQ1IC0gNDU6IG9Pb08wbzAwT08wICsgbzBvbyAqIGkxMWlJaWlJaWkgLyBJSTExaUlpSUlJaUkgJSBvMG8gKiBPT08wTzBPMG9vb29vCiAgIGlmIDE3IC0gMTc6IE9PTzBPME8wb29vb28KIGVsc2UgOgogIGlmIE9vME9JaTExICggYWRkb25faWQgKSA6CiAgIGlmIGkxMSAuIHllc25vICggJ0FkZC1vbiBBbHJlYWR5IEluc3RhbGxlZCcgLCAnVGhpcyBhZGQtb24gaGFzIGFscmVhZHkgYmVlbiBkZXRlY3RlZCBvbiB5b3VyIHN5c3RlbS4gV291bGQgeW91IGxpa2UgdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvbiBhbmQgcmUtaW5zdGFsbD8gVGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgZm9yIHRoaXMgdW5sZXNzIHlvdVwndmUgbWFudWFsbHkgb3BlbmVkIHVwIHRoZSBhZGQtb24gY29kZSBhbmQgZWRpdGVkIGluIGEgdGV4dCBlZGl0b3IuJyApIDoKICAgIE8wME9PID0geGJtY2FkZG9uIC4gQWRkb24gKCBpZCA9IGFkZG9uX2lkICkgLiBnZXRBZGRvbkluZm8gKCAncGF0aCcgKQogICAgaWYgODggLSA4ODogaWlJSTExaTFJMUlJaSAuIE9PTzBPME8wb29vb28gJSBJSTEgLyBJSTExaUlpSUlJaUkKICAgIGlmIDg5IC0gODk6IE9vbzAwb09vMG9PbyAvIG9vb09vb09PbzBPTwogICAgaWYgMTQgLSAxNDogSUkxMWlJaUlJSWlJIC4gbzAwME8wbyAqIGkxMUlpaSArIE9vbzAwb09vMG9PbyAtIGkxMUlpaSArIElJMTFpSWlJSUlpSQogICAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggIlhCTUMuUnVuUGx1Z2luKHBsdWdpbjovLyVzKSIgJSBhZGRvbl9pZCApCiAgICB4Ym1jIC4gc2xlZXAgKCAyMDAwICkKICAgIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICJBY3RpdmF0ZVdpbmRvdygxMDE0NikiICkKICAgIElJSUlJaUlJMSA9IHhibWNndWkgLiBXaW5kb3cgKCAxMDE0NiApCiAgICB4Ym1jIC4gc2xlZXAgKCAxMDAwICkKICAgIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICJDb250cm9sLlNldEZvY3VzKDEwMTQ2LDYpIiApCiAgICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAiQWN0aW9uKFNlbGVjdCkiICkKICAgIGlmIDQ1IC0gNDU6IG8wMDBPMG8gLyBvb28wTzBPMDAgLiBvb28wTzBPMDAKICAgIGlmIDM1IC0gMzU6IE9vT28wbyAuIElpaSAqIGkxMWlJaWlJaWkKICAgIGlmIDQ0IC0gNDQ6IGkxMWlJaWlJaWkgLyBpaUlJMTFpMUkxSUlpCiAgIGVsc2UgOgogICAgcmV0dXJuCiAgICBpZiA0MiAtIDQyOiBJSTEgKyBpaUlJMTFpMUkxSUlpICUgT29vMDBvT28wb09vICsgbzBvbwogIGlmICggcmVwb19pZCAhPSAncmVwb3NpdG9yeS54Ym1jLm9yZycgKSBhbmQgKCByZXBvX2lkICE9ICcnICkgYW5kICggJ3N1cGVycmVwbycgbm90IGluIHJlcG9faWQgKSA6CiAgIEkxMWkxMUkxaWlJSSA9IE9vb08wb09vICggcmVwb19pZCApCiAgIGlmIEkxMWkxMUkxaWlJSSA6CiAgICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnWEJNQy5SdW5QbHVnaW4ocGx1Z2luOi8vJXMpJyAlIGFkZG9uX2lkICkKICAgIGlJMWlpaSA9IE9PT28gKCAneWVzbm9kaWFsb2cnICkKICAgIE9PT28gKCAncHJvZ3Jlc3NkaWFsb2cnICkKICAgIGlmIE9vME9JaTExICggYWRkb25faWQgKSA6CiAgICAgSUlJMUlpSUlJMSAoIGFkZG9uX2lkICkKICAgICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnQ29udGFpbmVyLlJlZnJlc2gnICkKICAgIGVsaWYgaUkxaWlpIDoKICAgICBpMTEgLiBvayAoICdVTkFCTEUgVE8gSU5TVEFMTCcgLCAnVGhlIG1vc3QgY29tbW9uIGNhdXNlIGZvciB0aGlzIGlzIHlvdSBlaXRoZXIgaGF2ZSBhIGJhZCByZXBvIG9yIG1vZHVsZSBpbnN0YWxsZWQgc29tZXdoZXJlIG9uIHlvdXIgc3lzdGVtIG9yIHRoaXMgYWRkLW9uIGlzIG5vdCBkZXNpZ25lZCBmb3IgdGhlIHZlcnNpb24gb2YgS29kaSB5b3VcJ3JlIHJ1bm5pbmcuJyApCiAgICBlbHNlIDoKICAgICBpMTEgLiBvayAoICdVTkFCTEUgVE8gSU5TVEFMTCcgLCAnVGhlIG1vc3QgY29tbW9uIGNhdXNlIGZvciB0aGlzIGlzIHRoZSBhZGQtb24gaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSBvbiB0aGUgcmVwby4gSWYgeW91IGZpbmQgYW4gYWx0ZXJuYXRpdmUgcmVwbyB0aGF0IGhhcyBpdCBwbGVhc2UgY29uc2lkZXIgdXBkYXRpbmcgdGhlIHRlYW0gYXQgbm9vYnNhbmRuZXJkcy5jb20gc28gdGhleSBjYW4gZml4IGluIHRoZSBkYXRhYmFzZS4nICkKICAgICBpZiAyOCAtIDI4OiBpMTFpSWlpSWlpIC8gbzBpaTFJIC4gSUlpaTFJIC8gT29vMDBvT28wb09vCiAgICAgaWYgNzIgLSA3MjogSUkxIC8gbzAwME8wbyArIElJSUlpaUlJMTExIC8gSWlpICogSUlJSWlpSUkxMTEKICAgICBpZiAzNCAtIDM0OiBPT08wTzBPMG9vb29vICogT09PME8wTzBvb29vbyAlIElJMSArIG9vbzBPME8wMCAqIElJaWkxSSAlIElJSUlpaUlJMTExCiAgICAgaWYgMjUgLSAyNTogbzBvICsgSWlpIC4gbzBpaTFJICUgSWlpICogSUkxMWlJaUlJSWlJCiAgICAgaWYgMzIgLSAzMjogaTExaUlpaUlpaSAtIE9vT28wbwogICAgIGlmIDUzIC0gNTM6IElJMSAtIE9vMDBvbzBvTwogICAgIGlmIDg3IC0gODc6IG9vb09vb09PbzBPTyAuIG8wMDBPMG8KICAgICBpZiAxNyAtIDE3OiBJSUlJaWlJSTExMSAuIGkxMWlJaWlJaWkKICAgICBpZiA1IC0gNTogb09vTzBvMDBPTzAgKyBPT08wTzBPMG9vb29vICsgT09PME8wTzBvb29vbyAuIE9vT28wbyAtIGkxMUlpaQogICAgIGlmIDYzIC0gNjM6IG9vb09vb09PbzBPTwogICAgIGlmIDcxIC0gNzE6IE8wMG9vb29vMDAgLiBJSUlJaWlJSTExMSAqIG9vbzBPME8wMCAlIElJMSArIElJMTFpSWlJSUlpSQogICAgIGlmIDM2IC0gMzY6IE9vMDBvbzBvTwogICAgIGlmIDQ5IC0gNDk6IElJMTFpSWlJSUlpSSAvIElJMSAvIG8wMDBPMG8KICAgICBpZiA3NCAtIDc0OiBPb09vMG8gJSBvT29PMG8wME9PMAogICAgIGlmIDcgLSA3OiBPb28wMG9PbzBvT28KICAgICBpZiAyNyAtIDI3OiBvb29Pb29PT28wT08gLiBJSTEgKyBpMTFpSWlpSWlpCiAgICAgaWYgODYgLSA4NjogbzBvIC8gbzBpaTFJIC0gbzBpaTFJICsgb09vTzBvMDBPTzAgKyBvb29Pb29PT28wT08KICAgICBpZiAzMyAtIDMzOiBvMGlpMUkgLiBvb28wTzBPMDAgLiBPbzAwb28wb08gLiBPMDBvb29vbzAwCiAgICAgaWYgNDkgLSA0OTogb09vTzBvMDBPTzAKICAgICBpZiA4NCAtIDg0OiBvMG8gLSBpaUlJMTFpMUkxSUlpIC8gT09PME8wTzBvb29vbyAtIE9vT28wbwogICAgIGlmIDIxIC0gMjE6IE9PTzBPME8wb29vb28gKiBPT08wTzBPMG9vb29vICUgb09vTzBvMDBPTzAKICAgICBpZiA5NCAtIDk0OiBvMG8gKyBPb28wMG9PbzBvT28gJSBpMTFpSWlpSWlpCiAgICAgaWYgOCAtIDg6IGkxMUlpaSAqIE9PTzBPME8wb29vb28KICAgICBpZiA3MyAtIDczOiBvMGlpMUkgLyBvb29Pb29PT28wT08gLyBvMG8gLyBvMG9vCiAgICAgaWYgMTEgLSAxMTogSWlpICsgT28wMG9vMG9PIC0gSUkxIC8gbzBvbwogICAgIGlmIDM0IC0gMzQ6IGkxMUlpaQogICAgIGlmIDQ1IC0gNDU6IGkxMUlpaSAvIGlpSUkxMWkxSTFJSWkgLyBJSUlJaWlJSTExMQogICAgIGlmIDQ0IC0gNDQ6IG9Pb08wbzAwT08wIC0gSUlJSWlpSUkxMTEgLyBPb28wMG9PbzBvT28gKiBvMG9vICogaWlJSTExaTFJMUlJaQogICAgIGlmIDczIC0gNzM6IG8waWkxSSAtIG8wMDBPMG8gKiBPMDBvb29vbzAwIC8gaTExaUlpaUlpaSAqIElJMTFpSWlJSUlpSSAlIE9vbzAwb09vMG9PbwogICAgIGlmIDU2IC0gNTY6IElJMSAqIGlpSUkxMWkxSTFJSWkgLiBpaUlJMTFpMUkxSUlpIC4gb09vTzBvMDBPTzAKICAgICBpZiAyNCAtIDI0OiBpaUlJMTFpMUkxSUlpIC4gbzBvICogSUlJSWlpSUkxMTEgJSBvb28wTzBPMDAgLyBJSTExaUlpSUlJaUkKICAgICBpZiA1OCAtIDU4OiBvMDAwTzBvIC0gb09vTzBvMDBPTzAgJSBPT08wTzBPMG9vb29vIC4gbzAwME8wbyAlIG8wb28gJSBPbzAwb28wb08KICAgICBpZiA4NyAtIDg3OiBvb29Pb29PT28wT08gLSBpMTFpSWlpSWlpCiAgICAgaWYgNzggLSA3ODogaTExaUlpaUlpaSAvIElJaWkxSSAtIG8waWkxSQogICAgIGlmIDIzIC0gMjM6IG8wbwogICAgIGlmIDQwIC0gNDA6IG8waWkxSSAtIE9vbzAwb09vMG9PbyAvIGlpSUkxMWkxSTFJSWkKICAgICBpZiAxNCAtIDE0OiBvT29PMG8wME9PMAogICAgIGlmIDUgLSA1OiBvMGlpMUkgLiBJSWlpMUkgJSBJSWlpMUkKICAgICBpZiA1NiAtIDU2OiBJSTEgLSBvMG8gLSBPMDBvb29vbzAwCiAgICAgaWYgOCAtIDg6IE9vT28wbyAvIElJMTFpSWlJSUlpSSAuIG8wMDBPMG8gKyBvT29PMG8wME9PMCAvIGkxMWlJaWlJaWkKICAgICBpZiAzMSAtIDMxOiBpMTFJaWkgLSBJSWlpMUkgKyBvb28wTzBPMDAgLiBpaUlJMTFpMUkxSUlpIC8gT28wMG9vMG9PICUgSUlpaTFJCiAgICAgaWYgNiAtIDY6IE9vMDBvbzBvTyAqIGkxMWlJaWlJaWkgJSBJSWlpMUkgJSBpMTFpSWlpSWlpICsgbzBpaTFJIC8gTzAwb29vb28wMAogICAgIGlmIDUzIC0gNTM6IG8wbyArIElJaWkxSQogICBlbHNlIDoKICAgIGkxMSAuIG9rICggJ0ZhaWxlZCBJbnN0YWxsJyAsICdUaGUgcmVwb3NpdG9yeSBjb3VsZCBub3QgYmUgaW5zdGFsbGVkLCB0aGUgZGV2ZWxvcGVyIG1heSBoYXZlIGRlbGV0ZWQgaXQuIFBsZWFzZSB0cnkgdGhlIGJhY2t1cCBpbnN0YWxsIG9wdGlvbi4nICkKICAgIGlmIDcwIC0gNzA6IG9Pb08wbzAwT08wCiAgICBpZiA2NyAtIDY3OiBJSTEKZGVmIElpSWlJaTFJMSAoIHNpZ24gKSA6CiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPWdvbGRdUG9wdWxhclsvQ09MT1JdIChTaG93IHRoZSB0b3AgMTAwIG1vc3QgZG93bmxvYWRlZCBhZGQtb25zKScgLCAncG9wdWxhcicgLCAnZ3JhYl9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdbQ09MT1I9Z29sZF1CcmFuZCBOZXdbL0NPTE9SXSAoU2hvdyB0aGUgbmV3IHJlbGVhc2VzKScgLCAnbGF0ZXN0JyAsICdncmFiX2FkZG9ucycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1tDT0xPUj1nb2xkXU1hbnVhbCBTZWFyY2hbL0NPTE9SXSAoVHlwZSBpbiBhdXRob3IvbmFtZS9jb250ZW50KScgLCAnZGVzYz0nICwgJ3NlYXJjaF9hZGRvbnMnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdGaWx0ZXIgUmVzdWx0cyAoQnkgR2VucmVzKScgLCAncCcgLCAnYWRkb25fZ2VucmVzJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnRmlsdGVyIFJlc3VsdHMgKEJ5IENvdW50cmllcyknICwgJ3AnICwgJ2FkZG9uX2NvdW50cmllcycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0ZpbHRlciBSZXN1bHRzIChCeSBLb2RpIENhdGVnb3JpZXMpJyAsICdwJyAsICdhZGRvbl9jYXRlZ29yaWVzJyAsICdtYWlubWVudS9hZGRvbnMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnS29kaSBBZGQtb24gQnJvd3NlciAoSW5zdGFsbCBGcm9tIFppcCknICwgJycgLCAnaW5zdGFsbF9mcm9tX3ppcCcgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICcnICwgJ0tvZGkgQWRkLW9uIEJyb3dzZXIgKEJyb3dzZSBNeSBSZXBvc2l0b3JpZXMpJyAsICcnICwgJ2Jyb3dzZV9yZXBvcycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICcnICwgJ0tvZGkgQWRkLW9uIEJyb3dzZXIgKENoZWNrIEZvciBBZGQtb24gVXBkYXRlcyknICwgJycgLCAnY2hlY2tfdXBkYXRlcycgLCAnbWFpbm1lbnUvYWRkb25zLnBuZycgLCAnJyAsICcnICwgJycgKQogaWYgMiAtIDI6IE8wMG9vb29vMDAgLSBpMTFJaWkgKyBvMDAwTzBvIC4gbzBpaTFJICogbzBpaTFJIC8gSWlpCiBpZiA5MyAtIDkzOiBPMDBvb29vbzAwCmRlZiBvb09PT28gKCApIDoKIE9PMDAwb09vbzBPID0gWyBdCiBpSUlpaWkxMWlJaWlJID0gWyBdCiBPME9vMCA9IFsgXQogbzBvTzBvbzAwMDBPTyA9IFsgXQogSTFpMWlpMUlpSWlpID0gWyBdCiBpZiA2OSAtIDY5OiBJaWkgJSBvb29Pb29PT28wT08gLSBvMG8KIGZvciBmaWxlIGluIG9zIC4gbGlzdGRpciAoIGkxaWlJSUkxMTFpaSApIDoKICBpZiBvcyAuIHBhdGggLiBpc2RpciAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBmaWxlICkgKSBhbmQgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIGZpbGUgLCAnYWRkb24ueG1sJyApICkgOgogICBpZiAzOCAtIDM4OiBJSWlpMUkgKyBpMTFpSWlpSWlpIC8gaTExaUlpaUlpaSAlIG8wb28gLyBpMTFJaWkgJSBJSUlJaWlJSTExMQogICBpZiA3IC0gNzogT28wMG9vMG9PICogbzAwME8wbyArIE8wMG9vb29vMDAgKyBpMTFpSWlpSWlpICsgaWlJSTExaTFJMUlJaSAlIG8wMDBPMG8KICAgbzBvME8wTzAwb09PbyA9IG9wZW4gKCBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgZmlsZSAsICdhZGRvbi54bWwnICkgLCAncicgKQogICBvT28wTyA9IG8wbzBPME8wMG9PT28gLiByZWFkICggKQogICBvMG8wTzBPMDBvT09vIC4gY2xvc2UgKCApCiAgIE9PMDBPTzBvMCA9IHJlIC4gY29tcGlsZSAoICdpZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIG9PbzBPICkgWyAwIF0KICAgaWYgNTIgLSA1Mjogb09vTzBvMDBPTzAgJSBvb29Pb29PT28wT08gLSBpMTFpSWlpSWlpCiAgIHRyeSA6CiAgICBpMUlJSSA9IHhibWNhZGRvbiAuIEFkZG9uICggT08wME9PMG8wICkKICAgIEkxSSA9IGkxSUlJIC4gZ2V0QWRkb25JbmZvICggJ3R5cGUnICkgLiByZXBsYWNlICggJ3hibWMuJyAsICcnICkKICAgIE9PbzAgPSBpMUlJSSAuIGdldEFkZG9uSW5mbyAoICduYW1lJyApCiAgICBvMDBvT09vTzBvTyA9IGkxSUlJIC4gZ2V0QWRkb25JbmZvICggJ2ljb24nICkKICAgIE9PTzBvT29PME8gPSBpMUlJSSAuIGdldEFkZG9uSW5mbyAoICdkZXNjcmlwdGlvbicgKQogICAgb29vMG9vTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBmaWxlICkKICAgIGlmIDI2IC0gMjY6IElJSUlpaUlJMTExICogSUlpaTFJICUgbzBvbyAuIG8waWkxSSArIGlpSUkxMWkxSTFJSWkKICAgIE9PMDAwb09vbzBPIC4gYXBwZW5kICggJ1tDT0xPUj1nb2xkXSVzOlsvQ09MT1JdICAlcycgJSAoIEkxSSAsIE9PbzAgKSApCiAgICBpSUlpaWkxMWlJaWlJIC4gYXBwZW5kICggbzAwb09Pb08wb08gKQogICAgTzBPbzAgLiBhcHBlbmQgKCBPT08wb09vTzBPICkKICAgIG8wb08wb28wMDAwT08gLiBhcHBlbmQgKCBvb28wb29PICkKICAgIGlmIDgwIC0gODA6IGlpSUkxMWkxSTFJSWkgKiBJSUlJaWlJSTExMSArIG9Pb08wbzAwT08wICogSUkxMWlJaUlJSWlJCiAgIGV4Y2VwdCA6CiAgICB4Ym1jIC4gbG9nICggJyMjIyBBZGQtb24gRGlzYWJsZWQsIGNhbm5vdCByZW1vdmUgdW50aWwgcmVhY3RpdmF0ZWQ6ICVzJyAlIGZpbGUgKQogICAgaWYgMTYgLSAxNjogbzBvIC8gbzAwME8wbyArIG8wb28gJSBJSWlpMUkgLSBPMDBvb29vbzAwIC4gb29vT29vT09vME9PCiBpSWkxaUlJSWlJaUkgPSBPb29PbzAwMG8wbyAoICdBZGQtb25zIFRvIEZ1bGx5IFJlbW92ZScgLCBPTzAwMG9Pb28wTyAsIGlJSWlpaTExaUlpaUkgLCBPME9vMCApCiBmb3IgTzBvTzAgaW4gaUlpMWlJSUlpSWlJIDoKICBpSTFJMWlJSTFpID0gbzBvTzBvbzAwMDBPTyBbIE8wb08wIF0KICBpaUlJaWkgPSBPTzAwMG9Pb28wTyBbIE8wb08wIF0KICBJMWkxaWkxSWlJaWkgLiBhcHBlbmQgKCBbIGlpSUlpaSAsIGlJMUkxaUlJMWkgXSApCiBpZiBsZW4gKCBJMWkxaWkxSWlJaWkgKSA+IDAgOgogIG9PME9vME8wICggSTFpMWlpMUlpSWlpICkKICBpZiA0OSAtIDQ5OiBpMTFJaWkgKiBvb29Pb29PT28wT08gLyBvMGlpMUkgLyBpaUlJMTFpMUkxSUlpICogSUlpaTFJCiAgaWYgNTcgLSA1NzogSWlpIC0gb29vT29vT09vME9PIC8gaTExSWlpICUgaTExaUlpaUlpaQpkZWYgSTExb09Pb29vICggKSA6CiBJMUlpaUkgLiBvcGVuU2V0dGluZ3MgKCBzeXMgLiBhcmd2IFsgMCBdICkKIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdDb250YWluZXIuUmVmcmVzaCcgKQogaWYgODAgLSA4MDogbzAwME8wbyAtIGkxMWlJaWlJaWkKIGlmIDY5IC0gNjk6IG9vb09vb09PbzBPTyAlIElJMSAuIG8wMDBPMG8KZGVmIEkxSUlJMUlJMUkxMSAoIHZhbHVlICkgOgogSUlpMTEgPSBvT09PT29PTzBvICggJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9BZGRvblBvcnRhbC9hZHVsdC5waHAnICwgMTAgKQogb29vME8wT09PMDAwbyA9IHJlIC4gY29tcGlsZSAoICdpPSIoLis/KSInICkgLiBmaW5kYWxsICggSUlpMTEgKQogaWYgNCAtIDQ6IE8wMG9vb29vMDAgKyBpMTFJaWkgKyBPMDBvb29vbzAwCiBmb3Igb08wb28gaW4gb29vME8wT09PMDAwbyA6CiAgb08wb28gPSAnIiVzIicgJSBvTzBvbwogIGkxMUlpSUlpMTFJID0gJ3sianNvbnJwYyI6IjIuMCIsICJtZXRob2QiOiJBZGRvbnMuU2V0QWRkb25FbmFibGVkIiwicGFyYW1zIjp7ImFkZG9uaWQiOiVzLCJlbmFibGVkIjolc30sICJpZCI6MX0nICUgKCBvTzBvbyAsIHZhbHVlICkKICBvMDAwbzBPME9vMDAgPSB4Ym1jIC4gZXhlY3V0ZUpTT05SUEMgKCBpMTFJaUlJaTExSSApCiAgeGJtYyAuIGxvZyAoIGkxMUlpSUlpMTFJICkKICB4Ym1jIC4gbG9nICggJyMjIyBSRVRVUk4gJXMnICUgbzAwMG8wTzBPbzAwICkKICBpZiA2MCAtIDYwOiBJaWkKIGlmIHZhbHVlID09ICdmYWxzZScgOgogIElpSWkxaWlpaSA9ICdkaXNhYmxlZCcKIGVsc2UgOgogIElpSWkxaWlpaSA9ICdlbmFibGVkJwogaTExIC4gb2sgKCAnQURVTFQgQ09OVEVOVCAlcycgJSBJaUlpMWlpaWkgLiB1cHBlciAoICkgLCAnWW91ciBhZHVsdCByYXRlZCBhZGQtb25zIGhhdmUgbm93IGJlZW4gJXMnICUgSWlJaTFpaWlpICkKIGlmIDQ1IC0gNDU6IElJaWkxSQpkZWYgaUlpSWlpMWlpICggKSA6CiBvT28wTyA9IElJaUkxaSAoICkKIGlJSTEgPSByZSAuIGNvbXBpbGUgKCAnRXh0ZXJuYWwgc3RvcmFnZSBwYXRoID0gKC4rPyk7JyApIC4gZmluZGFsbCAoIG9PbzBPICkKIGlJSTEgPSBpSUkxIFsgMCBdIGlmICggbGVuICggaUlJMSApID4gMCApIGVsc2UgJycKIHJldHVybiBpSUkxCiBpZiA3MCAtIDcwOiBvb28wTzBPMDAgLyBJSTExaUlpSUlJaUkgJSBpMTFJaWkgLSBJSUlJaWlJSTExMQogaWYgNDcgLSA0Nzogb29vME8wTzAwCmRlZiBvMDBPb28wICggc291cmNlZmlsZSAsIGRlc3RmaWxlICwgbWVzc2FnZV9oZWFkZXIgLCBtZXNzYWdlMSAsIG1lc3NhZ2UyICwgbWVzc2FnZTMgLCBleGNsdWRlX2RpcnMgLCBleGNsdWRlX2ZpbGVzICkgOgogTzBPMDBPID0gemlwZmlsZSAuIFppcEZpbGUgKCBkZXN0ZmlsZSAsICd3JyAsIHppcGZpbGUgLiBaSVBfREVGTEFURUQgKQogaUlpMUlpID0gbGVuICggc291cmNlZmlsZSApCiBJaUkxSUlJSUkxSSA9IFsgXQogSTFJMUlpSWkxID0gWyBdCiBpZiA1OCAtIDU4OiBJaWkgLSBvb28wTzBPMDAgLSBJSTEKIEkxMSAuIGNyZWF0ZSAoIG1lc3NhZ2VfaGVhZGVyICwgbWVzc2FnZTEgLCBtZXNzYWdlMiAsIG1lc3NhZ2UzICkKIGlmIDk2IC0gOTY6IElJaWkxSQogZm9yIE9PT28wMCAsIE9vSUlpMWlJICwgb08wT29vME9vb09PbyBpbiBvcyAuIHdhbGsgKCBzb3VyY2VmaWxlICkgOgogIGlmIDcxIC0gNzE6IE9vMDBvbzBvTyArIE8wMG9vb29vMDAgKiBpaUlJMTFpMUkxSUlpICUgaWlJSTExaTFJMUlJaSAvIGlpSUkxMWkxSTFJSWkKICBmb3IgZmlsZSBpbiBvTzBPb28wT29vT09vIDoKICAgSTFJMUlpSWkxIC4gYXBwZW5kICggZmlsZSApCiAgIGlmIDU1IC0gNTU6IElJMSArIE9vT28wbyArIElJMSAqIGkxMUlpaQogb28gPSBsZW4gKCBJMUkxSWlJaTEgKQogaWYgNzMgLSA3MzogaTExSWlpICsgb29vT29vT09vME9PIC4gbzBvbwogZm9yIE9PT28wMCAsIE9vSUlpMWlJICwgb08wT29vME9vb09PbyBpbiBvcyAuIHdhbGsgKCBzb3VyY2VmaWxlICkgOgogIGlmIDQ2IC0gNDY6IG8wb28gLSBvMGlpMUkgLyBJaWkgLSBJSTEgKyBvb29Pb29PT28wT08KICBPb0lJaTFpSSBbIDogXSA9IFsgT09PT0kxaUkxaTExIGZvciBPT09PSTFpSTFpMTEgaW4gT29JSWkxaUkgaWYgT09PT0kxaUkxaTExIG5vdCBpbiBleGNsdWRlX2RpcnMgXQogIG9PME9vbzBPb29PT28gWyA6IF0gPSBbIE9vMG9PMDAgZm9yIE9vMG9PMDAgaW4gb08wT29vME9vb09PbyBpZiBPbzBvTzAwIG5vdCBpbiBleGNsdWRlX2ZpbGVzIGFuZCBub3QgJ2NyYXNobG9nJyBpbiBPbzBvTzAwIGFuZCBub3QgJ3N0YWNrdHJhY2UnIGluIE9vMG9PMDAgXQogIGlmIDggLSA4OiBvMDAwTzBvICUgbzAwME8wbyAuIElpaSAlIG8waWkxSQogIGZvciBmaWxlIGluIG9PME9vbzBPb29PT28gOgogICBpZiA0NyAtIDQ3OiBpMTFJaWkgKyBPb28wMG9PbzBvT28gJSBPb09vMG8gLiBvMG8gJSBvT29PMG8wME9PMAogICB0cnkgOgogICAgSWlJMUlJSUlJMUkgLiBhcHBlbmQgKCBmaWxlICkKICAgIGlpMTEgPSBsZW4gKCBJaUkxSUlJSUkxSSApIC8gZmxvYXQgKCBvbyApICogMTAwCiAgICBJMTEgLiB1cGRhdGUgKCAwICwgIkJhY2tpbmcgVXAiICwgJ1tDT0xPUiB5ZWxsb3ddJXNbL0NPTE9SXScgJSBPT09PSTFpSTFpMTEgLCAnUGxlYXNlIFdhaXQnICkKICAgIG9Pb28wID0gb3MgLiBwYXRoIC4gam9pbiAoIE9PT28wMCAsIGZpbGUgKQogICAgaWYgMiAtIDI6IElJMQogICBleGNlcHQgOgogICAgcHJpbnQgIlVuYWJsZSB0byBiYWNrdXAgZmlsZTogIiArIGZpbGUKICAgIGlmIDYwIC0gNjA6IG8wb28KICAgaWYgbm90ICd0ZW1wJyBpbiBPb0lJaTFpSSA6CiAgICBpZiA4MSAtIDgxOiBJaWkgJSBJSUlJaWlJSTExMQogICAgaWYgbm90IE9PMG8gaW4gT29JSWkxaUkgOgogICAgIGlmIDg3IC0gODc6IElJaWkxSSAuIElJMSAqIElpaQogICAgIHRyeSA6CiAgICAgIE9PT29vMG9vT28wME8gPSAnMDEvMDEvMTk4MCcKICAgICAgSWkxaTFJMSA9IHRpbWUgLiBzdHJmdGltZSAoICclZC8lbS8lWScgLCB0aW1lIC4gZ210aW1lICggb3MgLiBwYXRoIC4gZ2V0bXRpbWUgKCBvT29vMCApICkgKQogICAgICBpZiA5NyAtIDk3OiBPb09vMG8gLiBpMTFJaWkgLSBPb09vMG8gKyBvMDAwTzBvICogT29vMDBvT28wb09vCiAgICAgIGlmIElpMWkxSTEgPiBPT09vbzBvb09vMDBPIDoKICAgICAgIE8wTzAwTyAuIHdyaXRlICggb09vbzAgLCBvT29vMCBbIGlJaTFJaSA6IF0gKQogICAgICAgaWYgMTAgLSAxMDogSUlJSWlpSUkxMTEgKyBvMG8gJSBJSTEgLSBvMDAwTzBvCiAgICAgZXhjZXB0IDoKICAgICAgcHJpbnQgIlVuYWJsZSB0byBiYWNrdXAgZmlsZTogIiArIGZpbGUKICAgICAgaWYgNzAgLSA3MDogSUkxMWlJaUlJSWlJIC0gb29vME8wTzAwCiBPME8wME8gLiBjbG9zZSAoICkKIEkxMSAuIGNsb3NlICggKQogaWYgMiAtIDI6IElJaWkxSQogaWYgNDUgLSA0NTogSUkxIC8gaTExaUlpaUlpaQpkZWYgSTExSTFpMWlJICggc291cmNlZmlsZSAsIGRlc3RmaWxlICkgOgogTzBPMDBPID0gemlwZmlsZSAuIFppcEZpbGUgKCBkZXN0ZmlsZSAsICd3JyAsIHppcGZpbGUgLiBaSVBfREVGTEFURUQgKQogaUlpMUlpID0gbGVuICggc291cmNlZmlsZSApCiBJaUkxSUlJSUkxSSA9IFsgXQogSTFJMUlpSWkxID0gWyBdCiBpZiA5MCAtIDkwOiBPbzAwb28wb08gKiBPb28wMG9PbzBvT28gJSBPb09vMG8gKyBvb29Pb29PT28wT08KIEkxMSAuIGNyZWF0ZSAoICJCYWNraW5nIFVwIEZpbGVzIiAsICJBcmNoaXZpbmcuLi4iICwgJycgLCAnUGxlYXNlIFdhaXQnICkKIGlmIDkzIC0gOTM6IE9vT28wbyArIElJSUlpaUlJMTExCiBmb3IgT09PbzAwICwgT29JSWkxaUkgLCBvTzBPb28wT29vT09vIGluIG9zIC4gd2FsayAoIHNvdXJjZWZpbGUgKSA6CiAgaWYgMzMgLSAzMzogT09PME8wTzBvb29vbwogIGZvciBmaWxlIGluIG9PME9vbzBPb29PT28gOgogICBJMUkxSWlJaTEgLiBhcHBlbmQgKCBmaWxlICkKICAgaWYgNzggLSA3ODogT09PME8wTzBvb29vbyAvIE9vbzAwb09vMG9PbyAqIG8wb28KIG9vID0gbGVuICggSTFJMUlpSWkxICkKIGlmIDUwIC0gNTA6IElJMSAtIElJaWkxSSArIE8wMG9vb29vMDAgJSBPb09vMG8gLSBJSWlpMUkgJSBPT08wTzBPMG9vb29vCiBmb3IgT09PbzAwICwgT29JSWkxaUkgLCBvTzBPb28wT29vT09vIGluIG9zIC4gd2FsayAoIHNvdXJjZWZpbGUgKSA6CiAgaWYgNTggLSA1ODogT28wMG9vMG9PICsgSUlpaTFJCiAgZm9yIGZpbGUgaW4gb08wT29vME9vb09PbyA6CiAgIElpSTFJSUlJSTFJIC4gYXBwZW5kICggZmlsZSApCiAgIGlpMTEgPSBsZW4gKCBJaUkxSUlJSUkxSSApIC8gZmxvYXQgKCBvbyApICogMTAwCiAgIEkxMSAuIHVwZGF0ZSAoIGludCAoIGlpMTEgKSAsICJCYWNraW5nIFVwIiAsICdbQ09MT1IgeWVsbG93XSVzWy9DT0xPUl0nICUgZmlsZSAsICdQbGVhc2UgV2FpdCcgKQogICBvT29vMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCBPT09vMDAgLCBmaWxlICkKICAgaWYgNjUgLSA2NTogT29vMDBvT28wb09vIC0gT29PbzBvICUgbzBpaTFJIC0gSWlpICogb29vME8wTzAwICsgSUlJSWlpSUkxMTEKICAgaWYgbm90ICd0ZW1wJyBpbiBPb0lJaTFpSSA6CiAgICBpZiA3OSAtIDc5OiBpMTFJaWkgLiBJaWkgJSBPb09vMG8gLSBpaUlJMTFpMUkxSUlpCiAgICBpZiBub3QgT08wbyBpbiBPb0lJaTFpSSA6CiAgICAgaWYgNjkgLSA2OTogaTExSWlpIC0gbzBpaTFJIC4gaTExSWlpCiAgICAgaW1wb3J0IHRpbWUKICAgICBPT09vbzBvb09vMDBPID0gJzAxLzAxLzE5ODAnCiAgICAgSWkxaTFJMSA9IHRpbWUgLiBzdHJmdGltZSAoICclZC8lbS8lWScgLCB0aW1lIC4gZ210aW1lICggb3MgLiBwYXRoIC4gZ2V0bXRpbWUgKCBvT29vMCApICkgKQogICAgIGlmIDkgLSA5OiBvb29Pb29PT28wT08gJSBpMTFpSWlpSWlpIC8gaWlJSTExaTFJMUlJaQogICAgIGlmIElpMWkxSTEgPiBPT09vbzBvb09vMDBPIDoKICAgICAgTzBPMDBPIC4gd3JpdGUgKCBvT29vMCAsIG9Pb28wIFsgaUlpMUlpIDogXSApCiBPME8wME8gLiBjbG9zZSAoICkKIEkxMSAuIGNsb3NlICggKQogaWYgMjAgLSAyMDogb29vT29vT09vME9PICogT09PME8wTzBvb29vbyArIG8wbyAtIElJMSAuIG8wbwogaWYgNjAgLSA2MDogbzBpaTFJIC4gbzBpaTFJIC8gb29vME8wTzAwCmRlZiBJaW8wMCAoICkgOgogSWlJMWlpSUkxaTFpID0gaTExIC4gYnJvd3NlICggMyAsICdTZWxlY3QgdGhlIGZvbGRlciB5b3Ugd2FudCB0byBzY2FuJyAsICdmaWxlcycgLCAnJyAsIEZhbHNlICwgRmFsc2UgKQogaUlpMUlpID0gbGVuICggSWlJMWlpSUkxaTFpICkKIElpSTFJSUlJSTFJID0gWyBdCiBJMUkxSWlJaTEgPSBbIF0KIGlmIDE4IC0gMTg6IG8wMDBPMG8KIEkxMSAuIGNyZWF0ZSAoICdDaGVja2luZyBGaWxlIFN0cnVjdHVyZScgLCAnJyAsICdQbGVhc2Ugd2FpdC4uLicgLCAnJyApCiBpZiA4MCAtIDgwOiBvT29PMG8wME9PMCAvIElJaWkxSSAlIElpaQogb08wMDBvME9vMDAgPSBpMTEgLiB5ZXNubyAoICdEZWxldGUgb3IgU2Nhbj8nICwgJ0RvIHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgZmlsZW5hbWVzIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIG9yIHdvdWxkIHlvdSByYXRoZXIganVzdCBzY2FuIGFuZCB2aWV3IHRoZSByZXN1bHRzIGluIHRoZSBsb2c/JyAsIHllc2xhYmVsID0gJ0RlbGV0ZScgLCBub2xhYmVsID0gJ1NjYW4nICkKIGlmIDc3IC0gNzc6IElJaWkxSSArIG8wb28gLiBvT29PMG8wME9PMCAlIG8wb28KIG8wT29vb29PME8gPSBvcGVuICggb09vT29vT28wbzAgLCBtb2RlID0gJ3crJyApCiBPb09PTzBPb29PID0gb3BlbiAoIE9PT08gLCBtb2RlID0gJ3crJyApCiBpZiA5NiAtIDk2OiBvMDAwTzBvICUgTzAwb29vb28wMCAuIG8waWkxSSAuIE9PTzBPME8wb29vb28KIGZvciBPT09vMDAgLCBPb0lJaTFpSSAsIG9PME9vbzBPb29PT28gaW4gb3MgLiB3YWxrICggSWlJMWlpSUkxaTFpICkgOgogIGlmIDM3IC0gMzc6IE8wMG9vb29vMDAgLSBJSTExaUlpSUlJaUkgJSBJSTEgLyBJSTExaUlpSUlJaUkgJSBpMTFJaWkKICBmb3IgZmlsZSBpbiBvTzBPb28wT29vT09vIDoKICAgSTFJMUlpSWkxIC4gYXBwZW5kICggZmlsZSApCiAgIGlmIDQ4IC0gNDg6IGkxMWlJaWlJaWkgJSBvb29Pb29PT28wT08KIG9vID0gbGVuICggSTFJMUlpSWkxICkKIGlmIDI5IC0gMjk6IG9vbzBPME8wMCArIGkxMWlJaWlJaWkgJSBvMG8KIGZvciBPT09vMDAgLCBPb0lJaTFpSSAsIG9PME9vbzBPb29PT28gaW4gb3MgLiB3YWxrICggSWlJMWlpSUkxaTFpICkgOgogIGlmIDkzIC0gOTM6IElpaSAlIElJaWkxSQogIE9vSUlpMWlJIFsgOiBdID0gWyBPT09PSTFpSTFpMTEgZm9yIE9PT09JMWlJMWkxMSBpbiBPb0lJaTFpSSBdCiAgb08wT29vME9vb09PbyBbIDogXSA9IFsgT28wb08wMCBmb3IgT28wb08wMCBpbiBvTzBPb28wT29vT09vIF0KICBpZiA5MCAtIDkwOiBvMDAwTzBvIC0gSUkxMWlJaUlJSWlJIC8gSUlJSWlpSUkxMTEgLyBPT08wTzBPMG9vb29vIC8gbzBvCiAgZm9yIGZpbGUgaW4gb08wT29vME9vb09PbyA6CiAgIGlmIDg3IC0gODc6IElpaSAvIE9vMDBvbzBvTyArIElJaWkxSQogICBJaUkxSUlJSUkxSSAuIGFwcGVuZCAoIGZpbGUgKQogICBpaTExID0gbGVuICggSWlJMUlJSUlJMUkgKSAvIGZsb2F0ICggb28gKSAqIDEwMAogICBJMTEgLiB1cGRhdGUgKCAwICwgIkNoZWNraW5nIGZvciBub24gQVNDSUkgZmlsZXMiICwgJ1tDT0xPUiB5ZWxsb3ddJXNbL0NPTE9SXScgJSBPT09PSTFpSTFpMTEgLCAnUGxlYXNlIFdhaXQnICkKICAgaWYgOTMgLSA5MzogSUlpaTFJICsgb29vT29vT09vME9PICUgaTExSWlpCiAgIHRyeSA6CiAgICBmaWxlIC4gZW5jb2RlICggJ2FzY2lpJyApCiAgICBpZiAyMSAtIDIxOiBJSTExaUlpSUlJaUkKICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciA6CiAgICBpSWlJMUkxSUlpMTEgPSAoIHN0ciAoIE9PT28wMCApICsgJy8nICsgc3RyICggZmlsZSApICkgLiByZXBsYWNlICggJ1xcJyAsICcvJyApIC4gcmVwbGFjZSAoICc6LycgLCAnOlxcJyApCiAgICBpZiA5IC0gOTogaTExSWlpICsgb29vME8wTzAwIC0gbzBvIC8gTzAwb29vb28wMCAlIG9Pb08wbzAwT08wIC8gT28wMG9vMG9PCiAgICBwcmludCAiIG5vbi1BU0NJSSBmaWxlIHN0YXR1cyBsb2dnZWQgc3VjY2Vzc2Z1bGx5OiAiICsgaUlpSTFJMUlJaTExCiAgICBpZiBvTzAwMG8wT28wMCAhPSAxIDoKICAgICBvME9vb29vTzBPIC4gd3JpdGUgKCAnW0NPTE9SPWRvZGdlcmJsdWVdTm9uLUFTQ0lJIEZpbGU6Wy9DT0xPUl1cbicgKQogICAgIGZvciBvbzBvTzBvTyBpbiBJSWlJaTExaWlJaSAoIGlJaUkxSTFJSWkxMSAsIDc1ICkgOgogICAgICBvME9vb29vTzBPIC4gd3JpdGUgKCBvbzBvTzBvTyArICdbQ1JdJyApCiAgICAgbzBPb29vb08wTyAuIHdyaXRlICggJ1xuJyApCiAgICBpZiBvTzAwMG8wT28wMCA9PSAxIDoKICAgICB0cnkgOgogICAgICBvcyAuIHJlbW92ZSAoIGlJaUkxSTFJSWkxMSApCiAgICAgIHByaW50ICIjIyMgU1VDQ0VTUyAtIGRlbGV0ZWQgIiArIGlJaUkxSTFJSWkxMQogICAgICBvME9vb29vTzBPIC4gd3JpdGUgKCAnW0NPTE9SPWRvZGdlcmJsdWVdU1VDQ0VTU0ZVTExZIERFTEVURUQ6Wy9DT0xPUl1cbicgKQogICAgICBmb3Igb28wb08wb08gaW4gSUlpSWkxMWlpSWkgKCBpSWlJMUkxSUlpMTEgLCA3NSApIDoKICAgICAgIG8wT29vb29PME8gLiB3cml0ZSAoIG9vMG9PMG9PICsgJ1tDUl0nICkKICAgICAgbzBPb29vb08wTyAuIHdyaXRlICggJ1xuJyApCiAgICAgIGlmIDQ4IC0gNDg6IE9vMDBvbzBvTyAlIG8wbwogICAgIGV4Y2VwdCA6CiAgICAgIHByaW50ICIjIyMjIyMjIyBGQUlMRUQgVE8gUkVNT1ZFOiAiICsgaUlpSTFJMUlJaTExCiAgICAgIHByaW50ICIjIyMjIyMjIyBNYWtlIHN1cmUgeW91IG1hbnVhbGx5IHJlbW92ZSB0aGlzIGZpbGUgIyMjIyMjIyMjIyIKICAgICAgT29PT08wT29vTyAuIHdyaXRlICggJ1tDT0xPUj1yZWRdRkFJTEVEIFRPIERFTEVURTpbL0NPTE9SXVxuJyApCiAgICAgIGZvciBvbzBvTzBvTyBpbiBJSWlJaTExaWlJaSAoIGlJaUkxSTFJSWkxMSAsIDc1ICkgOgogICAgICAgT29PT08wT29vTyAuIHdyaXRlICggb28wb08wb08gKyAnW0NSXScgKQogICAgICBPb09PTzBPb29PIC4gd3JpdGUgKCAnXG4nICkKICAgICAgaWYgMyAtIDM6IE9vMDBvbzBvTyAlIElJSUlpaUlJMTExICsgaWlJSTExaTFJMUlJaQogT29PT08wT29vTyAuIGNsb3NlICggKQogbzBPb29vb08wTyAuIGNsb3NlICggKQogaWYgNDcgLSA0NzogT09PME8wTzBvb29vbyAqIG8wMDBPMG8gKiBvMG9vIC4gT29vMDBvT28wb09vCiBpZiA5NSAtIDk1OiBJSUlJaWlJSTExMSAlIE9vMDBvbzBvTyAuIE9PTzBPME8wb29vb28gJSBPb09vMG8KIG8wT29vb29PME8gPSBvcGVuICggb09vT29vT28wbzAgLCBtb2RlID0gJ3InICkKIE9PTyA9IG8wT29vb29PME8gLiByZWFkICggKQogbzBPb29vb08wTyAuIGNsb3NlICggKQogT29PT08wT29vTyA9IG9wZW4gKCBPT09PICwgbW9kZSA9ICdyJyApCiBpaTFpMWlpSSA9IE9vT09PME9vb08gLiByZWFkICggKQogT29PT08wT29vTyAuIGNsb3NlICggKQogaWYgT09PID09ICcnIGFuZCBpaTFpMWlpSSA9PSAnJyA6CiAgaTExIC4gb2sgKCAnTm8gU3BlY2lhbCBDaGFyYWN0ZXJzIEZvdW5kJyAsICdHcmVhdCBuZXdzLCBhbGwgZmlsZW5hbWVzIGluIHRoZSBwYXRoIHlvdSBzY2FubmVkIGFyZSBBU0NJSSBiYXNlZCAtIG5vIHNwZWNpYWwgY2hhcmFjdGVycyBmb3VuZC4nICkKIGVsc2UgOgogIE9vMG9PbzBvb09PT28gPSBvcGVuICggSTFJSUlpaSAsIG1vZGUgPSAndysnICkKICBPbzBvT28wb29PT09vIC4gd3JpdGUgKCBPT08gKyAnXG5cbicgKyBpaTFpMWlpSSApCiAgT28wb09vMG9vT09PbyAuIGNsb3NlICggKQogIE9vTzAwMDBvID0gb3BlbiAoIEkxSUlJaWkgLCBtb2RlID0gJ3InICkKICBvMElpMSA9IE9vTzAwMDBvIC4gcmVhZCAoICkKICBPb08wMDAwbyAuIGNsb3NlICggKQogIElJaTFJaUlJICggJ0ZpbmFsIFJlc3VsdHMnICwgbzBJaTEgKQogIG9zIC4gcmVtb3ZlICggSTFJSUlpaSApCiBvcyAuIHJlbW92ZSAoIG9Pb09vb09vMG8wICkKIG9zIC4gcmVtb3ZlICggT09PTyApCiBpZiA2NSAtIDY1OiBPbzAwb28wb08gLiBPMDBvb29vbzAwCiBpZiA5NSAtIDk1OiBvMDAwTzBvICsgbzAwME8wbyAtIElJMTFpSWlJSUlpSSAtIG9vbzBPME8wMApkZWYgaTFpICggKSA6CiBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPWRvZGdlcmJsdWVdSG93IHRvIGNyZWF0ZSBhbmQgc2hhcmUgbXkgYnVpbGRbL0NPTE9SXScgLCAnJyAsICdpbnN0cnVjdGlvbnNfMScgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnQmFjayBVcCBZb3VyIEZ1bGwgU3lzdGVtJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPWdvbGRdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bL0NPTE9SXScgLCAnJyAsICcnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICcnICwgJ0NyZWF0ZSBDb21tdW5pdHkgQnVpbGQgKGZvciBzaGFyaW5nIG9uIENQIG9ubHkpJyAsICd1cmwnICwgJ2NvbW11bml0eV9iYWNrdXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ0JhY2sgVXAgWW91ciBGdWxsIFN5c3RlbScgKQogaWYgaTFpSUlpMTFpMTExSSAoICkgOgogIE9PbzBvTzAwb29PMDAgKCAnJyAsICdDcmVhdGUgT3BlbkVMRUMgQmFja3VwIChmdWxsIGJhY2t1cCBjYW4gb25seSBiZSB1c2VkIG9uIE9wZW5FTEVDKScgLCAnbm9uZScgLCAnb3BlbmVsZWNfYmFja3VwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnJyAsICdDcmVhdGUgVW5pdmVyc2FsIEJ1aWxkIChsb2NhbCBiYWNrdXBzIG9ubHkpJyAsICdub25lJyAsICdjb21tdW5pdHlfYmFja3VwXzInICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICcnICwgJ0NyZWF0ZSBGdWxsIEJhY2t1cCAod2lsbCBvbmx5IHdvcmsgb24gVEhJUyBkZXZpY2UpJyAsICdsb2NhbCcgLCAnbG9jYWxfYmFja3VwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdCYWNrIFVwIFlvdXIgRnVsbCBTeXN0ZW0nICkKIE9PbzBvTzAwb29PMDAgKCAnJyAsICdCYWNrdXAgQWRkb25zIE9ubHknICwgJ2FkZG9ucycgLCAncmVzdG9yZV96aXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ0JhY2sgVXAgWW91ciBBZGRvbnMnICkKIE9PbzBvTzAwb29PMDAgKCAnJyAsICdCYWNrdXAgQWRkb24gRGF0YSBPbmx5JyAsICdhZGRvbl9kYXRhJyAsICdyZXN0b3JlX3ppcCcgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnQmFjayBVcCBZb3VyIEFkZG9uIFVzZXJkYXRhJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnQmFja3VwIEd1aXNldHRpbmdzLnhtbCcgLCBpaUkxSWlJICwgJ3Jlc3RvcmVfYmFja3VwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdCYWNrIFVwIFlvdXIgZ3Vpc2V0dGluZ3MueG1sJyApCiBpZiAxNiAtIDE2OiBvMDAwTzBvIC4gSUlpaTFJCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBJSTExaWlpaTFJaSApIDoKICBPT28wb08wMG9vTzAwICggJycgLCAnQmFja3VwIEZhdm91cml0ZXMueG1sJyAsIElJMTFpaWlpMUlpICwgJ3Jlc3RvcmVfYmFja3VwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdCYWNrIFVwIFlvdXIgZmF2b3VyaXRlcy54bWwnICkKICBpZiAyNyAtIDI3OiBpMTFpSWlpSWlpIC0gbzAwME8wbwogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggT08wb09vbyApIDoKICBPT28wb08wMG9vTzAwICggJycgLCAnQmFja3VwIFNvdXJjZS54bWwnICwgT08wb09vbyAsICdyZXN0b3JlX2JhY2t1cCcgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnQmFjayBVcCBZb3VyIHNvdXJjZXMueG1sJyApCiAgaWYgMzUgLSAzNTogSUkxIC0gT29PbzBvIC8gbzBvbwogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggTzBvME9vICkgOgogIE9PbzBvTzAwb29PMDAgKCAnJyAsICdCYWNrdXAgQWR2YW5jZWRzZXR0aW5ncy54bWwnICwgTzBvME9vICwgJ3Jlc3RvcmVfYmFja3VwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdCYWNrIFVwIFlvdXIgYWR2YW5jZWRzZXR0aW5ncy54bWwnICkKICBpZiA1MCAtIDUwOiBJaWkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIE8wMG8wT08gKSA6CiAgT09vMG9PMDBvb08wMCAoICcnICwgJ0JhY2t1cCBBZHZhbmNlZHNldHRpbmdzLnhtbCcgLCBPMDBvME9PICwgJ3Jlc3RvcmVfYmFja3VwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdCYWNrIFVwIFlvdXIga2V5Ym9hcmQueG1sJyApCiAgaWYgMzMgLSAzMzogbzBvCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBPME8gKSA6CiAgT09vMG9PMDBvb08wMCAoICcnICwgJ0JhY2t1cCBSc3NGZWVkcy54bWwnICwgTzBPICwgJ3Jlc3RvcmVfYmFja3VwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdCYWNrIFVwIFlvdXIgUnNzRmVlZHMueG1sJyApCiAgaWYgOTggLSA5ODogSWlpICUgT29vMDBvT28wb09vCiAgaWYgOTUgLSA5NTogSUlpaTFJIC0gT29PbzBvIC0gSUkxMWlJaUlJSWlJICsgT29PbzBvICUgb09vTzBvMDBPTzAgLiBvMDAwTzBvCmRlZiBJaWlJSWkxICggKSA6CiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQmFja3VwIE15IENvbnRlbnQnICwgJ25vbmUnICwgJ2JhY2t1cF9vcHRpb24nICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1Jlc3RvcmUgTXkgQ29udGVudCcgLCAnbm9uZScgLCAncmVzdG9yZV9vcHRpb24nICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogaWYgMjggLSAyODogbzBpaTFJCiBpZiA0NSAtIDQ1OiBvMGlpMUkgLiBvMDAwTzBvIC8gT29PbzBvIC0gaWlJSTExaTFJMUlJaSAqIElJaWkxSQpkZWYgb29PMDBvICggKSA6CiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnQWN0aXZhdGVXaW5kb3coMTAwNDAsImFkZG9uczovL3JlcG9zLyIscmV0dXJuKScgKQogaWYgNzMgLSA3Mzogb29vME8wTzAwICogb29vME8wTzAwIC8gaTExSWlpCiBpZiA0MyAtIDQzOiBvT29PMG8wME9PMCAuIE8wMG9vb29vMDAgLiBPbzAwb28wb08gKyBPT08wTzBPMG9vb29vICogSUlJSWlpSUkxMTEgKiBPT08wTzBPMG9vb29vCmRlZiBJSTExaWkgKCApIDoKIGlmIDM5IC0gMzk6IG9vbzBPME8wMCAuIG8wMDBPMG8gKiBJaWkgLSBpMTFpSWlpSWlpCiBvb28wb29PID0gb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggJzczNjM3MjY5NzA3NDJlNmQ2ZjY0NzU2YzY1MmU2Mzc5Njc3MDY2NjknICkgLCAndGFnLmNmZycgKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb29vMG9vTyApIDoKICBvMG8wTzBPMDBvT09vID0gb3BlbiAoIG9vbzBvb08gLCAncicgKQogIG9PbzBPID0gbzBvME8wTzAwb09PbyAuIHJlYWQgKCApCiAgbzBvME8wTzAwb09PbyAuIGNsb3NlICggKQogIHJldHVybiBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoIG9PbzBPICkKIGVsc2UgOgogIHJldHVybiBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoICc2ZTZjNjE2YjczNjQ2YTY2NmM2YjYxNzM2YTY0NjY2YzZhNjE2YzczNmI2YTY2NmM2YjYxNmE3MzY2JyApCiAgaWYgMSAtIDE6IG9vbzBPME8wMCAqIElpaQogIGlmIDY2IC0gNjY6IElpaSArIE8wMG9vb29vMDAgJSBPb28wMG9PbzBvT28gLiBPT08wTzBPMG9vb29vICogb09vTzBvMDBPTzAgJSBvT29PMG8wME9PMApkZWYgTzBvT08wbyAoIGxvY2FsYnVpbGRjaGVjayAsIGxvY2FsdmVyc2lvbmNoZWNrICwgaWQgLCB3ZWxjb21ldGV4dCAsIGxpdmVtc2cgKSA6CiBpaWlpSTFJaUkxSTEgKCApCiBpZiBsaXZlbXNnICE9ICdub25lJyA6CiAgdHJ5IDoKICAgZXhlYyBtZW51aXRlbQogICBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPW9yYW5nZV0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bL0NPTE9SXScgLCAnTm9uZScgLCAnJyAsICcnICwgJycgLCAnJyAsICcnICkKICBleGNlcHQgOgogICBwYXNzCiBpZiAoIE9vIC4gcmVwbGFjZSAoICclMjAnICwgJyAnICkgaW4gd2VsY29tZXRleHQgKSBhbmQgKCAnZWxjJyBpbiB3ZWxjb21ldGV4dCApIGFuZCBPbyAhPSAnJyA6CiAgT09vMG9PMDBvb08wMCAoICcnICwgd2VsY29tZXRleHQgLCAnc2hvdycgLCAndXNlcl9pbmZvJyAsICcnICwgJycgLCAnJyAsICcnICkKICBpZiAxOSAtIDE5OiBJSUlJaWlJSTExMQogaWYgaWQgIT0gJ05vbmUnIDoKICBpZiA1NSAtIDU1OiBJSTExaUlpSUlJaUkgJSBJSTExaUlpSUlJaUkgLyBPT08wTzBPMG9vb29vICUgb29vME8wTzAwIC0gbzBpaTFJIC4gaWlJSTExaTFJMUlJaQogIGlmIGlkICE9ICdMb2NhbCcgOgogICBpaWlpaTFJMUlJSTEgPSBpMW9PMDBPICggbG9jYWxidWlsZGNoZWNrICwgbG9jYWx2ZXJzaW9uY2hlY2sgLCBpZCApCiAgIGlmIDc3IC0gNzc6IGkxMWlJaWlJaWkgJSBPMDBvb29vbzAwICUgT28wMG9vMG9PCiAgIGlmIGlpaWlpMUkxSUlJMSA9PSBUcnVlIDoKICAgIGlmIDE1IC0gMTU6IElJaWkxSSAuIE9PTzBPME8wb29vb28KICAgIGlmIG5vdCAnUGFydGlhbGx5IGluc3RhbGxlZCcgaW4gbG9jYWxidWlsZGNoZWNrIDoKICAgICBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRvZGdlcmJsdWVdJyArIGxvY2FsYnVpbGRjaGVjayArICc6Wy9DT0xPUl0gW0NPTE9SPWxpbWVdTkVXIFZFUlNJT04gQVZBSUxBQkxFWy9DT0xPUl0nICwgaWQgLCAnc2hvd2luZm8nICwgJycgLCAnJyAsICcnICwgJycgKQogICAgIGlmIDcwIC0gNzA6IElJSUlpaUlJMTExIC4gaTExaUlpaUlpaSAlIElJSUlpaUlJMTExIC4gT09PME8wTzBvb29vbyAtIElJaWkxSQogICAgaWYgJyhQYXJ0aWFsbHkgaW5zdGFsbGVkKScgaW4gbG9jYWxidWlsZGNoZWNrIDoKICAgICBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRhcmtjeWFuXUN1cnJlbnQgQnVpbGQgSW5zdGFsbGVkOiBbL0NPTE9SXVtDT0xPUj1kb2RnZXJibHVlXScgKyBsb2NhbGJ1aWxkY2hlY2sgKyAnWy9DT0xPUl0nICwgaWQgLCAnc2hvd2luZm8yJyAsICcnICwgJycgLCAnJyAsICcnICkKICAgZWxzZSA6CiAgICBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRhcmtjeWFuXUN1cnJlbnQgQnVpbGQgSW5zdGFsbGVkOiBbL0NPTE9SXVtDT0xPUj1kb2RnZXJibHVlXScgKyBsb2NhbGJ1aWxkY2hlY2sgKyAnWy9DT0xPUl0nICwgaWQgLCAnc2hvd2luZm8nICwgJycgLCAnJyAsICcnICwgJycgKQogICAgaWYgMjYgLSAyNjogSUkxMWlJaUlJSWlJCiAgZWxzZSA6CiAgIGlmIDc2IC0gNzY6IE8wMG9vb29vMDAgKiBJSTEgKiBPT08wTzBPMG9vb29vICsgT29PbzBvICogT29PbzBvCiAgIGlmIGxvY2FsYnVpbGRjaGVjayA9PSAnSW5jb21wbGV0ZScgOgogICAgT09vMG9PMDBvb08wMCAoICcnICwgJ1tDT0xPUj1kYXJrY3lhbl1Zb3VyIGxhc3QgcmVzdG9yZSBpcyBub3QgeWV0IGNvbXBsZXRlZFsvQ09MT1JdJyAsICd1cmwnICwgaTFpSWlJaWkgKCApICwgJycgLCAnJyAsICcnICwgJycgKQogICAgaWYgMjAgLSAyMDogbzBpaTFJICogaTExSWlpCiAgIGVsc2UgOgogICAgT09vMG9PMDBvb08wMCAoICcnICwgJ1tDT0xPUj1kYXJrY3lhbl1DdXJyZW50IEJ1aWxkIEluc3RhbGxlZDogWy9DT0xPUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1Mb2NhbCBCdWlsZCAoJyArIGxvY2FsYnVpbGRjaGVjayArICcpWy9DT0xPUl0nICwgJycgLCAnJyAsICcnICwgJycgLCAnJyAsICcnICkKIGkxSUlJMWlJID0gMAogaWYgMzggLSAzODogSUlpaTFJIC8gaTExSWlpCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvTyApIDoKICBmb3IgT09vMCBpbiBvcyAuIGxpc3RkaXIgKCBvTyApIDoKICAgaWYgT09vMCAhPSAnTWFzdGVyJyA6CiAgICBpMUlJSTFpSSArPSAxCiAgICBpZiAxMyAtIDEzOiBJSWlpMUkKICBpZiBpMUlJSTFpSSA+IDEgOgogICBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRhcmtjeWFuXVN3aXRjaCBCdWlsZCBQcm9maWxlWy9DT0xPUl0nICwgbG9jYWxidWlsZGNoZWNrICwgJ3N3aXRjaF9wcm9maWxlX21lbnUnICwgJycgLCAnJyAsICcnICwgJycgKQogICBpZiA3NyAtIDc3OiBpMTFpSWlpSWlpIC0gSUlpaTFJIC8gb29vT29vT09vME9PIC8gaTExSWlpIC8gbzBvbwogT09vMG9PMDBvb08wMCAoICcnICwgJ1tDT0xPUj1vcmFuZ2VdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tWy9DT0xPUl0nICwgJ05vbmUnICwgJycgLCAnJyAsICcnICwgJycgLCAnJyApCiBpZiA1NiAtIDU2OiBJSTEgKiBPT08wTzBPMG9vb29vCiBpZiBub3QgJ2VsYycgaW4gd2VsY29tZXRleHQgOgogIE9PbzBvTzAwb29PMDAgKCAnJyAsIHdlbGNvbWV0ZXh0ICwgJ05vbmUnICwgJ3JlZ2lzdGVyJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9eWVsbG93XVNldHRpbmdzWy9DT0xPUl0nICwgJ3NldHRpbmdzJyAsICdhZGRvbl9zZXR0aW5ncycgLCAnbWFpbm1lbnUvc2V0dGluZ3MucG5nJyAsICcnICwgJycgLCAnJyApCiBpZiA4NSAtIDg1OiBJSTEgJSBJaWkgKiBJSWlpMUkKIGlmIDQ0IC0gNDQ6IElJaWkxSSAuIG9Pb08wbzAwT08wICsgT29PbzBvIC4gaTExSWlpCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQWRkLW9uIFBvcnRhbCcgLCAnJyAsICdhZGRvbm1lbnUnICwgJ21haW5tZW51L2FkZG9ucy5wbmcnICwgJycgLCAnJyAsICcnICkKIGlmIDcgLSA3OiBvT29PMG8wME9PMCArIElJaWkxSSAqIG8wbyAqIG8wbyAvIE9vbzAwb09vMG9PbyAtIElJSUlpaUlJMTExCiBpZiB4Ym1jIC4gZ2V0Q29uZFZpc2liaWxpdHkgKCAnc3lzdGVtLnBsYXRmb3JtLmFuZHJvaWQnICkgOgogIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdBcHAgSW5zdGFsbGVyJyAsICcnICwgJ2FwcF9pbnN0YWxsZXInICwgJ21haW5tZW51L2FwcHMucG5nJyAsICcnICwgJycgLCAnJyApCiAgaWYgNjUgLSA2NTogb29vT29vT09vME9PICsgSWlpICsgT29vMDBvT28wb09vCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQ29tbXVuaXR5IEJ1aWxkcycgLCAnJyAsICdDQl9NZW51JyAsICdtYWlubWVudS9idWlsZHMucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnS2V5d29yZCBJbnN0YWxsZXInICwgJycgLCAnbmFuX21lbnUnICwgJ21haW5tZW51L2tleXdvcmQucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnVHV0b3JpYWxzJyAsICcnICwgJ3R1dG9yaWFsX3Jvb3RfbWVudScgLCAnbWFpbm1lbnUvdHV0cy5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdNYWludGVuYW5jZScgLCAnbm9uZScgLCAndG9vbHMnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogaWYgNzcgLSA3NzogT29vMDBvT28wb09vCiBpZiA1MCAtIDUwOiBPT08wTzBPMG9vb29vIC4gT09PME8wTzBvb29vbyAuIGkxMUlpaSAlIGlpSUkxMWkxSTFJSWkKZGVmIG9vbzAwMG9PTyAoICkgOgogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb08wT28gKSA6CiAgc2h1dGlsIC4gcm10cmVlICggb08wT28gKQogIGlmIDI3IC0gMjc6IG8waWkxSSAqIGkxMWlJaWlJaWkgKiBvMG9vCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggb08wT28gKSA6CiAgb3MgLiBtYWtlZGlycyAoIG9PME9vICkKICBpZiA5MiAtIDkyOiBpaUlJMTFpMUkxSUlpIC8gaTExaUlpaUlpaSArIG9Pb08wbzAwT08wCiBvT28wT28wTzBPID0gSUlJMUlJMWkgKCApCiBpSTFpMUlpSUlJSWkgPSBvT09PT29PTzBvICggJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9BZGRvblBvcnRhbC9hcHByb3ZlZC5waHAnICwgMTAgKQogaWYgNjUgLSA2NTogT09PME8wTzBvb29vbyAqIG8wMDBPMG8gLyBvMDAwTzBvIC4gSWlpCiBJMTEgLiBjcmVhdGUgKCAnQmFja2luZyBVcCBBZGQtb25zJyAsICcnICwgJ1BsZWFzZSBXYWl0Li4uJyApCiBpZiA4NyAtIDg3OiBPb28wMG9PbzBvT28gKiBvT29PMG8wME9PMCAlIGlpSUkxMWkxSTFJSWkgKiBpaUlJMTFpMUkxSUlpCiBmb3IgT09vMCBpbiBvcyAuIGxpc3RkaXIgKCBpMWlpSUlJMTExaWkgKSA6CiAgaWYgNTggLSA1ODogSUkxMWlJaUlJSWlJIC4gbzBpaTFJICsgbzAwME8wbyAlIGlpSUkxMWkxSTFJSWkgLSBvMG9vCiAgaWYgNTAgLSA1MDogb29vME8wTzAwICUgT29vMDBvT28wb09vIC0gaTExSWlpIC4gTzAwb29vb28wMCArIE9PTzBPME8wb29vb28gJSBvb28wTzBPMDAKICBpZiBub3QgJ3RvdGFsaW5zdGFsbGVyJyBpbiBPT28wIGFuZCBub3QgJ3BsdWdpbi5wcm9ncmFtLnRicycgaW4gT09vMCBhbmQgbm90ICdwYWNrYWdlcycgaW4gT09vMCBhbmQgb3MgLiBwYXRoIC4gaXNkaXIgKCBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgT09vMCApICkgOgogICBpZiAxMCAtIDEwOiBvb28wTzBPMDAgLiBPMDBvb29vbzAwICsgSUlJSWlpSUkxMTEKICAgaWYgNjYgLSA2NjogbzBvbyAlIG8waWkxSQogICBpZiBPT28wIGluIGlJMWkxSWlJSUlJaSBhbmQgbm90IE9PbzAgaW4gb09vME9vME8wTyBhbmQgbm90ICdyZXBvLicgaW4gT09vMCBhbmQgbm90ICdyZXBvc2l0b3J5LicgaW4gT09vMCBhbmQgb3MgLiBwYXRoIC4gaXNkaXIgKCBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgT09vMCApICkgOgogICAgaWYgMjEgLSAyMTogSWlpIC0gSUkxICUgaTExaUlpaUlpaQogICAgaWYgNzEgLSA3MTogTzAwb29vb28wMCAtIG8wbyAqIE9vT28wbyArIG9vb09vb09PbzBPTyAtIG8wb28gJSBvT29PMG8wME9PMAogICAgaWYgbm90ICdzZXJ2aWNlLnhibWMudmVyc2lvbmNoZWNrJyBpbiBPT28wIGFuZCBub3QgJ3BhY2thZ2VzJyBpbiBPT28wIGFuZCBvcyAuIHBhdGggLiBpc2RpciAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBPT28wICkgKSA6CiAgICAgaWYgNjMgLSA2MzogSUlpaTFJICsgSUkxMWlJaUlJSWlJIC4gbzBvbyAvIG8wMDBPMG8KICAgICB0cnkgOgogICAgICBJMTEgLiB1cGRhdGUgKCAwICwgIkJhY2tpbmcgVXAiICwgJ1tDT0xPUiB5ZWxsb3ddJXNbL0NPTE9SXScgJSBPT28wICwgJ1BsZWFzZSBXYWl0Li4uJyApCiAgICAgIG9zIC4gbWFrZWRpcnMgKCBvcyAuIHBhdGggLiBqb2luICggb08wT28gLCBPT28wICkgKQogICAgICBpZiA4NCAtIDg0OiBPMDBvb29vbzAwCiAgICAgIGlJMUkxaUlJMWkgPSBvcyAuIHBhdGggLiBqb2luICggb08wT28gLCBPT28wICwgJ2FkZG9uLnhtbCcgKQogICAgICBJaUlJaWlpMUkgPSBvcyAuIHBhdGggLiBqb2luICggb08wT28gLCBPT28wICwgJ2RlZmF1bHQucHknICkKICAgICAgb29vb28wT28wID0gb3BlbiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBPT28wICwgJ2FkZG9uLnhtbCcgKSAsIG1vZGUgPSAncicgKQogICAgICBvT28wTyA9IG9vb29vME9vMCAuIHJlYWQgKCApCiAgICAgIG9vb29vME9vMCAuIGNsb3NlICggKQogICAgICBpZiA5NyAtIDk3OiBPbzAwb28wb08gLiBvb29Pb29PT28wT08gLiBPbzAwb28wb08KICAgICAgb09vMDBvID0gcmUgLiBjb21waWxlICggJyBuYW1lPSIoLis/KSInICkgLiBmaW5kYWxsICggb09vME8gKQogICAgICBJSTExMWkxaWkxaUlJID0gcmUgLiBjb21waWxlICggJ3Byb3ZpZGVyLW5hbWU9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBvT28wTyApCiAgICAgIG9vbzBPb08gPSByZSAuIGNvbXBpbGUgKCAnPGFkZG9uW1xzXFNdKj8iPicgKSAuIGZpbmRhbGwgKCBvT28wTyApCiAgICAgIGlpSTExMTFJMTFpMUkgPSByZSAuIGNvbXBpbGUgKCAnPGRlc2NyaXB0aW9uW1xzXFNdKj88XC9kZXNjcmlwdGlvbj4nICkgLiBmaW5kYWxsICggb09vME8gKQogICAgICBvMG9vb29PMG8wTyA9IG9PbzAwbyBbIDAgXSBpZiAoIGxlbiAoIG9PbzAwbyApID4gMCApIGVsc2UgJ05vbmUnCiAgICAgIG8wMDAwb08gPSBJSTExMWkxaWkxaUlJIFsgMCBdIGlmICggbGVuICggSUkxMTFpMWlpMWlJSSApID4gMCApIGVsc2UgJ0Fub255bW91cycKICAgICAgTzAwb09vME8wbzAwTyA9IG9vbzBPb08gWyAwIF0gaWYgKCBsZW4gKCBvb28wT29PICkgPiAwICkgZWxzZSAnTm9uZScKICAgICAgaUkxSUkgPSBpaUkxMTExSTExaTFJIFsgMCBdIGlmICggbGVuICggaWlJMTExMUkxMWkxSSApID4gMCApIGVsc2UgJ05vbmUnCiAgICAgIGlmIDkxIC0gOTE6IE9vbzAwb09vMG9PbyAqIG9vbzBPME8wMCAuIE8wMG9vb29vMDAKICAgICAgSUkxMUlpMTExSUkxID0gJzxhZGRvbiBpZD0iJyArIE9PbzAgKyAnIiBuYW1lPSInICsgbzBvb29vTzBvME8gKyAnIiB2ZXJzaW9uPSIwIiBwcm92aWRlci1uYW1lPSInICsgbzAwMDBvTyArICciPicKICAgICAgT09PMG9Pb08wTyA9ICc8ZGVzY3JpcHRpb24+SWYgeW91XCdyZSBzZWVpbmcgdGhpcyBtZXNzYWdlIGl0IG1lYW5zIHRoZSBhZGQtb24gaXMgc3RpbGwgdXBkYXRpbmcsIHBsZWFzZSB3YWl0IGZvciB0aGUgdXBkYXRlIHByb2Nlc3MgdG8gY29tcGxldGUuPC9kZXNjcmlwdGlvbj4nCiAgICAgIGlmIDcyIC0gNzI6IG9vbzBPME8wMCAlIG8waWkxSSAlIG9vb09vb09PbzBPTyArIG8wbyAlIGkxMWlJaWlJaWkgKyBPT08wTzBPMG9vb29vCiAgICAgIGlmIE8wMG9PbzBPMG8wME8gIT0gJ05vbmUnIDoKICAgICAgIGlJSUlpSWkgPSBvT28wTyAuIHJlcGxhY2UgKCBpSTFJSSAsIE9PTzBvT29PME8gKSAuIHJlcGxhY2UgKCBPMDBvT28wTzBvMDBPICwgSUkxMUlpMTExSUkxICkKICAgICAgIGlmIDY1IC0gNjU6IElJaWkxSSAlIG9vb09vb09PbzBPTyArIE9PTzBPME8wb29vb28gLyBJSTEKICAgICAgZWxzZSA6CiAgICAgICBpSUlJaUlpID0gb09vME8gLiByZXBsYWNlICggaUkxSUkgLCBPT08wb09vTzBPICkKICAgICAgIGlmIDUyIC0gNTI6IElJSUlpaUlJMTExICUgSUkxMWlJaUlJSWlJICogbzAwME8wbyAlIG8wbyArIElJMTFpSWlJSUlpSSAvIG9vbzBPME8wMAogICAgICBvbzBPMCA9IG9wZW4gKCBpSTFJMWlJSTFpICwgbW9kZSA9ICd3KycgKQogICAgICBvbzBPMCAuIHdyaXRlICggc3RyICggaUlJSWlJaSApICkKICAgICAgb28wTzAgLiBjbG9zZSAoICkKICAgICAgb28wMDBvT08wMG8wb09PID0gb3BlbiAoIElpSUlpaWkxSSAsIG1vZGUgPSAndysnICkKICAgICAgb28wMDBvT08wMG8wb09PIC4gd3JpdGUgKCAnaW1wb3J0IHhibWNwbHVnaW4seGJtY2d1aSx4Ym1jLHhibWNhZGRvbixvcyxzeXNcbkFkZG9uSUQ9IicgKyBPT28wICsgJyJcbkFkZG9uTmFtZT0iJyArIG8wb29vb08wbzBPICsgJyJcbmRpYWxvZz14Ym1jZ3VpLkRpYWxvZygpXG5kaWFsb2cub2soQWRkb25OYW1lKyIgQWRkLW9uIFJlcXVpcmVzIFVwZGF0ZSIsIlRoaXMgYWRkLW9uIG1heSBzdGlsbCBiZSBpbiB0aGUgcHJvY2VzcyBvZiB0aGUgdXBkYXRpbmcgc28gd2UgcmVjb21tZW5kIHdhaXRpbmcgYSBmZXcgbWludXRlcyB0byBzZWUgaWYgaXQgdXBkYXRlcyBuYXR1cmFsbHkuIElmIGl0IGhhc25cJ3QgdXBkYXRlZCBhZnRlciA1bWlucyBwbGVhc2UgdHJ5IHJlaW5zdGFsbGluZyB2aWEgdGhlIENvbW11bml0eSBQb3J0YWwgYWRkLW9uIilcbnhibWNwbHVnaW4uZW5kT2ZEaXJlY3RvcnkoaW50KHN5cy5hcmd2WzFdKSknICkKICAgICAgb28wMDBvT08wMG8wb09PIC4gY2xvc2UgKCApCiAgICAgIGlmIDI3IC0gMjc6IGlpSUkxMWkxSTFJSWkKICAgICBleGNlcHQgOgogICAgICBwcmludCAiIyMjIEZhaWxlZCB0byBiYWNrdXA6ICIgKyBPT28wCiAgICAgIGlmIDk1IC0gOTU6IG8wbwogICAgICBpZiA0NCAtIDQ0OiBJSTExaUlpSUlJaUkgKyBvMG8gLiBPbzAwb28wb08gLyBPb28wMG9PbzBvT28gJSBJSWlpMUkgKyBPbzAwb28wb08KICAgZWxzZSA6CiAgICB0cnkgOgogICAgIHNodXRpbCAuIGNvcHl0cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIE9PbzAgKSAsIG9zIC4gcGF0aCAuIGpvaW4gKCBvTzBPbyAsIE9PbzAgKSApCiAgICBleGNlcHQgOgogICAgIHByaW50ICIjIyMgRmFpbGVkIHRvIGNvcHk6ICIgKyBPT28wCiAgICAgaWYgNjEgLSA2MTogSUkxMWlJaUlJSWlJIC8gbzBvbyArIE9vbzAwb09vMG9PbyAuIG9vb09vb09PbzBPTyAvIGlpSUkxMWkxSTFJSWkgKiBJSTExaUlpSUlJaUkKIEkxMSAuIGNsb3NlICggKQogaWYgNDYgLSA0NjogSUlpaTFJCiBJMTExaWlpaWkxID0gIkNyZWF0aW5nIEJhY2t1cCIKIE9PMG9vT29PTzBPT28gPSAiQXJjaGl2aW5nLi4uIgogT29vT29vb28wMDAwID0gIiIKIEkxaWkxaTExaSA9ICJQbGVhc2UgV2FpdCIKIGlmIDg2IC0gODY6IE9PTzBPME8wb29vb28gJSBPMDBvb29vbzAwIC4gT29vMDBvT28wb09vIC4gbzBvCiBvMDBPb28wICggb08wT28gLCBvT09vbzBPbyAsIEkxMTFpaWlpaTEgLCBPTzBvb09vT08wT09vICwgT29vT29vb28wMDAwICwgSTFpaTFpMTFpICwgJycgLCAnJyApCiBpZiA0NCAtIDQ0OiBpMTFpSWlpSWlpICogbzBvICsgSWlpICsgT28wMG9vMG9PICogT09PME8wTzBvb29vbyAuIE9vMDBvbzBvTwogdHJ5IDoKICBzaHV0aWwgLiBybXRyZWUgKCBvTzBPbyApCiAgaWYgMTkgLSAxOTogT29vMDBvT28wb09vIC0gT28wMG9vMG9PCiBleGNlcHQgOgogIHByaW50ICIjIyMgQ09NTVVOSVRZIEJVSUxEUzogRmFpbGVkIHRvIHJlbW92ZSB0ZW1wIGFkZG9ucyBmb2xkZXIgLSBtYW51YWwgZGVsZXRlIHJlcXVpcmVkICMjIyIKICBpZiA1OSAtIDU5OiBvMGlpMUkgKiBvMG9vIC0gSUlJSWlpSUkxMTEgLiBJSTExaUlpSUlJaUkKICBpZiA4OSAtIDg5OiBJSTExaUlpSUlJaUkKZGVmIG8wMG9vME9PMCAoIHVybCApIDoKIEkxMSAuIGNyZWF0ZSAoICdDbGVhbmluZyBUZW1wIFBhdGhzJyAsICcnICwgJ1BsZWFzZSB3YWl0Li4uJyApCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvTzBPbyApIDoKICBzaHV0aWwgLiBybXRyZWUgKCBvTzBPbyApCiAgaWYgNjAgLSA2MDogaTExSWlpCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggb08wT28gKSA6CiAgb3MgLiBtYWtlZGlycyAoIG9PME9vICkKICBpZiA2NiAtIDY2OiBvMG8gLyBpMTFJaWkgJSBPMDBvb29vbzAwIC0gb29vT29vT09vME9PIC4gT09PME8wTzBvb29vbyAvIE9PTzBPME8wb29vb28KIGV4dHJhY3QgLiBhbGwgKCBvT09vbzBPbyAsIG9PME9vICwgSTExICkKIGlmIDk2IC0gOTY6IElJMSArIE9vMDBvbzBvTyAqIE9PTzBPME8wb29vb28KIGZvciBPT28wIGluIG9zIC4gbGlzdGRpciAoIG9PME9vICkgOgogIGlmIDg2IC0gODY6IElJSUlpaUlJMTExCiAgaWYgbm90ICd0b3RhbGluc3RhbGxlcicgaW4gT09vMCBhbmQgbm90ICdwbHVnaW4ucHJvZ3JhbS50YnMnIGluIE9PbzAgOgogICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIE9PbzAgKSApIDoKICAgIG9zIC4gcmVuYW1lICggb3MgLiBwYXRoIC4gam9pbiAoIG9PME9vICwgT09vMCApICwgb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIE9PbzAgKSApCiAgICBJMTEgLiB1cGRhdGUgKCAwICwgIkluc3RhbGxpbmc6IFtDT0xPUj15ZWxsb3ddIiArIE9PbzAgKyAnWy9DT0xPUl0nICwgJycgLCAnUGxlYXNlIHdhaXQuLi4nICkKICAgIHByaW50ICIjIyMgU3VjY2Vzc2Z1bGx5IGluc3RhbGxlZDogIiArIE9PbzAKICAgIGlmIDI5IC0gMjk6IElJaWkxSSAtIG8wb28gKyBvMDAwTzBvICUgSUlpaTFJICUgSUkxMWlJaUlJSWlJCiAgIGVsc2UgOgogICAgcHJpbnQgIiMjIyAiICsgT09vMCArICIgQWxyZWFkeSBleGlzdHMgb24gc3lzdGVtIgogICAgaWYgODQgLSA4NDogT28wMG9vMG9PICsgb09vTzBvMDBPTzAgKyBJSUlJaWlJSTExMSArIG9vbzBPME8wMAogICAgaWYgNjIgLSA2MjogaTExaUlpaUlpaSArIElpaSArIE8wMG9vb29vMDAKZGVmIG9PT29PME8gKCB3ZWxjb21ldGV4dCApIDoKIGlmIHhibWMgLiBnZXRDb25kVmlzaWJpbGl0eSAoICdzeXN0ZW0ucGxhdGZvcm0uYW5kcm9pZCcgKSA6CiAgaUlJMSA9IGlJaUlpaTFpaSAoICkKICBpMUlpaWlpaUlpSUkgPSBvcyAuIHBhdGggLiBqb2luICggaUlJMSAsICdEb3dubG9hZCcgKQogIHRyeSA6CiAgIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBpMUlpaWlpaUlpSUkgKSA6CiAgICBvcyAuIG1ha2VkaXJzICggaTFJaWlpaWlJaUlJICkKICBleGNlcHQgOgogICB4Ym1jIC4gbG9nICggIiMjIyBGYWlsZWQgdG8gbWFrZSBkb3dubG9hZCBmb2xkZXIiICkKICAgaWYgMjYgLSAyNjogbzBpaTFJIC4gSUlpaTFJCiBvT28wSTFJaTExaSA9IHhibWMgLiBnZXRJbmZvTGFiZWwgKCAiU3lzdGVtLkJ1aWxkVmVyc2lvbiIgKQogSTFpSWlpaUkxID0gZmxvYXQgKCBvT28wSTFJaTExaSBbIDogMiBdICkKIElJSUlJbzBvb09vTzAwMG9PID0gaW50ICggSTFpSWlpaUkxICkKIGlmIDg3IC0gODc6IElpaSAtIGkxMUlpaSAtIElJMTFpSWlJSUlpSSArIGlpSUkxMWkxSTFJSWkgJSBJSWlpMUkgLyBpMTFpSWlpSWlpCiBpZiBJMTFpMTFJaSA9PSAndHJ1ZScgOgogIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1TaG93IE15IFByaXZhdGUgTGlzdFsvQ09MT1JdJyAsICcmdmlzaWJpbGl0eT1wcml2YXRlJyAsICdncmFiX2J1aWxkcycgLCAnbWFpbm1lbnUvYnVpbGRzLnBuZycgLCAnJyAsICcnICwgJycgKQogIGlmIDEyIC0gMTI6IGkxMUlpaQogaWYgKCBJSUlJSW8wb29Pb08wMDBvTyA8IDE0ICkgb3IgKCBJaWlJSUkxMTFpSSA9PSAndHJ1ZScgKSA6CiAgT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1tDT0xPUj1kb2RnZXJibHVlXVNob3cgQWxsIEdvdGhhbSBDb21wYXRpYmxlIEJ1aWxkc1svQ09MT1JdJyAsICcmeGJtYz1nb3RoYW0mdmlzaWJpbGl0eT1wdWJsaWMnICwgJ2dyYWJfYnVpbGRzJyAsICdtYWlubWVudS9idWlsZHMucG5nJyAsICcnICwgJycgLCAnJyApCiAgaWYgODYgLSA4Njogb29vT29vT09vME9PIC0gbzBvbwogaWYgKCBJSUlJSW8wb29Pb08wMDBvTyA9PSAxNCApIG9yICggSWlpSUlJMTExaUkgPT0gJ3RydWUnICkgOgogIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1TaG93IEFsbCBIZWxpeCBDb21wYXRpYmxlIEJ1aWxkc1svQ09MT1JdJyAsICcmeGJtYz1oZWxpeCZ2aXNpYmlsaXR5PXB1YmxpYycgLCAnZ3JhYl9idWlsZHMnICwgJ21haW5tZW51L2J1aWxkcy5wbmcnICwgJycgLCAnJyAsICcnICkKICBpZiA2MyAtIDYzOiBvMDAwTzBvIC8gSWlpICsgSUkxIC4gbzBvIC4gaTExSWlpCiBpZiAoIElJSUlJbzBvb09vTzAwMG9PID09IDE1ICkgb3IgKCBJaWlJSUkxMTFpSSA9PSAndHJ1ZScgKSA6CiAgT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1tDT0xPUj1kb2RnZXJibHVlXVNob3cgQWxsIElzZW5nYXJkIENvbXBhdGlibGUgQnVpbGRzWy9DT0xPUl0nICwgJyZ4Ym1jPWlzZW5nYXJkJnZpc2liaWxpdHk9cHVibGljJyAsICdncmFiX2J1aWxkcycgLCAnbWFpbm1lbnUvYnVpbGRzLnBuZycgLCAnJyAsICcnICwgJycgKQogaWYgKCBJSUlJSW8wb29Pb08wMDBvTyA9PSAxNiApIG9yICggSWlpSUlJMTExaUkgPT0gJ3RydWUnICkgOgogIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1TaG93IEFsbCBKYXJ2aXMgQ29tcGF0aWJsZSBCdWlsZHNbL0NPTE9SXScgLCAnJnhibWM9amFydmlzJnZpc2liaWxpdHk9cHVibGljJyAsICdncmFiX2J1aWxkcycgLCAnbWFpbm1lbnUvYnVpbGRzLnBuZycgLCAnJyAsICcnICwgJycgKQogIGlmIDQ4IC0gNDg6IE8wMG9vb29vMDAgLSBvb28wTzBPMDAgLSBpMTFpSWlpSWlpIC4gbzBvIC0gb29vME8wTzAwICogbzBvCiBpZiBpMWkxSUkgPT0gJ2ZhbHNlJyA6CiAgT09vMG9PMDBvb08wMCAoICcnICwgJ1tDT0xPUj1nb2xkXUhvdyB0byBmaXggYnVpbGRzIGJyb2tlbiBvbiBvdGhlciB3aXphcmRzIVsvQ09MT1JdJyAsICcnICwgJ2luc3RydWN0aW9uc181JyAsICdtYWlubWVudS9idWlsZHMucG5nJyAsICcnICwgJycgLCAnJyApCiBpZiBPMG9vME9PMCAhPSAnJyBhbmQgaTFpMUlJID09ICd0cnVlJyA6CiAgT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1tDT0xPUj1kYXJrY3lhbl1TaG93ICcgKyBJMWkxaWlJMSArICcgQnVpbGRzWy9DT0xPUl0nICwgJyZpZD0xJyAsICdncmFiX2J1aWxkcycgLCAnbWFpbm1lbnUvYnVpbGRzLnBuZycgLCAnJyAsICcnICwgJycgKQogaWYgaWlJSUlJSTFpMWlJICE9ICcnIGFuZCBpMWkxSUkgPT0gJ3RydWUnIDoKICBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRhcmtjeWFuXVNob3cgJyArIG8wb08wICsgJyBCdWlsZHNbL0NPTE9SXScgLCAnJmlkPTInICwgJ2dyYWJfYnVpbGRzJyAsICdtYWlubWVudS9idWlsZHMucG5nJyAsICcnICwgJycgLCAnJyApCiBpZiBvbzAwICE9ICcnIGFuZCBpMWkxSUkgPT0gJ3RydWUnIDoKICBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRhcmtjeWFuXVNob3cgJyArIG8wMCArICcgQnVpbGRzWy9DT0xPUl0nICwgJyZpZD0zJyAsICdncmFiX2J1aWxkcycgLCAnbWFpbm1lbnUvYnVpbGRzLnBuZycgLCAnJyAsICcnICwgJycgKQogaWYgT28wb08wb29vICE9ICcnIGFuZCBpMWkxSUkgPT0gJ3RydWUnIDoKICBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRhcmtjeWFuXVNob3cgJyArIG8wb09vTzAwbyArICcgQnVpbGRzWy9DT0xPUl0nICwgJyZpZD00JyAsICdncmFiX2J1aWxkcycgLCAnbWFpbm1lbnUvYnVpbGRzLnBuZycgLCAnJyAsICcnICwgJycgKQogaWYgaTEgIT0gJycgYW5kIGkxaTFJSSA9PSAndHJ1ZScgOgogIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdbQ09MT1I9ZGFya2N5YW5dU2hvdyAnICsgb09Pb28wME8wTyArICcgQnVpbGRzWy9DT0xPUl0nICwgJyZpZD01JyAsICdncmFiX2J1aWxkcycgLCAnbWFpbm1lbnUvYnVpbGRzLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0NyZWF0ZSBNeSBPd24gQ29tbXVuaXR5IEJ1aWxkJyAsICd1cmwnICwgJ2JhY2t1cF9vcHRpb24nICwgJ21haW5tZW51L2J1aWxkcy5wbmcnICwgJycgLCAnJyAsICdCYWNrIFVwIFlvdXIgRnVsbCBTeXN0ZW0nICkKIGlmIDYwIC0gNjA6IElpaSAvIG9Pb08wbzAwT08wICsgSUkxMWlJaUlJSWlJIC0gb29vME8wTzAwCiBpZiA0OSAtIDQ5OiBvMG9vIC0gT09PME8wTzBvb29vbyAvIG8wb28gKiBJaWkgKyBPb09vMG8KZGVmIElpaWkxSSAoIHNraW4gKSA6CiBPb28wMDAwMDAgPSAnPG9ubGVmdD4lczwvb25sZWZ0PicKIE9vMDBvb09vTyA9ICc8b25yaWdodD4lczwvb25yaWdodD4nCiBvb28wID0gJzxvbnVwPiVzPC9vbnVwPicKIGkxaWlJSWlpaUlJID0gJzxvbmRvd24+JXM8L29uZG93bj4nCiBJaTFJMSA9ICc8Y29udHJvbCB0eXBlPSJidXR0b24iIGlkPSIlcyI+JwogaWYgNzEgLSA3MTogSWlpICsgSUlpaTFJICogb29vT29vT09vME9PIC4gT29PbzBvICUgaTExaUlpaUlpaSAlIElJaWkxSQogaWYgNjMgLSA2MzogSUkxICogbzBvbyAvIG8wbyAtIG9vb09vb09PbzBPTyAuIElJaWkxSSArIG9vbzBPME8wMAogaWkxSUlpSTFJSWkgPSBbCiAoICc2NScgLCAnMTQwJyApICwKICggJzY2JyAsICcxNjQnICkgLAogKCAnNjcnICwgJzE2MicgKSAsCiAoICc2OCcgLCAnMTQyJyApICwKICggJzY5JyAsICcxMjInICkgLAogKCAnNzAnICwgJzE0MycgKSAsCiAoICc3MScgLCAnMTQ0JyApICwKICggJzcyJyAsICcxNDUnICkgLAogKCAnNzMnICwgJzEyNycgKSAsCiAoICc3NCcgLCAnMTQ2JyApICwKICggJzc1JyAsICcxNDcnICkgLAogKCAnNzYnICwgJzE0OCcgKSAsCiAoICc3NycgLCAnMTY2JyApICwKICggJzc4JyAsICcxNjUnICkgLAogKCAnNzknICwgJzEyOCcgKSAsCiAoICc4MCcgLCAnMTI5JyApICwKICggJzgxJyAsICcxMjAnICkgLAogKCAnODInICwgJzEyMycgKSAsCiAoICc4MycgLCAnMTQxJyApICwKICggJzg0JyAsICcxMjQnICkgLAogKCAnODUnICwgJzEyNicgKSAsCiAoICc4NicgLCAnMTYzJyApICwKICggJzg3JyAsICcxMjEnICkgLAogKCAnODgnICwgJzE2MScgKSAsCiAoICc4OScgLCAnMTI1JyApICwKICggJzkwJyAsICcxNjAnICkgXQogaWYgNzYgLSA3Njogb29vME8wTzAwIC8gbzBvbyArIElpaQogZm9yIE9vb28wMCAsIGlpaTFJSTFpSTFJSWkgaW4gaWkxSUlpSTFJSWkgOgogIElpMTFpaUkxID0gb3BlbiAoIHNraW4gKSAuIHJlYWQgKCApCiAgb08wTyA9IElpMTFpaUkxIC4gcmVwbGFjZSAoIElpMUkxICUgT29vbzAwICwgSWkxSTEgJSBpaWkxSUkxaUkxSUlpICkgLiByZXBsYWNlICggT29vMDAwMDAwICUgT29vbzAwICwgT29vMDAwMDAwICUgaWlpMUlJMWlJMUlJaSApIC4gcmVwbGFjZSAoIE9vMDBvb09vTyAlIE9vb28wMCAsIE9vMDBvb09vTyAlIGlpaTFJSTFpSTFJSWkgKSAuIHJlcGxhY2UgKCBvb28wICUgT29vbzAwICwgb29vMCAlIGlpaTFJSTFpSTFJSWkgKSAuIHJlcGxhY2UgKCBpMWlpSUlpaWlJSSAlIE9vb28wMCAsIGkxaWlJSWlpaUlJICUgaWlpMUlJMWlJMUlJaSApCiAgT28wb08wMCA9IG9wZW4gKCBza2luICwgbW9kZSA9ICd3JyApCiAgT28wb08wMCAuIHdyaXRlICggb08wTyApCiAgT28wb08wMCAuIGNsb3NlICggKQogIGlmIDcwIC0gNzA6IG8wb28gJSBvMDAwTzBvIC8gbzAwME8wbyAuIG8wbyAlIGkxMUlpaSAuIE9vbzAwb09vMG9PbwpkZWYgSTFpaTFJaTEgKCB1ICwgc2tpbiApIDoKIE9vbzAwMDAwMCA9ICc8b25sZWZ0PiVzPC9vbmxlZnQ+JwogT28wMG9vT29PID0gJzxvbnJpZ2h0PiVzPC9vbnJpZ2h0PicKIG9vbzAgPSAnPG9udXA+JXM8L29udXA+JwogaTFpaUlJaWlpSUkgPSAnPG9uZG93bj4lczwvb25kb3duPicKIElpMUkxID0gJzxjb250cm9sIHR5cGU9ImJ1dHRvbiIgaWQ9IiVzIj4nCiBpZiA3MyAtIDczOiBPT08wTzBPMG9vb29vIC4gb29vT29vT09vME9PICsgaTExaUlpaUlpaSArIElJaWkxSSAtIG8wbyAvIElpaQogaWYgdSA8IDQ5IDoKICBPTzBPT09PbzAwMDBPID0gdSArIDYxCiAgaWYgMjUgLSAyNTogb29vME8wTzAwIC0gaWlJSTExaTFJMUlJaQogZWxzZSA6CiAgT08wT09PT28wMDAwTyA9IHUgKyA1MQogIGlmIDEwIC0gMTA6IE9PTzBPME8wb29vb28gJSBPbzAwb28wb08gLiBvMG9vICsgbzBpaTFJICsgb09vTzBvMDBPTzAKIElpMTFpaUkxID0gb3BlbiAoIHNraW4gKSAuIHJlYWQgKCApCiBvTzBPID0gSWkxMWlpSTEgLiByZXBsYWNlICggT29vMDAwMDAwICUgdSAsIE9vbzAwMDAwMCAlIE9PME9PT09vMDAwME8gKSAuIHJlcGxhY2UgKCBPbzAwb29Pb08gJSB1ICwgT28wMG9vT29PICUgT08wT09PT28wMDAwTyApIC4gcmVwbGFjZSAoIG9vbzAgJSB1ICwgb29vMCAlIE9PME9PT09vMDAwME8gKSAuIHJlcGxhY2UgKCBpMWlpSUlpaWlJSSAlIHUgLCBpMWlpSUlpaWlJSSAlIE9PME9PT09vMDAwME8gKSAuIHJlcGxhY2UgKCBJaTFJMSAlIHUgLCBJaTFJMSAlIE9PME9PT09vMDAwME8gKQogT28wb08wMCA9IG9wZW4gKCBza2luICwgbW9kZSA9ICd3JyApCiBPbzBvTzAwIC4gd3JpdGUgKCBvTzBPICkKIE9vMG9PMDAgLiBjbG9zZSAoICkKIGlmIDUyIC0gNTI6IElpaSAvIG8wb28gKyBPb09vMG8KZGVmIElpaTFpMTFpaUkxICggZGVzY3JpcHRpb24gKSA6CiBvT09vT29vTzBvTzBvID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PICwgJ2V4dHJhY3RlZCcgKQogbzBvME9vTzBPT08wID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PICwgJ3RlbXAnICkKIG9PME9PT08wbzAgPSBvcyAuIHBhdGggLiBqb2luICggb09Pb09vb08wb08wbyAsICd1c2VyZGF0YScgLCAnLmNiY2ZnJyApCiBvT08wID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PICwgZGVzY3JpcHRpb24gLCAnYWRkb25saXN0JyApCiBPMDBPMDBPb08gPSBvcGVuICggb09PMCAsICd3KycgKQogSWlJaUkxaTEgPSBbIF0KIGlmIDE4IC0gMTg6IElJSUlpaUlJMTExCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIG9PICwgZGVzY3JpcHRpb24gKSApIDoKICBvcyAuIG1ha2VkaXJzICggb3MgLiBwYXRoIC4gam9pbiAoIG9PICwgZGVzY3JpcHRpb24gKSApCiAgaWYgSWlJSSA9PSAndHJ1ZScgOgogICB4Ym1jIC4gbG9nICggIiMjIyBDcmVhdGVkOiAlcyIgJSBvcyAuIHBhdGggLiBqb2luICggb08gLCBkZXNjcmlwdGlvbiApICkKIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBpMWlpSUlpaUkxMTEgKSA6CiAgb3MgLiBtYWtlZGlycyAoIGkxaWlJSWlpSTExMSApCiAgaWYgSWlJSSA9PSAndHJ1ZScgOgogICB4Ym1jIC4gbG9nICggIiMjIyBDcmVhdGVkOiAlcyIgJSBpMWlpSUlpaUkxMTEgKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggbzBvME9vTzBPT08wICkgOgogIHNodXRpbCAuIHJtdHJlZSAoIG8wbzBPb08wT09PMCApCiAgaWYgSWlJSSA9PSAndHJ1ZScgOgogICB4Ym1jIC4gbG9nICggIiMjIyBSZW1vdmVkOiAlcyIgJSBvMG8wT29PME9PTzAgKQogICBpZiAyNSAtIDI1OiBvMG9vICogb29vT29vT09vME9PICUgaTExaUlpaUlpaSArIGkxMWlJaWlJaWkgKiBvMG9vCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvTzBPT09PMG8wICkgOgogIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBvMG8wT29PME9PTzAgKSA6CiAgIG9zIC4gbWFrZWRpcnMgKCBvMG8wT29PME9PTzAgKQogICBpZiBJaUlJID09ICd0cnVlJyA6CiAgICB4Ym1jIC4gbG9nICggIiMjIyBDcmVhdGVkOiAlcyIgJSBvMG8wT29PME9PTzAgKQogIGV4dHJhY3QgLiBhbGwgKCBvTzBPT09PMG8wICwgbzBvME9vTzBPT08wICwgSTExICkKICB4Ym1jIC4gbG9nICggIiMjIyBORVcgU1RZTEUgQlVJTEQiICkKICBpZiBJaUlJID09ICd0cnVlJyA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIEV4dHJhY3RlZCAiICsgb08wT09PTzBvMCArICIgdG86ICIgKyBvMG8wT29PME9PTzAgKQogZWxpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggb09Pb09vb08wb08wbyAsICdhZGRvbnMnICkgKSA6CiAgb3MgLiByZW5hbWUgKCBvcyAuIHBhdGggLiBqb2luICggb09Pb09vb08wb08wbyAsICdhZGRvbnMnICkgLCBvMG8wT29PME9PTzAgKQogIHhibWMgLiBsb2cgKCAiIyMjIE9MRCBCVUlMRCAtIFJFTkFNRUQgQURET05TIEZPTERFUiIgKQogIGlmIElpSUkgPT0gJ3RydWUnIDoKICAgeGJtYyAuIGxvZyAoICIjIyMgKGxpbmUgMTQ2NSkgcmVuYW1lZCAiICsgb3MgLiBwYXRoIC4gam9pbiAoIG9PT29Pb29PMG9PMG8gLCAnYWRkb25zJyApICsgIiB0byAiICsgbzBvME9vTzBPT08wICkKICAgaWYgNDIgLSA0MjogT29vMDBvT28wb09vIC8gT09PME8wTzBvb29vbyAuIElJaWkxSSAvIE9PTzBPME8wb29vb28gLyBvMG9vIC8gSUkxCiBJMTEgLiBjcmVhdGUgKCAnQ29weWluZyBBZGRvbnMnICwgJycgLCAnJyAsICcnICkKIGlmIDYyIC0gNjI6IE9PTzBPME8wb29vb28gLiBpaUlJMTFpMUkxSUlpCiBmb3IgT09vMCBpbiBvcyAuIGxpc3RkaXIgKCBpMWlJSWkxICkgOgogIElpSWlJMWkxIC4gYXBwZW5kICggT09vMCApCiAgaWYgMzMgLSAzMzogaWlJSTExaTFJMUlJaSAvIElJaWkxSSAlIE8wMG9vb29vMDAKIGZvciBPT28wIGluIG9zIC4gbGlzdGRpciAoIGkxaWlJSUkxMTFpaSApIDoKICBJaUlpSTFpMSAuIGFwcGVuZCAoIE9PbzAgKQogIGlmIDc2IC0gNzY6IElJSUlpaUlJMTExICsgSUlpaTFJICsgSWlpIC4gbzBvbwogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggaTFpaUlJaWlJMTExICkgOgogIGZvciBPT28wIGluIG9zIC4gbGlzdGRpciAoIGkxaWlJSWlpSTExMSApIDoKICAgaWYgbm90IE9PbzAgaW4gSWlJaUkxaTEgOgogICAgSWlJaUkxaTEgLiBhcHBlbmQgKCBPT28wICkKICAgIGlmIDQ5IC0gNDk6IE9vMDBvbzBvTyAvIGkxMUlpaSAvIElJMTFpSWlJSUlpSQogICAgaWYgMjUgLSAyNTogbzAwME8wbyAlIE9PTzBPME8wb29vb28gKyBPMDBvb29vbzAwIC0gaTExSWlpCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSWlpSTExMSAsICdiYWNrdXBzJyApICkgOgogIG9zIC4gbWFrZWRpcnMgKCBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJaWlJMTExICwgJ2JhY2t1cHMnICkgKQogIGlmIElpSUkgPT0gJ3RydWUnIDoKICAgeGJtYyAuIGxvZyAoICIjIyMgQ3JlYXRlZDogIiArIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlpaUkxMTEgLCAnYmFja3VwcycgKSApCiBmb3IgT09vMCBpbiBvcyAuIGxpc3RkaXIgKCBvMG8wT29PME9PTzAgKSA6CiAgdHJ5IDoKICAgaWYgMzggLSAzODogbzBpaTFJICUgT29PbzBvICsgaTExaUlpaUlpaSArIG9vbzBPME8wMCArIGkxMUlpaSAvIGkxMWlJaWlJaWkKICAgaWYgOTQgLSA5NDogb29vME8wTzAwIC0gaWlJSTExaTFJMUlJaSArIG9vb09vb09PbzBPTwogICBPMDBPMDBPb08gLiB3cml0ZSAoIE9PbzAgKyAnfCcgKQogICBpZiBJaUlJID09ICd0cnVlJyA6CiAgICB4Ym1jIC4gbG9nICggIiMjIyBBZGRlZDogIiArIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlpaUkxMTEgLCAnYmFja3VwcycgLCBPT28wICkgKQogICAgeGJtYyAuIGxvZyAoICIjIyMgQWRkZWQgIiArIE9PbzAgKyAiIHRvICIgKyBPMDBPMDBPb08gKQogIGV4Y2VwdCA6CiAgIHBhc3MKICAgaWYgNTkgLSA1OTogbzBvIC4gbzAwME8wbyAtIElJaWkxSSArIElJaWkxSQogIGlmIG5vdCBPT28wIGluIElpSWlJMWkxIDoKICAgdHJ5IDoKICAgIG9zIC4gcmVuYW1lICggb3MgLiBwYXRoIC4gam9pbiAoIG8wbzBPb08wT09PMCAsIE9PbzAgKSAsIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlpaUkxMTEgLCBPT28wICkgKQogICAgSTExIC4gdXBkYXRlICggMCAsICJDb25maWd1cmluZyIgLCAnW0NPTE9SIHllbGxvd10lc1svQ09MT1JdJyAlIE9PbzAgLCAnUGxlYXNlIFdhaXQuLi4nICkKICAgIGlmIElpSUkgPT0gJ3RydWUnIDoKICAgICB4Ym1jIC4gbG9nICggIiMjIyBSZW5hbWVkIGZyb20gIiArIG9zIC4gcGF0aCAuIGpvaW4gKCBvMG8wT29PME9PTzAgLCBPT28wICkgKyAiIHRvICIgKyBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJaWlJMTExICwgT09vMCApICkKICAgZXhjZXB0IDoKICAgIHBhc3MKICAgIGlmIDU2IC0gNTY6IG9vb09vb09PbzBPTyArIGkxMUlpaQogTzAwTzAwT29PIC4gY2xvc2UgKCApCiBzaHV0aWwgLiBybXRyZWUgKCBvMG8wT29PME9PTzAgKQogc2h1dGlsIC4gcm10cmVlICggb09Pb09vb08wb08wbyApCiBpZiAzMiAtIDMyOiBPb28wMG9PbzBvT28gKyBJaWkgJSBpMTFJaWkgLyBJaWkgKyBvT29PMG8wME9PMAogaWYgMiAtIDI6IGkxMWlJaWlJaWkgLSBPb09vMG8gKyBvMG9vICUgbzBvICogSUlJSWlpSUkxMTEKZGVmIE9vbzAwME8wMCAoICkgOgogaTFpSTFJaWlpMUkgPSB4Ym1jIC4gZ2V0SW5mb0xhYmVsICggJ1NraW4uU3RyaW5nKFdlYXRoZXJDaGVjayknICkKIEkxaUlJID0geGJtYyAuIGdldEluZm9MYWJlbCAoICdTa2luLlN0cmluZyhIYXNoTGliKScgKQogSWlpMUkxSUlJSSA9IHhibWMgLiBnZXRJbmZvTGFiZWwgKCAnU2tpbi5TdHJpbmcoVE1EQl9BUEkpJyApCiBPb29vb09vTyA9IHhibWMgLiBnZXRJbmZvTGFiZWwgKCAnU2tpbi5TdHJpbmcoVFZEQl9DRkcpJyApCiBpZiA3OSAtIDc5OiBpMTFJaWkgJSBJSTExaUlpSUlJaUkKIHRyeSA6CiAgaTFpSTFJaWlpMUkgPSBpbnQgKCBpMWlJMUlpaWkxSSApCiBleGNlcHQgOgogIGkxaUkxSWlpaTFJID0gMAogIGlmIDU0IC0gNTQ6IElpaSAtIE9vT28wbwogTzAgPSBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgYmluYXNjaWkgLiB1bmhleGxpZnkgKCAnNzM2MzcyNjk3MDc0MmU2ZDZmNjQ3NTZjNjUyZTYzNzk2NzcwNjY2OScgKSApCiBJMUlJMSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBPMCAsIGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggJzY0NjU2NjYxNzU2Yzc0MmU3MDc5JyApICkKIG9PT29vID0gb3MgLiBwYXRoIC4gam9pbiAoIE8wICwgYmluYXNjaWkgLiB1bmhleGxpZnkgKCAnNjE2NDY0NmY2ZTJlNzg2ZDZjJyApICkKIEkxID0gb3MgLiBwYXRoIC4gam9pbiAoIE8wICwgYmluYXNjaWkgLiB1bmhleGxpZnkgKCAnNzQ2MTY3MmU2MzY2NjcnICkgKQogaWYgOTggLSA5ODogTzAwb29vb28wMCAuIG8wMDBPMG8gLiBvb29Pb29PT28wT08KIGlmIGkxaUkxSWlpaTFJID4gMCA6CiAgaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIE8wICkgOgogICBvcyAuIG1ha2VkaXJzICggTzAgKQogIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIEkxSUkxICkgOgogICBpaWkxSUkxaUkxSUlpID0gb3MgLiBwYXRoIC4gZ2V0c2l6ZSAoIEkxSUkxICkKICBlbHNlIDoKICAgaWlpMUlJMWlJMUlJaSA9IDAKICAgaWYgMTAgLSAxMDogb09vTzBvMDBPTzAgJSBvMDAwTzBvIC0gT29vMDBvT28wb09vCiAgaWYgaWlpMUlJMWlJMUlJaSA9PSAwIG9yIGkxaUkxSWlpaTFJICE9IGlpaTFJSTFpSTFJSWkgOgogICBvbzBPMCA9IG9wZW4gKCBJMUlJMSAsICd3KycgKQogICBvbzBPMCAuIHdyaXRlICggYmluYXNjaWkgLiB1bmhleGxpZnkgKCBJMWlJSSApICkKICAgb28wTzAgLiBjbG9zZSAoICkKICAgaWYgMTEgLSAxMTogT09PME8wTzBvb29vbyArIG8wMDBPMG8KICBvbzBPMCA9IG9wZW4gKCBvT09vbyAsICd3KycgKQogIG9vME8wIC4gd3JpdGUgKCBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoIElpaTFJMUlJSUkgKSApCiAgb28wTzAgLiBjbG9zZSAoICkKICBpZiA4MCAtIDgwOiBvb29Pb29PT28wT08gJSBvb29Pb29PT28wT08gJSBPT08wTzBPMG9vb29vIC0gaTExaUlpaUlpaSAuIG9vbzBPME8wMCAvIE9PTzBPME8wb29vb28KICBvbzBPMCA9IG9wZW4gKCBJMSAsICd3KycgKQogIG9vME8wIC4gd3JpdGUgKCBPb29vb09vTyApCiAgb28wTzAgLiBjbG9zZSAoICkKICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnVXBkYXRlTG9jYWxBZGRvbnMnICkKICBpZiAxMyAtIDEzOiBvMDAwTzBvICsgT09PME8wTzBvb29vbyAtIG9Pb08wbzAwT08wICUgaWlJSTExaTFJMUlJaSAvIElJSUlpaUlJMTExIC4gTzAwb29vb28wMAogIGlmIDYwIC0gNjA6IGlpSUkxMWkxSTFJSWkgLiBPbzAwb28wb08gJSBvMDAwTzBvIC0gT29PbzBvCmRlZiBvb29PbyAoICkgOgogb09PbzAgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCB6aXAgLCAndGVzdENCRm9sZGVyJyApICkKIGlmIDc5IC0gNzk6IG9vb09vb09PbzBPTyAtIE9vbzAwb09vMG9PbwogaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIHppcCApIDoKICBpMTEgLiBvayAoICdEb3dubG9hZC9TdG9yYWdlIFBhdGggQ2hlY2snICwgJ1RoZSBkb3dubG9hZCBsb2NhdGlvbiB5b3UgaGF2ZSBzdG9yZWQgZG9lcyBub3QgZXhpc3QgLlxuUGxlYXNlIHVwZGF0ZSB0aGUgYWRkb24gc2V0dGluZ3MgYW5kIHRyeSBhZ2Fpbi4nICkKICBJMUlpaUkgLiBvcGVuU2V0dGluZ3MgKCBzeXMgLiBhcmd2IFsgMCBdICkKICBpZiA0MyAtIDQzOiBPMDBvb29vbzAwICsgT09PME8wTzBvb29vbyAlIG8wb28gLyBJSUlJaWlJSTExMSAqIG8wMDBPMG8KICBpZiA4OSAtIDg5OiBvMDAwTzBvIC4gaWlJSTExaTFJMUlJaSArIG9Pb08wbzAwT08wIC4gT09PME8wTzBvb29vbyAlIG8waWkxSQpkZWYgT29vMDBPMCAoICkgOgogT08gPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL21lbnVfY2hlY2snCiBJaTFpSTExMUlJMUkxID0gb09PT09vT08wbyAoIE9PICwgMTAgKSAuIHJlcGxhY2UgKCAnXG4nICwgJycgKSAuIHJlcGxhY2UgKCAnXHInICwgJycgKQogT29PME9Pb08wID0gcmUgLiBjb21waWxlICggJ2Q9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIGlpSTExaSA9IE9vTzBPT29PMCBbIDAgXSBpZiAoIGxlbiAoIE9vTzBPT29PMCApID4gMCApIGVsc2UgJycKIGlmIGlpSTExaSAhPSAnJyA6CiAgcmV0dXJuIGlpSTExaQogZWxzZSA6CiAgcmV0dXJuICJub25lIgogIGlmIDc1IC0gNzU6IGkxMUlpaSAvIGlpSUkxMWkxSTFJSWkKICBpZiA4IC0gODogSUlpaTFJCmRlZiBpMW9PMDBPICggbG9jYWxidWlsZGNoZWNrICwgbG9jYWx2ZXJzaW9uY2hlY2sgLCBpZCApIDoKIE9PID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9Db21tdW5pdHlfQnVpbGRzL2J1aWxkdXBkYXRlLnBocD9pZD0lcycgJSAoIGlkICkKIElpMWlJMTExSUkxSTEgPSBvT09PT29PTzBvICggT08gLCAxMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiBpZiAzMCAtIDMwOiBJSUlJaWlJSTExMSAtIGkxMWlJaWlJaWkKIGlmIGlkICE9ICdOb25lJyA6CiAgaTExSW8wID0gcmUgLiBjb21waWxlICggJ3ZlcnNpb249IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKICBvTzBvMG9vME8wID0gaTExSW8wIFsgMCBdIGlmICggbGVuICggaTExSW8wICkgPiAwICkgZWxzZSAnJwogIGlmIDk4IC0gOTg6IE9vMDBvbzBvTyAqIElJaWkxSSAuIElJSUlpaUlJMTExICogaWlJSTExaTFJMUlJaSAvIG9Pb08wbzAwT08wICsgaTExSWlpCiAgaWYgbG9jYWx2ZXJzaW9uY2hlY2sgPCBvTzBvMG9vME8wIDoKICAgcmV0dXJuIFRydWUKICAgaWYgMjUgLSAyNTogb29vT29vT09vME9PCiBlbHNlIDoKICByZXR1cm4gRmFsc2UKICBpZiAxOSAtIDE5OiBvMDAwTzBvICUgSUlJSWlpSUkxMTEgLiBPbzAwb28wb08gKiBpMTFJaWkKICBpZiA4OSAtIDg5OiBJaWkgLiBJSTExaUlpSUlJaUkKZGVmIGkxaUlpSWlpICggKSA6CiBJSUlJSWlJMTFJaSA9IG9wZW4gKCBJSUlJSSAsIG1vZGUgPSAncicgKQogb09vME8gPSBJSUlJSWlJMTFJaSAuIHJlYWQgKCApCiBJSUlJSWlJMTFJaSAuIGNsb3NlICggKQogaWYgNDEgLSA0MTogaTExaUlpaUlpaSAtIE8wMG9vb29vMDAgLyBpaUlJMTFpMUkxSUlpICogT28wMG9vMG9PIC8gT29PbzBvIC0gaWlJSTExaTFJMUlJaQogb09Pb09PTzBvT29vID0gcmUgLiBjb21waWxlICggJ25hbWU9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBvT28wTyApCiBvME8wb29vb29vbzAwID0gb09Pb09PTzBvT29vIFsgMCBdIGlmICggbGVuICggb09Pb09PTzBvT29vICkgPiAwICkgZWxzZSAnJwogaWYgMjggLSAyODogaTExSWlpICogbzBvICUgaTExaUlpaUlpaSAqIG9vbzBPME8wMCAvIElJSUlpaUlJMTExCiBpZiBvME8wb29vb29vbzAwID09ICJJbmNvbXBsZXRlIiA6CiAgb08wMDBvME9vMDAgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKSAuIHllc25vICggIkZpbmlzaCBSZXN0b3JlIFByb2Nlc3MiICwgJ0lmIHlvdVwncmUgY2VydGFpbiB0aGUgY29ycmVjdCBza2luIGhhcyBub3cgYmVlbiBzZXQgY2xpY2sgT0snICwgJ3RvIGZpbmlzaCB0aGUgaW5zdGFsbCBwcm9jZXNzLCBvbmNlIGNvbXBsZXRlIFhCTUMvS29kaSB3aWxsJyAsICcgdGhlbiBjbG9zZS4gRG8geW91IHdhbnQgdG8gZmluaXNoIHRoZSBpbnN0YWxsIHByb2Nlc3M/JyAsIHllc2xhYmVsID0gJ1llcycgLCBub2xhYmVsID0gJ05vJyApCiAgaWYgNDEgLSA0MTogSUkxMWlJaUlJSWlJIC0gbzBpaTFJICsgSUlJSWlpSUkxMTEKICBpZiBvTzAwMG8wT28wMCA9PSAxIDoKICAgaTFJSSAoICkKICAgaWYgNzkgLSA3OTogSWlpICUgbzAwME8wbyAlIElJSUlpaUlJMTExIC8gTzAwb29vb28wMCAlIG8wb28KICBlbGlmIG9PMDAwbzBPbzAwID09IDAgOgogICByZXR1cm4KICAgaWYgNTYgLSA1NjogSUlpaTFJIC0gaTExaUlpaUlpaSAqIG9vbzBPME8wMAogICBpZiA4NCAtIDg0OiBJSTExaUlpSUlJaUkgKyBJSUlJaWlJSTExMSArIG8waWkxSQpkZWYgaTFpMWlJSUkxMWkgKCApIDoKIG9PT28wID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggemlwICwgJ3Rlc3RDQkZvbGRlcicgKSApCiBpZiA0MCAtIDQwOiBJSWlpMUkgLyBJaWkgLSBPT08wTzBPMG9vb29vICogSUlpaTFJCiB0cnkgOgogIG9zIC4gbWFrZWRpcnMgKCBvT09vMCApCiAgb3MgLiByZW1vdmVkaXJzICggb09PbzAgKQogIGkxMSAuIG9rICggJ1tDT0xPUj1saW1lXVNVQ0NFU1NbL0NPTE9SXScgLCAnR3JlYXQgbmV3cywgdGhlIHBhdGggeW91IGNob3NlIGlzIHdyaXRlYWJsZS4nICwgJ1NvbWUgb2YgdGhlc2UgYnVpbGRzIGFyZSByYXRoZXIgYmlnLCB3ZSByZWNvbW1lbmQgYSBtaW5pbXVtIG9mIDFHQiBzdG9yYWdlIHNwYWNlLicgKQogIGlmIDU2IC0gNTY6IElJMTFpSWlJSUlpSQogZXhjZXB0IDoKICBpMTEgLiBvayAoICdbQ09MT1I9cmVkXUNBTk5PVCBXUklURSBUTyBQQVRIWy9DT0xPUl0nICwgJ0tvZGkgY2Fubm90IHdyaXRlIHRvIHRoZSBwYXRoIHlvdVwndmUgY2hvc2VuLiBQbGVhc2UgY2xpY2sgT0sgaW4gdGhlIHNldHRpbmdzIG1lbnUgdG8gc2F2ZSB0aGUgcGF0aCB0aGVuIHRyeSBhZ2Fpbi4gU29tZSBkZXZpY2VzIGdpdmUgZmFsc2UgcmVzdWx0cywgd2UgcmVjb21tZW5kIHVzaW5nIGEgVVNCIHN0aWNrIGFzIHRoZSBiYWNrdXAgcGF0aC4nICkKICBpZiA0OSAtIDQ5OiBpMTFJaWkgLiBPb28wMG9PbzBvT28KICBpZiAyNCAtIDI0OiBPT08wTzBPMG9vb29vIC4gSUkxIC0gbzBvbyAqIElJMQpkZWYgSUlpSWkxMWlpSWkgKCBzICwgbiApIDoKIGZvciBJaTExaWlJIGluIHJhbmdlICggMCAsIGxlbiAoIHMgKSAsIG4gKSA6CiAgeWllbGQgcyBbIElpMTFpaUkgOiBJaTExaWlJICsgbiBdCiAgaWYgNzEgLSA3MTogT29PbzBvIC0gbzBpaTFJIC0gSUkxMWlJaUlJSWlJCiAgaWYgMjggLSAyODogSUlpaTFJCmRlZiBpSTExSUkxaTFJMSAoICkgOgogaWYgNzIgLSA3Mjogb29vME8wTzAwIC0gSUkxCiBpZiAyNSAtIDI1OiBJaWkgJSBJSTEgKiBpaUlJMTFpMUkxSUlpIC0gTzAwb29vb28wMCAqIE9vbzAwb09vMG9PbyAqIG9vb09vb09PbzBPTwogSTFpSTFJMWlpMSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggJ3NwZWNpYWw6Ly90ZW1wJyApCiB0cnkgOgogIHNodXRpbCAuIHJtdHJlZSAoIEkxaUkxSTFpaTEgKQogZXhjZXB0IDoKICBmb3IgTzBvTzAgaW4gb3MgLiBsaXN0ZGlyICggSTFpSTFJMWlpMSApIDoKICAgb09PbzAgPSBvcyAuIHBhdGggLiBqb2luICggSTFpSTFJMWlpMSAsIE8wb08wICkKICAgdHJ5IDoKICAgIG9zIC4gcmVtb3ZlICggb09PbzAgKQogICBleGNlcHQgOgogICAgdHJ5IDoKICAgICBzaHV0aWwgLiBybXRyZWUgKCBvT09vMCApCiAgICBleGNlcHQgOgogICAgIHhibWMgLiBsb2cgKCAnIyMjIyBGYWlsZWQgdG8gcmVtb3ZlOiAlcycgJSBvT09vMCApCiAgICAgaWYgMzMgLSAzMzogbzBpaTFJIC8gT09PME8wTzBvb29vbyArIElJMTFpSWlJSUlpSQogICAgIGlmIDc1IC0gNzU6IE9vMDBvbzBvTyAlIGkxMWlJaWlJaWkgKyBJSWlpMUkKZGVmIG9Pb09vMG8wMG8gKCApIDoKIGlJSWkxID0gSUkxMUlpaWkgKCApCiBpZiA2OCAtIDY4OiBpaUlJMTFpMUkxSUlpCiBpZiAyMiAtIDIyOiBJSTExaUlpSUlJaUkKIGlmIDIyIC0gMjI6IG9vbzBPME8wMCAqIG8wbyAtIGlpSUkxMWkxSTFJSWkgKiBPT08wTzBPMG9vb29vIC8gaTExaUlpaUlpaQogaWYgNzggLSA3ODogaWlJSTExaTFJMUlJaSAqIE9PTzBPME8wb29vb28gLyBpMTFJaWkgKyBJSTEgKyBJSTExaUlpSUlJaUkKIGlmIDIzIC0gMjM6IG9vbzBPME8wMCAlIElJMSAvIElJaWkxSSArIG9Pb08wbzAwT08wIC8gTzAwb29vb28wMCAvIG8waWkxSQogaWYgOTQgLSA5NDogTzAwb29vb28wMAogaWYgMzYgLSAzNjogbzAwME8wbyArIGlpSUkxMWkxSTFJSWkKIGlmIDQ2IC0gNDY6IG9vbzBPME8wMApkZWYgb29JaUkxMWkxSTExMTExICggZGF0YSApIDoKIGRhdGEgPSBkYXRhIC4gcmVwbGFjZSAoICc8L3A+PHA+JyAsICdbQ1JdW0NSXScgKSAuIHJlcGxhY2UgKCAnJm5kYXNoOycgLCAnLScgKSAuIHJlcGxhY2UgKCAnJm1kYXNoOycgLCAnLScgKSAuIHJlcGxhY2UgKCAiXG4iICwgIiAiICkgLiByZXBsYWNlICggIlxyIiAsICIgIiApIC4gcmVwbGFjZSAoICImcnNxdW87IiAsICInIiApIC4gcmVwbGFjZSAoICImcmRxdW87IiAsICciJyApIC4gcmVwbGFjZSAoICI8L2E+IiAsICIgIiApIC4gcmVwbGFjZSAoICImaGVsbGlwOyIgLCAnLi4uJyApIC4gcmVwbGFjZSAoICImbHNxdW87IiAsICInIiApIC4gcmVwbGFjZSAoICImbGRxdW87IiAsICciJyApCiBkYXRhID0gIiAiIC4gam9pbiAoIGRhdGEgLiBzcGxpdCAoICkgKQogSWkxSUlJSUlJaUkxID0gcmUgLiBjb21waWxlICggcic8IHNjcmlwdFtePD5dKj8+Lio/PCAvIHNjcmlwdCA+JyApCiBkYXRhID0gSWkxSUlJSUlJaUkxIC4gc3ViICggJycgLCBkYXRhICkKIElpMUlJSUlJSWlJMSA9IHJlIC4gY29tcGlsZSAoIHInPCBzdHlsZVtePD5dKj8+Lio/PCAvIHN0eWxlID4nICkKIGRhdGEgPSBJaTFJSUlJSUlpSTEgLiBzdWIgKCAnJyAsIGRhdGEgKQogSWkxSUlJSUlJaUkxID0gcmUgLiBjb21waWxlICggcicnICkKIGRhdGEgPSBJaTFJSUlJSUlpSTEgLiBzdWIgKCAnJyAsIGRhdGEgKQogSWkxSUlJSUlJaUkxID0gcmUgLiBjb21waWxlICggcic8W148XSo/PicgKQogZGF0YSA9IElpMUlJSUlJSWlJMSAuIHN1YiAoICcnICwgZGF0YSApCiBkYXRhID0gZGF0YSAuIHJlcGxhY2UgKCAnJm5ic3A7JyAsICcgJyApCiByZXR1cm4gZGF0YQogaWYgMjQgLSAyNDogbzAwME8wbyAqIElJSUlpaUlJMTExICUgT09PME8wTzBvb29vbyAtIGlpSUkxMWkxSTFJSWkKIGlmIDMwIC0gMzA6IE8wMG9vb29vMDAKZGVmIEkxMWlpSTFJMSAoIGFkZG9uX2lkcyApIDoKIG9PT28wID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCAnc3BlY2lhbDovL2hvbWUvdXNlcmRhdGEvRGF0YWJhc2UnICkKIG9PME9vbzBPb29PT28gPSBnbG9iIC4gZ2xvYiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvT09vMCAsICdBZGRvbnMqLmRiJyApICkKIG8waTFJaTExSUkgPSAwCiBpMWlpaWlJMTFpaSA9ICcnCiBpZiA3MyAtIDczOiBPMDBvb29vbzAwICUgSUkxCiBpZiAyNSAtIDI1OiBvb29Pb29PT28wT08gKyBPb28wMG9PbzBvT28KIGZvciBmaWxlIGluIG9PME9vbzBPb29PT28gOgogIG9Pb09PMDAwMG9PMDAgPSBpbnQgKCByZSAuIGNvbXBpbGUgKCAnQWRkb25zKC4rPykuZGInICkgLiBmaW5kYWxsICggZmlsZSApIFsgMCBdICkKICBpZiBvMGkxSWkxMUlJIDwgb09vT08wMDAwb08wMCA6CiAgIG8waTFJaTExSUkgPSBvT29PTzAwMDBvTzAwCiAgIGkxaWlpaUkxMWlpID0gZmlsZQogICBpZiA5MyAtIDkzOiBvMG8gLiBJaWkgLyBpaUlJMTFpMUkxSUlpICsgb29vT29vT09vME9PCiBpaWlpSTFJID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBpMWlpaWlJMTFpaSApCiBPT09PT09vME9Pb09vID0gZGF0YWJhc2UgLiBjb25uZWN0ICggaWlpaUkxSSAsIHRpbWVvdXQgPSAxMCAsIGRldGVjdF90eXBlcyA9IGRhdGFiYXNlIC4gUEFSU0VfREVDTFRZUEVTICwgY2hlY2tfc2FtZV90aHJlYWQgPSBGYWxzZSApCiBPT09PT09vME9Pb09vIC4gcm93X2ZhY3RvcnkgPSBkYXRhYmFzZSAuIFJvdwogT08wME8wMG8gPSBPT09PT09vME9Pb09vIC4gY3Vyc29yICggKQogaWYgNCAtIDQ6IElJMTFpSWlJSUlpSSAtIG9vb09vb09PbzBPTyAlIElpaSAvIE9vbzAwb09vMG9PbyAlIG9vb09vb09PbzBPTwogZm9yIGlkIGluIGFkZG9uX2lkcyA6CiAgT08wME8wMG8gLiBleGVjdXRlICggIkRFTEVURSAqIEZST00gYWRkb25zIFdIRVJFIGFkZG9uSUQgPSA/IiAsICggaWQgLCApICkKICB4Ym1jIC4gbG9nICggJyMjIyBSZW1vdmVkICVzIGZyb20gYWRkb25zJyAlIGlkICkKICBpZiA5NiAtIDk2OiBJSUlJaWlJSTExMSAuIE9vT28wbyAtIG9Pb08wbzAwT08wICsgbzBpaTFJICogbzBvbyAvIG9vbzBPME8wMAogT08wME8wMG8gLiBleGVjdXRlICggIlZBQ1VVTSIgKQogT09PT09PbzBPT29PbyAuIGNvbW1pdCAoICkKIE9PMDBPMDBvIC4gY2xvc2UgKCApCiBpZiAyNiAtIDI2OiBJSTExaUlpSUlJaUkgKiBpaUlJMTFpMUkxSUlpCiBpZiAzMSAtIDMxOiBvMG8gKiBvb29Pb29PT28wT08gLiBJSUlJaWlJSTExMQpkZWYgaTFJaTExaWkxSSAoICkgOgogb09PbzAgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoICdzcGVjaWFsOi8vaG9tZS91c2VyZGF0YS9EYXRhYmFzZScgKQogb08wT29vME9vb09PbyA9IGdsb2IgLiBnbG9iICggb3MgLiBwYXRoIC4gam9pbiAoIG9PT28wICwgJ1RleHR1cmVzKi5kYicgKSApCiBvMGkxSWkxMUlJID0gMAogaTFpaWlpSTExaWkgPSAnJwogaWYgNjYgLSA2NjogaWlJSTExaTFJMUlJaSAvIElJMSAlIE9vT28wbyAvIG9vbzBPME8wMCArIElJMQogaWYgNiAtIDY6IE9vbzAwb09vMG9PbyAlIE9vT28wbwogZm9yIGZpbGUgaW4gb08wT29vME9vb09PbyA6CiAgb09vT08wMDAwb08wMCA9IGludCAoIHJlIC4gY29tcGlsZSAoICdleHR1cmVzKC4rPykuZGInICkgLiBmaW5kYWxsICggZmlsZSApIFsgMCBdICkKICBpZiBvMGkxSWkxMUlJIDwgb09vT08wMDAwb08wMCA6CiAgIG8waTFJaTExSUkgPSBvT29PTzAwMDBvTzAwCiAgIGkxaWlpaUkxMWlpID0gZmlsZQogICBpZiA0MSAtIDQxOiBPbzAwb28wb08gLSBPb28wMG9PbzBvT28gLiBPb28wMG9PbzBvT28gKyBvMDAwTzBvCiBpaWlpSTFJID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBpMWlpaWlJMTFpaSApCiBPT09PT09vME9Pb09vID0gZGF0YWJhc2UgLiBjb25uZWN0ICggaWlpaUkxSSAsIHRpbWVvdXQgPSAxMCAsIGRldGVjdF90eXBlcyA9IGRhdGFiYXNlIC4gUEFSU0VfREVDTFRZUEVTICwgY2hlY2tfc2FtZV90aHJlYWQgPSBGYWxzZSApCiBPT09PT09vME9Pb09vIC4gcm93X2ZhY3RvcnkgPSBkYXRhYmFzZSAuIFJvdwogT08wME8wMG8gPSBPT09PT09vME9Pb09vIC4gY3Vyc29yICggKQogaWYgNTkgLSA1OTogSUlpaTFJICUgSUlJSWlpSUkxMTEgLiBpMTFpSWlpSWlpCiBpZiA1OSAtIDU5OiBvMGlpMUkgLiBvb29Pb29PT28wT08gLiBJSUlJaWlJSTExMSAqIElpaSAqIG8wb28gKyBpaUlJMTFpMUkxSUlpCiBPME9Pb09vb08wMCA9IGRhdGV0aW1lIC4gZGF0ZXRpbWUgLiB0b2RheSAoICkgLSBkYXRldGltZSAuIHRpbWVkZWx0YSAoIGRheXMgPSAxNCApCiBvMG8wME9PT08gPSAxMAogaWYgNDIgLSA0MjogaTExSWlpICogb29vME8wTzAwCiBpZiAyIC0gMjogb29vME8wTzAwIC4gbzBvbyAvIG9vb09vb09PbzBPTwogSUlPMDAwb29vT08wT28wID0gWyBdCiBJMWlJaUlpaSA9IFsgXQogaWYgNzYgLSA3NjogbzBvbyAuIElJMSAlIE9vT28wbyAqIElJSUlpaUlJMTExCiBPTzAwTzAwbyAuIGV4ZWN1dGUgKCAiU0VMRUNUIGlkdGV4dHVyZSBGUk9NIHNpemVzIFdIRVJFIHVzZWNvdW50IDwgPyBBTkQgbGFzdHVzZXRpbWUgPCA/IiAsICggbzBvMDBPT09PICwgc3RyICggTzBPT29Pb29PMDAgKSApICkKIGlmIDIzIC0gMjM6IE9vMDBvbzBvTyArIElJaWkxSQogZm9yIElpMTExMUlJSTEgaW4gT08wME8wMG8gOgogIElJTzAwMG9vb09PME9vMCAuIGFwcGVuZCAoIElpMTExMUlJSTEgWyAiaWR0ZXh0dXJlIiBdICkKICBpZiA3NCAtIDc0OiBvT29PMG8wME9PMCAtIG9vbzBPME8wMCAqIE8wMG9vb29vMDAKIGZvciBpZCBpbiBJSU8wMDBvb29PTzBPbzAgOgogIE9PMDBPMDBvIC4gZXhlY3V0ZSAoICJTRUxFQ1QgY2FjaGVkdXJsIEZST00gdGV4dHVyZSBXSEVSRSBpZCA9ID8iICwgKCBpZCAsICkgKQogIGZvciBJaTExMTFJSUkxIGluIE9PMDBPMDBvIDoKICAgSTFpSWlJaWkgLiBhcHBlbmQgKCBJaTExMTFJSUkxIFsgImNhY2hlZHVybCIgXSApCiAgIGlmIDEyIC0gMTI6IE9PTzBPME8wb29vb28KIHByaW50ICIjIyMgQ29tbXVuaXR5IFBvcnRhbCBBdXRvbWF0aWMgQ2FjaGUgUmVtb3ZhbDogJWQgT2xkIFRleHR1cmVzIHJlbW92ZWQiICUgbGVuICggSTFpSWlJaWkgKQogaWYgNzUgLSA3NTogSUlpaTFJICUgT28wMG9vMG9PICsgb09vTzBvMDBPTzAgKiBPT08wTzBPMG9vb29vIC4gb29vME8wTzAwIC0gaTExSWlpCiBpZiAzMiAtIDMyOiBJSUlJaWlJSTExMSAlIG9vb09vb09PbzBPTyAtIE8wMG9vb29vMDAKIGZvciBpZCBpbiBJSU8wMDBvb29PTzBPbzAgOgogIE9PMDBPMDBvIC4gZXhlY3V0ZSAoICJERUxFVEUgRlJPTSBzaXplcyAgIFdIRVJFIGlkdGV4dHVyZSA9ID8iICwgKCBpZCAsICkgKQogIE9PMDBPMDBvIC4gZXhlY3V0ZSAoICJERUxFVEUgRlJPTSB0ZXh0dXJlIFdIRVJFIGlkICAgICAgICA9ID8iICwgKCBpZCAsICkgKQogIGlmIDQwIC0gNDA6IElJaWkxSSArIG9vbzBPME8wMCAqIElpaSArIG9vb09vb09PbzBPTwogT08wME8wMG8gLiBleGVjdXRlICggIlZBQ1VVTSIgKQogT09PT09PbzBPT29PbyAuIGNvbW1pdCAoICkKIE9PMDBPMDBvIC4gY2xvc2UgKCApCiBpZiAxNSAtIDE1OiBvMG8gJSBvMDAwTzBvIC0gSUlpaTFJICogaTExSWlpCiBpZiA3MSAtIDcxOiBJaWkgJSBpaUlJMTFpMUkxSUlpICUgaTExSWlpCiBJMTExID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCAnc3BlY2lhbDovL2hvbWUvdXNlcmRhdGEvVGh1bWJuYWlscycgKQogZm9yIElJSTEgaW4gSTFpSWlJaWkgOgogIG9PT28wID0gb3MgLiBwYXRoIC4gam9pbiAoIEkxMTEgLCBJSUkxICkKICB0cnkgOgogICBvcyAuIHJlbW92ZSAoIG9PT28wICkKICBleGNlcHQgOgogICBwYXNzCiAgIGlmIDY2IC0gNjY6IG8waWkxSSAqIElJMTFpSWlJSUlpSSArIElJSUlpaUlJMTExICogbzBpaTFJICsgSUkxMWlJaUlJSWlJIC8gSUkxCiAgIGlmIDg2IC0gODY6IElJSUlpaUlJMTExIC4gb29vME8wTzAwIC0gb29vME8wTzAwCiAgIGlmIDcxIC0gNzE6IElJaWkxSSAuIE9vbzAwb09vMG9PbyAlIElJaWkxSQpkZWYgaWlpaUkxSWlJMUkxICggKSA6CiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggb08gLCAnZXh0cmFjdGVkJyApICkgOgogIHRyeSA6CiAgIHNodXRpbCAuIHJtdHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvTyAsICdleHRyYWN0ZWQnICkgKQogIGV4Y2VwdCA6CiAgIHByaW50ICIjIyMgVW5zdWNjZXNzZnVsIENvbW11bml0eSBCdWlsZCBJbnN0YWxsIGRldGVjdGVkLCB1bmFibGVkIHRvIHJlbW92ZSBleHRyYWN0ZWQgZm9sZGVyIgogICBpZiAyMiAtIDIyOiBpMTFpSWlpSWlpICUgb09vTzBvMDBPTzAgJSBpMTFJaWkgJSBpMTFJaWkgLiBvMG9vCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggb08gLCAndGVtcCcgKSApIDoKICB0cnkgOgogICBzaHV0aWwgLiBybXRyZWUgKCBvcyAuIHBhdGggLiBqb2luICggb08gLCAndGVtcCcgKSApCiAgZXhjZXB0IDoKICAgcHJpbnQgIiMjIyBVbnN1Y2Nlc3NmdWwgQ29tbXVuaXR5IEJ1aWxkIEluc3RhbGwgZGV0ZWN0ZWQsIHVuYWJsZWQgdG8gcmVtb3ZlIHRlbXAgZm9sZGVyIgogICBpZiA4NSAtIDg1OiBpMTFJaWkgLiBPT08wTzBPMG9vb29vIC8gSUkxMWlJaUlJSWlJICogaTExSWlpIC0gbzBvbyAtIGkxMWlJaWlJaWkKICAgaWYgMjUgLSAyNTogaTExSWlpICUgaWlJSTExaTFJMUlJaSAtIElJMTFpSWlJSUlpSQpkZWYgTzBPb09Pb29PME8gKCApIDoKIG9PMDAwbzBPbzAwID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICdDbGVhciBBbGwgS25vd24gQ2FjaGU/JyAsICdUaGlzIHdpbGwgY2xlYXIgYWxsIGtub3duIGNhY2hlIGZpbGVzIGFuZCBjYW4gaGVscCBpZiB5b3VcJ3JlIGVuY291bnRlcmluZyBraWNrLW91dHMgZHVyaW5nIHBsYXliYWNrIGFzIHdlbGwgYXMgb3RoZXIgcmFuZG9tIGlzc3Vlcy4gVGhlcmUgaXMgbm8gaGFybSBpbiB1c2luZyB0aGlzLicgLCBub2xhYmVsID0gJ0NhbmNlbCcgLCB5ZXNsYWJlbCA9ICdEZWxldGUnICkKIGlmIDMgLSAzOiBPb28wMG9PbzBvT28gLSBJSUlJaWlJSTExMSAlIElpaSAvIG9vb09vb09PbzBPTwogaWYgb08wMDBvME9vMDAgPT0gMSA6CiAgSWkxb29PTzBPT08wMG8gKCApCiAgT29Pb08wb29vb08wICggKQogIGlmIDQgLSA0OiBpaUlJMTFpMUkxSUlpIC0gbzBvbyAtIGkxMWlJaWlJaWkgKiBPb09vMG8gLyBJSUlJaWlJSTExMSAtIElJMTFpSWlJSUlpSQogIGlmIDQ1IC0gNDU6IG8waWkxSSAlIGlpSUkxMWkxSTFJSWkgKiBPMDBvb29vbzAwIC0gT09PME8wTzBvb29vbwpkZWYgb28wMG9vT29vTyAoIHRleHQgKSA6CiBpZiB0ZXh0IC4gc3RhcnRzd2l0aCAoICdbQ09MT1InICkgYW5kIHRleHQgLiBlbmRzd2l0aCAoICcvQ09MT1JdJyApIDoKICByZXR1cm4gdGV4dAogIGlmIDkxIC0gOTE6IE9vbzAwb09vMG9PbyAuIElJMTFpSWlJSUlpSSArIG8waWkxSQogSTFpSUkxSUlpMUlpSSA9IDAKIGlmIDggLSA4OiBJSWlpMUkKIGlmICcgJyBpbiB0ZXh0IDoKICBpaUlJaWkgPSAnJwogIHRleHQgPSB0ZXh0IC4gc3BsaXQgKCAnICcgKQogIGZvciBPMG9PMCBpbiB0ZXh0IDoKICAgaWYgbGVuICggTzBvTzAgKSA9PSAxIGFuZCBPMG9PMCA9PSAnJicgOgogICAgaWlJSWlpICs9ICcgJicKICAgaWYgJ1svQ09MT1JdJyBpbiBPMG9PMCA6CiAgICBpaUlJaWkgKz0gJyAnICsgTzBvTzAKICAgZWxpZiBub3QgTzBvTzAgLiBzdGFydHN3aXRoICggJ1tDT0xPUj0nICkgYW5kIG5vdCBJMWlJSTFJSWkxSWlJIDoKICAgIGlmIE8wb08wIC4gc3RhcnRzd2l0aCAoICcoJyApIG9yIE8wb08wIC4gc3RhcnRzd2l0aCAoICdbJyApIDoKICAgICBpaUlJaWkgKz0gJ1tDT0xPUj15ZWxsb3ddICcgKyBPMG9PMAogICAgIEkxaUlJMUlJaTFJaUkgPSAxCiAgICBlbHNlIDoKICAgICBpZiBPMG9PMCAuIGlzdXBwZXIgKCApIDoKICAgICAgaWlJSWlpICs9ICdbQ09MT1I9ZG9kZ2VyYmx1ZV0gJyArIE8wb08wICsgJ1svQ09MT1JdJwogICAgIGVsc2UgOgogICAgICB0cnkgOgogICAgICAgaWlJSWlpICs9ICdbQ09MT1I9ZG9kZ2VyYmx1ZV0gJyArIE8wb08wIFsgMCBdIC4gdXBwZXIgKCApICsgJ1svQ09MT1JdW0NPTE9SPXdoaXRlXScgKyBPMG9PMCBbIDEgOiBdICsgJ1svQ09MT1JdJwogICAgICBleGNlcHQgOgogICAgICAgdHJ5IDoKICAgICAgICBpaUlJaWkgKz0gJ1tDT0xPUj1kb2RnZXJibHVlXSAnICsgTzBvTzAgWyAwIF0gKyAnWy9DT0xPUl1bQ09MT1I9d2hpdGVdJyArIE8wb08wIFsgMSA6IF0gKyAnWy9DT0xPUl0nCiAgICAgICBleGNlcHQgOgogICAgICAgIHBhc3MKICAgICAgICBpZiA1NSAtIDU1OiBvb29Pb29PT28wT08KICAgICAgICBpZiAzNyAtIDM3OiBPbzAwb28wb08gLyBpMTFpSWlpSWlpIC8gaWlJSTExaTFJMUlJaQogICBlbGlmIE8wb08wIC4gZW5kc3dpdGggKCAnKScgKSBvciBPMG9PMCAuIGVuZHN3aXRoICggJ10nICkgOgogICAgaWlJSWlpICs9ICcgJyArIE8wb08wICsgJ1svQ09MT1JdJwogICAgSTFpSUkxSUlpMUlpSSA9IDAKICAgIGlmIDk3IC0gOTc6IE9vT28wbyAuIG8wbyAvIG8wMDBPMG8KICAgZWxzZSA6CiAgICBpaUlJaWkgKz0gJyAnICsgTzBvTzAKICAgIGlmIDgzIC0gODM6IG8wbyAtIG9Pb08wbzAwT08wICogb29vT29vT09vME9PCiBlbHNlIDoKICBpZiB0ZXh0IFsgMCBdID09ICcoJyA6CiAgIGlpSUlpaSA9ICdbQ09MT1I9d2hpdGVdJyArIHRleHQgWyAwIF0gKyAnWy9DT0xPUl1bQ09MT1I9ZG9kZ2VyYmx1ZV0nICsgdGV4dCBbIDEgXSAuIHVwcGVyICggKSArICdbL0NPTE9SXVtDT0xPUj13aGl0ZV0nICsgdGV4dCBbIDIgOiBdICsgJ1svQ09MT1JdJwogIGVsc2UgOgogICBpaUlJaWkgPSAnW0NPTE9SPWRvZGdlcmJsdWVdJyArIHRleHQgWyAwIF0gKyAnWy9DT0xPUl1bQ09MT1I9d2hpdGVdJyArIHRleHQgWyAxIDogXSArICdbL0NPTE9SXScKICAgaWYgOTAgLSA5MDogaWlJSTExaTFJMUlJaSAqIG8wMDBPMG8KIE9PME9vb09vID0gMAogd2hpbGUgT08wT29vT28gIT0gMSA6CiAgaWYgaWlJSWlpIC4gc3RhcnRzd2l0aCAoICcgJyApIDoKICAgaWlJSWlpID0gaWlJSWlpIFsgMSA6IF0KICBPTzBPb29PbyA9IDEKIGlmIGlpSUlpaSAuIHN0YXJ0c3dpdGggKCAnW0NPTE9SPWRvZGdlcmJsdWVdICcgKSA6CiAgaWlJSWlpID0gJ1tDT0xPUj1kb2RnZXJibHVlXScgKyBpaUlJaWkgWyAxOSA6IF0KICBpZiAxMyAtIDEzOiBPT08wTzBPMG9vb29vICUgaTExSWlpICUgbzBvCiByZXR1cm4gaWlJSWlpCiBpZiAyNSAtIDI1OiBJSTEgJSBJSUlJaWlJSTExMSAqIE9vbzAwb09vMG9PbyAtIG8wb28KIGlmIDk1IC0gOTU6IG8wMDBPMG8gJSBPb09vMG8gKiBvMDAwTzBvICsgT09PME8wTzBvb29vbyAuIE9vT28wbyAlIElJMQpkZWYgSUkxMUlJMUkgKCB1cmwgKSA6CiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQWZyaWNhbicgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9YWZyaWNhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0FyYWJpYycgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9YXJhYmljJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQXNpYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWFzaWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQXVzdHJhbGlhbicgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9YXVzdHJhbGlhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0F1c3RyaWFuJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1hdXN0cmlhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0JlbGdpYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWJlbGdpYW4nICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdCcmF6aWxpYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWJyYXppbGlhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0NhbmFkaWFuJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1jYW5hZGlhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0NvbHVtYmlhbicgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9Y29sdW1iaWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQ3plY2gnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWN6ZWNoJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnRGFuaXNoJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1kYW5pc2gnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdEb21pbmljYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWRvbWluaWNhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0R1dGNoJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1kdXRjaCcgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0VneXB0aWFuJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1lZ3lwdGlhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0ZpbGlwaW5vJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1maWxpcGlubycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0Zpbm5pc2gnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWZpbm5pc2gnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdGcmVuY2gnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWZyZW5jaCcgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0dlcm1hbicgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9Z2VybWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnR3JlZWsnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWdyZWVrJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnSGVicmV3JyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1oZWJyZXcnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdIdW5nYXJpYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWh1bmdhcmlhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0ljZWxhbmRpYycgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9aWNlbGFuZGljJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnSW5kaWFuJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1pbmRpYW4nICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdJcmlzaCcgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9aXJpc2gnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdJdGFsaWFuJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1pdGFsaWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnSmFwYW5lc2UnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWphcGFuZXNlJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnS29yZWFuJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1rb3JlYW4nICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdMZWJhbmVzZScgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9bGViYW5lc2UnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdNb25nb2xpYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPW1vbmdvbGlhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ05lcGFsaScgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9bmVwYWxpJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnTmV3IFplYWxhbmQnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPW5ld3plYWxhbmQnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdOb3J3ZWdpYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPW5vcndlZ2lhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1Bha2lzdGFuaScgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9cGFraXN0YW5pJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnUG9saXNoJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1wb2xpc2gnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdQb3J0dWd1ZXNlJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1wb3J0dWd1ZXNlJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnUm9tYW5pYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPXJvbWFuaWFuJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnUnVzc2lhbicgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9cnVzc2lhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1NpbmdhcG9yZScgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9c2luZ2Fwb3JlJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnU3BhbmlzaCcgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9c3BhbmlzaCcgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1N3ZWRpc2gnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPXN3ZWRpc2gnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdTd2lzcycgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9c3dpc3MnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdTeXJpYW4nICwgc3RyICggdXJsICkgKyAnJmdlbnJlPXN5cmlhbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1RhbWlsJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT10YW1pbCcgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1RoYWknICwgc3RyICggdXJsICkgKyAnJmdlbnJlPXRoYWknICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdUdXJraXNoJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT10dXJraXNoJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnVUsnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPXVrJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnVVNBJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT11c2EnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdWaWV0bmFtZXNlJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT12aWV0bmFtZXNlJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBpZiA1MiAtIDUyOiBJSTExaUlpSUlJaUkgKiBvb29Pb29PT28wT08gKyBvMG8gKiBvMG8gJSBPMDBvb29vbzAwICUgbzBvCiBpZiA5NiAtIDk2OiBvMGlpMUkgKiBvb29Pb29PT28wT08gLSBJSTExaUlpSUlJaUkgKiBvMGlpMUkgKiBPMDBvb29vbzAwCmRlZiBJMUlJSWkxaSAoICkgOgogT29vMDAwTzAwICggKQogT29vSWlpMUkxaUkgPSBvT29PbzAgKCAnd2VsY29tZXRleHQnICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9PME9vICkgOgogIHNodXRpbCAuIHJtdHJlZSAoIG9PME9vICkKIGlJaSA9IDEKIG9vb09vICggKQogb08wMDBvME9vMDAgPSBpMTEgLiB5ZXNubyAoICdBcmUgeW91IHN1cmU/ISEhJyAsICdUaGlzIGlzIG1ldGhvZCBpcyB2ZXJ5IGRhdGVkIGFuZCBpcyBvbmx5IGxlZnQgaGVyZSBmb3IgTE9DQUwgaW5zdGFsbHMuIEZvciBvbmxpbmUgYmFja3VwcyB5b3UgcmVhbGx5IHNob3VsZCBiZSB1c2luZyB0aGUgTmFOIGJhY2t1cCBvcHRpb24gd2hpY2ggY3JlYXRlcyBhIG11Y2ggc21hbGxlciBmaWxlIGFuZCBhbGxvd3MgZm9yIGEgbXVjaCBtb3JlIHJlbGlhYmxlIGluc3RhbGwgcHJvY2Vzcy4nICkKIGlmIG9PMDAwbzBPbzAwID09IDAgOgogIHJldHVybgogb09vb29PbzBvID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggSTExaTEgLCAnQ29tbXVuaXR5X0J1aWxkcycgLCAnTXlfQnVpbGRzJyAsICcnICkgKQogSUlJID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggSTExaTEgLCAnQ29tbXVuaXR5X0J1aWxkcycgLCAnTXlfQnVpbGRzJyAsICdteV9mdWxsX2JhY2t1cC56aXAnICkgKQogSWlpSSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIEkxMWkxICwgJ0NvbW11bml0eV9CdWlsZHMnICwgJ015X0J1aWxkcycgLCAnbXlfZnVsbF9iYWNrdXBfR1VJX1NldHRpbmdzLnppcCcgKSApCiBpZiA3NSAtIDc1OiBJSTEgLiBJSTExaUlpSUlJaUkgKyBvMG9vIC8gSUlJSWlpSUkxMTEgLSBvMDAwTzBvICUgSUlJSWlpSUkxMTEKIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBvT29vb09vMG8gKSA6CiAgb3MgLiBtYWtlZGlycyAoIG9Pb29vT28wbyApCiAgaWYgODkgLSA4OTogb29vME8wTzAwICogSUlpaTFJICsgaTExaUlpaUlpaSAuIElJMQogTzBPMCA9IG9PMG9vbzAwbzBvMDAwT28gKCBoZWFkaW5nID0gIkVudGVyIGEgbmFtZSBmb3IgdGhpcyBiYWNrdXAiICkKIGlmICggbm90IE8wTzAgKSA6CiAgcmV0dXJuIEZhbHNlICwgMAogIGlmIDEwMCAtIDEwMDogTzAwb29vb28wMCAtIGkxMWlJaWlJaWkgLiBPb09vMG8gKiBvMG9vCiBvT0lJSUkgPSB1cmxsaWIgLiBxdW90ZV9wbHVzICggTzBPMCApCiBvb09PbyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIG9Pb29vT28wbyAsIG9PSUlJSSArICcuemlwJyApICkKIGkxaWlpMUlpaWlJMWkxID0gWyBPTzBvIF0KIElJSWlJMWkxID0gWyAieGJtYy5sb2ciICwgInhibWMub2xkLmxvZyIgLCAia29kaS5sb2ciICwgImtvZGkub2xkLmxvZyIgLCAnLkRTX1N0b3JlJyAsICcuc2V0dXBfY29tcGxldGUnICwgJ1hCTUNIZWxwZXIuY29uZicgLCAnVGh1bWJzLmRiJyAsICcuZ2l0aWdub3JlJyBdCiBJSWkxMWlJSTExaTEgPSBbIE9PMG8gLCAnY2FjaGUnICwgJ3N5c3RlbScgLCAnVGh1bWJuYWlscycgLCAicGVyaXBoZXJhbF9kYXRhIiAsICdsaWJyYXJ5JyAsICdrZXltYXBzJyBdCiBpaTExMTExSSA9IFsgInhibWMubG9nIiAsICJ4Ym1jLm9sZC5sb2ciICwgImtvZGkubG9nIiAsICJrb2RpLm9sZC5sb2ciICwgIlRleHR1cmVzMTMuZGIiICwgJy5EU19TdG9yZScgLCAnLnNldHVwX2NvbXBsZXRlJyAsICdYQk1DSGVscGVyLmNvbmYnICwgJ2FkdmFuY2Vkc2V0dGluZ3MueG1sJyAsICdUaHVtYnMuZGInICwgJy5naXRpZ25vcmUnIF0KIEkxMTFpaWlpaTEgPSAiQ3JlYXRpbmcgZnVsbCBiYWNrdXAgb2YgZXhpc3RpbmcgYnVpbGQiCiBPT09Pb08gPSAiQ3JlYXRpbmcgQ29tbXVuaXR5IEJ1aWxkIgogT08wb29Pb09PME9PbyA9ICJBcmNoaXZpbmcuLi4iCiBPb29Pb29vbzAwMDAgPSAiIgogSTFpaTFpMTFpID0gIlBsZWFzZSBXYWl0IgogaWYgODAgLSA4MDogaWlJSTExaTFJMUlJaSAlIE9vMDBvbzBvTyAlIElJMSAqIGlpSUkxMWkxSTFJSWkgJSBJSUlJaWlJSTExMQogaWYgb29PbyA9PSAndHJ1ZScgOgogIG8wME9vbzAgKCBPbzBvMDAwMG8wbzAgLCBJSUkgLCBJMTExaWlpaWkxICwgT08wb29Pb09PME9PbyAsIE9vb09vb29vMDAwMCAsIEkxaWkxaTExaSAsIGkxaWlpMUlpaWlJMWkxICwgSUlJaUkxaTEgKQogIGlmIDQxIC0gNDE6IElJMSAvIE8wMG9vb29vMDAKIG9PMDAwbzBPbzAwID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICJEbyB5b3Ugd2FudCB0byBpbmNsdWRlIHlvdXIgYWRkb25fZGF0YSBmb2xkZXI/IiAsICdUaGlzIGNvbnRhaW5zIEFMTCBhZGRvbiBzZXR0aW5ncyBpbmNsdWRpbmcgcGFzc3dvcmRzIGJ1dCBtYXkgYWxzbyBjb250YWluIGltcG9ydGFudCBpbmZvcm1hdGlvbiBzdWNoIGFzIHNraW4gc2hvcnRjdXRzLiBXZSByZWNvbW1lbmQgTUFOVUFMTFkgcmVtb3ZpbmcgdGhlIGFkZG9uX2RhdGEgZm9sZGVycyB0aGF0IGFyZW5cJ3QgcmVxdWlyZWQuJyAsIHllc2xhYmVsID0gJ1llcycgLCBub2xhYmVsID0gJ05vJyApCiBpZiA3MCAtIDcwOiBJaWkgJSBvMGlpMUkgJSBPMDBvb29vbzAwIC8gb09vTzBvMDBPTzAgJSBpMTFpSWlpSWlpIC8gTzAwb29vb28wMAogaWYgb08wMDBvME9vMDAgPT0gMCA6CiAgSUlpMTFpSUkxMWkxID0gWyBPTzBvICwgJ2NhY2hlJyAsICdzeXN0ZW0nICwgJ3BlcmlwaGVyYWxfZGF0YScgLCAnbGlicmFyeScgLCAna2V5bWFwcycgLCAnYWRkb25fZGF0YScgLCAnVGh1bWJuYWlscycgXQogIGlmIDQgLSA0OiBPbzAwb28wb08KIGVsaWYgb08wMDBvME9vMDAgPT0gMSA6CiAgcGFzcwogIGlmIDkzIC0gOTM6IG9vb09vb09PbzBPTyAlIE8wMG9vb29vMDAKIGlmIE9vIC4gcmVwbGFjZSAoICclMjAnICwgJyAnICkgaW4gT29vSWlpMUkxaUkgYW5kIE9vICE9ICcnIDoKICBpZiAoIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoICc3MzYzNzI2OTcwNzQyZTZkNmY2NDc1NmM2NTJlNjM3OTY3NzA2NjY5JyApICkgKSBhbmQgT28gLiByZXBsYWNlICggJyUyMCcgLCAnICcgKSBpbiBJSTExaWkgKCApICkgb3Igbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoICc3MzYzNzI2OTcwNzQyZTZkNmY2NDc1NmM2NTJlNjM3OTY3NzA2NjY5JyApICkgKSA6CiAgIG9PMDAwbzBPbzAwID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICJTdG9wIGxlZWNoZXJzIHByb2ZpdGluZyBmcm9tIHlvdXIgd29yaz8iICwgJ0lmIHlvdVwnZCBwcmVmZXIgc2VsbGVycyBub3QgdG8gcHJvZml0IGZyb20geW91ciBidWlsZCBjbGljayB5ZXMgdG8gYWRkIGEgc3RhcnR1cCBtZXNzYWdlIG9uIHlvdXIgYnVpbGQuIERvIHlvdSB3YW50IGFkZCB0aGUgbWVzc2FnZT8nICwgeWVzbGFiZWwgPSAnTm8nICwgbm9sYWJlbCA9ICdZZXMnICkKICAgaWYgb08wMDBvME9vMDAgPT0gMCA6CiAgICBPbzBPMG9vb28gKCBPbyApCiAgIGlmIG9PMDAwbzBPbzAwID09IDEgOgogICAgdHJ5IDoKICAgICBPT28wT09vbzAwICggKQogICAgZXhjZXB0IDoKICAgICBwYXNzCiAgICAgaWYgMjIgLSAyMjogaTExSWlpIC8gaTExSWlpIC0gSUlJSWlpSUkxMTEgJSBvMG8gLiBJSTExaUlpSUlJaUkgKyBPbzAwb28wb08KIE9vb08wMG9vME8wICggT28wbzAwMDBvMG8wICkKIGkxaUkgKCApCiBvMDBPb28wICggT28wbzAwMDBvMG8wICwgb29PT28gLCBPT09Pb08gLCBPTzBvb09vT08wT09vICwgT29vT29vb28wMDAwICwgSTFpaTFpMTFpICwgSUlpMTFpSUkxMWkxICwgaWkxMTExMUkgKQogdGltZSAuIHNsZWVwICggMSApCiBpZiA3MyAtIDczOiBJSTEgLiBpaUlJMTFpMUkxSUlpIC8gT09PME8wTzBvb29vbyAtIE9PTzBPME8wb29vb28KIElpSTExSUlpMTFJaWkgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvT29vb09vMG8gLCBvT0lJSUkgKyAnX2d1aXNldHRpbmdzLnppcCcgKSApCiBpaTExaTFJMWkgPSB6aXBmaWxlIC4gWmlwRmlsZSAoIElpSTExSUlpMTFJaWkgLCBtb2RlID0gJ3cnICkKIGlmIDQ5IC0gNDk6IElJMSArIElJMSAvIElJMTFpSWlJSUlpSSAuIG9vb09vb09PbzBPTwogdHJ5IDoKICBpaTExaTFJMWkgLiB3cml0ZSAoIGlpSTFJaUkgLCAnZ3Vpc2V0dGluZ3MueG1sJyAsIHppcGZpbGUgLiBaSVBfREVGTEFURUQgKQogZXhjZXB0IDoKICBpSWkgPSAwCiAgaWYgMTMgLSAxMzogT29vMDBvT28wb09vIC4gb29vME8wTzAwIC0gT29PbzBvIC4gbzBvbyAuIElJaWkxSQogdHJ5IDoKICBpaTExaTFJMWkgLiB3cml0ZSAoIHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIE9vMG8wMDAwbzBvMCAsICd1c2VyZGF0YScgLCAncHJvZmlsZXMueG1sJyApICkgLCAncHJvZmlsZXMueG1sJyAsIHppcGZpbGUgLiBaSVBfREVGTEFURUQgKQogZXhjZXB0IDoKICBwYXNzCiAgaWYgNjYgLSA2NjogaWlJSTExaTFJMUlJaSAqIE9vMDBvbzBvTwogaWkxMWkxSTFpIC4gY2xvc2UgKCApCiBpZiA4MyAtIDgzOiBJSTEKIGlmIG9vT28gPT0gJ3RydWUnIDoKICBpSUlpMTExSWlJSTFpID0gemlwZmlsZSAuIFppcEZpbGUgKCBJaWlJICwgbW9kZSA9ICd3JyApCiAgdHJ5IDoKICAgaUlJaTExMUlpSUkxaSAuIHdyaXRlICggaWlJMUlpSSAsICdndWlzZXR0aW5ncy54bWwnICwgemlwZmlsZSAuIFpJUF9ERUZMQVRFRCApCiAgZXhjZXB0IDoKICAgaUlpID0gMAogICBpZiA2NyAtIDY3OiBvMDAwTzBvICUgSUlpaTFJCiAgdHJ5IDoKICAgaUlJaTExMUlpSUkxaSAuIHdyaXRlICggeGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggT28wbzAwMDBvMG8wICwgJ3VzZXJkYXRhJyAsICdwcm9maWxlcy54bWwnICkgKSAsICdwcm9maWxlcy54bWwnICwgemlwZmlsZSAuIFpJUF9ERUZMQVRFRCApCiAgZXhjZXB0IDoKICAgcGFzcwogIGlJSWkxMTFJaUlJMWkgLiBjbG9zZSAoICkKICBpZiA5MiAtIDkyOiBvb28wTzBPMDAgKiBPT08wTzBPMG9vb29vICUgT29PbzBvIC4gSUlpaTFJCiBpZiBpSWkgPT0gMCA6CiAgaTExIC4gb2sgKCAiRkFJTEVEISIgLCAnVGhlIGd1aXNldHRpbmdzLnhtbCBmaWxlIGNvdWxkIG5vdCBiZSBmb3VuZCBvbiB5b3VyIHN5c3RlbSwgcGxlYXNlIHJlYm9vdCBhbmQgdHJ5IGFnYWluLicgLCAnJyAsICcnICkKICBpZiA2NiAtIDY2OiBvMG8gKyBJSUlJaWlJSTExMQogZWxzZSA6CiAgaTExIC4gb2sgKCAiU1VDQ0VTUyEiICwgJ1lvdSBBcmUgTm93IEJhY2tlZCBVcC4gUmVtZW1iZXIgdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBsb2NhbCBiYWNrdXAgcHVycG9zZXMgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3Igc2hhcmluZyBvbmxpbmUuIFVzZSB0aGUgZmFyIHN1cGVyaW9yIE5hTiBDUCBiYWNrdXAgbWV0aG9kIGZvciBvbmxpbmUgdXNlLicgKQogIGlmIDQ4IC0gNDg6IG9Pb08wbzAwT08wCiAgaWYgb29PbyA9PSAndHJ1ZScgOgogICBpMTEgLiBvayAoICJCdWlsZCBMb2NhdGlvbnMiICwgJ0Z1bGwgQmFja3VwIChvbmx5IHVzZWQgdG8gcmVzdG9yZSBvbiB0aGlzIGRldmljZSk6IFtDT0xPUj1kb2RnZXJibHVlXScgKyBJSUkgLCAnWy9DT0xPUl1Vbml2ZXJzYWwgQmFja3VwOiBbQ09MT1I9ZG9kZ2VyYmx1ZV0nICsgb29PT28gKyAnWy9DT0xPUl0nICkKICAgaWYgOTYgLSA5NjogaTExSWlpIC4gSUkxCiAgZWxzZSA6CiAgIGkxMSAuIG9rICggIkJ1aWxkIExvY2F0aW9uIiAsICdVbml2ZXJzYWwgQmFja3VwOltDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV0nICsgb29PT28gKyAnWy9DT0xPUl0nICkKICAgaWYgMzkgLSAzOTogSUkxMWlJaUlJSWlJICsgbzBvbwogICBpZiA4MCAtIDgwOiBJSTExaUlpSUlJaUkgJSBvMG9vIC8gSWlpCmRlZiBPT09PTzAwMG9vMCAoICkgOgogT29vMDAwTzAwICggKQogT29vSWlpMUkxaUkgPSBvT29PbzAgKCAnd2VsY29tZXRleHQnICkKIG9vb09vICggKQogaWYgMiAtIDI6IE9vT28wbyAqIG8wMDBPMG8gLiBPbzAwb28wb08gKiBvb28wTzBPMDAKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9PME9vICkgOgogIHNodXRpbCAuIHJtdHJlZSAoIG9PME9vICkKICBpZiAzMCAtIDMwOiBPbzAwb28wb08KIG9PMDAwbzBPbzAwID0gaTExIC4geWVzbm8gKCAnQ3JlYXRlIG5vb2JzYW5kbmVyZHMgQnVpbGQnICwgJ1RoaXMgYmFja3VwIHdpbGwgb25seSB3b3JrIGlmIHlvdSBzaGFyZSB5b3VyIGJ1aWxkIG9uIHRoZSBbQ09MT1I9ZG9kZ2VyYmx1ZV1OT09CU0FORE5FUkRTWy9DT0xPUl0gcG9ydGFsIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvbW11bml0eS4gSXQgd2lsbCBub3Qgd29yayB3aXRoIGFueSBvdGhlciBpbnN0YWxsZXIvd2l6YXJkLCBkbyB5b3Ugd2lzaCB0byBjb250aW51ZT8nICkKIGlmIDk4IC0gOTg6IG9vbzBPME8wMCAvIElJaWkxSSAuIG8wbyAqIGkxMWlJaWlJaWkgKyBpaUlJMTFpMUkxSUlpICogbzBvCiBpZiBvTzAwMG8wT28wMCA9PSAxIDoKICBJMTEgLiBjcmVhdGUgKCAnQ2hlY2tpbmcgRmlsZSBTdHJ1Y3R1cmUnICwgJycgLCAnUGxlYXNlIHdhaXQnICwgJycgKQogIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBPT08wMCApIDoKICAgb3MgLiBtYWtlZGlycyAoIE9PTzAwICkKICAgaWYgNjcgLSA2Nzogb29vME8wTzAwCiAgaUlpID0gMQogIG9Pb29vT28wbyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIEkxMWkxICwgJ0NvbW11bml0eV9CdWlsZHMnICwgJ015X0J1aWxkcycgLCAnJyApICkKICBJSUkgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMSAsICdDb21tdW5pdHlfQnVpbGRzJyAsICdNeV9CdWlsZHMnICwgJ215X2Z1bGxfYmFja3VwLnppcCcgKSApCiAgSWlpSSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIEkxMWkxICwgJ0NvbW11bml0eV9CdWlsZHMnICwgJ015X0J1aWxkcycgLCAnbXlfZnVsbF9iYWNrdXBfR1VJX1NldHRpbmdzLnppcCcgKSApCiAgaWYgODggLSA4ODogaWlJSTExaTFJMUlJaQogIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBvT29vb09vMG8gKSA6CiAgIG9zIC4gbWFrZWRpcnMgKCBvT29vb09vMG8gKQogICBpZiA4IC0gODogb09vTzBvMDBPTzAKICBPME8wID0gb08wb29vMDBvMG8wMDBPbyAoIGhlYWRpbmcgPSAiRW50ZXIgYSBuYW1lIGZvciB0aGlzIGJhY2t1cCIgKQogIGlmIDgyIC0gODI6IElJMQogIGlmICggbm90IE8wTzAgKSA6CiAgIHJldHVybiBGYWxzZSAsIDAKICAgaWYgNzUgLSA3NTogT29vMDBvT28wb09vICUgbzAwME8wbyArIElJMTFpSWlJSUlpSSAlIElJMSAvIE9vMDBvbzBvTwogIG9PSUlJSSA9IHVybGxpYiAuIHF1b3RlX3BsdXMgKCBPME8wICkKICBvb09PbyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIG9Pb29vT28wbyAsIG9PSUlJSSArICcuemlwJyApICkKICBpZiA0IC0gNDogaTExaUlpaUlpaSAtIElJMTFpSWlJSUlpSSAlIG9Pb08wbzAwT08wICogT29PbzBvICUgbzBpaTFJCiAgaWYgNzEgLSA3MTogaTExSWlpIC4gaTExSWlpIC0gSUlpaTFJCiAgaTFpaWkxSWlpaUkxaTEgPSBbIE9PMG8gXQogIElJSWlJMWkxID0gWyAieGJtYy5sb2ciICwgInhibWMub2xkLmxvZyIgLCAia29kaS5sb2ciICwgImtvZGkub2xkLmxvZyIgLCAnLkRTX1N0b3JlJyAsICcuc2V0dXBfY29tcGxldGUnICwgJ1hCTUNIZWxwZXIuY29uZicgLCAnVGh1bWJzLmRiJyAsICcuZ2l0aWdub3JlJyBdCiAgaWkxMTExMUkgPSBbICJ4Ym1jLmxvZyIgLCAieGJtYy5vbGQubG9nIiAsICJrb2RpLmxvZyIgLCAia29kaS5vbGQubG9nIiAsICJUZXh0dXJlczEzLmRiIiAsICcuRFNfU3RvcmUnICwgJy5zZXR1cF9jb21wbGV0ZScgLCAnWEJNQ0hlbHBlci5jb25mJyAsICdhZHZhbmNlZHNldHRpbmdzLnhtbCcgLCAnVGh1bWJzLmRiJyAsICcuZ2l0aWdub3JlJyBdCiAgSTExMWlpaWlpMSA9ICJDcmVhdGluZyBmdWxsIGJhY2t1cCBvZiBleGlzdGluZyBidWlsZCIKICBPT09Pb08gPSAiQ3JlYXRpbmcgQ29tbXVuaXR5IEJ1aWxkIgogIE9PMG9vT29PTzBPT28gPSAiQXJjaGl2aW5nLi4uIgogIE9vb09vb29vMDAwMCA9ICIiCiAgSTFpaTFpMTFpID0gIlBsZWFzZSBXYWl0IgogIGlmIDIyIC0gMjI6IElJMSAvIG9Pb08wbzAwT08wICUgb29vME8wTzAwICogSWlpCiAgaWYgMzIgLSAzMjogSUkxICUgb29vT29vT09vME9PICUgSUlpaTFJIC8gT09PME8wTzBvb29vbwogIGlmIG9vT28gPT0gJ3RydWUnIDoKICAgbzAwT29vMCAoIE9vMG8wMDAwbzBvMCAsIElJSSAsIEkxMTFpaWlpaTEgLCBPTzBvb09vT08wT09vICwgT29vT29vb28wMDAwICwgSTFpaTFpMTFpICwgaTFpaWkxSWlpaUkxaTEgLCBJSUlpSTFpMSApCiAgIGlmIDYxIC0gNjE6IE9vbzAwb09vMG9PbyAuIE9PTzBPME8wb29vb28gLSBJSUlJaWlJSTExMSAtIG9Pb08wbzAwT08wIC8gaTExaUlpaUlpaSAtIE9vbzAwb09vMG9PbwogIG9PMDAwbzBPbzAwID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICJEbyB5b3Ugd2FudCB0byBpbmNsdWRlIHlvdXIgYWRkb25fZGF0YSBmb2xkZXI/IiAsICdUaGlzIGNvbnRhaW5zIEFMTCBhZGRvbiBzZXR0aW5ncyBpbmNsdWRpbmcgcGFzc3dvcmRzIGJ1dCBtYXkgYWxzbyBjb250YWluIGltcG9ydGFudCBpbmZvcm1hdGlvbiBzdWNoIGFzIHNraW4gc2hvcnRjdXRzLiBXZSByZWNvbW1lbmQgTUFOVUFMTFkgcmVtb3ZpbmcgdGhlIGFkZG9uX2RhdGEgZm9sZGVycyB0aGF0IGFyZW5cJ3QgcmVxdWlyZWQuJyAsIHllc2xhYmVsID0gJ1llcycgLCBub2xhYmVsID0gJ05vJyApCiAgaWYgOTggLSA5ODogSUlJSWlpSUkxMTEgLSBvMDAwTzBvIC4gaTExaUlpaUlpaSAqIGlpSUkxMWkxSTFJSWkKICBpZiAyOSAtIDI5OiBJSUlJaWlJSTExMSAvIGkxMUlpaSAlIG8wbwogIGlmIG9PMDAwbzBPbzAwID09IDAgOgogICBJSWkxMWlJSTExaTEgPSBbIE9PMG8gLCAnY2FjaGUnICwgJ3N5c3RlbScgLCAnYWRkb25zJyAsICdUaHVtYm5haWxzJyAsICdDUF9Qcm9maWxlcycgLCAncGVyaXBoZXJhbF9kYXRhJyAsICdsaWJyYXJ5JyAsICdrZXltYXBzJyAsICdhZGRvbl9kYXRhJyBdCiAgIGlmIDEwIC0gMTA6IElJaWkxSSAlIElJMSAlIG9Pb08wbzAwT08wCiAgZWxpZiBvTzAwMG8wT28wMCA9PSAxIDoKICAgSUlpMTFpSUkxMWkxID0gWyBPTzBvICwgJ2NhY2hlJyAsICdzeXN0ZW0nICwgJ2FkZG9ucycgLCAnVGh1bWJuYWlscycgLCAnQ1BfUHJvZmlsZXMnICwgInBlcmlwaGVyYWxfZGF0YSIgLCAnbGlicmFyeScgLCAna2V5bWFwcycgXQogICBpZiAzOSAtIDM5OiBPb28wMG9PbzBvT28gKiBJaWkgLiBPT08wTzBPMG9vb29vICogbzBvCiAgaWYgT28gLiByZXBsYWNlICggJyUyMCcgLCAnICcgKSBpbiBPb29JaWkxSTFpSSBhbmQgT28gIT0gJycgOgogICBpZiAoIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoICc3MzYzNzI2OTcwNzQyZTZkNmY2NDc1NmM2NTJlNjM3OTY3NzA2NjY5JyApICkgKSBhbmQgT28gLiByZXBsYWNlICggJyUyMCcgLCAnICcgKSBpbiBJSTExaWkgKCApICkgb3Igbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoICc3MzYzNzI2OTcwNzQyZTZkNmY2NDc1NmM2NTJlNjM3OTY3NzA2NjY5JyApICkgKSA6CiAgICBvTzAwMG8wT28wMCA9IHhibWNndWkgLiBEaWFsb2cgKCApIC4geWVzbm8gKCAiU3RvcCBsZWVjaGVycyBwcm9maXRpbmcgZnJvbSB5b3VyIHdvcms/IiAsICdJZiB5b3VcJ2QgcHJlZmVyIHNlbGxlcnMgbm90IHRvIHByb2ZpdCBmcm9tIHlvdXIgYnVpbGQgY2xpY2sgeWVzIHRvIGFkZCBhIHN0YXJ0dXAgbWVzc2FnZSBvbiB5b3VyIGJ1aWxkLiBEbyB5b3Ugd2FudCBhZGQgdGhlIG1lc3NhZ2U/JyAsIHllc2xhYmVsID0gJ05vJyAsIG5vbGFiZWwgPSAnWWVzJyApCiAgICBpZiBvTzAwMG8wT28wMCA9PSAwIDoKICAgICBPbzBPMG9vb28gKCBPbyApCiAgICBpZiBvTzAwMG8wT28wMCA9PSAxIDoKICAgICB0cnkgOgogICAgICBPT28wT09vbzAwICggKQogICAgIGV4Y2VwdCA6CiAgICAgIHBhc3MKICAgICAgaWYgODkgLSA4OTogSUlJSWlpSUkxMTEgLSBpMTFJaWkgLiBvMG8gLSBPb09vMG8gLSBvMDAwTzBvCiAgb29vMDAwb09PICggKQogIE9vb08wMG9vME8wICggT28wbzAwMDBvMG8wICkKICBvMDBPb28wICggT28wbzAwMDBvMG8wICwgb29PT28gLCBPT09Pb08gLCBPTzBvb09vT08wT09vICwgT29vT29vb28wMDAwICwgSTFpaTFpMTFpICwgSUlpMTFpSUkxMWkxICwgaWkxMTExMUkgKQogIGlmIDc5IC0gNzk6IE9vMDBvbzBvTyArIE9vMDBvbzBvTyArIElJSUlpaUlJMTExCiAgaWYgMzkgLSAzOTogT09PME8wTzBvb29vbyAtIElJMQogIHRyeSA6CiAgIG9zIC4gcmVtb3ZlICggb09Pb28wT28gKQogIGV4Y2VwdCA6CiAgIHBhc3MKICAgaWYgNjMgLSA2MzogSUlpaTFJICUgbzBpaTFJICogaTExSWlpCiAgdHJ5IDoKICAgb3MgLiByZW1vdmUgKCBvTzBPbyApCiAgZXhjZXB0IDoKICAgcGFzcwogICBpZiA3OSAtIDc5OiBPT08wTzBPMG9vb29vCiAgdGltZSAuIHNsZWVwICggMSApCiAgaWYgMzIgLSAzMjogT29vMDBvT28wb09vIC4gT09PME8wTzBvb29vbyArIElJSUlpaUlJMTExIC8gSWlpIC8gT28wMG9vMG9PIC8gSUkxMWlJaUlJSWlJCiAgaWYgMTUgLSAxNTogb09vTzBvMDBPTzAKICBJaUkxMUlJaTExSWlpID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggb09vb29PbzBvICwgb09JSUlJICsgJ19ndWlzZXR0aW5ncy56aXAnICkgKQogIGlmIDQgLSA0OiBPbzAwb28wb08gKyBJSWlpMUkgKiBvb28wTzBPMDAgKyBpaUlJMTFpMUkxSUlpICogbzBpaTFJICUgT29vMDBvT28wb09vCiAgdHJ5IDoKICAgc2h1dGlsIC4gY29weWZpbGUgKCBpaUkxSWlJICwgb3MgLiBwYXRoIC4gam9pbiAoIE9PTzAwICwgJ2d1aXNldHRpbmdzLnhtbCcgKSApCiAgIGlmIElpSUkgPT0gJ3RydWUnIDoKICAgIHByaW50ICIjIyMgU3VjY2Vzc2Z1bGx5IGNvcGllZCBndWlzZXR0aW5ncyB0byA6ICIgKyBvcyAuIHBhdGggLiBqb2luICggT09PMDAgLCAnZ3Vpc2V0dGluZ3MueG1sJyApCiAgZXhjZXB0IDoKICAgaWYgSWlJSSA9PSAndHJ1ZScgOgogICAgcHJpbnQgIiMjIyBGQUlMRUQgVE8gY29weSBndWlzZXR0aW5ncyB0byA6ICIgKyBvcyAuIHBhdGggLiBqb2luICggT09PMDAgLCAnZ3Vpc2V0dGluZ3MueG1sJyApCiAgIGlJaSA9IDAKICAgaWYgODggLSA4ODogb29vT29vT09vME9PIC0gTzAwb29vb28wMCAlIGkxMWlJaWlJaWkgJSBPb28wMG9PbzBvT28gKiBJSTEKICB0cnkgOgogICBzaHV0aWwgLiBjb3B5ZmlsZSAoIHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIE9vMG8wMDAwbzBvMCAsICd1c2VyZGF0YScgLCAncHJvZmlsZXMueG1sJyApICkgLCB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBPT08wMCAsICdwcm9maWxlcy54bWwnICkgKSApCiAgIHByaW50ICIjIyMgU3VjY2Vzc2Z1bGx5IGNvcGllZCBwcm9maWxlcyB0byA6ICIgKyBvcyAuIHBhdGggLiBqb2luICggT09PMDAgLCAncHJvZmlsZXMueG1sJyApCiAgZXhjZXB0IDoKICAgcGFzcwogICBpZiA0MCAtIDQwOiBpaUlJMTFpMUkxSUlpCiAgaUkxSWkxMSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsICdzY3JpcHQuc2tpbnNob3J0Y3V0cycgKQogIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIGlJMUlpMTEgKSA6CiAgIHRyeSA6CiAgICBzaHV0aWwgLiBjb3B5dHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsICdzY3JpcHQuc2tpbnNob3J0Y3V0cycgKSAsIG9zIC4gcGF0aCAuIGpvaW4gKCBPT08wMCAsICdhZGRvbl9kYXRhJyAsICdzY3JpcHQuc2tpbnNob3J0Y3V0cycgKSApCiAgICBpZiBJaUlJID09ICd0cnVlJyA6CiAgICAgcHJpbnQgIiMjIyBTdWNjZXNzZnVsbHkgY29waWVkIHNraW5zaG9ydGN1dHMgdG8gOiAiICsgb3MgLiBwYXRoIC4gam9pbiAoIE9PTzAwICwgJ2FkZG9uX2RhdGEnICwgJ3NjcmlwdC5za2luc2hvcnRjdXRzJyApCiAgIGV4Y2VwdCA6CiAgICBpMTEgLiBvayAoICdGYWlsZWQgdG8gY29weSBTa2luIFNob3J0Y3V0cycgLCAnVGhlcmUgd2FzIGFuIGVycm9yIHRyeWluZyB0byBiYWNrdXAgeW91ciBzY3JpcHQuc2tpbnNob3J0Y3V0cywgcGxlYXNlIHRyeSBhZ2FpbiBhbmQgaWYgeW91IGNvbnRpbnVlIHRvIHJlY2VpdmUgdGhpcyBtZXNzYWdlIHVwbG9hZCBhIGxvZyBhbmQgc2VuZCBkZXRhaWxzIHRvIHRoZSBub29ic2FuZG5lcmRzIGZvcnVtLicgKQogICAgaWYgSWlJSSA9PSAndHJ1ZScgOgogICAgIHByaW50ICIjIyMgRkFJTEVEIHRvIGNvcHkgc2tpbnNob3J0Y3V0cyB0bzogIiArIG9zIC4gcGF0aCAuIGpvaW4gKCBPT08wMCAsICdhZGRvbl9kYXRhJyAsICdzY3JpcHQuc2tpbnNob3J0Y3V0cycgKQogICAgIGlmIDkzIC0gOTM6IG8wMDBPMG8gLyBpMTFJaWkgLyBvMG8gKyBPb28wMG9PbzBvT28gKyBpMTFpSWlpSWlpCiAgaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIG9vMG8wTzAwICwgSTExaWlpMUlpICkgKSA6CiAgIHRyeSA6CiAgICBzaHV0aWwgLiBjb3B5dHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsIEkxMWlpaTFJaSApICwgb3MgLiBwYXRoIC4gam9pbiAoIE9PTzAwICwgJ2FkZG9uX2RhdGEnICwgSTExaWlpMUlpICkgKQogICAgaWYgSWlJSSA9PSAndHJ1ZScgOgogICAgIHByaW50ICIjIyMgU3VjY2Vzc2Z1bGx5IGNvcGllZCBza2luIGRhdGEgdG8gOiAiICsgb3MgLiBwYXRoIC4gam9pbiAoIE9PTzAwICwgJ2FkZG9uX2RhdGEnICwgSTExaWlpMUlpICkKICAgZXhjZXB0IDoKICAgIGkxMSAuIG9rICggJ0ZhaWxlZCB0byBjb3B5IHNraW4gZGF0YScgLCAnVGhlcmUgd2FzIGFuIGVycm9yIHRyeWluZyB0byBiYWNrdXAgeW91ciBza2luIGRhdGEsIHBsZWFzZSB0cnkgYWdhaW4gYW5kIGlmIHlvdSBjb250aW51ZSB0byByZWNlaXZlIHRoaXMgbWVzc2FnZSB1cGxvYWQgYSBsb2cgYW5kIHNlbmQgZGV0YWlscyB0byB0aGUgbm9vYnNhbmRuZXJkcyBmb3J1bS4nICkKICAgIGlmIElpSUkgPT0gJ3RydWUnIDoKICAgICBwcmludCAiIyMjIEZBSUxFRCB0byBjb3B5IHNraW4gZGF0YSB0bzogIiArIG9zIC4gcGF0aCAuIGpvaW4gKCBPT08wMCAsICdhZGRvbl9kYXRhJyAsIEkxMWlpaTFJaSApCiAgICAgaWYgMTYgLSAxNjogbzAwME8wbyAtIG9vb09vb09PbzBPTyAuIGlpSUkxMWkxSTFJSWkKICBJMTFJMWkxaUkgKCBPT08wMCAsIElpSTExSUlpMTFJaWkgKQogIGlmIDk0IC0gOTQ6IElpaSArIE9vMDBvbzBvTyAuIGkxMUlpaQogIGlmIDY5IC0gNjk6IE9PTzBPME8wb29vb28gLSBPT08wTzBPMG9vb29vCiAgaWYgNDEgLSA0MTogT28wMG9vMG9PICUgbzBpaTFJCiAgaWYgNjcgLSA2NzogT09PME8wTzBvb29vbyAlIE9vT28wbwogIGlmIG9vT28gPT0gJ3RydWUnIDoKICAgSTExSTFpMWlJICggT09PMDAgLCBJaWlJICkKICAgaWYgMzUgLSAzNTogbzAwME8wbyAuIElpaSArIElJMSAlIGlpSUkxMWkxSTFJSWkgJSBJSTExaUlpSUlJaUkKICAgaWYgMzkgLSAzOTogSUlJSWlpSUkxMTEKICBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBPT08wMCApIDoKICAgc2h1dGlsIC4gcm10cmVlICggT09PMDAgKQogICBpZiA2MCAtIDYwOiBJSTExaUlpSUlJaUkKICBpZiBpSWkgPT0gMCA6CiAgIGkxMSAuIG9rICggJ0VSUk9SJyAsICdUaGVyZSB3YXMgYW4gZXJyb3IgYmFja2luZyB1cCB5b3VyIGd1aXNldHRpbmdzLnhtbCwgeW91IGNhbm5vdCBzaGFyZSBhIGJ1aWxkIHdpdGhvdXQgb25lIHNvIHBsZWFzZSB0cnkgYWdhaW4uIElmIHRoaXMga2VlcHMgaGFwcGVuaW5nIHBsZWFzZSB1cGxvYWQgYSBsb2cgYW5kIGNvbnRhY3QgdGhlIG5vb2JzYW5kbmVyZHMgZm9ydW0gd2l0aCBkZXRhaWxzLicgKQogICBpZiA2MiAtIDYyOiBPb09vMG8gKiBvMG8KICBlbHNlIDoKICAgaTExIC4gb2sgKCAiU1VDQ0VTUyEiICwgJ1lvdSBBcmUgTm93IEJhY2tlZCBVcCBhbmQgY2FuIHNoYXJlIHRoaXMgYnVpbGQgd2l0aCB0aGUgY29tbXVuaXR5LicgKQogICBpZiA3NCAtIDc0OiBJaWkgLiBJSWlpMUkKICAgaWYgb29PbyA9PSAndHJ1ZScgOgogICAgaTExIC4gb2sgKCAiQnVpbGQgTG9jYXRpb25zIiAsICdGdWxsIEJhY2t1cCAob25seSB1c2VkIHRvIHJlc3RvcmUgb24gdGhpcyBkZXZpY2UpOiBbQ09MT1I9ZG9kZ2VyYmx1ZV0nICsgSUlJICwgJ1svQ09MT1JdVW5pdmVyc2FsIEJhY2t1cCAodGhpcyB3aWxsIE9OTFkgd29yayBmb3Igc2hhcmluZyBvbiB0aGUgW0NPTE9SPWRvZGdlcmJsdWVdTk9PQlNBTkRORVJEU1svQ09MT1JdIHBvcnRhbCk6W0NSXVtDT0xPUj1kb2RnZXJibHVlXScgKyBvb09PbyArICdbL0NPTE9SXScgKQogICAgaWYgODcgLSA4NzogaTExSWlpCiAgIGVsc2UgOgogICAgaTExIC4gb2sgKCAiQnVpbGQgTG9jYXRpb24iICwgJ1tDT0xPUj1kb2RnZXJibHVlXU5PT0JTQU5ETkVSRFNbL0NPTE9SXSBCYWNrdXAgKHRoaXMgd2lsbCBPTkxZIHdvcmsgZm9yIHNoYXJpbmcgb24gdGhlIENvbW11bml0eSBQb3J0YWwpOltDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV0nICsgb29PT28gKyAnWy9DT0xPUl0nICkKICAgIGlmIDQxIC0gNDE6IElpaSAuIElJaWkxSSAlIGkxMUlpaSArIE9PTzBPME8wb29vb28KICAgIGlmIDIyIC0gMjI6IG8waWkxSSArIGlpSUkxMWkxSTFJSWkgLiBpMTFJaWkgKyBvT29PMG8wME9PMCAqIG9vbzBPME8wMCAuIGkxMWlJaWlJaWkKZGVmIE8wT09PT09PMG9vTyAoIHVybCAsIHZpZGVvICkgOgogaWlpaUkxSWlJMUkxICggKQogT08gPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0NvbW11bml0eV9CdWlsZHMvY29tbXVuaXR5X2J1aWxkc190ZXN0LnBocD9pZD0lcycgJSAoIHVybCApCiBJaTFpSTExMUlJMUkxID0gb09PT09vT08wbyAoIE9PICwgMTAgKSAuIHJlcGxhY2UgKCAnXG4nICwgJycgKSAuIHJlcGxhY2UgKCAnXHInICwgJycgKQogSUkxMUlpSTEgPSByZSAuIGNvbXBpbGUgKCAncGF0aD0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogT29PT09PMDBvT08gPSByZSAuIGNvbXBpbGUgKCAnbXlhcnQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIGlpSUlpSWkgPSByZSAuIGNvbXBpbGUgKCAnYXJ0cGFjaz0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaWlJMTFJaWkgPSByZSAuIGNvbXBpbGUgKCAndmlkZW9wcmV2aWV3PSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBPMDAwb08gPSByZSAuIGNvbXBpbGUgKCAndmlkZW9ndWlkZTE9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIGlpMTFJaTFJaWlJMSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb2d1aWRlMj0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogTzAwbzBvID0gcmUgLiBjb21waWxlICggJ3ZpZGVvZ3VpZGUzPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBPT29PMG8wT09vMCA9IHJlIC4gY29tcGlsZSAoICd2aWRlb2d1aWRlND0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogTzBPb08wb29PT08gPSByZSAuIGNvbXBpbGUgKCAndmlkZW9ndWlkZTU9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIElpSTFpSUlJaTFpSWkgPSByZSAuIGNvbXBpbGUgKCAndmlkZW9sYWJlbDE9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIE9PbzBPT09vT09vID0gcmUgLiBjb21waWxlICggJ3ZpZGVvbGFiZWwyPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBJSUlvb28wbzBPID0gcmUgLiBjb21waWxlICggJ3ZpZGVvbGFiZWwzPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBJaWlpSUlpMTFJSSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb2xhYmVsND0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogbzBvb29PbzBvbyA9IHJlIC4gY29tcGlsZSAoICd2aWRlb2xhYmVsNT0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogbzBvb29vTzBvME8gPSByZSAuIGNvbXBpbGUgKCAnbmFtZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaTFpSTFJSWkxSSA9IHJlIC4gY29tcGlsZSAoICdhdXRob3I9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIGlJMWkxMTFJMUlpID0gcmUgLiBjb21waWxlICggJ3ZlcnNpb249IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIGlpSTExMTFJMTFpMUkgPSByZSAuIGNvbXBpbGUgKCAnZGVzY3JpcHRpb249IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIG9vMDBpMWkxMUkxSTEgPSByZSAuIGNvbXBpbGUgKCAnRG93bmxvYWRVUkw9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIE9PT09Pb29vTyA9IHJlIC4gY29tcGlsZSAoICdVcGRhdGVVUkw9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIG9PME9vb28wT29PID0gcmUgLiBjb21waWxlICggJ1VwZGF0ZURhdGU9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIElpaWkxSUlJSWlpSTExID0gcmUgLiBjb21waWxlICggJ1VwZGF0ZURlc2M9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIG9PbzAgPSByZSAuIGNvbXBpbGUgKCAndXBkYXRlZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogSTFpaWkxSSA9IHJlIC4gY29tcGlsZSAoICdkZWZhdWx0c2tpbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogb29vID0gcmUgLiBjb21waWxlICggJ3NraW5zPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBJSTExMSA9IHJlIC4gY29tcGlsZSAoICd2aWRlb2FkZG9ucz0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogSTExaUlpID0gcmUgLiBjb21waWxlICggJ2F1ZGlvYWRkb25zPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBJaTFJSWlJSTFJID0gcmUgLiBjb21waWxlICggJ3Byb2dyYW1hZGRvbnM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIE9PT2lpID0gcmUgLiBjb21waWxlICggJ3BpY3R1cmVhZGRvbnM9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIElpaTFJMTEgPSByZSAuIGNvbXBpbGUgKCAnc291cmNlcz0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogTzBvMG8gPSByZSAuIGNvbXBpbGUgKCAnYWR1bHQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIElpaWlJaTExMTFJID0gcmUgLiBjb21waWxlICggJ2d1aXNldHRpbmdzPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBpSUkxaTFpaSA9IHJlIC4gY29tcGlsZSAoICd0aHVtYj0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaTFJMWlpMWkgPSByZSAuIGNvbXBpbGUgKCAnZmFuYXJ0PSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBpaWlpSUkxMWlJaSA9IHJlIC4gY29tcGlsZSAoICdvcGVuZWxlYz0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaWYgNTEgLSA1MTogaWlJSTExaTFJMUlJaSAvIE9vMDBvbzBvTyAqIElJSUlpaUlJMTExIC0gT29vMDBvT28wb09vIC8gbzAwME8wbyAuIE9vMDBvbzBvTwogT28wb09PbyA9IE9vT09PTzAwb09PIFsgMCBdIGlmICggbGVuICggT29PT09PMDBvT08gKSA+IDAgKSBlbHNlICcnCiBvMG8wb29PT28wb08gPSBpaUlJaUlpIFsgMCBdIGlmICggbGVuICggaWlJSWlJaSApID4gMCApIGVsc2UgJycKIG9PT28wID0gSUkxMUlpSTEgWyAwIF0gaWYgKCBsZW4gKCBJSTExSWlJMSApID4gMCApIGVsc2UgJycKIE9PbzAgPSBvMG9vb29PMG8wTyBbIDAgXSBpZiAoIGxlbiAoIG8wb29vb08wbzBPICkgPiAwICkgZWxzZSAnJwogSWlpaUkxSWkgPSBpMWlJMUlJaTFJIFsgMCBdIGlmICggbGVuICggaTFpSTFJSWkxSSApID4gMCApIGVsc2UgJycKIElJSUlJbzBvb09vTzAwMG9PID0gaUkxaTExMUkxSWkgWyAwIF0gaWYgKCBsZW4gKCBpSTFpMTExSTFJaSApID4gMCApIGVsc2UgJycKIE9PTzBvT29PME8gPSBpaUkxMTExSTExaTFJIFsgMCBdIGlmICggbGVuICggaWlJMTExMUkxMWkxSSApID4gMCApIGVsc2UgJ05vIGluZm9ybWF0aW9uIGF2YWlsYWJsZScKIEkxaWlpMTEgPSBvT28wIFsgMCBdIGlmICggbGVuICggb09vMCApID4gMCApIGVsc2UgJycKIElJSTFJMWlpID0gSTFpaWkxSSBbIDAgXSBpZiAoIGxlbiAoIEkxaWlpMUkgKSA+IDAgKSBlbHNlICcnCiBpaUlJaTExaWkxSWkgPSBvb28gWyAwIF0gaWYgKCBsZW4gKCBvb28gKSA+IDAgKSBlbHNlICcnCiBPTzBpaWlpaTFpaUlJaWkgPSBJSTExMSBbIDAgXSBpZiAoIGxlbiAoIElJMTExICkgPiAwICkgZWxzZSAnJwogSUkxSUlpaTFJMTFJID0gSTExaUlpIFsgMCBdIGlmICggbGVuICggSTExaUlpICkgPiAwICkgZWxzZSAnJwogaWkxSWlJSWlJMTExMTFJaSA9IElpMUlJaUlJMUkgWyAwIF0gaWYgKCBsZW4gKCBJaTFJSWlJSTFJICkgPiAwICkgZWxzZSAnJwogTzBPT28gPSBPT09paSBbIDAgXSBpZiAoIGxlbiAoIE9PT2lpICkgPiAwICkgZWxzZSAnJwogTzBvME8wT08wT28wME9PMG9vID0gSWlpMUkxMSBbIDAgXSBpZiAoIGxlbiAoIElpaTFJMTEgKSA+IDAgKSBlbHNlICcnCiBvT08wMG8wTzAgPSBPMG8wbyBbIDAgXSBpZiAoIGxlbiAoIE8wbzBvICkgPiAwICkgZWxzZSAnJwogaUlJaWkxaWlpSWlpSSA9IElpaWlJaTExMTFJIFsgMCBdIGlmICggbGVuICggSWlpaUlpMTExMUkgKSA+IDAgKSBlbHNlICdOb25lJwogb09vME9vbzAgPSBvbzAwaTFpMTFJMUkxIFsgMCBdIGlmICggbGVuICggb28wMGkxaTExSTFJMSApID4gMCApIGVsc2UgJ05vbmUnCiBJaWlJSTFpaWlpSTFpID0gT09PT09vb29PIFsgMCBdIGlmICggbGVuICggT09PT09vb29PICkgPiAwICkgZWxzZSAnTm9uZScKIE9vT28gPSBvTzBPb29vME9vTyBbIDAgXSBpZiAoIGxlbiAoIG9PME9vb28wT29PICkgPiAwICkgZWxzZSAnTm9uZScKIElJSTFJaUlpMSA9IElpaWkxSUlJSWlpSTExIFsgMCBdIGlmICggbGVuICggSWlpaTFJSUlJaWlJMTEgKSA+IDAgKSBlbHNlICdOb25lJwogb09PbzAwMG9Pb08wID0gaWlJMTFJaWkgWyAwIF0gaWYgKCBsZW4gKCBpaUkxMUlpaSApID4gMCApIGVsc2UgJ05vbmUnCiBpaTFJSUlJaUkxMSA9IE8wMDBvTyBbIDAgXSBpZiAoIGxlbiAoIE8wMDBvTyApID4gMCApIGVsc2UgJ05vbmUnCiBpSTFJSUlpaSA9IGlpMTFJaTFJaWlJMSBbIDAgXSBpZiAoIGxlbiAoIGlpMTFJaTFJaWlJMSApID4gMCApIGVsc2UgJ05vbmUnCiBJMWkxMWlpMTEgPSBPMDBvMG8gWyAwIF0gaWYgKCBsZW4gKCBPMDBvMG8gKSA+IDAgKSBlbHNlICdOb25lJwogT08wME8wb09PID0gT09vTzBvME9PbzAgWyAwIF0gaWYgKCBsZW4gKCBPT29PMG8wT09vMCApID4gMCApIGVsc2UgJ05vbmUnCiBJaTFpSTExMSA9IE8wT29PMG9vT09PIFsgMCBdIGlmICggbGVuICggTzBPb08wb29PT08gKSA+IDAgKSBlbHNlICdOb25lJwogaTFpMUkgPSBJaUkxaUlJSWkxaUlpIFsgMCBdIGlmICggbGVuICggSWlJMWlJSUlpMWlJaSApID4gMCApIGVsc2UgJ05vbmUnCiBJaUlJaTEgPSBPT28wT09Pb09PbyBbIDAgXSBpZiAoIGxlbiAoIE9PbzBPT09vT09vICkgPiAwICkgZWxzZSAnTm9uZScKIGlJSTExSTFJaTEgPSBJSUlvb28wbzBPIFsgMCBdIGlmICggbGVuICggSUlJb29vMG8wTyApID4gMCApIGVsc2UgJ05vbmUnCiBvMG8wID0gSWlpaUlJaTExSUkgWyAwIF0gaWYgKCBsZW4gKCBJaWlpSUlpMTFJSSApID4gMCApIGVsc2UgJ05vbmUnCiBvT28wb08gPSBvMG9vb09vMG9vIFsgMCBdIGlmICggbGVuICggbzBvb29PbzBvbyApID4gMCApIGVsc2UgJ05vbmUnCiBvMDBvT09vTzBvTyA9IGlJSTFpMWlpIFsgMCBdIGlmICggbGVuICggaUlJMWkxaWkgKSA+IDAgKSBlbHNlICdOb25lJwogb09Pb08wT09vT29PID0gaTFJMWlpMWkgWyAwIF0gaWYgKCBsZW4gKCBpMUkxaWkxaSApID4gMCApIGVsc2UgJ05vbmUnCiBvT09vMDBPb28wTyA9IGlpaWlJSTExaUlpIFsgMCBdIGlmICggbGVuICggaWlpaUlJMTFpSWkgKSA+IDAgKSBlbHNlICdOb25lJwogaWYgMzQgLSAzNDogT29vMDBvT28wb09vCiBJSUlJSWlJMTFJaSA9IG9wZW4gKCBJMTFJSTFpICwgbW9kZSA9ICd3KycgKQogSUlJSUlpSTExSWkgLiB3cml0ZSAoICdpZD0iJyArIHN0ciAoIHZpZGVvICkgKyAnIlxubmFtZT0iJyArIE9PbzAgKyAnIlxudmVyc2lvbj0iJyArIElJSUlJbzBvb09vTzAwMG9PICsgJyInICkKIElJSUlJaUkxMUlpIC4gY2xvc2UgKCApCiBpZiA0OSAtIDQ5OiBvMG8gLiBJSTExaUlpSUlJaUkKIG9vME8gPSBvcGVuICggSUlJSUkgLCBtb2RlID0gJ3InICkKIElpaTFpSTFpaUlpaSA9IG9vME8gLiByZWFkICggKQogb28wTyAuIGNsb3NlICggKQogaWYgMjEgLSAyMTogbzBvbyAlIElJaWkxSSAuIG8wb28KIE9PMDAwT09PbzBPbyA9IHJlIC4gY29tcGlsZSAoICdpZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpaTFpSTFpaUlpaSApCiBPbzAwTzBPID0gT08wMDBPT09vME9vIFsgMCBdIGlmICggbGVuICggT08wMDBPT09vME9vICkgPiAwICkgZWxzZSAnTm9uZScKIG9Pb09Pb28gPSByZSAuIGNvbXBpbGUgKCAndmVyc2lvbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpaTFpSTFpaUlpaSApCiBPME9vMDAwb29PMDAgPSBvT29PT29vIFsgMCBdIGlmICggbGVuICggb09vT09vbyApID4gMCApIGVsc2UgJ05vbmUnCiBPbzAwTzBvME8gLCBPME9vT08gLCBvMG8wb08wT09PID0gdXJsIC4gcGFydGl0aW9uICggJyYnICkKIHByaW50ICIjIyMgQ29tbXVuaXR5IEJ1aWxkIERldGFpbHM6IgogcHJpbnQgIiMjIyBOYW1lOiAiICsgT09vMAogcHJpbnQgIiMjIyBVUkw6ICIgKyBvT28wT29vMAogT09vMG9PMDBvb08wMCAoICcnICwgJ1tDT0xPUj15ZWxsb3ddSU1QT1JUQU5UOlsvQ09MT1JdIEluc3RhbGwgSW5zdHJ1Y3Rpb25zJyAsICcnICwgJ2luc3RydWN0aW9uc18yJyAsICcnICwgJycgLCAnJyAsICcnICkKIG9vMDAwbyAoICdbQ09MT1I9eWVsbG93XURlc2NyaXB0aW9uOlsvQ09MT1JdIFRoaXMgY29udGFpbnMgaW1wb3J0YW50IGluZm8gZnJvbSB0aGUgYnVpbGQgYXV0aG9yJyAsICdOb25lJyAsICdkZXNjcmlwdGlvbicgLCAnJyAsIG9PT29PME9Pb09vTyAsIE9PbzAgLCBJaWlpSTFJaSAsIElJSUlJbzBvb09vTzAwMG9PICwgT09PMG9Pb08wTyAsIEkxaWlpMTEgLCBpaUlJaTExaWkxSWkgLCBPTzBpaWlpaTFpaUlJaWkgLCBJSTFJSWlpMUkxMUkgLCBpaTFJaUlJaUkxMTExMUlpICwgTzBPT28gLCBPMG8wTzBPTzBPbzAwT08wb28gLCBvT08wMG8wTzAgKQogaWYgNjYgLSA2NjogSUlJSWlpSUkxMTEgKiBJSWlpMUkgLSBpMTFJaWkgLyBvMDAwTzBvCiBpZiBPbzAwTzBPID09IE9vMDBPMG8wTyBhbmQgTzBPbzAwMG9vTzAwICE9IElJSUlJbzBvb09vTzAwMG9PIDoKICBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPW9yYW5nZV0tLS0tLS0tLS0tLS0tLS0tLSBVUERBVEUgQVZBSUxBQkxFIC0tLS0tLS0tLS0tLS0tLS0tLVsvQ09MT1JdJyAsICdOb25lJyAsICcnICwgJycgLCAnJyAsICcnICwgJycgKQogIG8wTzAwbyAoICdbQ09MT1I9ZG9kZ2VyYmx1ZV0xLiBVcGRhdGU6Wy9DT0xPUl0gT3ZlcndyaXRlIE15IExpYnJhcnkgJiBQcm9maWxlcycgLCBvT28wT29vMCAsICd1cGRhdGVfY29tbXVuaXR5JyAsIG8wMG9PT29PMG9PICwgJycgLCAndXBkYXRlJyAsIE9PbzAgLCBJSUkxSTFpaSAsIGlJSWlpMWlpaUlpaUkgLCBvMG8wb29PT28wb08gKQogIG8wTzAwbyAoICdbQ09MT1I9ZG9kZ2VyYmx1ZV0yLiBVcGRhdGU6Wy9DT0xPUl0gS2VlcCBNeSBMaWJyYXJ5ICYgUHJvZmlsZXMnICwgb09vME9vbzAgLCAndXBkYXRlX2NvbW11bml0eScgLCBvMDBvT09vTzBvTyAsICcnICwgJ3VwZGF0ZWxpYnByb2ZpbGUnICwgT09vMCAsIElJSTFJMWlpICwgaUlJaWkxaWlpSWlpSSAsIG8wbzBvb09PbzBvTyApCiAgbzBPMDBvICggJ1tDT0xPUj1kb2RnZXJibHVlXTMuIFVwZGF0ZTpbL0NPTE9SXSBLZWVwIE15IExpYnJhcnkgT25seScgLCBvT28wT29vMCAsICd1cGRhdGVfY29tbXVuaXR5JyAsIG8wMG9PT29PMG9PICwgJycgLCAndXBkYXRlbGlicmFyeScgLCBPT28wICwgSUlJMUkxaWkgLCBpSUlpaTFpaWlJaWlJICwgbzBvMG9vT09vMG9PICkKICBvME8wMG8gKCAnW0NPTE9SPWRvZGdlcmJsdWVdNC4gVXBkYXRlOlsvQ09MT1JdIEtlZXAgTXkgUHJvZmlsZXMgT25seScgLCBvT28wT29vMCAsICd1cGRhdGVfY29tbXVuaXR5JyAsIG8wMG9PT29PMG9PICwgJycgLCAndXBkYXRlcHJvZmlsZXMnICwgT09vMCAsIElJSTFJMWlpICwgaUlJaWkxaWlpSWlpSSAsIG8wbzBvb09PbzBvTyApCiAgaWYgNjIgLSA2MjogT28wMG9vMG9PIC4gT09PME8wTzBvb29vbyAuIElJaWkxSQogaWYgb09PbzAwMG9Pb08wICE9ICdOb25lJyBvciBpaTFJSUlJaUkxMSAhPSAnTm9uZScgb3IgaUkxSUlJaWkgIT0gJ05vbmUnIG9yIEkxaTExaWkxMSAhPSAnTm9uZScgb3IgT08wME8wb09PICE9ICdOb25lJyBvciBJaTFpSTExMSAhPSAnTm9uZScgOgogIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9b3JhbmdlXS0tLS0tLS0tLS0tLS0tLS0tLSBWSURFTyBHVUlERVMgLS0tLS0tLS0tLS0tLS0tLS1bL0NPTE9SXScgLCAnTm9uZScgLCAnJyAsICcnICwgJycgLCAnJyAsICcnICkKICBpZiA5NCAtIDk0OiBpMTFJaWkgJSBvMG8gJSBPMDBvb29vbzAwCiBpZiBvT09vMDAwb09vTzAgIT0gJ05vbmUnIDoKICBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPW9yYW5nZV1WaWRlbzpbL0NPTE9SXVtDT0xPUj13aGl0ZV0gUHJldmlld1svQ09MT1JdJyAsIG9PT28wMDBvT29PMCAsICdwbGF5X3ZpZGVvJyAsICcnICwgb09Pb08wT09vT29PICwgJycgLCAnJyApCiAgaWYgOTAgLSA5MDogSUlJSWlpSUkxMTEgKiBvMG9vCiBpZiBpaTFJSUlJaUkxMSAhPSAnTm9uZScgOgogIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9b3JhbmdlXVZpZGVvOlsvQ09MT1JdW0NPTE9SPXdoaXRlXSAnICsgaTFpMUkgKyAnWy9DT0xPUl0nICwgaWkxSUlJSWlJMTEgLCAncGxheV92aWRlbycgLCAnJyAsIG9PT29PME9Pb09vTyAsICcnICwgJycgKQogIGlmIDcgLSA3OiBvb28wTzBPMDAgLiBJSUlJaWlJSTExMSAuIG9vbzBPME8wMCAtIE9vT28wbwogaWYgaUkxSUlJaWkgIT0gJ05vbmUnIDoKICBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPW9yYW5nZV1WaWRlbzpbL0NPTE9SXVtDT0xPUj13aGl0ZV0gJyArIElpSUlpMSArICdbL0NPTE9SXScgLCBpSTFJSUlpaSAsICdwbGF5X3ZpZGVvJyAsICcnICwgb09Pb08wT09vT29PICwgJycgLCAnJyApCiAgaWYgMzMgLSAzMzogaTExSWlpICsgSUkxIC0gbzBvbyAvIE8wMG9vb29vMDAgLyBJSTEKIGlmIEkxaTExaWkxMSAhPSAnTm9uZScgOgogIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9b3JhbmdlXVZpZGVvOlsvQ09MT1JdW0NPTE9SPXdoaXRlXSAnICsgaUlJMTFJMUlpMSArICdbL0NPTE9SXScgLCBJMWkxMWlpMTEgLCAncGxheV92aWRlbycgLCAnJyAsIG9PT29PME9Pb09vTyAsICcnICwgJycgKQogIGlmIDgyIC0gODI6IG9Pb08wbzAwT08wIC8gSUkxMWlJaUlJSWlJIC0gb29vME8wTzAwIC8gaWlJSTExaTFJMUlJaSAqIG8wb28KIGlmIE9PMDBPMG9PTyAhPSAnTm9uZScgOgogIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9b3JhbmdlXVZpZGVvOlsvQ09MT1JdW0NPTE9SPXdoaXRlXSAnICsgbzBvMCArICdbL0NPTE9SXScgLCBPTzAwTzBvT08gLCAncGxheV92aWRlbycgLCAnJyAsIG9PT29PME9Pb09vTyAsICcnICwgJycgKQogIGlmIDU1IC0gNTU6IElJMQogaWYgSWkxaUkxMTEgIT0gJ05vbmUnIDoKICBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPW9yYW5nZV1WaWRlbzpbL0NPTE9SXVtDT0xPUj13aGl0ZV0gJyArIG9PbzBvTyArICdbL0NPTE9SXScgLCBJaTFpSTExMSAsICdwbGF5X3ZpZGVvJyAsICcnICwgb09Pb08wT09vT29PICwgJycgLCAnJyApCiAgaWYgNzMgLSA3MzogSWlpIC0gb09vTzBvMDBPTzAgJSBpaUlJMTFpMUkxSUlpICsgb09vTzBvMDBPTzAgLSBPT08wTzBPMG9vb29vIC4gbzBvbwogaWYgT28wME8wTyAhPSBPbzAwTzBvME8gOgogIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9b3JhbmdlXS0tLS0tLS0tLS0tLS0tLS0tLSBJTlNUQUxMIE9QVElPTlMgLS0tLS0tLS0tLS0tLS0tLS0tWy9DT0xPUl0nICwgJ05vbmUnICwgJycgLCAnJyAsICcnICwgJycgLCAnJyApCiAgaWYgMzggLSAzODogT09PME8wTzBvb29vbwogaWYgb09vME9vbzAgPT0gJ05vbmUnIDoKICBvME8wMG8gKCAnW0NPTE9SPW9yYW5nZV1Tb3JyeSB0aGlzIGJ1aWxkIGlzIGN1cnJlbnRseSB1bmF2YWlsYWJsZVsvQ09MT1JdJyAsICcnICwgJycgLCAnJyAsICcnICwgJycgLCAnJyAsICcnICwgJycgLCAnJyApCiAgaWYgNzkgLSA3OTogTzAwb29vb28wMCAuIG9vb09vb09PbzBPTwogaWYgT28wME8wTyAhPSBPbzAwTzBvME8gOgogIGlmIGkxaUlJaTExaTExMUkgKCApIGFuZCBvT09vMDBPb28wTyAhPSAnTm9uZScgOgogICBpZiAzNCAtIDM0OiBPb09vMG8gKiBPb28wMG9PbzBvT28KICAgbzBPMDBvICggJ1tDT0xPUj1kYXJrY3lhbl1PcGVuRUxFQyBGUkVTSCBJTlNUQUxMWy9DT0xPUl0nICwgb09PbzAwT29vME8gLCAncmVzdG9yZV9vcGVuZWxlYycgLCBvMDBvT09vTzBvTyAsIG9PT29PME9Pb09vTyAsIGlJSWlpMWlpaUlpaUkgLCBPT28wICwgJycgLCAnJyAsICcnICkKICAgaWYgNzEgLSA3MTogT28wMG9vMG9PCiAgIGlmIDk3IC0gOTc6IG9Pb08wbzAwT08wCiAgbzBPMDBvICggJ1tDT0xPUj1kb2RnZXJibHVlXVN0YW5kYXJkIEluc3RhbGxbL0NPTE9SXScgLCBvT28wT29vMCAsICdyZXN0b3JlX2NvbW11bml0eScgLCBvMDBvT09vTzBvTyAsIG9PT29PME9Pb09vTyAsICdtZXJnZScgLCBPT28wICwgSUlJMUkxaWkgLCBpSUlpaTFpaWlJaWlJICwgbzBvMG9vT09vMG9PICkKICBpZiA4NiAtIDg2OiBpaUlJMTFpMUkxSUlpIC0gSUkxMWlJaUlJSWlJIC4gSWlpIC4gT29vMDBvT28wb09vICogbzAwME8wbyAuIE9vbzAwb09vMG9PbwogIGlmIDM0IC0gMzQ6IG8waWkxSSAuIE9vT28wbyAlIE9vMDBvbzBvTyAtIE9PTzBPME8wb29vb28gLyBPb09vMG8KICBpZiA5MSAtIDkxOiBpMTFpSWlpSWlpICUgT29PbzBvICogb29vT29vT09vME9PIC0gb09vTzBvMDBPTzAgLiBPb09vMG8KICBpZiAyOCAtIDI4OiBpMTFpSWlpSWlpCiBpZiBpSUlpaTFpaWlJaWlJICE9ICdOb25lJyA6CiAgaWYgNTEgLSA1MTogbzAwME8wbyArIGkxMUlpaSAqIE9PTzBPME8wb29vb28gLiBJSUlJaWlJSTExMQogIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV0oT3B0aW9uYWwpIEFwcGx5IGd1aXNldHRpbmdzLnhtbCBmaXhbL0NPTE9SXScgLCBpSUlpaTFpaWlJaWlJICwgJ2d1aXNldHRpbmdzZml4JyAsICcnICwgb09Pb08wT09vT29PICwgJycgLCAnJyApCiAgaWYgODIgLSA4MjogSUkxMWlJaUlJSWlJICogb09vTzBvMDBPTzAgJSBJSUlJaWlJSTExMSAuIElJMTFpSWlJSUlpSQogIGlmIDQzIC0gNDM6IG8wb28gLiBpMTFJaWkgKiBpaUlJMTFpMUkxSUlpCmRlZiBpaW8wME8wbzAwb28gKCB1cmwgKSA6CiBpZiAxOSAtIDE5OiBvMDAwTzBvCiBpSTFpMUlpSUlJSWkgPSAnJwogaWYgdXJsID09ICdjcmVhdGVfcGFjaycgOgogIGlJMWkxSWlJSUlJaSA9IG9PT09Pb09PMG8gKCAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0FkZG9uUG9ydGFsL2FwcHJvdmVkLnBocCcgLCAxMCApCiAgb09Pb29JMUkxaTExID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiBicm93c2UgKCAzICwgJ1NlbGVjdCB0aGUgZm9sZGVyIHlvdSB3YW50IHRvIHN0b3JlIHRoaXMgZmlsZSBpbicgLCAnZmlsZXMnICwgJycgLCBGYWxzZSAsIEZhbHNlICkKICBPME8wID0gb08wb29vMDBvMG8wMDBPbyAoIGhlYWRpbmcgPSAiRW50ZXIgYSBuYW1lIGZvciB0aGlzIGtleXdvcmQiICkKICBpZiA3OSAtIDc5OiBvMGlpMUkgLSBPb28wMG9PbzBvT28KICBpZiAoIG5vdCBPME8wICkgOgogICByZXR1cm4gRmFsc2UgLCAwCiAgIGlmIDcwIC0gNzA6IE9vT28wbyAuIG9vb09vb09PbzBPTyAlIE8wMG9vb29vMDAgLyBJSWlpMUkKICBvT0lJSUkgPSB1cmxsaWIgLiBxdW90ZV9wbHVzICggTzBPMCApCiBJMTEgLiBjcmVhdGUgKCAnQmFja2luZyBVcCBBZGRvbnMgJiBSZXBvc2l0b3JpZXMnICwgJycgLCAnUGxlYXNlIFdhaXQuLi4nICkKIGlmIDk4IC0gOTg6IE8wMG9vb29vMDAgJSBpaUlJMTFpMUkxSUlpCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggb08wT28gKSA6CiAgb3MgLiBtYWtlZGlycyAoIG9PME9vICkKICBpZiA4MiAtIDgyOiBpMTFJaWkKICBpZiA3MCAtIDcwOiBJSWlpMUkgKyBpMTFpSWlpSWlpICsgaWlJSTExaTFJMUlJaSAvIG9vbzBPME8wMAogZm9yIE9PbzAgaW4gb3MgLiBsaXN0ZGlyICggaTFpaUlJSTExMWlpICkgOgogIGlmIG5vdCAnbWV0YWRhdGEnIGluIE9PbzAgYW5kIG5vdCAnbW9kdWxlJyBpbiBPT28wIGFuZCBub3QgJ3NjcmlwdC5jb21tb24nIGluIE9PbzAgYW5kIG5vdCAncGFja2FnZXMnIGluIE9PbzAgYW5kIG5vdCAnc2VydmljZS54Ym1jLnZlcnNpb25jaGVjaycgaW4gT09vMCBhbmQgb3MgLiBwYXRoIC4gaXNkaXIgKCBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgT09vMCApICkgOgogICB0cnkgOgogICAgSTExIC4gdXBkYXRlICggMCAsICJCYWNraW5nIFVwIiAsICdbQ09MT1IgeWVsbG93XSVzWy9DT0xPUl0nICUgT09vMCAsICdQbGVhc2UgV2FpdC4uLicgKQogICAgaWYgOSAtIDk6IElpaSAtIE9vMDBvbzBvTwogICAgaWYgMzkgLSAzOTogTzAwb29vb28wMAogICAgaWYgT09vMCBpbiBpSTFpMUlpSUlJSWkgb3IgdXJsICE9ICdjcmVhdGVfcGFjaycgOgogICAgIGlmIDE5IC0gMTk6IG8wMDBPMG8gLiBvMDAwTzBvIC0gaTExaUlpaUlpaQogICAgIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggb08wT28gLCAnYWRkb25zJyAsIE9PbzAgKSApIDoKICAgICAgb3MgLiBtYWtlZGlycyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvTzBPbyAsICdhZGRvbnMnICwgT09vMCApICkKICAgICBzaHV0aWwgLiBjb3B5ZmlsZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBPT28wICwgJ2FkZG9uLnhtbCcgKSAsIG9zIC4gcGF0aCAuIGpvaW4gKCBvTzBPbyAsICdhZGRvbnMnICwgT09vMCAsICdhZGRvbi54bWwnICkgKQogICAgaWYgbm90IE9PbzAgaW4gaUkxaTFJaUlJSUlpIDoKICAgICBzaHV0aWwgLiBjb3B5dHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBPT28wICkgLCBvcyAuIHBhdGggLiBqb2luICggb08wT28gLCAnYWRkb25zJyAsIE9PbzAgKSApCiAgICAgaWYgNjEgLSA2MTogT29PbzBvICogb09vTzBvMDBPTzAgJSBvMDAwTzBvICUgbzBvbyAlIG8wbyArIG8wbwogICAgaTExMTFJID0gb3MgLiBwYXRoIC4gam9pbiAoIG9PME9vICwgJ2FkZG9ucycgLCBPT28wICwgJ2FkZG9uLnhtbCcgKQogICAgaWYgNTggLSA1ODogSUkxIC0gbzBvICsgSUlpaTFJICogaTExaUlpaUlpaQogICAgaWYgODAgLSA4MDogTzAwb29vb28wMCAuIG8wMDBPMG8gLSBvb29Pb29PT28wT08gKyBJSTExaUlpSUlJaUkgKyBvb28wTzBPMDAgJSBvb29Pb29PT28wT08KICAgIGlmIDEzIC0gMTM6IE9vbzAwb09vMG9PbyAvIElpaSAvIElpaSArIGkxMUlpaQogICAgbzBvME8wTzAwb09PbyA9IG9wZW4gKCBpMTExMUkgLCBtb2RlID0gJ3InICkKICAgIG9PbzBPID0gbzBvME8wTzAwb09PbyAuIHJlYWQgKCApCiAgICBvMG8wTzBPMDBvT09vIC4gY2xvc2UgKCApCiAgICBpZiA0OSAtIDQ5OiBPT08wTzBPMG9vb29vIC8gT29vMDBvT28wb09vICogbzAwME8wbyAtIElJMSAuIE9vbzAwb09vMG9PbyAlIE9vMDBvbzBvTwogICAgaWYgMTMgLSAxMzogb29vT29vT09vME9PIC4gSUlpaTFJIC4gSUkxMWlJaUlJSWlJIC4gT28wMG9vMG9PCiAgICBvb28wT29PID0gcmUgLiBjb21waWxlICggJzxhZGRvbltcc1xTXSo/Ij4nICkgLiBmaW5kYWxsICggb09vME8gKQogICAgTzAwb09vME8wbzAwTyA9IG9vbzBPb08gWyAwIF0gaWYgKCBsZW4gKCBvb28wT29PICkgPiAwICkgZWxzZSAnTm9uZScKICAgIG9vMG9vMDBPME8gPSByZSAuIGNvbXBpbGUgKCAndmVyc2lvbj0iW1xzXFNdKj8iJyApIC4gZmluZGFsbCAoIE8wMG9PbzBPMG8wME8gKQogICAgaUlpaUkxSSA9IG9vMG9vMDBPME8gWyAwIF0gaWYgKCBsZW4gKCBvbzBvbzAwTzBPICkgPiAwICkgZWxzZSAnMCcKICAgIGlmIDY1IC0gNjU6IG8wMDBPMG8gLiBvMDAwTzBvICUgSUkxMWlJaUlJSWlJICsgaTExSWlpICsgSUkxIC0gaTExaUlpaUlpaQogICAgaWYgOTQgLSA5NDogb29vT29vT09vME9PIC4gbzBpaTFJICUgbzBpaTFJICUgbzAwME8wbyAtIG9vbzBPME8wMCAvIGkxMWlJaWlJaWkKICAgIG9vbzBvT09PTzAwT28gPSBzdHIgKCBPMDBvT28wTzBvMDBPICkgLiByZXBsYWNlICggaUlpaUkxSSAsICd2ZXJzaW9uPSIwLjAuMC4xIicgKQogICAgaUlJSWlJaSA9IG9PbzBPIC4gcmVwbGFjZSAoIE8wMG9PbzBPMG8wME8gLCBvb28wb09PT08wME9vICkKICAgIGlmIDQ4IC0gNDg6IE9vbzAwb09vMG9PbyArIE9vbzAwb09vMG9PbyAqIE8wMG9vb29vMDAgLyBJSUlJaWlJSTExMQogICAgb28wMDBvT08wMG8wb09PID0gb3BlbiAoIGkxMTExSSAsIG1vZGUgPSAndycgKQogICAgb28wMDBvT08wMG8wb09PIC4gd3JpdGUgKCBzdHIgKCBpSUlJaUlpICkgKQogICAgb28wMDBvT08wMG8wb09PIC4gY2xvc2UgKCApCiAgICBpZiAzNyAtIDM3OiBJSWlpMUkgJSBvMG8gLyBPbzAwb28wb08KICAgZXhjZXB0IDoKICAgIGlmIElpSUkgPT0gJ3RydWUnIDoKICAgICBwcmludCAiIyMjIEZhaWxlZCB0byBjcmVhdGU6ICIgKyBPT28wICsgJyAjIyMnCiAgICAgaWYgMzcgLSAzNzogT29PbzBvIC0gb29vT29vT09vME9PIC0gbzBvbwogaWYgdXJsID09ICdjcmVhdGVfcGFjaycgOgogIElJaTExaUlJMTFpMSA9IFsgJy5zdm4nICwgJy5naXQnIF0KICBpaTExMTExSSA9IFsgJy5EU19TdG9yZScgLCAnVGh1bWJzLmRiJyAsICcuZ2l0aWdub3JlJyBdCiAgSWlJMUlJaWlpaWkgPSBvcyAuIHBhdGggLiBqb2luICggb09Pb29JMUkxaTExICwgb09JSUlJICsgJy56aXAnICkKICBvMDBPb28wICggb08wT28gLCBJaUkxSUlpaWlpaSAsICdDcmVhdGluZyBBZGRvbnMgQXJjaGl2ZScgLCAnJyAsICcnICwgJycgLCBJSWkxMWlJSTExaTEgLCBpaTExMTExSSApCiAgdHJ5IDoKICAgc2h1dGlsIC4gcm10cmVlICggb08wT28gKQogIGV4Y2VwdCA6CiAgIHBhc3MKICBpMTEgLiBvayAoICdOZXcgS2V5d29yZCBDcmVhdGVkJyAsICdQbGVhc2UgcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzaGFyZSB0aGlzIGtleXdvcmQgd2l0aCB0aGUgY29tbXVuaXR5LiBZb3VyIHppcCBmaWxlIGNhbiBiZSBmb3VuZCBhdDonICwgJ1tDT0xPUj1kb2RnZXJibHVlXScgKyBJaUkxSUlpaWlpaSArICdbL0NPTE9SXScgKQogIGlmIDQzIC0gNDM6IG9vb09vb09PbzBPTyAtIE9vMDBvbzBvTyAlIGkxMWlJaWlJaWkgKiBPb28wMG9PbzBvT28gLiBPb09vMG8gLSBvMG8KICBpZiAxMyAtIDEzOiBvMG9vCmRlZiBPMDAgKCBuYW1lICkgOgogaWYgOTEgLSA5MTogb09vTzBvMDBPTzAgKyBJSWlpMUkgJSBPbzAwb28wb08KIElJSUlJaUkxMUlpID0gb3BlbiAoIElJSUlJICwgbW9kZSA9ICdyJyApCiBvT28wTyA9IElJSUlJaUkxMUlpIC4gcmVhZCAoICkKIElJSUlJaUkxMUlpIC4gY2xvc2UgKCApCiBvT09vT09PMG9Pb28gPSByZSAuIGNvbXBpbGUgKCAnbmFtZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIG9PbzBPICkKIG8wTzBvb29vb29vMDAgPSBvT09vT09PMG9Pb28gWyAwIF0gaWYgKCBsZW4gKCBvT09vT09PMG9Pb28gKSA+IDAgKSBlbHNlICdOb25lJwogSWlJaUkxaTEgPSBbIF0KIGlmIDkwIC0gOTA6IGkxMUlpaSAtIG8wbyAuIG8wb28gKyBvMG9vCiBpZiA0NSAtIDQ1OiBJaWkgLyBJSTEgLiBPb09vMG8gJSBPT08wTzBPMG9vb29vICogb09vTzBvMDBPTzAgKiBpaUlJMTFpMUkxSUlpCiBpZiBvME8wb29vb29vbzAwID09ICdOb25lJyBvciBvME8wb29vb29vbzAwID09ICd1bmtub3duJyA6CiAgT08wT29vT28gPSAwCiAgaTExIC4gb2sgKCAnTm8gUHJvZmlsZSBTZXQnICwgIlRoZXJlJ3Mgbm8gcHJvZmlsZSBuYW1lIHNldCB0byB0aGUgYnVpbGQgeW91J3JlIGN1cnJlbnRseSBydW5uaW5nLiBQbGVhc2UgZW50ZXIgYSBuYW1lIGZvciB0aGlzIGJ1aWxkIHNvIHdlIGNhbiBzYXZlIGl0IGFuZCBtYWtlIHN1cmUgbm8gZGF0YSBpcyBsb3N0LiIgKQogIE8wTzAgPSBvTzBvb28wMG8wbzAwME9vICggaGVhZGluZyA9ICJFbnRlciBhIG5hbWUgZm9yIHRoaXMgYmFja3VwIiApCiAgaWYgKCBub3QgTzBPMCApIDoKICAgcmV0dXJuIEZhbHNlICwgMAogIE8wTzAgPSBPME8wIC4gcmVwbGFjZSAoICcgJyAsICdfJyApCiAgb09JSUlJID0gdXJsbGliIC4gcXVvdGVfcGx1cyAoIE8wTzAgKQogIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvTyAsIG9PSUlJSSApICkgOgogICBPTzBPb29PbyA9IDAKICAgd2hpbGUgbm90IE9PME9vb09vIDoKICAgIGkxMSAuIG9rICggJ1BST0ZJTEUgQUxSRUFEWSBFWElTVFMnICwgIlRoZXJlIGlzIGFscmVhZHkgYSBwcm9maWxlIG9uIHlvdXIgc3lzdGVtIHdpdGggdGhpcyBuYW1lLiBQbGVhc2UgY2hvb3NlIGFub3RoZXIgbmFtZSBmb3IgdGhpcyBwcm9maWxlLiIgKQogICAgTzBPMCA9IG9PMG9vbzAwbzBvMDAwT28gKCBoZWFkaW5nID0gIkVudGVyIGEgbmFtZSBmb3IgZXhpc3RpbmcgcHJvZmlsZSIgKQogICAgaWYgKCBub3QgTzBPMCApIDoKICAgICByZXR1cm4gRmFsc2UgLCAwCiAgICBPME8wID0gTzBPMCAuIHJlcGxhY2UgKCAnICcgLCAnXycgKQogICAgb09JSUlJID0gdXJsbGliIC4gcXVvdGVfcGx1cyAoIE8wTzAgKQogICAgaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvTyAsIG9PSUlJSSApICkgOgogICAgIE9PME9vb09vID0gMQogICAgIGlmIDY1IC0gNjU6IG8waWkxSSArIE9vT28wbyAtIE9PTzBPME8wb29vb28KICBvcyAuIG1ha2VkaXJzICggb3MgLiBwYXRoIC4gam9pbiAoIG9PICwgb09JSUlJICkgKQogIGkxSTFJaWlpID0gb09JSUlJCiAgSUlJSUlpSTExSWkgPSBvcGVuICggSUlJSUkgLCAndycgKQogIGlJSUlpSWkgPSBvT28wTyAuIHJlcGxhY2UgKCAnaWQ9Ik5vbmUiJyAsICdpZD0iTG9jYWwiJyApIC4gcmVwbGFjZSAoICduYW1lPSJOb25lIicgLCAnbmFtZT0iJyArIHN0ciAoIGkxSTFJaWlpICkgKyAnIicgKQogIElJSUlJaUkxMUlpIC4gd3JpdGUgKCBpSUlJaUlpICkKICBJSUlJSWlJMTFJaSAuIGNsb3NlICggKQogIGlmIDE1IC0gMTU6IGkxMUlpaSAlIG8waWkxSSAvIG9vb09vb09PbzBPTyAtIE9vbzAwb09vMG9PbyAuIElJaWkxSQogIGlmIDI4IC0gMjg6IE9vbzAwb09vMG9PbyAqIGkxMUlpaSAqIElJSUlpaUlJMTExCiAgZm9yIE8wb08wIGluIG9zIC4gbGlzdGRpciAoIGkxaUlJaTEgKSA6CiAgIElpSWlJMWkxIC4gYXBwZW5kICggTzBvTzAgKQogICBpZiA5MyAtIDkzOiBPMDBvb29vbzAwIC4gSUlJSWlpSUkxMTEgKiBPb09vMG8gLiBpMTFJaWkKICBPMGlJMUkxaWkxMUlJaTEgPSBvcGVuICggb3MgLiBwYXRoIC4gam9pbiAoIG9PICwgb09JSUlJICwgJ2FkZG9ubGlzdCcgKSAsIG1vZGUgPSAndysnICkKICBmb3IgTzBvTzAgaW4gb3MgLiBsaXN0ZGlyICggaTFpaUlJSTExMWlpICkgOgogICBpZiBub3QgTzBvTzAgaW4gSWlJaUkxaTEgYW5kIE8wb08wICE9ICdwbHVnaW4ucHJvZ3JhbS50b3RhbGluc3RhbGxlcicgYW5kIE8wb08wICE9ICdwYWNrYWdlcycgOgogICAgTzBpSTFJMWlpMTFJSWkxIC4gd3JpdGUgKCBPMG9PMCArICd8JyApCiAgTzBpSTFJMWlpMTFJSWkxIC4gY2xvc2UgKCApCiAgaWYgMTAwIC0gMTAwOiBpaUlJMTFpMUkxSUlpIC4gSUlJSWlpSUkxMTEgLiBvMDAwTzBvICUgT29vMDBvT28wb09vIC0gb29vT29vT09vME9PCiAgaTFpaWkxSWlpaUkxaTEgPSBbICdhZGRvbnMnICwgJ2NhY2hlJyAsICdDUF9Qcm9maWxlcycgLCAnc3lzdGVtJyAsICd0ZW1wJyAsICdUaHVtYm5haWxzJyBdCiAgSUlJaUkxaTEgPSBbICJ4Ym1jLmxvZyIgLCAieGJtYy5vbGQubG9nIiAsICJrb2RpLmxvZyIgLCAia29kaS5vbGQubG9nIiAsICcuRFNfU3RvcmUnICwgJy5zZXR1cF9jb21wbGV0ZScgLCAnWEJNQ0hlbHBlci5jb25mJyAsICcuZ2l0aWdub3JlJyAsICdhZGRvbnMqLmRiJyAsICd0ZXh0dXJlczEzLmRiJyBdCiAgSTExMWlpaWlpMSA9ICJDcmVhdGluZyBiYWNrdXAgb2YgZXhpc3RpbmcgYnVpbGQiCiAgT08wb29Pb09PME9PbyA9ICJBcmNoaXZpbmcuLi4iCiAgT29vT29vb28wMDAwID0gIiIKICBJMWlpMWkxMWkgPSAiUGxlYXNlIFdhaXQiCiAgbzAwT29vMCAoIE9vMG8wMDAwbzBvMCAsIG9zIC4gcGF0aCAuIGpvaW4gKCBvTyAsIG9PSUlJSSAsICdidWlsZC56aXAnICkgLCBJMTExaWlpaWkxICwgT08wb29Pb09PME9PbyAsIE9vb09vb29vMDAwMCAsIEkxaWkxaTExaSAsIGkxaWlpMUlpaWlJMWkxICwgSUlJaUkxaTEgKQogIGlmIDUyIC0gNTI6IG8wMDBPMG8gJSBvMG9vICogSUlJSWlpSUkxMTEgKiBvb28wTzBPMDAgLyBJSTExaUlpSUlJaUkKICBpZiA4OCAtIDg4OiBvb29Pb29PT28wT08KICBpZiAxIC0gMTogaWlJSTExaTFJMUlJaQogZWxzZSA6CiAgaTFJMUlpaWkgPSBvME8wb29vb29vbzAwIC4gcmVwbGFjZSAoICcgJyAsICdfJyApIC4gcmVwbGFjZSAoICc6JyAsICctJyApIC4gcmVwbGFjZSAoICInIiAsICcnICkKICBpZiA5NSAtIDk1OiBJSTEgLyBvMG8gJSBJSTEgLyBpMTFJaWkgKiBPbzAwb28wb08KICBPMGlJMUkxaWkxMUlJaTEgPSBvcGVuICggb3MgLiBwYXRoIC4gam9pbiAoIG9PICwgaTFJMUlpaWkgLCAnYWRkb25saXN0JyApICwgbW9kZSA9ICd3KycgKQogIGZvciBPMG9PMCBpbiBvcyAuIGxpc3RkaXIgKCBpMWlpSUlJMTExaWkgKSA6CiAgIGlmIG5vdCBPMG9PMCBpbiBJaUlpSTFpMSBhbmQgTzBvTzAgIT0gJ3BsdWdpbi5wcm9ncmFtLnRvdGFsaW5zdGFsbGVyJyBhbmQgTzBvTzAgIT0gJ3BhY2thZ2VzJyA6CiAgICBPMGlJMUkxaWkxMUlJaTEgLiB3cml0ZSAoIE8wb08wICsgJ3wnICkKICBPMGlJMUkxaWkxMUlJaTEgLiBjbG9zZSAoICkKICBpZiA3NSAtIDc1OiBPT08wTzBPMG9vb29vCiAgaTFpaWkxSWlpaUkxaTEgPSBbICdhZGRvbnMnICwgJ2NhY2hlJyAsICdDUF9Qcm9maWxlcycgLCAnc3lzdGVtJyAsICd0ZW1wJyAsICdUaHVtYm5haWxzJyBdCiAgSUlJaUkxaTEgPSBbICJ4Ym1jLmxvZyIgLCAieGJtYy5vbGQubG9nIiAsICJrb2RpLmxvZyIgLCAia29kaS5vbGQubG9nIiAsICcuRFNfU3RvcmUnICwgJy5zZXR1cF9jb21wbGV0ZScgLCAnWEJNQ0hlbHBlci5jb25mJyAsICcuZ2l0aWdub3JlJyAsICdhZGRvbnMqLmRiJyAsICd0ZXh0dXJlczEzLmRiJyBdCiAgSTExMWlpaWlpMSA9ICJDcmVhdGluZyBiYWNrdXAgb2YgZXhpc3RpbmcgYnVpbGQiCiAgT08wb29Pb09PME9PbyA9ICJBcmNoaXZpbmcuLi4iCiAgT29vT29vb28wMDAwID0gIiIKICBJMWlpMWkxMWkgPSAiUGxlYXNlIFdhaXQiCiAgbzAwT29vMCAoIE9vMG8wMDAwbzBvMCAsIG9zIC4gcGF0aCAuIGpvaW4gKCBvTyAsIGkxSTFJaWlpICwgJ2J1aWxkLnppcCcgKSAsIEkxMTFpaWlpaTEgLCBPTzBvb09vT08wT09vICwgT29vT29vb28wMDAwICwgSTFpaTFpMTFpICwgaTFpaWkxSWlpaUkxaTEgLCBJSUlpSTFpMSApCiByZXR1cm4gaTFJMUlpaWkKIGlmIDU2IC0gNTY6IG8wb28gLyBPb28wMG9PbzBvT28KIGlmIDM5IC0gMzk6IElpaSAtIElJMSAtIE8wMG9vb29vMDAgLyBPb28wMG9PbzBvT28KZGVmIElJSWlpMSAoIGRiX3BhdGggKSA6CiBnbG9iYWwgY3VyCiBnbG9iYWwgY29uCiBjb24gPSBkYXRhYmFzZSAuIGNvbm5lY3QgKCBkYl9wYXRoICkKIGN1ciA9IGNvbiAuIGN1cnNvciAoICkKIGlmIDc2IC0gNzY6IG8wMDBPMG8gKiBJSTExaUlpSUlJaUkKIGlmIDEyIC0gMTI6IElJaWkxSSAvIG8wbyAlIElJSUlpaUlJMTExCmRlZiBJSWlpSTExICggKSA6CiBJaUlJSSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoICdzcGVjaWFsOi8vaG9tZS91c2VyZGF0YS9hZGRvbl9kYXRhJyAsICcnICkgKQogaWYgOTIgLSA5MjogbzAwME8wbyAlIG9vbzBPME8wMAogZm9yIGlpaUkxSWlJICwgT29JSWkxaUkgLCBvTzBPb28wT29vT09vIGluIG9zIC4gd2FsayAoIElpSUlJICkgOgogIElpMTExSUlJSWlpID0gMAogIElpMTExSUlJSWlpICs9IGxlbiAoIG9PME9vbzBPb29PT28gKQogIGlmIDU0IC0gNTQ6IG9vbzBPME8wMCAvIG8wMDBPMG8gKiBvMG8gLyBpMTFpSWlpSWlpICogT29PbzBvIC4gSUlpaTFJCiAgaWYgSWkxMTFJSUlJaWkgPj0gMCA6CiAgIGlmIDQwIC0gNDA6IG8wMDBPMG8gLiBJSUlJaWlJSTExMSAvIE8wMG9vb29vMDAKICAgZm9yIE9vMG9PMDAgaW4gb08wT29vME9vb09PbyA6CiAgICBvcyAuIHVubGluayAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlJMUlpSSAsIE9vMG9PMDAgKSApCiAgICBpZiAyOCAtIDI4OiBJSUlJaWlJSTExMQogICBmb3IgT09PT0kxaUkxaTExIGluIE9vSUlpMWlJIDoKICAgIHNodXRpbCAuIHJtdHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlJMUlpSSAsIE9PT09JMWlJMWkxMSApICkKICAgIGlmIDY2IC0gNjY6IG8wbwogICAgaWYgMjcgLSAyNzogT09PME8wTzBvb29vbwpkZWYgT28wT28wICggKSA6CiBmb3Igb29vT29vb29PIGluIGdsb2IgLiBnbG9iICggb3MgLiBwYXRoIC4gam9pbiAoIEkxSUlpaUlpaWkgLCAneGJtY19jcmFzaGxvZyouKicgKSApIDoKICBpMUkgPSBvb29Pb29vb08KICBvcyAuIHJlbW92ZSAoIG9vb09vb29vTyApCiAgaTExID0geGJtY2d1aSAuIERpYWxvZyAoICkKICBpMTEgLiBvayAoICJDcmFzaCBMb2dzIERlbGV0ZWQiICwgIllvdXIgb2xkIGNyYXNoIGxvZ3MgaGF2ZSBub3cgYmVlbiBkZWxldGVkLiIgKQogIGlmIDQ5IC0gNDk6IE8wMG9vb29vMDAgLSBJaWkgLiBpaUlJMTFpMUkxSUlpICsgSUlpaTFJIC0gaTExSWlpIC8gaWlJSTExaTFJMUlJaQogIGlmIDI0IC0gMjQ6IG9vb09vb09PbzBPTyAtIG9vbzBPME8wMCAvIGkxMUlpaQpkZWYgaTFpSSAoICkgOgogaUlpaUlJMUlpMWlpID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggJ3NwZWNpYWw6Ly9ob21lL2FkZG9ucy9wYWNrYWdlcycgLCAnJyApICkKIGlmIDM0IC0gMzQ6IG8wMDBPMG8KIGZvciBpaWlJMUlpSSAsIE9vSUlpMWlJICwgb08wT29vME9vb09PbyBpbiBvcyAuIHdhbGsgKCBpSWlpSUkxSWkxaWkgKSA6CiAgSWkxMTFJSUlJaWkgPSAwCiAgSWkxMTFJSUlJaWkgKz0gbGVuICggb08wT29vME9vb09PbyApCiAgaWYgNTcgLSA1NzogSUkxMWlJaUlJSWlJIC4gSUlJSWlpSUkxMTEgJSBvMGlpMUkKICBpZiBJaTExMUlJSUlpaSA+IDAgOgogICBpZiAzMiAtIDMyOiBvMG8gLyBPbzAwb28wb08gLSBPT08wTzBPMG9vb29vICogSUlpaTFJCiAgIGZvciBPbzBvTzAwIGluIG9PME9vbzBPb29PT28gOgogICAgb3MgLiB1bmxpbmsgKCBvcyAuIHBhdGggLiBqb2luICggaWlpSTFJaUkgLCBPbzBvTzAwICkgKQogICAgaWYgNzAgLSA3MDogSUkxICUgSUkxICUgbzBvbwogICBmb3IgT09PT0kxaUkxaTExIGluIE9vSUlpMWlJIDoKICAgIHNodXRpbCAuIHJtdHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlJMUlpSSAsIE9PT09JMWlJMWkxMSApICkKICAgIGlmIDk4IC0gOTg6IG8wb28KICAgIGlmIDE4IC0gMTg6IG8wbyArIGlpSUkxMWkxSTFJSWkgLSBvMG9vIC8gT29PbzBvIC8gSUkxMWlJaUlJSWlJCmRlZiBPT29Pb08gKCBwYXRoICkgOgogb08wMDBvME9vMDAgPSBpMTEgLiB5ZXNubyAoICdBcmUgeW91IGNlcnRhaW4/JyAsICdUaGlzIHdpbGwgY29tcGxldGVseSB3aXBlIHRoaXMgZm9sZGVyLCBhcmUgeW91IGFic29sdXRlbHkgY2VydGFpbiB5b3Ugd2FudCB0byBjb250aW51ZT8gVGhlcmUgaXMgTk8gZ29pbmcgYmFjayBhZnRlciB0aGlzIScgKQogaWYgb08wMDBvME9vMDAgPT0gMSA6CiAgSTExIC4gY3JlYXRlICggIkNsZWFuaW5nIEZvbGRlcnMiICwgIldpcGluZy4uLiIgLCAnJyAsICdQbGVhc2UgV2FpdCcgKQogIHNodXRpbCAuIHJtdHJlZSAoIHBhdGggLCBpZ25vcmVfZXJyb3JzID0gVHJ1ZSApCiAgSTExIC4gY2xvc2UgKCApCiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ2NvbnRhaW5lci5SZWZyZXNoJyApCiAgaWYgNzIgLSA3MjogSWlpIC8gT29PbzBvICogT28wMG9vMG9PICUgSUlpaTFJCiAgaWYgNTMgLSA1MzogbzBvbyAuIE9PTzBPME8wb29vb28gLiBvMDAwTzBvICogSUkxMWlJaUlJSWlJIC8gbzBpaTFJCmRlZiBpaUlJaUkxICggdXJsICkgOgogZm9yIE9PbzAgaW4gb3MgLiBsaXN0ZGlyICggb08gKSA6CiAgaWYgT09vMCAhPSAnTWFzdGVyJyBhbmQgT09vMCAhPSB1cmwgLiByZXBsYWNlICggJyAnICwgJ18nICkgLiByZXBsYWNlICggIiciICwgJycgKSAuIHJlcGxhY2UgKCAnOicgLCAnLScgKSA6CiAgIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9ZGFya2N5YW5dREVMRVRFWy9DT0xPUl0gJyArIE9PbzAgLiByZXBsYWNlICggJ18nICwgJyAnICkgLCBvcyAuIHBhdGggLiBqb2luICggb08gLCBPT28wICkgLCAnZGVsZXRlX3BhdGgnICwgJycgLCAnJyAsICcnICwgJycgKQogICBpZiAyOCAtIDI4OiBvT29PMG8wME9PMCAqIG9vb09vb09PbzBPTyAvIE9vbzAwb09vMG9PbyArIElJMTFpSWlJSUlpSSAtIE9PTzBPME8wb29vb28KICAgaWYgMTYgLSAxNjogT29vMDBvT28wb09vIC8gSUlJSWlpSUkxMTEgLiBJSUlJaWlJSTExMSAtIElJSUlpaUlJMTExIC8gb09vTzBvMDBPTzAKZGVmIEkxSWkxMWkxaWkxaSAoICkgOgogSWlJSUkgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCAnc3BlY2lhbDovL2hvbWUvdXNlcmRhdGEvYWRkb25fZGF0YScgLCAnJyApICkKIGlmIDkwIC0gOTA6IG8waWkxSQogZm9yIGlpaUkxSWlJICwgT29JSWkxaUkgLCBvTzBPb28wT29vT09vIGluIG9zIC4gd2FsayAoIElpSUlJICkgOgogIElpMTExSUlJSWlpID0gMAogIElpMTExSUlJSWlpICs9IGxlbiAoIG9PME9vbzBPb29PT28gKQogIGlmIDQ0IC0gNDQ6IG8waWkxSSAvIG9Pb08wbzAwT08wIC4gaWlJSTExaTFJMUlJaSArIElpaQogIGlmIElpMTExSUlJSWlpID49IDAgOgogICBpZiAzMiAtIDMyOiBPbzAwb28wb08gLSBpMTFJaWkgKiBvb28wTzBPMDAgKiBvMG8KICAgZm9yIE9vMG9PMDAgaW4gb08wT29vME9vb09PbyA6CiAgICBvcyAuIHVubGluayAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlJMUlpSSAsIE9vMG9PMDAgKSApCiAgICBpZiA4NCAtIDg0OiBJSUlJaWlJSTExMSArIG9Pb08wbzAwT08wICUgbzAwME8wbyArIGkxMWlJaWlJaWkKICAgZm9yIE9PT09JMWlJMWkxMSBpbiBPb0lJaTFpSSA6CiAgICBzaHV0aWwgLiBybXRyZWUgKCBvcyAuIHBhdGggLiBqb2luICggaWlpSTFJaUkgLCBPT09PSTFpSTFpMTEgKSApCiAgICBpZiAzNyAtIDM3OiBvMG8gJSBvT29PMG8wME9PMCAvIGkxMUlpaQogICAgaWYgOTQgLSA5NDogbzBvIC8gbzBvbyAuIG8waWkxSQpkZWYgSUlJMUlJMWkgKCApIDoKIEkxMSAuIGNyZWF0ZSAoICdDaGVja2luZyBkZXBlbmRlbmNpZXMnICwgJycgLCAnUGxlYXNlIFdhaXQuLi4nICkKIGlJaU9vID0gWyBdCiBpZiA0OCAtIDQ4OiBJSTExaUlpSUlJaUkKIGZvciBPT28wIGluIG9zIC4gbGlzdGRpciAoIGkxaWlJSUkxMTFpaSApIDoKICBpZiBPT28wICE9ICdwYWNrYWdlcycgOgogICB0cnkgOgogICAgSTExMTFJSUkxMTFpaSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBPT28wICwgJ2FkZG9uLnhtbCcgKQogICAgbzBvTzBvT29vTyA9IG9wZW4gKCBJMTExMUlJSTExMWlpICwgbW9kZSA9ICdyJyApCiAgICBvbzAwbzAwTzAgPSBvMG9PMG9Pb29PIC4gcmVhZCAoICkKICAgIG8wb08wb09vb08gLiBjbG9zZSAoICkKICAgIE8wMG8wTyA9IHJlIC4gY29tcGlsZSAoICdpbXBvcnQgYWRkb249IiguKz8pIicgKSAuIGZpbmRhbGwgKCBvbzAwbzAwTzAgKQogICAgaWYgNzMgLSA3MzogbzBvbwogICAgZm9yIG9Pb28wMDAgaW4gTzAwbzBPIDoKICAgICBpZiAyOCAtIDI4OiBJSTEgLSBvMG8KICAgICBpZiBub3QgJ3hibWMucHl0aG9uJyBpbiBvT29vMDAwIGFuZCBub3Qgb09vbzAwMCBpbiBpSWlPbyA6CiAgICAgIGlJaU9vIC4gYXBwZW5kICggb09vbzAwMCApCiAgICAgIHByaW50ICdTY3JpcHQgUmVxdWlyZXMgLS0tICcgKyBvT29vMDAwCiAgIGV4Y2VwdCA6CiAgICBwYXNzCiAgICBpZiA4NCAtIDg0OiBPb28wMG9PbzBvT28KIHJldHVybiBpSWlPbwogaWYgMzYgLSAzNjogSUkxMWlJaUlJSWlJIC0gSWlpIC0gSUlpaTFJCiBpZiAxMCAtIDEwOiBvT29PMG8wME9PMCAvIElJSUlpaUlJMTExICogTzAwb29vb28wMCAlIE9PTzBPME8wb29vb28gKyBvMG8KZGVmIE9PMDBPT29PMG8gKCBuYW1lICwgYWRkb25faWQgKSA6CiBPbzAwMDBPME9Pb29PID0gMQogTzBPMG8wbzBvID0gMQogSTExMTFJSUkxMTFpaSA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIGFkZG9uX2lkICwgJ2FkZG9uLnhtbCcgKSApCiBvMG9PMG9Pb29PID0gb3BlbiAoIEkxMTExSUlJMTExaWkgLCBtb2RlID0gJ3InICkKIG9vMDBvMDBPMCA9IG8wb08wb09vb08gLiByZWFkICggKQogbzBvTzBvT29vTyAuIGNsb3NlICggKQogTzAwbzBPID0gcmUgLiBjb21waWxlICggJ2ltcG9ydCBhZGRvbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIG9vMDBvMDBPMCApCiBpZiAyNSAtIDI1OiBPb09vMG8gLSBJSUlJaWlJSTExMSAvIE9PTzBPME8wb29vb28gLiBJSTEgJSBvMDAwTzBvIC4gTzAwb29vb28wMAogZm9yIG9Pb28wMDAgaW4gTzAwbzBPIDoKICBpZiAxOSAtIDE5OiBPb28wMG9PbzBvT28gLyBPb28wMG9PbzBvT28gJSBvT29PMG8wME9PMCArIG9vb09vb09PbzBPTyArIG9vb09vb09PbzBPTyArIG9vbzBPME8wMAogIGlmIG5vdCAneGJtYy5weXRob24nIGluIG9Pb28wMDAgOgogICBwcmludCAnU2NyaXB0IFJlcXVpcmVzIC0tLSAnICsgb09vbzAwMAogICBJSWkxSTEgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBvT29vMDAwICkgKQogICBpZiA4MCAtIDgwOiBvMGlpMUkgJSBvb28wTzBPMDAKICAgaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIElJaTFJMSApIDoKICAgIE9PID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9BZGRvblBvcnRhbC9kZXBlbmRlbmN5aW5zdGFsbC5waHA/aWQ9JXMnICUgKCBvT29vMDAwICkKICAgIElpMWlJMTExSUkxSTEgPSBvT09PT29PTzBvICggT08gLCAxMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiAgICBvMG9vb29PMG8wTyA9IHJlIC4gY29tcGlsZSAoICduYW1lPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiAgICBpSTFpMTExSTFJaSA9IHJlIC4gY29tcGlsZSAoICd2ZXJzaW9uPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiAgICBJSTExaUlJaWlpSUkgPSByZSAuIGNvbXBpbGUgKCAncmVwb191cmw9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKICAgIE9vT29vMDBPb28wMCA9IHJlIC4gY29tcGlsZSAoICdkYXRhX3VybD0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogICAgb28wTzAwT29vbzBPMCA9IHJlIC4gY29tcGlsZSAoICd6aXBfdXJsPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiAgICBPTzAgPSByZSAuIGNvbXBpbGUgKCAncmVwb19pZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogICAgb29Pb29Pb29PT08gPSBvMG9vb29PMG8wTyBbIDAgXSBpZiAoIGxlbiAoIG8wb29vb08wbzBPICkgPiAwICkgZWxzZSAnJwogICAgSUlJSUlvMG9vT29PMDAwb08gPSBpSTFpMTExSTFJaSBbIDAgXSBpZiAoIGxlbiAoIGlJMWkxMTFJMUlpICkgPiAwICkgZWxzZSAnJwogICAgb08wb09PT28wbyA9IElJMTFpSUlpaWlJSSBbIDAgXSBpZiAoIGxlbiAoIElJMTFpSUlpaWlJSSApID4gMCApIGVsc2UgJycKICAgIGkxSUkxaUlJMSA9IE9vT29vMDBPb28wMCBbIDAgXSBpZiAoIGxlbiAoIE9vT29vMDBPb28wMCApID4gMCApIGVsc2UgJycKICAgIEkxMUlJMTFJaUkxMSA9IG9vME8wME9vb28wTzAgWyAwIF0gaWYgKCBsZW4gKCBvbzBPMDBPb29vME8wICkgPiAwICkgZWxzZSAnJwogICAgTzAwbyA9IE9PMCBbIDAgXSBpZiAoIGxlbiAoIE9PMCApID4gMCApIGVsc2UgJycKICAgIElpMTFJaWlpMWlpaWkgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMUkxSSAsIG9vT29vT29vT09PICsgJy56aXAnICkgKQogICAgaWYgMTAgLSAxMDogb29vME8wTzAwICUgaWlJSTExaTFJMUlJaQogICAgSTExIC4gY3JlYXRlICggJ0Rvd25sb2FkaW5nIERlcGVuZGVuY2llcycgLCAnSW5zdGFsbGluZyBbQ09MT1I9eWVsbG93XScgKyBvb09vb09vb09PTyAsICcnICwgJycgKQogICAgaWYgNDggLSA0ODogSUkxMWlJaUlJSWlJICsgT29PbzBvICUgSUkxMWlJaUlJSWlJCiAgICB0cnkgOgogICAgIGRvd25sb2FkZXIgLiBkb3dubG9hZCAoIG9PMG9PT09vMG8gLCBJaTExSWlpaTFpaWlpICwgSTExICkKICAgICBleHRyYWN0IC4gYWxsICggSWkxMUlpaWkxaWlpaSAsIGkxaWlJSUkxMTFpaSAsIEkxMSApCiAgICAgaWYgODQgLSA4NDogT09PME8wTzBvb29vbyAlIElJSUlpaUlJMTExIC4gSUlJSWlpSUkxMTEgLiBvb28wTzBPMDAgKiBvMG8KICAgIGV4Y2VwdCA6CiAgICAgaWYgNDMgLSA0MzogSWlpIC4gb09vTzBvMDBPTzAgJSBPMDBvb29vbzAwCiAgICAgdHJ5IDoKICAgICAgZG93bmxvYWRlciAuIGRvd25sb2FkICggSTExSUkxMUlpSTExICwgSWkxMUlpaWkxaWlpaSAsIEkxMSApCiAgICAgIGV4dHJhY3QgLiBhbGwgKCBJaTExSWlpaTFpaWlpICwgaTFpaUlJSTExMWlpICwgSTExICkKICAgICAgaWYgNjEgLSA2MTogbzAwME8wbyArIG9vb09vb09PbzBPTyAlIE9vT28wbyAlIElJaWkxSSAtIElJMQogICAgIGV4Y2VwdCA6CiAgICAgIGlmIDIyIC0gMjI6IElJMTFpSWlJSUlpSSArIE9vbzAwb09vMG9PbyArIGlpSUkxMWkxSTFJSWkKICAgICAgdHJ5IDoKICAgICAgIGlmIDgzIC0gODM6IGkxMUlpaQogICAgICAgaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIElJaTFJMSApIDoKICAgICAgICBvcyAuIG1ha2VkaXJzICggSUlpMUkxICkKICAgICAgICBpZiA0MyAtIDQzOiBJSTExaUlpSUlJaUkKICAgICAgIElpMWlJMTExSUkxSTEgPSBvT09PT29PTzBvICggaTFJSTFpSUkxICwgMTAgKSAuIHJlcGxhY2UgKCAnXG4nICwgJycgKSAuIHJlcGxhY2UgKCAnXHInICwgJycgKQogICAgICAgTzBPTzBPID0gcmUgLiBjb21waWxlICggJ2hyZWY9IiguKz8pIicgLCByZSAuIERPVEFMTCApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogICAgICAgaWYgODQgLSA4NDogSUkxMWlJaUlJSWlJIC4gT28wMG9vMG9PIC4gb29vME8wTzAwCiAgICAgICBmb3IgSWkxIGluIE8wT08wTyA6CiAgICAgICAgb29vMG9vTyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIElJaTFJMSAsIElpMSApICkKICAgICAgICBpZiAyIC0gMjogaWlJSTExaTFJMUlJaSAtIElpaQogICAgICAgIGlmIGFkZG9uX2lkIG5vdCBpbiBJaTEgYW5kICcvJyBub3QgaW4gSWkxIDoKICAgICAgICAgaWYgNDkgLSA0OTogSUlJSWlpSUkxMTEgKyBPb28wMG9PbzBvT28gLyBvb29Pb29PT28wT08gLSBJaWkgJSBJaWkgKyBvMDAwTzBvCiAgICAgICAgIHRyeSA6CiAgICAgICAgICBJMTEgLiB1cGRhdGUgKCAwICwgJycgLCAnRG93bmxvYWRpbmcgW0NPTE9SPXllbGxvd10nICsgSWkxICsgJ1svQ09MT1JdJyAsICdQbGVhc2Ugd2FpdC4uLicgKQogICAgICAgICAgZG93bmxvYWRlciAuIGRvd25sb2FkICggaTFJSTFpSUkxICsgSWkxICwgb29vMG9vTyAsIEkxMSApCiAgICAgICAgICBpZiA1NCAtIDU0OiBpMTFJaWkgJSBpaUlJMTFpMUkxSUlpIC0gSUkxMWlJaUlJSWlJCiAgICAgICAgIGV4Y2VwdCA6CiAgICAgICAgICBwcmludCAiZmFpbGVkIHRvIGluc3RhbGwiICsgSWkxCiAgICAgICAgICBpZiAxNiAtIDE2OiBvT29PMG8wME9PMCAqIG9vbzBPME8wMCAvIG8wbwogICAgICAgIGlmICcvJyBpbiBJaTEgYW5kICcuLicgbm90IGluIElpMSBhbmQgJ2h0dHAnIG5vdCBpbiBJaTEgOgogICAgICAgICBvbzBPT09vT28gPSBpMUlJMWlJSTEgKyBJaTEKICAgICAgICAgSUlpaUlJaTEgKCBvb28wb29PICwgb28wT09Pb09vICkKICAgICAgICAgaWYgNDYgLSA0NjogT29vMDBvT28wb09vCiAgICAgIGV4Y2VwdCA6CiAgICAgICBpMTEgLiBvayAoICJFcnJvciBkb3dubG9hZGluZyBkZXBlbmRlbmN5IiAsICdUaGVyZSB3YXMgYW4gZXJyb3IgZG93bmxvYWRpbmcgW0NPTE9SPWRvZGdlcmJsdWVdJyArIG9vT29vT29vT09PICsgJ1svQ09MT1JdLiBQbGVhc2UgY29uc2lkZXIgdXBkYXRpbmcgdGhlIGFkZC1vbiBwb3J0YWwgd2l0aCBkZXRhaWxzIG9yIHJlcG9ydCB0aGUgZXJyb3Igb24gdGhlIGZvcnVtIGF0IFdXVy5OT09CU0FORE5FUkRTLkNPTScgKQogICAgICAgTzBPMG8wbzBvID0gMAogICAgICAgT28wMDAwTzBPT29vTyA9IDAKICAgICAgIGlmIDEzIC0gMTM6IE9vMDBvbzBvTyArIE9vbzAwb09vMG9PbyAlIG8wMDBPMG8KICAgIGlmIE8wTzBvMG8wbyA9PSAxIDoKICAgICB0aW1lIC4gc2xlZXAgKCAxICkKICAgICBJMTEgLiB1cGRhdGUgKCAwICwgIltDT0xPUj15ZWxsb3ddIiArIG9vT29vT29vT09PICsgJ1svQ09MT1JdICBbQ09MT1I9bGltZV1TdWNjZXNzZnVsbHkgSW5zdGFsbGVkWy9DT0xPUl0nICwgJycgLCAnUGxlYXNlIHdhaXQuLi4nICkKICAgICB0aW1lIC4gc2xlZXAgKCAxICkKICAgICBPTzBPMG9vT09PMDAgPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0FkZG9uUG9ydGFsL2Rvd25sb2FkY291bnQucGhwP2lkPSVzJyAlICggb09vbzAwMCApCiAgICAgdHJ5IDoKICAgICAgb09PT09vT08wbyAoIE9PME8wb29PT08wMCAsIDUgKQogICAgIGV4Y2VwdCA6CiAgICAgIHBhc3MKIEkxMSAuIGNsb3NlICggKQogdGltZSAuIHNsZWVwICggMSApCiBpZiAzMCAtIDMwOiBJSTEgLSBpMTFpSWlpSWlpICsgb29vT29vT09vME9PIC8gaWlJSTExaTFJMUlJaSAtIGkxMWlJaWlJaWkKIGlmIDc0IC0gNzQ6IE9PTzBPME8wb29vb28gLiBvMG8KZGVmIG8wMG8wICggbmFtZSAsIHVybCAsIGJ1aWxkbmFtZSAsIGF1dGhvciAsIHZlcnNpb24gLCBkZXNjcmlwdGlvbiAsIHVwZGF0ZWQgLCBza2lucyAsIHZpZGVvYWRkb25zICwgYXVkaW9hZGRvbnMgLCBwcm9ncmFtYWRkb25zICwgcGljdHVyZWFkZG9ucyAsIHNvdXJjZXMgLCBhZHVsdCApIDoKIElJaTFJaUlJICggYnVpbGRuYW1lICsgJyAgICAgdi4nICsgdmVyc2lvbiAsICdbQ09MT1I9eWVsbG93XVtCXUF1dGhvcjogICBbL0JdWy9DT0xPUl0nICsgYXV0aG9yICsgJ1tDT0xPUj15ZWxsb3ddW0JdICAgICAgICAgICAgICAgTGFzdCBVcGRhdGVkOiAgIFsvQl1bL0NPTE9SXScgKyB1cGRhdGVkICsgJ1tDT0xPUj15ZWxsb3ddW0JdICAgICAgICAgICAgICAgQWR1bHQgQ29udGVudDogICBbL0JdWy9DT0xPUl0nICsgYWR1bHQgKyAnW0NSXVtDUl1bQ09MT1I9eWVsbG93XVtCXURlc2NyaXB0aW9uOltDUl1bL0JdWy9DT0xPUl0nICsgZGVzY3JpcHRpb24gKwogJ1tDUl1bQ1JdW0NPTE9SPWJsdWVdW0JdU2tpbnM6ICAgWy9CXVsvQ09MT1JdJyArIHNraW5zICsgJ1tDUl1bQ1JdW0NPTE9SPWJsdWVdW0JdVmlkZW8gQWRkb25zOiAgIFsvQl1bL0NPTE9SXScgKyB2aWRlb2FkZG9ucyArICdbQ1JdW0NSXVtDT0xPUj1ibHVlXVtCXUF1ZGlvIEFkZG9uczogICBbL0JdWy9DT0xPUl0nICsgYXVkaW9hZGRvbnMgKwogJ1tDUl1bQ1JdW0NPTE9SPWJsdWVdW0JdUHJvZ3JhbSBBZGRvbnM6ICAgWy9CXVsvQ09MT1JdJyArIHByb2dyYW1hZGRvbnMgKyAnW0NSXVtDUl1bQ09MT1I9Ymx1ZV1bQl1QaWN0dXJlIEFkZG9uczogICBbL0JdWy9DT0xPUl0nICsgcGljdHVyZWFkZG9ucyArICdbQ1JdW0NSXVtDT0xPUj1ibHVlXVtCXVNvdXJjZXM6ICAgWy9CXVsvQ09MT1JdJyArIHNvdXJjZXMgKwogJ1tDUl1bQ1JdW0NPTE9SPW9yYW5nZV1EaXNjbGFpbWVyOiBbL0NPTE9SXVRoZXNlIGFyZSBjb21tdW5pdHkgYnVpbGRzIGFuZCB0aGV5IG1heSBvdmVyd3JpdGUgc29tZSBvZiB5b3VyIGV4aXN0aW5nIHNldHRpbmdzLCAnCiAnSXRcJ3MgcHVyZWx5IHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXNlciB0byBjaG9vc2Ugd2hldGhlciBvciBub3QgdGhleSB3aXNoIHRvIGluc3RhbGwgdGhlc2UgYnVpbGRzLCB0aGUgaW5kaXZpZHVhbCB3aG8gdXBsb2FkcyB0aGUgYnVpbGQgc2hvdWxkIHN0YXRlIHdoYXRcJ3MgaW5jbHVkZWQgYW5kIHRoZW4gaXRcJ3MgdGhlIHVzZXJzIGRlY2lzaW9uIHRvIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0aGF0IGNvbnRlbnQgaXMgc3VpdGFibGUgZm9yIHRoZW0uJyApCiBpZiA4NCAtIDg0OiBJaWkgLSBpaUlJMTFpMUkxSUlpIC4gaTExSWlpIC4gT28wMG9vMG9PIC0gaWlJSTExaTFJMUlJaQogaWYgOTkgLSA5OTogT29PbzBvCmRlZiBvMEkxSWlpaWlJMWkxSSAoIHBhdGggKSA6CiBJMTEgLiBjcmVhdGUgKCAiQ2xlYW5pbmcgRm9sZGVycyIgLCAiV2lwaW5nLi4uIiAsICcnICwgJ1BsZWFzZSBXYWl0JyApCiBzaHV0aWwgLiBybXRyZWUgKCBwYXRoICwgaWdub3JlX2Vycm9ycyA9IFRydWUgKQogaWYgNDggLSA0ODogbzBvICsgT29vMDBvT28wb09vICUgb29vT29vT09vME9PICUgSUkxMWlJaUlJSWlJICogT29vMDBvT28wb09vCiBpZiA0MSAtIDQxOiBvMG9vCmRlZiBpMWlpaWlpaTEgKCApIDoKIE9PbzBvTzAwb29PMDAgKCAnJyAsICJbSV1bQl1bQ09MT1IgcmVkXSEhTm90aWNlOiBEaXNhYmxpbmcgU29tZSBBZGRvbnMgQ2FuIENhdXNlIElzc3VlcyEhWy9DT0xPUl1bL0JdWy9JXSIgLCAnJyAsICcnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogT29PMG9PT09PID0gZ2xvYiAuIGdsb2IgKCBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgJyovJyApICkKIGZvciBvMG9vMDBPT09vIGluIHNvcnRlZCAoIE9vTzBvT09PTyAsIGtleSA9IGxhbWJkYSBvbzBvTyA6IG9vMG9PICkgOgogIGlmIE9PMG8gaW4gbzBvbzAwT09PbyA6IGNvbnRpbnVlCiAgSTExMTFJSUkxMTFpaSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvMG9vMDBPT09vICwgJ2FkZG9uLnhtbCcgKQogIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIEkxMTExSUlJMTExaWkgKSA6CiAgIE9vTzBvT09PTyA9IG8wb28wME9PT28gLiByZXBsYWNlICggaTFpaUlJSTExMWlpICwgJycgKSBbIDEgOiAtIDEgXQogICBPbzBvTzAwID0gb3BlbiAoIEkxMTExSUlJMTExaWkgKQogICBJaTExaWlJMSA9IE9vMG9PMDAgLiByZWFkICggKSAuIHJlcGxhY2UgKCAnXG4nICwgJycgKSAuIHJlcGxhY2UgKCAnXHInICwgJycgKSAuIHJlcGxhY2UgKCAnXHQnICwgJycgKQogICBPME9PME8gPSByZSAuIGNvbXBpbGUgKCAnPGFkZG8uKz9pZD0iKC4rPykiLis/PicgKSAuIGZpbmRhbGwgKCBJaTExaWlJMSApCiAgIGkxaTFJSWkgPSByZSAuIGNvbXBpbGUgKCAnPGFkZG8uKz8gbmFtZT0iKC4rPykiLis/PicgKSAuIGZpbmRhbGwgKCBJaTExaWlJMSApCiAgIHRyeSA6CiAgICBvMG9vME9vbzAgPSBPME9PME8gWyAwIF0KICAgIE9PbzAgPSBpMWkxSUlpIFsgMCBdCiAgIGV4Y2VwdCA6CiAgICBjb250aW51ZQogICB0cnkgOgogICAgbzBPT29PID0geGJtY2FkZG9uIC4gQWRkb24gKCBpZCA9IG8wb28wT29vMCApCiAgICBJMWlJSTFJSTFJMWlpID0gIltDT0xPUiBncmVlbl1bRW5hYmxlZF1bL0NPTE9SXSIKICAgIG9vME9PME8gPSAiZmFsc2UiCiAgIGV4Y2VwdCA6CiAgICBJMWlJSTFJSTFJMWlpID0gIltDT0xPUiByZWRdW0Rpc2FibGVkXVsvQ09MT1JdIgogICAgb28wT08wTyA9ICJ0cnVlIgogICAgcGFzcwogICBJaUkxMWkxSUlpaUkgPSBvcyAuIHBhdGggLiBqb2luICggbzBvbzAwT09PbyAsICdpY29uLnBuZycgKSBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggbzBvbzAwT09PbyAsICdpY29uLnBuZycgKSApIGVsc2UgT09vb08wT09vbwogICBvT09vTzBPT29Pb08gPSBvcyAuIHBhdGggLiBqb2luICggbzBvbzAwT09PbyAsICdmYW5hcnQuanBnJyApIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvMG9vMDBPT09vICwgJ2ZhbmFydC5qcGcnICkgKSBlbHNlIGlJMTExSTExSTFJMQogICBPT28wb08wMG9vTzAwICggJ2FkZG9uJyAsICIlcyAlcyIgJSAoIEkxaUlJMUlJMUkxaWkgLCBPT28wICkgLCAiJXNbXSVzIiAlICggT29PMG9PT09PICwgb28wT08wTyApICwgJ3RvZ2dsZWFkZG9uJyAsIElpSTExaTFJSWlpSSAsIG9PT29PME9Pb09vTyAsICcnICwgJycgKQogICBPbzBvTzAwIC4gY2xvc2UgKCApCiAgIGlmIDY0IC0gNjQ6IG9vb09vb09PbzBPTyAuIG9Pb08wbzAwT08wICogT29PbzBvICUgbzAwME8wbwpkZWYgaTFJSSAoICkgOgogb3MgLiByZW1vdmUgKCBJSUlJSSApCiBvcyAuIHJlbmFtZSAoIG9vb29vb08wb28gLCBJSUlJSSApCiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnVW5sb2FkU2tpbicgKQogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggIlJlbG9hZFNraW4iICkKIGkxMSAuIG9rICggIkxvY2FsIFJlc3RvcmUgQ29tcGxldGUiICwgJ1hCTUMvS29kaSB3aWxsIG5vdyBjbG9zZS4nICwgJycgLCAnJyApCiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAiUXVpdCIgKQogaWYgMjUgLSAyNTogT09PME8wTzBvb29vbyArIG8wbyArIElJMTFpSWlJSUlpSSAqIG9Pb08wbzAwT08wCiBpZiA4NyAtIDg3OiBpaUlJMTFpMUkxSUlpIC4gSUkxICogT29PbzBvICogT29vMDBvT28wb09vIC8gTzAwb29vb28wMCAqIElpaQpkZWYgT29vTzAwb28wTzAgKCB1cmwgKSA6CiBJMTEgLiBjcmVhdGUgKCAiQ2hhbmdpbmcgUGh5c2ljYWwgUGF0aHMgVG8gU3BlY2lhbCIgLCAiUmVuYW1pbmcgcGF0aHMuLi4iICwgJycgLCAnUGxlYXNlIFdhaXQnICkKIGZvciBpaWlJMUlpSSAsIE9vSUlpMWlJICwgb08wT29vME9vb09PbyBpbiBvcyAuIHdhbGsgKCB1cmwgKSA6CiAgZm9yIGZpbGUgaW4gb08wT29vME9vb09PbyA6CiAgIGlmIGZpbGUgLiBlbmRzd2l0aCAoICIueG1sIiApIG9yIGZpbGUgLiBlbmRzd2l0aCAoICIuaGFzaCIgKSBvciBmaWxlIC4gZW5kc3dpdGggKCAicHJvcGVyaWVzIiApIDoKICAgIEkxMSAuIHVwZGF0ZSAoIDAgLCAiRml4aW5nIiAsIGZpbGUgLCAnUGxlYXNlIFdhaXQnICkKICAgIElpMTFpaUkxID0gb3BlbiAoICggb3MgLiBwYXRoIC4gam9pbiAoIGlpaUkxSWlJICwgZmlsZSApICkgKSAuIHJlYWQgKCApCiAgICBJMTFJaUlpMWlJMWlpID0gdXJsbGliIC4gcXVvdGUgKCBPbzBvMDAwMG8wbzAgKQogICAgTzBvT28wbzBPT29PMCA9IHVybGxpYiAuIHF1b3RlICggT28wbzAwMDBvMG8wICkgLiByZXBsYWNlICggJyUzQScgLCAnJTNhJyApIC4gcmVwbGFjZSAoICclNUMnICwgJyU1YycgKQogICAgaTFJMUlJSWlpaTEgPSBJaTExaWlJMSAuIHJlcGxhY2UgKCBPbzBvMDAwMG8wbzAgLCAnc3BlY2lhbDovL2hvbWUvJyApIC4gcmVwbGFjZSAoIEkxMUlpSWkxaUkxaWkgLCAnc3BlY2lhbDovL2hvbWUvJyApIC4gcmVwbGFjZSAoIE8wb09vMG8wT09vTzAgLCAnc3BlY2lhbDovL2hvbWUvJyApCiAgICBPbzBvTzAwID0gb3BlbiAoICggb3MgLiBwYXRoIC4gam9pbiAoIGlpaUkxSWlJICwgZmlsZSApICkgLCBtb2RlID0gJ3cnICkKICAgIE9vMG9PMDAgLiB3cml0ZSAoIHN0ciAoIGkxSTFJSUlpaWkxICkgKQogICAgT28wb08wMCAuIGNsb3NlICggKQogICAgaWYgNzYgLSA3NjogSUkxCiAgICBpZiA0MiAtIDQyOiBJSUlJaWlJSTExMSAqIE9PTzBPME8wb29vb28gLyBvb29Pb29PT28wT08KZGVmIElpaWlJMTEgKCApIDoKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9PME9vICkgOgogIHNodXRpbCAuIHJtdHJlZSAoIG9PME9vICkKIGkxaWlpMUlpaWlJMWkxID0gWyBdCiBJSUlpSTFpMSA9IFsgInhibWMubG9nIiAsICJ4Ym1jLm9sZC5sb2ciICwgImtvZGkubG9nIiAsICJrb2RpLm9sZC5sb2ciICwgJy5EU19TdG9yZScgLCAnLnNldHVwX2NvbXBsZXRlJyAsICdYQk1DSGVscGVyLmNvbmYnICwgJy5naXRpZ25vcmUnIF0KIEkxMTFpaWlpaTEgPSAiQ3JlYXRpbmcgZnVsbCBiYWNrdXAgb2YgZXhpc3RpbmcgYnVpbGQiCiBPT09Pb08gPSAiQ3JlYXRpbmcgQ29tbXVuaXR5IEJ1aWxkIgogT08wb29Pb09PME9PbyA9ICJBcmNoaXZpbmcuLi4iCiBPb29Pb29vbzAwMDAgPSAiIgogSTFpaTFpMTFpID0gIlBsZWFzZSBXYWl0IgogaWYgNTcgLSA1NzogSUlpaTFJICUgTzAwb29vb28wMCAvIGlpSUkxMWkxSTFJSWkgKyBPb28wMG9PbzBvT28KIG8wME9vbzAgKCBPbzBvMDAwMG8wbzAgLCBteWZ1bGxiYWNrdXAgLCBJMTExaWlpaWkxICwgT08wb29Pb09PME9PbyAsIE9vb09vb29vMDAwMCAsIEkxaWkxaTExaSAsIGkxaWlpMUlpaWlJMWkxICwgSUlJaUkxaTEgKQogaWYgOTUgLSA5NTogb29vT29vT09vME9PCmRlZiBpMTFpaSAoICkgOgogSWlJMTExSSA9IDAKIG9vMG9PMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCAnL3ByaXZhdGUvdmFyL21vYmlsZS9MaWJyYXJ5L0NhY2hlcy9BcHBsZVRWL1ZpZGVvLycgLCAnT3RoZXInICkKIGlpMWkxSWlpID0gb3MgLiBwYXRoIC4gam9pbiAoICcvcHJpdmF0ZS92YXIvbW9iaWxlL0xpYnJhcnkvQ2FjaGVzL0FwcGxlVFYvVmlkZW8vJyAsICdMb2NhbHVzZXJhY2NvdW50bmFtZW50YWwnICkKIElJSUkxMTExMUlpID0gb3MgLiBwYXRoIC4gam9pbiAoIHhibWMgLiB0cmFuc2xhdGVQYXRoICggJ3NwZWNpYWw6Ly9wcm9maWxlL2FkZG9uX2RhdGEvc2NyaXB0Lm1vZHVsZS5zaW1wbGUuZG93bmxvYWRlcicgKSAsICcnICkKIElpaWlJSSA9IG9zIC4gcGF0aCAuIGpvaW4gKCB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoICdzcGVjaWFsOi8vcHJvZmlsZS9hZGRvbl9kYXRhL3NjcmlwdC5pbWFnZS5tdXNpYy5zbGlkZXNob3cvY2FjaGUnICkgLCAnJyApCiBPb09vbzAwT28wT29PID0gb3MgLiBwYXRoIC4gam9pbiAoIHhibWMgLiB0cmFuc2xhdGVQYXRoICggJ3NwZWNpYWw6Ly9wcm9maWxlL2FkZG9uX2RhdGEvcGx1Z2luLnZpZGVvLmlwbGF5ZXIvaXBsYXllcl9odHRwX2NhY2hlJyApICwgJycgKQogbzBvMG9PT08gPSBvcyAuIHBhdGggLiBqb2luICggeGJtYyAuIHRyYW5zbGF0ZVBhdGggKCAnc3BlY2lhbDovL3Byb2ZpbGUvYWRkb25fZGF0YS9wbHVnaW4udmlkZW8uaXR2L0ltYWdlcycgKSAsICcnICkKIE9Pb29vID0gb3MgLiBwYXRoIC4gam9pbiAoIHhibWMgLiB0cmFuc2xhdGVQYXRoICggJ3NwZWNpYWw6Ly9wcm9maWxlL2FkZG9uX2RhdGEvc2NyaXB0Lm5hdmkteC9jYWNoZScgKSAsICcnICkKIElJSUkgPSBvcyAuIHBhdGggLiBqb2luICggeGJtYyAuIHRyYW5zbGF0ZVBhdGggKCAnc3BlY2lhbDovL3Byb2ZpbGUvYWRkb25fZGF0YS9wbHVnaW4udmlkZW8ucGhzdHJlYW1zL0NhY2hlJyApICwgJycgKQogbzBvME9PbzBPT29PID0gb3MgLiBwYXRoIC4gam9pbiAoIHhibWMgLiB0cmFuc2xhdGVQYXRoICggJ3NwZWNpYWw6Ly9wcm9maWxlL2FkZG9uX2RhdGEvcGx1Z2luLmF1ZGlvLnJhbWZtL2NhY2hlJyApICwgJycgKQogTzBvb08gPSBvcyAuIHBhdGggLiBqb2luICggeGJtYyAuIHRyYW5zbGF0ZVBhdGggKCAnc3BlY2lhbDovL3Byb2ZpbGUvYWRkb25fZGF0YS9wbHVnaW4udmlkZW8ud2hhdHRoZWZ1cmsvY2FjaGUnICkgLCAnJyApCiBpMUlpMUlpaUlpMUlJID0gb3MgLiBwYXRoIC4gam9pbiAoIHhibWMgLiB0cmFuc2xhdGVQYXRoICggJ3NwZWNpYWw6Ly9wcm9maWxlL2FkZG9uX2RhdGEvcGx1Z2luLnZpZGVvLmdlbmVzaXMnICkgLCAnY2FjaGUuZGInICkKIEkxaUkxSTFpaTEgPSBvcyAuIHBhdGggLiBqb2luICggT28wbzAwMDBvMG8wICwgJ3RlbXAnICkKIEkxMSAuIGNyZWF0ZSAoICdDYWxjdWxhdGluZyBVc2VkIFNwYWNlJyAsICcnICwgJ1BsZWFzZSB3YWl0JyAsICcnICkKIGlmIDU0IC0gNTQ6IElJSUlpaUlJMTExICUgTzAwb29vb28wMAogaWYgNTEgLSA1MTogSUlpaTFJIC0gbzAwME8wbwogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb28wb08wICkgOgogIElpSTExMUkgPSBPbzAgKCBvbzBvTzAgLCBJaUkxMTFJICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIGlpMWkxSWlpICkgOgogIElpSTExMUkgPSBPbzAgKCBpaTFpMUlpaSAsIElpSTExMUkgKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggSUlJSTExMTExSWkgKSA6CiAgSWlJMTExSSA9IE9vMCAoIElJSUkxMTExMUlpICwgSWlJMTExSSApCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBJaWlpSUkgKSA6CiAgSWlJMTExSSA9IE9vMCAoIElpaWlJSSAsIElpSTExMUkgKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggT29Pb28wME9vME9vTyApIDoKICBJaUkxMTFJID0gT28wICggT29Pb28wME9vME9vTyAsIElpSTExMUkgKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggbzBvMG9PT08gKSA6CiAgSWlJMTExSSA9IE9vMCAoIG8wbzBvT09PICwgSWlJMTExSSApCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBPT29vbyApIDoKICBJaUkxMTFJID0gT28wICggT09vb28gLCBJaUkxMTFJICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIElJSUkgKSA6CiAgSWlJMTExSSA9IE9vMCAoIElJSUkgLCBJaUkxMTFJICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG8wbzBPT28wT09vTyApIDoKICBJaUkxMTFJID0gT28wICggbzBvME9PbzBPT29PICwgSWlJMTExSSApCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBPMG9vTyApIDoKICBJaUkxMTFJID0gT28wICggTzBvb08gLCBJaUkxMTFJICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIGkxSWkxSWlpSWkxSUkgKSA6CiAgSWlJMTExSSA9IE9vMCAoIGkxSWkxSWlpSWkxSUkgLCBJaUkxMTFJICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIEkxaUkxSTFpaTEgKSA6CiAgSWlJMTExSSA9IE9vMCAoIEkxaUkxSTFpaTEgLCBJaUkxMTFJICkKIElpSTExMUkgPSBPbzAgKCBvb29PT09PTyAsIElpSTExMUkgKQogSWlJMTExSSA9IE9vMCAoIEkxMWkxSTFJICwgSWlJMTExSSApIC8gMTAwMDAwMAogb08wMDBvME9vMDAgPSBpMTEgLiB5ZXNubyAoICdSZXN1bHRzJyAsICdZb3UgY2FuIGZyZWUgdXAgW0NPTE9SPWRvZGdlcmJsdWVdJyArIHN0ciAoIElpSTExMUkgKSArICdNQlsvQ09MT1JdIG9mIHNwYWNlIGlmIHlvdSBydW4gdGhpcyBjbGVhbnVwIHByb2dyYW0uIFdvdWxkIHlvdSBsaWtlIHRvIHJ1biB0aGUgY2xlYW51cCBwcm9jZWR1cmU/JyApCiBpZiBvTzAwMG8wT28wMCA9PSAxIDoKICBJaTFvb09PME9PTzAwbyAoICkKICB0cnkgOgogICBzaHV0aWwgLiBybXRyZWUgKCBJMTFpMUkxSSApCiAgZXhjZXB0IDoKICAgcGFzcwogIG9PMDAwbzBPbzAwID0gaTExIC4geWVzbm8gKCAnVGh1bWJuYWlsIENsZWFudXAnICwgJ1dlIGhpZ2hseSByZWNvbW1lbmQgb25seSB3aXBpbmcgeW91ciBPTEQgdW51c2VkIHRodW1ibmFpbHMuIERvIHlvdSB3YW50IHRvIGNsZWFyIGp1c3QgdGhlIG9sZCBvbmVzIG9yIGFsbCB0aHVtYm5haWxzPycgLCB5ZXNsYWJlbCA9ICdBTEwnICwgbm9sYWJlbCA9ICdPTEQgT05MWScgKQogIGlmIG9PMDAwbzBPbzAwID09IDEgOgogICBPbzAwTzAwbzAgKCApCiAgIG8wSTFJaWlpaUkxaTFJICggb29vT09PT08gKQogICBJaUlJMSAoICkKICBlbHNlIDoKICAgaTFJaTExaWkxSSAoICkKICAgaWYgNDUgLSA0NTogbzBvbyArIG8wb28gJSBpMTFJaWkKICAgaWYgMzYgLSAzNjogSUlJSWlpSUkxMTEgKiBvMG8gLiBvMG8gLyBpaUlJMTFpMUkxSUlpIC8gbzAwME8wbwpkZWYgb29vTzBvb28gKCB1cmwgKSA6CiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQW5pbWUnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWFuaW1lJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQXVkaW9ib29rcycgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9YXVkaW9ib29rcycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0NvbWVkeScgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9Y29tZWR5JyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQ29taWNzJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1jb21pY3MnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdEb2N1bWVudGFyeScgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9ZG9jdW1lbnRhcnknICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdEb3dubG9hZHMnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWRvd25sb2FkcycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0Zvb2QnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWZvb2QnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdHYW1pbmcnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWdhbWluZycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0hlYWx0aCcgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9aGVhbHRoJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnSG93IFRvLi4uJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1ob3d0bycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0tpZHMnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPWtpZHMnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdMaXZlIFRWJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1saXZldHYnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdNb3ZpZXMnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPW1vdmllcycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ011c2ljJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1tdXNpYycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ05ld3MnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPW5ld3MnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdQaG90b3MnICwgc3RyICggdXJsICkgKyAnJmdlbnJlPXBob3RvcycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1BvZGNhc3RzJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1wb2RjYXN0cycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1JhZGlvJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1yYWRpbycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1JlbGlnaW9uJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1yZWxpZ2lvbicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1NwYWNlJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1zcGFjZScgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1Nwb3J0cycgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9c3BvcnRzJyAsICdncmFiX2J1aWxkcycgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnVGVjaG5vbG9neScgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9dGVjaCcgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1RyYWlsZXJzJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT10cmFpbGVycycgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1RWIFNob3dzJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT10dicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ01pc2MuJyAsIHN0ciAoIHVybCApICsgJyZnZW5yZT1vdGhlcicgLCAnZ3JhYl9idWlsZHMnICwgJycgLCAnJyAsICcnICwgJycgKQogaWYgNDggLSA0ODogaTExSWlpICsgSUkxMWlJaUlJSWlJIC4gT29PbzBvICUgT29vMDBvT28wb09vICsgb29vT29vT09vME9PCiBpZiBJMUlpaUkgLiBnZXRTZXR0aW5nICggJ2FkdWx0JyApID09ICd0cnVlJyA6CiAgT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1hYWCcgLCBzdHIgKCB1cmwgKSArICcmZ2VucmU9YWR1bHQnICwgJ2dyYWJfYnVpbGRzJyAsICcnICwgJycgLCAnJyAsICcnICkKICBpZiAzOCAtIDM4OiBvb29Pb29PT28wT08KICBpZiAyOCAtIDI4OiBJSWlpMUkgKiBvMG8gLiBvMDAwTzBvCmRlZiBPbzAgKCBwYXRoICwgc2l6ZSApIDoKIGZvciBvb29pSTFpICwgbzBJaTExSTFpSUlpICwgTzBvb09pSSBpbiBvcyAuIHdhbGsgKCBwYXRoICkgOgogIGZvciBPbzBvTzAwIGluIE8wb29PaUkgOgogICBJMTEgLiB1cGRhdGUgKCAwICwgIkNhbHVsYXRpbmcuLi4iICwgJ1tDT0xPUj1kb2RnZXJibHVlXScgKyBPbzBvTzAwICsgJ1svQ09MT1JdJyAsICdQbGVhc2UgV2FpdCcgKQogICBPT0kxSUlJMUkxMUkxID0gb3MgLiBwYXRoIC4gam9pbiAoIG9vb2lJMWkgLCBPbzBvTzAwICkKICAgc2l6ZSArPSBvcyAuIHBhdGggLiBnZXRzaXplICggT09JMUlJSTFJMTFJMSApCiByZXR1cm4gc2l6ZQogaWYgODUgLSA4NTogT29PbzBvCmRlZiBvTzBvb28wMG8wbzAwME9vICggZGVmYXVsdCA9ICIiICwgaGVhZGluZyA9ICIiICwgaGlkZGVuID0gRmFsc2UgKSA6CiBPME9vTzAwT29PTyA9IHhibWMgLiBLZXlib2FyZCAoIGRlZmF1bHQgLCBoZWFkaW5nICwgaGlkZGVuICkKIE8wT29PMDBPb09PIC4gZG9Nb2RhbCAoICkKIGlmICggTzBPb08wME9vT08gLiBpc0NvbmZpcm1lZCAoICkgKSA6CiAgcmV0dXJuIHVuaWNvZGUgKCBPME9vTzAwT29PTyAuIGdldFRleHQgKCApICwgInV0Zi04IiApCiByZXR1cm4gZGVmYXVsdAogaWYgNTMgLSA1MzogbzBvbyAlIG9Pb08wbzAwT08wIC4gb29vME8wTzAwIC4gTzAwb29vb28wMCAuIG8wb28KZGVmIGlpSUkxSUkxMWkgKCApIDoKIGltcG9ydCB0cmFjZWJhY2sKIGlmIDc4IC0gNzg6IGkxMWlJaWlJaWkgLyBvb29Pb29PT28wT08KIE8wb29vb29PID0gdHJhY2ViYWNrIC4gcHJpbnRfZXhjICggKQogeGJtYyAuIGxvZyAoICcjIyMgRVJST1IgU1RSSU5HOiAlcycgJSBPMG9vb29vTyApCiBpZiAyOCAtIDI4OiBpaUlJMTFpMUkxSUlpIC8gT28wMG9vMG9PIC4gb29vME8wTzAwICsgbzBvbyArIG8wbyAlIGlpSUkxMWkxSTFJSWkKIGlmIDQ1IC0gNDU6IGlpSUkxMWkxSTFJSWkgLyBPT08wTzBPMG9vb29vICUgSUkxCmRlZiBPbzAgKCBwYXRoICwgc2l6ZSApIDoKIGZvciBvb29pSTFpICwgbzBJaTExSTFpSUlpICwgTzBvb09pSSBpbiBvcyAuIHdhbGsgKCBwYXRoICkgOgogIGZvciBPbzBvTzAwIGluIE8wb29PaUkgOgogICBJMTEgLiB1cGRhdGUgKCAwICwgIkNhbGN1bGF0aW5nLi4uIiAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV0nICsgT28wb08wMCArICdbL0NPTE9SXScgLCAnUGxlYXNlIFdhaXQnICkKICAgT09JMUlJSTFJMTFJMSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvb29pSTFpICwgT28wb08wMCApCiAgIHNpemUgKz0gb3MgLiBwYXRoIC4gZ2V0c2l6ZSAoIE9PSTFJSUkxSTExSTEgKQogcmV0dXJuIHNpemUKIGlmIDkyIC0gOTI6IElJSUlpaUlJMTExIC4gSWlpIC4gbzBvIC0gSUkxIC8gaTExSWlpCiBpZiA4MCAtIDgwOiBJSWlpMUkgLyBpMTFpSWlpSWlpICsgb29vME8wTzAwCmRlZiBJMTFJMWkgKCApIDoKIG9PTzBvT29vbyA9IFsgXQogbzAwSUlJSWlpMTExMWkxID0gc3lzIC4gYXJndiBbIDIgXQogaWYgbGVuICggbzAwSUlJSWlpMTExMWkxICkgPj0gMiA6CiAgaWlJMWlpMSA9IHN5cyAuIGFyZ3YgWyAyIF0KICBJMW9PT29vMCA9IGlpSTFpaTEgLiByZXBsYWNlICggJz8nICwgJycgKQogIGlmICggaWlJMWlpMSBbIGxlbiAoIGlpSTFpaTEgKSAtIDEgXSA9PSAnLycgKSA6CiAgIGlpSTFpaTEgPSBpaUkxaWkxIFsgMCA6IGxlbiAoIGlpSTFpaTEgKSAtIDIgXQogIElJMU9PTyA9IEkxb09Pb28wIC4gc3BsaXQgKCAnJicgKQogIG9PTzBvT29vbyA9IHsgfQogIGZvciBpaUlJSTFJMTFpaWkgaW4gcmFuZ2UgKCBsZW4gKCBJSTFPT08gKSApIDoKICAgb29JaWkgPSB7IH0KICAgb29JaWkgPSBJSTFPT08gWyBpaUlJSTFJMTFpaWkgXSAuIHNwbGl0ICggJz0nICkKICAgaWYgKCBsZW4gKCBvb0lpaSApICkgPT0gMiA6CiAgICBvT08wb09vb28gWyBvb0lpaSBbIDAgXSBdID0gb29JaWkgWyAxIF0KICAgIGlmIDY2IC0gNjY6IElJMTFpSWlJSUlpSSAqIG8waWkxSQogcmV0dXJuIG9PTzBvT29vbwogaWYgNTggLSA1ODogSUlpaTFJICUgSUkxMWlJaUlJSWlJICsgT29PbzBvIC0gT29PbzBvIC4gaTExaUlpaUlpaSArIElJMQpkZWYgaTFpSUlJMUlJaSAoICkgOgogb09PbzAgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCAnc3BlY2lhbDovL2hvbWUnICwgJ2FkZG9ucycgKSApCiBJMTEgPSB4Ym1jZ3VpIC4gRGlhbG9nUHJvZ3Jlc3MgKCApCiBJMTEgLiBjcmVhdGUgKCAiR290aGFtIEFkZG9uIEZpeCIgLCAiUGxlYXNlIHdhaXQgd2hpbHN0IHlvdXIgYWRkb25zIiAsICcnICwgJ2FyZSBiZWluZyBtYWRlIEdvdGhhbSBjb21wYXRpYmxlLicgKQogaWYgNjMgLSA2MzogT29vMDBvT28wb09vIC4gT29PbzBvICUgT28wMG9vMG9PICsgT29vMDBvT28wb09vCiBmb3Igb29vT29vb29PIGluIGdsb2IgLiBnbG9iICggb3MgLiBwYXRoIC4gam9pbiAoIG9PT28wICwgJyouKicgKSApIDoKICBpZiA4MSAtIDgxOiBJSTExaUlpSUlJaUkgLSBvMDAwTzBvICUgbzBpaTFJCiAgZm9yIGZpbGUgaW4gZ2xvYiAuIGdsb2IgKCBvcyAuIHBhdGggLiBqb2luICggb29vT29vb29PICwgJyouKicgKSApIDoKICAgaWYgNyAtIDc6IGkxMUlpaSAtIE8wMG9vb29vMDAgLiBJaWkKICAgaWYgJ2FkZG9uLnhtbCcgaW4gZmlsZSA6CiAgICBJMTEgLiB1cGRhdGUgKCAwICwgIkZpeGluZyIgLCBmaWxlICwgJ1BsZWFzZSBXYWl0JyApCiAgICBJaTExaWlJMSA9IG9wZW4gKCBmaWxlICkgLiByZWFkICggKQogICAgaTFJMUlJSWlpaTEgPSBJaTExaWlJMSAuIHJlcGxhY2UgKCAnYWRkb249InhibWMucHl0aG9uIiB2ZXJzaW9uPSIxLjAiJyAsICdhZGRvbj0ieGJtYy5weXRob24iIHZlcnNpb249IjIuMS4wIicgKSAuIHJlcGxhY2UgKCAnYWRkb249InhibWMucHl0aG9uIiB2ZXJzaW9uPSIyLjAiJyAsICdhZGRvbj0ieGJtYy5weXRob24iIHZlcnNpb249IjIuMS4wIicgKQogICAgT28wb08wMCA9IG9wZW4gKCBmaWxlICwgbW9kZSA9ICd3JyApCiAgICBPbzBvTzAwIC4gd3JpdGUgKCBzdHIgKCBpMUkxSUlJaWlpMSApICkKICAgIE9vMG9PMDAgLiBjbG9zZSAoICkKICAgIGlmIDEyIC0gMTI6IE9vMDBvbzBvTyAvIG8wb28gLyBPT08wTzBPMG9vb29vICogT28wMG9vMG9PCiBpMTEgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKQogaTExIC4gb2sgKCAiWW91ciBhZGRvbnMgaGF2ZSBub3cgYmVlbiBtYWRlIGNvbXBhdGlibGUiICwgIklmIHlvdSBzdGlsbCBmaW5kIHlvdSBoYXZlIGFkZG9ucyB0aGF0IGFyZW4ndCB3b3JraW5nIHBsZWFzZSBydW4gdGhlIGFkZG9uIHNvIGl0IHRocm93cyB1cCBhIHNjcmlwdCBlcnJvciwgdXBsb2FkIGEgbG9nIGFuZCBwb3N0IGRldGFpbHMgb24gdGhlIHJlbGV2YW50IHN1cHBvcnQgZm9ydW0uIiApCiBpZiA1MSAtIDUxOiBpMTFJaWkgKiBvb28wTzBPMDAgLyBPMDBvb29vbzAwCmRlZiBJSWkxSTFpSUlpaUlJMTFpMUkxICggKSA6CiBpZiBpMTEgLiB5ZXNubyAoICdDb252ZXJ0IEFkZG9ucyBUbyBHb3RoYW0nICwgJ1RoaXMgd2lsbCBlZGl0IHlvdXIgYWRkb24ueG1sIGZpbGVzIHNvIHRoZXkgc2hvdyBhcyBHb3RoYW0gY29tcGF0aWJsZS4gSXRcJ3MgZG91YnRmdWwgdGhpcyB3aWxsIGhhdmUgYW55IGVmZmVjdCBvbiB3aGV0aGVyIG9yIG5vdCB0aGV5IHdvcmsgYnV0IGl0IHdpbGwgZ2V0IHJpZCBvZiB0aGUgYW5ub3lpbmcgaW5jb21wYXRpYmxlIHBvcC11cCBtZXNzYWdlLiBEbyB5b3Ugd2lzaCB0byBjb250aW51ZT8nICkgOgogIGkxaUlJSTFJSWkgKCApCiAgaWYgMjggLSAyODogT29vMDBvT28wb09vICogaTExSWlpICogSWlpICogT29PbzBvIC4gT29vMDBvT28wb09vIC4gb09vTzBvMDBPTzAKICBpZiAzMiAtIDMyOiBpMTFJaWkgLSBvMG9vIC4gb29vME8wTzAwIC4gb29vME8wTzAwICUgTzAwb29vb28wMCAqIElJSUlpaUlJMTExCmRlZiBJSWlJMWkgKCApIDoKIGkxMUkgPSAwCiBvMG8wSTExID0gb3MgLiBsaXN0ZGlyICggSTFJSWlpSWlpaSApCiBmb3IgTzBvTzAgaW4gbzBvMEkxMSA6CiAgaWYgTzBvTzAgLiBlbmRzd2l0aCAoICcubG9nJyApIGFuZCBub3QgTzBvTzAgLiBlbmRzd2l0aCAoICcub2xkLmxvZycgKSA6CiAgIG15bG9nID0gb3MgLiBwYXRoIC4gam9pbiAoIEkxSUlpaUlpaWkgLCBPMG9PMCApCiAgIGxhc3Rtb2RpZmllZCA9IG9zIC4gcGF0aCAuIGdldG10aW1lICggbXlsb2cgKQogICBpZiBsYXN0bW9kaWZpZWQgPiBpMTFJIDoKICAgIGkxMUkgPSBsYXN0bW9kaWZpZWQKICAgIGxvZ2ZpbGUgPSBteWxvZwogICAgaWYgMTYgLSAxNjogSUlJSWlpSUkxMTEgJSBJSWlpMUkgLiBvMDAwTzBvCiBJSWlpMUlpID0gb3BlbiAoIGxvZ2ZpbGUgLCAncicgKQogT28wTzBvID0gSUlpaTFJaSAuIHJlYWQgKCApCiBJSWlpMUlpIC4gY2xvc2UgKCApCiByZXR1cm4gT28wTzBvCiBpZiA0NyAtIDQ3OiBJSTExaUlpSUlJaUkgKiBJSUlJaWlJSTExMSAlIElJaWkxSSAvIGkxMUlpaQogaWYgNjEgLSA2MTogT28wMG9vMG9PICsgb29vME8wTzAwIC0gbzBvbyAqIG9vb09vb09PbzBPTwpkZWYgb29vT08wMG9vMCAoIHVybCApIDoKIGlmIEkxSWlpSSAuIGdldFNldHRpbmcgKCAnYWR1bHQnICkgPT0gJ3RydWUnIDoKICBvT08wMG8wTzAgPSAneWVzJwogIGlmIDI1IC0gMjU6IElJMTFpSWlJSUlpSSAtIElJSUlpaUlJMTExIC4gbzBvCiBlbHNlIDoKICBvT08wMG8wTzAgPSAnbm8nCiAgaWYgNTcgLSA1NzogbzBpaTFJICsgaWlJSTExaTFJMUlJaSAqIG9Pb08wbzAwT08wIC0gaTExSWlpICUgSUlpaTFJIC0gSUlJSWlpSUkxMTEKIGlmIHVybCA9PSAncG9wdWxhcicgOgogIElJSTFJMTFJSTExSSA9ICdodHRwOi8vbm9vYnNhbmRuZXJkcy5jb20vVEkvQWRkb25Qb3J0YWwvcG9wdWxhcl9uZXcucGhwP2FkdWx0PSVzJyAlICggb09PMDBvME8wICkKIGVsaWYgdXJsID09ICdsYXRlc3QnIDoKICBJSUkxSTExSUkxMUkgPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0FkZG9uUG9ydGFsL2xhdGVzdF9uZXcucGhwP2FkdWx0PSVzJyAlICggb09PMDBvME8wICkKIGVsaWYgdXJsICE9ICdwb3B1bGFyJyBhbmQgdXJsICE9ICdsYXRlc3QnIDoKICBJSUkxSTExSUkxMUkgPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0FkZG9uUG9ydGFsL3NvcnRieV9uZXcucGhwP3NvcnR4PW5hbWUmdXNlcj0lcyZhZHVsdD0lcyYlcycgJSAoIE9vICwgb09PMDBvME8wICwgdXJsICkKICB4Ym1jIC4gbG9nICggSUlJMUkxMUlJMTFJICkKICBpZiBub3QgImRlc2MiIGluIHVybCA6CiAgIHVybCA9IHVybCArICcmZGVzYz0nCiAgaWYgbm90ICJnZW5yZSIgaW4gdXJsIDoKICAgdXJsID0gdXJsICsgJyZnZW5yZT0nCiBwcmludCAiVVJMOiAiICsgSUlJMUkxMUlJMTFJCiBpZiA3OCAtIDc4OiBvT29PMG8wME9PMCAuIE9vT28wbyAuIE9vT28wbyAuIG8wbyAlIG9vbzBPME8wMAogSWkxaUkxMTFJSTFJMSA9IG9PT09Pb09PMG8gKCBJSUkxSTExSUkxMUkgLCAxMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiBpZiAyNiAtIDI2OiBpMTFJaWkgKyBvMG9vIC8gSWlpIC4gT29vMDBvT28wb09vICogSUlJSWlpSUkxMTEKIGlmIDIxIC0gMjE6IG8wMDBPMG8gLSBvMDAwTzBvICsgb29vME8wTzAwICUgbzAwME8wbyAqIG9vb09vb09PbzBPTwogTzBPTzBPID0gcmUgLiBjb21waWxlICggJ25hbWU9IiguKz8pIiAgPGJyPiBkb3dubG9hZHM9IiguKz8pIiAgPGJyPiBpY29uPSIoLis/KSIgIDxicj4gYnJva2VuPSIoLis/KSIgIDxicj4gaWQ9IiguKz8pIiAgPGJyPiBVSUQ9IiguKz8pIiAgPGJyPicgLCByZSAuIERPVEFMTCApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaWYgTzBPTzBPID09IFsgXSA6CiAgaWYgNzQgLSA3NDogb29vME8wTzAwIC8gbzBvIC4gbzAwME8wbyAtIElJMSArIE9vbzAwb09vMG9PbyArIG8wbwogIE8wT08wTyA9IHJlIC4gY29tcGlsZSAoICduYW1lPSIoLis/KSIgPGJyPiBkb3dubG9hZHM9IiguKz8pIiA8YnI+IGljb249IiguKz8pIiA8YnI+IGJyb2tlbj0iKC4rPykiIDxicj4gaWQ9IiguKz8pIiA8YnI+IFVJRD0iKC4rPykiIDxicj4nICwgcmUgLiBET1RBTEwgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKICBpZiAzNiAtIDM2OiBJSUlJaWlJSTExMSAqIG8wMDBPMG8gKiBvT29PMG8wME9PMCAuIG8wbyAqIG9Pb08wbzAwT08wCiBpZiBPME9PME8gIT0gWyBdIGFuZCB1cmwgIT0gJ3BvcHVsYXInIGFuZCB1cmwgIT0gJ2xhdGVzdCcgOgogIE8wb29PMCAoIElJSTFJMTFJSTExSSAsICdhZGRvbnMnICkKICBpZiA0MSAtIDQxOiBvMGlpMUkgJSBpaUlJMTFpMUkxSUlpCiAgZm9yIE9PbzAgLCBvb28wTyAsIElpSTExaTFJSWlpSSAsIGlpaTExaTFJSUlJICwgbzAwb09vME9vTzBvTyAsIE9vT29pSSBpbiBPME9PME8gOgogICB0cnkgOgogICAgeGJtY2FkZG9uIC4gQWRkb24gKCBpZCA9IG8wMG9PbzBPb08wb08gKSAuIGdldEFkZG9uSW5mbyAoICdwYXRoJyApCiAgICBvT08wT08wMCA9ICdbQ09MT1I9bGltZV1bSU5TVEFMTEVEXVsvQ09MT1JdICcKICAgZXhjZXB0IDoKICAgIG9PTzBPTzAwID0gJycKICAgIGlmIDc1IC0gNzU6IG9vbzBPME8wMCAqIGlpSUkxMWkxSTFJSWkgLyBPb09vMG8gKiBpaUlJMTFpMUkxSUlpIC8gaTExSWlpCiAgIGlmIGlpaTExaTFJSUlJID09ICcwJyA6CiAgICBPT28wb08wMG9vTzAwICggJ2FkZG9uZm9sZGVyJyAsIG9PTzBPTzAwICsgT09vMCArICcgWycgKyBvb28wTyArICcgZG93bmxvYWRzXScgLCBPb09vaUkgLCAnYWRkb25fZmluYWxfbWVudScgLCBJaUkxMWkxSUlpaUkgLCAnJyAsICcnICkKICAgIGlmIDE0IC0gMTQ6IE8wMG9vb29vMDAgKiBJSWlpMUkgLSBJSUlJaWlJSTExMSAqIElpaSAtIG9vbzBPME8wMCAvIG9vb09vb09PbzBPTwogICBpZiBpaWkxMWkxSUlJSSA9PSAnMScgOgogICAgT09vMG9PMDBvb08wMCAoICdhZGRvbmZvbGRlcicgLCBvT08wT08wMCArICdbQ09MT1I9cmVkXScgKyBPT28wICsgJyBbUkVQT1JURUQgQVMgQlJPS0VOXVsvQ09MT1JdJyAsIE9vT29pSSAsICdhZGRvbl9maW5hbF9tZW51JyAsIElpSTExaTFJSWlpSSAsICcnICwgJycgKQogICAgaWYgNzMgLSA3Mzogb09vTzBvMDBPTzAgLSBJaWkgKiBPT08wTzBPMG9vb29vIC0gSWlpIC0gbzBvbwogZWxpZiBPME9PME8gIT0gWyBdIGFuZCAoIHVybCA9PSAncG9wdWxhcicgb3IgdXJsID09ICdsYXRlc3QnICkgOgogIGZvciBPT28wICwgb29vME8gLCBJaUkxMWkxSUlpaUkgLCBpaWkxMWkxSUlJSSAsIG8wMG9PbzBPb08wb08gLCBPb09vaUkgaW4gTzBPTzBPIDoKICAgdHJ5IDoKICAgIHhibWNhZGRvbiAuIEFkZG9uICggaWQgPSBvMDBvT28wT29PMG9PICkgLiBnZXRBZGRvbkluZm8gKCAncGF0aCcgKQogICAgb09PME9PMDAgPSAnW0NPTE9SPWxpbWVdW0lOU1RBTExFRF1bL0NPTE9SXSAnCiAgIGV4Y2VwdCA6CiAgICBvT08wT08wMCA9ICcnCiAgICBpZiA5NiAtIDk2OiBvT29PMG8wME9PMCAtIE9PTzBPME8wb29vb28KICAgaWYgaWlpMTFpMUlJSUkgPT0gJzAnIDoKICAgIE9PbzBvTzAwb29PMDAgKCAnYWRkb25mb2xkZXInICwgb09PME9PMDAgKyBPT28wICsgJyBbJyArIG9vbzBPICsgJyBkb3dubG9hZHNdJyAsIE9vT29pSSAsICdhZGRvbl9maW5hbF9tZW51JyAsIElpSTExaTFJSWlpSSAsICcnICwgJycgKQogICAgaWYgMzUgLSAzNTogSUkxMWlJaUlJSWlJIC4gbzBvIC4gT29PbzBvIC0gbzBvICUgbzBvICsgT29PbzBvCiAgIGlmIGlpaTExaTFJSUlJID09ICcxJyA6CiAgICBPT28wb08wMG9vTzAwICggJ2FkZG9uZm9sZGVyJyAsIG9PTzBPTzAwICsgJ1tDT0xPUj1yZWRdJyArIE9PbzAgKyAnIFtSRVBPUlRFRCBBUyBCUk9LRU5dWy9DT0xPUl0nICwgT29Pb2lJICwgJ2FkZG9uX2ZpbmFsX21lbnUnICwgSWlJMTFpMUlJaWlJICwgJycgLCAnJyApCiAgICBpZiA5OSAtIDk5OiBvMGlpMUkgKyBJSTExaUlpSUlJaUkKIGVsaWYgJyZyZWRpcmVjdCcgaW4gdXJsIDoKICBvTzAwMG8wT28wMCA9IGkxMSAuIHllc25vICggJ05vIENvbnRlbnQgRm91bmQnICwgJ1RoaXMgYWRkLW9uIGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgQWRkLW9uIFBvcnRhbC4nICwgJycgLCAnV291bGQgeW91IGxpa2UgdG8gcmVtb3ZlIHRoaXMgaXRlbSBmcm9tIHlvdXIgc2V0dXA/JyApCiAgaWYgMzQgLSAzNDogT29PbzBvICogbzBpaTFJIC4gbzAwME8wbyAlIGkxMWlJaWlJaWkKICBpZiBvTzAwMG8wT28wMCA9PSAxIDoKICAgcHJpbnQgIiMjIyBOZWVkIHRvIGFkZCByZW1vdmUgZnVuY3Rpb24gdG8gY29kZSBzdGlsbCIKICAgaWYgNjEgLSA2MTogSUlpaTFJICsgb29vT29vT09vME9PICogbzBvIC0gTzAwb29vb28wMCAlIG9vb09vb09PbzBPTwogZWxzZSA6CiAgaTExIC4gb2sgKCAnTm8gQ29udGVudCBGb3VuZCcgLCAnU29ycnkgbm8gY29udGVudCBjYW4gYmUgZm91bmQgdGhhdCBtYXRjaGVzJyAsICd5b3VyIHNlYXJjaCBjcml0ZXJpYS4nICwgJycgKQogIGlmIDc2IC0gNzY6IG9vb09vb09PbzBPTyAvIElpaQogIGlmIDEyIC0gMTI6IE9vT28wbwpkZWYgT08wb09vICggdXJsICkgOgogaWYgemlwID09ICcnIDoKICBpMTEgLiBvayAoICdTdG9yYWdlL0Rvd25sb2FkIEZvbGRlciBOb3QgU2V0JyAsICdZb3UgaGF2ZSBub3Qgc2V0IHlvdXIgYmFja3VwIHN0b3JhZ2UgZm9sZGVyLlxuUGxlYXNlIHVwZGF0ZSB0aGUgYWRkb24gc2V0dGluZ3MgYW5kIHRyeSBhZ2Fpbi4nICwgJycgLCAnJyApCiAgSTFJaWlJIC4gb3BlblNldHRpbmdzICggc3lzIC4gYXJndiBbIDAgXSApCiAgaWYgMzYgLSAzNjogSWlpICogbzBvbyAvIGkxMUlpaSAvIG8wMDBPMG8gLSBJSUlJaWlJSTExMQogaWYgSTFJaWlJIC4gZ2V0U2V0dGluZyAoICdhZHVsdCcgKSA9PSAndHJ1ZScgOgogIG9PTzAwbzBPMCA9ICcnCiAgaWYgNTMgLSA1Mzogb29vT29vT09vME9PCiBlbHNlIDoKICBvT08wMG8wTzAgPSAnbm8nCiAgaWYgOTkgLSA5OTogaWlJSTExaTFJMUlJaQogaWYgJ2dlbnJlJyBpbiB1cmwgOgogIElJSTFJMTFJSTExSSA9ICdodHRwOi8vbm9vYnNhbmRuZXJkcy5jb20vVEkvQ29tbXVuaXR5X0J1aWxkcy9zb3J0X2J5X3Rlc3QucGhwP3NvcnR4PW5hbWUmb3JkZXJ4PUFTQyZhZHVsdD0lcyYlcycgJSAoIG9PTzAwbzBPMCAsIHVybCApCiBlbHNlIDoKICBJSUkxSTExSUkxMUkgPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0NvbW11bml0eV9CdWlsZHMvc29ydF9ieV90ZXN0LnBocD9zb3J0eD1uYW1lJm9yZGVyeD1BU0MmZ2VucmU9JmFkdWx0PSVzJiVzJyAlICggb09PMDBvME8wICwgdXJsICkKIGlmIElpSUkgPT0gJ3RydWUnIDoKICB4Ym1jIC4gbG9nICggIkJVSUxEIFVSTDogJXMiICUgSUlJMUkxMUlJMTFJICkKIElpMWlJMTExSUkxSTEgPSBvT09PT29PTzBvICggSUlJMUkxMUlJMTFJICwgMTAgKSAuIHJlcGxhY2UgKCAnXG4nICwgJycgKSAuIHJlcGxhY2UgKCAnXHInICwgJycgKQogaWYgMTcgLSAxNzogaTExaUlpaUlpaSAtIGkxMWlJaWlJaWkgKyBvT29PMG8wME9PMCAqIGkxMUlpaSAqIG9vb09vb09PbzBPTyAvIElJMQogTzBPTzBPID0gcmUgLiBjb21waWxlICggJ25hbWU9IiguKz8pIiAgPGJyPiBpZD0iKC4rPykiICA8YnI+IFRodW1ibmFpbD0iKC4rPykiICA8YnI+IEZhbmFydD0iKC4rPykiICA8YnI+IGRvd25sb2Fkcz0iKC4rPykiICA8YnI+IDxicj4nICwgcmUgLiBET1RBTEwgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIGlmIE8wT08wTyA9PSBbIF0gOgogIGlmIDIyIC0gMjI6IE9vT28wbyAqIG9Pb08wbzAwT08wIC0gT28wMG9vMG9PCiAgTzBPTzBPID0gcmUgLiBjb21waWxlICggJ25hbWU9IiguKz8pIiA8YnI+IGlkPSIoLis/KSIgPGJyPiBUaHVtYm5haWw9IiguKz8pIiA8YnI+IEZhbmFydD0iKC4rPykiIDxicj4gZG93bmxvYWRzPSIoLis/KSIgPGJyPiA8YnI+JyAsIHJlIC4gRE9UQUxMICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBpZiBub3QgJyZ2aXNpYmlsaXR5PXByaXZhdGUnIGluIHVybCA6CiAgTzBvb08wICggdXJsICwgJ2NvbW11bml0eWJ1aWxkcycgKQogIGlmIDcxIC0gNzE6IElJaWkxSSAvIGkxMWlJaWlJaWkgJSBvMGlpMUkgLiBPb09vMG8gKiBvMDAwTzBvICUgT29vMDBvT28wb09vCiBmb3IgT09vMCAsIGlkICwgaTFJSTExMTEgLCBvb09PT28wICwgb29vME8gaW4gTzBPTzBPIDoKICBvME8wMG8gKCBPT28wICsgJ1tDT0xPUj1saW1lXSAoJyArIG9vbzBPICsgJyBkb3dubG9hZHMpWy9DT0xPUl0nICwgaWQgKyB1cmwgLCAnY29tbXVuaXR5X21lbnUnICwgaTFJSTExMTEgLCBvb09PT28wICwgaWQgLCAnJyAsICcnICwgJycgLCAnJyApCiAgaWYgMTkgLSAxOTogT29PbzBvICsgb29vME8wTzAwICogT29PbzBvCiBpZiAnaWQ9MScgaW4gdXJsIDogSUlJMUkxMUlJMTFJID0gTzBvbzBPTzAKIGlmICdpZD0yJyBpbiB1cmwgOiBJSUkxSTExSUkxMUkgPSBpaUlJSUlJMWkxaUkKIGlmICdpZD0zJyBpbiB1cmwgOiBJSUkxSTExSUkxMUkgPSBvbzAwCiBpZiAnaWQ9NCcgaW4gdXJsIDogSUlJMUkxMUlJMTFJID0gT28wb08wb29vCiBpZiAnaWQ9NScgaW4gdXJsIDogSUlJMUkxMUlJMTFJID0gaTEKIGlmIDcxIC0gNzE6IG8waWkxSSAuIG8wMDBPMG8gLSBvT29PMG8wME9PMCAtIGlpSUkxMWkxSTFJSWkgLSBPMDBvb29vbzAwIC0gbzAwME8wbwogSWkxaUkxMTFJSTFJMSA9IG9PT09Pb09PMG8gKCBJSUkxSTExSUkxMUkgLCAxMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiBPME9PME8gPSByZSAuIGNvbXBpbGUgKCAnbmFtZT0iKC4rPykiLis/cmw9IiguKz8pIi4rP21nPSIoLis/KSIuKz9hbmFydD0iKC4rPykiLis/ZXNjcmlwdGlvbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaWYgNDUgLSA0NTogbzBvbyAqIG8wb28KIGZvciBPT28wICwgdXJsICwgbzAwb09Pb08wb08gLCBvT09vTzBPT29Pb08gLCBPT08wb09vTzBPIGluIE8wT08wTyA6CiAgaWYgbm90ICd2aWV3cG9ydCcgaW4gT09vMCA6CiAgIE9PbzBvTzAwb29PMDAgKCAnYWRkb24nICwgT09vMCAsIHVybCAsICdyZXN0b3JlX2xvY2FsX0NCJyAsIG8wMG9PT29PMG9PICwgb09Pb08wT09vT29PICwgT09PMG9Pb08wTyAsICcnICkKICAgaWYgOSAtIDk6IElJaWkxSQogICBpZiA1NyAtIDU3OiBpMTFJaWkgLyBJSUlJaWlJSTExMSAlIG8waWkxSSAlIGkxMWlJaWlJaWkKZGVmIElJaUkxaSAoIGZpbGUgPSBGYWxzZSAsIG9sZCA9IEZhbHNlICkgOgogaTExSSA9IDAKIG8wbzBJMTEgPSBvcyAuIGxpc3RkaXIgKCBJMUlJaWlJaWlpICkKIG8wT08wT29vbyA9IFsgXQogaWYgOTcgLSA5Nzogb29vME8wTzAwCiBmb3IgTzBvTzAgaW4gbzBvMEkxMSA6CiAgaWYgb2xkID09IFRydWUgYW5kIE8wb08wIC4gZW5kc3dpdGggKCAnLm9sZC5sb2cnICkgOiBvME9PME9vb28gLiBhcHBlbmQgKCBvcyAuIHBhdGggLiBqb2luICggSTFJSWlpSWlpaSAsIE8wb08wICkgKQogIGVsaWYgb2xkID09IEZhbHNlIGFuZCBPMG9PMCAuIGVuZHN3aXRoICggJy5sb2cnICkgYW5kIG5vdCBPMG9PMCAuIGVuZHN3aXRoICggJy5vbGQubG9nJyApIDogbzBPTzBPb29vIC4gYXBwZW5kICggb3MgLiBwYXRoIC4gam9pbiAoIEkxSUlpaUlpaWkgLCBPMG9PMCApICkKICBpZiA4OCAtIDg4OiBJSTEgLSBJSTExaUlpSUlJaUkgKyBPT08wTzBPMG9vb29vICogT28wMG9vMG9PICogbzBvCiBpZiBsZW4gKCBvME9PME9vb28gKSA+IDAgOgogIG8wT08wT29vbyAuIHNvcnQgKCBrZXkgPSBsYW1iZGEgT28wb08wMCA6IG9zIC4gcGF0aCAuIGdldG10aW1lICggT28wb08wMCApICkKICBpZiBmaWxlID09IFRydWUgOiByZXR1cm4gbzBPTzBPb29vIFsgLSAxIF0KICBlbHNlIDoKICAgSUlpaTFJaSA9IG9wZW4gKCBvME9PME9vb28gWyAtIDEgXSAsICdyJyApCiAgIE9vME8wbyA9IElJaWkxSWkgLiByZWFkICggKQogICBJSWlpMUlpIC4gY2xvc2UgKCApCiAgIHJldHVybiBPbzBPMG8KIGVsc2UgOgogIHJldHVybiBGYWxzZQogIGlmIDggLSA4OiBvb29Pb29PT28wT08gLyBpMTFpSWlpSWlpCiAgaWYgOTMgLSA5MzogT29PbzBvICUgaTExaUlpaUlpaQpkZWYgSTExMUkxaWlpMTEgKCB1cmwgLCBsb2NhbCApIDoKIG9vb09vICggKQogb08wMDBvME9vMDAgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKSAuIHllc25vICggT09vMCAsICdUaGlzIHdpbGwgb3Zlci13cml0ZSB5b3VyIGV4aXN0aW5nIGd1aXNldHRpbmdzLnhtbC4nICwgJ0FyZSB5b3Ugc3VyZSB0aGlzIGlzIHRoZSBidWlsZCB5b3UgaGF2ZSBpbnN0YWxsZWQ/JyAsICcnICwgbm9sYWJlbCA9ICdObywgQ2FuY2VsJyAsIHllc2xhYmVsID0gJ1llcywgRml4JyApCiBpZiA0MyAtIDQzOiBvb29Pb29PT28wT08gKiBPbzAwb28wb08gLyBPb28wMG9PbzBvT28gJSBJSTExaUlpSUlJaUkKIGlmIG9PMDAwbzBPbzAwID09IDEgOgogIGkxMUlJICggdXJsICwgbG9jYWwgKQogIGlmIDYzIC0gNjM6IG8wb28gJSBPMDBvb29vbzAwIC0gb29vT29vT09vME9PCmRlZiBJaWkxaTExICggcGF0aCApIDoKIGlmIDQwIC0gNDA6IG9Pb08wbzAwT08wIC8gSUlpaTFJIC4gT28wMG9vMG9PICUgaTExSWlpCiBJSUlJSWlJMTFJaSA9IG9wZW4gKCBpaUkxSWlJICwgbW9kZSA9ICdyJyApCiBvT28wTyA9IElJSUlJaUkxMUlpIC4gcmVhZCAoICkKIElJSUlJaUkxMUlpIC4gY2xvc2UgKCApCiBpZiA1NiAtIDU2OiBpMTFJaWkgLiBJSWlpMUkgKyBPMDBvb29vbzAwCiBvMG9PT29PbzAwbyA9IHJlIC4gY29tcGlsZSAoICc8c2tpbnNldHRpbmdzPltcc1xTXSo/PFwvc2tpbnNldHRpbmdzPicgKSAuIGZpbmRhbGwgKCBvT28wTyApCiBpMUkxMUlpSSA9IHJlIC4gY29tcGlsZSAoICc8c2tpbiBkZWZhdWx0W1xzXFNdKj88XC9za2luPicgKSAuIGZpbmRhbGwgKCBvT28wTyApCiBpaWlpSSA9IHJlIC4gY29tcGlsZSAoICc8bG9va2FuZGZlZWw+W1xzXFNdKj88XC9sb29rYW5kZmVlbD4nICkgLiBmaW5kYWxsICggb09vME8gKQogSWlPMG8gPSBvMG9PT29PbzAwbyBbIDAgXSBpZiAoIGxlbiAoIG8wb09Pb09vMDBvICkgPiAwICkgZWxzZSAnJwogb09vME9vb28gPSBpMUkxMUlpSSBbIDAgXSBpZiAoIGxlbiAoIGkxSTExSWlJICkgPiAwICkgZWxzZSAnJwogSTFpaUlJaUkxMUkgPSBpaWlpSSBbIDAgXSBpZiAoIGxlbiAoIGlpaWlJICkgPiAwICkgZWxzZSAnJwogaWYgMjkgLSAyOTogbzBvICsgb29vT29vT09vME9PICUgaTExSWlpICsgSWlpCiBpZiA5MiAtIDkyOiBvMGlpMUkKIG9vME8gPSBvcGVuICggcGF0aCAsIG1vZGUgPSAncicgKQogSWlpMWlJMWlpSWlpID0gb28wTyAuIHJlYWQgKCApCiBvbzBPIC4gY2xvc2UgKCApCiBpZiAzNyAtIDM3OiBvb29Pb29PT28wT08KIEkxSWkxaUkxSWlJMUkgPSByZSAuIGNvbXBpbGUgKCAnPHNraW5zZXR0aW5ncz5bXHNcU10qPzxcL3NraW5zZXR0aW5ncz4nICkgLiBmaW5kYWxsICggSWlpMWlJMWlpSWlpICkKIG8wT09Pb08gPSByZSAuIGNvbXBpbGUgKCAnPHNraW4gZGVmYXVsdFtcc1xTXSo/PFwvc2tpbj4nICkgLiBmaW5kYWxsICggSWlpMWlJMWlpSWlpICkKIG9vbzBPTzBPT29vb09vMDAgPSByZSAuIGNvbXBpbGUgKCAnPGxvb2thbmRmZWVsPltcc1xTXSo/PFwvbG9va2FuZGZlZWw+JyApIC4gZmluZGFsbCAoIElpaTFpSTFpaUlpaSApCiBvT29PID0gSTFJaTFpSTFJaUkxSSBbIDAgXSBpZiAoIGxlbiAoIEkxSWkxaUkxSWlJMUkgKSA+IDAgKSBlbHNlICcnCiBvME8wbzBPID0gbzBPT09vTyBbIDAgXSBpZiAoIGxlbiAoIG8wT09Pb08gKSA+IDAgKSBlbHNlICcnCiBpaUlJMWkxaTFJMSA9IG9vbzBPTzBPT29vb09vMDAgWyAwIF0gaWYgKCBsZW4gKCBvb28wT08wT09vb29PbzAwICkgPiAwICkgZWxzZSAnJwogaUlJSWlJaSA9IG9PbzBPIC4gcmVwbGFjZSAoIElpTzBvICwgb09vTyApIC4gcmVwbGFjZSAoIEkxaWlJSWlJMTFJICwgaWlJSTFpMWkxSTEgKSAuIHJlcGxhY2UgKCBvT28wT29vbyAsIG8wTzBvME8gKQogaWYgODggLSA4ODogT09PME8wTzBvb29vbyAlIE9vMDBvbzBvTyAuIE9vMDBvbzBvTyAuIE9vT28wbyAvIE8wMG9vb29vMDAKIHByaW50ICIjIyMgQXR0ZW1wdGluZyB0byBjcmVhdGUgbmV3IGd1aXNldHRpbmdzIGF0OiAiICsgcGF0aAogb28wTzAgPSBvcGVuICggcGF0aCAsIG1vZGUgPSAndysnICkKIG9vME8wIC4gd3JpdGUgKCBzdHIgKCBpSUlJaUlpICkgKQogb28wTzAgLiBjbG9zZSAoICkKIGlmIDE2IC0gMTY6IGlpSUkxMWkxSTFJSWkgKiBPb09vMG8KIGlmIDU5IC0gNTk6IG8wbyArIElJaWkxSSAvIE9vT28wbyAtIG8wb28gLiBvMGlpMUkKZGVmIGkxMUlJICggdXJsICwgbG9jYWwgKSA6CiBPTzBPb29PbyA9IEZhbHNlCiBvTzAwMDBPbyA9IDAKIElJSWkxMUlpMTExSTEgPSAxCiBpZiA5OSAtIDk5OiBJSWlpMUkgLiBpaUlJMTFpMUkxSUlpIC8gaTExSWlpIC4gSUkxMWlJaUlJSWlJICUgbzAwME8wbyAqIG8wbwogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggaTFJMWlJICkgOgogIG9zIC4gcmVtb3ZlICggaTFJMWlJICkKICBpZiA5NSAtIDk1OiBvb29Pb29PT28wT08KIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIElJICkgOgogIG9zIC4gcmVtb3ZlICggSUkgKQogIGlmIDgwIC0gODA6IE9vMDBvbzBvTwogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggT28wME9PT09PICkgOgogIG9zIC4gcmVtb3ZlICggT28wME9PT09PICkKICBpZiA0MiAtIDQyOiBJSTEgKiBPb28wMG9PbzBvT28KIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBvbzBPb29PT28wICkgOgogIG9zIC4gbWFrZWRpcnMgKCBvbzBPb29PT28wICkKICBpZiA1MyAtIDUzOiBPb09vMG8gKyBPMDBvb29vbzAwIC4gbzBvbyAvIGkxMWlJaWlJaWkgKyBJSUlJaWlJSTExMSAlIElpaQogIGlmIDkgLSA5OiBpMTFJaWkgLiBvMG8gLSBpaUlJMTFpMUkxSUlpIC4gT29PbzBvCiB0cnkgOgogIHNodXRpbCAuIGNvcHlmaWxlICggaWlJMUlpSSAsIGkxSTFpSSApCiAgaWYgMzkgLSAzOTogSUkxMWlJaUlJSWlJCiBleGNlcHQgOgogIHByaW50ICJObyBndWlzZXR0aW5ncyBmb3VuZCwgbW9zdCBsaWtlbHkgZHVlIHRvIGEgcHJldmlvdXNseSBmYWlsZWQgYXR0ZW1wdCBhdCBpbnN0YWxsIgogIGlmIDcwIC0gNzA6IE9vMDBvbzBvTyAlIG8wb28gJSBvMDAwTzBvCiBpZiBsb2NhbCAhPSAxIDoKICBPT28wMG9PbyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMSAsICdndWlmaXguemlwJyApCiAgaWYgNTEgLSA1MTogb29vME8wTzAwCiAgdHJ5IDoKICAgSTExIC4gY3JlYXRlICggJ0Rvd25sb2FkaW5nIFNraW4gRml4JyAsICcnICwgJycgLCAnJyApCiAgIGRvd25sb2FkZXIgLiBkb3dubG9hZCAoIHVybCAsIE9PbzAwb09vICkKICBleGNlcHQgOgogICBwcmludCAiRmFpbGVkIHRvIGRvd25sb2FkIGd1aXNldHRpbmdzIgogZWxzZSA6CiAgT09vMDBvT28gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIHVybCApCiBpZiBJaUlJID09ICd0cnVlJyA6CiAgcHJpbnQgIiMjIyBsaWI9IiArIE9PbzAwb09vCiAgaWYgODEgLSA4MTogT09PME8wTzBvb29vbwogaTExaWkxMUlpSTEgPSBzdHIgKCBvcyAuIHBhdGggLiBnZXRzaXplICggT09vMDBvT28gKSApCiBJMTEgLiBjcmVhdGUgKCAiSW5zdGFsbGluZyBTa2luIEZpeCIgLCAiQ2hlY2tpbmcgIiAsICcnICwgJ1BsZWFzZSBXYWl0JyApCiBpZiA0NyAtIDQ3OiBJSWlpMUkgJSBvMG8gLiBvMG8gLyBPT08wTzBPMG9vb29vIC4gaTExaUlpaUlpaSAqIElJSUlpaUlJMTExCiBleHRyYWN0IC4gYWxsICggT09vMDBvT28gLCBvbzBPb29PT28wICkKIGlmIDI0IC0gMjQ6IE9PTzBPME8wb29vb28KIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBPb29PT28wICwgJ3NjcmlwdC5za2luc2hvcnRjdXRzJyApICkgOgogIHRyeSA6CiAgIHNodXRpbCAuIHJtdHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsICdzY3JpcHQuc2tpbnNob3J0Y3V0cycgKSApCiAgZXhjZXB0IDoKICAgcGFzcwogIG9zIC4gcmVuYW1lICggb3MgLiBwYXRoIC4gam9pbiAoIG9vME9vb09PbzAgLCAnc2NyaXB0LnNraW5zaG9ydGN1dHMnICkgLCBvcyAuIHBhdGggLiBqb2luICggb28wbzBPMDAgLCAnc2NyaXB0LnNraW5zaG9ydGN1dHMnICkgKQogIGlmIDMzIC0gMzM6IElJMSArIG9vb09vb09PbzBPTyAqIE9vbzAwb09vMG9PbyAvIElJMTFpSWlJSUlpSQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIG9vME9vb09PbzAgLCAnYWRkb25fZGF0YScgKSApIDoKICBvb29vICggb3MgLiBwYXRoIC4gam9pbiAoIG9vME9vb09PbzAgLCAnYWRkb25fZGF0YScgKSAsIG9PbzBvb29vMDBvICwgMSApCiAgaWYgMTUgLSAxNTogSUkxMWlJaUlJSWlJICogT09PME8wTzBvb29vbyAlIG8wMDBPMG8gLyBpMTFJaWkKIGlmIGxvY2FsICE9ICdsaWJyYXJ5JyBvciBsb2NhbCAhPSAndXBkYXRlbGlicmFyeScgb3IgbG9jYWwgIT0gJ2ZyZXNoJyA6CiAgaWYgMTcgLSAxNzogb29vT29vT09vME9PIC0gT29vMDBvT28wb09vIC0gb29vME8wTzAwICsgbzBvCiAgdHJ5IDoKICAgbzBvME8wTzAwb09PbyA9IG9wZW4gKCBvcyAuIHBhdGggLiBqb2luICggb28wT29vT09vMCAsICdwcm9maWxlcy54bWwnICkgLCBtb2RlID0gJ3InICkKICAgT28wb29PME8wbzAwbyA9IG8wbzBPME8wMG9PT28gLiByZWFkICggKQogICBvMG8wTzBPMDBvT09vIC4gY2xvc2UgKCApCiAgIGlmIDc1IC0gNzU6IG9Pb08wbzAwT08wCiAgIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBPb29PT28wICwgJ3Byb2ZpbGVzLnhtbCcgKSApIDoKICAgIGlmIDkyIC0gOTI6IElJMTFpSWlJSUlpSSAlIE9vbzAwb09vMG9PbyAuIG9vbzBPME8wMAogICAgaWYgbG9jYWwgPT0gTm9uZSA6CiAgICAgb08wMDBvME9vMDAgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKSAuIHllc25vICggIktPREkgUFJPRklMRVMgREVURUNURUQiICwgJ1RoaXMgYnVpbGQgaGFzIHByb2ZpbGVzIGluY2x1ZGVkIChzdGFuZGFyZCBLb2RpIHByb2ZpbGVzLCBub3QgQ1AgUHJvZmlsZXMpLCB3b3VsZCB5b3UgbGlrZSB0byBvdmVyd3JpdGUgeW91ciBleGlzdGluZyBwcm9maWxlcyBvciBrZWVwIHRoZSBvbmVzIHlvdSBoYXZlPycgLCAnJyAsICcnICwgbm9sYWJlbCA9ICdLZWVwIG15IHByb2ZpbGVzJyAsIHllc2xhYmVsID0gJ1VzZSBuZXcgcHJvZmlsZXMnICkKICAgICBpZiA0NiAtIDQ2OiBJaWkgKyBvMDAwTzBvICUgSUkxICogaTExaUlpaUlpaSAtIGlpSUkxMWkxSTFJSWkKICAgIGlmIGxvY2FsICE9IE5vbmUgOgogICAgIG9PMDAwbzBPbzAwID0gMQogICAgIGlmIDQ3IC0gNDc6IG9vbzBPME8wMCAqIElpaSAqIE9vMDBvbzBvTwogICAgaWYgb08wMDBvME9vMDAgPT0gMSA6CiAgICAgb28wTzAgPSBvcGVuICggT28wME9PT09PICwgbW9kZSA9ICd3JyApCiAgICAgdGltZSAuIHNsZWVwICggMSApCiAgICAgb28wTzAgLiB3cml0ZSAoIE9vMG9vTzBPMG8wMG8gKQogICAgIHRpbWUgLiBzbGVlcCAoIDEgKQogICAgIG9vME8wIC4gY2xvc2UgKCApCiAgICAgSUlJaTExSWkxMTFJMSA9IDAKICAgICBpZiA0NiAtIDQ2OiBJSUlJaWlJSTExMQogIGV4Y2VwdCA6CiAgIHByaW50ICJubyBwcm9maWxlcy54bWwgZmlsZSIKICAgaWYgNDIgLSA0MjogSUlpaTFJCiAgIGlmIDMyIC0gMzI6IGlpSUkxMWkxSTFJSWkgLSBJSUlJaWlJSTExMSAuIElJMSAtIElJMSAtIGlpSUkxMWkxSTFJSWkgLiBJSWlpMUkKIHRyeSA6CiAgb3MgLiByZW5hbWUgKCBvcyAuIHBhdGggLiBqb2luICggb28wT29vT09vMCAsICdndWlzZXR0aW5ncy54bWwnICkgLCBJSSApCiBleGNlcHQgOgogIGkxMSAuIG9rICggJ0ZJTEUgTUlTU0lORycgLCAnTm8gZ3Vpc2V0dGluZ3MueG1sIGNvdWxkIGJlIGZvdW5kIGluIHlvdXIgemlwIGZpbGUuIFBsZWFzZSBkb3VibGUgY2hlY2sgdGhpcyBmaWxlIGlzIGEgdmFsaWQgemlwIGFuZCBoYXNuXCd0IGJlY29tZSBjb3JydXB0LicgKQogaWYgbG9jYWwgIT0gJ2ZyZXNoJyA6CiAgaWkxSWlJID0gaTExIC4geWVzbm8gKCAiS2VlcCBLb2RpIFNldHRpbmdzPyIgLCAnRG8geW91IHdhbnQgdG8ga2VlcCB5b3VyIGV4aXN0aW5nIEtPREkgc2V0dGluZ3MgKHdlYXRoZXIsIHNjcmVlbiBjYWxpYnJhdGlvbiwgUFZSIGV0Yy4pIG9yIHdpcGUgYW5kIGluc3RhbGwgdGhlIG9uZXMgaW4gdGhpcyBidWlsZD8nICwgbm9sYWJlbCA9ICdLZWVwIG15IHNldHRpbmdzJyAsIHllc2xhYmVsID0gJ1JlcGxhY2UgbXkgc2V0dGluZ3MnICkKICBpZiA3MyAtIDczOiBJSTEgKiBPT08wTzBPMG9vb29vICogaTExSWlpCiBpZiBsb2NhbCA9PSAnZnJlc2gnIDoKICBpaTFJaUkgPSAxCiAgaWYgNyAtIDc6IE9vbzAwb09vMG9PbyArIE8wMG9vb29vMDAKIGlmIGlpMUlpSSA9PSAxIDoKICBpZiA5NSAtIDk1OiBpMTFpSWlpSWlpICsgSUkxIC8gSUkxMWlJaUlJSWlJIC0gSUlpaTFJICsgSUlpaTFJCiAgaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggaWlJMUlpSSApIDoKICAgaWYgMjkgLSAyOTogT28wMG9vMG9PICUgaTExSWlpICsgbzBvbyAuIE8wMG9vb29vMDAgKyBvMDAwTzBvCiAgIHRyeSA6CiAgICBwcmludCAiIyMjIEF0dGVtcHRpbmcgdG8gcmVtb3ZlIGd1aXNldHRpbmdzIgogICAgb3MgLiByZW1vdmUgKCBpaUkxSWlJICkKICAgIE9PME9vb09vID0gVHJ1ZQogICAgaWYgMjQgLSAyNDogT29PbzBvIC8gSUlJSWlpSUkxMTEgKiBvT29PMG8wME9PMCAtIElJMSAvIG8wMDBPMG8gLiBvb29Pb29PT28wT08KICAgZXhjZXB0IDoKICAgIHByaW50ICIjIyMgUHJvYmxlbSByZW1vdmluZyBndWlzZXR0aW5ncyIKICAgIE9PME9vb09vID0gRmFsc2UKICAgIGlmIDk4IC0gOTg6IE8wMG9vb29vMDAgLSBvb28wTzBPMDAKICAgdHJ5IDoKICAgIHByaW50ICIjIyMgQXR0ZW1wdGluZyB0byByZXBsYWNlIGd1aXNldHRpbmdzIHdpdGggbmV3IgogICAgb3MgLiByZW5hbWUgKCBJSSAsIGlpSTFJaUkgKQogICAgT08wT29vT28gPSBUcnVlCiAgICBpZiA0OSAtIDQ5OiBvMGlpMUkgLiBJSUlJaWlJSTExMSAuIG9vb09vb09PbzBPTwogICBleGNlcHQgOgogICAgcHJpbnQgIiMjIyBGYWlsZWQgdG8gcmVwbGFjZSBndWlzZXR0aW5ncyB3aXRoIG5ldyIKICAgIE9PME9vb09vID0gRmFsc2UKICAgIGlmIDkgLSA5OiBPbzAwb28wb08gLSBPb28wMG9PbzBvT28gKiBvMG9vCiAgICBpZiA3OCAtIDc4OiBJSWlpMUkgLyBPT08wTzBPMG9vb29vICogb29vT29vT09vME9PIC8gb29vME8wTzAwIC8gSWlpCiBpZiBpaTFJaUkgPT0gMCA6CiAgSUlJSUlpSTExSWkgPSBvcGVuICggaTFJMWlJICwgbW9kZSA9ICdyJyApCiAgb09vME8gPSBJSUlJSWlJMTFJaSAuIHJlYWQgKCApCiAgSUlJSUlpSTExSWkgLiBjbG9zZSAoICkKICBpZiAxNSAtIDE1OiBpMTFJaWkgLyBvb29Pb29PT28wT08KICBvMG9PT29PbzAwbyA9IHJlIC4gY29tcGlsZSAoICc8c2tpbnNldHRpbmdzPltcc1xTXSo/PFwvc2tpbnNldHRpbmdzPicgKSAuIGZpbmRhbGwgKCBvT28wTyApCiAgaTFJMTFJaUkgPSByZSAuIGNvbXBpbGUgKCAnPHNraW4gZGVmYXVsdFtcc1xTXSo/PFwvc2tpbj4nICkgLiBmaW5kYWxsICggb09vME8gKQogIGlpaWlJID0gcmUgLiBjb21waWxlICggJzxsb29rYW5kZmVlbD5bXHNcU10qPzxcL2xvb2thbmRmZWVsPicgKSAuIGZpbmRhbGwgKCBvT28wTyApCiAgSWlPMG8gPSBvMG9PT29PbzAwbyBbIDAgXSBpZiAoIGxlbiAoIG8wb09Pb09vMDBvICkgPiAwICkgZWxzZSAnJwogIG9PbzBPb29vID0gaTFJMTFJaUkgWyAwIF0gaWYgKCBsZW4gKCBpMUkxMUlpSSApID4gMCApIGVsc2UgJycKICBJMWlpSUlpSTExSSA9IGlpaWlJIFsgMCBdIGlmICggbGVuICggaWlpaUkgKSA+IDAgKSBlbHNlICcnCiAgaWYgNTQgLSA1NDogaTExSWlpIC0gSUlpaTFJIC0gbzBvICUgSUlJSWlpSUkxMTEgLyBPb28wMG9PbzBvT28KICBpZiA4MCAtIDgwOiBpMTFpSWlpSWlpICUgSUlpaTFJIC8gaTExaUlpaUlpaQogIG9vME8gPSBvcGVuICggSUkgLCBtb2RlID0gJ3InICkKICBJaWkxaUkxaWlJaWkgPSBvbzBPIC4gcmVhZCAoICkKICBvbzBPIC4gY2xvc2UgKCApCiAgaWYgNjYgLSA2NjogSWlpIC4gSUlpaTFJICogb09vTzBvMDBPTzAgLSBJSUlJaWlJSTExMSAtIElJaWkxSQogIEkxSWkxaUkxSWlJMUkgPSByZSAuIGNvbXBpbGUgKCAnPHNraW5zZXR0aW5ncz5bXHNcU10qPzxcL3NraW5zZXR0aW5ncz4nICkgLiBmaW5kYWxsICggSWlpMWlJMWlpSWlpICkKICBvME9PT29PID0gcmUgLiBjb21waWxlICggJzxza2luIGRlZmF1bHRbXHNcU10qPzxcL3NraW4+JyApIC4gZmluZGFsbCAoIElpaTFpSTFpaUlpaSApCiAgb29vME9PME9Pb29vT28wMCA9IHJlIC4gY29tcGlsZSAoICc8bG9va2FuZGZlZWw+W1xzXFNdKj88XC9sb29rYW5kZmVlbD4nICkgLiBmaW5kYWxsICggSWlpMWlJMWlpSWlpICkKICBvT29PID0gSTFJaTFpSTFJaUkxSSBbIDAgXSBpZiAoIGxlbiAoIEkxSWkxaUkxSWlJMUkgKSA+IDAgKSBlbHNlICcnCiAgbzBPMG8wTyA9IG8wT09Pb08gWyAwIF0gaWYgKCBsZW4gKCBvME9PT29PICkgPiAwICkgZWxzZSAnJwogIGlpSUkxaTFpMUkxID0gb29vME9PME9Pb29vT28wMCBbIDAgXSBpZiAoIGxlbiAoIG9vbzBPTzBPT29vb09vMDAgKSA+IDAgKSBlbHNlICcnCiAgaUlJSWlJaSA9IG9PbzBPIC4gcmVwbGFjZSAoIElpTzBvICwgb09vTyApIC4gcmVwbGFjZSAoIEkxaWlJSWlJMTFJICwgaWlJSTFpMWkxSTEgKSAuIHJlcGxhY2UgKCBvT28wT29vbyAsIG8wTzBvME8gKQogIGlmIDI4IC0gMjg6IElpaSAlIElJMQogIG9vME8wID0gb3BlbiAoIGkxSTFpSSAsIG1vZGUgPSAndysnICkKICBvbzBPMCAuIHdyaXRlICggc3RyICggaUlJSWlJaSApICkKICBvbzBPMCAuIGNsb3NlICggKQogIGlmIDEzIC0gMTM6IE9vMDBvbzBvTyAuIGlpSUkxMWkxSTFJSWkgLSBvMG8gLyBvb29Pb29PT28wT08gLSBpaUlJMTFpMUkxSUlpIC0gbzAwME8wbwogIGlmIDg0IC0gODQ6IE9vbzAwb09vMG9PbwogIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIGlpSTFJaUkgKSA6CiAgIGlmIDU3IC0gNTc6IE9PTzBPME8wb29vb28gKiBJSWlpMUkgJSBPT08wTzBPMG9vb29vIC4gSUkxCiAgIHRyeSA6CiAgICBvcyAuIHJlbW92ZSAoIGlpSTFJaUkgKQogICAgT08wT29vT28gPSBUcnVlCiAgICBpZiA1MyAtIDUzOiBJSUlJaWlJSTExMSAvIG8wMDBPMG8gKiBJSUlJaWlJSTExMSArIG8waWkxSSArIG9vb09vb09PbzBPTyAtIGlpSUkxMWkxSTFJSWkKICAgZXhjZXB0IDoKICAgIE9PME9vb09vID0gRmFsc2UKICAgIGlmIDE2IC0gMTY6IG8wb28gJSBPb09vMG8gLiBPMDBvb29vbzAwIC8gb09vTzBvMDBPTzAgLSBPT08wTzBPMG9vb29vCiAgdHJ5IDoKICAgb3MgLiByZW5hbWUgKCBpMUkxaUkgLCBpaUkxSWlJICkKICAgb3MgLiByZW1vdmUgKCBJSSApCiAgIE9PME9vb09vID0gVHJ1ZQogICBpZiA4NSAtIDg1OiBPMDBvb29vbzAwIC4gTzAwb29vb28wMAogIGV4Y2VwdCA6CiAgIE9PME9vb09vID0gRmFsc2UKICAgaWYgMTYgLSAxNjogbzAwME8wbyAtIElJMTFpSWlJSUlpSSAlIElJSUlpaUlJMTExIC4gSUkxMWlJaUlJSWlJICsgb09vTzBvMDBPTzAgJSBpMTFpSWlpSWlpCiAgIGlmIDU5IC0gNTk6IGkxMWlJaWlJaWkgLSBvMG8KIGlmIE9PME9vb09vID09IFRydWUgb3IgbG9jYWwgPT0gTm9uZSA6CiAgaWYgNTkgLSA1OTogSUkxICogbzBpaTFJIC8gT29PbzBvCiAgdHJ5IDoKICAgSUlJSUlpSTExSWkgPSBvcGVuICggSTExSUkxaSAsIG1vZGUgPSAncicgKQogICBvT28wTyA9IElJSUlJaUkxMUlpIC4gcmVhZCAoICkKICAgSUlJSUlpSTExSWkgLiBjbG9zZSAoICkKICAgaWYgNzUgLSA3NTogbzBpaTFJIC0gSUkxCiAgIElpaWlpaSA9IHJlIC4gY29tcGlsZSAoICdpZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIG9PbzBPICkKICAgT09vbzAwMG8gPSByZSAuIGNvbXBpbGUgKCAnbmFtZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIG9PbzBPICkKICAgTzAwME9vT08wb08gPSByZSAuIGNvbXBpbGUgKCAndmVyc2lvbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIG9PbzBPICkKICAgaUlJMW8wME9PMCA9IElpaWlpaSBbIDAgXSBpZiAoIGxlbiAoIElpaWlpaSApID4gMCApIGVsc2UgJycKICAgT29paSA9IE9Pb28wMDBvIFsgMCBdIGlmICggbGVuICggT09vbzAwMG8gKSA+IDAgKSBlbHNlICcnCiAgIG9PMG8wb28wTzAgPSBPMDAwT29PTzBvTyBbIDAgXSBpZiAoIGxlbiAoIE8wMDBPb09PMG9PICkgPiAwICkgZWxzZSAnJwogICBpZiAyOCAtIDI4OiBvMG9vCiAgIG9vME8wID0gb3BlbiAoIElJSUlJICwgbW9kZSA9ICd3KycgKQogICBvbzBPMCAuIHdyaXRlICggJ2lkPSInICsgc3RyICggaUlJMW8wME9PMCApICsgJyJcbm5hbWU9IicgKyBPb2lpICsgJyJcbnZlcnNpb249IicgKyBvTzBvMG9vME8wICsgJyJcbmd1aT0iJyArIGkxMWlpMTFJaUkxICsgJyInICkKICAgb28wTzAgLiBjbG9zZSAoICkKICAgaWYgNzMgLSA3MzogaWlJSTExaTFJMUlJaSAuIGkxMUlpaSAtIGlpSUkxMWkxSTFJSWkgJSBJSTExaUlpSUlJaUkgLyBpMTFpSWlpSWlpIC8gSUlpaTFJCiAgIElJSUlJaUkxMUlpID0gb3BlbiAoIG8wICwgbW9kZSA9ICdyJyApCiAgIG9PbzBPID0gSUlJSUlpSTExSWkgLiByZWFkICggKQogICBJSUlJSWlJMTFJaSAuIGNsb3NlICggKQogICBpZiAxNSAtIDE1OiBpMTFJaWkgKiBJSWlpMUkgKiBvb29Pb29PT28wT08KICAgaUlpaUkxSSA9IHJlIC4gY29tcGlsZSAoICd2ZXJzaW9uPSIoLis/KSInICkgLiBmaW5kYWxsICggb09vME8gKQogICBPME9vMDAwb29PMDAgPSBpSWlpSTFJIFsgMCBdIGlmICggbGVuICggaUlpaUkxSSApID4gMCApIGVsc2UgJycKICAgaUlJSWlJaSA9IG9PbzBPIC4gcmVwbGFjZSAoIE8wT28wMDBvb08wMCAsIG9PMG8wb28wTzAgKQogICBpZiA5NiAtIDk2OiBPb09vMG8gKiBJSWlpMUkgLyBJaWkgJSBJSTExaUlpSUlJaUkgKiBPb28wMG9PbzBvT28KICAgb28wTzAgPSBvcGVuICggbzAgLCBtb2RlID0gJ3cnICkKICAgb28wTzAgLiB3cml0ZSAoIHN0ciAoIGlJSUlpSWkgKSApCiAgIG9vME8wIC4gY2xvc2UgKCApCiAgIG9zIC4gcmVtb3ZlICggSTExSUkxaSApCiAgIGlmIDMgLSAzOiBJSTExaUlpSUlJaUkgLiBpaUlJMTFpMUkxSUlpIC8gaTExaUlpaUlpaSArIG8wb28KICBleGNlcHQgOgogICBvbzBPMCA9IG9wZW4gKCBJSUlJSSAsIG1vZGUgPSAndysnICkKICAgb28wTzAgLiB3cml0ZSAoICdpZD0iTm9uZSJcbm5hbWU9IlVua25vd24iXG52ZXJzaW9uPSJVbmtub3duIlxuZ3VpPSInICsgaTExaWkxMUlpSTEgKyAnIicgKQogICBvbzBPMCAuIGNsb3NlICggKQogICBpZiA0NyAtIDQ3OiBPbzAwb28wb08gLiBJSTExaUlpSUlJaUkKICAgaWYgOTYgLSA5NjogbzBvICUgT29vMDBvT28wb09vIC8gaTExSWlpICUgSUkxMWlJaUlJSWlJIC8gaTExSWlpICUgaTExaUlpaUlpaQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIG9vME9vb09PbzAgLCAncHJvZmlsZXMueG1sJyApICkgOgogIG9zIC4gcmVtb3ZlICggb3MgLiBwYXRoIC4gam9pbiAoIG9vME9vb09PbzAgLCAncHJvZmlsZXMueG1sJyApICkKICB0aW1lIC4gc2xlZXAgKCAxICkKICBpZiA1NyAtIDU3OiBvMG8gLSBvMG8gJSBPb28wMG9PbzBvT28gJSBpaUlJMTFpMUkxSUlpIC4gbzBpaTFJICUgaWlJSTExaTFJMUlJaQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb28wT29vT09vMCApIDoKICBvcyAuIHJlbW92ZWRpcnMgKCBvbzBPb29PT28wICkKICBpZiA5MSAtIDkxOiBvMDAwTzBvIC0gbzBvbyAtIGlpSUkxMWkxSTFJSWkgLSBJSUlJaWlJSTExMSAqIElJaWkxSQogT08wb29vME9PTyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIG9vMG8wTzAwICwgT08wbyAsICdub3RpZmljYXRpb24udHh0JyApICkKIGlmIDY5IC0gNjk6IE9vT28wbyArIElJaWkxSSAqIG9vb09vb09PbzBPTyArIE9vMDBvbzBvTyAlIGkxMUlpaSAtIElJSUlpaUlJMTExCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBPTzBvb28wT09PICkgOgogIG9zIC4gcmVtb3ZlICggT08wb29vME9PTyApCiAgaWYgODMgLSA4MzogT28wMG9vMG9PICUgbzBpaTFJICogbzBpaTFJCiBpZiBPTzBPb29PbyA9PSBUcnVlIDoKICBPbzAwTzAwbzAgKCApCiAgSWlJSTEgKCApCiAgaWYgNTggLSA1ODogT29PbzBvIC0gbzBvCiAgaWYgNjkgLSA2OTogbzAwME8wbyArIGlpSUkxMWkxSTFJSWkgKiBvMGlpMUkgKiBPMDBvb29vbzAwICUgaWlJSTExaTFJMUlJaQogIGlmIDQxIC0gNDE6IG9vb09vb09PbzBPTyAuIG9vbzBPME8wMCArIElJMSAqIElJSUlpaUlJMTExIC4gbzBpaTFJCmRlZiBpMWlJaTFpaWlpMWlpICggKSA6CiBJMTFpaWkxSWkgPSB4Ym1jIC4gZ2V0U2tpbkRpciAoICkKIG9PT28wID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgSTExaWlpMUlpICkgKQogaWYgOTYgLSA5NjogbzBvbyArIG8wMDBPMG8gJSBpaUlJMTFpMUkxSUlpCiBmb3IgaWlpSTFJaUkgLCBPb0lJaTFpSSAsIG9PME9vbzBPb29PT28gaW4gb3MgLiB3YWxrICggb09PbzAgKSA6CiAgaWYgMjEgLSAyMTogSWlpIC0gaTExaUlpaUlpaSAtIElpaQogIGZvciBPbzBvTzAwIGluIG9PME9vbzBPb29PT28gOgogICBpZiA0IC0gNDogbzBvIC4gT28wMG9vMG9PCiAgIGlmICdEaWFsb2dLZXlib2FyZC54bWwnIGluIE9vMG9PMDAgOgogICAgSTExaWlpMUlpID0gb3MgLiBwYXRoIC4gam9pbiAoIGlpaUkxSWlJICwgT28wb08wMCApCiAgICBJaTExaWlJMSA9IG9wZW4gKCBJMTFpaWkxSWkgKSAuIHJlYWQgKCApCiAgICBvTzBPID0gSWkxMWlpSTEgLiByZXBsYWNlICggJzxjb250cm9sIHR5cGU9ImxhYmVsIiBpZD0iMzEwIicgLCAnPGNvbnRyb2wgdHlwZT0iZWRpdCIgaWQ9IjMxMiInICkKICAgIE9vMG9PMDAgPSBvcGVuICggSTExaWlpMUlpICwgbW9kZSA9ICd3JyApCiAgICBPbzBvTzAwIC4gd3JpdGUgKCBvTzBPICkKICAgIE9vMG9PMDAgLiBjbG9zZSAoICkKICAgIElpaWkxSSAoIEkxMWlpaTFJaSApCiAgICBpZiAzOSAtIDM5OiBJSTExaUlpSUlJaUkgLiBpaUlJMTFpMUkxSUlpIC0gSWlpICogaTExaUlpaUlpaQogICAgZm9yIGlpSUlJMUkxMWlpaSBpbiByYW5nZSAoIDQ4ICwgNTggKSA6CiAgICAgSTFpaTFJaTEgKCBpaUlJSTFJMTFpaWkgLCBJMTFpaWkxSWkgKQogICAgIGlmIDQgLSA0OiBJaWkgKiBPT08wTzBPMG9vb29vIC0gbzBvCiBpMTEgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKQogaTExIC4gb2sgKCAiU2tpbiBDaGFuZ2VzIFN1Y2Nlc3NmdWwiICwgJ0EgQklHIHRoYW5rIHlvdSB0byBNaWtleTEyMzQgZm9yIHRoaXMgZml4LiBUaGUgY29kZSB1c2VkIGZvciB0aGlzIGZ1bmN0aW9uIHdhcyBwb3J0ZWQgZnJvbSB0aGUgWHVuaXR5IE1haW50ZW5hbmNlIGFkZC1vbicgKQogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1JlbG9hZFNraW4oKScgKQogaWYgNzIgLSA3MjogbzBvICsgaTExSWlpIC8gbzAwME8wbyAuIE9vMDBvbzBvTyAlIG8wb28gLyBpMTFpSWlpSWlpCmRlZiBJMUlJSTFJMUlpSSAoICkgOgogaWYgaTExIC4geWVzbm8gKCAnQ29udmVydCBUaGlzIFNraW4gVG8gS29kaSAoSGVsaXgpPycgLCAnVGhpcyB3aWxsIGZpeCB0aGUgcHJvYmxlbSB3aXRoIGEgYmxhbmsgb24tc2NyZWVuIGtleWJvYXJkIHNob3dpbmcgaW4gc2tpbnMgZGVzaWduZWQgZm9yIEdvdGhhbSAoYmVpbmcgcnVuIG9uIEtvZGkpLiBUaGlzIHdpbGwgb25seSBhZmZlY3QgdGhlIGN1cnJlbnRseSBydW5uaW5nIHNraW4uJyAsIG5vbGFiZWwgPSAnTm8sIENhbmNlbCcgLCB5ZXNsYWJlbCA9ICdZZXMsIEZpeCcgKSA6CiAgaTFpSWkxaWlpaTFpaSAoICkKICBpZiA3MCAtIDcwOiBPb28wMG9PbzBvT28gKiBPb28wMG9PbzBvT28gLiBvMDAwTzBvCiAgaWYgMTEgLSAxMTogb29vME8wTzAwCmRlZiBpMU9vb08wMG9PMDBvICggKSA6CiBpZiBpMTEgLiB5ZXNubyAoICJIaWRlIFBhc3N3b3JkcyIgLCAiVGhpcyB3aWxsIGhpZGUgYWxsIHlvdXIgcGFzc3dvcmRzIGluIHlvdXIiICwgImFkZC1vbiBzZXR0aW5ncywgYXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIGNvbnRpbnVlPyIgKSA6CiAgZm9yIGlpaUkxSWlJICwgT29JSWkxaUkgLCBvTzBPb28wT29vT09vIGluIG9zIC4gd2FsayAoIGkxaWlJSUkxMTFpaSApIDoKICAgZm9yIE9vMG9PMDAgaW4gb08wT29vME9vb09PbyA6CiAgICBpZiBPbzBvTzAwID09ICdzZXR0aW5ncy54bWwnIDoKICAgICBJSUlJMWlJMUlpSWlJID0gb3BlbiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlJMUlpSSAsIE9vMG9PMDAgKSApIC4gcmVhZCAoICkKICAgICBPME9PME8gPSByZSAuIGNvbXBpbGUgKCAnPHNldHRpbmcgaWQ9KC4rPyk+JyApIC4gZmluZGFsbCAoIElJSUkxaUkxSWlJaUkgKQogICAgIGZvciBpMUlJMSBpbiBPME9PME8gOgogICAgICBpZiAncGFzcycgaW4gaTFJSTEgOgogICAgICAgaWYgbm90ICdvcHRpb249ImhpZGRlbiInIGluIGkxSUkxIDoKICAgICAgICB0cnkgOgogICAgICAgICBPb08gPSBpMUlJMSAuIHJlcGxhY2UgKCAnLycgLCAnIG9wdGlvbj0iaGlkZGVuIi8nICkKICAgICAgICAgT28wb08wMCA9IG9wZW4gKCBvcyAuIHBhdGggLiBqb2luICggaWlpSTFJaUkgLCBPbzBvTzAwICkgLCBtb2RlID0gJ3cnICkKICAgICAgICAgT28wb08wMCAuIHdyaXRlICggc3RyICggSUlJSTFpSTFJaUlpSSApIC4gcmVwbGFjZSAoIGkxSUkxICwgT29PICkgKQogICAgICAgICBPbzBvTzAwIC4gY2xvc2UgKCApCiAgICAgICAgZXhjZXB0IDoKICAgICAgICAgcGFzcwogIGkxMSAuIG9rICggIlBhc3N3b3JkcyBIaWRkZW4iICwgIllvdXIgcGFzc3dvcmRzIHdpbGwgbm93IHNob3cgYXMgc3RhcnMgKGhpZGRlbiksIGlmIHlvdSB3YW50IHRvIHVuZG8gdGhpcyBwbGVhc2UgdXNlIHRoZSBvcHRpb24gdG8gdW5oaWRlIHBhc3N3b3Jkcy4iICkKICBpZiA2NyAtIDY3OiBpaUlJMTFpMUkxSUlpICogT09PME8wTzBvb29vbyAvIElJSUlpaUlJMTExCiAgaWYgMTkgLSAxOTogTzAwb29vb28wMCAtIElJaWkxSSAuIG8wbwpkZWYgaWlJSWkxaTExMWkgKCB1cmwgKSA6CiBPTyA9ICdodHRwOi8vbm9vYnNhbmRuZXJkcy5jb20vVEkvQ29tbXVuaXR5X0J1aWxkcy9ndWlzZXR0aW5ncy5waHA/aWQ9JXMnICUgKCB1cmwgKQogSWkxaUkxMTFJSTFJMSA9IG9PT09Pb09PMG8gKCBPTyAsIDEwICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1xyJyAsICcnICkKIElpaWlJaTExMTFJID0gcmUgLiBjb21waWxlICggJ2d1aXNldHRpbmdzPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBpSUlpaTFpaWlJaWlJID0gSWlpaUlpMTExMUkgWyAwIF0gaWYgKCBsZW4gKCBJaWlpSWkxMTExSSApID4gMCApIGVsc2UgJ05vbmUnCiBpZiA0OCAtIDQ4OiBpaUlJMTFpMUkxSUlpIC4gbzBpaTFJIC0gb29vME8wTzAwCiBpMTFJSSAoIGlJSWlpMWlpaUlpaUkgLCBsb2NhbCApCiBpZiAxNSAtIDE1OiBvMGlpMUkKIGlmIDg3IC0gODc6IG8waWkxSQpkZWYgTzAwTyAoICkgOgogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ0FjdGl2YXRlV2luZG93KDEwMDQwLCJhZGRvbnM6Ly9pbnN0YWxsLyIscmV0dXJuKScgKQogaWYgMjMgLSAyMzogbzBvbyAuIE9vMDBvbzBvTwogaWYgNzkgLSA3OTogSUkxMWlJaUlJSWlJCmRlZiBPb29PMG9PbyAoIHJlcG9faWQgKSA6CiBJSUlJSWlJID0gMQogT08gPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0FkZG9uUG9ydGFsL2RlcGVuZGVuY3lpbnN0YWxsLnBocD9pZD0lcycgJSAoIHJlcG9faWQgKQogSWkxaUkxMTFJSTFJMSA9IG9PT09Pb09PMG8gKCBPTyAsIDEwICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1xyJyAsICcnICkKIG8wb29vb08wbzBPID0gcmUgLiBjb21waWxlICggJ25hbWU9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIGlJMWkxMTFJMUlpID0gcmUgLiBjb21waWxlICggJ3ZlcnNpb249IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIElJMTFpSUlpaWlJSSA9IHJlIC4gY29tcGlsZSAoICdyZXBvX3VybD0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogT29Pb28wME9vbzAwID0gcmUgLiBjb21waWxlICggJ2RhdGFfdXJsPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBvbzBPMDBPb29vME8wID0gcmUgLiBjb21waWxlICggJ3ppcF91cmw9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIE9PMCA9IHJlIC4gY29tcGlsZSAoICdyZXBvX2lkPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBvMDBvTzAwTzAgPSBvMG9vb29PMG8wTyBbIDAgXSBpZiAoIGxlbiAoIG8wb29vb08wbzBPICkgPiAwICkgZWxzZSAnJwogSUlJSUlvMG9vT29PMDAwb08gPSBpSTFpMTExSTFJaSBbIDAgXSBpZiAoIGxlbiAoIGlJMWkxMTFJMUlpICkgPiAwICkgZWxzZSAnJwogb08wb09PT28wbyA9IElJMTFpSUlpaWlJSSBbIDAgXSBpZiAoIGxlbiAoIElJMTFpSUlpaWlJSSApID4gMCApIGVsc2UgJycKIGkxSUkxaUlJMSA9IE9vT29vMDBPb28wMCBbIDAgXSBpZiAoIGxlbiAoIE9vT29vMDBPb28wMCApID4gMCApIGVsc2UgJycKIEkxMUlJMTFJaUkxMSA9IG9vME8wME9vb28wTzAgWyAwIF0gaWYgKCBsZW4gKCBvbzBPMDBPb29vME8wICkgPiAwICkgZWxzZSAnJwogTzAwbyA9IE9PMCBbIDAgXSBpZiAoIGxlbiAoIE9PMCApID4gMCApIGVsc2UgJycKIEkxSWlpID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggSTExaTFJMUkgLCBPMDBvICsgJy56aXAnICkgKQogSUlJaTFpSWlpMUlJMTEgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBPMDBvICkgKQogaWYgNzAgLSA3MDogSUkxMWlJaUlJSWlJIC0gSWlpIC0gSWlpIC4gbzBpaTFJICsgT29vMDBvT28wb09vIC0gT29vMDBvT28wb09vCiBJMTEgLiBjcmVhdGUgKCAnSW5zdGFsbGluZyBSZXBvc2l0b3J5JyAsICdQbGVhc2Ugd2FpdC4uLicgLCAnJyApCiBpZiAyOCAtIDI4OiBvMDAwTzBvIC0gT29PbzBvCiB0cnkgOgogIGRvd25sb2FkZXIgLiBkb3dubG9hZCAoICdodHRwczovL2dpdGh1Yi5jb20vbm9vYnNhbmRuZXJkcy9ub29ic2FuZG5lcmRzL2Jsb2IvbWFzdGVyL3ppcHMvJXMvJXMtMC4wLjAuMS56aXA/cmF3PXRydWUnICUgKCByZXBvX2lkICwgcmVwb19pZCApICwgSTFJaWkgLCBJMTEgKQogIGV4dHJhY3QgLiBhbGwgKCBJMUlpaSAsIGkxaWlJSUkxMTFpaSAsIEkxMSApCiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1VwZGF0ZUxvY2FsQWRkb25zJyApCiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1VwZGF0ZUFkZG9uUmVwb3MnICkKIGV4Y2VwdCA6CiAgdHJ5IDoKICAgZG93bmxvYWRlciAuIGRvd25sb2FkICggb08wb09PT28wbyAsIEkxSWlpICwgSTExICkKICAgZXh0cmFjdCAuIGFsbCAoIEkxSWlpICwgaTFpaUlJSTExMWlpICwgSTExICkKICAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1VwZGF0ZUxvY2FsQWRkb25zJyApCiAgIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdVcGRhdGVBZGRvblJlcG9zJyApCiAgZXhjZXB0IDoKICAgdHJ5IDoKICAgIGRvd25sb2FkZXIgLiBkb3dubG9hZCAoIEkxMUlJMTFJaUkxMSAsIEkxSWlpICwgSTExICkKICAgIGV4dHJhY3QgLiBhbGwgKCBJMUlpaSAsIGkxaWlJSUkxMTFpaSAsIEkxMSApCiAgICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnVXBkYXRlTG9jYWxBZGRvbnMnICkKICAgIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdVcGRhdGVBZGRvblJlcG9zJyApCiAgIGV4Y2VwdCA6CiAgICB0cnkgOgogICAgIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBJSUlpMWlJaWkxSUkxMSApIDoKICAgICAgb3MgLiBtYWtlZGlycyAoIElJSWkxaUlpaTFJSTExICkKICAgICAgaWYgOTEgLSA5MTogbzAwME8wbyArIG8waWkxSSAlIE9vbzAwb09vMG9PbyArIG8wb28KICAgICBJaTFpSTExMUlJMUkxID0gb09PT09vT08wbyAoIGkxSUkxaUlJMSAsIDEwICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1xyJyAsICcnICkKICAgICBPME9PME8gPSByZSAuIGNvbXBpbGUgKCAnaHJlZj0iKC4rPykiJyAsIHJlIC4gRE9UQUxMICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiAgICAgaWYgNjYgLSA2NjogSUlpaTFJICogT29vMDBvT28wb09vICUgaWlJSTExaTFJMUlJaSAlIG8wMDBPMG8gLSBJSUlJaWlJSTExMQogICAgIGZvciBJaTEgaW4gTzBPTzBPIDoKICAgICAgb29vMG9vTyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIElJSWkxaUlpaTFJSTExICwgSWkxICkgKQogICAgICBpZiA1OSAtIDU5OiBPbzAwb28wb08gJSBvb29Pb29PT28wT08KICAgICAgaWYgb08wb28gbm90IGluIElpMSBhbmQgJy8nIG5vdCBpbiBJaTEgOgogICAgICAgaWYgMjEgLSAyMTogSUkxICUgSWlpIC0gSWlpIC8gb09vTzBvMDBPTzAgLyBvMGlpMUkKICAgICAgIHRyeSA6CiAgICAgICAgSTExIC4gdXBkYXRlICggMCAsICJEb3dubG9hZGluZyBbQ09MT1I9eWVsbG93XSIgKyBJaTEgKyAnWy9DT0xPUl0nICwgJycgLCAnUGxlYXNlIHdhaXQuLi4nICkKICAgICAgICBkb3dubG9hZGVyIC4gZG93bmxvYWQgKCBpMUlJMWlJSTEgKyBJaTEgLCBvb28wb29PICwgSTExICkKICAgICAgICBpZiAxNSAtIDE1OiBpMTFJaWkgLyBpMTFJaWkgJSBJSTEgLiBPb09vMG8KICAgICAgIGV4Y2VwdCA6CiAgICAgICAgcHJpbnQgImZhaWxlZCB0byBpbnN0YWxsIiArIElpMQogICAgICAgIGlmIDkzIC0gOTM6IG9Pb08wbzAwT08wICogb09vTzBvMDBPTzAgLyBJSTEKICAgICAgaWYgJy8nIGluIElpMSBhbmQgJy4uJyBub3QgaW4gSWkxIGFuZCAnaHR0cCcgbm90IGluIElpMSA6CiAgICAgICBvbzBPT09vT28gPSBpMUlJMWlJSTEgKyBJaTEKICAgICAgIElJaWlJSWkxICggb29vMG9vTyAsIG9vME9PT29PbyApCiAgICAgICBpZiA2IC0gNjogb09vTzBvMDBPTzAgKiBpaUlJMTFpMUkxSUlpICsgSUlpaTFJCiAgICBleGNlcHQgOgogICAgIGkxMSAuIG9rICggIkVycm9yIGRvd25sb2FkaW5nIHJlcG9zaXRvcnkiICwgJ1RoZXJlIHdhcyBhbiBlcnJvciBkb3dubG9hZGluZ1tDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV0nICsgbzAwb08wME8wICsgJ1svQ09MT1JdLiBQbGVhc2UgY29uc2lkZXIgdXBkYXRpbmcgdGhlIGFkZC1vbiBwb3J0YWwgd2l0aCBkZXRhaWxzIG9yIHJlcG9ydCB0aGUgZXJyb3Igb24gdGhlIGZvcnVtIGF0IFdXVy5OT09CU0FORE5FUkRTLkNPTScgKQogICAgIElJSUlJaUkgPSAwCiAgICAgaWYgMTkgLSAxOTogT09PME8wTzBvb29vbyAlIE9vbzAwb09vMG9PbyAqIG8waWkxSQogICAgIGlmIDI3IC0gMjc6IElJMTFpSWlJSUlpSSAqIE9vMDBvbzBvTyAvIGkxMWlJaWlJaWkgLSBvb29Pb29PT28wT08gKyBPb28wMG9PbzBvT28KIGlmIElJSUlJaUkgPT0gMSA6CiAgdGltZSAuIHNsZWVwICggMSApCiAgSTExIC4gdXBkYXRlICggMCAsICJbQ09MT1I9eWVsbG93XSIgKyBvMDBvTzAwTzAgKyAnWy9DT0xPUl0gIFtDT0xPUj1saW1lXVN1Y2Nlc3NmdWxseSBJbnN0YWxsZWRbL0NPTE9SXScgLCAnJyAsICdOb3cgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMnICkKICB0aW1lIC4gc2xlZXAgKCAxICkKICBPTzBPMG9vT09PMDAgPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0FkZG9uUG9ydGFsL2Rvd25sb2FkY291bnQucGhwP2lkPSVzJyAlICggcmVwb19pZCApCiAgdHJ5IDoKICAgb09PT09vT08wbyAoIE9PME8wb29PT08wMCAsIDUgKQogIGV4Y2VwdCA6CiAgIHBhc3MKICByZXR1cm4gVHJ1ZQogZWxzZSA6CiAgcmV0dXJuIEZhbHNlCiAgaWYgNDMgLSA0Mzogb09vTzBvMDBPTzAgLSBPb28wMG9PbzBvT28KICBpZiA1NiAtIDU2OiBvT29PMG8wME9PMCAuIE8wMG9vb29vMDAgLyBvb28wTzBPMDAgJSBvb29Pb29PT28wT08gLyBPT08wTzBPMG9vb29vICogbzBvCmRlZiBvbzBvT29vICggKSA6CiBJSWkxSWlJSSAoICdDcmVhdGluZyBBIEJhY2t1cCBUbyBTaGFyZScgLAogJ1tDT0xPUj1nb2xkXVRIRSBPUFRJT05TOlsvQ09MT1JdW0NSXVRoZXJlIGFyZSAzIG9wdGlvbnMgd2hlbiBjaG9vc2luZyB0byBjcmVhdGUgYSBiYWNrdXAsIHdlIHNoYWxsIGV4cGxhaW4gaGVyZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGVtOltDUl1bQ1JdJwogJ1tDT0xPUj1kb2RnZXJibHVlXTEuIG5vb2JzYW5kbmVyZHMgQ29tbXVuaXR5IEJ1aWxkWy9DT0xPUl0gLSBUaGlzIGlzIGJ5IGZhciB0aGUgYmVzdCB3YXkgdG8gY3JlYXRlIGEgYnVpbGQgdGhhdCB5b3Ugd2FudCB0byBzaGFyZSB3aXRoIG90aGVycywgaXQgd2lsbCBjcmVhdGUgYSB6aXAgZmlsZSBmb3IgeW91IHRvIHNoYXJlIHRoYXQgY2FuIG9ubHkgYmUgdXNlZCBvbiB3aXRoIHRoaXMgYWRkLW9uLiBUaGUgc2l6ZSBvZiB0aGUgemlwIHdpbGwgYmUgaW5jcmVkaWJseSBzbWFsbCBjb21wYXJlZCB0byBvdGhlciBiYWNrdXAgb3B0aW9ucyBvdXQgdGhlcmUgYW5kIGl0IHdpbGwgYWxzbyBkbyBsb3RzIG9mIG90aGVyIGNsZXZlciBzdHVmZiB0b28gc3VjaCBhcyBlcnJvciBjaGVja2luZyBhZ2FpbnN0IHRoZSBBZGRvbiBQb3J0YWwgYW5kIHRoZSBhZGRvbnMgd2lsbCBhbHdheXMgYmUgdXBkYXRlZCB2aWEgdGhlIHJlbGV2YW50IGRldmVsb3BlciByZXBvc2l0b3JpZXMuIEFkZGVkIHRvIHRoaXMgd2hlbiBpdCBjb21lcyB0byB1cGRhdGluZyBpdFwncyBhIGJyZWV6ZSwgb25seSB0aGUgbmV3IGFkZG9ucyBub3QgYWxyZWFkeSBvbiB0aGUgc3lzdGVtIHdpbGwgYmUgaW5zdGFsbGVkIGFuZCBmb3IgdGhlIG1ham9yaXR5IG9mIGJ1aWxkcyBLb2RpIHdvblwndCBldmVuIGhhdmUgdG8gcmVzdGFydCBhZnRlciBpbnN0YWxsaW5nIVtDUl1bQ1JdJwogJ1tDT0xPUj1kb2RnZXJibHVlXTIuIFVuaXZlcnNhbCBCdWlsZFsvQ09MT1JdIC0gVGhpcyB3YXMgdGhlIG9yaWdpbmFsIG1ldGhvZCBjcmVhdGVkIGJ5IFRvdGFsWEJNQywgd2Ugd291bGQgcmVhbGx5IG9ubHkgcmVjb21tZW5kIHRoaXMgaWYgZm9yIHNvbWUgc3RyYW5nZSByZWFzb24geW91IHdhbnQgeW91ciBidWlsZCBhdmFpbGFibGUgb24gb3RoZXIgaW5mZXJpb3Igd2l6YXJkcy4gVGhlIHppcCBzaXplIGlzIG11Y2ggbGFyZ2VyIGFuZCBldmVyeSB0aW1lIHNvbWVvbmUgd2FudHMgdG8gdXBkYXRlIHRoZWlyIGJ1aWxkIHRoZXkgaGF2ZSB0byBkb3dubG9hZCBhbmQgaW5zdGFsbCB0aGUgd2hvbGUgdGhpbmcgYWdhaW4gd2hpY2ggY2FuIGJlIHZlcnkgZnJ1c3RyYXRpbmcgYW5kIHRpbWUgY29uc3VtaW5nLiBUaGUgd2hvbGUgYnVpbGQgaXMgYmFja2VkIHVwIGluIGZ1bGwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBwYWNrYWdlcyBhbmQgdGh1bWJuYWlscyBmb2xkZXIuIEp1c3QgbGlrZSB0aGUgb3B0aW9uIGFib3ZlIGFsbCBwaHlzaWNhbCBwYXRocyAoc28gbG9uZyBhcyB0aGV5IGV4aXN0IHNvbWV3aGVyZSBpbiB0aGUgS29kaSBlbnZpcm9ubWVudCkgd2lsbCBiZSBjaGFuZ2VkIHRvIHNwZWNpYWwgcGF0aHMgc28gdGhleSB3b3JrIG9uIGFsbCBkZXZpY2VzLltDUl1bQ1JdJwogJ1tDT0xPUj1kb2RnZXJibHVlXTMuIEZ1bGwgQmFja3VwWy9DT0xPUl0gLSBJdFwncyBoaWdobHkgdW5saWtlbHkgeW91IHdpbGwgZXZlciB3YW50IHRvIHVzZSB0aGlzIG9wdGlvbiBhbmQgaXRcJ3MgbW9yZSBmb3IgdGhlIGdlZWtzIG91dCB0aGVyZS4gSXQgd2lsbCBjcmVhdGUgYSBjb21wbGV0ZSBiYWNrdXAgb2YgeW91ciBzZXR1cCBhbmQgbm90IGRvIGFueSBleHRyYSBjbGV2ZXIgc3R1ZmYuIFRoaW5ncyBsaWtlIHBhY2thZ2VzIHdpbGwgcmVtYWluIGludGFjdCBhcyB3aWxsIHRlbXAgY2FjaGUgZmlsZXMsIGJlIHdhcm5lZCB0aGUgc2l6ZSBjb3VsZCBiZSBWRVJZIGxhcmdlIVtDUl1bQ1JdJwogJ1tDUl1bQ09MT1I9Z29sZF1DUkVBVElORyBBIENPTU1VTklUWSBCVUlMRDpbL0NPTE9SXVtDUl1bQ1JdW0NPTE9SPWJsdWVdW0JdU3RlcCAxOlsvQ09MT1JdIFJlbW92ZSBhbnkgc2Vuc2l0aXZlIGRhdGFbL0JdW0NSXU1ha2Ugc3VyZSB5b3VcJ3ZlIHJlbW92ZWQgYW55IHNlbnNpdGl2ZSBkYXRhIHN1Y2ggYXMgcGFzc3dvcmRzIGFuZCB1c2VybmFtZXMgaW4geW91ciBhZGRvbl9kYXRhIGZvbGRlci4nCiAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1bQl1TdGVwIDI6Wy9DT0xPUl0gQmFja3VwIHlvdXIgc3lzdGVtWy9CXVtDUl1DaG9vc2UgdGhlIGJhY2t1cCBvcHRpb24geW91IHdhbnQgZnJvbSB0aGUgbGlzdCBvbiB0aGUgcHJldmlvdXMgcGFnZSwgaWYgeW91XCdyZSBzaGFyaW5nIHRoaXMgdmlhIHRoZSBDUCBBZGRvbiB0aGVuIHBsZWFzZSB1c2UgdGhlIG5vb2JzYW5kbmVyZHMgYmFja3VwIG9wdGlvbiwgdGhpcyB3aWxsIGNyZWF0ZSB0d28gemlwIGZpbGVzIHRoYXQgeW91IG5lZWQgdG8gdXBsb2FkIHRvIGEgc2VydmVyLicKICdbQ1JdW0NSXVtDT0xPUj1kb2RnZXJibHVlXVtCXVN0ZXAgMzpbL0NPTE9SXSBVcGxvYWQgdGhlIHppcHNbL0JdW0NSXVVwbG9hZCB0aGUgdHdvIHppcCBmaWxlcyB0byBhIHNlcnZlciB0aGF0IEtvZGkgY2FuIGFjY2VzcywgaXQgaGFzIHRvIGJlIGEgZGlyZWN0IGxpbmsgYW5kIG5vdCBzb21ld2hlcmUgdGhhdCBhc2tzIGZvciBjYXB0Y2hhIC0gYXJjaGl2ZS5vcmcgYW5kIGNvcHkuY29tIGFyZSB0d28gZ29vZCBleGFtcGxlcy4gRG8gbm90IHVzZSBEcm9wYm94IHVubGVzcyB5b3UgaGF2ZSBhIHBhaWQgYWNjb3VudCwgdGhleSBoYXZlIGEgZmFpciB1c2VhZ2UgcG9saWN5IGFuZCB0aGUgY2hhbmNlcyBhcmUgeW91XCdsbCBmaW5kIHdpdGhpbiAyNCBob3VycyB5b3VyIGRvd25sb2FkIGhhcyBiZWVuIGJsb2NrZWQgYW5kIG5vYm9keSBjYW4gZG93bmxvYWQgaXQuIFtDT0xPUj1saW1lXVRvcCBUaXA6IFsvQ09MT1JdVGhlIHZhc3QgbWFqb3JpdHkgb2YgcHJvYmxlbXMgb2NjdXIgd2hlbiB0aGUgd3JvbmcgZG93bmxvYWQgVVJMIGhhcyBiZWVuIGVudGVyZWQgaW4gdGhlIG9ubGluZSBmb3JtLCBhIGdvb2QgZG93bmxvYWQgVVJMIG5vcm1hbGx5IGVuZHMgaW4gIj0xIiBvciAiemlwPXRydWUiLiBQbGVhc2UgZG91YmxlIGNoZWNrIHdoZW4geW91IGNvcHkgdGhlIFVSTCBpbnRvIGEgd2ViIGJyb3dzZXIgaXQgaW1tZWRpYXRlbHkgc3RhcnRzIGRvd25sb2FkaW5nIHdpdGhvdXQgdGhlIG5lZWQgdG8gcHJlc3MgYW55IG90aGVyIGJ1dHRvbi4nCiAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1bQl1TdGVwIDQ6Wy9DT0xPUl0gU3VibWl0IHRoZSBidWlsZFsvQl0nCiAnW0NSXUNyZWF0ZSBhIHRocmVhZCBvbiB0aGUgQ29tbXVuaXR5IEJ1aWxkcyBzZWN0aW9uIG9mIHRoZSBmb3J1bSBhdCBbQ09MT1I9b3JhbmdlXXd3dy5ub29ic1svQ09MT1JdW0NPTE9SPWRvZGdlcmJsdWVdYW5kWy9DT0xPUl1bQ09MT1I9b3JhbmdlXW5lcmRzLmNvbVsvQ09MT1JdLltDUl1GdWxsIGRldGFpbHMgY2FuIGJlIGZvdW5kIG9uIHRoZXJlIG9mIHRoZSB0ZW1wbGF0ZSB5b3Ugc2hvdWxkIHVzZSB3aGVuIHBvc3RpbmcsIG9uY2UgeW91XCd2ZSBjcmVhdGVkIHlvdXIgc3VwcG9ydCB0aHJlYWQgKE5PVCBCRUZPUkUpIHlvdSBjYW4gcmVxdWVzdCB0byBiZWNvbWUgYSBtZW1iZXIgb2YgdGhlIENvbW11bml0eSBCdWlsZGVyIGdyb3VwIGFuZCB5b3VcJ2xsIHRoZW4gYmUgYWJsZSB0byBhZGQgeW91ciBidWlsZCB2aWEgdGhlIHdlYiBmb3JtLiBBcyBzb29uIGFzIHlvdVwndmUgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRoZSBkZXRhaWxzIHlvdXIgYnVpbGQgd2lsbCBiZSBsaXZlLCBpZiB5b3UgY2FuXCd0IGZpbmQgaXQgaW4gdGhlIENQIGFkZG9uIG1ha2Ugc3VyZSB5b3UgaGF2ZSBYWFggZW5hYmxlZCAoaWYgeW91IG1hcmtlZCBpdCBhcyBoYXZpbmcgYWR1bHQgY29udGVudCkgYW5kIGFsc28gbWFrZSBzdXJlIHlvdVwncmUgcnVubmluZyB0aGUgc2FtZSB2ZXJzaW9uIG9mIEtvZGkgdGhhdCB5b3Ugc2FpZCBpdCB3YXMgY29tcGF0aWJsZSB3aXRoLiBJZiB5b3VcJ3JlIHJ1bm5pbmcgYW5vdGhlciB2ZXJzaW9uIHRoZW4geW91IGNhbiBzZWxlY3QgdGhlIG9wdGlvbiB0byAic2hvdyBhbGwgY29tbXVuaXR5IGJ1aWxkcyIgaW4gdGhlIGFkZG9uIHNldHRpbmdzIGFuZCB0aGF0IHdpbGwgc2hvdyBldmVuIHRoZSBidWlsZHMgdGhhdCBhcmVuXCd0IG1hcmtlZCBhcyBjb21wYXRpYmxlIHdpdGggeW91ciB2ZXJzaW9uIG9mIEtvZGkuJwogJ1tDUl1bQ1JdW0NPTE9SPWdvbGRdUFJJVkFURSBCVUlMRFNbL0NPTE9SXVtDUl1JZiB5b3UgYXJlblwndCBpbnRlcmVzdGVkIGluIHNoYXJpbmcgeW91ciBidWlsZCB3aXRoIHRoZSBjb21tdW5pdHkgeW91IGNhbiBzdGlsbCB1c2Ugb3VyIHN5c3RlbSBmb3IgcHJpdmF0ZSBidWlsZHMuIEp1c3QgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgYWJvdmUgYnV0IHlvdSB3aWxsIG5vdCBuZWVkIHRvIGNyZWF0ZSBhIHN1cHBvcnQgdGhyZWFkIGFuZCB5b3UgV0lMTCByZXF1aXJlIGEgbWluaW11bSBvZiA1IHVzZWZ1bCAobm90IHNwYW0pIHBvc3RzIG9uIHRoZSBmb3J1bS4gVGhlIDUgcG9zdCBydWxlIG9ubHkgYXBwbGllcyB0byB1c2VycyB0aGF0IHdpc2ggdG8gdXNlIHRoZSBwcml2YXRlIGJ1aWxkcyBvcHRpb24uIE9uY2UgeW91IGhhdmUgNSBwb3N0cyB5b3VcJ2xsIGJlIGFibGUgdG8gYWNjZXNzIHRoZSB3ZWIgZm9ybSBhbmQgaW4gdGhlcmUgeW91IGNhbiBlbnRlciB1cCB0byAzIElQIGFkZHJlc3NlcyB0aGF0IHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdmlldyB5b3VyIGJ1aWxkKHMpLiBBbnlib2R5IGNhdWdodCBkaXNvYmV5aW5nIHRoZSBmb3J1bSBydWxlcyB3aWxsIGJlIGJhbm5lZCBzbyBwbGVhc2UgbWFrZSBzdXJlIHlvdSB1bmRlcnN0YW5kIHRoZSBmb3J1bSBydWxlcyBiZWZvcmUgcG9zdGluZywgd2Ugd2VsY29tZSBldmVyeW9uZSBidXQgdGhlcmUgaXMgc3RyaWN0bHkgbm8gc3BhbW1pbmcgb3Igbm9uc2Vuc2UgcG9zdHMganVzdCBzYXlpbmcgc29tZXRoaW5nIGxpa2UgIlRoYW5rcyIgaW4gb3JkZXIgdG8gYnVtcCB1cCB5b3VyIHBvc3QgY291bnQuIFRoZSBzaXRlIHJ1bGVzIGV2ZW4gaGF2ZSBleGFtcGxlcyBvZiBob3cgeW91IGNhbiBnZXQgdG8gNSBwb3N0cyB3aXRob3V0IHJlY2VpdmluZyBhIGJhbi4nICkKIGlmIDIzIC0gMjM6IE8wMG9vb29vMDAKIGlmIDMxIC0gMzE6IGlpSUkxMWkxSTFJSWkgLSBJSWlpMUkgLyBvMG8gLiBvMG9vCmRlZiBvT09vME8wT28gKCApIDoKIElJaTFJaUlJICggJ0luc3RhbGxpbmcgYSBidWlsZCcgLCAnW0NPTE9SPWRvZGdlcmJsdWVdW0JdU3RlcCAxIChPcHRpb25hbCk6Wy9DT0xPUl0gQmFja3VwIHlvdXIgc3lzdGVtWy9CXVtDUl1XaGVuIHNlbGVjdGluZyBhbiBpbnN0YWxsIG9wdGlvbiB5b3VcJ2xsIGJlIGFza2VkIGlmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIGJhY2t1cCAtIHdlIHN0cm9uZ2x5IHJlY29tbWVuZCBjcmVhdGluZyBhIGJhY2t1cCBvZiB5b3VyIHN5c3RlbSBpbiBjYXNlIHlvdSBkb25cJ3QgbGlrZSB0aGUgYnVpbGQgYW5kIHdhbnQgdG8gcmV2ZXJ0IGJhY2suIFJlbWVtYmVyIHlvdXIgYmFja3VwIG1heSBiZSBxdWl0ZSBsYXJnZSBzbyBpZiB5b3VcJ3JlIHVzaW5nIGEgZGV2aWNlIHdpdGggYSB2ZXJ5IHNtYWxsIGFtb3VudCBvZiBzdG9yYWdlIHdlIHJlY29tbWVuZCB1c2luZyBhIFVTQiBzdGljayBvciBTRCBjYXJkIGFzIHRoZSBzdG9yYWdlIGxvY2F0aW9uIG90aGVyd2lzZSB5b3UgbWF5IHJ1biBvdXQgb2Ygc3BhY2UgYW5kIHRoZSBpbnN0YWxsIG1heSBmYWlsLicKICdbQ1JdW0NSXVtDT0xPUj1kb2RnZXJibHVlXVtCXVN0ZXAgMjpbL0NPTE9SXSBDaG9vc2UgYW4gaW5zdGFsbCBtZXRob2Q6Wy9CXVtDUl1bQ1JdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVtDUl1bQ1JdW0NPTE9SPWdvbGRdMS4gT3ZlcndyaXRlIG15IGN1cnJlbnQgc2V0dXAgJiBpbnN0YWxsIG5ldyBidWlsZDpbL0NPTE9SXSBUaGlzIGNvcHkgb3ZlciB0aGUgd2hvbGUgYnVpbGRbQ1JdQXMgdGhlIHRpdGxlIHN1Z2dlc3RzIHRoaXMgd2lsbCBvdmVyd3JpdGUgeW91ciBleGlzdGluZyBzZXR1cCB3aXRoIHRoZSBvbmUgY3JlYXRlZCBieSB0aGUgY29tbXVuaXR5IGJ1aWxkZXIuIFdlIHJlY29tbWVuZCB1c2luZyB0aGUgd2lwZSBvcHRpb24gaW4gdGhlIG1haW50ZW5hbmNlIHNlY3Rpb24gYmVmb3JlIHJ1bm5pbmcgdGhpcywgdGhhdCB3aWxsIGNvbXBsZXRlbHkgd2lwZSB5b3VyIGV4aXN0aW5nIHNldHRpbmdzIGFuZCB3aWxsIGVuc3VyZSB5b3UgZG9uXCd0IGhhdmUgYW55IGNvbmZsaWN0aW5nIGRhdGEgbGVmdCBvbiB0aGUgZGV2aWNlLiBPbmNlIHlvdVwndmUgd2lwZWQgcGxlYXNlIHJlc3RhcnQgS29kaSBhbmQgaW5zdGFsbCB0aGUgYnVpbGQsIHlvdSBjYW4gb2YgY291cnNlIHVzZSB0aGlzIGluc3RhbGwgb3B0aW9uIDEgd2l0aG91dCB3aXBpbmcgYnV0IHlvdSBtYXkgZW5jb3VudGVyIHByb2JsZW1zLiBJZiB5b3UgY2hvb3NlIHRvIGRvIHRoaXMgRE8gTk9UIGJvbWJhcmQgdGhlIGNvbW11bml0eSBidWlsZGVyIHdpdGggcXVlc3Rpb25zIG9uIGhvdyB0byBmaXggY2VydGFpbiB0aGluZ3MsIHRoZXkgd2lsbCBleHBlY3QgeW91IHRvIGhhdmUgaW5zdGFsbGVkIG92ZXIgYSBjbGVhbiBzZXR1cCBhbmQgaWYgeW91XCd2ZSBpbnN0YWxsZWQgb3ZlciBhbm90aGVyIGJ1aWxkIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgYnVnIHRyYWNraW5nIGxpZXMgc29sZWx5IHdpdGggeW91IScKICdbQ1JdW0NSXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bQ1JdW0NSXVtDT0xPUj1nb2xkXTIuIEluc3RhbGw6Wy9DT0xPUl0gS2VlcCBteSBsaWJyYXJ5ICYgcHJvZmlsZXNbQ1JdVGhpcyB3aWxsIGluc3RhbGwgYSBidWlsZCBvdmVyIHRoZSB0b3Agb2YgeW91ciBleGlzdGluZyBzZXR1cCBzbyB5b3Ugd29uXCd0IGxvc2UgYW55dGhpbmcgYWxyZWFkeSBpbnN0YWxsZWQgaW4gS29kaS4gWW91ciBsaWJyYXJ5IGFuZCBhbnkgcHJvZmlsZXMgeW91IG1heSBoYXZlIHNldHVwIHdpbGwgYWxzbyByZW1haW4gdW5jaGFuZ2VkLicKICdbQ1JdW0NSXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bQ1JdW0NSXVtDT0xPUj1nb2xkXTMuIEluc3RhbGw6Wy9DT0xPUl0gS2VlcCBteSBsaWJyYXJ5IG9ubHlbQ1JdVGhpcyB3aWxsIGRvIGV4YWN0bHkgdGhlIHNhbWUgYXMgbnVtYmVyIDIgKGFib3ZlKSBidXQgaXQgd2lsbCBkZWxldGUgYW55IHByb2ZpbGVzIHlvdSBtYXkgaGF2ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG9uZXMgdGhlIGJ1aWxkIGF1dGhvciBoYXMgY3JlYXRlZC4nCiAnW0NSXVtDUl0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW0NSXVtDUl1bQ09MT1I9Z29sZF00LiBJbnN0YWxsOlsvQ09MT1JdIEtlZXAgbXkgcHJvZmlsZXMgb25seVtDUl1BZ2FpbiwgdGhlIHNhbWUgYXMgbnVtYmVyIDIgYnV0IHlvdXIgbGlicmFyeSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIG9uZSBjcmVhdGVkIGJ5IHRoZSBidWlsZCBhdXRob3IuIElmIHlvdVwndmUgc3BlbnQgYSBsb25nIHRpbWUgc2V0dGluZyB1cCB5b3VyIGxpYnJhcnkgYW5kIGhhdmUgaXQganVzdCBob3cgeW91IHdhbnQgaXQgdGhlbiB1c2UgdGhpcyB3aXRoIGNhdXRpb24gYW5kIG1ha2Ugc3VyZSB5b3UgZG8gYSBiYWNrdXAhJwogJ1tDUl1bQ1JdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVtDUl1bQ1JdW0NPTE9SPWRvZGdlcmJsdWVdW0JdU3RlcCAzOlsvQ09MT1JdIFJlcGxhY2Ugb3Iga2VlcCBzZXR0aW5ncz9bL0JdW0NSXVdoZW4gY29tcGxldGluZyB0aGUgaW5zdGFsbCBwcm9jZXNzIHlvdVwnbGwgYmUgYXNrZWQgaWYgeW91IHdhbnQgdG8ga2VlcCB5b3VyIGV4aXN0aW5nIEtvZGkgc2V0dGluZ3Mgb3IgcmVwbGFjZSB3aXRoIHRoZSBvbmVzIGluIHRoZSBidWlsZC4gSWYgeW91IGNob29zZSB0byBrZWVwIHlvdXIgc2V0dGluZ3MgdGhlbiBvbmx5IHRoZSBpbXBvcnRhbnQgc2tpbiByZWxhdGVkIHNldHRpbmdzIGFyZSBjb3BpZWQgb3ZlciBmcm9tIHRoZSBidWlsZC4gQWxsIHlvdXIgb3RoZXIgS29kaSBzZXR0aW5ncyBzdWNoIGFzIHNjcmVlbiBjYWxpYnJhdGlvbiwgcmVnaW9uLCBhdWRpbyBvdXRwdXQsIHJlc29sdXRpb24gZXRjLiB3aWxsIHJlbWFpbiBpbnRhY3QuIENob29zaW5nIHRvIHJlcGxhY2UgeW91ciBzZXR0aW5ncyBjb3VsZCBwb3NzaWJseSBjYXVzZSBhIGZldyBpc3N1ZXMsIHVubGVzcyB0aGUgYnVpbGQgYXV0aG9yIGhhcyBzcGVjaWZpY2FsbHkgcmVjb21tZW5kZWQgeW91IHJlcGxhY2UgdGhlIHNldHRpbmdzIHdpdGggdGhlaXJzIHdlIHdvdWxkIGFsd2F5cyByZWNvbW1lbmQga2VlcGluZyB5b3VyIG93bi4nCiAnW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1bQl1TdGVwIDQ6IFsvQ09MT1JdW0NPTE9SPXJlZF1WRVJZIElNUE9SVEFOVFsvQ09MT1JdWy9CXVtDUl1Gb3IgdGhlIGluc3RhbGwgdG8gY29tcGxldGUgcHJvcGVybHkgS29kaSBNVVNUIGZvcmNlIGNsb3NlLCB0aGlzIG1lYW5zIGZvcmNpbmcgaXQgdG8gY2xvc2UgdmlhIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSByYXRoZXIgdGhhbiBlbGVnYW50bHkgdmlhIHRoZSBLb2RpIG1lbnUuIEJ5IGRlZmF1bHQgdGhpcyBhZGQtb24gd2lsbCBhdHRlbXB0IHRvIG1ha2UgeW91ciBvcGVyYXRpbmcgc3lzdGVtIGZvcmNlIGNsb3NlIEtvZGkgYnV0IHRoZXJlIGFyZSBzeXN0ZW1zIHRoYXQgd2lsbCBub3QgYWxsb3cgdGhpcyAoZGV2aWNlcyB0aGF0IGRvIG5vdCBhbGxvdyBLb2RpIHRvIGhhdmUgcm9vdCBwZXJtaXNzaW9ucykuJwogJyBPbmNlIHRoZSBmaW5hbCBzdGVwIG9mIHRoZSBpbnN0YWxsIHByb2Nlc3MgaGFzIGJlZW4gY29tcGxldGVkIHlvdVwnbGwgc2VlIGEgZGlhbG9nIGV4cGxhaW5pbmcgS29kaSBpcyBhdHRlbXB0aW5nIGEgZm9yY2UgY2xvc2UsIHBsZWFzZSBiZSBwYXRpZW50IGFuZCBnaXZlIGl0IGEgbWludXRlLiBJZiBhZnRlciBhIG1pbnV0ZSBLb2RpIGhhc25cJ3QgY2xvc2VkIG9yIHJlc3RhcnRlZCB5b3Ugd2lsbCBuZWVkIHRvIG1hbnVhbGx5IGZvcmNlIGNsb3NlLiBUaGUgcmVjb21tZW5kZWQgc29sdXRpb24gZm9yIGZvcmNlIGNsb3NpbmcgaXMgdG8gZ28gaW50byB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gbWVudSBhbmQgbWFrZSBpdCBmb3JjZSBjbG9zZSB0aGUgS29kaSBhcHAgYnV0IGlmIHlvdSBkb250XCd0IGtub3cgaG93IHRvIGRvIHRoYXQgeW91IGNhbiBqdXN0IHB1bGwgdGhlIHBvd2VyIGZyb20gdGhlIHVuaXQuJwogJyBQdWxsaW5nIHRoZSBwb3dlciBpcyBmYWlybHkgc2FmZSB0aGVzZSBkYXlzLCBvbiBtb3N0IHNldCB0b3AgYm94ZXMgaXRcJ3MgdGhlIG9ubHkgd2F5IHRvIHN3aXRjaCB0aGVtIG9mZiAtIHRoZXkgcmFyZWx5IGhhdmUgYSBwb3dlciBzd2l0Y2guIEV2ZW4gdGhvdWdoIGl0XCdzIGNvbnNpZGVyZWQgZmFpcmx5IHNhZmUgbm93YWRheXMgeW91IGRvIHRoaXMgYXQgeW91ciBvd24gcmlzayBhbmQgd2Ugd291bGQgYWx3YXlzIHJlY29tbWVuZCBmb3JjZSBjbG9zaW5nIHZpYSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBtZW51LicgKQogaWYgNTAgLSA1MDogb29vT29vT09vME9PICogbzBvICsgSUkxMWlJaUlJSWlJIC0gaWlJSTExaTFJMUlJaQogaWYgNzkgLSA3OTogbzBvbyAvIE8wMG9vb29vMDAKZGVmIGlJaTFpMUkxSSAoICkgOgogSUlpMUlpSUkgKCAnV2hhdCBpcyBhIG5vb2JzYW5kbmVyZHMga2V5d29yZD8nICwgJ1tDT0xPUj1nb2xkXVdIQVQgSVMgQSBLRVlXT1JEP1svQ09MT1JdW0NSXVRoZSBub29ic2FuZG5lcmRzIGtleXdvcmRzIGFyZSBiYXNlZCBvbiB0aGUgaW5nZW5pb3VzIFRMQkIga2V5d29yZCBzeXN0ZW0gdGhhdCB3YXMgaW50cm9kdWNlZCB5ZWFycyBhZ28uIEl0XCdzIG5vdGhpbmcgbmV3IGFuZCB1bmxpa2UgY2VydGFpbiBvdGhlciBwZW9wbGUgb3V0IHRoZXJlIHdlXCdyZSBub3QgZ29pbmcgdG8gY2xhaW0gaXQgYXMgb3VyIGlkZWEuIElmIHlvdVwncmUgYWxyZWFkeSBmYW1pbGlhciB3aXRoIFRMQkIgS2V5d29yZHMgb3IgZXZlbiBzb21lIG9mIHRoZSBjb3BpZXMgb3V0IHRoZXJlIGxpa2UgQ2xvdWR3b3JkcyB5b3Ugd2lsbCBhbHJlYWR5IGtub3cgaG93IHRoaXMgd29ya3MgYnV0IGZvciB0aG9zZSBvZiB5b3UgdGhhdCBkb25cJ3QgaGF2ZSBvbmUgb2YgdGhvc2UgZGV2aWNlcyB3ZVwnbGwganVzdCBnbyB0aHJvdWdoIHRoZSBkZXRhaWxzLi4uJwogJ1tDUl1bQ1JdQW55b25lIGluIHRoZSBjb21tdW5pdHkgY2FuIG1ha2UgdGhlaXIgb3duIGtleXdvcmRzIGFuZCBzaGFyZSB0aGVtIHdpdGggb3RoZXJzLCBpdFwncyBhIHNpbXBsZSB3b3JkIHlvdSB0eXBlIGluIGFuZCB0aGVuIHRoZSBjb250ZW50IHlvdSB1cGxvYWRlZCB0byB0aGUgd2ViIGlzIGRvd25sb2FkZWQgYW5kIGluc3RhbGxlZC4gUHJldmlvdXNseSBrZXl3b3JkcyBoYXZlIG1vc3RseSBiZWVuIHVzZWQgZm9yIGFkZG9uIHBhY2tzLCB0aGlzIGlzIGEgZ3JlYXQgd2F5IHRvIGdldCB3aG9sZSBwYWNrcyBvZiBhZGRvbnMgaW4gb25lIGdvIHdpdGhvdXQgdGhlIG5lZWQgdG8gaW5zdGFsbCBhIHdob2xlIG5ldyBidWlsZC4gV2UgYXJlIHRha2luZyB0aGlzIHRvIHRoZSBuZXh0IGxldmVsIGFuZCB3aWxsIGJlIGludHJvZHVjaW5nIGFydHdvcmsgcGFja3MgYW5kIGFsc28gYWRkb24gZml4ZXMuIE1vcmUgZGV0YWlscyB3aWxsIGJlIGF2YWlsYWJsZSBpbiB0aGUgQ29tbXVuaXR5IFBvcnRhbCBzZWN0aW9uIG9mIHRoZSBmb3J1bSBvbiB3d3cubm9vYnNhbmRuZXJkcy5jb20nCiAnW0NSXVtDUl1bQ1JdW0NPTE9SPWdvbGRdSE9XIERPIEkgRklORCBBIEtFWVdPUkQ/Wy9DT0xPUl1bQ1JdVGhlIGZ1bGwgbGlzdCBvZiBub29ic2FuZG5lcmRzIGtleXdvcmRzIGNhbiBiZSBmb3VuZCBvbiB0aGUgZm9ydW0sIGluIHRoZSBDb21tdW5pdHkgUG9ydGFsIHNlY3Rpb24geW91XCdsbCBzZWUgYSBzZWN0aW9uIGZvciB0aGUga2V5d29yZHMgYXQgdGhlIHRvcCBvZiB0aGUgcGFnZS4gSnVzdCBmaW5kIHRoZSBwYWNrIHlvdSB3b3VsZCBsaWtlIHRvIGluc3RhbGwgdGhlbiB1c2luZyB0aGlzIGFkZG9uIHR5cGUgdGhlIGtleXdvcmQgaW4gd2hlbiBwcm9tcHRlZCAoYWZ0ZXIgY2xpY2tpbmcgIkluc3RhbGwgYSBub29ic2FuZG5lcmRzIGtleXdvcmQiKS4gWW91ciBjb250ZW50IHdpbGwgbm93IGJlIGluc3RhbGxlZCwgaWYgaW5zdGFsbGluZyBhZGRvbiBwYWNrcyBwbGVhc2UgYmUgcGF0aWVudCB3aGlsZSBlYWNoIGFkZG9uIHVwZGF0ZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIGRpcmVjdGx5IGZyb20gdGhlIGRldmVsb3BlcnMgcmVwby4nCiAnW0NSXVtDUl1bQ1JdW0NPTE9SPWdvbGRdQ0FOIEkgVVNFIE9USEVSIEtFWVdPUkRTP1svQ09MT1JdIChDbG91ZHdvcmRzLCBUTEJCIGV0Yy4pW0NSXVllcyB5b3UgY2FuLCBqdXN0IGdvIHRvIHRoZSBhZGRvbiBzZXR0aW5ncyBhbmQgZW50ZXIgdGhlIHVybCBzaG9ydGVuZXIgdGhhdCBwYXJ0aWN1bGFyIGNvbXBhbnkgdXNlLiBBZ2FpbiB5b3Ugd2lsbCBmaW5kIGZ1bGwgZGV0YWlscyBvZiBzdXBwb3J0ZWQga2V5d29yZHMgb24gdGhlIGZvcnVtLicgKQogaWYgMzUgLSAzNTogbzBvICsgT09PME8wTzBvb29vbyAqIE9vbzAwb09vMG9PbwogaWYgMjMgLSAyMzogSWlpICogT28wMG9vMG9PIC8gb29vT29vT09vME9PCmRlZiBPME8wbzBvMG9vME8gKCApIDoKIElJaTFJaUlJICggJ0hvdyB0byBjcmVhdGUgYSBrZXl3b3JkPycgLCAnW0NPTE9SPWdvbGRdTmFOIE1BS0UgSVQgRUFTWSFbL0NPTE9SXVtDUl1UaGUga2V5d29yZHMgY2FuIG5vdyBiZSBtYWRlIHZlcnkgc2ltcGx5IGJ5IGFueW9uZS4gV2VcJ3ZlIG5vdCBsb2NrZWQgdGhpcyBkb3duIHRvIGp1c3Qgb3VyIGFkZG9uIGFuZCBvdGhlcnMgY2FuIHVzZSB0aGlzIG9uIHNpbWlsYXIgc3lzdGVtcyBmb3IgY3JlYXRpbmcga2V5d29yZHMgaWYgdGhleSB3YW50Li4uJwogJ1tDUl1bQ1JdW0NPTE9SPWRvZGdlcmJsdWVdW0JdU3RlcCAxOlsvQ09MT1JdIFVzZSBhIHZhbmlsbGEgS29kaSBzZXR1cFsvQl1bQ1JdWW91IHdpbGwgcmVxdWlyZSBhIGNvbXBsZXRlIGZyZXNoIGluc3RhbGwgb2YgS29kaSB3aXRoIGFic29sdXRlbHkgbm90aGluZyBlbHNlIGluc3RhbGxlZCBhbmQgcnVubmluZyB0aGUgZGVmYXVsdCBza2luLiBEZWNpZGUgd2hhdCBraW5kIG9mIHBhY2sgeW91IHdhbnQgdG8gY3JlYXRlLCBsZXRzIHNheSB3ZSB3YW50IHRvIGNyZWF0ZSBhIGtpZHMgcGFjay4uLiBBZGQgYWxsIHRoZSBraWQgcmVsYXRlZCBhZGRvbnMgeW91IHdhbnQgYW5kIG1ha2Ugc3VyZSB5b3UgYWxzbyBoYXZlIHRoZSByZWxldmFudCByZXBvc2l0b3J5IGluc3RhbGxlZCB0b28uIEluIHRoZSB1bmxpa2VseSBldmVudCB5b3VcJ3ZlIGZvdW5kIGFuIGFkZG9uIHRoYXQgZG9lc25cJ3QgYmVsb25nIGluIGEgcmVwb3NpdG9yeSB0aGF0XCdzIGZpbmUgdGhlIHN5c3RlbSB3aWxsIGNyZWF0ZSBhIGZ1bGwgYmFja3VwIG9mIHRoYXQgYWRkb24gdG9vIChqdXN0IG1lYW5zIGl0IHdvblwndCBhdXRvIHVwZGF0ZSB3aXRoIGZ1dHVyZSB1cGRhdGVzIHRvIHRoZSBhZGRvbikuJwogJ1tDUl1bQ1JdW0NPTE9SPWRvZGdlcmJsdWVdW0JdU3RlcCAyOlsvQ09MT1JdIENyZWF0ZSB0aGUgYmFja3VwWy9CXVtDUl1Vc2luZyB0aGlzIGFkZG9uIGNyZWF0ZSB5b3VyIGJhY2t1cCwgY3VycmVudGx5IG9ubHkgYWRkb24gcGFja3MgYXJlIHN1cHBvcnRlZCBidXQgc29vbiBtb3JlIHBhY2tzIHdpbGwgYmUgYWRkZWQuIFdoZW4geW91IGNyZWF0ZSB0aGUga2V5d29yZCB5b3VcJ2xsIGJlIGFza2VkIGZvciBhIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSB6aXAgZmlsZSB0aGF0IHdpbGwgYmUgY3JlYXRlZCBhbmQgYSBuYW1lLCB0aGlzIGNhbiBiZSBhbnl3aHdlcmUgeW91IGxpa2UgYW5kIGNhbiBiZSBjYWxsZWQgd2hhdGV2ZXIgeW91IHdhbnQgLSB5b3UgZG8gbm90IG5lZWQgdG8gYWRkIHRoZSB6aXAgZXh0ZW5zaW9uLCB0aGF0IHdpbGwgYXV0b21hdGljYWxseSBiZSBhZGRlZCBmb3IgeW91IHNvIGluIG91ciBleGFtcGxlIGhlcmUgd2Ugd291bGQgY2FsbCBpdCAia2lkcyIuJwogJ1tDUl1bQ1JdW0NPTE9SPWRvZGdlcmJsdWVdW0JdU3RlcCAzOlsvQ09MT1JdIFVwbG9hZCB0aGUgemlwc1svQl1bQ1JdVXBsb2FkIHRoZSB0d28gemlwIGZpbGUgdG8gYSBzZXJ2ZXIgdGhhdCBLb2RpIGNhbiBhY2Nlc3MsIGl0IGhhcyB0byBiZSBhIGRpcmVjdCBsaW5rIGFuZCBub3Qgc29tZXdoZXJlIHRoYXQgYXNrcyBmb3IgY2FwdGNoYSAtIGFyY2hpdmUub3JnIGFuZCBjb3B5LmNvbSBhcmUgdHdvIGdvb2QgZXhhbXBsZXMuIERvIG5vdCB1c2UgRHJvcGJveCB1bmxlc3MgeW91IGhhdmUgYSBwYWlkIGFjY291bnQsIHRoZXkgaGF2ZSBhIGZhaXIgdXNlYWdlIHBvbGljeSBhbmQgdGhlIGNoYW5jZXMgYXJlIHlvdVwnbGwgZmluZCB3aXRoaW4gMjQgaG91cnMgeW91ciBkb3dubG9hZCBoYXMgYmVlbiBibG9ja2VkIGFuZCBub2JvZHkgY2FuIGRvd25sb2FkIGl0LltDUl1bQ1JdW0NPTE9SPWxpbWVdVG9wIFRpcDogWy9DT0xPUl1UaGUgdmFzdCBtYWpvcml0eSBvZiBwcm9ibGVtcyBvY2N1ciB3aGVuIHRoZSB3cm9uZyBkb3dubG9hZCBVUkwgaGFzIGJlZW4gZW50ZXJlZCBpbiB0aGUgb25saW5lIGZvcm0sIGEgZ29vZCBkb3dubG9hZCBVUkwgbm9ybWFsbHkgZW5kcyBpbiAiPTEiIG9yICJ6aXA9dHJ1ZSIuIFBsZWFzZSBkb3VibGUgY2hlY2sgd2hlbiB5b3UgY29weSB0aGUgVVJMIGludG8gYSB3ZWIgYnJvd3NlciBpdCBpbW1lZGlhdGVseSBzdGFydHMgZG93bmxvYWRpbmcgd2l0aG91dCB0aGUgbmVlZCB0byBwcmVzcyBhbnkgb3RoZXIgYnV0dG9uLicKICdbQ1JdW0NSXVtDT0xPUj1kb2RnZXJibHVlXVtCXVN0ZXAgNDpbL0NPTE9SXSBDcmVhdGUgdGhlIGtleXdvcmRbL0JdW0NSXUNvcHkgdGhlIGRvd25sb2FkIFVSTCB0byB5b3VyIGNsaXBib2FyZCBhbmQgdGhlbiBnbyB0byB3d3cudXJsc2hvcnRib3QuY29tLiBJbiBoZXJlIHlvdSBuZWVkIHRvIGVudGVyIHRoZSBVUkwgaW4gdGhlICJMb25nIFVSTCIgZmllbGQgYW5kIHRoZW4gaW4gdGhlICJDdXN0b20gS2V5d29yZCIgZmllbGQgeW91IG5lZWQgdG8gZW50ZXIgIm5vb2JzIiAod2l0aG91dCB0aGUgcXVvdGF0aW9uIG1hcmtzKSBmb2xsb3dlZCBieSB5b3VyIGtleXdvcmQuIFdlIHJlY29tbWVuZCBhbHdheXMgdXNpbmcgYSByYW5kb20gdGVzdCBrZXl3b3JkIGZvciB0ZXN0aW5nIGJlY2F1c2Ugb25jZSB5b3UgaGF2ZSBhIGtleXdvcmQgeW91IGNhblwndCBjaGFuZ2UgaXQsIGFsc28gd2hlbiB1cGxvYWRpbmcgbWFrZSBzdXJlIGl0XCdzIGEgbGluayB5b3UgY2FuIGVkaXQgYW5kIHN0aWxsIGtlZXAgdGhlIHNhbWUgVVJMIC0gdGhhdCB3YXkgaXRcJ3MgZWFzeSB0byBrZWVwIHVwIHRvIGRhdGUgYW5kIHlvdSBjYW4gc3RpbGwgdXNlIHRoZSBzYW1lIGtleXdvcmQuIEluIG91ciBleGFtcGxlIG9mIGtpZHMgd2Ugd291bGQgc2V0IHRoZSBjdXN0b20ga2V5d29yZCBhcyAibm9vYnNraWRzIi4gVGhlIG5vb2JzIGJpdCBpcyBpZ25vcmVkIGFuZCBpcyBvbmx5IGZvciBoZWxwaW5nIHRoZSBhZGRvbiBrbm93IHdoYXQgdG8gbG9vayBmb3IsIHRoZSB1c2VyIHdvdWxkIGp1c3QgdHlwZSBpbiAia2lkcyIgZm9yIHRoZSBraWRzIHBhY2sgdG8gYmUgaW5zdGFsbGVkLicgKQogaWYgMzAgLSAzMDogT29PbzBvIC8gbzAwME8wbyAvIE8wMG9vb29vMDAgLSBPT08wTzBPMG9vb29vIC4gSUlJSWlpSUkxMTEgLSBpMTFJaWkKIGlmIDk1IC0gOTU6IE9vT28wbyAtIE9vMDBvbzBvTwpkZWYgSTFpaSAoICkgOgogSUlpMUlpSUkgKCAnQWRkaW5nIFRoaXJkIFBhcnR5IFdpemFyZHMnICwgJ1tDT0xPUj1nb2xkXU9ORSBXSVpBUkQgVE8gUlVMRSBUSEVNIEFMTCFbL0NPTE9SXVtDUl1EaWQgeW91IGtub3cgdGhlIHZhc3QgbWFqb3JpdHkgb2Ygd2l6YXJkcyBvdXQgdGhlcmUgKGV2ZXJ5IHNpbmdsZSBvbmUgd2VcJ3ZlIHRlc3RlZCkgaGFzIGp1c3QgYmVlbiBhIGNvcHkvcGFzdGUgb2YgdmVyeSBvbGQgY29kZSBjcmVhdGVkIGJ5IHRoZSB0ZWFtIGhlcmU/IFdlXCd2ZSBub3RpY2VkIGEgbG90IG9mIHRoZSB1c2VycyBpbnN0YWxsaW5nIGJ1aWxkcyB2aWEgdGhlc2UgdGhpcmQgcGFydHkgd2l6YXJkcyBoYXZlIHJ1biBpbnRvIG1hbnkgZGlmZmVyZW50IHByb2JsZW1zIHNvIHdlIHRob3VnaHQgd2VcJ2QgdGFrZSBpdCB1cG9uIG91cnNlbHZlcyB0byBoZWxwIG91dC4uLicKICdbQ1JdW0NSXVtDUl1bQ09MT1I9Z29sZF1XSEFUIEJFTkVGSVRTIERPRVMgVEhJUyBIQVZFP1svQ09MT1JdW0NSXVdlXCd2ZSBhZGRlZCBleHRyYSBjb2RlIHRoYXQgY2hlY2tzIGZvciBjb21tb24gZXJyb3JzLCB1bmZvcnR1bmF0ZWx5IHRoZXJlIGFyZSBzb21lIHBlb3BsZSBvdXQgdGhlcmUgdXNpbmcgaW5mZXJpb3IgcHJvZ3JhbXMgdG8gY3JlYXRlIHRoZWlyIGJhY2t1cHMgYW5kIHRoYXQgaXMgY2F1c2luZyBwcm9ibGVtcyBpbiB0aGVpciB3aXphcmRzLiBJZiBzdWNoIGEgcHJvYmxlbSBleGlzdHMgd2hlbiB0cnlpbmcgdG8gdXNlIGFub3RoZXIgd2l6YXJkIHlvdSBjYW4gdHJ5IGFkZGluZyB0aGUgZGV0YWlscyB0byB0aGlzIGFkZG9uIGFuZCBpdCBhdXRvbWF0aWNhbGx5IGZpeGVzIGFueSBjb3JydXB0IGZpbGVzIGl0IGZpbmRzLiBPZiBjb3Vyc2UgdGhlcmUgYXJlIG90aGVyIGJlbmVmaXRzLi4uIGluc3RhbGxpbmcgY29kZSBmcm9tIGFuIHVua25vd24gc291cmNlIGNhbiBnaXZlIHRoZSBhdXRob3IgYWNjZXNzIHRvIHlvdXIgc3lzdGVtIHNvIG1ha2Ugc3VyZSB5b3UgYWx3YXlzIHRydXN0IHRoZSBhdXRob3IocykuIFdoeSB0YWtlIHRoZSByaXNrIG9mIGluc3RhbGxpbmcgd2l6YXJkcyBjcmVhdGVkIGJ5IGFub255bW91cyB1c2VybmFtZXMgb24gc29jaWFsIG1lZGlhIHNpdGVzIHdoZW4geW91IGNhbiBpbnN0YWxsIGZyb20gYSB0cnVzdGVkIHNvdXJjZSBsaWtlIG5vb2JzYW5kbmVyZHMgYW5kIHlvdVwnbGwgYWxzbyBiZSBzYWZlIGluIHRoZSBrbm93bGVkZ2UgdGhhdCBhbnkgbmV3IHVwZGF0ZXMgYW5kIGltcHJvdmVtZW50cyB3aWxsIGJlIG1hZGUgaGVyZSBmaXJzdCAtIHdlIGRvIG5vdCBjb3B5L3Bhc3RlIGNvZGUsIHdlIGFyZSBhY3RpdmVseSBjcmVhdGluZyBuZXcgZXhjaXRpbmcgc29sdXRpb25zIScKICdbQ1JdW0NSXVtDUl1bQ09MT1I9Z29sZF1BRERJTkcgM1JEIFBBUlRZIFdJWkFSRFMgVE8gVEhJUyBBRERPTlsvQ09MT1JdW0NSXVtDUl1bQ09MT1I9ZG9kZ2VyYmx1ZV1bQl1TdGVwIDE6Wy9DT0xPUl0gRW5hYmxpbmcgM3JkIFBhcnR5IFdpemFyZHNbL0JdW0NSXUluIHRoZSBhZGRvbiBzZXR0aW5ncyB1bmRlciB0aGUgQ29tbXVuaXR5IEJ1aWxkcyBzZWN0aW9uIHlvdSBoYXZlIHRoZSBvcHRpb24gdG8gZW5hYmxlIHRoaXJkIHBhcnR5IGNvbW11bml0eSBidWlsZHMsIGlmIHlvdSBjbGljayBvbiB0aGlzIHlvdSB3aWxsIGJlIGFibGUgdG8gZW50ZXIgZGV0YWlscyBvZiB1cCB0byA1IGRpZmZlcmVudCB3aXphcmRzLicKICdbQ1JdW0NSXVtDT0xPUj1kb2RnZXJibHVlXVtCXVN0ZXAgMjpbL0NPTE9SXSBFbnRlciB0aGUgVVJMWy9CXVtDUl1BcyB2aXJ0dWFsbHkgYWxsIHdpemFyZHMgdXNlIGV4YWN0bHkgdGhlIHNhbWUgc3RydWN0dXJlIGFsbCB5b3UgbmVlZCB0byBkbyBpcyBmaW5kIG91dCB3aGF0IFVSTCB0aGV5IGFyZSBsb29raW5nIHVwIGluIHRoZSBjb2RlLCB5b3UgY2FuIG9wZW4gdGhlIGRlZmF1bHQucHkgZmlsZSBvZiB0aGUgd2l6YXJkIGluIGEgdGV4dCBlZGl0b3IgYW5kIHNlYXJjaCBmb3IgImh0dHAiIGFuZCB5b3Ugd2lsbCBtb3JlIHRoYW4gbGlrZWx5IGZpbmQgdGhlIFVSTCBzdHJhaWdodCBhd2F5LiBUcnkgZW50ZXJpbmcgaXQgaW4gYSB3ZWIgYWRkcmVzcywgaXQgc2hvdWxkIHNob3cgdGhlIGRldGFpbHMgZm9yIGFsbCB0aGUgYnVpbGRzIGluIHRoYXQgd2l6YXJkIGluIGEgdGV4dCBiYXNlZCBwYWdlLiBJZiB0aGUgcGFnZSBpcyBibGFuayBkb25cJ3Qgd29ycnkgaXQgbWF5IGp1c3QgYmUgbG9ja2VkIGZyb20gd2ViIGJyb3dzZXJzIGFuZCBjYW4gb25seSBiZSBvcGVuZWQgaW4gS29kaSwgdHJ5IGl0IG91dCBhbmQgc2VlIGlmIGl0IHdvcmtzLicKICdbQ1JdW0NSXVtDT0xPUj1kb2RnZXJibHVlXVtCXVN0ZXAgMzpbL0NPTE9SXSBFbnRlciB0aGUgbmFtZVsvQl1bQ1JdR2l2ZSB0aGUgd2l6YXJkIGEgbmFtZSwgbm93IHdoZW4geW91IGdvIGludG8gdGhlIENvbW11bml0eSBCdWlsZHMgc2VjdGlvbiB5b3VcJ2xsIGhhdmUgdGhlIG9mZmljaWFsIG5vb2JzYW5kbmVyZHMgYnVpbGRzIGFzIGFuIG9wdGlvbiBhbmQgYWxzbyBhbnkgbmV3IG9uZXMgeW91XCd2ZSBhZGRlZC4nICkKIGlmIDgyIC0gODI6IElpaSAuIElJSUlpaUlJMTExCiBpZiA3MyAtIDczOiBPb09vMG8KZGVmIGkxSWlJaWlpaWkxMSAoICkgOgogb29vb09PID0gSTFJaWlJIC4gZ2V0U2V0dGluZyAoICdpcF9zaXRlJyApCiB0cnkgOgogIGlmIG9vb29PTyA9PSAid2hhdGlzbXlpcGFkZHJlc3MuY29tIiA6CiAgIE9PID0gJ2h0dHA6Ly93aGF0aXNteWlwYWRkcmVzcy5jb20vJwogICBJaTFpSTExMUlJMUkxID0gb09PT09vT08wbyAoIE9PICwgMzAgKSAuIHJlcGxhY2UgKCAnXG4nICwgJycgKSAuIHJlcGxhY2UgKCAnXHInICwgJycgKQogICBpZiBub3QgJ0FjY2VzcyBEZW5pZWQnIGluIElpMWlJMTExSUkxSTEgOgogICAgaTFJSUlJMTFJSTEgPSByZSAuIGNvbXBpbGUgKCAnd2hhdGlzbXlpcGFkZHJlc3MuY29tL2lwLyguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKICAgIE9PT08wb09PID0gaTFJSUlJMTFJSTEgWyAwIF0gaWYgKCBsZW4gKCBpMUlJSUkxMUlJMSApID4gMCApIGVsc2UgJ1Vua25vd24nCiAgICB4Ym1jIC4gbG9nICggT09PTzBvT08gKQogICAgSUlJaWlpID0gcmUgLiBjb21waWxlICggJyJmb250LXNpemU6MTRweDsiPiguKz8pPC90ZD4nICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiAgICB4Ym1jIC4gbG9nICggc3RyICggSUlJaWlpICkgKQogICAgSTExT29vb08gPSBJSUlpaWkgWyAwIF0gaWYgKCBsZW4gKCBJSUlpaWkgKSA+IDAgKSBlbHNlICdVbmtub3duJwogICAgeGJtYyAuIGxvZyAoIEkxMU9vb29PICkKICAgIGkxSUlpMTEgPSBJSUlpaWkgWyAxIF0gKyAnLCAnICsgSUlJaWlpIFsgMiBdICsgJywgJyArIElJSWlpaSBbIDMgXSBpZiAoIGxlbiAoIElJSWlpaSApID4gMiApIGVsc2UgJ1Vua25vd24nCiAgICB4Ym1jIC4gbG9nICggaTFJSWkxMSApCiAgICBpMTEgLiBvayAoICd3d3cud2hhdGlzbXlpcGFkZHJlc3MuY29tJyAsICJbQl1bQ09MT1IgZ29sZF1BZGRyZXNzOiBbL0NPTE9SXVsvQl0gJXMiICUgT09PTzBvT08gLCAnW0JdW0NPTE9SIGdvbGRdUHJvdmlkZXI6IFsvQ09MT1JdWy9CXSAlcycgJSBJMTFPb29vTyAsICdbQl1bQ09MT1IgZ29sZF1Mb2NhdGlvbjogWy9DT0xPUl1bL0JdICVzJyAlIGkxSUlpMTEgKQogIGVsc2UgOgogICBPTyA9ICdodHRwczovL3d3dy5pcGxvY2F0aW9uLm5ldC9maW5kLWlwLWFkZHJlc3MnCiAgIElpMWlJMTExSUkxSTEgPSBvT09PT29PTzBvICggT08gLCAzMCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiAgIHhibWMgLiBsb2cgKCBJaTFpSTExMUlJMUkxICkKICAgb09JSUlJSTExID0gcmUgLiBjb21waWxlICggJzx0YWJsZSBjbGFzcz0iaXB0YWJsZSI+KC4rPyk8L3RhYmxlPicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKICAgeGJtYyAuIGxvZyAoIHN0ciAoIG9PSUlJSUkxMSApICkKICAgaTFJSUlJMTFJSTEgPSByZSAuIGNvbXBpbGUgKCAnZm9udC13ZWlnaHQ6IGJvbGQ7Ij4oLis/KTwvc3Bhbj4nICkgLiBmaW5kYWxsICggc3RyICggb09JSUlJSTExICkgKQogICB4Ym1jIC4gbG9nICggaTFJSUlJMTFJSTEgKQogICBPT09PMG9PTyA9IGkxSUlJSTExSUkxIFsgMCBdIGlmICggbGVuICggaTFJSUlJMTFJSTEgKSA+IDAgKSBlbHNlICdVbmtub3duJwogICBpMWkxID0gcmUgLiBjb21waWxlICggJ0hvc3QgTmFtZTwvdGg+PHRkPiguKz8pPC90ZD4nICkgLiBmaW5kYWxsICggc3RyICggb09JSUlJSTExICkgKQogICBJaWlJaSA9IGkxaTEgWyAwIF0gaWYgKCBsZW4gKCBpMWkxICkgPiAwICkgZWxzZSAnVW5rbm93bicKICAgSUlpaUlpSSA9IHJlIC4gY29tcGlsZSAoICdJUCBMb2NhdGlvbjwvdGg+PHRkPiguKz8pJm5ic3A7JyApIC4gZmluZGFsbCAoIHN0ciAoIG9PSUlJSUkxMSApICkKICAgaTFJSWkxMSA9IElJaWlJaUkgWyAwIF0gaWYgKCBsZW4gKCBJSWlpSWlJICkgPiAwICkgZWxzZSAnVW5rbm93bicKICAgaTExIC4gb2sgKCAnd3d3LmlwbG9jYXRpb24ubmV0JyAsICJbQl1bQ09MT1IgZ29sZF1BZGRyZXNzOiBbL0NPTE9SXVsvQl0gJXMiICUgT09PTzBvT08gLCAnW0JdW0NPTE9SIGdvbGRdSG9zdDogWy9DT0xPUl1bL0JdICVzJyAlIElpaUlpICwgJ1tCXVtDT0xPUiBnb2xkXUxvY2F0aW9uOiBbL0NPTE9SXVsvQl0gJXMnICUgaTFJSWkxMSApCiBleGNlcHQgOgogIGkxMSAuIG9rICggJ1NFUlZJQ0UgVU5BVkFJTEFCTEUnICwgJ0l0IHdhcyBub3QgcG9zc2libGUgdG8gY29udGFjdCB0aGUgcmVsZXZhbnQgd2Vic2l0ZSB0byBjaGVjayB5b3VyIGRldGFpbHMuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24gYW5kIGlmIHRoYXRcJ3Mgb2sgdHJ5IHVzaW5nIGFuIGFsdGVybmF0aXZlIHNpdGUgaW4gdGhlIHNldHRpbmdzLicgKQogIGlmIDQ5IC0gNDk6IElJSUlpaUlJMTExIC4gb09vTzBvMDBPTzAgJSBpMTFJaWkgLiBpaUlJMTFpMUkxSUlpICogSUkxMWlJaUlJSWlJCiAgaWYgNDQgLSA0NDogSUlpaTFJIC8gT09PME8wTzBvb29vbyAqIGlpSUkxMWkxSTFJSWkgKyBvMDAwTzBvIC4gaTExSWlpCmRlZiBPT09vICggd2luZG93X3R5cGUgKSA6CiBJMWlJaTFpID0gRmFsc2UKIElJaUkxb08gPSAwCiBpZiA5MCAtIDkwOiBPbzAwb28wb08gKiBPb28wMG9PbzBvT28gKiBPbzAwb28wb08gLSBvb28wTzBPMDAKIGlmIHdpbmRvd190eXBlID09ICd5ZXNub2RpYWxvZycgOgogIEkxMUkxMTFpID0gNTAKIGVsc2UgOgogIEkxMUkxMTFpID0gMTAKICBpZiA4MiAtIDgyOiBPb09vMG8gLyBpMTFJaWkgLyBpMTFJaWkKIElpMUkxaTFJaWlJID0geGJtYyAuIGdldENvbmRWaXNpYmlsaXR5ICggJ1dpbmRvdy5Jc0FjdGl2ZSglcyknICUgd2luZG93X3R5cGUgKQogaWYgMzcgLSAzNzogbzAwME8wbyArIElJMSAuIE9vT28wbyArIG8wMDBPMG8gLiBPbzAwb28wb08KIGlmIDQ0IC0gNDQ6IElpaSAuIE9vT28wbyAuIE8wMG9vb29vMDAgLiBJaWkgKiBpMTFJaWkKIHdoaWxlIG5vdCBJaTFJMWkxSWlpSSBhbmQgSUlpSTFvTyA8IEkxMUkxMTFpIDoKICB4Ym1jIC4gc2xlZXAgKCAxMDAgKQogIElpMUkxaTFJaWlJID0geGJtYyAuIGdldENvbmRWaXNpYmlsaXR5ICggJ1dpbmRvdy5Jc0FjdGl2ZSglcyknICUgd2luZG93X3R5cGUgKQogIElJaUkxb08gKz0gMQogd2hpbGUgSWkxSTFpMUlpaUkgOgogIEkxaUlpMWkgPSBUcnVlCiAgSWkxSTFpMUlpaUkgPSB4Ym1jIC4gZ2V0Q29uZFZpc2liaWxpdHkgKCAnV2luZG93LklzQWN0aXZlKCVzKScgJSB3aW5kb3dfdHlwZSApCiAgeGJtYyAuIHNsZWVwICggMjUwICkKIHJldHVybiBJMWlJaTFpCiBpZiA1OSAtIDU5OiBPb28wMG9PbzBvT28gKiBJSTEgLSBJSTEKIGlmIDMzIC0gMzM6IE9PTzBPME8wb29vb28gLiBpMTFpSWlpSWlpICUgbzBpaTFJCmRlZiBpMUkxaWlpMUkxMUlJICggdXJsICkgOgogaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIEkxMWkxSTFJICkgOgogIG9zIC4gbWFrZWRpcnMgKCBJMTFpMUkxSSApCiAgaWYgNSAtIDU6IGkxMWlJaWlJaWkgLyBpMTFJaWkgLSBvb28wTzBPMDAgLSBJSTEgLyBpMTFJaWkgKyBJSWlpMUkKIE8wb29Pb08wID0gJycKIG9PSUlJSSA9ICdFbnRlciBLZXl3b3JkJwogSWkxSTExSUlpMSA9IEkxaWlpaUkgKCBvT0lJSUkgKQogTzBvb09vTzAgPSB1cmwgKyBJaTFJMTFJSWkxCiBPT28wMG9PbyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMUkxSSAsIElpMUkxMUlJaTEgKyAnLnppcCcgKQogaWYgMTIgLSAxMjogbzBvbwogaWYgSWkxSTExSUlpMSAhPSAnJyA6CiAgaTFJMUlpSTFJSTEgPSBpMTEgLiB5ZXNubyAoICdCYWNrdXAgZXhpc3Rpbmcgc2V0dXAnICwgJ0luc3RhbGxpbmcgY2VydGFpbiBrZXl3b3JkcyBjYW4gcmVzdWx0IGluIHNvbWUgZXhpc3Rpbmcgc2V0dGluZ3Mgb3IgYWRkLW9ucyB0byBiZSByZXBsYWNlZC4gV291bGQgeW91IGxpa2UgdG8gY3JlYXRlIGEgYmFja3VwIGJlZm9yZSBwcm9jZWVkaW5nPycgKQogIGlmIDIxIC0gMjE6IElJMSAuIE9PTzBPME8wb29vb28gLyBpMTFpSWlpSWlpCiAgaWYgaTFJMUlpSTFJSTEgPT0gMSA6CiAgIG9PT08gKCApCiAgIGlmIDcxIC0gNzE6IG8wMDBPMG8gLiBpMTFJaWkKICB0cnkgOgogICBpZiBJaUlJID09ICd0cnVlJyA6CiAgICBwcmludCAiIyMjIEF0dGVtcHRpbmcgZG93bmxvYWQgIiArIE8wb29Pb08wICsgIiB0byAiICsgT09vMDBvT28KICAgSTExIC4gY3JlYXRlICggIldlYiBJbnN0YWxsZXIiICwgIkRvd25sb2FkaW5nICIgLCAnJyAsICdQbGVhc2UgV2FpdCcgKQogICBkb3dubG9hZGVyIC4gZG93bmxvYWQgKCBPMG9vT29PMCAsIE9PbzAwb09vICkKICAgcHJpbnQgIiMjIyBLZXl3b3JkICIgKyBJaTFJMTFJSWkxICsgIiBTdWNjZXNzZnVsbHkgZG93bmxvYWRlZCIKICAgSTExIC4gdXBkYXRlICggMCAsICIiICwgIkV4dHJhY3RpbmcgWmlwIFBsZWFzZSBXYWl0IiApCiAgIGlmIDQzIC0gNDM6IG9Pb08wbzAwT08wICogSUkxMWlJaUlJSWlJCiAgIGlmIHppcGZpbGUgLiBpc196aXBmaWxlICggT09vMDBvT28gKSA6CiAgICBpZiAxIC0gMTogbzBvbyAqIGkxMUlpaSArIE9vMDBvbzBvTyAuIG9vb09vb09PbzBPTyAvIGkxMUlpaQogICAgdHJ5IDoKICAgICBleHRyYWN0IC4gYWxsICggT09vMDBvT28gLCBPbzBvMDAwMG8wbzAgLCBJMTEgKQogICAgIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdVcGRhdGVMb2NhbEFkZG9ucycgKQogICAgIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdVcGRhdGVBZGRvblJlcG9zJyApCiAgICAgaTExIC4gb2sgKCAiS0VZV09SRCBJTlNUQUxMIiAsICIiICwgIkNvbnRlbnQgbm93IGluc3RhbGxlZCIgLCAiIiApCiAgICAgSTExIC4gY2xvc2UgKCApCiAgICAgaWYgOTEgLSA5MTogSUlJSWlpSUkxMTEgKyBvMG8gLSBpaUlJMTFpMUkxSUlpICUgSWlpIC4gb29vME8wTzAwCiAgICBleGNlcHQgOgogICAgIGkxMSAuIG9rICggIkVycm9yIHdpdGggemlwIiAsICdUaGVyZSB3YXMgYW4gZXJyb3IgdHJ5aW5nIHRvIGluc3RhbGwgdGhpcyBmaWxlLiBJdCBtYXkgcG9zc2libHkgYmUgY29ycnVwdCwgZWl0aGVyIHRyeSBhZ2FpbiBvciBjb250YWN0IHRoZSBhdXRob3Igb2YgdGhpcyBrZXl3b3JkLicgKQogICAgIHByaW50ICIjIyMgVW5hYmxlIHRvIGluc3RhbGwga2V5d29yZCAocGFzc2VkIHppcCBjaGVjayk6ICIgKyBJaTFJMTFJSWkxCiAgIGVsc2UgOgogICAgaTExIC4gb2sgKCAiS2V5d29yZCBFcnJvciIgLCAnVGhlIGtleXdvcmQgeW91IHR5cGVkIGNvdWxkIG5vdCBiZSBpbnN0YWxsZWQuIFBsZWFzZSBjaGVjayB0aGUgc3BlbGxpbmcgYW5kIGlmIHlvdSBjb250aW51ZSB0byByZWNlaXZlIHRoaXMgbWVzc2FnZSBpdCBwcm9iYWJseSBtZWFucyB0aGF0IGtleXdvcmQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS4nICkKICAgIGlmIDUxIC0gNTE6IElJMTFpSWlJSUlpSSAvIG8wbwogIGV4Y2VwdCA6CiAgIGkxMSAuIG9rICggIktleXdvcmQgRXJyb3IiICwgJ1RoZSBrZXl3b3JkIHlvdSB0eXBlZCBjb3VsZCBub3QgYmUgaW5zdGFsbGVkLiBQbGVhc2UgY2hlY2sgdGhlIHNwZWxsaW5nIGFuZCBpZiB5b3UgY29udGludWUgdG8gcmVjZWl2ZSB0aGlzIG1lc3NhZ2UgaXQgcHJvYmFibHkgbWVhbnMgdGhhdCBrZXl3b3JkIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuJyApCiAgIHByaW50ICIjIyMgVW5hYmxlIHRvIGluc3RhbGwga2V5d29yZCAodW5rbm93biBlcnJvciwgbW9zdCBsaWtlbHkgYSB0eXBvIGluIGtleXdvcmQgZW50cnkpOiAiICsgSWkxSTExSUlpMQogICBpZiA1MSAtIDUxOiBpMTFJaWkgKiBvb29Pb29PT28wT08gLSBPb09vMG8gKyBvb28wTzBPMDAKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIE9PbzAwb09vICkgOgogIG9zIC4gcmVtb3ZlICggT09vMDBvT28gKQogIGlmIDQ2IC0gNDY6IG8waWkxSSAtIGkxMWlJaWlJaWkgJSBvMG9vIC8gSUlJSWlpSUkxMTEgLSBJaWkKICBpZiA4OCAtIDg4OiBvb29Pb29PT28wT08gKiBvMDAwTzBvIC8gbzBvbyAtIElJMTFpSWlJSUlpSSAvIE8wMG9vb29vMDAgLiBPb09vMG8KZGVmIElpSUkxICggKSA6CiBvcyAuIF9leGl0ICggMSApCiBpZiAyNiAtIDI2OiBpMTFpSWlpSWlpIC0gaTExSWlpCiBpZiA0NSAtIDQ1OiBpMTFJaWkgKyBPb28wMG9PbzBvT28gJSBvb28wTzBPMDAKZGVmIG8wME9vT28wICggKSA6CiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnUmVwbGFjZVdpbmRvdyhzZXR0aW5ncyknICkKIGlmIDIyIC0gMjI6IElJaWkxSSAvIGkxMUlpaSAvIG8wMDBPMG8gLSBvMGlpMUkKIGlmIDIxIC0gMjE6IG9vb09vb09PbzBPTyAuIGkxMWlJaWlJaWkgKiBvMG8gLiBJSTExaUlpSUlJaUkgLyBJSTExaUlpSUlJaUkKZGVmIElpaTEgKCBEQiApIDoKIGlmIERCIGluIFsgJ0FkZG9ucycgLCAnQURTUCcgLCAnRXBnJyAsICdNeU11c2ljJyAsICdNeVZpZGVvcycgLCAnVGV4dHVyZXMnICwgJ1RWJyAsICdWaWV3TW9kZXMnIF0gOgogIE8wT08wTyA9IGdsb2IgLiBnbG9iICggb3MgLiBwYXRoIC4gam9pbiAoIG9PMG8wbzBvb08wb08gLCAnJXMqLmRiJyAlIERCICkgKQogIElpMTExaWkxID0gJyVzKC4rPykuZGInICUgREIgWyAxIDogXQogIE9vT28wME9vMG9vME8gPSAwCiAgZm9yIGZpbGUgaW4gTzBPTzBPIDoKICAgdHJ5IDoKICAgIGkxMUkxMTFpSUkxaTEgPSBpbnQgKCByZSAuIGNvbXBpbGUgKCBJaTExMWlpMSApIC4gZmluZGFsbCAoIGZpbGUgKSBbIDAgXSApCiAgIGV4Y2VwdCA6CiAgICBpMTFJMTExaUlJMWkxID0gMAogICBpZiBPb09vMDBPbzBvbzBPIDwgaTExSTExMWlJSTFpMSA6CiAgICBPb09vMDBPbzBvbzBPID0gaTExSTExMWlJSTFpMQogIHJldHVybiAnJXMlcy5kYicgJSAoIERCICwgT29PbzAwT28wb28wTyApCiBlbHNlIDoKICByZXR1cm4gRmFsc2UKICBpZiA3NiAtIDc2OiBpaUlJMTFpMUkxSUlpICsgSUlpaTFJICUgbzBpaTFJCiAgaWYgODIgLSA4Mjogb29vT29vT09vME9PIC8gSUlJSWlpSUkxMTEKZGVmIG9PT08gKCApIDoKIG9vb09vICggKQogaWYgNzUgLSA3NTogaTExSWlpCiBvT29vb09vMG8gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMSAsICdDb21tdW5pdHlfQnVpbGRzJyAsICdNeV9CdWlsZHMnICwgJycgKSApCiBJSUkgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMSAsICdDb21tdW5pdHlfQnVpbGRzJyAsICdNeV9CdWlsZHMnICwgJ215X2Z1bGxfYmFja3VwLnppcCcgKSApCiBJaWlJID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggSTExaTEgLCAnQ29tbXVuaXR5X0J1aWxkcycgLCAnTXlfQnVpbGRzJyAsICdteV9mdWxsX2JhY2t1cF9HVUlfU2V0dGluZ3MuemlwJyApICkKIGlmIDIzIC0gMjM6IElpaSAqIGlpSUkxMWkxSTFJSWkgJSBJSTEgLSBpMTFpSWlpSWlpCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggb09vb29PbzBvICkgOgogIG9zIC4gbWFrZWRpcnMgKCBvT29vb09vMG8gKQogIGlmIDQ2IC0gNDY6IGlpSUkxMWkxSTFJSWkKIE8wTzAgPSBvTzBvb28wMG8wbzAwME9vICggaGVhZGluZyA9ICJFbnRlciBhIG5hbWUgZm9yIHRoaXMgYmFja3VwIiApCiBpZiA5OSAtIDk5OiBvMG9vIC0gaTExSWlpICogT09PME8wTzBvb29vbyAqIG9Pb08wbzAwT08wICogSUlpaTFJIC0gSUlpaTFJCiBpZiAoIG5vdCBPME8wICkgOgogIHJldHVybiBGYWxzZSAsIDAKICBpZiA1MCAtIDUwOiBvMDAwTzBvICUgaTExaUlpaUlpaSAtIG8wMDBPMG8gKiBvb28wTzBPMDAgLyBPbzAwb28wb08gLyBPT08wTzBPMG9vb29vCiBvT0lJSUkgPSB1cmxsaWIgLiBxdW90ZV9wbHVzICggTzBPMCApCiBvb09PbyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIG9Pb29vT28wbyAsIG9PSUlJSSArICcuemlwJyApICkKIGkxaWlpMUlpaWlJMWkxID0gWyBPTzBvIF0KIElJSWlJMWkxID0gWyAieGJtYy5sb2ciICwgInhibWMub2xkLmxvZyIgLCAia29kaS5sb2ciICwgImtvZGkub2xkLmxvZyIgLCAnLkRTX1N0b3JlJyAsICcuc2V0dXBfY29tcGxldGUnICwgJ1hCTUNIZWxwZXIuY29uZicgLCAnVGh1bWJzLmRiJyAsICcuZ2l0aWdub3JlJyBdCiBJMTExaWlpaWkxID0gIkNyZWF0aW5nIGZ1bGwgYmFja3VwIG9mIGV4aXN0aW5nIGJ1aWxkIgogT09PT29PID0gIkNyZWF0aW5nIENvbW11bml0eSBCdWlsZCIKIE9PMG9vT29PTzBPT28gPSAiQXJjaGl2aW5nLi4uIgogT29vT29vb28wMDAwID0gIiIKIEkxaWkxaTExaSA9ICJQbGVhc2UgV2FpdCIKIGlmIDMxIC0gMzE6IE9vbzAwb09vMG9PbyAuIElJMSArIG8wb28gKyBvMGlpMUkgLiBvMDAwTzBvIC4gT29vMDBvT28wb09vCiBvMDBPb28wICggT28wbzAwMDBvMG8wICwgSUlJICwgSTExMWlpaWlpMSAsIE9PMG9vT29PTzBPT28gLCBPb29Pb29vbzAwMDAgLCBJMWlpMWkxMWkgLCBpMWlpaTFJaWlpSTFpMSAsIElJSWlJMWkxICkKIGkxMSAuIG9rICggJ0Z1bGwgQmFja3VwIENvbXBsZXRlJyAsICdZb3UgY2FuIGxvY2F0ZSB5b3VyIGJhY2t1cCBhdDpbQ09MT1I9ZG9kZ2VyYmx1ZV0nICwgSUlJICsgJ1svQ09MT1JdJyApCiBpZiAzIC0gMzogbzBvIC8gT29PbzBvICogT28wMG9vMG9PIC0gT09PME8wTzBvb29vbyArIG8wMDBPMG8gLyBPbzAwb28wb08KIGlmIDE5IC0gMTk6IE8wMG9vb29vMDAgJSBPb28wMG9PbzBvT28KZGVmIE8wME9PMG9PICggKSA6CiBvT28wTyA9IElJaUkxaSAoICkKIElJaTFJaUlJICggJ0xvZyBWaWV3ZXInICwgb09vME8gKQogaWYgMzAgLSAzMDogaTExaUlpaUlpaSAlIG8wb28gKiBPb28wMG9PbzBvT28gLSBPT08wTzBPMG9vb29vIC4gb09vTzBvMDBPTzAgKiBJSWlpMUkKIGlmIDQ4IC0gNDg6IG8waWkxSSArIG9Pb08wbzAwT08wIC8gb09vTzBvMDBPTzAKZGVmIG9PTzBvMG8wICggKSA6CiBpMTEgLiBvayAoICJSZXN0b3JlIGxvY2FsIGd1aXNldHRpbmdzIGZpeCIgLCAiWW91IHNob3VsZCBbQ09MT1I9bGltZV1PTkxZWy9DT0xPUl0gdXNlIHRoaXMgb3B0aW9uIGlmIHRoZSBndWlzZXR0aW5ncyBmaXggaXMgZmFpbGluZyB0byBkb3dubG9hZCB2aWEgdGhlIGFkZG9uLiBJbnN0YWxsaW5nIHZpYSB0aGlzIG1ldGhvZCBtZWFucyB5b3UgZG8gbm90IHJlY2VpdmUgbm90aWZpY2F0aW9ucyBvZiB1cGRhdGVzIiApCiBPb09vMDBvT29vMG9PICggKQogaWYgMzUgLSAzNTogT29PbzBvIC0gTzAwb29vb28wMCAvIE9vMDBvbzBvTwogaWYgMTMgLSAxMzogSWlpIC0gbzBvbyAqIElJMQpkZWYgaUlpMWkxMTFpaTFJSTExaWkgKCBtb2RlICkgOgogTzBPMCA9IG9PMG9vbzAwbzBvMDAwT28gKCBoZWFkaW5nID0gIlNlYXJjaCBmb3IgY29udGVudCIgKQogaWYgKCBub3QgTzBPMCApIDoKICByZXR1cm4gRmFsc2UgLCAwCiBvT0lJSUkgPSB1cmxsaWIgLiBxdW90ZV9wbHVzICggTzBPMCApCiBPTzBvT28gKCBtb2RlICsgJyZuYW1lPScgKyBvT0lJSUkgKQogaWYgMjEgLSAyMTogbzBvCiBpZiA3OSAtIDc5OiBvMG9vIC8gSUkxMWlJaUlJSWlJIC0gTzAwb29vb28wMCArIE8wMG9vb29vMDAgLSBPbzAwb28wb08gKyBPbzAwb28wb08KZGVmIG9vb28gKCBzcmMgLCBkc3QgLCBjbGVhbiApIDoKIGZvciBvT29PbzAwME9vb29vICwgT29JSWkxaUkgLCBvTzBPb28wT29vT09vIGluIG9zIC4gd2FsayAoIHNyYyApIDoKICBJMWlJaWlpID0gb09vT28wMDBPb29vbyAuIHJlcGxhY2UgKCBzcmMgLCBkc3QgLCAxICkKICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggSTFpSWlpaSApIDoKICAgb3MgLiBtYWtlZGlycyAoIEkxaUlpaWkgKQogIGZvciBPb09PbzBPTzBPT29vIGluIG9PME9vbzBPb29PT28gOgogICBpMUlpMSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvT29PbzAwME9vb29vICwgT29PT28wT08wT09vbyApCiAgIElpMTExT08wbzBvME9Pb29vbyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJMWlJaWlpICwgT29PT28wT08wT09vbyApCiAgIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIElpMTExT08wbzBvME9Pb29vbyApIDoKICAgIG9zIC4gcmVtb3ZlICggSWkxMTFPTzBvMG8wT09vb29vICkKICAgc2h1dGlsIC4gbW92ZSAoIGkxSWkxICwgSTFpSWlpaSApCiBpZiBjbGVhbiA9PSAxIDoKICB0cnkgOgogICBzaHV0aWwgLiBybXRyZWUgKCBzcmMgKQogIGV4Y2VwdCA6CiAgIHBhc3MKICAgaWYgNzcgLSA3Nzogb09vTzBvMDBPTzAgJSBvb29Pb29PT28wT08KICAgaWYgNjcgLSA2NzogaWlJSTExaTFJMUlJaSAtIG9vb09vb09PbzBPTyArIG8wMDBPMG8gKiBpaUlJMTFpMUkxSUlpICogbzBpaTFJICUgSWlpCmRlZiBPb29PbzAwMG8wbyAoIHRpdGxlICwgbGlzdCAsIGltYWdlcyAsIGRlc2NyaXB0aW9uICkgOgogZ2xvYmFsIHBvcwogZ2xvYmFsIGxpc3RpY29uCiBjbGFzcyBJaTFpMWlJMWkxICggcHl4Ym1jdCAuIEFkZG9uRGlhbG9nV2luZG93ICkgOgogIGRlZiBfX2luaXRfXyAoIHNlbGYgLCB0aXRsZSA9ICIiICwgaXRlbXMgPSBOb25lICwgaW1hZ2VzID0gTm9uZSAsIGRlc2NyaXB0aW9uID0gTm9uZSApIDoKICAgc3VwZXIgKCBJaTFpMWlJMWkxICwgc2VsZiApIC4gX19pbml0X18gKCB0aXRsZSApCiAgIHNlbGYgLiBzZXRHZW9tZXRyeSAoIDExMDAgLCA3MDAgLCAyMCAsIDIwICkKICAgc2VsZiAuIHNlbGVjdGVkID0gWyBdCiAgIHNlbGYgLiBzZXRfY29udHJvbHMgKCApCiAgIHNlbGYgLiBjb25uZWN0X2NvbnRyb2xzICggKQogICBzZWxmIC4gbGlzdGluZyAuIGFkZEl0ZW1zICggaXRlbXMgb3IgWyBdICkKICAgc2VsZiAuIHNldF9uYXZpZ2F0aW9uICggKQogICBzZWxmIC4gY29ubmVjdCAoIG9PMCAsIHNlbGYgLiB1cGRhdGVfbGlzdCApCiAgIHNlbGYgLiBjb25uZWN0ICggSWkxaUlpSUkxaWkxICwgc2VsZiAuIHVwZGF0ZV9saXN0ICkKICAgaWYgOTggLSA5ODogbzBvIC4gT09PME8wTzBvb29vbyAvIE9vbzAwb09vMG9PbwogIGRlZiBzZXRfY29udHJvbHMgKCBzZWxmICkgOgogICBvTzAwbzBPb29PMDBvID0gcHl4Ym1jdCAuIEltYWdlICggTzBvME8wME9vMG8wICwgYXNwZWN0UmF0aW8gPSAwICkKICAgb08wMG8wT29vTzAwbyAuIHNldEltYWdlICggTzBvME8wME9vMG8wICkKICAgc2VsZiAuIGxpc3RpbmcgPSBweXhibWN0IC4gTGlzdCAoIF9pbWFnZVdpZHRoID0gMTUgKQogICBzZWxmIC4gcGxhY2VDb250cm9sICggb08wMG8wT29vTzAwbyAsIDAgLCAwICwgcm93c3BhbiA9IDIwICwgY29sdW1uc3BhbiA9IDIwICkKICAgaTExMSA9IHB5eGJtY3QgLiBJbWFnZSAoIGltYWdlcyBbIDAgXSAsIGFzcGVjdFJhdGlvID0gMiApCiAgIGkxMTEgLiBzZXRJbWFnZSAoIGltYWdlcyBbIDAgXSApCiAgIHNlbGYgLiBwbGFjZUNvbnRyb2wgKCBpMTExICwgMCAsIDExICwgcm93c3BhbiA9IDggLCBjb2x1bW5zcGFuID0gOCAsIHBhZF94ID0gMTAgLCBwYWRfeSA9IDEwICkKICAgc2VsZiAuIHRleHRib3ggPSBweXhibWN0IC4gVGV4dEJveCAoICkKICAgc2VsZiAuIHBsYWNlQ29udHJvbCAoIHNlbGYgLiB0ZXh0Ym94ICwgOCAsIDExICwgcm93c3BhbiA9IDkgLCBjb2x1bW5zcGFuID0gOSAsIHBhZF94ID0gMTAgLCBwYWRfeSA9IDEwICkKICAgc2VsZiAuIHRleHRib3ggLiBzZXRUZXh0ICggZGVzY3JpcHRpb24gWyAwIF0gKQogICBzZWxmIC4gdGV4dGJveCAuIGF1dG9TY3JvbGwgKCA1MDAwICwgMjAwMCAsIDgwMDAgKQogICBzZWxmIC4gb2tfYnV0dG9uID0gcHl4Ym1jdCAuIEJ1dHRvbiAoICJPSyIgKQogICBzZWxmIC4gcGxhY2VDb250cm9sICggc2VsZiAuIG9rX2J1dHRvbiAsIDE3ICwgMTMgLCBwYWRfeCA9IDEwICwgcGFkX3kgPSAxMCAsIHJvd3NwYW4gPSAyICwgY29sdW1uc3BhbiA9IDMgKQogICBzZWxmIC4gY2FuY2VsX2J1dHRvbiA9IHB5eGJtY3QgLiBCdXR0b24gKCAiQ2FuY2VsIiApCiAgIHNlbGYgLiBwbGFjZUNvbnRyb2wgKCBzZWxmIC4gY2FuY2VsX2J1dHRvbiAsIDE3ICwgMTYgLCBwYWRfeCA9IDEwICwgcGFkX3kgPSAxMCAsIHJvd3NwYW4gPSAyICwgY29sdW1uc3BhbiA9IDMgKQogICBzZWxmIC4gcGxhY2VDb250cm9sICggc2VsZiAuIGxpc3RpbmcgLCAwICwgMCAsIHJvd3NwYW4gPSAyMCAsIGNvbHVtbnNwYW4gPSAxMCAsIHBhZF95ID0gMTAgKQogICBpZiA0OSAtIDQ5OiBPbzAwb28wb08gJSBvMGlpMUkgLiBvT29PMG8wME9PMCAvIElJMTFpSWlJSUlpSSAuIElJSUlpaUlJMTExICogb09vTzBvMDBPTzAKICBkZWYgY29ubmVjdF9jb250cm9scyAoIHNlbGYgKSA6CiAgIHNlbGYgLiBjb25uZWN0ICggc2VsZiAuIGxpc3RpbmcgLCBzZWxmIC4gY2hlY2tfdW5jaGVjayApCiAgIHNlbGYgLiBjb25uZWN0ICggc2VsZiAuIG9rX2J1dHRvbiAsIHNlbGYgLiBvayApCiAgIHNlbGYgLiBjb25uZWN0ICggc2VsZiAuIGNhbmNlbF9idXR0b24gLCBzZWxmIC4gY2xvc2UgKQogICBpZiAxNyAtIDE3OiBvT29PMG8wME9PMCAqIElJMSAlIE8wMG9vb29vMDAgJSBJSTEgLiBvb28wTzBPMDAKICBkZWYgc2V0X25hdmlnYXRpb24gKCBzZWxmICkgOgogICBzZWxmIC4gbGlzdGluZyAuIGNvbnRyb2xMZWZ0ICggc2VsZiAuIG9rX2J1dHRvbiApCiAgIHNlbGYgLiBsaXN0aW5nIC4gY29udHJvbFJpZ2h0ICggc2VsZiAuIG9rX2J1dHRvbiApCiAgIHNlbGYgLiBva19idXR0b24gLiBzZXROYXZpZ2F0aW9uICggc2VsZiAuIGxpc3RpbmcgLCBzZWxmIC4gbGlzdGluZyAsIHNlbGYgLiBjYW5jZWxfYnV0dG9uICwgc2VsZiAuIGNhbmNlbF9idXR0b24gKQogICBzZWxmIC4gY2FuY2VsX2J1dHRvbiAuIHNldE5hdmlnYXRpb24gKCBzZWxmIC4gbGlzdGluZyAsIHNlbGYgLiBsaXN0aW5nICwgc2VsZiAuIG9rX2J1dHRvbiAsIHNlbGYgLiBva19idXR0b24gKQogICBpZiBzZWxmIC4gbGlzdGluZyAuIHNpemUgKCApIDoKICAgIHNlbGYgLiBzZXRGb2N1cyAoIHNlbGYgLiBsaXN0aW5nICkKICAgZWxzZSA6CiAgICBzZWxmIC4gc2V0Rm9jdXMgKCBzZWxmIC4gY2FuY2VsX2J1dHRvbiApCiAgICBpZiAyMCAtIDIwOiBvMG9vIC4gb29vT29vT09vME9PCiAgZGVmIHVwZGF0ZV9saXN0ICggc2VsZiApIDoKICAgSUkxMTFJMTFpSSA9IHB5eGJtY3QgLiBJbWFnZSAoIE8wME8wb09PMDBPMDAgLCBhc3BlY3RSYXRpbyA9IDAgKQogICBJSTExMUkxMWlJIC4gc2V0SW1hZ2UgKCBPMDBPMG9PTzAwTzAwICkKICAgc2VsZiAuIHBsYWNlQ29udHJvbCAoIElJMTExSTExaUkgLCAwICwgMTEgLCByb3dzcGFuID0gOCAsIGNvbHVtbnNwYW4gPSA4ICwgcGFkX3ggPSAxMCAsIHBhZF95ID0gMTAgKQogICBpMUlpID0gc2VsZiAuIGxpc3RpbmcgLiBnZXRTZWxlY3RlZFBvc2l0aW9uICggKQogICBpSTFpMTEgPSBpbWFnZXMgWyBpMUlpIF0KICAgaTExMSA9IHB5eGJtY3QgLiBJbWFnZSAoIGlJMWkxMSAsIGFzcGVjdFJhdGlvID0gMiApCiAgIGkxMTEgLiBzZXRJbWFnZSAoIGlJMWkxMSApCiAgIHNlbGYgLiBwbGFjZUNvbnRyb2wgKCBpMTExICwgMCAsIDExICwgcm93c3BhbiA9IDggLCBjb2x1bW5zcGFuID0gOCAsIHBhZF94ID0gMTAgLCBwYWRfeSA9IDEwICkKICAgc2VsZiAuIHRleHRib3ggLiBzZXRUZXh0ICggZGVzY3JpcHRpb24gWyBpMUlpIF0gKQogICBpZiA4OSAtIDg5OiBvT29PMG8wME9PMCAqIG9Pb08wbzAwT08wICogSWlpIC8gb29vME8wTzAwCiAgZGVmIGNoZWNrX3VuY2hlY2sgKCBzZWxmICkgOgogICBPT28waTExMWlpMUlpID0gc2VsZiAuIGxpc3RpbmcgLiBnZXRTZWxlY3RlZEl0ZW0gKCApCiAgIGlmIE9PbzBpMTExaWkxSWkgLiBnZXRMYWJlbDIgKCApID09ICJjaGVja2VkIiA6CiAgICBPT28waTExMWlpMUlpIC4gc2V0SWNvbkltYWdlICggIiIgKQogICAgT09vMGkxMTFpaTFJaSAuIHNldExhYmVsMiAoICJ1bmNoZWNrZWQiICkKICAgZWxzZSA6CiAgICBPT28waTExMWlpMUlpIC4gc2V0SWNvbkltYWdlICggT28wT29PMDBvT08wbyApCiAgICBPT28waTExMWlpMUlpIC4gc2V0TGFiZWwyICggImNoZWNrZWQiICkKICAgIGlmIDU5IC0gNTk6IE9PTzBPME8wb29vb28gLiBvMGlpMUkgJSBvT29PMG8wME9PMCAqIG9vb09vb09PbzBPTyArIG8wbwogIGRlZiBvayAoIHNlbGYgKSA6CiAgIHNlbGYgLiBzZWxlY3RlZCA9IFsgbzAwb0lpSWlJaWlJIGZvciBvMDBvSWlJaUlpaUkgaW4geHJhbmdlICggc2VsZiAuIGxpc3RpbmcgLiBzaXplICggKSApCiBpZiBzZWxmIC4gbGlzdGluZyAuIGdldExpc3RJdGVtICggbzAwb0lpSWlJaWlJICkgLiBnZXRMYWJlbDIgKCApID09ICJjaGVja2VkIiBdCiAgIHN1cGVyICggSWkxaTFpSTFpMSAsIHNlbGYgKSAuIGNsb3NlICggKQogICBpZiA4MyAtIDgzOiBJaWkKICBkZWYgY2xvc2UgKCBzZWxmICkgOgogICBzZWxmIC4gc2VsZWN0ZWQgPSBbIF0KICAgc3VwZXIgKCBJaTFpMWlJMWkxICwgc2VsZiApIC4gY2xvc2UgKCApCiAgIGlmIDg0IC0gODQ6IElJSUlpaUlJMTExCiBpMTEgPSBJaTFpMWlJMWkxICggdGl0bGUgLCBsaXN0ICwgaW1hZ2VzICwgZGVzY3JpcHRpb24gKQogaTExIC4gZG9Nb2RhbCAoICkKIHJldHVybiBpMTEgLiBzZWxlY3RlZAogZGVsIGkxMQogaWYgNzAgLSA3MDogSUlpaTFJCiBpZiA0NSAtIDQ1OiBPT08wTzBPMG9vb29vIC0gSWlpICUgSUkxMWlJaUlJSWlJCmRlZiBvb0kxICggKSA6CiBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPWRvZGdlcmJsdWVdSG93IHRvIGluc3RhbGwga2V5d29yZHNbL0NPTE9SXScgLCAnJyAsICdpbnN0cnVjdGlvbnNfMycgLCAnbWFpbm1lbnUva2V5d29yZC5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1Ib3cgdG8gY3JlYXRlIGtleXdvcmRzWy9DT0xPUl0nICwgJycgLCAnaW5zdHJ1Y3Rpb25zXzQnICwgJ21haW5tZW51L2tleXdvcmQucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPWdvbGRdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bL0NPTE9SXScgLCAnJyAsICcnICwgJ21haW5tZW51L2tleXdvcmQucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnSW5zdGFsbCBLZXl3b3JkcycgLCAnaHR0cDovL3VybHNob3J0Ym90LmNvbS9ub29icycgLCAna2V5d29yZHMnICwgJ21haW5tZW51L2tleXdvcmQucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnQ3JlYXRlIEtleXdvcmRzJyAsICdjcmVhdGVfcGFjaycgLCAnY3JlYXRlX2tleXdvcmQnICwgJ21haW5tZW51L2tleXdvcmQucG5nJyAsICcnICwgJycgLCAnJyApCiBpZiA0IC0gNDogb29vME8wTzAwICUgb09vTzBvMDBPTzAKIGlmIDkgLSA5OiBPT08wTzBPMG9vb29vICogSUlJSWlpSUkxMTEKZGVmIG8wTzAwbzAwT29vICggdGl0bGUgLCBtZXNzYWdlICwgdGltZXMgPSAyMDAwICwgaWNvbiA9IE9Pb29PME9Pb28gKSA6CiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnWEJNQy5Ob3RpZmljYXRpb24oJXMsICVzLCAlcywgJXMpJyAlICggdGl0bGUgLCBtZXNzYWdlICwgdGltZXMgLCBpY29uICkgKQogaWYgMTYgLSAxNjogSUkxMWlJaUlJSWlJIC4gT29vMDBvT28wb09vIC0gSUlJSWlpSUkxMTEgLSBJSTEKIGlmIDgzIC0gODM6IGkxMWlJaWlJaWkgLSBpaUlJMTFpMUkxSUlpCmRlZiBpSWlJSUkgKCApIDoKIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdBY3RpdmF0ZVdpbmRvdyhmaWxlbWFuYWdlcixyZXR1cm4pJyApCiByZXR1cm4KIGlmIDUyIC0gNTI6IG9Pb08wbzAwT08wICsgSUlpaTFJIC8gTzAwb29vb28wMCAvIG8wMDBPMG8KIGlmIDY3IC0gNjc6IElJSUlpaUlJMTExICUgaTExaUlpaUlpaSArIG8wbwpkZWYgb08wT09PICggKSA6CiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnQWN0aXZhdGVXaW5kb3coc3lzdGVtaW5mbyknICkKIGlmIDY0IC0gNjQ6IElJMSAqIE9vbzAwb09vMG9PbyAuIElJaWkxSSAuIG9vbzBPME8wMCArIG9Pb08wbzAwT08wIC4gbzBpaTFJCiBpZiAxIC0gMTogT28wMG9vMG9PIC8gT29PbzBvIC8gT29PbzBvICsgbzBpaTFJCmRlZiBvT09PT29PTzBvICggdXJsICwgdCApIDoKIElpaWlpMUlpID0gdXJsbGliMiAuIFJlcXVlc3QgKCB1cmwgKQogSWlpaWkxSWkgLiBhZGRfaGVhZGVyICggJ1VzZXItQWdlbnQnICwgJ01vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDEwLjA7IFdPVzY0OyBXaW5kb3dzIE5UIDUuMTsgZW4tR0I7IHJ2OjEuOS4wLjMpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS80NS4wLjI0NTQuODUgU2FmYXJpLzUzNy4zNiBHZWNrby8yMDA4MDkyNDE3IEZpcmVmb3gvMy4wLjMnICkKIGlmIDE4IC0gMTg6IG8wbyAlIElJMSArIG8wb28gLyBvMG8KIElJaUkxb08gPSAwCiBPTzBPb29PbyA9IEZhbHNlCiB3aGlsZSBJSWlJMW9PIDwgNSBhbmQgT08wT29vT28gPT0gRmFsc2UgOgogIG8wMDBvME8wT28wMCA9IHVybGxpYjIgLiB1cmxvcGVuICggSWlpaWkxSWkgLCB0aW1lb3V0ID0gdCApCiAgSWkxaUkxMTFJSTFJMSA9IG8wMDBvME8wT28wMCAuIHJlYWQgKCApCiAgbzAwMG8wTzBPbzAwIC4gY2xvc2UgKCApCiAgSUlpSTFvTyArPSAxCiAgaWYgSWkxaUkxMTFJSTFJMSAhPSAnJyA6CiAgIE9PME9vb09vID0gVHJ1ZQogaWYgT08wT29vT28gPT0gVHJ1ZSA6CiAgcmV0dXJuIElpMWlJMTExSUkxSTEgLiByZXBsYWNlICggJ1xyJyAsICcnICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1x0JyAsICcnICkKIGVsc2UgOgogIGkxMSAuIG9rICggJ1VuYWJsZSB0byBjb250YWN0IHNlcnZlcicgLCAnVGhlcmUgd2FzIGEgcHJvYmxlbSB0cnlpbmcgdG8gYWNjZXNzIHRoZSBzZXJ2ZXIsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJyApCiAgcmV0dXJuCiAgaWYgMzcgLSAzNzogTzAwb29vb28wMCAtIElJSUlpaUlJMTExIC8gT28wMG9vMG9PIC4gT29vMDBvT28wb09vICUgaTExSWlpCiAgaWYgMzkgLSAzOTogSUlJSWlpSUkxMTEgJSBpMTFpSWlpSWlpICogbzBvbwpkZWYgSTFpMTFpICggKSA6CiBpbXBvcnQgdGFyZmlsZQogaWYgOSAtIDk6IE9vbzAwb09vMG9PbyArIG9Pb08wbzAwT08wIC8gb29vME8wTzAwCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggTzAwMG9vME8gKSA6CiAgb3MgLiBtYWtlZGlycyAoIE8wMDBvbzBPICkKICBpZiA1MSAtIDUxOiBvMG8gJSBvT29PMG8wME9PMCArIElJMSAtIG8wMDBPMG8gKiBJaWkgKiBvb28wTzBPMDAKIEkxMSAuIGNyZWF0ZSAoICJDcmVhdGluZyBCYWNrdXAiICwgIkFkZGluZyBmaWxlcy4uLiAiICwgJycgLCAnUGxlYXNlIFdhaXQnICkKIEkxSTFpMSA9IHRhcmZpbGUgLiBvcGVuICggb3MgLiBwYXRoIC4gam9pbiAoIE8wMDBvbzBPICwgSWkxSWkgKCApICsgJy50YXInICkgLCAndycgKQogaWYgMTUgLSAxNTogT09PME8wTzBvb29vbwogZm9yIE8wT09vT09vb08gaW4gb29Pb29vMDAwb09PIDoKICBJMTEgLiB1cGRhdGUgKCAwICwgIkJhY2tpbmcgVXAiICwgJ1tDT0xPUiBibHVlXSVzWy9DT0xPUl0nICUgTzBPT29PT29vTyAsICdQbGVhc2UgV2FpdCcgKQogIEkxSTFpMSAuIGFkZCAoIE8wT09vT09vb08gKQogIGlmIDMzIC0gMzM6IE9vMDBvbzBvTyAqIG8wbwogSTFJMWkxIC4gY2xvc2UgKCApCiBJMTEgLiBjbG9zZSAoICkKIGlmIDk2IC0gOTY6IG8waWkxSSAtIG8wMDBPMG8gJSBJaWkgKyBvMG9vIC0gT28wMG9vMG9PIC0gT28wMG9vMG9PCiBpZiAyIC0gMjogaTExSWlpICUgaTExaUlpaUlpaQpkZWYgaTFpSUlpMTFpMTExSSAoICkgOgogb09vME8gPSBJSWlJMWkgKCApCiBpZiAnUnVubmluZyBvbiBPcGVuRUxFQycgaW4gb09vME8gb3IgJ1J1bm5pbmcgb24gTGlicmVFTEVDJyBpbiBvT28wTyA6CiAgcmV0dXJuIFRydWUKICBpZiAxMSAtIDExOiBJSWlpMUkgLiBPb09vMG8gLSBpaUlJMTFpMUkxSUlpIC8gbzBvICsgT29vMDBvT28wb09vCiAgaWYgMjkgLSAyOTogbzBvIC4gaTExaUlpaUlpaSArIE8wMG9vb29vMDAgLSBJSUlJaWlJSTExMSArIE9PTzBPME8wb29vb28gLiBvMDAwTzBvCmRlZiBpMWlJaUlJMSAoICkgOgogdHJ5IDoKICB4Ym1jYWRkb24gLiBBZGRvbiAoIGlkID0gJ3NlcnZpY2Uub3BlbmVsZWMuc2V0dGluZ3MnICkgLiBnZXRBZGRvbkluZm8gKCAnbmFtZScgKQogIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdBY3RpdmF0ZVdpbmRvdygxMDAyNSxwbHVnaW46Ly9zZXJ2aWNlLm9wZW5lbGVjLnNldHRpbmdzLHJldHVybiknICkKIGV4Y2VwdCA6CiAgeGJtY2FkZG9uIC4gQWRkb24gKCBpZCA9ICdzZXJ2aWNlLmxpYnJlZWxlYy5zZXR0aW5ncycgKSAuIGdldEFkZG9uSW5mbyAoICduYW1lJyApCiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ0FjdGl2YXRlV2luZG93KDEwMDI1LHBsdWdpbjovL3NlcnZpY2UubGlicmVlbGVjLnNldHRpbmdzLHJldHVybiknICkKICBpZiA1OSAtIDU5OiBJSTEgKyBPb09vMG8gJSBvMGlpMUkgLSBJaWkgLiBvMDAwTzBvCiAgaWYgNDIgLSA0MjogT29PbzBvCmRlZiBPT08wME9PT08wbyAoIHhtbGZpbGUgKSA6CiBpZiA3MCAtIDcwOiBJSWlpMUkKIGlmICdodHRwJyBpbiB4bWxmaWxlIDoKICBvb09PMG8gPSAnbm9uZScKICBvT29vbzBPID0geG1sZmlsZSBbIC0gMTAgOiBdCiAgb09vb28wTyA9IG9Pb29vME8gWyA6IC0gNCBdCiAgT09PMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsIE9PMG8gLCAnbGF0ZXN0JyApCiAgaWYgNDMgLSA0Mzogb29vT29vT09vME9PICogb29vME8wTzAwICogaTExSWlpIC8gSUlpaTFJCiAgaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggT09PMCApIDoKICAgbzBvME8wTzAwb09PbyA9IG9wZW4gKCBPT08wICwgbW9kZSA9ICdyJyApCiAgIG9vT08wbyA9IG8wbzBPME8wMG9PT28gLiByZWFkICggKQogICBvMG8wTzBPMDBvT09vIC4gY2xvc2UgKCApCiAgIGlmIDMxIC0gMzE6IGkxMUlpaSAlIG8wMDBPMG8gJSBPbzAwb28wb08gLyBPb09vMG8KICBpZiBvb09PMG8gPT0gb09vb28wTyA6CiAgIG9Pb29vME8gPSBvb09PMG8KICAgaWYgNzQgLSA3NDogTzAwb29vb28wMCArIG9vb09vb09PbzBPTyAtIElJaWkxSSAuIGlpSUkxMWkxSTFJSWkKICBlbHNlIDoKICAgSTExIC4gY3JlYXRlICggJ0dyYWJiaW5nIExhdGVzdCBVcGRhdGVzJyAsICcnICwgJycgLCAnJyApCiAgIGRvd25sb2FkZXIgLiBkb3dubG9hZCAoIHhtbGZpbGUgLCBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgT08wbyAsICdyZXNvdXJjZXMnICwgJ3NraW5zJyAsICdEZWZhdWx0U2tpbicgLCAnbWVkaWEnICwgJ2xhdGVzdC5qcGcnICkgKQogICBvbzBPMCA9IG9wZW4gKCBPT08wICwgbW9kZSA9ICd3KycgKQogICBvbzBPMCAuIHdyaXRlICggb09vb28wTyApCiAgIG9vME8wIC4gY2xvc2UgKCApCiAgeG1sZmlsZSA9ICdsYXRlc3QueG1sJwogb08wT29vTzAwT28gPSBJSUlJaTFpICggeG1sZmlsZSAsIEkxSWlpSSAuIGdldEFkZG9uSW5mbyAoICdwYXRoJyApICwgJ0RlZmF1bHRTa2luJyAsIGNsb3NlX3RpbWUgPSAzNCApCiBvTzBPb29PMDBPbyAuIGRvTW9kYWwgKCApCiBkZWwgb08wT29vTzAwT28KIGlmIDgxIC0gODE6IG9Pb08wbzAwT08wIC0gbzBvbyAqIG9vb09vb09PbzBPTwogaWYgODEgLSA4MTogb29vME8wTzAwIC0gSUlJSWlpSUkxMTEgLSBJSTExaUlpSUlJaUkgJSBPbzAwb28wb08gJSBvMGlpMUkgLiBJSWlpMUkKZGVmIElJaWlJSWkxICggcmVjdXJzaXZlX2xvY2F0aW9uICwgcmVtb3RlX3BhdGggKSA6CiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggcmVjdXJzaXZlX2xvY2F0aW9uICkgOgogIG9zIC4gbWFrZWRpcnMgKCByZWN1cnNpdmVfbG9jYXRpb24gKQogIGlmIDc5IC0gNzk6IG9Pb08wbzAwT08wIC0gb09vTzBvMDBPTzAgLiBJSUlJaWlJSTExMSAvIE9vMDBvbzBvTwogSWkxaUkxMTFJSTFJMSA9IG9PT09Pb09PMG8gKCByZW1vdGVfcGF0aCAsIDEwICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1xyJyAsICcnICkKIE8wT08wTyA9IHJlIC4gY29tcGlsZSAoICdocmVmPSIoLis/KSInICwgcmUgLiBET1RBTEwgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIGlmIDU3IC0gNTc6IGkxMUlpaSAqIElJaWkxSSAqIG9vbzBPME8wMCAqIElJSUlpaUlJMTExIC8gSUlJSWlpSUkxMTEKIGZvciBJaTEgaW4gTzBPTzBPIDoKICBvb28wb29PID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggcmVjdXJzaXZlX2xvY2F0aW9uICwgSWkxICkgKQogIGlmIDQzIC0gNDM6IE9PTzBPME8wb29vb28gKiBpMTFpSWlpSWlpIC0gSUkxIC0gb29vT29vT09vME9PCiAgaWYgJy8nIG5vdCBpbiBJaTEgOgogICBpZiA0NiAtIDQ2OiBvb29Pb29PT28wT08gKiBPMDBvb29vbzAwIC8gb09vTzBvMDBPTzAKICAgdHJ5IDoKICAgIEkxMSAuIHVwZGF0ZSAoIDAgLCAiRG93bmxvYWRpbmcgW0NPTE9SPXllbGxvd10iICsgSWkxICsgJ1svQ09MT1JdJyAsICcnICwgJ1BsZWFzZSB3YWl0Li4uJyApCiAgICBkb3dubG9hZGVyIC4gZG93bmxvYWQgKCByZW1vdGVfcGF0aCArIElpMSAsIG9vbzBvb08gLCBJMTEgKQogICAgaWYgMTAwIC0gMTAwOiBvMDAwTzBvIC0gSUkxMWlJaUlJSWlJCiAgIGV4Y2VwdCA6CiAgICBwcmludCAiZmFpbGVkIHRvIGluc3RhbGwiICsgSWkxCiAgICBpZiA5MSAtIDkxOiBvMGlpMUkgKiBvT29PMG8wME9PMCAtIG9vbzBPME8wMCAuIE9vbzAwb09vMG9PbwogIGlmICcvJyBpbiBJaTEgYW5kICcuLicgbm90IGluIElpMSBhbmQgJ2h0dHAnIG5vdCBpbiBJaTEgOgogICBpSTExSUkgPSByZW1vdGVfcGF0aCArIElpMQogICBJSWlpSUlpMSAoIG9vbzBvb08gLCBpSTExSUkgKQogICBpZiAzIC0gMzogbzBvbyAlIG8waWkxSSAlIElJMTFpSWlJSUlpSSAuIG9Pb08wbzAwT08wIC4gb09vTzBvMDBPTzAKICBlbHNlIDoKICAgcGFzcwogICBpZiAzNSAtIDM1OiBPMDBvb29vbzAwICogb29vME8wTzAwIC0gb29vME8wTzAwIC4gT28wMG9vMG9PCiAgIGlmIDc3IC0gNzc6IG8wMDBPMG8gLyBJSWlpMUkgKiBJSUlJaWlJSTExMSAqIElJaWkxSSArIG9Pb08wbzAwT08wCmRlZiBPMDAwbyAoICkgOgogaTExIC4gb2sgKCAiUmVnaXN0ZXIgdG8gdW5sb2NrIGZlYXR1cmVzIiAsICJUbyBnZXQgdGhlIG1vc3Qgb3V0IG9mIHRoaXMgYWRkb24gcGxlYXNlIHJlZ2lzdGVyIGF0IHRoZSBOT09CU0FORE5FUkRTIGZvcnVtIGZvciBmcmVlLiIgLCAnV1dXLk5PT0JTQU5ETkVSRFMuQ09NL1NVUFBPUlQnICkKIGlmIDc2IC0gNzY6IElJMTFpSWlJSUlpSQogaWYgNTIgLSA1MjogaWlJSTExaTFJMUlJaSAqIElJaWkxSSAqIGlpSUkxMWkxSTFJSWkgKiBPMDBvb29vbzAwCmRlZiBpMTFpMUlpSWkgKCApIDoKIG9PMDAwbzBPbzAwID0gaTExIC4geWVzbm8gKCAnREVMRVRFIEFERC1PTiBEQVRBJyAsICdEbyB5b3Ugd2FudCB0byByZW1vdmUgaW5kaXZpZHVhbCBhZGRvbl9kYXRhIGZvbGRlcnMgb3Igd2lwZSBhbGwgYWRkb25fZGF0YT8nICwgeWVzbGFiZWwgPSAnRVZFUllUSElORycgLCBub2xhYmVsID0gJ0lORElWSURVQUwgSVRFTVMnICkKIGlmIDYzIC0gNjM6IG8wbwogaWYgb08wMDBvME9vMDAgOgogIG9PMDAwbzBPbzAwID0gaTExIC4geWVzbm8gKCAnQXJlIHlvdSBBQlNPTFVURUxZIGNlcnRhaW4/JyAsICdUaGlzIHdpbGwgcmVtb3ZlIEFMTCB5b3VyIGFkZG9uX2RhdGEsIHRoZXJlXCdzIG5vIGdldHRpbmcgaXQgYmFjayEgQXJlIHlvdSBjZXJ0YWluIHlvdSB3YW50IHRvIGNvbnRpbnVlPycgKQogIGlmIG9PMDAwbzBPbzAwIDoKICAgSTFJaTExaTFpaTFpICggKQogICBpMTEgLiBvayAoICJBZGRvbl9EYXRhIFJlbW92ZWQiICwgJycgLCAnWW91ciBhZGRvbl9kYXRhIGZvbGRlciBoYXMgbm93IGJlZW4gcmVtb3ZlZC4nICwgJycgKQogZWxzZSA6CiAgT08wMDBvT29vME8gPSBbIF0KICBpSUlpaWkxMWlJaWlJID0gWyBdCiAgTzBPbzAgPSBbIF0KICBvMG9PMG9vMDAwME9PID0gWyBdCiAgSTFpMWlpMUlpSWlpID0gWyBdCiAgaWYgNiAtIDY6IG9vb09vb09PbzBPTyAvIG9Pb08wbzAwT08wIC8gbzBvbwogIGZvciBmaWxlIGluIG9zIC4gbGlzdGRpciAoIG9vMG8wTzAwICkgOgogICBpZiBvcyAuIHBhdGggLiBpc2RpciAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsIGZpbGUgKSApIDoKICAgIHRyeSA6CiAgICAgaTFJSUkgPSB4Ym1jYWRkb24gLiBBZGRvbiAoIGZpbGUgKQogICAgIE9PbzAgPSBpMUlJSSAuIGdldEFkZG9uSW5mbyAoICduYW1lJyApCiAgICAgbzAwb09Pb08wb08gPSBpMUlJSSAuIGdldEFkZG9uSW5mbyAoICdpY29uJyApCiAgICAgT09PMG9Pb08wTyA9IGkxSUlJIC4gZ2V0QWRkb25JbmZvICggJ2Rlc2NyaXB0aW9uJyApCiAgICBleGNlcHQgOgogICAgIE9PbzAgPSAnVW5rbm93biBBZGQtb24nCiAgICAgbzAwb09Pb08wb08gPSBPT29PTzBvbzBvb08KICAgICBPT08wb09vTzBPID0gJ05vIGFkZC1vbiBoYXMgYmVlbiBmb3VuZCBvbiB5b3VyIHN5c3RlbSB0aGF0IG1hdGNoZXMgdGhpcyBJRC4gVGhlIG1vc3QgbGlrZWx5IHNjZW5hcmlvIGZvciB0aGlzIGlzIHlvdVwndmUgcHJldmlvdXNseSB1bmluc3RhbGxlZCB0aGlzIGFkZC1vbiBhbmQgbGVmdCB0aGUgb2xkIGFkZG9uX2RhdGEgb24gdGhlIHN5c3RlbS4nCiAgICAgaWYgNDIgLSA0MjogbzBvCiAgIGVsc2UgOgogICAgT09vMCA9ICdVbmtub3duIEFkZC1vbicKICAgIG8wMG9PT29PMG9PID0gT09vT08wb28wb29PCiAgICBPT08wb09vTzBPID0gJ05vIGFkZC1vbiBoYXMgYmVlbiBmb3VuZCBvbiB5b3VyIHN5c3RlbSB0aGF0IG1hdGNoZXMgdGhpcyBJRC4gVGhlIG1vc3QgbGlrZWx5IHNjZW5hcmlvIGZvciB0aGlzIGlzIHlvdVwndmUgcHJldmlvdXNseSB1bmluc3RhbGxlZCB0aGlzIGFkZC1vbiBhbmQgbGVmdCB0aGUgb2xkIGFkZG9uX2RhdGEgb24gdGhlIHN5c3RlbS4nCiAgICBpZiAyMyAtIDIzOiBJaWkgLiBvMG9vCiAgIG9vbzBvb08gPSBvcyAuIHBhdGggLiBqb2luICggb28wbzBPMDAgLCBmaWxlICkKICAgT08wMDBvT29vME8gLiBhcHBlbmQgKCAnJXMgW0NPTE9SPWdvbGRdKCVzKVsvQ09MT1JdJyAlICggZmlsZSAsIE9PbzAgKSApCiAgIGlJSWlpaTExaUlpaUkgLiBhcHBlbmQgKCBvMDBvT09vTzBvTyApCiAgIE8wT28wIC4gYXBwZW5kICggT09PMG9Pb08wTyApCiAgIG8wb08wb28wMDAwT08gLiBhcHBlbmQgKCBvb28wb29PICkKICAgaWYgMjkgLSAyOTogbzBvCiAgaUlpMWlJSUlpSWlJID0gT29vT28wMDBvMG8gKCAnQWRkb25fRGF0YSBUbyBSZW1vdmUnICwgT08wMDBvT29vME8gLCBpSUlpaWkxMWlJaWlJICwgTzBPbzAgKQogIGZvciBPMG9PMCBpbiBpSWkxaUlJSWlJaUkgOgogICBpSTFJMWlJSTFpID0gbzBvTzBvbzAwMDBPTyBbIE8wb08wIF0KICAgaWlJSWlpID0gT08wMDBvT29vME8gWyBPMG9PMCBdCiAgIEkxaTFpaTFJaUlpaSAuIGFwcGVuZCAoIFsgaWlJSWlpICwgaUkxSTFpSUkxaSBdICkKICB4Ym1jIC4gbG9nICggJ0ZJTkFMOiAlcycgJSBJMWkxaWkxSWlJaWkgKQogIGlmIGxlbiAoIEkxaTFpaTFJaUlpaSApID4gMCA6CiAgIG9PME9vME8wICggSTFpMWlpMUlpSWlpICkKICAgaWYgNDUgLSA0NTogbzBvbwogICBpZiA4NyAtIDg3OiBvMDAwTzBvIC0gT09PME8wTzBvb29vbyAtIG8wbyAqIE9vT28wbyAlIE9vT28wbwpkZWYgb08wT28wTzAgKCB1cmwgKSA6CiBPbzBvMDBvMG9Pb28wID0gMAogZm9yIE8wb08wIGluIHVybCA6CiAgSTFJSSA9IE8wb08wIFsgMSBdIC4gcmVwbGFjZSAoIGkxaWlJSUkxMTFpaSAsIG9vMG8wTzAwICkKICBpZiAnYWRkb25fZGF0YScgaW4gTzBvTzAgWyAxIF0gOgogICBJMUkgPSAnQWRkb25fRGF0YScKICBlbHNlIDoKICAgSTFJID0gJ0FkZG9uJwogIGlmIGkxMSAuIHllc25vICggIlJlbW92ZSAlcyIgJSBJMUkgLCAiRG8geW91IHdhbnQgdG8gUmVtb3ZlOiIgLCAnW0NPTE9SPWRvZGdlcmJsdWVdJXNbL0NPTE9SXScgJSBPMG9PMCBbIDAgXSApIDoKICAgaWYgbm90ICdhZGRvbl9kYXRhJyBpbiBPMG9PMCBbIDEgXSA6CiAgICBPbzBvMDBvMG9Pb28wID0gMQogICBmb3IgaWlpSTFJaUkgLCBPb0lJaTFpSSAsIG9PME9vbzBPb29PT28gaW4gb3MgLiB3YWxrICggTzBvTzAgWyAxIF0gKSA6CiAgICBpZiA5MyAtIDkzOiBpMTFJaWkgLyBJSTExaUlpSUlJaUkgKiBPT08wTzBPMG9vb29vCiAgICBmb3IgT28wb08wMCBpbiBvTzBPb28wT29vT09vIDoKICAgICBvcyAuIHVubGluayAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlJMUlpSSAsIE9vMG9PMDAgKSApCiAgICAgaWYgMTcgLSAxNzogbzBvbyAvIGkxMUlpaSAlIG8wMDBPMG8KICAgIGZvciBPT09PSTFpSTFpMTEgaW4gT29JSWkxaUkgOgogICAgIHNodXRpbCAuIHJtdHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlJMUlpSSAsIE9PT09JMWlJMWkxMSApICkKICAgb3MgLiBybWRpciAoIE8wb08wIFsgMSBdICkKICAgaWYgbm90ICdhZGRvbl9kYXRhJyBpbiBPMG9PMCBbIDEgXSA6CiAgICBpZiBpMTEgLiB5ZXNubyAoICdSZW1vdmUgQWRkb25fRGF0YT8nICwgJ1dvdWxkIHlvdSBhbHNvIGxpa2UgdG8gcmVtb3ZlIHRoZSBhZGRvbl9kYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFkZC1vbj8gVGhpcyBjb250YWlucyB5b3VyIGFkZC1vbiBzZXR0aW5ncyBhbmQgY2FuIGNvbnRhaW4gcGVyc29uYWwgaW5mb3JtYXRpb24gc3VjaCBhcyB1c2VybmFtZS9wYXNzd29yZC4nICkgOgogICAgIHRyeSA6CiAgICAgIGZvciBpaWlJMUlpSSAsIE9vSUlpMWlJICwgb08wT29vME9vb09PbyBpbiBvcyAuIHdhbGsgKCBJMUlJICkgOgogICAgICAgZm9yIE9vMG9PMDAgaW4gb08wT29vME9vb09PbyA6CiAgICAgICAgb3MgLiB1bmxpbmsgKCBvcyAuIHBhdGggLiBqb2luICggaWlpSTFJaUkgLCBPbzBvTzAwICkgKQogICAgICAgZm9yIE9PT09JMWlJMWkxMSBpbiBPb0lJaTFpSSA6CiAgICAgICAgc2h1dGlsIC4gcm10cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIGlpaUkxSWlJICwgT09PT0kxaUkxaTExICkgKQogICAgICBvcyAuIHJtZGlyICggSTFJSSApCiAgICAgZXhjZXB0IDoKICAgICAgcGFzcwogaWYgT28wbzAwbzBvT29vMCA6CiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1VwZGF0ZUxvY2FsQWRkb25zJyApCiAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1VwZGF0ZUFkZG9uUmVwb3MnICkKICBJSWlJMUlpSTFpSWkxICggJ25vZGlhbG9nJyApCiAgaUkxMUlJMWkxSTEgKCApCiAgaWYgMzAgLSAzMDogb29vME8wTzAwCiAgaWYgNDQgLSA0NDogSWlpIC4gSUkxMWlJaUlJSWlJCiAgaTExIC4gb2sgKCAnUkVNT1ZBTCBDT01QTEVURScgLCAnVGhlIGFkZG9ucyBkYXRhYmFzZSBmaWxlIG5vdyBuZWVkcyBwdXJnaW5nLCB0byBkbyBzbyB3ZSBuZWVkIHRvIHJlc3RhcnQuIElmIHByb21wdGVkIHBsZWFzZSBhZ3JlZSB0byB0aGUgZGVsZXRpb24gb3RoZXJ3aXNlIHlvdXIgYWRkLW9ucyBtYXkgc3RpbGwgYXBwZWFyIGluIEtvZGkgZXZlbiBpZiB0aGV5IGRvblwndCBwaHlzaWNhbGx5IGV4aXN0LicgKQogIElpSUkxICggJ3dpcGUnICkKICBpZiA4NCAtIDg0OiBPb09vMG8gLSBvMG8gKiBJaWkKICBpZiA1MiAtIDUyOiBvb28wTzBPMDAgLiBPbzAwb28wb08gLSBvT29PMG8wME9PMCAqIElJaWkxSSAlIG8waWkxSSAvIGkxMUlpaQpkZWYgSUkxSWlJMTFJMSAoICkgOgogb29vT28gKCApCiBJSWlpMUlpID0gaTExIC4gYnJvd3NlICggMSAsICdTZWxlY3QgdGhlIGJhY2t1cCBmaWxlIHlvdSB3YW50IHRvIERFTEVURScgLCAnZmlsZXMnICwgJy56aXAnICwgRmFsc2UgLCBGYWxzZSAsIEkxMWkxICkKIGlmIDg1IC0gODU6IG8wMDBPMG8gJSBpMTFpSWlpSWlpCiBpZiBJSWlpMUlpICE9IEkxMWkxIDoKICBJaTFJMUkxMUkxSTFpID0gbnRwYXRoIC4gYmFzZW5hbWUgKCBJSWlpMUlpICkKICBpZiBpMTEgLiB5ZXNubyAoICdEZWxldGUgQmFja3VwIEZpbGUnICwgJ1RoaXMgd2lsbCBjb21wbGV0ZWx5IHJlbW92ZSAnICsgSWkxSTFJMTFJMUkxaSAsICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlPycgLCAnJyAsIG5vbGFiZWwgPSAnTm8sIENhbmNlbCcgLCB5ZXNsYWJlbCA9ICdZZXMsIERlbGV0ZScgKSA6CiAgIG9zIC4gcmVtb3ZlICggSUlpaTFJaSApCiAgIGlmIDQxIC0gNDE6IElJSUlpaUlJMTExIC4gaTExaUlpaUlpaSArIE9PTzBPME8wb29vb28gLSBJSTEgKiBvb29Pb29PT28wT08KICAgaWYgMzMgLSAzMzogaTExSWlpCmRlZiBPT09Pb29PMG9Pb08gKCApIDoKIGlmIGkxMSAuIHllc25vICggJ1JlbW92ZSBBbGwgQ3Jhc2ggTG9ncz8nICwgJ1RoZXJlIGlzIGFic29sdXRlbHkgbm8gaGFybSBpbiBkb2luZyB0aGlzLCB0aGVzZSBhcmUgbG9nIGZpbGVzIGdlbmVyYXRlZCB3aGVuIEtvZGkgY3Jhc2hlcyBhbmQgYXJlIG9ubHkgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLicgLCBub2xhYmVsID0gJ0NhbmNlbCcgLCB5ZXNsYWJlbCA9ICdEZWxldGUnICkgOgogIE9vME9vMCAoICkKICBpMTEgLiBvayAoICJDcmFzaCBMb2dzIFJlbW92ZWQiICwgJycgLCAnWW91ciBjcmFzaCBsb2cgZmlsZXMgaGF2ZSBub3cgYmVlbiByZW1vdmVkLicgLCAnJyApCiAgaWYgNDYgLSA0Njogb09vTzBvMDBPTzAgLiBPb28wMG9PbzBvT28gJSBvb29Pb29PT28wT08gKyBPb28wMG9PbzBvT28KICBpZiA1NSAtIDU1OiBJSTEKZGVmIE9PbzBPT29vMDAgKCApIDoKIHNodXRpbCAuIHJtdHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoICc3MzYzNzI2OTcwNzQyZTZkNmY2NDc1NmM2NTJlNjM3OTY3NzA2NjY5JyApICkgKQogaTExIC4gb2sgKCBiaW5hc2NpaSAuIHVuaGV4bGlmeSAoICc1Mzc0NjE3Mjc0NzU3MDIwNjQ2OTYxNmM2ZjY3MjA2NDY5NzM2MTYyNmM2NTY0JyApICwgYmluYXNjaWkgLiB1bmhleGxpZnkgKCAnNTQ2ODY1MjA0MzZmNmQ2ZDc1NmU2OTc0NzkyMDUwNzI2Zjc0NjU2Mzc0Njk2ZjZlMjA2ZTYxNjcyMDczNjM3MjY1NjU2ZTIwNjg2MTczMjA2ZTZmNzcyMDYyNjU2NTZlMjA2NDY5NzM2MTYyNmM2NTY0MmUyMDU5NmY3NTIwNjM2MTZlMjA2ZTZmNzcyMDYzNzI2NTYxNzQ2NTIwNjEyMDYyNjE2MzZiNzU3MDIwNzQ2ODYxNzQyMDZlNmYyMDZjNmY2ZTY3NjU3MjIwNjg2MTczMjA3NDY4NjUyMDcwNzI2Zjc0NjU2Mzc0Njk2ZjZlMmMyMDRmNGU0YzU5MjA3OTZmNzUyMDc0Njg2NTIwNjI3NTY5NmM2NDIwNjE3NTc0Njg2ZjcyMjA2MzYxNmUyMDY0Njk3MzYxNjI2YzY1MjA3NDY4Njk3MzIwNzM2ZjIwNmQ2MTZiNjUyMDczNzU3MjY1MjA3OTZmNzUyMDY0NmY2ZTI3NzQyMDczNjg2MTcyNjUyMDZjNmY2NzY5NmUyMDY5NmU2NjZmMmUnICkgKQogaWYgOTAgLSA5MDogbzAwME8wbwogaWYgNCAtIDQ6IElJMTFpSWlJSUlpSSAlIGkxMUlpaSAtIElJMTFpSWlJSUlpSSAtIG8waWkxSQpkZWYgSUlpSTFJaUkxaUlpMSAoICkgOgogb08wMDBvME9vMDAgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKSAuIHllc25vICggJ0RlbGV0ZSBQYWNrYWdlcyBGb2xkZXInICwgJ0RvIHlvdSB3YW50IHRvIGNsZWFuIHRoZSBwYWNrYWdlcyBmb2xkZXI/IFRoaXMgd2lsbCBmcmVlIHVwIHNwYWNlIGJ5IGRlbGV0aW5nIHRoZSBvbGQgemlwIGluc3RhbGwgZmlsZXMgb2YgeW91ciBhZGRvbnMuIEtlZXBpbmcgdGhlc2UgZmlsZXMgY2FuIGFsc28gc29tZXRpbWVzIGNhdXNlIHByb2JsZW1zIHdoZW4gcmVpbnN0YWxsaW5nIGFkZG9ucycgLCBub2xhYmVsID0gJ0NhbmNlbCcgLCB5ZXNsYWJlbCA9ICdEZWxldGUnICkKIGlmIDMwIC0gMzA6IE9vMDBvbzBvTwogaWYgb08wMDBvME9vMDAgPT0gMSA6CiAgaTFpSSAoICkKICBpMTEgLiBvayAoICJQYWNrYWdlcyBSZW1vdmVkIiAsICcnICwgJ1lvdXIgemlwIGluc3RhbGwgZmlsZXMgaGF2ZSBub3cgYmVlbiByZW1vdmVkLicgLCAnJyApCiAgaWYgMzQgLSAzNDogb29vT29vT09vME9PIC0gT29vMDBvT28wb09vIC0gbzBpaTFJICsgb29vME8wTzAwICsgT29PbzBvCiAgaWYgNzAgLSA3MDogSUkxICsgbzBvbyAqIGlpSUkxMWkxSTFJSWkKZGVmIE9vT29PMG9vb29PMCAoICkgOgogaWYgaTExIC4geWVzbm8gKCAnQ2xlYXIgQ2FjaGVkIEltYWdlcz8nICwgJ1RoaXMgd2lsbCBjbGVhciB5b3VyIHRleHR1cmVzMTMuZGIgZmlsZSBhbmQgcmVtb3ZlIHlvdXIgVGh1bWJuYWlscyBmb2xkZXIuIFRoZXNlIHdpbGwgYXV0b21hdGljYWxseSBiZSByZXBvcHVsYXRlZCBhZnRlciBhIHJlc3RhcnQuJyAsIG5vbGFiZWwgPSAnQ2FuY2VsJyAsIHllc2xhYmVsID0gJ0RlbGV0ZScgKSA6CiAgT28wME8wMG8wICggKQogIG8wSTFJaWlpaUkxaTFJICggb29vT09PT08gKQogIGlmIDIwIC0gMjA6IGkxMWlJaWlJaWkgLSBPb28wMG9PbzBvT28gLSBpMTFJaWkgJSBvb29Pb29PT28wT08gLiBpMTFJaWkKICBpZiBpMTEgLiB5ZXNubyAoICdRdWl0IEtvZGkgTm93PycgLCAnQ2FjaGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuJyAsICdZb3UgbXVzdCBub3cgcmVzdGFydCBLb2RpLCB3b3VsZCB5b3UgbGlrZSB0byBxdWl0IG5vdz8nICwgJycgLCBub2xhYmVsID0gJ0lcJ2xsIHJlc3RhcnQgbGF0ZXInICwgeWVzbGFiZWwgPSAnWWVzLCBxdWl0JyApIDoKICAgdHJ5IDoKICAgIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICJSZXN0YXJ0QXBwIiApCiAgIGV4Y2VwdCA6CiAgICBJaUlJMSAoICkKICAgIGlmIDUwIC0gNTA6IElJaWkxSSArIE9vT28wbyAtIG8wbyAtIElJMQogICAgaWYgODQgLSA4NDogSWlpIC0gbzBvCmRlZiBPbzAwTzAwbzAgKCApIDoKIE9vTzAwTzAwTzAgPSBvcyAuIHBhdGggLiBqb2luICggb08wbzBvMG9vTzBvTyAsIElpaTEgKCAnVGV4dHVyZXMnICkgKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggT29PMDBPMDBPMCApIDoKICB0cnkgOgogICBvb09vMG8wbzAwID0gZGF0YWJhc2UgLiBjb25uZWN0ICggT29PMDBPMDBPMCApCiAgIGlJSWkxSWlpID0gb29PbzBvMG8wMCAuIGN1cnNvciAoICkKICBleGNlcHQgRXhjZXB0aW9uICwgTzAwMG8wTzBPbyA6CiAgIHhibWMgLiBsb2cgKCBzdHIgKCBPMDAwbzBPME9vICkgKQogICByZXR1cm4gRmFsc2UKIGVsc2UgOgogIHhibWMgLiBsb2cgKCAnJXMgbm90IGZvdW5kLicgJSBPb08wME8wME8wICkKICByZXR1cm4gRmFsc2UKICBpZiA0MSAtIDQxOiBPb09vMG8gJSBJSTEKIGlJSWkxSWlpIC4gZXhlY3V0ZSAoICIiIlNFTEVDVCBuYW1lIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ3RhYmxlJzsiIiIgKQogZm9yIE9vME8wbzBvME9PMG8gaW4gaUlJaTFJaWkgLiBmZXRjaGFsbCAoICkgOgogIGlmIE9vME8wbzBvME9PMG8gWyAwIF0gPT0gJ3ZlcnNpb24nIDoKICAgeGJtYyAuIGxvZyAoICdEYXRhIGZyb20gdGFibGUgYCVzYCBza2lwcGVkLicgJSBPbzBPMG8wbzBPTzBvIFsgMCBdICkKICBlbHNlIDoKICAgdHJ5IDoKICAgIGlJSWkxSWlpIC4gZXhlY3V0ZSAoICIiIkRFTEVURSBGUk9NICVzIiIiICUgT28wTzBvMG8wT08wbyBbIDAgXSApCiAgICBvb09vMG8wbzAwIC4gY29tbWl0ICggKQogICAgeGJtYyAuIGxvZyAoICdEYXRhIGZyb20gdGFibGUgYCVzYCBjbGVhcmVkLicgJSBPbzBPMG8wbzBPTzBvIFsgMCBdICkKICAgZXhjZXB0IE8wMDBvME8wT28gOgogICAgeGJtYyAuIGxvZyAoIHN0ciAoIE8wMDBvME8wT28gKSApCiAgICBpZiA4NyAtIDg3OiBvMG8gLiBpMTFpSWlpSWlpICsgbzBpaTFJIC0gT29PbzBvICogaTExaUlpaUlpaSAtIG8wMDBPMG8KIHhibWMgLiBsb2cgKCAnJXMgREIgUHVyZ2luZyBDb21wbGV0ZS4nICUgT29PMDBPMDBPMCApCiBJaWlJaTFJSTFpSSA9IE9vTzAwTzAwTzAgLiByZXBsYWNlICggJ1xcJyAsICcvJyApIC4gc3BsaXQgKCAnLycgKQogbzBPMDBvMDBPb28gKCAiUHVyZ2UgRGF0YWJhc2UiICwgIiVzIENvbXBsZXRlIiAlIElpaUlpMUlJMWlJIFsgbGVuICggSWlpSWkxSUkxaUkgKSAtIDEgXSApCiBpZiA0OSAtIDQ5OiBvMGlpMUkKIGlmIDcxIC0gNzE6IGkxMWlJaWlJaWkgLyBPMDBvb29vbzAwICogbzAwME8wbyAvIElpaQpkZWYgaTFJTzBPb08wbyAoIG5hbWUgLCB1cmwgLCBkZXNjcmlwdGlvbiApIDoKIGlmICdCYWNrdXAnIGluIG5hbWUgOgogIG9vb09vICggKQogIG8wT28wMG9PT08wbyA9IG9wZW4gKCB1cmwgKSAuIHJlYWQgKCApCiAgbzBpaTFJMSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMSAsIGRlc2NyaXB0aW9uIC4gc3BsaXQgKCAnWW91ciAnICkgWyAxIF0gKQogIE9vMG9PMDAgPSBvcGVuICggbzBpaTFJMSAsIG1vZGUgPSAndycgKQogIE9vMG9PMDAgLiB3cml0ZSAoIG8wT28wMG9PT08wbyApCiAgT28wb08wMCAuIGNsb3NlICggKQogIGlmIDM1IC0gMzU6IElJaWkxSQogZWxzZSA6CiAgaWYgJ2d1aXNldHRpbmdzLnhtbCcgaW4gZGVzY3JpcHRpb24gOgogICBJaTExaWlJMSA9IG9wZW4gKCBvcyAuIHBhdGggLiBqb2luICggSTExaTEgLCBkZXNjcmlwdGlvbiAuIHNwbGl0ICggJ1lvdXIgJyApIFsgMSBdICkgKSAuIHJlYWQgKCApCiAgIElJaWkxSTFJSWlpID0gJzxzZXR0aW5nIHR5cGU9IiguKz8pIiBuYW1lPSIlcy4oLis/KSI+KC4rPyk8L3NldHRpbmc+JyAlIEkxMWlpaTFJaQogICBPME9PME8gPSByZSAuIGNvbXBpbGUgKCBJSWlpMUkxSUlpaSApIC4gZmluZGFsbCAoIElpMTFpaUkxICkKICAgaWYgNTAgLSA1MDogbzBvICsgbzBpaTFJICUgbzAwME8wbwogICBmb3IgdHlwZSAsIE9vME9vbzAwMDBPICwgaTFpMUlpSWkxaTExIGluIE8wT08wTyA6CiAgICBpMWkxSWlJaTFpMTEgPSBpMWkxSWlJaTFpMTEgLiByZXBsYWNlICggJyZxdW90OycgLCAnJyApIC4gcmVwbGFjZSAoICcmYW1wOycgLCAnJicgKQogICAgeGJtYyAuIGV4ZWN1dGVidWlsdGluICggIlNraW4uU2V0JXMoJXMsJXMpIiAlICggdHlwZSAuIHRpdGxlICggKSAsIE9vME9vbzAwMDBPICwgaTFpMUlpSWkxaTExICkgKQogICAgaWYgODMgLSA4MzogT09PME8wTzBvb29vbyAqIG8wMDBPMG8gLiBPMDBvb29vbzAwIC4gb09vTzBvMDBPTzAgLSBJSTEKICBlbHNlIDoKICAgbzBpaTFJMSA9IG9zIC4gcGF0aCAuIGpvaW4gKCB1cmwgKQogICBvME9vMDBvT09PMG8gPSBvcGVuICggb3MgLiBwYXRoIC4gam9pbiAoIEkxMWkxICwgZGVzY3JpcHRpb24gLiBzcGxpdCAoICdZb3VyICcgKSBbIDEgXSApICkgLiByZWFkICggKQogICBPbzBvTzAwID0gb3BlbiAoIG8waWkxSTEgLCBtb2RlID0gJ3cnICkKICAgT28wb08wMCAuIHdyaXRlICggbzBPbzAwb09PTzBvICkKICAgT28wb08wMCAuIGNsb3NlICggKQogICBpZiAxMSAtIDExOiBvMGlpMUkgKiBpaUlJMTFpMUkxSUlpCiBpMTEgLiBvayAoICJSZXN0b3JlIENvbXBsZXRlIiAsICIiICwgJ0FsbCBEb25lICEnICwgJycgKQogaWYgNTkgLSA1OTogSWlpICsgaTExSWlpICogbzBvbyAvIG8wb28gLSBvb29Pb29PT28wT08gKiBJSWlpMUkKIGlmIDEgLSAxOiBvMG8gLSBpaUlJMTFpMUkxSUlpIC8gTzAwb29vb28wMApkZWYgT29PMDBvb29vMG8gKCBuYW1lICwgdXJsICwgdmlkZW8gLCBkZXNjcmlwdGlvbiAsIHNraW5zICwgZ3Vpc2V0dGluZ3NsaW5rICwgYXJ0cGFjayApIDoKIGlpaWlpaSA9IDEKIG9vSUkxID0gMAogbzBPT08gPSBvcyAuIHBhdGggLiBqb2luICggT28wbzAwMDBvMG8wICwgJ0NQX1Byb2ZpbGVzJyApCiBJaUlJMTFJMUkxSUlpID0gb3MgLiBwYXRoIC4gam9pbiAoIG8wT09PICwgJ2xpc3QudHh0JyApCiBJaUlpSTFpMSA9IFsgXQogSUlpaTFJaSA9IGRlc2NyaXB0aW9uIC4gcmVwbGFjZSAoICcgJyAsICdfJyApIC4gcmVwbGFjZSAoICInIiAsICIiICkgLiByZXBsYWNlICggIjoiICwgIi0iICkKIGlmIDQ0IC0gNDQ6IElpaQogaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIG8wT09PICkgOgogIG9zIC4gbWFrZWRpcnMgKCBvME9PTyApCiAgaWYgNyAtIDc6IElJSUlpaUlJMTExIC8gT29PbzBvICUgaTExSWlpIC0gT29PbzBvICogbzAwME8wbwogSUkxMTExMUkgPSBvcyAuIHBhdGggLiBqb2luICggbzBPT08gLCBJSWlpMUlpICkKIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBJSTExMTExSSApIDoKICBvcyAuIG1ha2VkaXJzICggSUkxMTExMUkgKQogZWxzZSA6CiAgb29JSTEgPSBpMTEgLiB5ZXNubyAoICdQcm9maWxlIEFscmVhZHkgRXhpc3RzJyAsICdUaGlzIGJ1aWxkIGlzIGFscmVhZHkgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLCB3b3VsZCB5b3UgbGlrZSB0byByZW1vdmUgdGhlIG9sZCBvbmUgYW5kIHJlaW5zdGFsbD8nICkKICBpZiBvb0lJMSA9PSAxIDoKICAgdHJ5IDoKICAgIHNodXRpbCAuIHJtdHJlZSAoIElJMTExMTFJICkKICAgIG9zIC4gbWFrZWRpcnMgKCBJSTExMTExSSApCiAgIGV4Y2VwdCA6CiAgICBwYXNzCiAgZWxzZSA6CiAgIGlpaWlpaSA9IDIKICAgaWYgNTkgLSA1OTogb09vTzBvMDBPTzAgLyBJSTEgLyBvMG8gLSBPMDBvb29vbzAwCiBpZiBpaWlpaWkgPT0gMSA6CiAgT09vMDBvT28gPSBvcyAuIHBhdGggLiBqb2luICggaUlpMWlpMUkxICwgSUlpaTFJaSArICdfZ3VpLnppcCcgKQogIGlmIElpSUkgPT0gJ3RydWUnIDoKICAgeGJtYyAuIGxvZyAoICIjIyMgRG93bmxvYWQgcGF0aCA9ICVzIiAlIE9PbzAwb09vICkKICAgaWYgNTggLSA1ODogb09vTzBvMDBPTzAgLyBvMG9vIC8gb29vT29vT09vME9PICsgT28wMG9vMG9PICUgb29vME8wTzAwIC8gT29vMDBvT28wb09vCiAgSTExIC4gY3JlYXRlICggIkNvbW11bml0eSBCdWlsZHMiICwgIkRvd25sb2FkaW5nIFNraW4gVHdlYWtzIiAsICcnICwgJ1BsZWFzZSBXYWl0JyApCiAgdHJ5IDoKICAgZG93bmxvYWRlciAuIGRvd25sb2FkICggZ3Vpc2V0dGluZ3NsaW5rICwgT09vMDBvT28gKQogICBpZiBJaUlJID09ICd0cnVlJyA6CiAgICB4Ym1jIC4gbG9nICggIiMjIyBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZCBndWlzZXR0aW5ncy54bWwiICkKICBleGNlcHQgOgogICBpMTEgLiBvayAoICdQcm9ibGVtIERldGVjdGVkJyAsICdTb3JyeSB0aGVyZSB3YXMgYSBwcm9ibGVtIGRvd25sb2FkaW5nIHRoZSBndWlzZXR0aW5ncyBmaWxlLiBQbGVhc2UgY2hlY2sgeW91ciBzdG9yYWdlIGxvY2F0aW9uLCBpZiB5b3VcJ3JlIGNlcnRhaW4gdGhhdFwncyBvayBwbGVhc2Ugbm90aWZ5IHRoZSBidWlsZCBhdXRob3Igb24gdGhlIHJlbGV2YW50IHN1cHBvcnQgdGhyZWFkLicgKQogICBpZiBJaUlJID09ICd0cnVlJyA6CiAgICB4Ym1jIC4gbG9nICggIiMjIyBGQUlMRUQgdG8gZG93bmxvYWQgJXMiICUgZ3Vpc2V0dGluZ3NsaW5rICkKICAgIGlmIDk1IC0gOTU6IE9vbzAwb09vMG9PbyAvIElJSUlpaUlJMTExICUgbzBvIC0gSUkxCiAgICBpZiA0NSAtIDQ1OiBvMG9vICogSUkxIC8gT09PME8wTzBvb29vbyAuIE9vT28wbyAvIElpaQogIGlmIHppcGZpbGUgLiBpc196aXBmaWxlICggT09vMDBvT28gKSA6CiAgIGkxMWlpMTFJaUkxID0gc3RyICggb3MgLiBwYXRoIC4gZ2V0c2l6ZSAoIE9PbzAwb09vICkgKQogIGVsc2UgOgogICBpMTFpaTExSWlJMSA9ICcwJwogICBpZiA1MyAtIDUzOiBJaWkgLiBvMDAwTzBvICogb09vTzBvMDBPTzAKICBJMTEgLiBjcmVhdGUgKCAiQ29tbXVuaXR5IEJ1aWxkcyIgLCAiRG93bmxvYWRpbmcgIiArIGRlc2NyaXB0aW9uICwgJycgLCAnUGxlYXNlIFdhaXQnICkKICBPT28wMG9PbyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpSWkxaWkxSTEgLCBJSWlpMUlpICsgJy56aXAnICkKICBpZiA1NiAtIDU2OiBJSWlpMUkgLyBJSUlJaWlJSTExMSAlIElJSUlpaUlJMTExIC4gSUlJSWlpSUkxMTEgKyBvMGlpMUkgKiBJSTEKICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggaUlpMWlpMUkxICkgOgogICBvcyAuIG1ha2VkaXJzICggaUlpMWlpMUkxICkKICAgaWYgODkgLSA4OTogb29vT29vT09vME9PIC0gT29PbzBvCiAgIGlmIDg5IC0gODk6IG9Pb08wbzAwT08wIC0gTzAwb29vb28wMCArIG8wbyAlIGlpSUkxMWkxSTFJSWkKICBvT28wMDAwb28gPSBvcyAuIHBhdGggLiBqb2luICggb08gLCAnZXh0cmFjdGVkJyApCiAgZG93bmxvYWRlciAuIGRvd25sb2FkICggdXJsICwgT09vMDBvT28gLCBJMTEgKQogIGlmIG5vdCB6aXBmaWxlIC4gaXNfemlwZmlsZSAoIE9PbzAwb09vICkgOgogICBpMTEgLiBvayAoICdOT1QgQSBWQUxJRCBCVUlMRCcgLCAnVGhlIG1haW4gZmlsZSBmb3IgdGhpcyBidWlsZCBpcyBub3QgYSB2YWxpZCB6aXAuIFBsZWFzZSBjb250YWN0IHRoZSBhdXRob3Igb2YgdGhlIGJ1aWxkIGFuZCBsZXQgdGhlbSBrbm93IHNvIHRoZXkgY2FuIGVpdGhlciByZW1vdmUgdGhpcyBidWlsZCBvciB1cGRhdGUgaXQuIFRoYW5rIHlvdS4nICkKICAgcmV0dXJuCiAgIGlmIDMxIC0gMzE6IG9vbzBPME8wMCAtIG9Pb08wbzAwT08wICogT09PME8wTzBvb29vbyAuIElJMSAqIG8wbyAvIE9vMDBvbzBvTwogIEkxMSAuIGNyZWF0ZSAoICJDb21tdW5pdHkgQnVpbGRzIiAsICJFeHRyYWN0aW5nICIgKyBkZXNjcmlwdGlvbiAsICcnICwgJ1BsZWFzZSBXYWl0JyApCiAgZXh0cmFjdCAuIGFsbCAoIE9PbzAwb09vICwgb09vMDAwMG9vICwgSTExICkKICBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggb09vMDAwMG9vICwgJ3VzZXJkYXRhJyAsICcuY2JjZmcnICkgKSA6CiAgIHRyeSA6CiAgICBvTzBPb29PTzAgPSBvcyAuIHBhdGggLiBqb2luICggb09vMDAwMG9vICwgJ3VzZXJkYXRhJyAsICdhZGRvbl9kYXRhJyAsICdmaXJzdHJ1bicgKQogICAgaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9PME9vb09PMCApIDoKICAgICBvcyAuIG1ha2VkaXJzICggb08wT29vT08wICkKICAgZXhjZXB0IDoKICAgIHBhc3MKICBpZiBJaUlJID09ICd0cnVlJyA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIERvd25sb2FkZWQgYnVpbGQgdG86ICIgKyBPT28wMG9PbyApCiAgIHhibWMgLiBsb2cgKCAiIyMjIEV4dHJhY3RlZCBidWlsZCB0bzogIiArIG9PbzAwMDBvbyApCiAgIGlmIDIwIC0gMjA6IGkxMWlJaWlJaWkgLyBJaWkgKyBvT29PMG8wME9PMCAvIE9PTzBPME8wb29vb28KICAgaWYgOTcgLSA5NzogaTExaUlpaUlpaQogIElJSUlJaUkxMUlpID0gb3BlbiAoIEkxMUlJMWkgLCBtb2RlID0gJ3InICkKICBvT28wTyA9IElJSUlJaUkxMUlpIC4gcmVhZCAoICkKICBJSUlJSWlJMTFJaSAuIGNsb3NlICggKQogIGlmIDE2IC0gMTY6IE8wMG9vb29vMDAKICBJaWlpaWkgPSByZSAuIGNvbXBpbGUgKCAnaWQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBvT28wTyApCiAgT09vbzAwMG8gPSByZSAuIGNvbXBpbGUgKCAnbmFtZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIG9PbzBPICkKICBPMDAwT29PTzBvTyA9IHJlIC4gY29tcGlsZSAoICd2ZXJzaW9uPSIoLis/KSInICkgLiBmaW5kYWxsICggb09vME8gKQogIGlmIDEyIC0gMTI6IElpaSAlIElJMTFpSWlJSUlpSSArIG9vb09vb09PbzBPTyAuIE9PTzBPME8wb29vb28gJSBJSWlpMUkKICBpSUkxbzAwT08wID0gSWlpaWlpIFsgMCBdIGlmICggbGVuICggSWlpaWlpICkgPiAwICkgZWxzZSAnJwogIE9vaWkgPSBPT29vMDAwbyBbIDAgXSBpZiAoIGxlbiAoIE9Pb28wMDBvICkgPiAwICkgZWxzZSAnJwogIG9PMG8wb28wTzAgPSBPMDAwT29PTzBvTyBbIDAgXSBpZiAoIGxlbiAoIE8wMDBPb09PMG9PICkgPiAwICkgZWxzZSAnJwogIGlmIDQxIC0gNDE6IElJMQogIHhibWMgLiBsb2cgKCAiIyMjIEJ1aWxkIG5hbWUgZGV0YWlscyB0byBzdG9yZSBpbiB0aV9pZDogJXMiICUgT29paSApCiAgaWYgMTMgLSAxMzogbzBvICsgT29PbzBvIC0gT29PbzBvICUgb29vT29vT09vME9PIC8gbzBvCiAgSUlJSUkxMSA9IG9zIC4gcGF0aCAuIGpvaW4gKCBvT28wMDAwb28gLCAndXNlcmRhdGEnICwgJ2FkZG9uX2RhdGEnICwgJ3RpX2lkJyApCiAgb29vbzAwT29Pb08gPSBvcyAuIHBhdGggLiBqb2luICggSUlJSUkxMSAsICdpZC54bWwnICkKICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggSUlJSUkxMSApIDoKICAgb3MgLiBtYWtlZGlycyAoIElJSUlJMTEgKQogICBpZiA5OSAtIDk5OiBPb28wMG9PbzBvT28KICBvbzBPMCA9IG9wZW4gKCBvb29vMDBPb09vTyAsIG1vZGUgPSAndysnICkKICBvbzBPMCAuIHdyaXRlICggJ2lkPSInICsgc3RyICggaUlJMW8wME9PMCApICsgJyJcbm5hbWU9IicgKyBPb2lpICsgJyJcbnZlcnNpb249IicgKyBvTzBvMG9vME8wICsgJyJcbmd1aT0iJyArIGkxMWlpMTFJaUkxICsgJyInICkKICBvbzBPMCAuIGNsb3NlICggKQogIGlmIDEzIC0gMTM6IG8wbyAtIGkxMUlpaSArIG9vbzBPME8wMCAlIG8wbyAuIG9vbzBPME8wMCAtIE8wMG9vb29vMDAKICBpZiA2NyAtIDY3OiBJSTExaUlpSUlJaUkgLiBpMTFpSWlpSWlpICsgaTExSWlpIC4gSUlpaTFJCiAgbzAgPSBvcyAuIHBhdGggLiBqb2luICggSUlJSUkxMSAsICdzdGFydHVwLnhtbCcgKQogIG9vME8wID0gb3BlbiAoIG8wICwgbW9kZSA9ICd3KycgKQogIG9vME8wIC4gd3JpdGUgKCAnZGF0ZT0iMDEwMTEwMDEiXG52ZXJzaW9uPSInICsgb08wbzBvbzBPMCArICciJyApCiAgb28wTzAgLiBjbG9zZSAoICkKICBpZiAyOCAtIDI4OiBvMDAwTzBvICsgbzAwME8wbyArIE9vT28wbwogIGkxMWkxMUlJaWlJaUkgPSBvcGVuICggb29vbzAwT29Pb08gLCAncicgKQogIElJMWlpaWlJMUlpMTEgPSBpMTFpMTFJSWlpSWlJIC4gcmVhZCAoICkKICBpMTFpMTFJSWlpSWlJIC4gY2xvc2UgKCApCiAgeGJtYyAuIGxvZyAoICIjIyMgdGlfaWQvaWQueG1sIGNvbnRlbnRzOiAlcyIgJSBJSTFpaWlpSTFJaTExICkKICBpZiA2OSAtIDY5OiBvMG8gLyBPMDBvb29vbzAwIC8gb29vT29vT09vME9PIC4gT29PbzBvCiAgaWYgNDEgLSA0MTogb29vT29vT09vME9PICogT28wMG9vMG9PICsgbzAwME8wbwogIGkxSUlpaUlpMWkgPSBpMTEgLiB5ZXNubyAoICJLZWVwIEtvZGkgU2V0dGluZ3M/IiAsICdEbyB5b3Ugd2FudCB0byBrZWVwIHlvdXIgZXhpc3RpbmcgS09ESSBzZXR0aW5ncyAod2VhdGhlciwgc2NyZWVuIGNhbGlicmF0aW9uLCBQVlIgZXRjLikgb3Igd2lwZSBhbmQgaW5zdGFsbCB0aGUgb25lcyBzdXBwbGllZCBpbiB0aGlzIGJ1aWxkPycgLCB5ZXNsYWJlbCA9ICdSZXBsYWNlIG15IHNldHRpbmdzJyAsIG5vbGFiZWwgPSAnS2VlcCBteSBzZXR0aW5ncycgKQogIGlmIGkxSUlpaUlpMWkgPT0gMCA6CiAgIElpaTFpMTEgKCBvcyAuIHBhdGggLiBqb2luICggb08gLCAnZXh0cmFjdGVkJyAsICd1c2VyZGF0YScgLCAnZ3Vpc2V0dGluZ3MueG1sJyApICkKICAgaWYgNDQgLSA0NDogb09vTzBvMDBPTzAKICAgaWYgNzcgLSA3NzogaTExaUlpaUlpaSAtIE9vT28wbyAuIG9Pb08wbzAwT08wICUgaWlJSTExaTFJMUlJaSAuIElJSUlpaUlJMTExCiAgZm9yIE8wb08wIGluIG9zIC4gbGlzdGRpciAoIGkxaUlJaTEgKSA6CiAgIElpSWlJMWkxIC4gYXBwZW5kICggTzBvTzAgKQogICBpZiA5IC0gOTogbzBpaTFJCiAgIGlmIDU1IC0gNTU6IElJMTFpSWlJSUlpSSAlIElJaWkxSSArIG8wbyAuIGkxMUlpaQogIE8waUkxSTFpaTExSUlpMSA9IG9wZW4gKCBvcyAuIHBhdGggLiBqb2luICggSUkxMTExMUkgLCAnYWRkb25saXN0JyApICwgbW9kZSA9ICd3KycgKQogIGZvciBPMG9PMCBpbiBvcyAuIGxpc3RkaXIgKCBpMWlpSUlJMTExaWkgKSA6CiAgIGlmIG5vdCBPMG9PMCBpbiBJaUlpSTFpMSBhbmQgTzBvTzAgIT0gJ3BsdWdpbi5wcm9ncmFtLnRvdGFsaW5zdGFsbGVyJyBhbmQgTzBvTzAgIT0gJ3BhY2thZ2VzJyA6CiAgICBPMGlJMUkxaWkxMUlJaTEgLiB3cml0ZSAoIE8wb08wICsgJ3wnICkKICBPMGlJMUkxaWkxMUlJaTEgLiBjbG9zZSAoICkKICBpZiBJaUlJID09ICd0cnVlJyA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIENyZWF0ZWQgYWRkb25saXN0IHRvOiAlcyIgJSBvcyAuIHBhdGggLiBqb2luICggSUkxMTExMUkgLCAnYWRkb25saXN0JyApICkKICBpMWlpaTFJaWlpSTFpMSA9IFsgJ2FkZG9ucycgLCAnY2FjaGUnICwgJ0NQX1Byb2ZpbGVzJyAsICdzeXN0ZW0nICwgJ3RlbXAnICwgJ1RodW1ibmFpbHMnIF0KICBJSUlpSTFpMSA9IFsgInhibWMubG9nIiAsICJ4Ym1jLm9sZC5sb2ciICwgImtvZGkubG9nIiAsICJrb2RpLm9sZC5sb2ciICwgJy5EU19TdG9yZScgLCAnLnNldHVwX2NvbXBsZXRlJyAsICdYQk1DSGVscGVyLmNvbmYnICwgJy5naXRpZ25vcmUnICwgJ2FkZG9ucyouZGInICwgJ3RleHR1cmVzMTMuZGInICwgJy5jYmNmZycgXQogIEkxMTFpaWlpaTEgPSAiQ3JlYXRpbmcgUHJvZmlsZSBEYXRhIEZpbGUiCiAgT08wb29Pb09PME9PbyA9ICJBcmNoaXZpbmcuLi4iCiAgT29vT29vb28wMDAwID0gIiIKICBJMWlpMWkxMWkgPSAiUGxlYXNlIFdhaXQiCiAgbzAwT29vMCAoIG9PbzAwMDBvbyAsIG9zIC4gcGF0aCAuIGpvaW4gKCBJSTExMTExSSAsICdidWlsZC56aXAnICkgLCBJMTExaWlpaWkxICwgT08wb29Pb09PME9PbyAsIE9vb09vb29vMDAwMCAsIEkxaWkxaTExaSAsIGkxaWlpMUlpaWlJMWkxICwgSUlJaUkxaTEgKQogIGlmIElpSUkgPT0gJ3RydWUnIDoKICAgeGJtYyAuIGxvZyAoICIjIyMgQ3JlYXRlZDogJXMiICUgb3MgLiBwYXRoIC4gam9pbiAoIElJMTExMTFJICwgJ2J1aWxkLnppcCcgKSApCiAgIGlmIDcxIC0gNzE6IGkxMWlJaWlJaWkgLyBPMDBvb29vbzAwICsgSWlpCiAgIGlmIDIzIC0gMjM6IGkxMWlJaWlJaWkKICBpZiBJSWkxSWlpaUkxSWkgPT0gJ2ZhbHNlJyA6CiAgIG9zIC4gcmVtb3ZlICggT09vMDBvT28gKQogICBpZiBJaUlJID09ICd0cnVlJyA6CiAgICB4Ym1jIC4gbG9nICggIiMjIyByZW1vdmVkOiAlcyIgJSBPT28wMG9PbyApCiAgICBpZiA4OCAtIDg4OiBPb28wMG9PbzBvT28gLSBvb28wTzBPMDAgLyBJSTEKICBJaWkxaTExaWlJMSAoIElJaWkxSWkgKQogIE9PME8wb29PT08wMCA9ICdodHRwOi8vbm9vYnNhbmRuZXJkcy5jb20vVEkvQ29tbXVuaXR5X0J1aWxkcy9kb3dubG9hZGNvdW50LnBocD9pZD0lcycgJSAoIGlJSTFvMDBPTzAgKQogIGlmIG5vdCAndXBkYXRlJyBpbiB2aWRlbyA6CiAgIHRyeSA6CiAgICBvT09PT29PTzBvICggT08wTzBvb09PTzAwICwgNSApCiAgIGV4Y2VwdCA6CiAgICBwYXNzCiAgICBpZiA3MSAtIDcxOiBvT29PMG8wME9PMAogICAgaWYgMTkgLSAxOTogaWlJSTExaTFJMUlJaSAtIG8wb28gKyBpMTFpSWlpSWlpIC8gSUlpaTFJCiAgaTFpSTExSWlJSSAoIElJMTExMTFJICkKICBpZiA4MyAtIDgzOiBvT29PMG8wME9PMAogIGlmIDUzIC0gNTM6IElpaSAlIGkxMUlpaSAuIG8wb28gKyBvMDAwTzBvIC8gb09vTzBvMDBPTzAKICBpZiA3NiAtIDc2OiBvT29PMG8wME9PMCAuIElJaWkxSSAtIGkxMWlJaWlJaWkgLyBvT29PMG8wME9PMCAtIG8waWkxSQogIGlmIDk1IC0gOTU6IG8wbwpkZWYgT29vbzBvMG9PICggdXJsICkgOgogTzAwME8gPSAwCiBPT29PMDBPT28gPSAwCiBpZiA0MiAtIDQyOiBPMDBvb29vbzAwIC4gaTExaUlpaUlpaSAvIElpaQogb29vT28gKCApCiBpZiAyNyAtIDI3OiBvMDAwTzBvIC8gSUkxCiBpZiB1cmwgPT0gJ2xvY2FsJyA6CiAgSUlpaTFJaSA9IHhibWNndWkgLiBEaWFsb2cgKCApIC4gYnJvd3NlICggMSAsICdTZWxlY3QgdGhlIGJhY2t1cCBmaWxlIHlvdSB3YW50IHRvIHJlc3RvcmUnICwgJ2ZpbGVzJyAsICcuemlwJyAsIEZhbHNlICwgRmFsc2UgLCBJMTFpMSApCiAgaWYgSUlpaTFJaSA9PSAnJyA6CiAgIE8wMDBPID0gMQogICBpZiA3NCAtIDc0OiBvT29PMG8wME9PMCAlIE9vT28wbyAtIG8wb28gKiBvMG8gLiBJSTEgKiBvMG9vCiBpZiBPMDAwTyA9PSAxIDoKICBwcmludCAiIyMjIE5vIGZpbGUgc2VsZWN0ZWQsIHF1aXR0aW5nIHJlc3RvcmUgcHJvY2VzcyAjIyMiCiAgcmV0dXJuCiAgaWYgOTkgLSA5OTogSWlpIC4gb29vME8wTzAwIC0gSUkxIC0gT09PME8wTzBvb29vbwogaWYgdXJsICE9ICdsb2NhbCcgOgogIEkxMSAuIGNyZWF0ZSAoICJDb21tdW5pdHkgQnVpbGRzIiAsICJEb3dubG9hZGluZyBidWlsZC4iICwgJycgLCAnUGxlYXNlIFdhaXQnICkKICBJSWlpMUlpID0gb3MgLiBwYXRoIC4gam9pbiAoIGlJaTFpaTFJMSAsIElpMUlpICggKSArICcuemlwJyApCiAgaWYgNiAtIDY6IElJMTFpSWlJSUlpSQogIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBpSWkxaWkxSTEgKSA6CiAgIG9zIC4gbWFrZWRpcnMgKCBpSWkxaWkxSTEgKQogICBpZiAzIC0gMzogT09PME8wTzBvb29vbyAtIE9vT28wbyAqIElJSUlpaUlJMTExICogSUkxMWlJaUlJSWlJIC8gSUlJSWlpSUkxMTEKICBkb3dubG9hZGVyIC4gZG93bmxvYWQgKCB1cmwgLCBJSWlpMUlpICwgSTExICkKICBpZiA1OCAtIDU4OiBJSUlJaWlJSTExMSAqIElJaWkxSSArIGkxMUlpaSAuIGkxMUlpaQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggaTFJMWlJICkgOgogIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIGlpSTFJaUkgKSA6CiAgIG9zIC4gcmVtb3ZlICggaTFJMWlJICkKICBlbHNlIDoKICAgb3MgLiByZW5hbWUgKCBpMUkxaUkgLCBpaUkxSWlJICkKICAgaWYgNzQgLSA3NDogaTExSWlpIC0gbzBpaTFJICogT28wMG9vMG9PICUgaTExSWlpCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBJSSApIDoKICBvcyAuIHJlbW92ZSAoIElJICkKICBpZiA5MyAtIDkzOiBJSWlpMUkgLyBJaWkgJSBpaUlJMTFpMUkxSUlpICogT29PbzBvIC0gbzBvbyAtIG8waWkxSQogIGlmIDQ0IC0gNDQ6IElJMQogaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIEkxMUlJMWkgKSA6CiAgSUlJSUlpSTExSWkgPSBvcGVuICggSTExSUkxaSAsIG1vZGUgPSAndysnICkKICBpZiA4MiAtIDgyOiBJaWkgLiBJaWkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9vME9vb09PbzAgKSA6CiAgb3MgLiByZW1vdmVkaXJzICggb28wT29vT09vMCApCiAgaWYgMTAgLSAxMDogaWlJSTExaTFJMUlJaSAqIG9Pb08wbzAwT08wIC4gb29vT29vT09vME9PIC4gSUkxIC4gSUkxMWlJaUlJSWlJICogb09vTzBvMDBPTzAKICBpZiA4MCAtIDgwOiBPb09vMG8gKyBvMG8gLiBPb09vMG8gKyBJSTExaUlpSUlJaUkKIHRyeSA6CiAgb3MgLiByZW5hbWUgKCBpaUkxSWlJICwgaTFJMWlJICkKICBpZiA4NSAtIDg1OiBpMTFpSWlpSWlpIC4gbzBvICsgSUlJSWlpSUkxMTEgLyBJSUlJaWlJSTExMQogZXhjZXB0IDoKICBpMTEgLiBvayAoICJOTyBHVUlTRVRUSU5HUyEiICwgJ05vIGd1aXNldHRpbmdzLnhtbCBmaWxlIGhhcyBiZWVuIGZvdW5kLicgLCAnUGxlYXNlIGV4aXQgWEJNQyBhbmQgdHJ5IGFnYWluJyAsICcnICkKICByZXR1cm4KICBpZiA0MyAtIDQzOiBPbzAwb28wb08gLiBJSTEgLSBPb28wMG9PbzBvT28KIG9PMDAwbzBPbzAwID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoIE9PbzAgLCAnV2UgaGlnaGx5IHJlY29tbWVuZCBiYWNraW5nIHVwIHlvdXIgZXhpc3RpbmcgYnVpbGQgYmVmb3JlIGluc3RhbGxpbmcgYW55IGJ1aWxkcy4gV291bGQgeW91IGxpa2UgdG8gcGVyZm9ybSBhIGJhY2t1cCBmaXJzdD8nICwgbm9sYWJlbCA9ICdCYWNrdXAnICwgeWVzbGFiZWwgPSAnSW5zdGFsbCcgKQogaWYgb08wMDBvME9vMDAgPT0gMCA6CiAgT29PbzBPME8gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMSAsICdDb21tdW5pdHlfQnVpbGRzJyAsICdNeV9CdWlsZHMnICkgKQogIGlmIDY1IC0gNjU6IE9vMDBvbzBvTyAtIE9vT28wbwogIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBPb09vME8wTyApIDoKICAgb3MgLiBtYWtlZGlycyAoIE9vT28wTzBPICkKICAgaWYgNzEgLSA3MTogaWlJSTExaTFJMUlJaSAtIE8wMG9vb29vMDAKICBPME8wID0gb08wb29vMDBvMG8wMDBPbyAoIGhlYWRpbmcgPSAiRW50ZXIgYSBuYW1lIGZvciB0aGlzIGJhY2t1cCIgKQogIGlmICggbm90IE8wTzAgKSA6CiAgIHJldHVybiBGYWxzZSAsIDAKICAgaWYgMjcgLSAyNzogSWlpIC4gT09PME8wTzBvb29vbyAvIG9Pb08wbzAwT08wIC4gSUlpaTFJCiAgb09JSUlJID0gdXJsbGliIC4gcXVvdGVfcGx1cyAoIE8wTzAgKQogIG9vT09vID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggT29PbzBPME8gLCBvT0lJSUkgKyAnLnppcCcgKSApCiAgaTFpaWkxSWlpaUkxaTEgPSBbIE9PMG8gXQogIElJSWlJMWkxID0gWyAieGJtYy5sb2ciICwgInhibWMub2xkLmxvZyIgLCAia29kaS5sb2ciICwgImtvZGkub2xkLmxvZyIgLCAnLkRTX1N0b3JlJyAsICcuc2V0dXBfY29tcGxldGUnICwgJ1hCTUNIZWxwZXIuY29uZicgLCAnLmdpdGlnbm9yZScgXQogIEkxMTFpaWlpaTEgPSAiQ3JlYXRpbmcgZnVsbCBiYWNrdXAgb2YgZXhpc3RpbmcgYnVpbGQiCiAgT08wb29Pb09PME9PbyA9ICJBcmNoaXZpbmcuLi4iCiAgT29vT29vb28wMDAwID0gIiIKICBJMWlpMWkxMWkgPSAiUGxlYXNlIFdhaXQiCiAgaWYgMTUgLSAxNTogSUlJSWlpSUkxMTEgKyBvMG9vICUgSUlpaTFJIC0gb09vTzBvMDBPTzAgLSBPMDBvb29vbzAwICUgbzBpaTFJCiAgbzAwT29vMCAoIE9vMG8wMDAwbzBvMCAsIG9vT09vICwgSTExMWlpaWlpMSAsIE9PMG9vT29PTzBPT28gLCBPb29Pb29vbzAwMDAgLCBJMWlpMWkxMWkgLCBpMWlpaTFJaWlpSTFpMSAsIElJSWlJMWkxICkKIE8wb29PMDBPTyA9IHhibWNndWkgLiBEaWFsb2cgKCApIC4geWVzbm8gKCBPT28wICwgJ1dvdWxkIHlvdSBsaWtlIHRvIGtlZXAgeW91ciBleGlzdGluZyBkYXRhYmFzZSBmaWxlcyBvciBvdmVyd3JpdGU/IE92ZXJ3cml0aW5nIHdpbGwgd2lwZSBhbnkgZXhpc3RpbmcgbXVzaWMgb3IgdmlkZW8gbGlicmFyeSB5b3UgbWF5IGhhdmUgc2Nhbm5lZCBpbi4nICwgbm9sYWJlbCA9ICdPdmVyd3JpdGUnICwgeWVzbGFiZWwgPSAnS2VlcCBFeGlzdGluZycgKQogaWYgTzBvb08wME9PID09IDEgOgogIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG8wT08wMG9PICkgOgogICBzaHV0aWwgLiBybXRyZWUgKCBvME9PMDBvTyApCiAgIGlmIDQzIC0gNDM6IE9vbzAwb09vMG9PbyAuIG9vbzBPME8wMCAvIElJSUlpaUlJMTExIC0gbzBvCiAgdHJ5IDoKICAgc2h1dGlsIC4gY29weXRyZWUgKCBvTzBvMG8wb29PMG9PICwgbzBPTzAwb08gLCBzeW1saW5rcyA9IEZhbHNlICwgaWdub3JlID0gc2h1dGlsIC4gaWdub3JlX3BhdHRlcm5zICggIlRleHR1cmVzMTMuZGIiICwgIkFkZG9uczE2LmRiIiAsICJBZGRvbnMxNS5kYiIgLCAic2FsdHNjYWNoZS5kYi13YWwiICwgInNhbHRzY2FjaGUuZGItc2htIiAsICJzYWx0c2NhY2hlLmRiIiAsICJvbmVjaGFubmVsY2FjaGUuZGIiICkgKQogICBpZiAzNiAtIDM2OiBvb28wTzBPMDAgLSBPbzAwb28wb08gKiBJSWlpMUkgJSBvMG8gLyBPbzAwb28wb08KICBleGNlcHQgOgogICBPT29PMDBPT28gPSB4Ym1jZ3VpIC4gRGlhbG9nICggKSAuIHllc25vICggT09vMCAsICdUaGVyZSB3YXMgYW4gZXJyb3IgdHJ5aW5nIHRvIGJhY2t1cCBzb21lIGRhdGFiYXNlcy4gQ29udGludWluZyBtYXkgd2lwZSB5b3VyIGV4aXN0aW5nIGxpYnJhcnkuIERvIHlvdSB3aXNoIHRvIGNvbnRpbnVlPycgLCBub2xhYmVsID0gJ05vLCBjYW5jZWwnICwgeWVzbGFiZWwgPSAnWWVzLCBvdmVyd3JpdGUnICkKICAgaWYgT09vTzAwT09vID09IDEgOiBwYXNzCiAgIGlmIE9Pb08wME9PbyA9PSAwIDogTzAwME8gPSAxIDsgcmV0dXJuCiAgIGlmIDM1IC0gMzU6IE9vbzAwb09vMG9PbyAuIE9PTzBPME8wb29vb28gLSBvb28wTzBPMDAgLyBJSTEgLiBPb28wMG9PbzBvT28gKiBvMDAwTzBvCiAgb29PT28gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMSAsICdEYXRhYmFzZS56aXAnICkgKQogIEkxMUkxaTFpSSAoIG8wT08wMG9PICwgb29PT28gKQogIGlmIDE1IC0gMTU6IE9PTzBPME8wb29vb28KIGlmIE8wMDBPID09IDEgOgogIHByaW50ICIjIyMgVXNlciBkZWNpZGVkIHRvIGV4aXQgcmVzdG9yZSBmdW5jdGlvbiAjIyMiCiAgcmV0dXJuCiAgaWYgMzIgLSAzMjogSUkxCiBlbHNlIDoKICB0aW1lIC4gc2xlZXAgKCAxICkKICBvMG8wTzBPMDBvT09vID0gb3BlbiAoIGlpMTFpSWkxSSAsIG1vZGUgPSAncicgKQogIE9vMG9vTzBPMG8wMG8gPSBvMG8wTzBPMDBvT09vIC4gcmVhZCAoICkKICBvMG8wTzBPMDBvT09vIC4gY2xvc2UgKCApCiAgaWYgMjkgLSAyOTogb09vTzBvMDBPTzAKICBpZiA0MSAtIDQxOiBJSUlJaWlJSTExMQogIHByaW50ICIjIyMgQ2hlY2tpbmcgemlwIGZpbGUgc3RydWN0dXJlICMjIyIKICBJMWlpSTFJSTExID0gemlwZmlsZSAuIFppcEZpbGUgKCBJSWlpMUlpICkKICBpZiAneGJtYy5sb2cnIGluIEkxaWlJMUlJMTEgLiBuYW1lbGlzdCAoICkgb3IgJ2tvZGkubG9nJyBpbiBJMWlpSTFJSTExIC4gbmFtZWxpc3QgKCApIG9yICcuZ2l0JyBpbiBJMWlpSTFJSTExIC4gbmFtZWxpc3QgKCApIG9yICcuc3ZuJyBpbiBJMWlpSTFJSTExIC4gbmFtZWxpc3QgKCApIDoKICAgcHJpbnQgIiMjIyBXaG9ldmVyIGNyZWF0ZWQgdGhpcyBidWlsZCBoYXMgdXNlZCBjb21wbGV0ZWx5IHRoZSB3cm9uZyBiYWNrdXAgbWV0aG9kLCBsZXRzIHRyeSBhbmQgZml4IGl0ISAjIyMiCiAgIGkxMSAuIG9rICggJ0ZpeGluZyBCYWQgWmlwJyAsICdXaG9ldmVyIGNyZWF0ZWQgdGhpcyBidWlsZCBoYXMgdXNlZCB0aGUgd3JvbmcgYmFja3VwIG1ldGhvZCwgcGxlYXNlIHdhaXQgd2hpbGUgd2UgZml4IGl0IC0gdGhpcyBjb3VsZCB0YWtlIHNvbWUgdGltZSEgQ2xpY2sgT0sgdG8gcHJvY2VlZCcgKQogICBvb29vTzAwMCA9IHppcGZpbGUgLiBaaXBGaWxlICggSUlpaTFJaSAsICdyJyApCiAgIE8wT09PMG8wTyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpSWkxaWkxSTEgLCAnZml4ZWQuemlwJyApCiAgIG9PbzBvT29vT29PMDAgPSB6aXBmaWxlIC4gWmlwRmlsZSAoIE8wT09PMG8wTyAsICd3JyApCiAgIGlmIDYgLSA2OiBpaUlJMTFpMUkxSUlpICsgaWlJSTExaTFJMUlJaSAlIGlpSUkxMWkxSTFJSWkgJSBPT08wTzBPMG9vb29vIC4gSUkxMWlJaUlJSWlJCiAgIEkxMSAuIGNyZWF0ZSAoICJGaXhpbmcgQnVpbGQiICwgIkNoZWNraW5nICIgLCAnJyAsICdQbGVhc2UgV2FpdCcgKQogICBpZiA3IC0gNzogSUlJSWlpSUkxMTEgLSBPMDBvb29vbzAwICUgbzBvbyAvIElJaWkxSSAlIG8waWkxSQogICBmb3IgTzBvTzAgaW4gb29vb08wMDAgLiBpbmZvbGlzdCAoICkgOgogICAgYnVmZmVyID0gb29vb08wMDAgLiByZWFkICggTzBvTzAgLiBmaWxlbmFtZSApCiAgICBpSUlpaUlJaWlJSSA9IHN0ciAoIE8wb08wIC4gZmlsZW5hbWUgKQogICAgaWYgODcgLSA4Nzogb09vTzBvMDBPTzAgJSBJaWkgKyBJSUlJaWlJSTExMSAuIGkxMWlJaWlJaWkgLyBJSUlJaWlJSTExMQogICAgaWYgKCBPMG9PMCAuIGZpbGVuYW1lIFsgLSA0IDogXSAhPSAnLmxvZycgKSBhbmQgbm90ICcuZ2l0JyBpbiBpSUlpaUlJaWlJSSBhbmQgbm90ICcuc3ZuJyBpbiBpSUlpaUlJaWlJSSA6CiAgICAgb09vMG9Pb29Pb08wMCAuIHdyaXRlc3RyICggTzBvTzAgLCBidWZmZXIgKQogICAgIEkxMSAuIHVwZGF0ZSAoIDAgLCAiRml4aW5nLi4uIiAsICdbQ09MT1IgeWVsbG93XSVzWy9DT0xPUl0nICUgTzBvTzAgLiBmaWxlbmFtZSAsICdQbGVhc2UgV2FpdCcgKQogICAgIGlmIDMyIC0gMzI6IElJSUlpaUlJMTExICsgT28wMG9vMG9PICsgb09vTzBvMDBPTzAKICAgSTExIC4gY2xvc2UgKCApCiAgIG9PbzBvT29vT29PMDAgLiBjbG9zZSAoICkKICAgb29vb08wMDAgLiBjbG9zZSAoICkKICAgSUlpaTFJaSA9IE8wT09PMG8wTwogICBpZiA3OSAtIDc5OiBPMDBvb29vbzAwIC8gSUlJSWlpSUkxMTEKICBJMTEgLiBjcmVhdGUgKCAiUmVzdG9yaW5nIEJhY2t1cCBCdWlsZCIgLCAiQ2hlY2tpbmcgIiAsICcnICwgJ1BsZWFzZSBXYWl0JyApCiAgSTExIC4gdXBkYXRlICggMCAsICIiICwgIkV4dHJhY3RpbmcgWmlwIFBsZWFzZSBXYWl0IiApCiAgaWYgODEgLSA4MTogSUlpaTFJCiAgdHJ5IDoKICAgZXh0cmFjdCAuIGFsbCAoIElJaWkxSWkgLCBPbzBvMDAwMG8wbzAgLCBJMTEgKQogIGV4Y2VwdCA6CiAgIGkxMSAuIG9rICggJ0VSUk9SIElOIEJVSUxEIFpJUCcgLCAnUGxlYXNlIGNvbnRhY3QgdGhlIGJ1aWxkIGF1dGhvciwgdGhlcmUgYXJlIGVycm9ycyBpbiB0aGlzIHppcCBmaWxlIHRoYXQgaGFzIGNhdXNlZCB0aGUgaW5zdGFsbCBwcm9jZXNzIHRvIGZhaWwuIE1vc3QgbGlrZWx5IGNhdXNlIGlzIGl0IGNvbnRhaW5zIGZpbGVzIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBuYW1lLicgKQogICByZXR1cm4KICAgaWYgODYgLSA4NjogT28wMG9vMG9PICUgT28wMG9vMG9PICUgSUkxCiAgdGltZSAuIHNsZWVwICggMSApCiAgaWYgNDIgLSA0MjogaWlJSTExaTFJMUlJaSAuIG9vb09vb09PbzBPTyArIE9PTzBPME8wb29vb28gLyBJSTExaUlpSUlJaUkgJSBJSTEKICBpZiBPMG9vTzAwT08gPT0gMSA6CiAgIGV4dHJhY3QgLiBhbGwgKCBvb09PbyAsIG9PMG8wbzBvb08wb08gLCBJMTEgKQogICBpZiAxOSAtIDE5OiBpMTFJaWkgLyBJSUlJaWlJSTExMQogICBpZiBPT29PMDBPT28gIT0gMSA6CiAgICBzaHV0aWwgLiBybXRyZWUgKCBvME9PMDBvTyApCiAgICBpZiA0MyAtIDQzOiBJaWkgJSBJSUlJaWlJSTExMSArIGlpSUkxMWkxSTFJSWkgLSBJSTEgLiBPT08wTzBPMG9vb29vICUgaWlJSTExaTFJMUlJaQogIE9PT09vMDBvT09PMDAgPSBvcGVuICggaWkxMWlJaTFJICwgbW9kZSA9ICd3KycgKQogIE9PT09vMDBvT09PMDAgLiB3cml0ZSAoIE9vMG9vTzBPMG8wMG8gKQogIE9PT09vMDBvT09PMDAgLiBjbG9zZSAoICkKICB0cnkgOgogICBvcyAuIHJlbmFtZSAoIGlpSTFJaUkgLCBJSSApCiAgIGlmIDEzIC0gMTM6IG9Pb08wbzAwT08wIC8gbzBvbyAqIGkxMWlJaWlJaWkgJSBvMG9vICUgbzBvbyAqIE9vbzAwb09vMG9PbwogIGV4Y2VwdCA6CiAgIHByaW50ICJOTyBHVUlTRVRUSU5HUyBET1dOTE9BREVEIgogICBpZiAxNyAtIDE3OiBvMG8gLiBPT08wTzBPMG9vb29vICogTzAwb29vb28wMCAtIElpaSAlIE8wMG9vb29vMDAKICB0aW1lIC4gc2xlZXAgKCAxICkKICBJSUlJSWlJMTFJaSA9IG9wZW4gKCBpMUkxaUkgLCBtb2RlID0gJ3InICkKICBvT28wTyA9IElJSUlJaUkxMUlpIC4gcmVhZCAoICkKICBJSUlJSWlJMTFJaSAuIGNsb3NlICggKQogIG8wb09Pb09vMDBvID0gcmUgLiBjb21waWxlICggJzxza2luc2V0dGluZ3M+W1xzXFNdKj88XC9za2luc2V0dGluZ3M+JyApIC4gZmluZGFsbCAoIG9PbzBPICkKICBJaU8wbyA9IG8wb09Pb09vMDBvIFsgMCBdIGlmICggbGVuICggbzBvT09vT28wMG8gKSA+IDAgKSBlbHNlICcnCiAgaTFJMTFJaUkgPSByZSAuIGNvbXBpbGUgKCAnPHNraW4gZGVmYXVsdFtcc1xTXSo/PFwvc2tpbj4nICkgLiBmaW5kYWxsICggb09vME8gKQogIG9PbzBPb29vID0gaTFJMTFJaUkgWyAwIF0gaWYgKCBsZW4gKCBpMUkxMUlpSSApID4gMCApIGVsc2UgJycKICBpaWlpSSA9IHJlIC4gY29tcGlsZSAoICc8bG9va2FuZGZlZWw+W1xzXFNdKj88XC9sb29rYW5kZmVlbD4nICkgLiBmaW5kYWxsICggb09vME8gKQogIEkxaWlJSWlJMTFJID0gaWlpaUkgWyAwIF0gaWYgKCBsZW4gKCBpaWlpSSApID4gMCApIGVsc2UgJycKICBpZiAzNSAtIDM1OiBJSUlJaWlJSTExMSArIG9Pb08wbzAwT08wIC4gb29vT29vT09vME9PICogaWlJSTExaTFJMUlJaQogIHRyeSA6CiAgIG9vME8gPSBvcGVuICggSUkgLCBtb2RlID0gJ3InICkKICAgSWlpMWlJMWlpSWlpID0gb28wTyAuIHJlYWQgKCApCiAgIG9vME8gLiBjbG9zZSAoICkKICAgSTFJaTFpSTFJaUkxSSA9IHJlIC4gY29tcGlsZSAoICc8c2tpbnNldHRpbmdzPltcc1xTXSo/PFwvc2tpbnNldHRpbmdzPicgKSAuIGZpbmRhbGwgKCBJaWkxaUkxaWlJaWkgKQogICBvT29PID0gSTFJaTFpSTFJaUkxSSBbIDAgXSBpZiAoIGxlbiAoIEkxSWkxaUkxSWlJMUkgKSA+IDAgKSBlbHNlICcnCiAgIG8wT09Pb08gPSByZSAuIGNvbXBpbGUgKCAnPHNraW4gZGVmYXVsdFtcc1xTXSo/PFwvc2tpbj4nICkgLiBmaW5kYWxsICggSWlpMWlJMWlpSWlpICkKICAgbzBPMG8wTyA9IG8wT09Pb08gWyAwIF0gaWYgKCBsZW4gKCBvME9PT29PICkgPiAwICkgZWxzZSAnJwogICBvb28wT08wT09vb29PbzAwID0gcmUgLiBjb21waWxlICggJzxsb29rYW5kZmVlbD5bXHNcU10qPzxcL2xvb2thbmRmZWVsPicgKSAuIGZpbmRhbGwgKCBJaWkxaUkxaWlJaWkgKQogICBpaUlJMWkxaTFJMSA9IG9vbzBPTzBPT29vb09vMDAgWyAwIF0gaWYgKCBsZW4gKCBvb28wT08wT09vb29PbzAwICkgPiAwICkgZWxzZSAnJwogICBpSUlJaUlpID0gb09vME8gLiByZXBsYWNlICggSWlPMG8gLCBvT29PICkgLiByZXBsYWNlICggSTFpaUlJaUkxMUkgLCBpaUlJMWkxaTFJMSApIC4gcmVwbGFjZSAoIG9PbzBPb29vICwgbzBPMG8wTyApCiAgIG9vME8wID0gb3BlbiAoIGkxSTFpSSAsIG1vZGUgPSAndysnICkKICAgb28wTzAgLiB3cml0ZSAoIHN0ciAoIGlJSUlpSWkgKSApCiAgIG9vME8wIC4gY2xvc2UgKCApCiAgIGlmIDI3IC0gMjc6IElJaWkxSSAvIElJSUlpaUlJMTExIC0gT28wMG9vMG9PIC0gaWlJSTExaTFJMUlJaQogIGV4Y2VwdCA6CiAgIHByaW50ICIjIyMgTk8gR1VJU0VUVElOR1MgRE9XTkxPQURFRCIKICAgaWYgNzYgLSA3NjogSUkxMWlJaUlJSWlJIC4gbzAwME8wbyArIElJMTFpSWlJSUlpSSArIElJaWkxSSArIE9vMDBvbzBvTyAvIElJaWkxSQogIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIGlpSTFJaUkgKSA6CiAgIG9zIC4gcmVtb3ZlICggaWlJMUlpSSApCiAgIGlmIDk1IC0gOTU6IG8wbwogIG9zIC4gcmVuYW1lICggaTFJMWlJICwgaWlJMUlpSSApCiAgdHJ5IDoKICAgb3MgLiByZW1vdmUgKCBJSSApCiAgIGlmIDQ1IC0gNDU6IG8wbyAtIElJMTFpSWlJSUlpSSAqIG9vbzBPME8wMCAtIG8wb28gLiBJSUlJaWlJSTExMQogIGV4Y2VwdCA6CiAgIHBhc3MKICAgaWYgNzcgLSA3Nzogb29vT29vT09vME9PIC8gbzBvCiAgb3MgLiBtYWtlZGlycyAoIG9vME9vb09PbzAgKQogIHRpbWUgLiBzbGVlcCAoIDEgKQogIElpSUkxICggKQogIGlmIDQ5IC0gNDk6IE9vMDBvbzBvTwogIGlmIDU2IC0gNTY6IE9PTzBPME8wb29vb28gLyBvMG8gKyBJSTExaUlpSUlJaUkKZGVmIE9vT28wMG9Pb28wb08gKCApIDoKIG9vb09vICggKQogSUlpaWlJaUkxID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiBicm93c2UgKCAxICwgJ1NlbGVjdCB0aGUgZ3Vpc2V0dGluZ3MgemlwIGZpbGUgeW91IHdhbnQgdG8gcmVzdG9yZScgLCAnZmlsZXMnICwgJy56aXAnICwgRmFsc2UgLCBGYWxzZSAsIEkxMWkxICkKIGlmIDIzIC0gMjM6IElJaWkxSSAtIE8wMG9vb29vMDAgLSBPbzAwb28wb08gKiBPbzAwb28wb08gLiBPbzAwb28wb08KIGlmIElJaWlpSWlJMSA9PSAnJyA6CiAgcmV0dXJuCiAgaWYgNzkgLSA3OTogbzBvIC0gSWlpICsgT29PbzBvIC8gbzAwME8wbyAqIElJMQogZWxzZSA6CiAgSWlJMWlJSWlJaTFJaSA9IDEKICBJMTExSTFpaWkxMSAoIElJaWlpSWlJMSAsIElpSTFpSUlpSWkxSWkgKQogIGlmIDY5IC0gNjk6IElJMTFpSWlJSUlpSSAlIG9Pb08wbzAwT08wIC8gSWlpIC4gSUkxMWlJaUlJSWlJIC0gT28wMG9vMG9PCiAgaWYgNzQgLSA3NDogbzBvbyAtIG8waWkxSSAtIE9vMDBvbzBvTyAuIE9PTzBPME8wb29vb28gJSBpMTFJaWkKZGVmIElJaSAoIG5hbWUgLCB1cmwgLCB2aWRlbyApIDoKIG9PMDAwbzBPbzAwID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICdGdWxsIFdpcGUgQW5kIE5ldyBJbnN0YWxsJyAsICdUaGlzIGlzIGEgZ3JlYXQgb3B0aW9uIGZvciBmaXJzdCB0aW1lIGluc3RhbGwgb3IgaWYgeW91XCdyZSBlbmNvdW50ZXJpbmcgYW55IGlzc3VlcyB3aXRoIHlvdXIgZGV2aWNlLiBUaGlzIHdpbGwgd2lwZSBhbGwgeW91ciBLb2RpIHNldHRpbmdzLCBkbyB5b3Ugd2lzaCB0byBjb250aW51ZT8nICwgbm9sYWJlbCA9ICdDYW5jZWwnICwgeWVzbGFiZWwgPSAnQWNjZXB0JyApCiBpZiBvTzAwMG8wT28wMCA9PSAwIDoKICByZXR1cm4KICBpZiA0NSAtIDQ1OiBpaUlJMTFpMUkxSUlpCiBlbGlmIG9PMDAwbzBPbzAwID09IDEgOgogIGlmIDQgLSA0OiBvMG8KICBPT28wMG9PbyA9ICcvc3RvcmFnZS9vcGVuZWxlY190ZW1wLycKICBPb28wME8gPSAnL3N0b3JhZ2UvLnJlc3RvcmUvJwogIG9PT28wID0gb3MgLiBwYXRoIC4gam9pbiAoIE9vbzAwTyAsIElpMUlpICggKSArICcudGFyJyApCiAgaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIE9vbzAwTyApIDoKICAgdHJ5IDoKICAgIG9zIC4gbWFrZWRpcnMgKCBPb28wME8gKQogICBleGNlcHQgOgogICAgcGFzcwogIHRyeSA6CiAgIEkxMSAuIGNyZWF0ZSAoICdEb3dubG9hZGluZyBCdWlsZCcgLCAnUGxlYXNlIHdhaXQnICwgJycgLCAnJyApCiAgIGRvd25sb2FkZXIgLiBkb3dubG9hZCAoIHVybCAsIG9PT28wICkKICAgT08wT29vT28gPSBUcnVlCiAgZXhjZXB0IDoKICAgT08wT29vT28gPSBGYWxzZQogIHRpbWUgLiBzbGVlcCAoIDIgKQogIGlmIDYwIC0gNjA6IE8wMG9vb29vMDAKICBpZiBPTzBPb29PbyA9PSBUcnVlIDoKICAgaWYgNTcgLSA1NzogaTExSWlpCiAgIHRyeSA6CiAgICBJSUlJSWlJMTFJaSA9IG9wZW4gKCBJMTFJSTFpICwgbW9kZSA9ICdyJyApCiAgICBvT28wTyA9IElJSUlJaUkxMUlpIC4gcmVhZCAoICkKICAgIElJSUlJaUkxMUlpIC4gY2xvc2UgKCApCiAgICBpZiA5OSAtIDk5OiBpaUlJMTFpMUkxSUlpICsgT29PbzBvICUgaTExSWlpIC0gbzBpaTFJCiAgICBJaWlpaWkgPSByZSAuIGNvbXBpbGUgKCAnaWQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBvT28wTyApCiAgICBpSUkxbzAwT08wID0gSWlpaWlpIFsgMCBdIGlmICggbGVuICggSWlpaWlpICkgPiAwICkgZWxzZSAnJwogICAgaWYgNTIgLSA1Mjogb09vTzBvMDBPTzAKICAgZXhjZXB0IDoKICAgIHBhc3MKICAgaWYgaUlJMW8wME9PMCAhPSAnJyA6CiAgICBPTzBPMG9vT09PMDAgPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL0NvbW11bml0eV9CdWlsZHMvZG93bmxvYWRjb3VudC5waHA/aWQ9JXMnICUgKCBpSUkxbzAwT08wICkKICAgdHJ5IDoKICAgIG9PT09Pb09PMG8gKCBPTzBPMG9vT09PMDAgLCA1ICkKICAgZXhjZXB0IDoKICAgIHBhc3MKICAgIGlmIDkzIC0gOTM6IG9vbzBPME8wMCAuIGkxMWlJaWlJaWkKICAgIGlmIDI0IC0gMjQ6IElJMTFpSWlJSUlpSSAuIG8wb28gKyBPb09vMG8gLiBvb29Pb29PT28wT08gLSBvT29PMG8wME9PMCAlIG9vbzBPME8wMAogICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggT09vMDBvT28gKSA6CiAgICB0cnkgOgogICAgIG9zIC4gbWFrZWRpcnMgKCBPT28wMG9PbyApCiAgICBleGNlcHQgOgogICAgIHBhc3MKICAgICBpZiA0OSAtIDQ5OiBPT08wTzBPMG9vb29vIC4gaWlJSTExaTFJMUlJaSAvIElJSUlpaUlJMTExCiAgIGkxMSAuIG9rICggIkRvd25sb2FkIENvbXBsZXRlIC0gUHJlc3MgT0sgVG8gUmVib290IiAsICdPbmNlIHlvdSBwcmVzcyBPSyB5b3VyIGRldmljZSB3aWxsIGF0dGVtcHQgdG8gcmVib290LCBpZiBpdCBoYXNuXCd0IHJlYm9vdGVkIHdpdGhpbiAzMCBzZWNvbmRzIHBsZWFzZSBwdWxsIHRoZSBwb3dlciB0byBtYW51YWxseSBzaHV0ZG93bi4gV2hlbiBib290aW5nIHlvdSBtYXkgc2VlIGxpbmVzIG9mIHRleHQsIGRvblwndCB3b3JyeSB0aGlzIGlzIG5vcm1hbCB1cGRhdGUgYmVoYXZpb3VyIScgKQogICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnUmVib290JyApCiAgIGlmIDI5IC0gMjk6IG9Pb08wbzAwT08wIC8gb29vT29vT09vME9PICogT09PME8wTzBvb29vbyAtIGkxMWlJaWlJaWkgLSBvMG9vICsgSUlJSWlpSUkxMTEKICAgaWYgODYgLSA4NjogbzAwME8wbyAvIG9Pb08wbzAwT08wICogSUlJSWlpSUkxMTEgJSBpMTFpSWlpSWlpCmRlZiBJMWkxMTFJSSAoICkgOgogTzAwME8gPSAwCiBpZiBpMTEgLiB5ZXNubyAoICdGdWxsIFdpcGUgQW5kIE5ldyBJbnN0YWxsJyAsICdUaGlzIGlzIGEgZ3JlYXQgb3B0aW9uIGlmIHlvdVwncmUgZW5jb3VudGVyaW5nIGFueSBpc3N1ZXMgd2l0aCB5b3VyIGRldmljZS4gVGhpcyB3aWxsIHdpcGUgYWxsIHlvdXIgS29kaSBzZXR0aW5ncyBhbmQgcmVzdG9yZSB3aXRoIHdoYXRldmVyIGlzIGluIHRoZSBiYWNrdXAsIGRvIHlvdSB3aXNoIHRvIGNvbnRpbnVlPycgLCBub2xhYmVsID0gJ0NhbmNlbCcgLCB5ZXNsYWJlbCA9ICdBY2NlcHQnICkgOgogIElJaWkxSWkgPSBpMTEgLiBicm93c2UgKCAxICwgJ1NlbGVjdCB0aGUgYmFja3VwIGZpbGUgeW91IHdhbnQgdG8gcmVzdG9yZScgLCAnZmlsZXMnICwgJy50YXInICwgRmFsc2UgLCBGYWxzZSAsIE8wMDBvbzBPICkKICBpZiBJSWlpMUlpID09ICcnIDoKICAgTzAwME8gPSAxCiAgIGlmIDggLSA4OiBJSTExaUlpSUlJaUkKICBpZiBPMDAwTyA9PSAxIDoKICAgeGJtYyAuIGxvZyAoICIjIyMgTm8gZmlsZSBzZWxlY3RlZCwgcXVpdHRpbmcgcmVzdG9yZSBwcm9jZXNzICMjIyIgKQogICByZXR1cm4KICBvT09vMCA9IG9zIC4gcGF0aCAuIGpvaW4gKCBPT09PaTExaTEgLCBJaTFJaSAoICkgKyAnLnRhcicgKQogIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBPT09PaTExaTEgKSA6CiAgIHRyeSA6CiAgICBvcyAuIG1ha2VkaXJzICggT09PT2kxMWkxICkKICAgZXhjZXB0IDoKICAgIHBhc3MKICBJMTEgLiBjcmVhdGUgKCAnQ29weWluZyBGaWxlIFRvIFJlc3RvcmUgRm9sZGVyJyAsICcnICwgJ1BsZWFzZSB3YWl0Li4uJyApCiAgc2h1dGlsIC4gY29weWZpbGUgKCBJSWlpMUlpICwgb09PbzAgKQogIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdSZWJvb3QnICkKICBpZiA0NCAtIDQ0OiBvMG9vICUgaTExaUlpaUlpaSAuIE9vT28wbyAtIE9PTzBPME8wb29vb28gLyBvb28wTzBPMDAgLiBpMTFJaWkKICBpZiAyMyAtIDIzOiBvMGlpMUkgJSBJSWlpMUkKZGVmIE8wT09vMDBPTyAoICkgOgogaTFpSWlJaWkgKCApCiBpZiBpMWlJSWkxMWkxMTFJICggKSA6CiAgT09vMG9PMDBvb08wMCAoICcnICwgJ1tDT0xPUj1kb2RnZXJibHVlXVJlc3RvcmUgYSBsb2NhbGx5IHN0b3JlZCBPcGVuRUxFQyBCYWNrdXBbL0NPTE9SXScgLCAnJyAsICdyZXN0b3JlX2xvY2FsX09FJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdSZXN0b3JlIEEgRnVsbCBPRSBTeXN0ZW0gQmFja3VwJyApCiAgaWYgMzAgLSAzMDogbzBpaTFJCiBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPWRvZGdlcmJsdWVdUmVzdG9yZSBBIExvY2FsbHkgc3RvcmVkIGJ1aWxkWy9DT0xPUl0nICwgJ2xvY2FsJyAsICdyZXN0b3JlX2xvY2FsX0NCJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdSZXN0b3JlIEEgRnVsbCBTeXN0ZW0gQmFja3VwJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnW0NPTE9SPWRvZGdlcmJsdWVdUmVzdG9yZSBMb2NhbCBndWlzZXR0aW5ncyBmaWxlWy9DT0xPUl0nICwgJ3VybCcgLCAnTG9jYWxHVUlEaWFsb2cnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ0JhY2sgVXAgWW91ciBGdWxsIFN5c3RlbScgKQogaWYgNTcgLSA1Nzogb29vT29vT09vME9PIC4gbzBpaTFJICUgb09vTzBvMDBPTzAgLSBvMGlpMUkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMSAsICdhZGRvbnMuemlwJyApICkgOgogIE9PbzBvTzAwb29PMDAgKCAnJyAsICdSZXN0b3JlIFlvdXIgQWRkb25zJyAsICdhZGRvbnMnICwgJ3Jlc3RvcmVfemlwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdSZXN0b3JlIFlvdXIgQWRkb25zJyApCiAgaWYgNjQgLSA2NDogbzBpaTFJCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggSTExaTEgLCAnYWRkb25fZGF0YS56aXAnICkgKSA6CiAgT09vMG9PMDBvb08wMCAoICcnICwgJ1Jlc3RvcmUgWW91ciBBZGRvbiBVc2VyRGF0YScgLCAnYWRkb25fZGF0YScgLCAncmVzdG9yZV96aXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ1Jlc3RvcmUgWW91ciBBZGRvbiBVc2VyRGF0YScgKQogIGlmIDY5IC0gNjk6IE9PTzBPME8wb29vb28gJSBvb28wTzBPMDAgLiBpaUlJMTFpMUkxSUlpICsgb29vME8wTzAwCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggSTExaTEgLCAnZ3Vpc2V0dGluZ3MueG1sJyApICkgOgogIE9PbzBvTzAwb29PMDAgKCAnJyAsICdSZXN0b3JlIEd1aXNldHRpbmdzLnhtbCcgLCBpaUkxSWlJICwgJ3Jlc3RvcmVfYmFja3VwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdSZXN0b3JlIFlvdXIgZ3Vpc2V0dGluZ3MueG1sJyApCiAgaWYgNTcgLSA1Nzogb09vTzBvMDBPTzAgLiBPb09vMG8gLiBPbzAwb28wb08gLiBpaUlJMTFpMUkxSUlpICUgb29vT29vT09vME9PICogb09vTzBvMDBPTzAKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMSAsICdmYXZvdXJpdGVzLnhtbCcgKSApIDoKICBPT28wb08wMG9vTzAwICggJycgLCAnUmVzdG9yZSBGYXZvdXJpdGVzLnhtbCcgLCBJSTExaWlpaTFJaSAsICdyZXN0b3JlX2JhY2t1cCcgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnUmVzdG9yZSBZb3VyIGZhdm91cml0ZXMueG1sJyApCiAgaWYgODQgLSA4NDogaTExSWlpIC4gb09vTzBvMDBPTzAKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMSAsICdzb3VyY2VzLnhtbCcgKSApIDoKICBPT28wb08wMG9vTzAwICggJycgLCAnUmVzdG9yZSBTb3VyY2UueG1sJyAsIE9PMG9Pb28gLCAncmVzdG9yZV9iYWNrdXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ1Jlc3RvcmUgWW91ciBzb3VyY2VzLnhtbCcgKQogIGlmIDEgLSAxOiBpaUlJMTFpMUkxSUlpICogT09PME8wTzBvb29vbyAuIG8wMDBPMG8gKyBpMTFJaWkgLyBJaWkgKyBvMG8KIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMSAsICdhZHZhbmNlZHNldHRpbmdzLnhtbCcgKSApIDoKICBPT28wb08wMG9vTzAwICggJycgLCAnUmVzdG9yZSBBZHZhbmNlZHNldHRpbmdzLnhtbCcgLCBPMG8wT28gLCAncmVzdG9yZV9iYWNrdXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ1Jlc3RvcmUgWW91ciBhZHZhbmNlZHNldHRpbmdzLnhtbCcgKQogIGlmIDY4IC0gNjg6IE9vbzAwb09vMG9PbwogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIEkxMWkxICwgJ2tleWJvYXJkLnhtbCcgKSApIDoKICBPT28wb08wMG9vTzAwICggJycgLCAnUmVzdG9yZSBBZHZhbmNlZHNldHRpbmdzLnhtbCcgLCBPMDBvME9PICwgJ3Jlc3RvcmVfYmFja3VwJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICdSZXN0b3JlIFlvdXIga2V5Ym9hcmQueG1sJyApCiAgaWYgNjEgLSA2MTogSUkxMWlJaUlJSWlJIC4gb09vTzBvMDBPTzAgKiBvb29Pb29PT28wT08gLyBPb09vMG8gLSBvMG9vCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggSTExaTEgLCAnUnNzRmVlZHMueG1sJyApICkgOgogIE9PbzBvTzAwb29PMDAgKCAnJyAsICdSZXN0b3JlIFJzc0ZlZWRzLnhtbCcgLCBPME8gLCAncmVzdG9yZV9iYWNrdXAnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJ1Jlc3RvcmUgWW91ciBSc3NGZWVkcy54bWwnICkKICBpZiAxOCAtIDE4OiBPb09vMG8KICBpZiAzNCAtIDM0OiBvb28wTzBPMDAgKyBPb09vMG8gKiBvMG8gLyBPb28wMG9PbzBvT28KZGVmIElpSTFpMSAoIHVybCApIDoKIG9vb09vICggKQogaWYgJ2FkZG9ucycgaW4gdXJsIDoKICBJMUlPMCA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIEkxMWkxICwgJ2FkZG9ucy56aXAnICkgKQogIGkxSTFJaWkxSWlpSWkgPSBpMWlpSUlJMTExaWkKICBpZiA3MyAtIDczOiBPT08wTzBPMG9vb29vIC4gT29PbzBvIC0gSUkxICUgbzBvICUgTzAwb29vb28wMAogZWxzZSA6CiAgSTFJTzAgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMSAsICdhZGRvbl9kYXRhLnppcCcgKSApCiAgaTFJMUlpaTFJaWlJaSA9IG9vMG8wTzAwCiAgaWYgMTQgLSAxNDogT29PbzBvICsgSUlJSWlpSUkxMTEgKiBpaUlJMTFpMUkxSUlpCiBpZiAnQmFja3VwJyBpbiBPT28wIDoKICBpMWlJICggKQogIEkxMSAuIGNyZWF0ZSAoICJDcmVhdGluZyBCYWNrdXAiICwgIkJhY2tpbmcgVXAiICwgJycgLCAnUGxlYXNlIFdhaXQnICkKICBPME8wME8gPSB6aXBmaWxlIC4gWmlwRmlsZSAoIEkxSU8wICwgJ3cnICwgemlwZmlsZSAuIFpJUF9ERUZMQVRFRCApCiAgaUlpMUlpID0gbGVuICggaTFJMUlpaTFJaWlJaSApCiAgSWlJMUlJSUlJMUkgPSBbIF0KICBJMUkxSWlJaTEgPSBbIF0KICBmb3IgT09PbzAwICwgT29JSWkxaUkgLCBvTzBPb28wT29vT09vIGluIG9zIC4gd2FsayAoIGkxSTFJaWkxSWlpSWkgKSA6CiAgIGZvciBmaWxlIGluIG9PME9vbzBPb29PT28gOgogICAgSTFJMUlpSWkxIC4gYXBwZW5kICggZmlsZSApCiAgb28gPSBsZW4gKCBJMUkxSWlJaTEgKQogIGZvciBPT09vMDAgLCBPb0lJaTFpSSAsIG9PME9vbzBPb29PT28gaW4gb3MgLiB3YWxrICggaTFJMUlpaTFJaWlJaSApIDoKICAgZm9yIGZpbGUgaW4gb08wT29vME9vb09PbyA6CiAgICBJaUkxSUlJSUkxSSAuIGFwcGVuZCAoIGZpbGUgKQogICAgaWkxMSA9IGxlbiAoIElpSTFJSUlJSTFJICkgLyBmbG9hdCAoIG9vICkgKiAxMDAKICAgIEkxMSAuIHVwZGF0ZSAoIGludCAoIGlpMTEgKSAsICJCYWNraW5nIFVwIiAsICdbQ09MT1IgeWVsbG93XSVzWy9DT0xPUl0nICUgZmlsZSAsICdQbGVhc2UgV2FpdCcgKQogICAgb09vbzAgPSBvcyAuIHBhdGggLiBqb2luICggT09PbzAwICwgZmlsZSApCiAgICBpZiBub3QgJ3RlbXAnIGluIE9vSUlpMWlJIDoKICAgICBpZiBub3QgT08wbyBpbiBPb0lJaTFpSSA6CiAgICAgIGltcG9ydCB0aW1lCiAgICAgIE9PT29vMG9vT28wME8gPSAnMDEvMDEvMTk4MCcKICAgICAgSWkxaTFJMSA9IHRpbWUgLiBzdHJmdGltZSAoICclZC8lbS8lWScgLCB0aW1lIC4gZ210aW1lICggb3MgLiBwYXRoIC4gZ2V0bXRpbWUgKCBvT29vMCApICkgKQogICAgICBpZiBJaTFpMUkxID4gT09Pb28wb29PbzAwTyA6CiAgICAgICBPME8wME8gLiB3cml0ZSAoIG9Pb28wICwgb09vbzAgWyBpSWkxSWkgOiBdICkKICBPME8wME8gLiBjbG9zZSAoICkKICBJMTEgLiBjbG9zZSAoICkKICBpMTEgLiBvayAoICJCYWNrdXAgQ29tcGxldGUiICwgIllvdSBBcmUgTm93IEJhY2tlZCBVcCIgLCAnJyAsICcnICkKICBpZiA0OSAtIDQ5OiBpaUlJMTFpMUkxSUlpCiBlbHNlIDoKICBJMTEgLiBjcmVhdGUgKCAiRXh0cmFjdGluZyBaaXAiICwgIkNoZWNraW5nICIgLCAnJyAsICdQbGVhc2UgV2FpdCcgKQogIEkxMSAuIHVwZGF0ZSAoIDAgLCAiIiAsICJFeHRyYWN0aW5nIFppcCBQbGVhc2UgV2FpdCIgKQogIGV4dHJhY3QgLiBhbGwgKCBJMUlPMCAsIGkxSTFJaWkxSWlpSWkgLCBJMTEgKQogIHRpbWUgLiBzbGVlcCAoIDEgKQogIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdVcGRhdGVMb2NhbEFkZG9ucyAnICkKICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAiVXBkYXRlQWRkb25SZXBvcyIgKQogIGlmIDU3IC0gNTc6IE9PTzBPME8wb29vb28gKiBpMTFJaWkgLSBvb28wTzBPMDAgLSBJSWlpMUkgKiBvb28wTzBPMDAKICBpZiAnQmFja3VwJyBpbiBPT28wIDoKICAgaTExIC4gb2sgKCAiSW5zdGFsbCBDb21wbGV0ZSIgLCAnS29kaSB3aWxsIG5vdyBjbG9zZS4gSnVzdCByZS1vcGVuIEtvZGkgYW5kIHdhaXQgZm9yIGFsbCB0aGUgdXBkYXRlcyB0byBjb21wbGV0ZS4nICkKICAgSWlJSTEgKCApCiAgIGlmIDkgLSA5OiBPbzAwb28wb08gLiBvMG8KICBlbHNlIDoKICAgaTExIC4gb2sgKCAiU1VDQ0VTUyEiICwgIllvdSBBcmUgTm93IFJlc3RvcmVkIiAsICcnICwgJycgKQogICBpZiAyMyAtIDIzOiBPT08wTzBPMG9vb29vICUgSUkxIC0gT09PME8wTzBvb29vbyAuIG8wMDBPMG8gKyBpMTFpSWlpSWlpCiAgIGlmIDk2IC0gOTY6IGkxMUlpaSAlIE9PTzBPME8wb29vb28KZGVmIE9vbzBvT09PICggdXJsICkgOgogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1J1bkFkZG9uKCVzKScgJSB1cmwgKQogaWYgNTggLSA1ODogSUlpaTFJICsgaTExSWlpIC8gbzBvbyAlIGkxMUlpaSAlIG8waWkxSSAlIElJaWkxSQogaWYgNDggLSA0ODogT09PME8wTzBvb29vbyAlIG8wbyAqIE9vbzAwb09vMG9PbyAuIGlpSUkxMWkxSTFJSWkgLiBvT29PMG8wME9PMApkZWYgSTFpaWlpSSAoIHRpdGxlICkgOgogb09vME9PMG8wb08gPSAnJwogTzBPb08wME9vT08gPSB4Ym1jIC4gS2V5Ym9hcmQgKCBvT28wT08wbzBvTyAsIHRpdGxlICkKIE8wT29PMDBPb09PIC4gZG9Nb2RhbCAoICkKIGlmIE8wT29PMDBPb09PIC4gaXNDb25maXJtZWQgKCApIDoKICBvT28wT08wbzBvTyA9IE8wT29PMDBPb09PIC4gZ2V0VGV4dCAoICkgLiByZXBsYWNlICggJyAnICwgJyUyMCcgKQogIGlmIG9PbzBPTzBvMG9PID09IE5vbmUgOgogICByZXR1cm4gRmFsc2UKIHJldHVybiBvT28wT08wbzBvTwogaWYgNDEgLSA0MTogaTExaUlpaUlpaSAtIG8wb28KIGlmIDIwIC0gMjA6IGkxMUlpaSAqIE9vT28wbyAqIG8waWkxSSAtIGkxMUlpaQpkZWYgaTFJMUlpaUlJSWlpSSAoIHVybCApIDoKIE8wTzAgPSBvTzBvb28wMG8wbzAwME9vICggaGVhZGluZyA9ICJTZWFyY2ggZm9yIGFkZC1vbnMiICkKIGlmIDYyIC0gNjI6IGlpSUkxMWkxSTFJSWkgKyBJSTEgLyBvb28wTzBPMDAKIGlmICggbm90IE8wTzAgKSA6IHJldHVybiBGYWxzZSAsIDAKIGlmIDYwIC0gNjA6IElJSUlpaUlJMTExIC8gSWlpIC4gbzBvICUgSUkxMWlJaUlJSWlJCiBpZiA2MSAtIDYxOiBPT08wTzBPMG9vb29vIC4gSUlJSWlpSUkxMTEgLiBPT08wTzBPMG9vb29vICogaTExaUlpaUlpaSAqIE9vbzAwb09vMG9PbyAvIE9vT28wbwogb09JSUlJID0gdXJsbGliIC4gcXVvdGVfcGx1cyAoIE8wTzAgKQogdXJsICs9IG9PSUlJSQogb29vT08wMG9vMCAoIHVybCApCiBpZiA2OSAtIDY5OiBvMG8KIGlmIDE3IC0gMTc6IG8wbwpkZWYgaTExaWlpaWlJaTEgKCB1cmwgKSA6CiBPME8wID0gb08wb29vMDBvMG8wMDBPbyAoIGhlYWRpbmcgPSAiU2VhcmNoIGZvciBjb250ZW50IiApCiBpZiA1NyAtIDU3OiBJSTEgLiBvb28wTzBPMDAgKyBPT08wTzBPMG9vb29vICogTzAwb29vb28wMCAuIElJMSAlIE9vMDBvbzBvTwogaWYgOTcgLSA5NzogT29vMDBvT28wb09vICUgb29vT29vT09vME9PIC0gT29vMDBvT28wb09vIC4gaTExSWlpCiBpZiAoIG5vdCBPME8wICkgOiByZXR1cm4gRmFsc2UgLCAwCiBpZiA1MCAtIDUwOiBvb28wTzBPMDAgJSBvT29PMG8wME9PMCArIG8wbyAqIGlpSUkxMWkxSTFJSWkgLSBpMTFpSWlpSWlpCiBpZiAyNCAtIDI0OiBpMTFpSWlpSWlpIC4gaTExSWlpICsgaTExSWlpIC0gaTExaUlpaUlpaSAlIElJMTFpSWlJSUlpSQogb09JSUlJID0gdXJsbGliIC4gcXVvdGVfcGx1cyAoIE8wTzAgKQogdXJsICs9IG9PSUlJSQogT08wb09vICggdXJsICkKIGlmIDU4IC0gNTg6IG8wMDBPMG8KZGVmIE9PMDBvT08gKCB1cmwgKSA6CiBPTyA9ICdodHRwOi8vbm9vYnNhbmRuZXJkcy5jb20vVEkvQ29tbXVuaXR5X0J1aWxkcy9jb21tdW5pdHlfYnVpbGRzLnBocD9pZD0lcycgJSAoIHVybCApCiBJaTFpSTExMUlJMUkxID0gb09PT09vT08wbyAoIE9PICwgNSApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApCiBvMG9vb29PMG8wTyA9IHJlIC4gY29tcGlsZSAoICduYW1lPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBpMWlJMUlJaTFJID0gcmUgLiBjb21waWxlICggJ2F1dGhvcj0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaUkxaTExMUkxSWkgPSByZSAuIGNvbXBpbGUgKCAndmVyc2lvbj0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogT09vMCA9IG8wb29vb08wbzBPIFsgMCBdIGlmICggbGVuICggbzBvb29vTzBvME8gKSA+IDAgKSBlbHNlICcnCiBJaWlpSTFJaSA9IGkxaUkxSUlpMUkgWyAwIF0gaWYgKCBsZW4gKCBpMWlJMUlJaTFJICkgPiAwICkgZWxzZSAnJwogSUlJSUlvMG9vT29PMDAwb08gPSBpSTFpMTExSTFJaSBbIDAgXSBpZiAoIGxlbiAoIGlJMWkxMTFJMUlpICkgPiAwICkgZWxzZSAnJwogaTExIC4gb2sgKCBPT28wICwgJ0F1dGhvcjogW0NPTE9SPWRvZGdlcmJsdWVdJyArIElpaWlJMUlpICsgJ1svQ09MT1JdICAgICAgTGF0ZXN0IFZlcnNpb246IFtDT0xPUj1kb2RnZXJibHVlXScgKyBJSUlJSW8wb29Pb08wMDBvTyArICdbL0NPTE9SXScgLCAnJyAsICdDbGljayBPSyB0byB2aWV3IHRoZSBidWlsZCBwYWdlLicgKQogdHJ5IDoKICBPME9PT09PTzBvb08gKCB1cmwgKyAnJnZpc2liaWxpdHk9aG9tZXBhZ2UnICwgdXJsICkKIGV4Y2VwdCA6CiAgcmV0dXJuCiAgeGJtYyAuIGxvZyAoICIjIyMgQ291bGQgbm90IGZpbmQgYnVpbGQgTm8uICVzIiAlIHVybCApCiAgaTExIC4gb2sgKCAnQnVpbGQgTm90IEZvdW5kJyAsICdTb3JyeSB3ZSBjb3VsZG5cJ3QgZmluZCB0aGUgYnVpbGQsIGl0IG1heSBiZSBpdFwncyBtYXJrZWQgYXMgcHJpdmF0ZSBvciBzZXJ2ZXJzIG1heSBiZSBidXN5LiBQbGVhc2UgdHJ5IG1hbnVhbGx5IHNlYXJjaGluZyB2aWEgdGhlIENvbW11bml0eSBCdWlsZHMgc2VjdGlvbicgKQogIGlmIDkxIC0gOTE6IG8wMDBPMG8gKiBPbzAwb28wb08gLSBpaUlJMTFpMUkxSUlpICogTzAwb29vb28wMCAlIG9Pb08wbzAwT08wICsgSUlpaTFJCiAgaWYgMzcgLSAzNzogT09PME8wTzBvb29vbwpkZWYgT09PTzAwb08gKCB1cmwgKSA6CiBpMTEgLiBvayAoICJUaGlzIGJ1aWxkIGlzIG5vdCBjb21wbGV0ZSIgLCAnVGhlIGd1aXNldHRpbmdzLnhtbCBmaWxlIHdhcyBub3QgY29waWVkIG92ZXIgZHVyaW5nIHRoZSBsYXN0IGluc3RhbGwgcHJvY2Vzcy4gQ2xpY2sgT0sgdG8gZ28gdG8gdGhlIGJ1aWxkIHBhZ2UgYW5kIGNvbXBsZXRlIEluc3RhbGwgU3RlcCAyIChndWlzZXR0aW5ncyBmaXgpLicgKQogaWYgNzIgLSA3MjogSUkxMWlJaUlJSWlJIC4gSWlpIC8gT29vMDBvT28wb09vCiB0cnkgOgogIE8wT09PT09PMG9vTyAoIHVybCArICcmdmlzaWJpbGl0eT1ob21lcGFnZScgLCB1cmwgKQogIGlmIDY5IC0gNjk6IElJMTFpSWlJSUlpSSAqIE9vbzAwb09vMG9PbyAtIGkxMUlpaSAtIE8wMG9vb29vMDAgKyBpMTFpSWlpSWlpCiBleGNlcHQgOgogIHJldHVybgogIHhibWMgLiBsb2cgKCAiIyMjIENvdWxkIG5vdCBmaW5kIGJ1aWxkIE5vLiAlcyIgJSB1cmwgKQogIGkxMSAuIG9rICggJ0J1aWxkIE5vdCBGb3VuZCcgLCAnU29ycnkgd2UgY291bGRuXCd0IGZpbmQgdGhlIGJ1aWxkLCBpdCBtYXkgYmUgaXRcJ3MgbWFya2VkIGFzIHByaXZhdGUuIFBsZWFzZSB0cnkgbWFudWFsbHkgc2VhcmNoaW5nIHZpYSB0aGUgQ29tbXVuaXR5IEJ1aWxkcyBzZWN0aW9uJyApCiAgaWYgNTAgLSA1MDogSUkxICogTzAwb29vb28wMCAvIG9vb09vb09PbzBPTwogIGlmIDgzIC0gODM6IE8wMG9vb29vMDAKZGVmIGlpaUlpaWkxMWkxaSAoICkgOgogT08gPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL2xvZ2luL2xvZ2luX2RldGFpbHMucGhwP3VzZXI9JXMmcGFzcz0lcycgJSAoIE9vICwgbzBPICkKIElpMWlJMTExSUkxSTEgPSBvT09PT29PTzBvICggT08gLCA1ICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1xyJyAsICcnICkKIG9vbzBPME9vME8gPSByZSAuIGNvbXBpbGUgKCAnbG9naW5fbXNnPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiBPb29JaWkxSTFpSSA9IG9vbzBPME9vME8gWyAwIF0gaWYgKCBsZW4gKCBvb28wTzBPbzBPICkgPiAwICkgZWxzZSAnJwogT28wbyA9IHJlIC4gY29tcGlsZSAoICdwb3N0cz0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaTFpT08wME8wTzAwb09PTyA9IHJlIC4gY29tcGlsZSAoICdtZXNzYWdlcz0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogaWkxMTExaUlJaUlJaSA9IHJlIC4gY29tcGlsZSAoICd1bnJlYWQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIG9vT28wT28gPSByZSAuIGNvbXBpbGUgKCAnZW1haWw9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKIEkxMWkxSTExMUlJMUlpSSA9IGkxaU9PMDBPME8wMG9PT08gWyAwIF0gaWYgKCBsZW4gKCBpMWlPTzAwTzBPMDBvT09PICkgPiAwICkgZWxzZSAnJwogb28wME8wb09vID0gaWkxMTExaUlJaUlJaSBbIDAgXSBpZiAoIGxlbiAoIGlpMTExMWlJSWlJSWkgKSA+IDAgKSBlbHNlICcnCiBJaUkxSWkgPSBvb09vME9vIFsgMCBdIGlmICggbGVuICggb29PbzBPbyApID4gMCApIGVsc2UgJycKIG9PTzAwbzBvb29PbzAgPSBPbzBvIFsgMCBdIGlmICggbGVuICggT28wbyApID4gMCApIGVsc2UgJycKIGlmIDE3IC0gMTc6IG9Pb08wbzAwT08wCiBPTyA9ICdodHRwOi8vbm9vYnNhbmRuZXJkcy5jb20vVEkvbWVudV9jaGVjaycKIHRyeSA6CiAgSWkxaUkxMTFJSTFJMSA9IG9PT09Pb09PMG8gKCBPTyAsIDEwICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1xyJyAsICcnICkKICBPb08wT09vTzAgPSByZSAuIGNvbXBpbGUgKCAnZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIElpMWlJMTExSUkxSTEgKQogIGlpSTExaSA9IE9vTzBPT29PMCBbIDAgXSBpZiAoIGxlbiAoIE9vTzBPT29PMCApID4gMCApIGVsc2UgJ25vbmUnCiBleGNlcHQgOgogIGlpSTExaSA9ICdub25lJwogIGlmIDYyIC0gNjI6IG9vbzBPME8wMCAtIElJMTFpSWlJSUlpSSAvIE9vbzAwb09vMG9PbyAuIE9vbzAwb09vMG9PbwogaWYgJ1dlbGNvbWUgQmFjaycgaW4gT29vSWlpMUkxaUkgOgogIHByaW50ICIjIyMgQVRURU1QVElORyBUTyBXUklURSBDT09LSUUgIgogIG9vME8wID0gb3BlbiAoIElJaWlpaWlpSWkxSTEgLCBtb2RlID0gJ3crJyApCiAgb28wTzAgLiB3cml0ZSAoICdkPSInICsgYmluYXNjaWkgLiBoZXhsaWZ5ICggSWkxSWkgKCApICkgKyAnIlxubD0iJyArIGJpbmFzY2lpIC4gaGV4bGlmeSAoIE9vb0lpaTFJMWlJICkgKyAnIlxucD0iJyArIGJpbmFzY2lpIC4gaGV4bGlmeSAoIG9PTzAwbzBvb29PbzAgKSArICciXG5tPSInICsgYmluYXNjaWkgLiBoZXhsaWZ5ICggaWlJMTFpICkgKyAnIicgKQogIG9vME8wIC4gY2xvc2UgKCApCiBpZiBub3QgIkFjY291bnQgY3VycmVudGx5IHJlc3RyaWN0ZWQiIGluIE9vb0lpaTFJMWlJIDoKICBpMTEgLiBvayAoICdBY2NvdW50IERldGFpbHMnICwgJ1VzZXJuYW1lOiAgJyArIE9vICwgJ0VtYWlsOiAnICsgSWlJMUlpICwgJ1VucmVhZCBNZXNzYWdlczogJyArIG9vMDBPMG9PbyArICcvJyArIEkxMWkxSTExMUlJMUlpSSArICdbQ1JdUG9zdHM6ICcgKyBvT08wMG8wb29vT28wICkKIGVsc2UgOgogIGkxMSAuIG9rICggJ0FjY291bnQgQ3VycmVudGx5IFJlc3RyaWN0ZWQnICwgJ1lvdXIgYWNjb3VudCBoYXMgYSByZXN0cmljdGlvbiBpbiBwbGFjZSwgdGhpcyBpcyB1c3VhbGx5IGZvciBhY2NvdW50IHNoYXJpbmcuIEFueSB1c2VycyBjYXVnaHQgc2hhcmluZyBhY2NvdW50cyBhcmUgYXV0b21hdGljYWxseSBwdXQgb24gYSBzdXNwZW5zaW9uIGFuZCBjb250aW51YWwgYWJ1c2Ugd2lsbCByZXN1bHQgaW4gYSBwZXJtYW5lbnQgYmFuLicgKQogIGlmIDQ5IC0gNDk6IElJaWkxSSAvIG8wbwogIGlmIDUzIC0gNTM6IG8wb28KZGVmIE8wb29PMCAoIHVybCAsIHR5cGUgKSA6CiBJaUkxMWkxSUlpaUkgPSBPT29vTzBPT29vCiBpZiB0eXBlID09ICdjb21tdW5pdHlidWlsZHMnIDoKICBJaUkxMWkxSUlpaUkgPSAnbWFpbm1lbnUvYnVpbGRzLnBuZycKICBvb29vT29vb28gPSAnZ3JhYl9idWlsZHMnCiAgaWYgdXJsIC4gZW5kc3dpdGggKCAidmlzaWJpbGl0eT1wdWJsaWMiICkgOgogICBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPXllbGxvd11NYW51YWwgU2VhcmNoWy9DT0xPUl0nICwgJyZ2aXNpYmlsaXR5PXB1YmxpYycgLCAnbWFudWFsX3NlYXJjaCcgLCBJaUkxMWkxSUlpaUkgLCAnJyAsICcnICwgJycgKQogIGlmIHVybCAuIGVuZHN3aXRoICggInZpc2liaWxpdHk9cHJpdmF0ZSIgKSA6CiAgIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdbQ09MT1I9eWVsbG93XU1hbnVhbCBTZWFyY2hbL0NPTE9SXScgLCAnJnZpc2liaWxpdHk9cHJpdmF0ZScgLCAnbWFudWFsX3NlYXJjaCcgLCBJaUkxMWkxSUlpaUkgLCAnJyAsICcnICwgJycgKQogaWYgdHlwZSA9PSAnYWRkb25zJyA6CiAgSWlJMTFpMUlJaWlJID0gJ21haW5tZW51L2FkZG9ucy5wbmcnCiAgb29vb09vb29vID0gJ2dyYWJfYWRkb25zJwogIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1Tb3J0IGJ5IE1vc3QgUG9wdWxhclsvQ09MT1JdJyAsIHN0ciAoIHVybCApICsgJyZzb3J0eD1kb3dubG9hZHMmb3JkZXJ4PURFU0MnICwgb29vb09vb29vICwgSWlJMTFpMUlJaWlJICwgJycgLCAnJyAsICcnICkKIGlmIHR5cGUgIT0gJ2FkZG9ucycgOgogIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1Tb3J0IGJ5IE1vc3QgUG9wdWxhclsvQ09MT1JdJyAsIHN0ciAoIHVybCApICsgJyZzb3J0eD1kb3dubG9hZGNvdW50Jm9yZGVyeD1ERVNDJyAsIG9vb29Pb29vbyAsIElpSTExaTFJSWlpSSAsICcnICwgJycgLCAnJyApCiBlbHNlIDoKICBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRvZGdlcmJsdWVdU29ydCBieSBOZXdlc3RbL0NPTE9SXScgLCBzdHIgKCB1cmwgKSArICcmc29ydHg9Y3JlYXRlZCZvcmRlcng9REVTQycgLCBvb29vT29vb28gLCBJaUkxMWkxSUlpaUkgLCAnJyAsICcnICwgJycgKQogIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdbQ09MT1I9ZG9kZ2VyYmx1ZV1Tb3J0IGJ5IFJlY2VudGx5IFVwZGF0ZWRbL0NPTE9SXScgLCBzdHIgKCB1cmwgKSArICcmc29ydHg9dXBkYXRlZCZvcmRlcng9REVTQycgLCBvb29vT29vb28gLCBJaUkxMWkxSUlpaUkgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1tDT0xPUj1kb2RnZXJibHVlXVNvcnQgYnkgQS1aWy9DT0xPUl0nICwgc3RyICggdXJsICkgKyAnJnNvcnR4PW5hbWUmb3JkZXJ4PUFTQycgLCBvb29vT29vb28gLCBJaUkxMWkxSUlpaUkgLCAnJyAsICcnICwgJycgKQogaWYgdHlwZSA9PSAncHVibGljX0NCJyA6CiAgT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ1tDT0xPUj1kb2RnZXJibHVlXVNvcnQgYnkgR2VucmVbL0NPTE9SXScgLCB1cmwgLCAnZ2VucmVzJyAsIElpSTExaTFJSWlpSSAsICcnICwgJycgLCAnJyApCiAgaWYgOTQgLSA5NDogSUlpaTFJIC8gSWlpICUgSUlpaTFJICogTzAwb29vb28wMCAqIG8wbwogIGlmIDUgLSA1OiBPT08wTzBPMG9vb29vIC4gaTExaUlpaUlpaSArIElJMSAvIG9vbzBPME8wMCAlIG8wMDBPMG8KZGVmIG9PTzBvT29vb29PICggKSA6CiBJSWkxSWlJSSAoICdTcGVlZCBUZXN0IEluc3RydWN0aW9ucycgLCAnW0NPTE9SPWJsdWVdW0JdV2hhdCBmaWxlIHNob3VsZCBJIHVzZTogWy9CXVsvQ09MT1JdW0NSXVRoaXMgZnVuY3Rpb24gd2lsbCBkb3dubG9hZCBhIGZpbGUgYW5kIHdpbGwgd29yayBvdXQgeW91ciBzcGVlZCBiYXNlZCBvbiBob3cgbG9uZyBpdCB0b29rIHRvIGRvd25sb2FkLiBZb3Ugd2lsbCB0aGVuIGJlIG5vdGlmaWVkIG9mICcKICd3aGF0IHF1YWxpdHkgc3RyZWFtcyB5b3UgY2FuIGV4cGVjdCB0byBzdHJlYW0gd2l0aG91dCBidWZmZXJpbmcuIFlvdSBjYW4gY2hvb3NlIHRvIGRvd25sb2FkIGEgMTBNQiwgMTZNQiwgMzJNQiwgNjRNQiBvciAxMjhNQiBmaWxlIHRvIHVzZSB3aXRoIHRoZSB0ZXN0LiBVc2luZyB0aGUgbGFyZ2VyIGZpbGVzIHdpbGwgZ2l2ZSB5b3UgYSBiZXR0ZXIgJwogJ2luZGljYXRpb24gb2YgaG93IHJlbGlhYmxlIHlvdXIgc3BlZWRzIGFyZSBidXQgb2J2aW91c2x5IGlmIHlvdSBoYXZlIGEgbGltaXRlZCBhbW91bnQgb2YgYmFuZHdpZHRoIGFsbG93YW5jZSB5b3UgbWF5IHdhbnQgdG8gb3B0IGZvciBhIHNtYWxsZXIgZmlsZS4nCiAnW0NSXVtDUl1bQ09MT1I9Ymx1ZV1bQl1Ib3cgYWNjdXJhdGUgaXMgdGhpcyBzcGVlZCB0ZXN0OlsvQl1bL0NPTE9SXVtDUl1Ob3QgdmVyeSBhY2N1cmF0ZSBhdCBhbGwhIEFzIHRoaXMgdGVzdCBpcyBiYXNlZCBvbiBkb3dubG9hZGluZyBhIGZpbGUgZnJvbSBhIHNlcnZlciBpdFwncyByZWxpYW50IG9uIHRoZSBzZXJ2ZXIgbm90IGhhdmluZyBhIGdvLXNsb3cgZGF5ICcKICdidXQgdGhlIHNlcnZlcnMgdXNlZCBzaG91bGQgYmUgcHJldHR5IHJlbGlhYmxlLiBUaGUgMTBNQiBmaWxlIGlzIGhvc3RlZCBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgdG8gdGhlIG90aGVycyBzbyBpZiB5b3VcJ3JlIG5vdCBnZXR0aW5nIHRoZSByZXN1bHRzIGV4cGVjdGVkIHBsZWFzZSB0cnkgYW5vdGhlciBmaWxlLiBJZiB5b3UgaGF2ZSBhIGZhc3QgZmliZXIgJwogJ2Nvbm5lY3Rpb24gdGhlIGNoYW5jZXMgYXJlIHlvdXIgc3BlZWQgd2lsbCBzaG93IGFzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiB5b3VyIHJlYWwgZG93bmxvYWQgc3BlZWQgZHVlIHRvIHRoZSBzZXJ2ZXIgbm90IGJlaW5nIGFibGUgdG8gc2VuZCB0aGUgZmlsZSBhcyBmYXN0IGFzIHlvdXIgZG93bmxvYWQgc3BlZWQgYWxsb3dzLiBFc3NlbnRpYWxseSB0aGUgJwogJ3Rlc3QgcmVzdWx0cyB3aWxsIGJlIGxpbWl0ZWQgYnkgdGhlIHNwZWVkIG9mIHRoZSBzZXJ2ZXIgYnV0IHlvdSB3aWxsIGF0IGxlYXN0IGJlIGFibGUgdG8gc2VlIGlmIGl0XCdzIHlvdXIgY29ubmVjdGlvbiB0aGF0XCdzIGNhdXNpbmcgYnVmZmVyaW5nIG9yIGlmIGl0XCdzIHRoZSBob3N0IHlvdVwncmUgdHJ5aW5nIHRvIHN0cmVhbSBmcm9tJwogJ1tDUl1bQ1JdW0NPTE9SPWJsdWVdW0JdV2hhdCBpcyB0aGUgZGlmZmVybmNlIGJldHdlZW4gTGl2ZSBTdHJlYW1zIGFuZCBPbmxpbmUgVmlkZW86Wy9DT0xPUl1bL0JdW0NSXVdoZW4geW91IHJ1biB0aGUgdGVzdCB5b3VcJ2xsIHNlZSByZXN1bHRzIGJhc2VkIG9uIHlvdXIgc3BlZWRzIGFuZCB0aGVzZSBsZXQgeW91IGtub3cgdGhlIHF1YWxpdHkgeW91IHNob3VsZCBleHBlY3QgdG8gJwogJ2JlIGFibGUgc3RyZWFtIHdpdGggeW91ciBjb25uZWN0aW9uLiBMaXZlIFN0cmVhbXMgYXMgdGhlIHRpdGxlIHN1Z2dlc3RzIGFyZSBsaWtlIHRyYWRpdGlvbmFsIFRWIGNoYW5uZWxzLCB0aGV5IGFyZSBiZWluZyBzdHJlYW1lZCBsaXZlIHNvIGZvciBleGFtcGxlIGlmIHlvdSB3YW50ZWQgdG8gd2F0Y2ggQ05OIHRoaXMgd291bGQgZmFsbCBpbnRvIHRoaXMgY2F0ZWdvcnkuICcKICdPbmxpbmUgVmlkZW9zIHJlbGF0ZXMgdG8gbW92aWVzLCB0diBzaG93cywgeW91dHViZSBjbGlwcyBldGMuIEJhc2ljYWxseSBhbnl0aGluZyB0aGF0IGlzblwndCBsaXZlIC0gaWYgeW91XCdyZSBuZXcgdG8gdGhlIHdvcmxkIG9mIHN0cmVhbWluZyB0aGVuIHRoaW5rIG9mIGl0IGFzIE9uIERlbWFuZCBjb250ZW50LCB0aGlzIGlzIGNvbnRlbnQgdGhhdFwncyBiZWVuIHJlY29yZGVkIGFuZCBzdG9yZWQgb24gdGhlIHdlYi4nCiAnW0NSXVtDUl1bQ09MT1I9Ymx1ZV1bQl1XaHkgYW0gSSBzdGlsbCBnZXR0aW5nIGJ1ZmZlcmluZzpbL0NPTE9SXVsvQl1bQ1JdVGhlIHJlc3VsdHMgeW91IGdldCBmcm9tIHRoaXMgdGVzdCBhcmUgc3RyaWN0bHkgYmFzZWQgb24geW91ciBkb3dubG9hZCBzcGVlZCwgdGhlcmUgYXJlIG1hbnkgb3RoZXIgZmFjdG9ycyB0aGF0IGNhbiBjYXVzZSBidWZmZXJpbmcgYW5kIGNvbnRyYXJ5IHRvIHBvcHVsYXIgYmVsaWVmICcKICdoYXZpbmcgYSBtYXNzaXZlbHkgZmFzdCBpbnRlcm5ldCBjb25uZWN0aW9uIHdpbGwgbm90IG1ha2UgYW55IGRpZmZlcmVuY2UgdG8geW91ciBidWZmZXJpbmcgaXNzdWVzIGlmIHRoZSBzZXJ2ZXIgeW91XCdyZSB0cnlpbmcgdG8gZ2V0IHRoZSBjb250ZW50IGZyb20gaXMgdW5hYmxlIHRvIHNlbmQgaXQgZmFzdCBlbm91Z2guIFRoaXMgY2FuIG9mdGVuIGhhcHBlbiBhbmQgaXMgdXN1YWxseSAnCiAnZG93biB0byBoZWF2eSB0cmFmZmljICh0b28gbWFueSB1c2VycyBhY2Nlc3NpbmcgdGhlIHNhbWUgc2VydmVyKS4gQSAxMCBNYi9zIGNvbm5lY3Rpb24gc2hvdWxkIGJlIHBsZW50eSBmYXN0IGVub3VnaCBmb3IgYWxtb3N0IGFsbCBjb250ZW50IGFzIGl0XCdzIHZlcnkgcmFyZSBhIHNlcnZlciBjYW4gc2VuZCBpdCBhbnkgcXVpY2tlciB0aGFuIHRoYXQuJwogJ1tDUl1bQ1JdW0NPTE9SPWJsdWVdW0JdV2hhdFwncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIE1CL3MgYW5kIE1iL3M6Wy9DT0xPUl1bL0JdW0NSXUEgbG90IG9mIHBlb3BsZSB0aGluayB0aGUgc3BlZWQgdGhleSBzZWUgYWR2ZXJ0aXNlZCBieSB0aGVpciBJU1AgaXMgTWVnYWJ5dGVzIChNQi9TKSBwZXIgc2Vjb25kIC0gdGhpcyBpcyBub3QgdHJ1ZS4gU3BlZWRzIGFyZSB1c3VhbGx5IHNob3duIGFzIE1iL3MgJwogJ3doaWNoIGlzIE1lZ2FiaXQgcGVyIHNlY29uZCAtIHRoZXJlIGFyZSA4IG9mIHRoZXNlIHRvIGEgbWVnYWJ5dGUgc28gaWYgeW91IHdhbnQgdG8gd29yayBvdXQgaG93IG1hbnkgbWVnYWJ5dGVzIHBlciBzZWNvbmQgeW91XCdyZSBnZXR0aW5nIHlvdSBuZWVkIHRvIGRpdmlkZSB0aGUgc3BlZWQgYnkgOC4gSXQgbWF5IHNvdW5kIHNuZWFreSBidXQgcmVhbGx5IGl0XCdzIGp1c3QgdGhlIHVuaXQgdGhhdCBoYXMgYWx3YXlzIGJlZW4gdXNlZC4nCiAnW0NSXVtDUl1BIGRpcmVjdCBsaW5rIHRvIHRoZSBidWZmZXJpbmcgdGhyZWFkIGV4cGxhaW5pbmcgd2hhdCB5b3UgY2FuIGRvIHRvIGltcHJvdmUgeW91ciB2aWV3aW5nIGV4cGVyaWVuY2UgY2FuIGJlIGZvdW5kIGF0IFtDT0xPUj15ZWxsb3ddaHR0cDovL2JpdC5seS9idWZmZXJpbmdmaXhbL0NPTE9SXScKICdbQ1JdW0NSXVRoYW5rIHlvdSwgW0NPTE9SPWRvZGdlcmJsdWVdbm9vYnNhbmRuZXJkc1svQ09MT1JdIFRlYW0uJyApCiBpZiA0MiAtIDQyOiBvMG8gJSBpaUlJMTFpMUkxSUlpICsgT28wMG9vMG9PIC0gbzBvIC4gSUlpaTFJIC0gSUlJSWlpSUkxMTEKIGlmIDI3IC0gMjc6IG9vbzBPME8wMCAlIGlpSUkxMWkxSTFJSWkgLiBvT29PMG8wME9PMCAuIE8wMG9vb29vMDAgJSBJaWkgLiBvMGlpMUkKZGVmIEkxMTFJMSAoICkgOgogT09vMG9PMDBvb08wMCAoICcnICwgJ1tDT0xPUj1ibHVlXUluc3RydWN0aW9ucyAtIFJlYWQgbWUgZmlyc3RbL0NPTE9SXScgLCAnbm9uZScgLCAnc3BlZWRfaW5zdHJ1Y3Rpb25zJyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnJyAsICdEb3dubG9hZCA1TUIgZmlsZScgLCAnaHR0cDovL2Rvd25sb2FkLnRoaW5rYnJvYWRiYW5kLmNvbS81TUIuemlwJyAsICdydW50ZXN0JyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnJyAsICdEb3dubG9hZCAxME1CIGZpbGUnICwgJ2h0dHA6Ly9kb3dubG9hZC50aGlua2Jyb2FkYmFuZC5jb20vMTBNQi56aXAnICwgJ3J1bnRlc3QnICwgJycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICcnICwgJ0Rvd25sb2FkIDIwTUIgZmlsZScgLCAnaHR0cDovL2Rvd25sb2FkLnRoaW5rYnJvYWRiYW5kLmNvbS8yME1CLnppcCcgLCAncnVudGVzdCcgLCAnJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnRG93bmxvYWQgNTBNQiBmaWxlJyAsICdodHRwOi8vZG93bmxvYWQudGhpbmticm9hZGJhbmQuY29tLzUwTUIuemlwJyAsICdydW50ZXN0JyAsICcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnJyAsICdEb3dubG9hZCAxMDBNQiBmaWxlJyAsICdodHRwOi8vZG93bmxvYWQudGhpbmticm9hZGJhbmQuY29tLzEwME1CLnppcCcgLCAncnVudGVzdCcgLCAnJyAsICcnICwgJycgLCAnJyApCiBpZiA5MCAtIDkwOiBPb09vMG8gJSBvMGlpMUkgLiBpaUlJMTFpMUkxSUlpCmRlZiBpMWlJMTFJaUlJICggbmFtZSApIDoKIGlmIDM3IC0gMzc6IElJSUlpaUlJMTExIC8gT29vMDBvT28wb09vCiBJMTEgLiBjcmVhdGUgKCAnQ3JlYXRpbmcgUHJvZmlsZScgLCAnJyAsICcnICwgJycgKQogaTFJMUlpaWkgPSBPMDAgKCBuYW1lICkKIGlmIDY2IC0gNjY6IGkxMUlpaSArIG9vb09vb09PbzBPTyAlIElJMQogaWYgMjMgLSAyMzogb29vT29vT09vME9PIC4gSWlpICsgSUlpaTFJCiBJaUlpSTFpMSA9IFsgXQogZm9yIE8wb08wIGluIG9zIC4gbGlzdGRpciAoIGkxaUlJaTEgKSA6CiAgSWlJaUkxaTEgLiBhcHBlbmQgKCBPMG9PMCApCiAgaWYgMTcgLSAxNzogT28wMG9vMG9PCiAgaWYgMTIgLSAxMjogTzAwb29vb28wMCAuIG8wb28KICBJSTFpaTEgPSBvcGVuICggb3MgLiBwYXRoIC4gam9pbiAoIG9PICwgbmFtZSAsICdhZGRvbmxpc3QnICkgLCBtb2RlID0gJ3InICkKICBPT08wME8wMG9vbzBvID0gSUkxaWkxIC4gcmVhZCAoICkKICBJSTFpaTEgLiBjbG9zZSAoICkKICBPT08wME8wMG9vbzBvID0gT09PMDBPMDBvb28wbyAuIHNwbGl0ICggJ3wnICkKICBpZiA2MSAtIDYxOiBPMDBvb29vbzAwIC8gTzAwb29vb28wMCArIGkxMUlpaSAuIE9vT28wbyAqIGkxMUlpaQogIGlmIDE5IC0gMTk6IG8waWkxSSAuIE9vbzAwb09vMG9PbyAvIE8wMG9vb29vMDAKIGlpbzAwTzBvMDBvbyAoICdwcm9maWxlcycgKQogZm9yIE8wb08wIGluIG9zIC4gbGlzdGRpciAoIGkxaWlJSUkxMTFpaSApIDoKICBpZiBub3QgTzBvTzAgaW4gSWlJaUkxaTEgYW5kIE8wb08wICE9ICdwbHVnaW4ucHJvZ3JhbS50b3RhbGluc3RhbGxlcicgYW5kIE8wb08wICE9ICdyZXBvc2l0b3J5Lm5vb2JzYW5kbmVyZHMnIGFuZCBPMG9PMCAhPSAncGFja2FnZXMnIDoKICAgdHJ5IDoKICAgIHNodXRpbCAuIGNvcHl0cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIG9PME9vICwgJ2FkZG9ucycgLCBPMG9PMCApICwgb3MgLiBwYXRoIC4gam9pbiAoIG9PICwgJ01hc3RlcicgLCAnYmFja3VwcycgLCBPMG9PMCApICkKICAgIGlmIElpSUkgPT0gJ3RydWUnIDoKICAgICB4Ym1jIC4gbG9nICggIiMjIyBTdWNjZXNzZnVsbHkgY29waWVkICVzIHRvICVzIiAlICggTzBvTzAgLCBvcyAuIHBhdGggLiBqb2luICggb08gLCAnTWFzdGVyJyAsICdiYWNrdXBzJyAsIE8wb08wICkgKSApCiAgIGV4Y2VwdCA6CiAgICB4Ym1jIC4gbG9nICggIiMjIyBGYWlsZWQgdG8gY29weSAlcyB0byBiYWNrdXAgZm9sZGVyLCBtdXN0IGFscmVhZHkgZXhpc3QiICUgTzBvTzAgKQogICBpZiBub3QgTzBvTzAgaW4gT09PMDBPMDBvb28wbyBhbmQgTzBvTzAgIT0gSTExaWlpMUlpIDoKICAgIHRyeSA6CiAgICAgb3MgLiByZW5hbWUgKCBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgTzBvTzAgKSAsIG9zIC4gcGF0aCAuIGpvaW4gKCBvTyAsICdNYXN0ZXInICwgTzBvTzAgKSApCiAgICBleGNlcHQgOgogICAgIHRyeSA6CiAgICAgIHNodXRpbCAuIGNvcHl0cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIE8wb08wICkgLCBvcyAuIHBhdGggLiBqb2luICggb08gLCAnTWFzdGVyJyAsIE8wb08wICkgKQogICAgIGV4Y2VwdCA6CiAgICAgIHRyeSA6CiAgICAgICBzaHV0aWwgLiBybXRyZWUgKCBvcyAuIHBhdGggLiBqb2luICggaTFpaUlJSTExMWlpICwgTzBvTzAgKSApCiAgICAgIGV4Y2VwdCA6CiAgICAgICB4Ym1jIC4gbG9nICggIiMjIyBVbmFibGUgdG8gbW92ZSAlcyBhcyBpdCdzIGN1cnJlbnRseSBpbiB1c2UiICUgTzBvTzAgKQogc2h1dGlsIC4gcm10cmVlICggb08wT28gKQogaWYgODIgLSA4MjogT09PME8wTzBvb29vbyAvIG9vbzBPME8wMCAqIG8wb28gLSBvMG8gKyBpaUlJMTFpMUkxSUlpCiBpZiA0NyAtIDQ3OiBvT29PMG8wME9PMCAqIG8wMDBPMG8gLyBvT29PMG8wME9PMCArIElJSUlpaUlJMTExICogT29vMDBvT28wb09vCiBmb3IgTzBvTzAgaW4gT09PMDBPMDBvb28wbyA6CiAgaWYgbm90IE8wb08wIGluIElpSWlJMWkxIGFuZCBub3QgTzBvTzAgaW4gaTFpaUlJSTExMWlpIDoKICAgdHJ5IDoKICAgIG9zIC4gcmVuYW1lICggb3MgLiBwYXRoIC4gam9pbiAoIG9PICwgJ01hc3RlcicgLCBPMG9PMCApICwgb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIE8wb08wICkgKQogICBleGNlcHQgOgogICAgcGFzcwogICAgaWYgNzggLSA3ODogT29PbzBvIC0gTzAwb29vb28wMCArIElpaSArIGlpSUkxMWkxSTFJSWkgKiBvT29PMG8wME9PMCAqIG8waWkxSQogb29vTyAoICkKIElJMTExaWlJMUlpMSAoICkKIG9vMG9PMG9PMDBvTyAoIE9PT08wT09vTzBPMCApCiB4Ym1jIC4gbG9nICggIiMjIyBXSVBFIEZVTkNUSU9OUyBDT01QTEVURSIgKQogaWYgOTQgLSA5NDogaTExSWlpICogSUkxMWlJaUlJSWlJCiBpZiA1OSAtIDU5OiBPb09vMG8gKiBvb28wTzBPMDAKIHRyeSA6CiAgSUlJSUlpSTExSWkgPSBvcGVuICggSUlJSUkgLCBtb2RlID0gJ3InICkKICBvT28wTyA9IElJSUlJaUkxMUlpIC4gcmVhZCAoICkKICBJSUlJSWlJMTFJaSAuIGNsb3NlICggKQogIHhibWMgLiBsb2cgKCAiIyMjIG9yaWdpbmFsIGlkZmlsZSBjb250ZW50czogJXMiICUgb09vME8gKQogZXhjZXB0IDoKICB4Ym1jIC4gbG9nICggIiMjIyBvcmlnaW5hbCBpZCBmaWxlIGRvZXMgbm90IGV4aXN0IiApCiAgaWYgMzEgLSAzMTogbzBvIC8gT09PME8wTzBvb29vbwogdHJ5IDoKICBleHRyYWN0IC4gYWxsICggb3MgLiBwYXRoIC4gam9pbiAoIG9PICwgbmFtZSAsICdidWlsZC56aXAnICkgLCBPbzBvMDAwMG8wbzAgLCBJMTEgKQogIE9PME9vb09vID0gMQogIHhibWMgLiBsb2cgKCAiIyMjIEV4dHJhY3Rpb24gb2YgYnVpbGQgc3VjY2Vzc2Z1bCIgKQogZXhjZXB0IDoKICBpMTEgLiBvayAoICdFcnJvcicgLCAiU29ycnkgaXQgd2Fzbid0IHBvc3NpYmxlIHRvIGV4dHJhY3QgeW91ciBidWlsZCwgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggeW91ciBidWlsZCB6aXAgZmlsZS4iICkKICBPTzBPb29PbyA9IDAKICBpZiA1NyAtIDU3OiBPMDBvb29vbzAwICUgaTExSWlpCiAgaWYgNjkgLSA2OTogbzBpaTFJCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggSUlJaWkxSUkxSUkgKSA6CiAgb3MgLiBtYWtlZGlycyAoIElJSWlpMUlJMUlJICkKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsICdwbHVnaW4ucHJvZ3JhbS50b3RhbGluc3RhbGxlcicgLCAnaWQueG1sJyApICkgYW5kIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsICd0aV9pZCcgLCAnaWQueG1sJyApICkgOgogIG9zIC4gcmVtb3ZlICggSUlJSUkgKQogIHhibWMgLiBsb2cgKCAnIyMjIFJFTU9WRUQgU1RBTkRBUkQgaWQueG1sJyApCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvcyAuIHBhdGggLiBqb2luICggb28wbzBPMDAgLCAndGlfaWQnICwgJ2lkLnhtbCcgKSApIDoKICBvcyAuIHJlbmFtZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsICd0aV9pZCcgLCAnaWQueG1sJyApICwgSUlJSUkgKQogZWxzZSA6CiAgeGJtYyAuIGxvZyAoICcjIyMgaWQgZmlsZSBkb2VzIG5vdCBleGlzdCcgKQogIGlmIDY5IC0gNjk6IE9vT28wbwogIGlmIDgzIC0gODM6IElJaWkxSSAuIG8waWkxSSArIE9vT28wbyAuIElJMSAvIGkxMUlpaSArIE9vbzAwb09vMG9PbwogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggbzAgKSBhbmQgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIG9vMG8wTzAwICwgJ3RpX2lkJyAsICdzdGFydHVwLnhtbCcgKSApIDoKICB4Ym1jIC4gbG9nICggIiMjIyBzdGFydHVwLnhtbCBhbmQgdGVtcG9yYXJ5IHN0YXJ0dXAueG1sIGV4aXN0cywgYXR0ZW1wdGluZyByZW1vdmUgb2Ygb3JpZ2luYWwgYW5kIHJlcGxhY2Ugd2l0aCB0ZW1wIiApCiAgb3MgLiByZW1vdmUgKCBvMCApCiAgeGJtYyAuIGxvZyAoICIjIyMgcmVtb3ZhbCBvayIgKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggb3MgLiBwYXRoIC4gam9pbiAoIG9vMG8wTzAwICwgJ3RpX2lkJyAsICdzdGFydHVwLnhtbCcgKSApIDoKICBvcyAuIHJlbmFtZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsICd0aV9pZCcgLCAnc3RhcnR1cC54bWwnICkgLCBvMCApCiAgeGJtYyAuIGxvZyAoICIjIyMgcmVuYW1lIG9rIiApCiAgaWYgOTAgLSA5MDogSUlJSWlpSUkxMTEgKiBvb28wTzBPMDAgLyBJSTExaUlpSUlJaUkKIGlmIE9PME9vb09vID09IDEgOgogIElpSUkxICggKQogIGlmIDY4IC0gNjg6IElpaQogIGlmIDY1IC0gNjU6IG9vb09vb09PbzBPTwpkZWYgbzAwMG9PT08gKCB1cmwgKSA6CiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnW0NPTE9SPWRhcmtjeWFuXURFTEVURSBBIEJVSUxEWy9DT0xPUl0nICwgdXJsICwgJ2RlbGV0ZV9wcm9maWxlJyAsICcnICwgJycgLCAnJyApCiBmb3IgT09vMCBpbiBvcyAuIGxpc3RkaXIgKCBvTyApIDoKICBpZiBPT28wICE9ICdNYXN0ZXInIGFuZCBPT28wICE9IHVybCAuIHJlcGxhY2UgKCAnICcgLCAnXycgKSAuIHJlcGxhY2UgKCAiJyIgLCAnJyApIC4gcmVwbGFjZSAoICc6JyAsICctJyApIDoKICAgT09vMG9PMDBvb08wMCAoICcnICwgJ0xvYWQgUHJvZmlsZTogW0NPTE9SPWRvZGdlcmJsdWVdJyArIE9PbzAgLiByZXBsYWNlICggJ18nICwgJyAnICkgKyAnWy9DT0xPUl0nICwgT09vMCAsICdzd2l0Y2hfcHJvZmlsZScgLCAnJyAsICcnICwgJycgLCAnJyApCiAgIGlmIDQxIC0gNDE6IElpaSAvIElJaWkxSQogICBpZiA5MiAtIDkyOiBJSUlJaWlJSTExMSAuIG9vbzBPME8wMCAlIE9vT28wbyAlIE9PTzBPME8wb29vb28KZGVmIElJaTFJaUlJICggaGVhZGluZyAsIGFub3VuY2UgKSA6CiBjbGFzcyBvT29vbzBvb28gKCApIDoKICBXSU5ET1cgPSAxMDE0NwogIENPTlRST0xfTEFCRUwgPSAxCiAgQ09OVFJPTF9URVhUQk9YID0gNQogIGRlZiBfX2luaXRfXyAoIHNlbGYgLCAqIGFyZ3MgLCAqKiBrd2FyZ3MgKSA6CiAgIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICJBY3RpdmF0ZVdpbmRvdyglZCkiICUgKCBzZWxmIC4gV0lORE9XICwgKSApCiAgIHNlbGYgLiB3aW4gPSB4Ym1jZ3VpIC4gV2luZG93ICggc2VsZiAuIFdJTkRPVyApCiAgIHhibWMgLiBzbGVlcCAoIDUwMCApCiAgIHNlbGYgLiBzZXRDb250cm9scyAoICkKICBkZWYgc2V0Q29udHJvbHMgKCBzZWxmICkgOgogICBzZWxmIC4gd2luIC4gZ2V0Q29udHJvbCAoIHNlbGYgLiBDT05UUk9MX0xBQkVMICkgLiBzZXRMYWJlbCAoIGhlYWRpbmcgKQogICB0cnkgOgogICAgT28wb08wMCA9IG9wZW4gKCBhbm91bmNlICkgOyBJaWlpMTFpMTFJSWkxID0gT28wb08wMCAuIHJlYWQgKCApCiAgIGV4Y2VwdCA6CiAgICBJaWlpMTFpMTFJSWkxID0gYW5vdW5jZQogICBzZWxmIC4gd2luIC4gZ2V0Q29udHJvbCAoIHNlbGYgLiBDT05UUk9MX1RFWFRCT1ggKSAuIHNldFRleHQgKCBzdHIgKCBJaWlpMTFpMTFJSWkxICkgKQogICByZXR1cm4KIG9Pb29vMG9vbyAoICkKIHdoaWxlIHhibWMgLiBnZXRDb25kVmlzaWJpbGl0eSAoICdXaW5kb3cuSXNWaXNpYmxlKDEwMTQ3KScgKSA6CiAgeGJtYyAuIHNsZWVwICggNTAwICkKICBpZiA5MSAtIDkxOiBvb29Pb29PT28wT08gLyBpaUlJMTFpMUkxSUlpCiAgaWYgMTYgLSAxNjogbzBvIC8gSUkxIC0gT28wMG9vMG9PICUgbzAwME8wbyAlIG8wbwpkZWYgb09vb29PME8wb09PICggdXJsICkgOgogdHJ5IDoKICBpMTExMWlpICwgSWlpaTExaTExSUlpMSA9IHVybCAuIHNwbGl0ICggJ3wnICkKICBJSWkxSWlJSSAoIGkxMTExaWkgLCBJaWlpMTFpMTFJSWkxICkKIGV4Y2VwdCA6CiAgSUlpMUlpSUkgKCAnJyAsIHVybCApCiAgaWYgNDMgLSA0MzogSWlpICogaTExaUlpaUlpaSAuIGkxMWlJaWlJaWkgKiBJSTEKICBpZiA2MSAtIDYxOiBvMGlpMUkgLiBPbzAwb28wb08gLiBPT08wTzBPMG9vb29vICsgSUkxICsgT09PME8wTzBvb29vbwpkZWYgSWkxSWkgKCApIDoKIE9vMDBPb28wTzBPMG8gPSB0aW1lIC4gdGltZSAoICkKIE9vMG9vMG8gPSB0aW1lIC4gbG9jYWx0aW1lICggT28wME9vbzBPME8wbyApCiByZXR1cm4gdGltZSAuIHN0cmZ0aW1lICggJyVZJW0lZCVIJU0lUycgLCBPbzBvbzBvICkKIGlmIDcwIC0gNzA6IGkxMUlpaQogaWYgOTIgLSA5MjogSUlJSWlpSUkxMTEgLSBpMTFJaWkgLyBpMTFJaWkgKyBPbzAwb28wb08KZGVmIE8wMG8wT08wTyAoIGlkICwgdmFsdWUgKSA6CiBJMTExMUlJSTExMWlpID0gb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIGlkICwgJ2FkZG9uLnhtbCcgKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggSTExMTFJSUkxMTFpaSApIDoKICBPbzBvTzAwID0gb3BlbiAoIEkxMTExSUlJMTExaWkgKQogIElpMTFpaUkxID0gT28wb08wMCAuIHJlYWQgKCApIC4gcmVwbGFjZSAoICdcbicgLCAnJyApIC4gcmVwbGFjZSAoICdccicgLCAnJyApIC4gcmVwbGFjZSAoICdcdCcgLCAnJyApCiAgTzBPTzBPID0gcmUgLiBjb21waWxlICggJzxhZGRvLis/aWQ9IiguKz8pIi4rPz4nICkgLiBmaW5kYWxsICggSWkxMWlpSTEgKQogIHhibWMgLiBsb2cgKCAnIyMjIEFERE9OIElEIFRPIFNUT1A6ICVzJyAlIE8wT08wTyBbIDAgXSApCiAgbzBvMDBPMG9PID0gcmUgLiBjb21waWxlICggJzxleHRlbnNpb24gcG9pbnQ9Lis/aWJyYXJ5PSIoLis/KSIuKz9zdGFydD0iJyApIC4gZmluZGFsbCAoIElpMTFpaUkxICkKICBpZiBsZW4gKCBvMG8wME8wb08gKSA+IDAgOgogICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnU3RvcFNjcmlwdCglcyknICUgTzBPTzBPIFsgMCBdICkKIGkxMUlpSUlpMTFJID0gJ3sianNvbnJwYyI6IjIuMCIsICJtZXRob2QiOiJBZGRvbnMuU2V0QWRkb25FbmFibGVkIiwicGFyYW1zIjp7ImFkZG9uaWQiOiIlcyIsImVuYWJsZWQiOiVzfSwgImlkIjoxfScgJSAoIE8wT08wTyBbIDAgXSAsIHZhbHVlICkKIG8wMDBvME8wT28wMCA9IHhibWMgLiBleGVjdXRlSlNPTlJQQyAoIGkxMUlpSUlpMTFJICkKIHhibWMgLiBsb2cgKCBzdHIgKCBpMTFJaUlJaTExSSApICkKIHhibWMgLiBsb2cgKCBzdHIgKCBvMDAwbzBPME9vMDAgKSApCiBpZiAnZXJyb3InIGluIG8wMDBvME8wT28wMCA6CiAgb09vb09vMDAwTyA9ICdFbmFibGluZycgaWYgdmFsdWUgPT0gJ3RydWUnIGVsc2UgJ0Rpc2FibGluZycKICBpMTEgLiBvayAoICJDb21tdW5pdHkgUG9ydGFsIiAsICJFcnJvciAlcyBbQ09MT1IgeWVsbG93XSVzWy9DT0xPUl0iICUgKCBvT29vT28wMDBPICwgaWQgKSAsICJDaGVjayB0byBtYWtlIHN1cmUgdGhlIGFkZG9uIGxpc3QgaXMgdXB0byBkYXRlIGFuZCB0cnkgYWdhaW4uIiApCiAgT29PT28wT09vTyAoICkKICBpZiAzMyAtIDMzOiBJSTExaUlpSUlJaUkKICBpZiAyMiAtIDIyOiBPT08wTzBPMG9vb29vICsgSUkxMWlJaUlJSWlJICUgTzAwb29vb28wMApkZWYgb28wMG9vICggKSA6CiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQWRkLW9uIFRvb2xzJyAsICdub25lJyAsICd0b29sc19hZGRvbnMnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICdmb2xkZXInICwgJ0JhY2t1cC9SZXN0b3JlJyAsICdub25lJyAsICdiYWNrdXBfcmVzdG9yZScgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnQ2xlYW4gdXAgbXkgS29kaScgLCAnJyAsICd0b29sc19jbGVhbicgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJ2ZvbGRlcicgLCAnTWlzYy4gVG9vbHMnICwgJycgLCAndG9vbHNfbWlzYycgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBpZiBpMWlJSWkxMWkxMTFJICggKSA6CiAgT09vMG9PMDBvb08wMCAoICcnICwgJ1tDT0xPUj1kb2RnZXJibHVlXVdpLUZpIC8gT3BlbkVMRUMgU2V0dGluZ3NbL0NPTE9SXScgLCAnJyAsICdvcGVuZWxlY19zZXR0aW5ncycgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiAgaWYgNTcgLSA1NzogSUkxMWlJaUlJSWlJICogbzBvbyArIE9PTzBPME8wb29vb28gJSBPb09vMG8gLSBvMDAwTzBvCiAgaWYgNDMgLSA0MzogT29PbzBvCmRlZiBJaWlJSWlJaWkgKCApIDoKIE9PbzBvTzAwb29PMDAgKCAnJyAsICdDb21wbGV0ZWx5IFJlbW92ZSBBbiBBZGQtb24gKGluYy4gcGFzc3dvcmRzKScgLCAncGx1Z2luJyAsICdhZGRvbl9yZW1vdmFsX21lbnUnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICcnICwgJ0RlbGV0ZSBBZGRvbiBEYXRhJyAsICd1cmwnICwgJ3JlbW92ZV9hZGRvbl9kYXRhJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdFbmFibGUvRGlzYWJsZSBBZGRvbnMnICwgJ3RydWUnICwgJ2VuYWJsZWFkZG9ucycgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnTWFrZSBBZGQtb25zIEdvdGhhbS9IZWxpeCBDb21wYXRpYmxlJyAsICdub25lJyAsICdnb3RoYW0nICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICcnICwgJ01ha2UgU2tpbnMgS29kaSAoSGVsaXgpIENvbXBhdGlibGUnICwgJ25vbmUnICwgJ2hlbGl4JyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnJyAsICdQYXNzd29yZHMgLSBIaWRlIHdoZW4gdHlwaW5nIGluJyAsICdub25lJyAsICdoaWRlX3Bhc3N3b3JkcycgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnUGFzc3dvcmRzIC0gVW5oaWRlIHdoZW4gdHlwaW5nIGluJyAsICdub25lJyAsICd1bmhpZGVfcGFzc3dvcmRzJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnJyAsICdVcGRhdGUgTXkgQWRkLW9ucyAoRm9yY2UgUmVmcmVzaCknICwgJ25vbmUnICwgJ3VwZGF0ZScgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBpZiAyNiAtIDI2OiBpMTFpSWlpSWlpIC4gSUkxMWlJaUlJSWlJIC0gT09PME8wTzBvb29vbwogaWYgNzMgLSA3MzogbzAwME8wbwpkZWYgT08wT09PT09Pb28gKCApIDoKIE9PbzBvTzAwb29PMDAgKCAnJyAsICdbQ09MT1I9Z29sZF1DTEVBTiBNWSBLT0RJIEZPTERFUlMgKFNhdmUgU3BhY2UpWy9DT0xPUl0nICwgJycgLCAnZnVsbF9jbGVhbicgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnQ2xlYXIgQWxsIENhY2hlIEZvbGRlcnMnICwgJ3VybCcgLCAnY2xlYXJfY2FjaGUnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICcnICwgJ0NsZWFyIENhY2hlZCBBcnR3b3JrICh0aHVtYm5haWxzICYgdGV4dHVyZXMpJyAsICdub25lJyAsICdyZW1vdmVfdGV4dHVyZXMnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICcnICwgJ0NsZWFyIFBhY2thZ2VzIEZvbGRlcicgLCAndXJsJyAsICdyZW1vdmVfcGFja2FnZXMnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICcnICwgJ0RlbGV0ZSBPbGQgQnVpbGRzL1ppcHMgRnJvbSBEZXZpY2UnICwgJ3VybCcgLCAncmVtb3ZlX2J1aWxkJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnJyAsICdEZWxldGUgT2xkIENyYXNoIExvZ3MnICwgJ3VybCcgLCAncmVtb3ZlX2NyYXNoX2xvZ3MnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICcnICwgJ1dpcGUgTXkgSW5zdGFsbCAoRnJlc2ggU3RhcnQpJyAsICcnICwgJ3dpcGVfeGJtYycgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBpZiA1MCAtIDUwOiBvb29Pb29PT28wT08gLiBJSWlpMUkgJSBJSTExaUlpSUlJaUkKIGlmIDY4IC0gNjg6IGkxMUlpaQpkZWYgT09PTzAwMDAgKCApIDoKIE9vbzBvID0gSUkxMWlpICggKQogT09vMG9PMDBvb08wMCAoICcnICwgJ0NoZWNrIEZvciBTcGVjaWFsIENoYXJhY3RlcnMgSW4gRmlsZW5hbWVzJyAsICcnICwgJ0FTQ0lJX0NoZWNrJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnZm9sZGVyJyAsICdDaGVjayBNeSBJbnRlcm5ldCBTcGVlZCcgLCAnbm9uZScgLCAnc3BlZWR0ZXN0X21lbnUnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICcnICwgJ0NoZWNrIE15IElQIEFkZHJlc3MnICwgJ25vbmUnICwgJ2lwY2hlY2snICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICcnICwgJ0NoZWNrIFhCTUMvS29kaSBWZXJzaW9uJyAsICdub25lJyAsICd4Ym1jdmVyc2lvbicgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnQ29udmVydCBQaHlzaWNhbCBQYXRocyBUbyBTcGVjaWFsJyAsIE9vMG8wMDAwbzBvMCAsICdmaXhfc3BlY2lhbCcgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnRm9yY2UgQ2xvc2UgS29kaScgLCAndXJsJyAsICdraWxsX3hibWMnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogaWYgT28gLiByZXBsYWNlICggJyUyMCcgLCAnICcgKSBpbiBPb28wbyBhbmQgT28gIT0gJycgOgogIE9PbzBvTzAwb29PMDAgKCAnJyAsICdSZW1vdmUgQ29tbXVuaXR5IEJ1aWxkIFByb3RlY3Rpb24nICwgJ25vbmUnICwgJ3JlbW92ZV9uYWcnICwgJ21haW5tZW51L21haW50ZW5hbmNlLnBuZycgLCAnJyAsICcnICwgJycgKQogT09vMG9PMDBvb08wMCAoICcnICwgJ1VwbG9hZCBMb2cnICwgJ25vbmUnICwgJ3VwbG9hZGxvZycgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnVmlldyBNeSBMb2cnICwgJ25vbmUnICwgJ2xvZycgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBPT28wb08wMG9vTzAwICggJycgLCAnWFhYIC0gSGlkZSBteSBhZHVsdCBhZGQtb25zJyAsICdmYWxzZScgLCAnYWR1bHRfZmlsdGVyJyAsICdtYWlubWVudS9tYWludGVuYW5jZS5wbmcnICwgJycgLCAnJyAsICcnICkKIE9PbzBvTzAwb29PMDAgKCAnJyAsICdYWFggLSBTaG93IG15IGFkdWx0IGFkZC1vbnMnICwgJ3RydWUnICwgJ2FkdWx0X2ZpbHRlcicgLCAnbWFpbm1lbnUvbWFpbnRlbmFuY2UucG5nJyAsICcnICwgJycgLCAnJyApCiBpZiAxOSAtIDE5OiBJSUlJaWlJSTExMSAlIElJMSAtIGkxMWlJaWlJaWkgLiBPT08wTzBPMG9vb29vIC4gSUlJSWlpSUkxMTEgKiBJaWkKIGlmIDM4IC0gMzg6IElpaSAtIElpaSAqIGkxMWlJaWlJaWkgJSBvT29PMG8wME9PMCArIG8wMDBPMG8gKyBJSTExaUlpSUlJaUkKZGVmIGlJMTFpMUlJICggKSA6CiBpMTEgPSB4Ym1jZ3VpIC4gRGlhbG9nICggKQogaWYgaTExIC4geWVzbm8gKCAiTWFrZSBBZGQtb24gUGFzc3dvcmRzIFZpc2libGU/IiAsICJUaGlzIHdpbGwgbWFrZSBhbGwgeW91ciBhZGQtb24gcGFzc3dvcmRzIHZpc2libGUgaW4gdGhlIGFkZC1vbiBzZXR0aW5ncy4gQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIGNvbnRpbnVlPyIgKSA6CiAgZm9yIGlpaUkxSWlJICwgT29JSWkxaUkgLCBvTzBPb28wT29vT09vIGluIG9zIC4gd2FsayAoIGkxaWlJSUkxMTFpaSApIDoKICAgZm9yIE9vMG9PMDAgaW4gb08wT29vME9vb09PbyA6CiAgICBpZiBPbzBvTzAwID09ICdzZXR0aW5ncy54bWwnIDoKICAgICBJSUlJMWlJMUlpSWlJID0gb3BlbiAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlJMUlpSSAsIE9vMG9PMDAgKSApIC4gcmVhZCAoICkKICAgICBPME9PME8gPSByZSAuIGNvbXBpbGUgKCAnPHNldHRpbmcgaWQ9KC4rPyk+JyApIC4gZmluZGFsbCAoIElJSUkxaUkxSWlJaUkgKQogICAgIGZvciBpMUlJMSBpbiBPME9PME8gOgogICAgICBpZiAncGFzcycgaW4gaTFJSTEgOgogICAgICAgaWYgJ29wdGlvbj0iaGlkZGVuIicgaW4gaTFJSTEgOgogICAgICAgIHRyeSA6CiAgICAgICAgIE9vTyA9IGkxSUkxIC4gcmVwbGFjZSAoICcgb3B0aW9uPSJoaWRkZW4iJyAsICcnICkKICAgICAgICAgT28wb08wMCA9IG9wZW4gKCBvcyAuIHBhdGggLiBqb2luICggaWlpSTFJaUkgLCBPbzBvTzAwICkgLCBtb2RlID0gJ3cnICkKICAgICAgICAgT28wb08wMCAuIHdyaXRlICggc3RyICggSUlJSTFpSTFJaUlpSSApIC4gcmVwbGFjZSAoIGkxSUkxICwgT29PICkgKQogICAgICAgICBPbzBvTzAwIC4gY2xvc2UgKCApCiAgICAgICAgZXhjZXB0IDoKICAgICAgICAgcGFzcwogIGkxMSAuIG9rICggIlBhc3N3b3JkcyBBcmUgbm93IHZpc2libGUiICwgIllvdXIgcGFzc3dvcmRzIHdpbGwgbm93IGJlIHZpc2libGUgaW4geW91ciBhZGQtb24gc2V0dGluZ3MuIElmIHlvdSB3YW50IHRvIHVuZG8gdGhpcyBwbGVhc2UgdXNlIHRoZSBvcHRpb24gdG8gaGlkZSBwYXNzd29yZHMuIiApCiAgaWYgNzAgLSA3MDogT28wMG9vMG9PCiAgaWYgNCAtIDQ6IElJMTFpSWlJSUlpSSArIGkxMWlJaWlJaWkgKyBvMG8KZGVmIE8wT29PT28wbyAoIG5hbWUgLCB1cmwgLCB2aWRlbyAsIGRlc2NyaXB0aW9uICwgc2tpbnMgLCBndWlzZXR0aW5nc2xpbmsgLCBhcnRwYWNrICkgOgogSTExIC4gY3JlYXRlICggIkJhY2tpbmcgVXAgSW1wb3J0YW50IERhdGEiICwgJ1BsZWFzZSB3YWl0Li4uJyAsICcnICwgJycgKQogaWYgMjEgLSAyMTogbzBvIC0gbzAwME8wbyAvIElJMSAuIE8wMG9vb29vMDAgKyBPb28wMG9PbzBvT28KIGlmIDk5IC0gOTk6IE9vT28wbyAtIG9Pb08wbzAwT08wIC0gbzAwME8wbyAtIE9vT28wbyArIG8wb28gKyBPb28wMG9PbzBvT28KIGkxMWlpaTFJSTFJMSA9IG9wZW4gKCBJSUlJSSAsIG1vZGUgPSAncicgKQogSWlJaTExaUkxSUlpID0gaTExaWlpMUlJMUkxIC4gcmVhZCAoICkKIGkxMWlpaTFJSTFJMSAuIGNsb3NlICggKQogaWYgNSAtIDU6IG9vb09vb09PbzBPTyArIElpaQogT08wTzBvb29vMCA9IHJlIC4gY29tcGlsZSAoICdndWk9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaUlpMTFpSTFJSWkgKQogb29Pb28wT29PMCA9IE9PME8wb29vbzAgWyAwIF0gaWYgKCBsZW4gKCBPTzBPMG9vb28wICkgPiAwICkgZWxzZSAnMCcKIGlmIDM4IC0gMzg6IE9vMDBvbzBvTyAtIE8wMG9vb29vMDAgLiBpMTFpSWlpSWlpCiBpZiAyOCAtIDI4OiBPb09vMG8gLyBvb29Pb29PT28wT08gLiBvT29PMG8wME9PMAogaWYgb08wMG9PbyA9PSAndHJ1ZScgOgogIHRyeSA6CiAgIG9Pb28wTzAwT08gPSBvcGVuICggSUkxMWlpaWkxSWkgLCBtb2RlID0gJ3InICkKICAgSTExSUkxMUkxID0gb09vbzBPMDBPTyAuIHJlYWQgKCApCiAgIG9Pb28wTzAwT08gLiBjbG9zZSAoICkKICAgaWYgMjcgLSAyNzogT29vMDBvT28wb09vIC8gaWlJSTExaTFJMUlJaSAvIE9PTzBPME8wb29vb28KICBleGNlcHQgOgogICB4Ym1jIC4gbG9nICggIiMjIyBObyBmYXZvdXJpdGVzIGZpbGUgdG8gY29weSIgKQogICBpZiAyMyAtIDIzOiBPbzAwb28wb08gKyBJSTEgLyBJSTEgJSBJSTExaUlpSUlJaUkKIGlmIE9PT28wID09ICd0cnVlJyA6CiAgdHJ5IDoKICAgSUlpSSA9IG9wZW4gKCBPTzBvT29vICwgbW9kZSA9ICdyJyApCiAgIG9PT09PMDBvMDAgPSBJSWlJIC4gcmVhZCAoICkKICAgSUlpSSAuIGNsb3NlICggKQogICBpZiA2NiAtIDY2OiBvT29PMG8wME9PMCAqIElJSUlpaUlJMTExIC8gSUkxICogT09PME8wTzBvb29vbyAlIElJMTFpSWlJSUlpSQogIGV4Y2VwdCA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIE5vIHNvdXJjZXMgZmlsZSB0byBjb3B5IiApCiAgIGlmIDQ5IC0gNDk6IE9vbzAwb09vMG9PbyAuIG8wMDBPMG8gKiBPT08wTzBPMG9vb29vICogSUlJSWlpSUkxMTEgLyBPb09vMG8gKiBJSTEKIE9Pb08wME9PbyA9IDEKIG9vb09vICggKQogaWYgODIgLSA4MjogaWlJSTExaTFJMUlJaSAvIElJSUlpaUlJMTExIC8gSUlJSWlpSUkxMTEgJSBJSUlJaWlJSTExMQogaWYgMjAgLSAyMDogaTExSWlpCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBpMUkxaUkgKSA6CiAgaWYgNjMgLSA2MzogSUlpaTFJIC4gbzBvbwogIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIGlpSTFJaUkgKSA6CiAgIG9zIC4gcmVtb3ZlICggaTFJMWlJICkKICAgaWYgMTAwIC0gMTAwOiBPMDBvb29vbzAwICogTzAwb29vb28wMAogIGVsc2UgOgogICBvcyAuIHJlbmFtZSAoIGkxSTFpSSAsIGlpSTFJaUkgKQogICBpZiAyNiAtIDI2OiBJSTExaUlpSUlJaUkgLiBvMG9vICUgSWlpCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBJSSApIDoKICBvcyAuIHJlbW92ZSAoIElJICkKICBpZiA5NCAtIDk0OiBPbzAwb28wb08KICBpZiAxNSAtIDE1OiBJSUlJaWlJSTExMSAtIE9vMDBvbzBvTyAvIE9PTzBPME8wb29vb28KIGlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBJMTFJSTFpICkgOgogIElJSUlJaUkxMUlpID0gb3BlbiAoIEkxMUlJMWkgLCBtb2RlID0gJ3crJyApCiAgSUlJSUlpSTExSWkgLiBjbG9zZSAoICkKICBpZiAyOCAtIDI4OiBPb09vMG8gLiBPMDBvb29vbzAwIC8gb09vTzBvMDBPTzAKIEkxMSAuIGNsb3NlICggKQogSTExIC4gY3JlYXRlICggIkRvd25sb2FkaW5nIFNraW4gRml4IiAsICJEb3dubG9hZGluZyBndWlzZXR0aW5ncy54bWwiICwgJycgLCAnUGxlYXNlIFdhaXQnICkKIE9PbzAwb09vID0gb3MgLiBwYXRoIC4gam9pbiAoIEkxMWkxICwgJ2d1aWZpeC56aXAnICkKIGlmIDc3IC0gNzc6IGkxMWlJaWlJaWkgLyBPb09vMG8gLyBpMTFpSWlpSWlpICUgSWlpIC0gT29PbzBvCiBpZiA4MCAtIDgwOiBPb09vMG8gJSBJaWkgLiBJSTEgLiBPb28wMG9PbzBvT28gJSBPbzAwb28wb08KIHRyeSA6CiAgeGJtYyAuIGxvZyAoICIjIyMgYXR0ZW1wdGluZyB0byBkb3dubG9hZCBndWlzZXR0aW5ncy54bWwiICkKICBkb3dubG9hZGVyIC4gZG93bmxvYWQgKCBndWlzZXR0aW5nc2xpbmsgLCBPT28wMG9PbyAsIEkxMSApCiAgSTExIC4gY2xvc2UgKCApCiBleGNlcHQgOgogIGkxMSAuIG9rICggJ1Byb2JsZW0gRGV0ZWN0ZWQnICwgJ1NvcnJ5IHRoZXJlIHdhcyBhIHByb2JsZW0gZG93bmxvYWRpbmcgdGhlIGd1aXNldHRpbmdzIGZpbGUuIFBsZWFzZSBjaGVjayB5b3VyIHN0b3JhZ2UgbG9jYXRpb24sIGlmIHlvdVwncmUgY2VydGFpbiB0aGF0XCdzIG9rIHBsZWFzZSBub3RpZnkgdGhlIGJ1aWxkIGF1dGhvciBvbiB0aGUgcmVsZXZhbnQgc3VwcG9ydCB0aHJlYWQuJyApCiAgeGJtYyAuIGxvZyAoICIjIyMgRkFJTEVEIHRvIGRvd25sb2FkICVzIiAlIGd1aXNldHRpbmdzbGluayApCiAgaWYgNiAtIDY6IE9vT28wbyAlIE9vMDBvbzBvTyAvIElJSUlpaUlJMTExICsgT29PbzBvIC4gb29vT29vT09vME9PCiAgaWYgNzAgLSA3MDogSUlpaTFJIC8gSUlJSWlpSUkxMTEKIGlmIHppcGZpbGUgLiBpc196aXBmaWxlICggT09vMDBvT28gKSA6CiAgaTExaWkxMUlpSTEgPSBzdHIgKCBvcyAuIHBhdGggLiBnZXRzaXplICggT09vMDBvT28gKSApCiAgaWYgNjEgLSA2MTogT09PME8wTzBvb29vbyAqIG8waWkxSSArIE9vT28wbyAtIElJMTFpSWlJSUlpSSAuIG8wMDBPMG8gLSBPbzAwb28wb08KIGVsc2UgOgogIGkxMWlpMTFJaUkxID0gb29Pb28wT29PMAogIGlmIDcgLSA3OiBvT29PMG8wME9PMAogIGlmIDgxIC0gODE6IGlpSUkxMWkxSTFJSWkgJSBPb28wMG9PbzBvT28gJSBvMGlpMUkgLyBvMG8KIElJSUlJaUkxMUlpID0gb3BlbiAoIEkxMUlJMWkgLCBtb2RlID0gJ3InICkKIG9PbzBPID0gSUlJSUlpSTExSWkgLiByZWFkICggKQogSUlJSUlpSTExSWkgLiBjbG9zZSAoICkKIGlmIDk1IC0gOTU6IElpaSAtIE9PTzBPME8wb29vb28gJSBJSTEKIElpaWlpaSA9IHJlIC4gY29tcGlsZSAoICdpZD0iKC4rPykiJyApIC4gZmluZGFsbCAoIG9PbzBPICkKIE9Pb28wMDBvID0gcmUgLiBjb21waWxlICggJ25hbWU9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBvT28wTyApCiBPMDAwT29PTzBvTyA9IHJlIC4gY29tcGlsZSAoICd2ZXJzaW9uPSIoLis/KSInICkgLiBmaW5kYWxsICggb09vME8gKQogaWYgMTMgLSAxMzogaTExaUlpaUlpaQogaUlJMW8wME9PMCA9IElpaWlpaSBbIDAgXSBpZiAoIGxlbiAoIElpaWlpaSApID4gMCApIGVsc2UgJycKIE9vaWkgPSBPT29vMDAwbyBbIDAgXSBpZiAoIGxlbiAoIE9Pb28wMDBvICkgPiAwICkgZWxzZSAnJwogb08wbzBvbzBPMCA9IE8wMDBPb09PMG9PIFsgMCBdIGlmICggbGVuICggTzAwME9vT08wb08gKSA+IDAgKSBlbHNlICcnCiBpZiA1NCAtIDU0OiBJSTExaUlpSUlJaUkgLiBvT29PMG8wME9PMCAqIG8wbyAlIE9vT28wbyAuIE9PTzBPME8wb29vb28gKiBPbzAwb28wb08KIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG9vME9vb09PbzAgKSA6CiAgb3MgLiByZW1vdmVkaXJzICggb28wT29vT09vMCApCiAgaWYgODcgLSA4NzogSUlJSWlpSUkxMTEgJSBvT29PMG8wME9PMCAqIGlpSUkxMWkxSTFJSWkKICBpZiA1OSAtIDU5OiBpaUlJMTFpMUkxSUlpIC8gbzBvIC0gSUlpaTFJICogSUlpaTFJCiBpZiBvb09vbzBPb08wICE9IGkxMWlpMTFJaUkxIDoKICB0cnkgOgogICBvcyAuIHJlbmFtZSAoIGlpSTFJaUkgLCBpMUkxaUkgKQogICBpZiAxOCAtIDE4OiBvMG8gKiBvT29PMG8wME9PMCAvIGkxMWlJaWlJaWkgLyBJSWlpMUkgKiBJSTEgLiBJSTExaUlpSUlJaUkKICBleGNlcHQgOgogICBpMTEgLiBvayAoICJOTyBHVUlTRVRUSU5HUyEiICwgJ05vIGd1aXNldHRpbmdzLnhtbCBmaWxlIGhhcyBiZWVuIGZvdW5kLicgLCAnUGxlYXNlIGV4aXQgS29kaSBhbmQgdHJ5IGFnYWluJyAsICcnICkKICAgcmV0dXJuCiAgIGlmIDY5IC0gNjk6IGlpSUkxMWkxSTFJSWkgKiBpMTFJaWkKICAgaWYgOTEgLSA5MTogbzBpaTFJIC4gaTExSWlpIC8gbzBvbyAvIGkxMWlJaWlJaWkgKiBvMGlpMUkKIGlmIHZpZGVvICE9ICdmcmVzaCcgOgogIG9PMDAwbzBPbzAwID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoIG5hbWUgLCAnV2UgaGlnaGx5IHJlY29tbWVuZCBiYWNraW5nIHVwIHlvdXIgZXhpc3RpbmcgYnVpbGQgYmVmb3JlIGluc3RhbGxpbmcgYW55IGNvbW11bml0eSBidWlsZHMuIFdvdWxkIHlvdSBsaWtlIHRvIHBlcmZvcm0gYSBiYWNrdXAgZmlyc3Q/JyAsIG5vbGFiZWwgPSAnQmFja3VwJyAsIHllc2xhYmVsID0gJ0luc3RhbGwnICkKICBpZiA1MiAtIDUyOiBvMDAwTzBvIC0gaTExaUlpaUlpaSAvIE9vMDBvbzBvTyAuIG9vb09vb09PbzBPTwogIGlmIG9PMDAwbzBPbzAwID09IDAgOgogICBPb09vME8wTyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIEkxMWkxICwgJ0NvbW11bml0eV9CdWlsZHMnICwgJ015X0J1aWxkcycgKSApCiAgIGlmIDM4IC0gMzg6IG9vb09vb09PbzBPTyArIElJMSAqIElpaSAlIG9vb09vb09PbzBPTwogICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggT29PbzBPME8gKSA6CiAgICBvcyAuIG1ha2VkaXJzICggT29PbzBPME8gKQogICAgaWYgOTEgLSA5MTogTzAwb29vb28wMCAtIG9Pb08wbzAwT08wICogbzAwME8wbwogICBPME8wID0gb08wb29vMDBvMG8wMDBPbyAoIGhlYWRpbmcgPSAiRW50ZXIgYSBuYW1lIGZvciB0aGlzIGJhY2t1cCIgKQogICBpZiAyNCAtIDI0OiBJaWkgKiBJSUlJaWlJSTExMQogICBpZiAoIG5vdCBPME8wICkgOgogICAgcmV0dXJuIEZhbHNlICwgMAogICAgaWYgMTcgLSAxNzogbzBvbyAuIG8wMDBPMG8gKiBPT08wTzBPMG9vb29vCiAgIG9PSUlJSSA9IHVybGxpYiAuIHF1b3RlX3BsdXMgKCBPME8wICkKICAgb29PT28gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBPb09vME8wTyAsIG9PSUlJSSArICcuemlwJyApICkKICAgaTFpaWkxSWlpaUkxaTEgPSBbICdwbHVnaW4ucHJvZ3JhbS50b3RhbGluc3RhbGxlcicgLCAncGx1Z2luLnByb2dyYW0udGJzJyBdCiAgIElJSWlJMWkxID0gWyAieGJtYy5sb2ciICwgInhibWMub2xkLmxvZyIgLCAia29kaS5sb2ciICwgImtvZGkub2xkLmxvZyIgLCAnLkRTX1N0b3JlJyAsICcuc2V0dXBfY29tcGxldGUnICwgJ1hCTUNIZWxwZXIuY29uZicgLCAnVGh1bWJzLmRiJyAsICcuZ2l0aWdub3JlJyBdCiAgIEkxMTFpaWlpaTEgPSAiQ3JlYXRpbmcgZnVsbCBiYWNrdXAgb2YgZXhpc3RpbmcgYnVpbGQiCiAgIE9PMG9vT29PTzBPT28gPSAiQXJjaGl2aW5nLi4uIgogICBPb29Pb29vbzAwMDAgPSAiIgogICBJMWlpMWkxMWkgPSAiUGxlYXNlIFdhaXQiCiAgIG8wME9vbzAgKCBPbzBvMDAwMG8wbzAgLCBvb09PbyAsIEkxMTFpaWlpaTEgLCBPTzBvb09vT08wT09vICwgT29vT29vb28wMDAwICwgSTFpaTFpMTFpICwgaTFpaWkxSWlpaUkxaTEgLCBJSUlpSTFpMSApCiAgIGlmIDgxIC0gODE6IElJMTFpSWlJSUlpSQogb28wTzAgPSBvcGVuICggSUlJSUkgLCBtb2RlID0gJ3crJyApCiBpZiA1OCAtIDU4OiBPb28wMG9PbzBvT28gLiBPb09vMG8gLiBJSUlJaWlJSTExMSAqIElJMSAvIElJSUlpaUlJMTExIC8gbzBvCiBpZiBvb09vbzBPb08wICE9IGkxMWlpMTFJaUkxIDoKICBvbzBPMCAuIHdyaXRlICggJ2lkPSInICsgc3RyICggaUlJMW8wME9PMCApICsgJyJcbm5hbWU9IicgKyBPb2lpICsgJyBbQ09MT1I9eWVsbG93XShQYXJ0aWFsbHkgaW5zdGFsbGVkKVsvQ09MT1JdIlxudmVyc2lvbj0iJyArIG9PMG8wb28wTzAgKyAnIlxuZ3VpPSInICsgaTExaWkxMUlpSTEgKyAnIicgKQogIGlmIDQxIC0gNDE6IG8wbyArIG8wb28gLiBvb28wTzBPMDAKIGVsc2UgOgogIG9vME8wIC4gd3JpdGUgKCAnaWQ9IicgKyBzdHIgKCBpSUkxbzAwT08wICkgKyAnIlxubmFtZT0iJyArIE9vaWkgKyAnIlxudmVyc2lvbj0iJyArIG9PMG8wb28wTzAgKyAnIlxuZ3VpPSInICsgaTExaWkxMUlpSTEgKyAnIicgKQogb28wTzAgLiBjbG9zZSAoICkKIGlmIDczIC0gNzM6IGkxMWlJaWlJaWkgKiBvMDAwTzBvICsgbzBpaTFJIC8gb29vT29vT09vME9PCiBpZiA1NiAtIDU2OiBPMDBvb29vbzAwCiBpZiB2aWRlbyA9PSAnbGlicHJvZmlsZScgb3IgdmlkZW8gPT0gJ2xpYnJhcnknIG9yIHZpZGVvID09ICd1cGRhdGVsaWJwcm9maWxlJyBvciB2aWRlbyA9PSAndXBkYXRlbGlicmFyeScgOgogIHRyeSA6CiAgIHNodXRpbCAuIGNvcHl0cmVlICggb08wbzBvMG9vTzBvTyAsIG8wT08wMG9PICwgc3ltbGlua3MgPSBGYWxzZSAsIGlnbm9yZSA9IHNodXRpbCAuIGlnbm9yZV9wYXR0ZXJucyAoICJUZXh0dXJlczEzLmRiIiAsICJBZGRvbnMxNi5kYiIgLCAiQWRkb25zMTUuZGIiICwgInNhbHRzY2FjaGUuZGItd2FsIiAsICJzYWx0c2NhY2hlLmRiLXNobSIgLCAic2FsdHNjYWNoZS5kYiIgLCAib25lY2hhbm5lbGNhY2hlLmRiIiApICkKICAgaWYgMTEgLSAxMTogaTExaUlpaUlpaSAlIG8waWkxSSAvIG8wbyAqIElJMQogIGV4Y2VwdCA6CiAgIE9Pb08wME9PbyA9IHhibWNndWkgLiBEaWFsb2cgKCApIC4geWVzbm8gKCBuYW1lICwgJ1RoZXJlIHdhcyBhbiBlcnJvciB0cnlpbmcgdG8gYmFja3VwIHNvbWUgZGF0YWJhc2VzLiBDb250aW51aW5nIG1heSB3aXBlIHlvdXIgZXhpc3RpbmcgbGlicmFyeS4gRG8geW91IHdpc2ggdG8gY29udGludWU/JyAsIG5vbGFiZWwgPSAnTm8sIGNhbmNlbCcgLCB5ZXNsYWJlbCA9ICdZZXMsIG92ZXJ3cml0ZScgKQogICBpZiA4MiAtIDgyOiBPbzAwb28wb08KICAgaWYgT09vTzAwT09vID09IDAgOgogICAgcmV0dXJuCiAgICBpZiAxMCAtIDEwOiBpaUlJMTFpMUkxSUlpICUgSUkxMWlJaUlJSWlJIC8gbzBvICogT28wMG9vMG9PIC0gbzBpaTFJCiAgb29PT28gPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBJMTFpMSAsICdEYXRhYmFzZS56aXAnICkgKQogIEkxMUkxaTFpSSAoIG8wT08wMG9PICwgb29PT28gKQogIGlmIDU0IC0gNTQ6IGkxMWlJaWlJaWkgLyBJSWlpMUkgJSBvT29PMG8wME9PMCAvIG8wMDBPMG8gLiBJSWlpMUkgLyBvb28wTzBPMDAKIGlmIE9Pb08wME9PbyA9PSAwIDoKICByZXR1cm4KICBpZiAxIC0gMTogT29PbzBvIC8gSWlpICogSWlpIC0gbzBpaTFJICUgSUlJSWlpSUkxMTEKIHRpbWUgLiBzbGVlcCAoIDEgKQogaWYgOTYgLSA5NjogT28wMG9vMG9PIC8gSUlJSWlpSUkxMTEgJSBvMG9vIC4gSUlpaTFJCiBpZiAzMCAtIDMwOiBvMG8gLSBvMG9vCiBpaWlpID0geGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggT28wbzAwMDBvMG8wICwgJy4uJyAsICdrb2RpdGVtcC56aXAnICkgKQogdGltZSAuIHNsZWVwICggMiApCiBJMTEgLiBjcmVhdGUgKCAiQ29tbXVuaXR5IEJ1aWxkcyIgLCAiRG93bmxvYWRpbmcgIiArIGRlc2NyaXB0aW9uICsgIiBidWlsZC4iICwgJycgLCAnUGxlYXNlIFdhaXQnICkKIElJaWkxSWkgPSBkZXNjcmlwdGlvbiAuIHJlcGxhY2UgKCAnICcgLCAnXycgKSAuIHJlcGxhY2UgKCAnOicgLCAnLScgKSAuIHJlcGxhY2UgKCAiJyIgLCAnJyApCiBPT28wMG9PbyA9IG9zIC4gcGF0aCAuIGpvaW4gKCBpSWkxaWkxSTEgLCBJSWlpMUlpICsgJy56aXAnICkKIGlmIDYyIC0gNjI6IElJaWkxSSAlIE9vT28wbyAlIG9Pb08wbzAwT08wICogT28wMG9vMG9PCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggaUlpMWlpMUkxICkgOgogIG9zIC4gbWFrZWRpcnMgKCBpSWkxaWkxSTEgKQogIGlmIDg3IC0gODc6IE9vMDBvbzBvTwogZG93bmxvYWRlciAuIGRvd25sb2FkICggdXJsICwgT09vMDBvT28gLCBJMTEgKQogaWYgNDUgLSA0NTogb29vT29vT09vME9PICsgT29vMDBvT28wb09vICogT09PME8wTzBvb29vbyAlIElJMTFpSWlJSUlpSSAuIElJaWkxSQogaWYgNTUgLSA1NTogT28wMG9vMG9PCiB0cnkgOgogIGlpaWkxMUlpSTEgPSBvcGVuICggT28wME9PT09PICwgbW9kZSA9ICdyJyApCiAgSWlpSWlPb08wbzAwbyA9IGlpaWkxMUlpSTEgLiByZWFkICggKQogIGlpaWkxMUlpSTEgLiBjbG9zZSAoICkKIGV4Y2VwdCA6CiAgeGJtYyAuIGxvZyAoICIjIyMgTm8gcHJvZmlsZXMgZGV0ZWN0ZWQsIG1vc3QgbGlrZWx5IGEgZnJlc2ggd2lwZSBwZXJmb3JtZWQiICkKICBpZiA0NiAtIDQ2OiBvb28wTzBPMDAgKyBPb09vMG8gJSBJSTEgKiBvT29PMG8wME9PMAogSTExIC4gY2xvc2UgKCApCiBJMTEgLiBjcmVhdGUgKCAiQ29tbXVuaXR5IEJ1aWxkcyIgLCAiQ2hlY2tpbmcgIiAsICcnICwgJ1BsZWFzZSBXYWl0JyApCiBpZiA4OSAtIDg5OiBPbzAwb28wb08gLSBPbzAwb28wb08gJSBvb28wTzBPMDAgLyBvMG8gKyBvb29Pb29PT28wT08gLSBPbzAwb28wb08KIGlmIDk3IC0gOTc6IElJSUlpaUlJMTExICUgSWlpIC8gb09vTzBvMDBPTzAgLyBJSWlpMUkgKiBJSTEgKiBJSTExaUlpSUlJaUkKIGlmIHppcGZpbGUgLiBpc196aXBmaWxlICggT09vMDBvT28gKSA6CiAgSTExIC4gdXBkYXRlICggMCAsICIiICwgIkV4dHJhY3RpbmcgWmlwIFBsZWFzZSBXYWl0IiApCiAgZXh0cmFjdCAuIGFsbCAoIE9PbzAwb09vICwgT28wbzAwMDBvMG8wICwgSTExICkKICBpZiA4MCAtIDgwOiBvb29Pb29PT28wT08gLyBPT08wTzBPMG9vb29vCiBlbHNlIDoKICBpMTEgLiBvayAoICdOb3QgYSB2YWxpZCB6aXAgZmlsZScgLCAnVGhpcyBmaWxlIGlzIG5vdCBhIHZhbGlkIHppcCBmaWxlLCBwbGVhc2UgbGV0IHRoZSBidWlsZCBhdXRob3Iga25vdyBvbiB0aGVpciBzdXBwb3J0IHRocmVhZCBzbyB0aGV5IGNhbiBhbWVuZCB0aGUgZG93bmxvYWQgcGF0aC4gSXRcJ3MgbW9zdCBsaWtlbHkganVzdCBhIHNpbXBsZSB0eXBvIG9uIHRoZWlyIGJlaGFsZi4nICkKICByZXR1cm4KICBpZiA1NSAtIDU1OiBvMDAwTzBvICogbzBvIC8gT09PME8wTzBvb29vbyAlIElpaQogSTExIC4gY3JlYXRlICggIlJlc3RvcmluZyBEZXBlbmRlbmNpZXMiICwgIkNoZWNraW5nICIgLCAnJyAsICdQbGVhc2UgV2FpdCcgKQogSTExIC4gdXBkYXRlICggMCAsICIiICwgIkV4dHJhY3RpbmcgWmlwIFBsZWFzZSBXYWl0IiApCiBpZiA3MSAtIDcxOiBpMTFpSWlpSWlpICogSWlpICogSUkxMWlJaUlJSWlJICsgb29vT29vT09vME9PICsgaWlJSTExaTFJMUlJaQogaWYgb08wMG9PbyA9PSAndHJ1ZScgOgogIHRyeSA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIEF0dGVtcHRpbmcgdG8gYWRkIGJhY2sgZmF2b3VyaXRlcyAjIyMiICkKICAgb28wTzAgPSBvcGVuICggSUkxMWlpaWkxSWkgLCBtb2RlID0gJ3crJyApCiAgIG9vME8wIC4gd3JpdGUgKCBJMTFJSTExSTEgKQogICBvbzBPMCAuIGNsb3NlICggKQogICBJMTEgLiB1cGRhdGUgKCAwICwgIiIgLCAiQ29weWluZyBGYXZvdXJpdGVzIiApCiAgZXhjZXB0IDoKICAgeGJtYyAuIGxvZyAoICIjIyMgRmFpbGVkIHRvIGNvcHkgYmFjayBmYXZvdXJpdGVzIiApCiAgIGlmIDU5IC0gNTk6IE9vMDBvbzBvTwogaWYgT09PbzAgPT0gJ3RydWUnIDoKICB0cnkgOgogICB4Ym1jIC4gbG9nICggIiMjIyBBdHRlbXB0aW5nIHRvIGFkZCBiYWNrIHNvdXJjZXMgIyMjIiApCiAgIG9vME8wID0gb3BlbiAoIE9PMG9Pb28gLCBtb2RlID0gJ3crJyApCiAgIG9vME8wIC4gd3JpdGUgKCBvT09PTzAwbzAwICkKICAgb28wTzAgLiBjbG9zZSAoICkKICAgSTExIC4gdXBkYXRlICggMCAsICIiICwgIkNvcHlpbmcgU291cmNlcyIgKQogICBpZiA1NCAtIDU0OiBJSTExaUlpSUlJaUkKICBleGNlcHQgOgogICB4Ym1jIC4gbG9nICggIiMjIyBGYWlsZWQgdG8gY29weSBiYWNrIHNvdXJjZXMiICkKICAgaWYgMjcgLSAyNzogSWlpIC0gbzBvbyArIG8waWkxSSArIGkxMUlpaSAuIG8wb28KIHRpbWUgLiBzbGVlcCAoIDEgKQogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggbzBPTzAwb08gKSA6CiAgc2h1dGlsIC4gcm10cmVlICggbzBPTzAwb08gKQogIGlmIDg2IC0gODY6IE9vbzAwb09vMG9PbyAtIElJMSAtIGkxMUlpaSAlIG9vbzBPME8wMAogIGlmIDE2IC0gMTY6IGkxMUlpaSArIGlpSUkxMWkxSTFJSWkgKyBJSTEKIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG8wICkgOgogIElJSUlJaUkxMUlpID0gb3BlbiAoIG8wICwgbW9kZSA9ICdyJyApCiAgb09vME8gPSBJSUlJSWlJMTFJaSAuIHJlYWQgKCApCiAgSUlJSUlpSTExSWkgLiBjbG9zZSAoICkKICBpSWlpSTFJID0gcmUgLiBjb21waWxlICggJ3ZlcnNpb249Iltcc1xTXSo/IicgKSAuIGZpbmRhbGwgKCBvT28wTyApCiAgTzBPbzAwMG9vTzAwID0gaUlpaUkxSSBbIDAgXSBpZiAoIGxlbiAoIGlJaWlJMUkgKSA+IDAgKSBlbHNlICcnCiAgaUlJSWlJaSA9IG9PbzBPIC4gcmVwbGFjZSAoIE8wT28wMDBvb08wMCAsICd2ZXJzaW9uPSInICsgb08wbzBvbzBPMCArICciJyApCiAgb28wTzAgPSBvcGVuICggbzAgLCBtb2RlID0gJ3cnICkKICBvbzBPMCAuIHdyaXRlICggc3RyICggaUlJSWlJaSApICkKICBvbzBPMCAuIGNsb3NlICggKQogIGlmIDg3IC0gODc6IG8wMDBPMG8gLiBvb29Pb29PT28wT08gLyBPbzAwb28wb08gLSBJSTEKIGVsc2UgOgogIG9vME8wID0gb3BlbiAoIG8wICwgbW9kZSA9ICd3KycgKQogIG9vME8wIC4gd3JpdGUgKCAnZGF0ZT0iMDEwMTEwMDEiXG52ZXJzaW9uPSInICsgb08wbzBvbzBPMCArICciJyApCiAgb28wTzAgLiBjbG9zZSAoICkKICBpZiAzMyAtIDMzOiBvb29Pb29PT28wT08gJSBvMG9vIC4gSUlpaTFJIC8gT28wMG9vMG9PCiAgaWYgMyAtIDM6IElJSUlpaUlJMTExICsgbzBvbwogaWYgSUlpMUlpaWlJMUlpID09ICdmYWxzZScgOgogIG9zIC4gcmVtb3ZlICggT09vMDBvT28gKQogIGlmIDYwIC0gNjA6IG8wb28gLiBJaWkgLSBvT29PMG8wME9PMCAtIG8wMDBPMG8gLSBPb28wMG9PbzBvT28gJSBpaUlJMTFpMUkxSUlpCiAgaWYgNjIgLSA2MjogT09PME8wTzBvb29vbyArIG9vbzBPME8wMCAtIG9vbzBPME8wMCAlIElJaWkxSQogaWYgJ3Byb2YnIGluIHZpZGVvIDoKICB0cnkgOgogICBpMUlJSTFpID0gb3BlbiAoIE9vMDBPT09PTyAsIG1vZGUgPSAndysnICkKICAgaTFJSUkxaSAuIHdyaXRlICggSWlpSWlPb08wbzAwbyApCiAgIGkxSUlJMWkgLiBjbG9zZSAoICkKICBleGNlcHQgOgogICB4Ym1jIC4gbG9nICggIiMjIyBGYWlsZWQgdG8gd3JpdGUgZXhpc3RpbmcgcHJvZmlsZSBpbmZvIGJhY2sgaW50byBwcm9maWxlcy54bWwiICkKICAgaWYgMzkgLSAzOTogT29vMDBvT28wb09vIC0gSUlJSWlpSUkxMTEgLyBvb29Pb29PT28wT08gLiBPbzAwb28wb08gJSBvMDAwTzBvCiAgIGlmIDE4IC0gMTg6IElJMSAqIElpaSAuIE9vbzAwb09vMG9PbyArIE9PTzBPME8wb29vb28gLSBJSTEgKiBvMGlpMUkKIGlmIHZpZGVvID09ICdsaWJyYXJ5JyBvciB2aWRlbyA9PSAnbGlicHJvZmlsZScgb3IgdmlkZW8gPT0gJ3VwZGF0ZWxpYnByb2ZpbGUnIG9yIHZpZGVvID09ICd1cGRhdGVsaWJyYXJ5JyA6CiAgZXh0cmFjdCAuIGFsbCAoIG9vT09vICwgb08wbzBvMG9vTzBvTyAsIEkxMSApCiAgaWYgMjYgLSAyNjogaTExaUlpaUlpaSAlIG9Pb08wbzAwT08wICogSUkxMWlJaUlJSWlJIC8gaTExaUlpaUlpaQogIGlmIDQ5IC0gNDk6IE8wMG9vb29vMDAgLSBJaWkgLSBvMG8gKiBvMDAwTzBvIC4gaTExSWlpCiAgaWYgT09vTzAwT09vICE9IDEgOgogICBzaHV0aWwgLiBybXRyZWUgKCBvME9PMDBvTyApCiB0cnkgOgogIEkxMSAuIGNsb3NlICggKQogZXhjZXB0IDoKICBwYXNzCiAgaWYgMjQgLSAyNDogaTExSWlpCiAgaWYgNzkgLSA3OTogTzAwb29vb28wMCAuIG8wbyAlIG8wb28gJSBPbzAwb28wb08gLSBvb29Pb29PT28wT08gLSBpMTFpSWlpSWlpCiBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBvT09vbzBPbyApIDoKICBvMDBvbzBPTzAgKCBkZXNjcmlwdGlvbiApCiAgaWYgOTcgLSA5Nzogb09vTzBvMDBPTzAgLyBJSTEgJSBvMG9vCiAgdHJ5IDoKICAgb3MgLiByZW1vdmUgKCBvT09vbzBPbyApCiAgIGlmIDU1IC0gNTU6IG8wb28gKiBvMGlpMUkgLSBvMG8gKyBJSWlpMUkgLiBvMG9vICsgb29vT29vT09vME9PCiAgZXhjZXB0IDoKICAgeGJtYyAuIGxvZyAoICIjIyMnIEZhaWxlZCB0byByZW1vdmU6ICVzIiAlIG9PT29vME9vICkKICAgaWYgNCAtIDQ6IElJSUlpaUlJMTExCiAgdHJ5IDoKICAgc2h1dGlsIC4gcm10cmVlICggb08wT28gKQogICBpZiA0MyAtIDQzOiBPMDBvb29vbzAwIC4gbzAwME8wbyAqIElJaWkxSSAqIGkxMWlJaWlJaWkgLSBJSTExaUlpSUlJaUkgKyBpMTFJaWkKICBleGNlcHQgOgogICB4Ym1jIC4gbG9nICggIiMjIycgRmFpbGVkIHRvIHJlbW92ZTogJXMiICUgb08wT28gKQogICBpZiA1NiAtIDU2OiBpaUlJMTFpMUkxSUlpICUgaTExaUlpaUlpaSAvIElJSUlpaUlJMTExIC4gT29PbzBvIC4gbzBvbyAtIElpaQogZWxzZSA6CiAgeGJtYyAuIGxvZyAoICIjIyMgQ29tbXVuaXR5IEJ1aWxkcyAtIHVzaW5nIGFuIG9sZCBidWlsZCIgKQogIGlmIDMyIC0gMzI6IE9vT28wbyAvIG9vb09vb09PbzBPTyAvIG8wMDBPMG8KICBpZiAyMiAtIDIyOiBvMG9vIC0gSWlpIC4gaWlJSTExaTFJMUlJaSArIG8waWkxSQogaWYgb29Pb28wT29PMCAhPSBpMTFpaTExSWlJMSA6CiAgeGJtYyAuIGxvZyAoICIjIyMgR1VJIFNJWkUgRElGRkVSRU5UIEFUVEVNUFRJTkcgTUVSR0UgIyMjIiApCiAgb09vbzBvb28wID0gb3MgLiBwYXRoIC4gam9pbiAoIE9vMG8wMDAwbzBvMCAsICduZXdidWlsZCcgKQogIGlmIDk3IC0gOTc6IE8wMG9vb29vMDAgJSBJSTEKICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggb09vbzBvb28wICkgOgogICBvcyAuIG1ha2VkaXJzICggb09vbzBvb28wICkKICAgaWYgODMgLSA4MzogbzBvIC4gSUkxMWlJaUlJSWlJICsgT29PbzBvICogbzBvIC4gT29PbzBvICsgb29vT29vT09vME9PCiAgb3MgLiBtYWtlZGlycyAoIG9vME9vb09PbzAgKQogIHRpbWUgLiBzbGVlcCAoIDEgKQogIGkxMUlJICggZ3Vpc2V0dGluZ3NsaW5rICwgdmlkZW8gKQogIHRpbWUgLiBzbGVlcCAoIDEgKQogIElpSUkxICggKQogIGkxMSAuIG9rICggIkZvcmNlIENsb3NlIFJlcXVpcmVkIiAsICJJZiB5b3VcJ3JlIHNlZWluZyB0aGlzIG1lc3NhZ2UgaXQgbWVhbnMgdGhlIGZvcmNlIGNsb3NlIHdhcyB1bnN1Y2Nlc3NmdWwuIFBsZWFzZSBjbG9zZSBYQk1DL0tvZGkgdmlhIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBvciBwdWxsIHRoZSBwb3dlci4iICkKICBpZiA2NCAtIDY0OiBJSUlJaWlJSTExMSAuIG8waWkxSSAtIE8wMG9vb29vMDAKIGlmIG9vT29vME9vTzAgPT0gaTExaWkxMUlpSTEgOgogIGkxMSAuIG9rICggJ1N1Y2Nlc3NmdWxseSBVcGRhdGVkJyAsICdDb25ncmF0dWxhdGlvbnMgdGhlIGZvbGxvd2luZyBidWlsZDpbQ09MT1I9ZG9kZ2VyYmx1ZV0nICwgZGVzY3JpcHRpb24gLCAnWy9DT0xPUl1oYXMgYmVlbiBzdWNjZXNzZnVsbHkgdXBkYXRlZCEnICkKICBpZiAzNSAtIDM1OiBvT29PMG8wME9PMCAlIElJMQogIGlmIDU5IC0gNTk6IG8wMDBPMG8gJSBvMG8KZGVmIGlpSWlpSWkxaWlpSWkgKCApIDoKIGlmIEkxSWlpSSAuIGdldFNldHRpbmcgKCAnZW1haWwnICkgPT0gJycgOgogIGkxMSAuIG9rICggIk5vIEVtYWlsIEFkZHJlc3MgU2V0IiAsICJBIG5ldyB3aW5kb3cgd2lsbCBOb3cgb3BlbiBmb3IgeW91IHRvIGVudGVyIHlvdXIgRW1haWwgYWRkcmVzcy4gVGhlIGxvZ2ZpbGUgd2lsbCBiZSBzZW50IGhlcmUiICkKICBJMUlpaUkgLiBvcGVuU2V0dGluZ3MgKCApCiB1cGxvYWRMb2cgLiBNYWluICggKQogaWYgNDggLSA0ODogaWlJSTExaTFJMUlJaSAtIG8wb28gLiBvMG8gLSBJSWlpMUkgJSBJSUlJaWlJSTExMQogaWYgNDcgLSA0Nzogb29vME8wTzAwIC8gSUkxIC0gT29vMDBvT28wb09vCmRlZiBvT29PbzAgKCBpbmZvICkgOgogaWYgb3MgLiBwYXRoIC4gZXhpc3RzICggSUlpaWlpaWlJaTFJMSApIDoKICBvMG8wTzBPMDBvT09vID0gb3BlbiAoIElJaWlpaWlpSWkxSTEgLCAncicgKQogIG9PbzBPID0gbzBvME8wTzAwb09PbyAuIHJlYWQgKCApCiAgbzBvME8wTzAwb09PbyAuIGNsb3NlICggKQogIG9vbzBPME9vME8gPSByZSAuIGNvbXBpbGUgKCAnbD0iKC4rPykiJyApIC4gZmluZGFsbCAoIG9PbzBPICkKICBPb29JaWkxSTFpSSA9IG9vbzBPME9vME8gWyAwIF0gaWYgKCBsZW4gKCBvb28wTzBPbzBPICkgPiAwICkgZWxzZSAnJwogIG9PT29vbyA9IHJlIC4gY29tcGlsZSAoICdwPSIoLis/KSInICkgLiBmaW5kYWxsICggb09vME8gKQogIG9PTzAwbzBvb29PbzAgPSBvT09vb28gWyAwIF0gaWYgKCBsZW4gKCBvT09vb28gKSA+IDAgKSBlbHNlICcwJwogIGlmIG9PTzAwbzBvb29PbzAgIT0gJzAnIDoKICAgb09PMDBvMG9vb09vMCA9IGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggb09PMDBvMG9vb09vMCApCiAgaWYgT29vSWlpMUkxaUkgIT0gJycgOgogICBPb29JaWkxSTFpSSA9IGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggT29vSWlpMUkxaUkgKQogIGlmICdXZWxjb21lIEJhY2snIGluIE9vb0lpaTFJMWlJIGFuZCBPbyAuIHJlcGxhY2UgKCAnJTIwJyAsICcnICkgaW4gT29vSWlpMUkxaUkgYW5kIGluZm8gPT0gJ3Bvc3RzJyA6CiAgIHJldHVybiBvT08wMG8wb29vT28wCiAgaWYgJ1dlbGNvbWUgQmFjaycgaW4gT29vSWlpMUkxaUkgYW5kIE9vIC4gcmVwbGFjZSAoICclMjAnICwgJycgKSBpbiBPb29JaWkxSTFpSSBhbmQgaW5mbyA9PSAnd2VsY29tZXRleHQnIDoKICAgcmV0dXJuIE9vb0lpaTFJMWlJCiAgZWxzZSA6CiAgIHJldHVybiAnRmFsc2UnCiBlbHNlIDoKICByZXR1cm4gJ0ZhbHNlJwogIGlmIDkgLSA5OiBPMDBvb29vbzAwICUgT29PbzBvIC0gbzBvbyAqIElpaSAuIG8waWkxSQogIGlmIDE4IC0gMTg6IElJSUlpaUlJMTExIC4gSWlpICsgb29vME8wTzAwIC4gbzAwME8wbyArIElJMSAuIG8wb28KZGVmIGkxMUkxSWlJaSAoIGxvY2FsYnVpbGRjaGVjayAsIGxvY2FsdmVyc2lvbmNoZWNrICwgbG9jYWxpZGNoZWNrICkgOgogcHJpbnQgIiMjIyBVU0VSX0lORk8gQ0hFQ0siCiBpZiBpSTFJaTExMTExaUlpID09ICd0cnVlJyA6CiAgdHJ5IDoKICAgT08gPSAnaHR0cDovL25vb2JzYW5kbmVyZHMuY29tL1RJL2xvZ2luL2xvZ2luX2RldGFpbHMucGhwP3VzZXI9JXMmcGFzcz0lcycgJSAoIE9vICwgbzBPICkKICAgSWkxaUkxMTFJSTFJMSA9IG9PT09Pb09PMG8gKCBPTyAsIDEwICkgLiByZXBsYWNlICggJ1xuJyAsICcnICkgLiByZXBsYWNlICggJ1xyJyAsICcnICkKICAgb29vME8wT28wTyA9IHJlIC4gY29tcGlsZSAoICdsb2dpbl9tc2c9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaTFpSTExMUlJMUkxICkKICAgT29vSWlpMUkxaUkgPSBvb28wTzBPbzBPIFsgMCBdIGlmICggbGVuICggb29vME8wT28wTyApID4gMCApIGVsc2UgJycKICAgb09Pb29vID0gcmUgLiBjb21waWxlICggJ3Bvc3RzPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiAgIG9PTzAwbzBvb29PbzAgPSBvT09vb28gWyAwIF0gaWYgKCBsZW4gKCBvT09vb28gKSA+IDAgKSBlbHNlICcwJwogIGV4Y2VwdCA6CiAgIE9vb0lpaTFJMWlJID0gJ1tDT0xPUj1saW1lXVVOQUJMRSBUTyBWRVJJRlkgTE9HSU5bL0NPTE9SXScKICAgaWYgNDMgLSA0MzogT28wMG9vMG9PIC8gbzBvICsgbzBvbwogZWxzZSA6CiAgT29vSWlpMUkxaUkgPSAnW0NPTE9SPWxpbWVdUkVHSVNURVIgRk9SIEZSRUUgVE8gVU5MT0NLIEZFQVRVUkVTWy9DT0xPUl0nCiAgaWYgMzggLSAzODogb29vME8wTzAwCiBwcmludCAiIyMjIFdFTENPTUVURVhUOiAiICsgT29vSWlpMUkxaUkKIGlmIDU5IC0gNTk6IG8wMDBPMG8KIE9PID0gJ2h0dHA6Ly9ub29ic2FuZG5lcmRzLmNvbS9USS9tZW51X2NoZWNrJwogdHJ5IDoKICBJaTFpSTExMUlJMUkxID0gb09PT09vT08wbyAoIE9PICwgMTAgKSAuIHJlcGxhY2UgKCAnXG4nICwgJycgKSAuIHJlcGxhY2UgKCAnXHInICwgJycgKQogIE9vTzBPT29PMCA9IHJlIC4gY29tcGlsZSAoICdkPSIoLis/KSInICkgLiBmaW5kYWxsICggSWkxaUkxMTFJSTFJMSApCiAgaWlJMTFpID0gT29PME9Pb08wIFsgMCBdIGlmICggbGVuICggT29PME9Pb08wICkgPiAwICkgZWxzZSAnbm9uZScKIGV4Y2VwdCA6CiAgaWlJMTFpID0gJ25vbmUnCiAgaWYgMjEgLSAyMTogb09vTzBvMDBPTzAgLSBvb29Pb29PT28wT08gKiBvMG9vCiBwcmludCAiIyMjIE1FTlU6ICIgKyBpaUkxMWkKIGlmIDk4IC0gOTg6IG9Pb08wbzAwT08wIC0gSUkxMWlJaUlJSWlJICUgSUlpaTFJCiBpZiA1NCAtIDU0OiBvT29PMG8wME9PMCArIE8wMG9vb29vMDAgLSBvMG8gKiBJSTEKIGlmIG5vdCAnUkVHSVNURVIgRk9SIEZSRUUnIGluIE9vb0lpaTFJMWlJIGFuZCBub3QgJ1VOQUJMRSBUTyBWRVJJRlknIGluIE9vb0lpaTFJMWlJIDoKICB4Ym1jIC4gbG9nICggIiMjIyBBVFRFTVBUSU5HIFRPIFdSSVRFIENPT0tJRSAiICkKICBvbzBPMCA9IG9wZW4gKCBJSWlpaWlpaUlpMUkxICwgbW9kZSA9ICd3KycgKQogIG9vME8wIC4gd3JpdGUgKCAnZD0iJyArIGJpbmFzY2lpIC4gaGV4bGlmeSAoIElpMUlpICggKSApICsgJyJcbmw9IicgKyBiaW5hc2NpaSAuIGhleGxpZnkgKCBPb29JaWkxSTFpSSApICsgJyJcbnA9IicgKyBiaW5hc2NpaSAuIGhleGxpZnkgKCBvT08wMG8wb29vT28wICkgKyAnIlxubT0iJyArIGJpbmFzY2lpIC4gaGV4bGlmeSAoIGlpSTExaSApICsgJyInICkKICBvbzBPMCAuIGNsb3NlICggKQogIGlmIDcxIC0gNzE6IG8waWkxSSArIElJMSAqIE9vbzAwb09vMG9PbyAvIE9vT28wbwogTzBvT08wbyAoIGxvY2FsYnVpbGRjaGVjayAsIGxvY2FsdmVyc2lvbmNoZWNrICwgbG9jYWxpZGNoZWNrICwgT29vSWlpMUkxaUkgLCBpaUkxMWkgKQogaWYgNzggLSA3ODogT29PbzBvICUgSUkxMWlJaUlJSWlJCiBpZiA3MyAtIDczOiBvT29PMG8wME9PMCArIG9vbzBPME8wMCAqIG8wMDBPMG8gKiBvMG8KZGVmIE9vT09vME9Pb08gKCApIDoKIHhibWMgLiBleGVjdXRlYnVpbHRpbiAoICdVcGRhdGVMb2NhbEFkZG9ucycgKQogeGJtYyAuIGV4ZWN1dGVidWlsdGluICggJ1VwZGF0ZUFkZG9uUmVwb3MnICkKIHhibWNndWkgLiBEaWFsb2cgKCApIC4gb2sgKCAnRm9yY2UgUmVmcmVzaCBTdGFydGVkIFN1Y2Nlc3NmdWxseScgLCAnRGVwZW5kaW5nIG9uIHRoZSBzcGVlZCBvZiB5b3VyIGRldmljZSBpdCBjb3VsZCB0YWtlIGEgZmV3IG1pbnV0ZXMgZm9yIHRoZSB1cGRhdGUgdG8gdGFrZSBlZmZlY3QuJyApCiByZXR1cm4KIGlmIDM1IC0gMzU6IG8wbyAqIE9PTzBPME8wb29vb28gKiBvMG9vIC4gb09vTzBvMDBPTzAKIGlmIDc0IC0gNzQ6IG9vbzBPME8wMCAqIG9vbzBPME8wMCAqIG8waWkxSSAvIG9vb09vb09PbzBPTwpkZWYgb29JMTExMSAoICkgOgogbzBPT09vMCA9IDEKIHRyeSA6CiAgb09PT09vT08wbyAoICdodHRwOi8vZ29vZ2xlLmNvbScgLCA1ICkKIGV4Y2VwdCA6CiAgdHJ5IDoKICAgb09PT09vT08wbyAoICdodHRwOi8vZ29vZ2xlLmNvbScgLCA1ICkKICBleGNlcHQgOgogICB0cnkgOgogICAgb09PT09vT08wbyAoICdodHRwOi8vZ29vZ2xlLmNvbScgLCA1ICkKICAgZXhjZXB0IDoKICAgIHRyeSA6CiAgICAgb09PT09vT08wbyAoICdodHRwOi8vZ29vZ2xlLmNuJyAsIDUgKQogICAgZXhjZXB0IDoKICAgICB0cnkgOgogICAgICBvT09PT29PTzBvICggJ2h0dHA6Ly9nb29nbGUuY24nICwgNSApCiAgICAgZXhjZXB0IDoKICAgICAgaTExIC4gb2sgKCAiTk8gSU5URVJORVQgQ09OTkVDVElPTiIgLCAnSXQgbG9va3MgbGlrZSB0aGlzIGRldmljZSBpc25cJ3QgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldC4gT25seSBzb21lIG9mIHRoZSBtYWludGVuYW5jZSBvcHRpb25zIHdpbGwgd29yayB1bnRpbCB5b3UgZml4IHRoZSBjb25uZWN0aXZpdHkgcHJvYmxlbS4nICkKICAgICAgTzBvT08wbyAoICcnICwgJycgLCAnJyAsICdbQ09MT1I9b3JhbmdlXU5PIElOVEVSTkVUIENPTk5FQ1RJT05bL0NPTE9SXScgKQogICAgICBvME9PT28wID0gMAogaWYgbzBPT09vMCA9PSAxIDoKICBvMDBvb28wTyAoICkKICBpZiA1NCAtIDU0OiBvT29PMG8wME9PMCAqIE9vMDBvbzBvTwogIGlmIDMgLSAzOiBPbzAwb28wb08gLSBvT29PMG8wME9PMCAqIG9vbzBPME8wMCAqIG9Pb08wbzAwT08wICsgaWlJSTExaTFJMUlJaQpkZWYgbzAwb29vME8gKCApIDoKIG8wTzBvb29vb29vMDAgPSAnTm9uZScKIE9vMDBPME8gPSAnMCcKIGlmIDE1IC0gMTU6IG9Pb08wbzAwT08wICogSUlJSWlpSUkxMTEgLyBvb28wTzBPMDAgLiBvMGlpMUkgLyBJSUlJaWlJSTExMSAlIElpaQogaWYgNzUgLSA3NTogSUkxICUgaTExaUlpaUlpaSAlIElJaWkxSSAlIG9Pb08wbzAwT08wIC8gaTExaUlpaUlpaQogSUlJSUlpSTExSWkgPSBvcGVuICggbzAgLCBtb2RlID0gJ3InICkKIG9PbzBPID0gSUlJSUlpSTExSWkgLiByZWFkICggKQogSUlJSUlpSTExSWkgLiBjbG9zZSAoICkKIGlmIDk2IC0gOTY6IGkxMUlpaSAqIG9vb09vb09PbzBPTyAvIElJaWkxSSAvIG8wbwogaTExMTFpaTEgPSByZSAuIGNvbXBpbGUgKCAnZGF0ZT0iKC4rPykiJyApIC4gZmluZGFsbCAoIG9PbzBPICkKIElpSTEgPSBpMTExMWlpMSBbIDAgXSBpZiAoIGxlbiAoIGkxMTExaWkxICkgPiAwICkgZWxzZSAnJwogaUlpaUkxSSA9IHJlIC4gY29tcGlsZSAoICd2ZXJzaW9uPSIoLis/KSInICkgLiBmaW5kYWxsICggb09vME8gKQogTzBPbzAwMG9vTzAwID0gaUlpaUkxSSBbIDAgXSBpZiAoIGxlbiAoIGlJaWlJMUkgKSA+IDAgKSBlbHNlICcnCiBpZiA3OSAtIDc5OiBvMG9vICsgT09PME8wTzBvb29vbyAqIElJMTFpSWlJSUlpSQogb28wTyA9IG9wZW4gKCBJSUlJSSAsIG1vZGUgPSAncicgKQogSWlpMWlJMWlpSWlpID0gb28wTyAuIHJlYWQgKCApCiBvbzBPIC4gY2xvc2UgKCApCiBpZiA1MSAtIDUxOiBPMDBvb29vbzAwIC0gb29vT29vT09vME9PIC8gb29vT29vT09vME9PICUgbzBpaTFJCiBPTzAwME9PT28wT28gPSByZSAuIGNvbXBpbGUgKCAnaWQ9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaWkxaUkxaWlJaWkgKQogb09Pb09PTzBvT29vID0gcmUgLiBjb21waWxlICggJ25hbWU9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBJaWkxaUkxaWlJaWkgKQogT28wME8wTyA9IE9PMDAwT09PbzBPbyBbIDAgXSBpZiAoIGxlbiAoIE9PMDAwT09PbzBPbyApID4gMCApIGVsc2UgJ05vbmUnCiBvME8wb29vb29vbzAwID0gb09Pb09PTzBvT29vIFsgMCBdIGlmICggbGVuICggb09Pb09PTzBvT29vICkgPiAwICkgZWxzZSAnJwogaWYgOTggLSA5ODogbzBvbyAqIGkxMUlpaSArIE8wMG9vb29vMDAgKyBPbzAwb28wb08gLSBPMDBvb29vbzAwICUgSWlpCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggSUlpaWlpaWlJaTFJMSApIDoKICB4Ym1jIC4gbG9nICggIiMjIyBGaXJzdCBsb2dpbiBjaGVjayAjIyMiICkKICBpMTFJMUlpSWkgKCBvME8wb29vb29vbzAwICwgTzBPbzAwMG9vTzAwICwgT28wME8wTyApCiAgaWYgMTkgLSAxOTogSUlpaTFJICogaWlJSTExaTFJMUlJaSAvIElJMTFpSWlJSUlpSQogIGlmIDUgLSA1OiBvMGlpMUkKIGVsc2UgOgogIHRyeSA6CiAgIGkxSUkxSWkgPSBvcGVuICggSUlpaWlpaWlJaTFJMSAsIG1vZGUgPSAncicgKQogICBvT29vME9vbyA9IGkxSUkxSWkgLiByZWFkICggKQogICBpMUlJMUlpIC4gY2xvc2UgKCApCiAgIGlmIDEwMCAtIDEwMDogb29vT29vT09vME9PICogbzBpaTFJIC8gb29vME8wTzAwCiAgIG8wMG8wb29vT08wT29PME9PTyA9IHJlIC4gY29tcGlsZSAoICdkPSIoLis/KSInICkgLiBmaW5kYWxsICggb09vbzBPb28gKQogICBPT09vT28wMDBPMG9vID0gcmUgLiBjb21waWxlICggJ2w9IiguKz8pIicgKSAuIGZpbmRhbGwgKCBvT29vME9vbyApCiAgIE9PT29vID0gcmUgLiBjb21waWxlICggJ209IiguKz8pIicgKSAuIGZpbmRhbGwgKCBvT29vME9vbyApCiAgIGlpaWlpMUkxSUlJMSA9IG8wMG8wb29vT08wT29PME9PTyBbIDAgXSBpZiAoIGxlbiAoIG8wMG8wb29vT08wT29PME9PTyApID4gMCApIGVsc2UgJzAnCiAgIGlmIDk3IC0gOTc6IG8wbwogICBpZiBpaWlpaTFJMUlJSTEgIT0gJzAnIDoKICAgIGlpaWlpMUkxSUlJMSA9IGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggaWlpaWkxSTFJSUkxICkKICAgIGlmIDg0IC0gODQ6IE9vMDBvbzBvTyAtIElpaSAuIE9vMDBvbzBvTyArIGkxMUlpaSAuIG9vbzBPME8wMAogICBPb29JaWkxSTFpSSA9IE9PT29PbzAwME8wb28gWyAwIF0gaWYgKCBsZW4gKCBPT09vT28wMDBPMG9vICkgPiAwICkgZWxzZSAnJwogICBPb29JaWkxSTFpSSA9IGJpbmFzY2lpIC4gdW5oZXhsaWZ5ICggT29vSWlpMUkxaUkgKQogICBPMDAwMDBvb29PTyA9IE9PT29vIFsgMCBdIGlmICggbGVuICggT09Pb28gKSA+IDAgKSBlbHNlICcnCiAgIE8wMDAwMG9vb09PID0gYmluYXNjaWkgLiB1bmhleGxpZnkgKCBPMDAwMDBvb29PTyApCiAgZXhjZXB0IDoKICAgb3MgLiByZW1vdmUgKCBJSWlpaWlpaUlpMUkxICkKICBpZiBpbnQgKCBpaWlpaTFJMUlJSTEgKSArIDIwMDAwMDAgPiBpbnQgKCBJaTFJaSAoICkgKSA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIExvZ2luIHN1Y2Nlc3NmdWwgIyMjIiApCiAgIE8wb09PMG8gKCBvME8wb29vb29vbzAwICwgTzBPbzAwMG9vTzAwICwgT28wME8wTyAsIE9vb0lpaTFJMWlJICwgTzAwMDAwb29vT08gKQogIGVsc2UgOgogICB4Ym1jIC4gbG9nICggIiMjIyBDaGVja2luZyBsb2dpbiAjIyMiICkKICAgaTExSTFJaUlpICggbzBPMG9vb29vb28wMCAsIE8wT28wMDBvb08wMCAsIE9vMDBPME8gKQogICBpZiA3IC0gNzogbzBvbyAtIGkxMUlpaSAlIE8wMG9vb29vMDAKICAgaWYgMjQgLSAyNDogbzBvbyAlIE9PTzBPME8wb29vb28gJSBvMG8KZGVmIElpMW9vT08wT09PMDBvICggKSA6CiBPMG9Pb29vb29vb09vMDBPID0gb3MgLiBwYXRoIC4gam9pbiAoIHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoICdzcGVjaWFsOi8vcHJvZmlsZScgLCAnYWRkb25fZGF0YScgKSApICkKIGlmIDczIC0gNzM6IGkxMWlJaWlJaWkgKyBPT08wTzBPMG9vb29vICUgT09PME8wTzBvb29vbwogT29Pb08wME9vT09vID0gWwogKCBPMG9Pb29vb29vb09vMDBPICkgLAogKCBvbzBvME8wMCApICwKICggb3MgLiBwYXRoIC4gam9pbiAoIE9vMG8wMDAwbzBvMCAsICdjYWNoZScgKSApICwKICggb3MgLiBwYXRoIC4gam9pbiAoIE9vMG8wMDAwbzBvMCAsICd0ZW1wJyApICkgLAogKCBvcyAuIHBhdGggLiBqb2luICggJy9wcml2YXRlL3Zhci9tb2JpbGUvTGlicmFyeS9DYWNoZXMvQXBwbGVUVi9WaWRlby8nICwgJ090aGVyJyApICkgLAogKCBvcyAuIHBhdGggLiBqb2luICggJy9wcml2YXRlL3Zhci9tb2JpbGUvTGlicmFyeS9DYWNoZXMvQXBwbGVUVi9WaWRlby8nICwgJ0xvY2FsdXNlcmFjY291bnRuYW1lbnRhbCcgKSApICwKICggb3MgLiBwYXRoIC4gam9pbiAoIG9vMG8wTzAwICwgJ3NjcmlwdC5tb2R1bGUuc2ltcGxlLmRvd25sb2FkZXInICkgKSAsCiAoIG9zIC4gcGF0aCAuIGpvaW4gKCB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCAnc3BlY2lhbDovL3Byb2ZpbGUnICwgJ2FkZG9uX2RhdGEnICwgJ3NjcmlwdC5tb2R1bGUuc2ltcGxlLmRvd25sb2FkZXInICkgKSApICkgLAogKCBvcyAuIHBhdGggLiBqb2luICggb28wbzBPMDAgLCAncGx1Z2luLnZpZGVvLml0dicgLCAnSW1hZ2VzJyApICkgLAogKCBvcyAuIHBhdGggLiBqb2luICggeGJtYyAuIHRyYW5zbGF0ZVBhdGggKCBvcyAuIHBhdGggLiBqb2luICggJ3NwZWNpYWw6Ly9wcm9maWxlJyAsICdhZGRvbl9kYXRhJyAsICdwbHVnaW4udmlkZW8uaXR2JyAsICdJbWFnZXMnICkgKSApICkgXQogaWYgNjQgLSA2NDogSUlJSWlpSUkxMTEKIGZvciBPMG9PMCBpbiBPb09vTzAwT29PT28gOgogIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIE8wb08wICkgYW5kIE8wb08wICE9IG9vMG8wTzAwIGFuZCBPMG9PMCAhPSBPMG9Pb29vb29vb09vMDBPIDoKICAgZm9yIGlpaUkxSWlJICwgT29JSWkxaUkgLCBvTzBPb28wT29vT09vIGluIG9zIC4gd2FsayAoIE8wb08wICkgOgogICAgSWkxMTFJSUlJaWkgPSAwCiAgICBJaTExMUlJSUlpaSArPSBsZW4gKCBvTzBPb28wT29vT09vICkKICAgIGlmIElpMTExSUlJSWlpID4gMCA6CiAgICAgZm9yIE9vMG9PMDAgaW4gb08wT29vME9vb09PbyA6CiAgICAgIHRyeSA6CiAgICAgICBvcyAuIHVubGluayAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlJMUlpSSAsIE9vMG9PMDAgKSApCiAgICAgIGV4Y2VwdCA6CiAgICAgICBwYXNzCiAgICAgZm9yIE9PT09JMWlJMWkxMSBpbiBPb0lJaTFpSSA6CiAgICAgIHRyeSA6CiAgICAgICBzaHV0aWwgLiBybXRyZWUgKCBvcyAuIHBhdGggLiBqb2luICggaWlpSTFJaUkgLCBPT09PSTFpSTFpMTEgKSApCiAgICAgICBwcmludCAiIyMjIFN1Y2Nlc3NmdWxseSBjbGVhcmVkICIgKyBzdHIgKCBJaTExMUlJSUlpaSApICsgIiBmaWxlcyBmcm9tICIgKyBvcyAuIHBhdGggLiBqb2luICggTzBvTzAgLCBPT09PSTFpSTFpMTEgKQogICAgICBleGNlcHQgOgogICAgICAgcHJpbnQgIiMjIyBGYWlsZWQgdG8gd2lwZSBjYWNoZSBpbjogIiArIG9zIC4gcGF0aCAuIGpvaW4gKCBPMG9PMCAsIE9PT09JMWlJMWkxMSApCiAgZWxzZSA6CiAgIGZvciBpaWlJMUlpSSAsIE9vSUlpMWlJICwgb08wT29vME9vb09PbyBpbiBvcyAuIHdhbGsgKCBPMG9PMCApIDoKICAgIGZvciBPT09PSTFpSTFpMTEgaW4gT29JSWkxaUkgOgogICAgIGlmICdDYWNoZScgaW4gT09PT0kxaUkxaTExIG9yICdjYWNoZScgaW4gT09PT0kxaUkxaTExIG9yICdDQUNIRScgaW4gT09PT0kxaUkxaTExIDoKICAgICAgdHJ5IDoKICAgICAgIHNodXRpbCAuIHJtdHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlJMUlpSSAsIE9PT09JMWlJMWkxMSApICkKICAgICAgIHByaW50ICIjIyMgU3VjY2Vzc2Z1bGx5IHdpcGVkICIgKyBvcyAuIHBhdGggLiBqb2luICggTzBvTzAgLCBPT09PSTFpSTFpMTEgKQogICAgICBleGNlcHQgOgogICAgICAgcHJpbnQgIiMjIyBGYWlsZWQgdG8gd2lwZSBjYWNoZSBpbjogIiArIG9zIC4gcGF0aCAuIGpvaW4gKCBPMG9PMCAsIE9PT09JMWlJMWkxMSApCiAgICAgICBpZiA1NSAtIDU1OiBvMG8gLSBvMG8gKyBpMTFJaWkKICAgICAgIGlmIDg3IC0gODc6IElJMSAvIElpaSAuIElJaWkxSSAvIE9vbzAwb09vMG9PbwogdHJ5IDoKICBpMUlpMUlpaUlpMUlJID0gb3MgLiBwYXRoIC4gam9pbiAoIHhibWMgLiB0cmFuc2xhdGVQYXRoICggJ3NwZWNpYWw6Ly9wcm9maWxlL2FkZG9uX2RhdGEvcGx1Z2luLnZpZGVvLmdlbmVzaXMnICkgLCAnY2FjaGUuZGInICkKICBJaUlpMWlpSUkgPSBkYXRhYmFzZSAuIGNvbm5lY3QgKCBpMUlpMUlpaUlpMUlJICkKICBvb08wbzBvID0gSWlJaTFpaUlJIC4gY3Vyc29yICggKQogIG9vTzBvMG8gLiBleGVjdXRlICggIkRST1AgVEFCTEUgSUYgRVhJU1RTIHJlbF9saXN0IiApCiAgb29PMG8wbyAuIGV4ZWN1dGUgKCAiVkFDVVVNIiApCiAgSWlJaTFpaUlJIC4gY29tbWl0ICggKQogIG9vTzBvMG8gLiBleGVjdXRlICggIkRST1AgVEFCTEUgSUYgRVhJU1RTIHJlbF9saWIiICkKICBvb08wbzBvIC4gZXhlY3V0ZSAoICJWQUNVVU0iICkKICBJaUlpMWlpSUkgLiBjb21taXQgKCApCiBleGNlcHQgOgogIHBhc3MKICBpZiA0IC0gNDogTzAwb29vb28wMCAlIG8wb28gKiBvT29PMG8wME9PMCAuIElJMQogIGlmIDk2IC0gOTY6IElpaSAuIGkxMWlJaWlJaWkgLSBPMDBvb29vbzAwIC4gbzAwME8wbwpkZWYgT09vb09vb09Pb08wTyAoIG1vZGUgKSA6CiBpZiB6aXAgPT0gJycgOgogIGkxMSAuIG9rICggJ1BsZWFzZSBzZXQgeW91ciBiYWNrdXAgbG9jYXRpb24gYmVmb3JlIHByb2NlZWRpbmcnICwgJ1lvdSBoYXZlIG5vdCBzZXQgeW91ciBiYWNrdXAgc3RvcmFnZSBmb2xkZXIuXG5QbGVhc2UgdXBkYXRlIHRoZSBhZGRvbiBzZXR0aW5ncyBhbmQgdHJ5IGFnYWluLicgKQogIEkxSWlpSSAuIG9wZW5TZXR0aW5ncyAoIHN5cyAuIGFyZ3YgWyAwIF0gKQogIGkxSTExMWlpMTFJaWkgPSBJMUlpaUkgLiBnZXRTZXR0aW5nICggJ3ppcCcgKQogIGlmIGkxSTExMWlpMTFJaWkgPT0gJycgOgogICBPT29vT29vT09vTzBPICggbW9kZSApCiBPb09vME8wTyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIEkxMWkxICwgJ0NvbW11bml0eV9CdWlsZHMnICwgJ015X0J1aWxkcycgKSApCiBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggT29PbzBPME8gKSA6CiAgb3MgLiBtYWtlZGlycyAoIE9vT28wTzBPICkKIG9PMDAwbzBPbzAwID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICJBQlNPTFVURUxZIENFUlRBSU4/ISEhIiAsICdBcmUgeW91IGFic29sdXRlbHkgY2VydGFpbiB5b3Ugd2FudCB0byB3aXBlPycgLCAnJyAsICdBbGwgYWRkb25zIGFuZCBzZXR0aW5ncyB3aWxsIGJlIGNvbXBsZXRlbHkgd2lwZWQhJyAsIHllc2xhYmVsID0gJ1llcycgLCBub2xhYmVsID0gJ05vJyApCiBpZiAyNSAtIDI1OiBpMTFJaWkKIGlmIG9PMDAwbzBPbzAwID09IDEgOgogIEkxMWlpaTFJaSA9IHhibWMgLiBnZXRTa2luRGlyICggKQogIHhibWMgLiBsb2cgKCAnIyMjIHNraW46ICVzJyAlIEkxMWlpaTFJaSApCiAgaWYgbm90IEkxMWlpaTFJaSBpbiBbICdza2luLmNvbmZsdWVuY2UnICwgJ3NraW4uZXN0dWFyeScgXSA6CiAgIEkxMWlpaTFJaSA9ICdza2luLmNvbmZsdWVuY2UnIGlmIGkxMTExIDwgMTcgZWxzZSAnc2tpbi5lc3R1YXJ5JwogICBza2luU3dpdGNoIC4gc3dhcFNraW5zICggSTExaWlpMUlpICkKICAgb28wb08gPSAwCiAgIHhibWMgLiBzbGVlcCAoIDEwMDAgKQogICB3aGlsZSBub3QgeGJtYyAuIGdldENvbmRWaXNpYmlsaXR5ICggIldpbmRvdy5pc1Zpc2libGUoeWVzbm9kaWFsb2cpIiApIDoKICAgIGlmIG9vMG9PID09IDE1MCA6CiAgICAgYnJlYWsKICAgIG9vMG9PICs9IDEKICAgIHhibWMgLiBzbGVlcCAoIDIwMCApCiAgICBpZiA4MyAtIDgzOiBJSUlJaWlJSTExMSAvIElJMSAqIG9vb09vb09PbzBPTyAuIG8wMDBPMG8gLiBPMDBvb29vbzAwCiAgIGlmIHhibWMgLiBnZXRDb25kVmlzaWJpbGl0eSAoICJXaW5kb3cuaXNWaXNpYmxlKHllc25vZGlhbG9nKSIgKSA6CiAgICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnU2V0Rm9jdXMoMTEpJyApCiAgICB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnQWN0aW9uKFNlbGVjdCknICkKICBpZiBub3QgSTExaWlpMUlpIGluIFsgJ3NraW4uY29uZmx1ZW5jZScgLCAnc2tpbi5lc3R1YXJ5JyBdIDoKICAgaTExIC4gb2sgKCAiQ29tbXVuaXR5IFBvcnRhbCIgLCAiVW5hYmxlIHRvIHJlc2V0IHNraW4gYmFjayB0byBbQ09MT1IgeWVsbG93XSVzWy9DT0xPUl0iICUgSTExaWlpMUlpIFsgNSA6IF0gKQogICByZXR1cm4KICBlbHNlIDoKICAgaWYgNTkgLSA1OTogbzBvIC4gbzBvICogbzAwME8wbyAtIElJSUlpaUlJMTExICUgSWlpCiAgIG9PMDAwbzBPbzAwID0geGJtY2d1aSAuIERpYWxvZyAoICkgLiB5ZXNubyAoICJWRVJZIElNUE9SVEFOVCIgLCAnVGhpcyB3aWxsIGNvbXBsZXRlbHkgd2lwZSB5b3VyIGluc3RhbGwuJyAsICdXb3VsZCB5b3UgbGlrZSB0byBjcmVhdGUgYSBiYWNrdXAgYmVmb3JlIHByb2NlZWRpbmc/JyAsICcnICwgeWVzbGFiZWwgPSAnTm8nICwgbm9sYWJlbCA9ICdZZXMnICkKICAgaWYgb08wMDBvME9vMDAgPT0gMCA6CiAgICBpZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggT29PbzBPME8gKSA6CiAgICAgb3MgLiBtYWtlZGlycyAoIE9vT28wTzBPICkKICAgIE8wTzAgPSBvTzBvb28wMG8wbzAwME9vICggaGVhZGluZyA9ICJFbnRlciBhIG5hbWUgZm9yIHRoaXMgYmFja3VwIiApCiAgICBpZiAoIG5vdCBPME8wICkgOiByZXR1cm4gRmFsc2UgLCAwCiAgICBvT0lJSUkgPSB1cmxsaWIgLiBxdW90ZV9wbHVzICggTzBPMCApCiAgICBvb09PbyA9IHhibWMgLiB0cmFuc2xhdGVQYXRoICggb3MgLiBwYXRoIC4gam9pbiAoIE9vT28wTzBPICwgb09JSUlJICsgJy56aXAnICkgKQogICAgaTFpaWkxSWlpaUkxaTEgPSBbICdwbHVnaW4ucHJvZ3JhbS50b3RhbGluc3RhbGxlcicgLCAncGx1Z2luLnByb2dyYW0udGJzJyBdCiAgICBJSUlpSTFpMSA9IFsgInhibWMubG9nIiAsICJ4Ym1jLm9sZC5sb2ciICwgImtvZGkubG9nIiAsICJrb2RpLm9sZC5sb2ciICwgJy5EU19TdG9yZScgLCAnLnNldHVwX2NvbXBsZXRlJyAsICdYQk1DSGVscGVyLmNvbmYnICwgJy5naXRpZ25vcmUnIF0KICAgIEkxMTFpaWlpaTEgPSAiQ3JlYXRpbmcgZnVsbCBiYWNrdXAgb2YgZXhpc3RpbmcgYnVpbGQiCiAgICBPTzBvb09vT08wT09vID0gIkFyY2hpdmluZy4uLiIKICAgIE9vb09vb29vMDAwMCA9ICIiCiAgICBJMWlpMWkxMWkgPSAiUGxlYXNlIFdhaXQiCiAgICBvMDBPb28wICggT28wbzAwMDBvMG8wICwgb29PT28gLCBJMTExaWlpaWkxICwgT08wb29Pb09PME9PbyAsIE9vb09vb29vMDAwMCAsIEkxaWkxaTExaSAsIGkxaWlpMUlpaWlJMWkxICwgSUlJaUkxaTEgKQogICBJaUlJSWlJMTFpMSAoIE9PT08wT09vTzBPMCApCiAgIG9vb08gKCApCiAgIElJSWlpaUlpMUkxICggMSApCiAgIElJMTExaWlJMUlpMSAoICkKICAgb28wb08wb08wMG9PICggbzAwT08wME9vTyApCiAgIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIG8wICkgOgogICAgb3MgLiByZW1vdmUgKCBvMCApCiAgIGlmIG9zIC4gcGF0aCAuIGV4aXN0cyAoIEkxMUlJMWkgKSA6CiAgICBvcyAuIHJlbW92ZSAoIEkxMUlJMWkgKQogICBpZiBvcyAuIHBhdGggLiBleGlzdHMgKCBJSUlJSSApIDoKICAgIG9zIC4gcmVtb3ZlICggSUlJSUkgKQogIGlmIG1vZGUgIT0gJ0NCJyA6CiAgIElpSUkxICggKQogIHRyeSA6CiAgIG9zIC4gcmVtb3ZlICggbzAgKQogIGV4Y2VwdCA6CiAgIHhibWMgLiBsb2cgKCAiIyMjIEZhaWxlZCB0byByZW1vdmUgc3RhcnR1cC54bWwiICkKICB0cnkgOgogICBvcyAuIHJlbW92ZSAoIElJSUlJICkKICBleGNlcHQgOgogICB4Ym1jIC4gbG9nICggIiMjIyBGYWlsZWQgdG8gcmVtb3ZlIGlkLnhtbCIgKQogZWxzZSA6CiAgcmV0dXJuCiAgaWYgMTAgLSAxMDogbzBvbyAtIE9vbzAwb09vMG9PbyAlIG8waWkxSSAtIElpaSArIG8wb28KICBpZiA4OCAtIDg4OiBJSWlpMUkgJSBpMTFJaWkgKyBvMGlpMUkgKiBJaWkgLyBvMG8gLiBvMG9vCmRlZiBJaUlJSWlJMTFpMSAoIGV4Y2x1ZGVmaWxlcyApIDoKIEkxMSAuIGNyZWF0ZSAoICJXaXBpbmcgRXhpc3RpbmcgQ29udGVudCIgLCAnJyAsICdQbGVhc2Ugd2FpdC4uLicgLCAnJyApCiBmb3IgaWlpSTFJaUkgLCBPb0lJaTFpSSAsIG9PME9vbzBPb29PT28gaW4gb3MgLiB3YWxrICggT28wbzAwMDBvMG8wICwgdG9wZG93biA9IFRydWUgKSA6CiAgT29JSWkxaUkgWyA6IF0gPSBbIE9PT09JMWlJMWkxMSBmb3IgT09PT0kxaUkxaTExIGluIE9vSUlpMWlJIGlmIE9PT09JMWlJMWkxMSBub3QgaW4gZXhjbHVkZWZpbGVzIF0KICBmb3IgT09vMCBpbiBvTzBPb28wT29vT09vIDoKICAgdHJ5IDoKICAgIEkxMSAuIHVwZGF0ZSAoIDAgLCAiUmVtb3ZpbmcgW0NPTE9SPXllbGxvd10iICsgT09vMCArICdbL0NPTE9SXScgLCAnJyAsICdQbGVhc2Ugd2FpdC4uLicgKQogICAgb3MgLiB1bmxpbmsgKCBvcyAuIHBhdGggLiBqb2luICggaWlpSTFJaUkgLCBPT28wICkgKQogICAgb3MgLiByZW1vdmUgKCBvcyAuIHBhdGggLiBqb2luICggaWlpSTFJaUkgLCBPT28wICkgKQogICAgb3MgLiBybWRpciAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlJMUlpSSAsIE9PbzAgKSApCiAgIGV4Y2VwdCA6CiAgICBwYXNzCiAgICBpZiA2NiAtIDY2OiBJSWlpMUkgKiBPb28wMG9PbzBvT28gLiBJSWlpMUkgKiBpMTFpSWlpSWlpICsgbzBvICsgSUlJSWlpSUkxMTEKICAgIGlmIDk0IC0gOTQ6IE8wMG9vb29vMDAgKiBvMG8gLSBJSTEgLiBPMDBvb29vbzAwIC8gbzBpaTFJCmRlZiBvb29PICggKSA6CiBvb29vME9vbzBvb28wID0gWyBPT28wIGZvciBPT28wIGluIG9zIC4gbGlzdGRpciAoIG9PbzBvb29vMDBvICkgaWYgb3MgLiBwYXRoIC4gaXNkaXIgKCBvcyAuIHBhdGggLiBqb2luICggb09vMG9vb28wMG8gLCBPT28wICkgKSBdCiB0cnkgOgogIGZvciBPT28wIGluIG9vb28wT29vMG9vbzAgOgogICB0cnkgOgogICAgaWYgT09vMCBub3QgaW4gbzAwT08wME9vTyA6CiAgICAgSTExIC4gdXBkYXRlICggMCAsICJDbGVhbmluZyBEaXJlY3Rvcnk6IFtDT0xPUj15ZWxsb3ddIiArIE9PbzAgKyAnIFsvQ09MT1JdJyAsICcnICwgJ1BsZWFzZSB3YWl0Li4uJyApCiAgICAgc2h1dGlsIC4gcm10cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIG9PbzBvb29vMDBvICwgT09vMCApICkKICAgZXhjZXB0IDoKICAgIHBhc3MKIGV4Y2VwdCA6CiAgcGFzcwogIGlmIDUwIC0gNTA6IGkxMWlJaWlJaWkgLiBpMTFpSWlpSWlpICogTzAwb29vb28wMCAvIGkxMWlJaWlJaWkgLiBPMDBvb29vbzAwIC0gT29vMDBvT28wb09vCiAgaWYgNzIgLSA3MjogSUlpaTFJIC8gbzBpaTFJIC4gb09vTzBvMDBPTzAKIGZvciBpaWlJMUlpSSAsIE9vSUlpMWlJICwgb08wT29vME9vb09PbyBpbiBvcyAuIHdhbGsgKCBvT28wb29vbzAwbyAsIHRvcGRvd24gPSBUcnVlICkgOgogIE9vSUlpMWlJIFsgOiBdID0gWyBPT09PSTFpSTFpMTEgZm9yIE9PT09JMWlJMWkxMSBpbiBPb0lJaTFpSSBpZiBPT09PSTFpSTFpMTEgbm90IGluIG8wME9PMDBPb08gXQogIGZvciBPT28wIGluIG9PME9vbzBPb29PT28gOgogICB0cnkgOgogICAgSTExIC4gdXBkYXRlICggMCAsICJSZW1vdmluZyBbQ09MT1I9eWVsbG93XSIgKyBPT28wICsgJ1svQ09MT1JdJyAsICcnICwgJ1BsZWFzZSB3YWl0Li4uJyApCiAgICBvcyAuIHVubGluayAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlJMUlpSSAsIE9PbzAgKSApCiAgICBvcyAuIHJlbW92ZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpaWlJMUlpSSAsIE9PbzAgKSApCiAgIGV4Y2VwdCA6CiAgICBwYXNzCiAgICBpZiA3OCAtIDc4OiBJSWlpMUkgLiBpMTFpSWlpSWlpICUgT28wMG9vMG9PICogSUlJSWlpSUkxMTEgKyBvb28wTzBPMDAgLSBJSWlpMUkKICAgIGlmIDUwIC0gNTA6IG9Pb08wbzAwT08wICUgSUlJSWlpSUkxMTEgLSBvMG8gJSBpaUlJMTFpMUkxSUlpIC0gbzBvIC0gbzAwME8wbwpkZWYgSUlJaWlpSWkxSTEgKCBrZWVwcmVwb3MgKSA6CiBmb3IgT09vMCBpbiBvcyAuIGxpc3RkaXIgKCBpMWlpSUlJMTExaWkgKSA6CiAgaWYgbm90IGtlZXByZXBvcyA6CiAgIGlmIE9PbzAgbm90IGluIG8wME9PMDBPb08gYW5kIG5vdCAncmVwbycgaW4gT09vMCA6CiAgICB0cnkgOgogICAgIEkxMSAuIHVwZGF0ZSAoIDAgLCAiUmVtb3ZpbmcgQWRkLW9uOiBbQ09MT1I9eWVsbG93XSIgKyBPT28wICsgJyBbL0NPTE9SXScgLCAnJyAsICdQbGVhc2Ugd2FpdC4uLicgKQogICAgIHNodXRpbCAuIHJtdHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBPT28wICkgKQogICAgZXhjZXB0IDoKICAgICB0cnkgOgogICAgICBvcyAuIHJlbW92ZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBPT28wICkgKQogICAgIGV4Y2VwdCA6CiAgICAgIHBhc3MKICAgICAgaWYgOTkgLSA5OTogT28wMG9vMG9PICogSWlpIC0gTzAwb29vb28wMCAvIE9vT28wbyAuIGkxMUlpaSAlIG8waWkxSQogIGVsc2UgOgogICB0cnkgOgogICAgaWYgT09vMCBub3QgaW4gbzAwT08wME9vTyA6CiAgICAgSTExIC4gdXBkYXRlICggMCAsICJSZW1vdmluZyBBZGQtb246IFtDT0xPUj15ZWxsb3ddIiArIE9PbzAgKyAnIFsvQ09MT1JdJyAsICcnICwgJ1BsZWFzZSB3YWl0Li4uJyApCiAgICAgc2h1dGlsIC4gcm10cmVlICggb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIE9PbzAgKSApCiAgIGV4Y2VwdCA6CiAgICB0cnkgOgogICAgIG9zIC4gcmVtb3ZlICggb3MgLiBwYXRoIC4gam9pbiAoIGkxaWlJSUkxMTFpaSAsIE9PbzAgKSApCiAgICBleGNlcHQgOgogICAgIHBhc3MKICAgICBpZiA2OSAtIDY5OiBPT08wTzBPMG9vb29vIC4gb29vME8wTzAwCiAgICAgaWYgOTYgLSA5NjogT09PME8wTzBvb29vbwpkZWYgSUkxMTFpaUkxSWkxICggKSA6CiBmb3IgT09vMCBpbiBvcyAuIGxpc3RkaXIgKCBvbzBvME8wMCApIDoKICB0cnkgOgogICBJMTEgLiB1cGRhdGUgKCAwICwgIlJlbW92aW5nIEFkZC1vbiBEYXRhOiBbQ09MT1I9eWVsbG93XSIgKyBPT28wICsgJyBbL0NPTE9SXScgLCAnJyAsICdQbGVhc2Ugd2FpdC4uLicgKQogICBzaHV0aWwgLiBybXRyZWUgKCBvcyAuIHBhdGggLiBqb2luICggb28wbzBPMDAgLCBPT28wICkgKQogIGV4Y2VwdCA6CiAgIHRyeSA6CiAgICBvcyAuIHJlbW92ZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBvbzBvME8wMCAsIE9PbzAgKSApCiAgIGV4Y2VwdCA6CiAgICBwYXNzCiAgICBpZiA4OSAtIDg5OiBvT29PMG8wME9PMCAtIGlpSUkxMWkxSTFJSWkKICAgIGlmIDI2IC0gMjY6IGkxMUlpaSAlIGkxMUlpaSAvIE9vbzAwb09vMG9PbyAvIG9vbzBPME8wMApkZWYgb28wb08wb08wMG9PICggZXhjbHVkZWZpbGVzICkgOgogaWlJaWkgPSBbIE9PbzAgZm9yIE9PbzAgaW4gb3MgLiBsaXN0ZGlyICggT28wbzAwMDBvMG8wICkgaWYgb3MgLiBwYXRoIC4gaXNkaXIgKCBvcyAuIHBhdGggLiBqb2luICggT28wbzAwMDBvMG8wICwgT09vMCApICkgXQogdHJ5IDoKICBmb3IgT09vMCBpbiBpaUlpaSA6CiAgIHRyeSA6CiAgICBpZiBPT28wIG5vdCBpbiBleGNsdWRlZmlsZXMgOgogICAgIEkxMSAuIHVwZGF0ZSAoIDAgLCAiQ2xlYW5pbmcgRGlyZWN0b3J5OiBbQ09MT1I9eWVsbG93XSIgKyBPT28wICsgJyBbL0NPTE9SXScgLCAnJyAsICdQbGVhc2Ugd2FpdC4uLicgKQogICAgIHNodXRpbCAuIHJtdHJlZSAoIG9zIC4gcGF0aCAuIGpvaW4gKCBPbzBvMDAwMG8wbzAgLCBPT28wICkgKQogICBleGNlcHQgOgogICAgcGFzcwogZXhjZXB0IDoKICBwYXNzCiAgaWYgOTUgLSA5NTogb09vTzBvMDBPTzAgLyBPbzAwb28wb08gJSBJSWlpMUkgKyBPT08wTzBPMG9vb29vCiAgaWYgNiAtIDY6IE9vMDBvbzBvTwpkZWYgT09vTzBPT08wMCAoIHVybCApIDoKIG9PbzBJMUlpMTFpID0geGJtYyAuIGdldEluZm9MYWJlbCAoICJTeXN0ZW0uQnVpbGRWZXJzaW9uIiApCiBJSUlJSW8wb29Pb08wMDBvTyA9IGZsb2F0ICggb09vMEkxSWkxMWkgWyA6IDQgXSApCiBJSUlpaWkxSSA9IE9vMG8wMDAwbzBvMCAuIHNwbGl0ICggb3MgLiBzZXAgKQogeGJtYyAuIGxvZyAoIHN0ciAoIElJSWlpaTFJICkgKQogaWkxaWlpaTExSWlJMSA9IGxlbiAoIElJSWlpaTFJICkKIE8wT29PMG9vT29vID0gSUlJaWlpMUkgWyBpaTFpaWlpMTFJaUkxIC0gMSBdCiBpZiBPME9vTzBvb09vbyA9PSAnJyA6CiAgTzBPb08wb29Pb28gPSBJSUlpaWkxSSBbIGlpMWlpaWkxMUlpSTEgLSAyIF0KIE8wT29PMG9vT29vID0gTzBPb08wb29Pb28gLiByZXBsYWNlICggJy4nICwgJycgKSAuIHVwcGVyICggKQogaTExIC4gb2sgKCAnWW91IGFyZSBydW5uaW5nOiAlcycgJSBPME9vTzBvb09vbyAsICJZb3VyIHZlcnNpb24gaXM6ICVzIiAlIElJSUlJbzBvb09vTzAwMG9PICkKIGlmIDQzIC0gNDM6IE9PTzBPME8wb29vb28KIGlmIDU3IC0gNTc6IGkxMWlJaWlJaWkgKyBvMG8gJSBpMTFJaWkgLyBJSWlpMUkKaWlJMWlpMSA9IEkxMUkxaSAoICkKb08wb28gPSBOb25lCm8wbzBvb09PbzBvTyA9IE5vbmUKSUkxSUlpaTFJMTFJID0gTm9uZQpJaWlpSTFJaSA9IE5vbmUKaTFJMUlpaWkgPSBOb25lCkkxSUkgPSBOb25lCk9PTzBvT29PME8gPSBOb25lCm9PT29PME9Pb09vTyA9IE5vbmUKT09vMDBPb08gPSBOb25lCm8wMG9PT29PMG9PID0gTm9uZQpPT29Pb09PID0gTm9uZQpPT28wID0gTm9uZQppaTFJaUlJaUkxMTExMUlpID0gTm9uZQpJaTExMWlJaTFpSWkgPSBOb25lCmkxMWlpSTExMTEgPSBOb25lCmlpMTExMWkxMWlpID0gTm9uZQppaUlJaTExaWkxSWkgPSBOb25lCk8wbzBPME9PME9vMDBPTzBvbyA9IE5vbmUKb09JSUlJID0gTm9uZQpJMWlpaTExID0gTm9uZQppMWkxaUlpaUkxSWkxID0gTm9uZQpJSUlJSW8wb29Pb08wMDBvTyA9IE5vbmUKb29PMG9PT29vT28wID0gTm9uZQpPTzBpaWlpaTFpaUlJaWkgPSBOb25lCmlJSUkgPSBOb25lCmkxMWlJMUkxSTExSUkgPSAnbWFpbnRlbmFuY2UnCmlmIDcwIC0gNzA6IElJaWkxSSAuIGkxMUlpaSAqIG9vb09vb09PbzBPTwp0cnkgOgogb08wb28gPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaUkxaWkxIFsgImFkZG9uX2lkIiBdICkKZXhjZXB0IDoKIHBhc3MKdHJ5IDoKIG9PTzAwbzBPMCA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpSTFpaTEgWyAiYWR1bHQiIF0gKQpleGNlcHQgOgogcGFzcwp0cnkgOgogbzBvMG9vT09vMG9PID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlJMWlpMSBbICJhcnRwYWNrIiBdICkKZXhjZXB0IDoKIHBhc3MKdHJ5IDoKIElJMUlJaWkxSTExSSA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpSTFpaTEgWyAiYXVkaW9hZGRvbnMiIF0gKQpleGNlcHQgOgogcGFzcwp0cnkgOgogSWlpaUkxSWkgPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaUkxaWkxIFsgImF1dGhvciIgXSApCmV4Y2VwdCA6CiBwYXNzCnRyeSA6CiBpMUkxSWlpaSA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpSTFpaTEgWyAiYnVpbGRuYW1lIiBdICkKZXhjZXB0IDoKIHBhc3MKdHJ5IDoKIEkxSUkgPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaUkxaWkxIFsgImRhdGFfcGF0aCIgXSApCmV4Y2VwdCA6CiBwYXNzCnRyeSA6CiBPT08wb09vTzBPID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlJMWlpMSBbICJkZXNjcmlwdGlvbiIgXSApCmV4Y2VwdCA6CiBwYXNzCnRyeSA6CiBvT09vTzBPT29Pb08gPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaUkxaWkxIFsgImZhbmFydCIgXSApCmV4Y2VwdCA6CiBwYXNzCnRyeSA6CiBPT28wME9vTyA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpSTFpaTEgWyAiZm9ydW0iIF0gKQpleGNlcHQgOgogcGFzcwp0cnkgOgogaUlJaWkxaWlpSWlpSSA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpSTFpaTEgWyAiZ3Vpc2V0dGluZ3NsaW5rIiBdICkKZXhjZXB0IDoKIHBhc3MKdHJ5IDoKIG8wMG9PT29PMG9PID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlJMWlpMSBbICJpY29uaW1hZ2UiIF0gKQpleGNlcHQgOgogcGFzcwp0cnkgOgogT09vT29PTyA9IHN0ciAoIGlpSTFpaTEgWyAibW9kZSIgXSApCmV4Y2VwdCA6CiBwYXNzCnRyeSA6CiBPT28wID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlJMWlpMSBbICJuYW1lIiBdICkKZXhjZXB0IDoKIHBhc3MKdHJ5IDoKIE8wT09vID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlJMWlpMSBbICJwaWN0dXJlYWRkb25zIiBdICkKZXhjZXB0IDoKIHBhc3MKdHJ5IDoKIGlpMUlpSUlpSTExMTExSWkgPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaUkxaWkxIFsgInByb2dyYW1hZGRvbnMiIF0gKQpleGNlcHQgOgogcGFzcwp0cnkgOgogSWkxMTFpSWkxaUlpID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlJMWlpMSBbICJwcm92aWRlcl9uYW1lIiBdICkKZXhjZXB0IDoKIHBhc3MKdHJ5IDoKIGlpMTExMWkxMWlpID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlJMWlpMSBbICJyZXBvX2xpbmsiIF0gKQpleGNlcHQgOgogcGFzcwp0cnkgOgogaTExaWlJMTExMSA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpSTFpaTEgWyAicmVwb19pZCIgXSApCmV4Y2VwdCA6CiBwYXNzCnRyeSA6CiBpaUlJaTExaWkxSWkgPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaUkxaWkxIFsgInNraW5zIiBdICkKZXhjZXB0IDoKIHBhc3MKdHJ5IDoKIE8wbzBPME9PME9vMDBPTzBvbyA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpSTFpaTEgWyAic291cmNlcyIgXSApCmV4Y2VwdCA6CiBwYXNzCnRyeSA6CiBvT0lJSUkgPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaUkxaWkxIFsgInRpdGxlIiBdICkKZXhjZXB0IDoKIHBhc3MKdHJ5IDoKIEkxaWlpMTEgPSB1cmxsaWIgLiB1bnF1b3RlX3BsdXMgKCBpaUkxaWkxIFsgInVwZGF0ZWQiIF0gKQpleGNlcHQgOgogcGFzcwp0cnkgOgogaTFpMWlJaWlJMUlpMSA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpSTFpaTEgWyAidXJsIiBdICkKZXhjZXB0IDoKIHBhc3MKdHJ5IDoKIElJSUlJbzBvb09vTzAwMG9PID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlJMWlpMSBbICJ2ZXJzaW9uIiBdICkKZXhjZXB0IDoKIHBhc3MKdHJ5IDoKIG9vTzBvT09vb09vMCA9IHVybGxpYiAuIHVucXVvdGVfcGx1cyAoIGlpSTFpaTEgWyAidmlkZW8iIF0gKQpleGNlcHQgOgogcGFzcwp0cnkgOgogT08waWlpaWkxaWlJSWlpID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlJMWlpMSBbICJ2aWRlb2FkZG9ucyIgXSApCmV4Y2VwdCA6CiBwYXNzCnRyeSA6CiBpSUlJID0gdXJsbGliIC4gdW5xdW90ZV9wbHVzICggaWlJMWlpMSBbICJ6aXBfbGluayIgXSApCmV4Y2VwdCA6CiBwYXNzCiBpZiA0NSAtIDQ1OiBvMG9vICogT29vMDBvT28wb09vICogSWlpIC0gSUkxMWlJaUlJSWlJICUgb29vT29vT09vME9PIC0gaWlJSTExaTFJMUlJaQppZiBub3Qgb3MgLiBwYXRoIC4gZXhpc3RzICggSUlJaWkxSUkxSUkgKSA6CiBvcyAuIG1ha2VkaXJzICggSUlJaWkxSUkxSUkgKQogaWYgNCAtIDQ6IG8waWkxSSAuIElpaSAtIElJaWkxSSAvIE9vMDBvbzBvTyAvIG8wMDBPMG8gJSBvMDAwTzBvCmlmIG5vdCBvcyAuIHBhdGggLiBleGlzdHMgKCBvMCApIDoKIElJSUlJaUkxMUlpID0gb3BlbiAoIG8wICwgbW9kZSA9ICd3KycgKQogSUlJSUlpSTExSWkgLiB3cml0ZSAoICdkYXRlPSIwMTAxMTAwMSJcbnZlcnNpb249IjAuMCInICkKIElJSUlJaUkxMUlpIC4gY2xvc2UgKCApCiBpZiA0MiAtIDQyOiBJSTEgKyBPT08wTzBPMG9vb29vIC4gbzBvbyAlIG8wbyAvIGlpSUkxMWkxSTFJSWkKaWYgbm90IG9zIC4gcGF0aCAuIGV4aXN0cyAoIElJSUlJICkgOgogSUlJSUlpSTExSWkgPSBvcGVuICggSUlJSUkgLCBtb2RlID0gJ3crJyApCiBJSUlJSWlJMTFJaSAuIHdyaXRlICggJ2lkPSJOb25lIlxubmFtZT0iTm9uZSInICkKIElJSUlJaUkxMUlpIC4gY29udGVudGxvc2UgKCApCiBpZiAzNiAtIDM2OiBpMTFJaWkgLyBPb28wMG9PbzBvT28gLSBvb28wTzBPMDAgLyBJSUlJaWlJSTExMQpJaUlJSWkxID0gYmluYXNjaWkgLiB1bmhleGxpZnkgKCAnNjE2NDY0NmY2ZTJlNzg2ZDZjJyApCkkxMTExSUlJMTExaWkgPSB4Ym1jIC4gdHJhbnNsYXRlUGF0aCAoIG9zIC4gcGF0aCAuIGpvaW4gKCBpMWlpSUlJMTExaWkgLCBPTzBvICwgSWlJSUlpMSApICkKaTFJMTExSWkxSSA9IG9wZW4gKCBJMTExMUlJSTExMWlpICwgbW9kZSA9ICdyJyApCm9PbzBPID0gZmlsZSAuIHJlYWQgKCBpMUkxMTFJaTFJICkKZmlsZSAuIGNsb3NlICggaTFJMTExSWkxSSApCm9vMDAwb28wb09vMCA9IHJlIC4gY29tcGlsZSAoICc8cmVmPiguKz8pPC9yZWY+JyApIC4gZmluZGFsbCAoIG9PbzBPICkKSUlpTzAgPSBvbzAwMG9vMG9PbzAgWyAwIF0gaWYgKCBsZW4gKCBvbzAwMG9vMG9PbzAgKSA+IDAgKSBlbHNlICcnCmkxSTFpaTFpSTEgPSBoYXNobGliIC4gbWQ1ICggb3BlbiAoIE8wMDBPTzAgLCAncmInICkgLiByZWFkICggKSApIC4gaGV4ZGlnZXN0ICggKQppZiBJSWlPMCAhPSBpMUkxaWkxaUkxIDoKIG8wbzBPME8wMG9PT28gPSBvcGVuICggTzBPb08wMDBPME9PICwgbW9kZSA9ICdyJyApCiBvT28wTyA9IGZpbGUgLiByZWFkICggbzBvME8wTzAwb09PbyApCiBmaWxlIC4gY2xvc2UgKCBvMG8wTzBPMDBvT09vICkKIG9vME8wID0gb3BlbiAoIE8wMDBPTzAgLCBtb2RlID0gJ3crJyApCiBvbzBPMCAuIHdyaXRlICggb09vME8gKQogb28wTzAgLiBjbG9zZSAoICkKIGlmIDYzIC0gNjM6IE9PTzBPME8wb29vb28gLiBPb09vMG8gLyBPb09vMG8gLyBJSWlpMUkgKyBJSTExaUlpSUlJaUkgLiBvMG8KaWYgT09vT29PTyA9PSBOb25lIDogbzAwb29vME8gKCApCmVsaWYgT09vT29PTyA9PSAnQVNDSUlfQ2hlY2snIDogSWlvMDAgKCApCmVsaWYgT09vT29PTyA9PSAnYWRkb25fZmluYWxfbWVudScgOiBvT29PMDBPMCAoIGkxaTFpSWlpSTFJaTEgKQplbGlmIE9Pb09vT08gPT0gJ2FkZG9uX2NhdGVnb3JpZXMnIDogT29vT28wb29vICggaTFpMWlJaWlJMUlpMSApCmVsaWYgT09vT29PTyA9PSAnYWRkb25fY291bnRyaWVzJyA6IElpSUkxMTFpMWkxMSAoIGkxaTFpSWlpSTFJaTEgKQplbGlmIE9Pb09vT08gPT0gJ2FkZG9uX2dlbnJlcycgOiBPbzAwT09vMDBPICggaTFpMWlJaWlJMUlpMSApCmVsaWYgT09vT29PTyA9PSAnYWRkb25faW5zdGFsbCcgOiBPb29PT09vMCAoIE9PbzAgLCBpSUlJICwgaWkxMTExaTExaWkgLCBpMTFpaUkxMTExICwgb08wb28gLCBJaTExMWlJaTFpSWkgLCBPT28wME9vTyAsIEkxSUkgKQplbGlmIE9Pb09vT08gPT0gJ2FkZG9uX2luc3RhbGxfemVybycgOiBvb09PT09vMCAoIE9PbzAgLCBpSUlJICwgaWkxMTExaTExaWkgLCBpMTFpaUkxMTExICwgb08wb28gLCBJaTExMWlJaTFpSWkgLCBPT28wME9vTyAsIEkxSUkgKQplbGlmIE9Pb09vT08gPT0gJ2FkZG9uX2xvb3AnIDogb29vMDAwb09PICggKQplbGlmIE9Pb09vT08gPT0gJ2FkZG9uX3JlbW92YWxfbWVudScgOiBvb09PT28gKCApCmVsaWYgT09vT29PTyA9PSAnYWRkb25tZW51JyA6IElpSWlJaTFJMSAoIGkxaTFpSWlpSTFJaTEgKQplbGlmIE9Pb09vT08gPT0gJ2FkZG9uX3NldHRpbmdzJyA6IEkxMW9PT29vbyAoICkKZWxpZiBPT29Pb09PID09ICdhZHVsdF9maWx0ZXInIDogSTFJSUkxSUkxSTExICggaTFpMWlJaWlJMUlpMSApCmVsaWYgT09vT29PTyA9PSAnYXBwX2luc3RhbGxlcicgOiBpbnN0YWxsYXBwcyAuIElOREVYMSAoICkKZWxpZiBPT29Pb09PID09ICdiYWNrdXAnIDogQkFDS1VQICggKQplbGlmIE9Pb09vT08gPT0gJ2JhY2t1cF9vcHRpb24nIDogaTFpICggKQplbGlmIE9Pb09vT08gPT0gJ2JhY2t1cF9yZXN0b3JlJyA6IElpaUlJaTEgKCApCmVsaWYgT09vT29PTyA9PSAnYnJvd3NlX3JlcG9zJyA6IG9vTzAwbyAoICkKZWxpZiBPT29Pb09PID09ICdDQl9NZW51JyA6IG9PT29PME8gKCBpMWkxaUlpaUkxSWkxICkKZWxpZiBPT29Pb09PID09ICdjaGVja19zdG9yYWdlJyA6IGNoZWNrUGF0aCAuIGNoZWNrICggaTExaUkxSTFJMTFJSSApCmVsaWYgT09vT29PTyA9PSAnY2hlY2tfdXBkYXRlcycgOiBJMTFpaTFJSWlJaSAoICkKZWxpZiBPT29Pb09PID09ICdjbGVhcl9jYWNoZScgOiBPME9vT09vb08wTyAoICkKZWxpZiBPT29Pb09PID09ICdjcmVhdGVfa2V5d29yZCcgOiBpaW8wME8wbzAwb28gKCBpMWkxaUlpaUkxSWkxICkKZWxpZiBPT29Pb09PID09ICdjb21tdW5pdHlfYmFja3VwJyA6IE9PT09PMDAwb28wICggKQplbGlmIE9Pb09vT08gPT0gJ2NvbW11bml0eV9iYWNrdXBfMicgOiBJMUlJSWkxaSAoICkKZWxpZiBPT29Pb09PID09ICdjb21tdW5pdHlfbWVudScgOiBPME9PT09PTzBvb08gKCBpMWkxaUlpaUkxSWkxICwgb29PMG9PT29vT28wICkKZWxpZiBPT29Pb09PID09ICdjb3VudHJpZXMnIDogSUkxMUlJMUkgKCBpMWkxaUlpaUkxSWkxICkKZWxpZiBPT29Pb09PID09ICdkZXNjcmlwdGlvbicgOiBvMDBvMCAoIE9PbzAgLCBpMWkxaUlpaUkxSWkxICwgaTFJMUlpaWkgLCBJaWlpSTFJaSAsIElJSUlJbzBvb09vTzAwMG9PICwgT09PMG9Pb08wTyAsIEkxaWlpMTEgLCBpaUlJaTExaWkxSWkgLCBPTzBpaWlpaTFpaUlJaWkgLCBJSTFJSWlpMUkxMUkgLCBpaTFJaUlJaUkxMTExMUlpICwgTzBPT28gLCBPMG8wTzBPTzBPbzAwT08wb28gLCBvT08wMG8wTzAgKQplbGlmIE9Pb09vT08gPT0gJ2RlbGV0ZV9wYXRoJyA6IE9Pb09vTyAoIGkxaTFpSWlpSTFJaTEgKQplbGlmIE9Pb09vT08gPT0gJ2RlbGV0ZV9wcm9maWxlJyA6IGlpSUlpSTEgKCBpMWkxaUlpaUkxSWkxICkKZWxpZiBPT29Pb09PID09ICdlbmFibGVhZGRvbnMnIDogaTFpaWlpaWkxICggKQplbGlmIE9Pb09vT08gPT0gJ2ZpeF9zcGVjaWFsJyA6IE9vb08wMG9vME8wICggaTFpMWlJaWlJMUlpMSApCmVsaWYgT09vT29PTyA9PSAnZnVsbF9iYWNrdXAnIDogSWlpaUkxMSAoICkKZWxpZiBPT29Pb09PID09ICdmdWxsX2NsZWFuJyA6IGkxMWlpICggKQplbGlmIE9Pb09vT08gPT0gJ2dlbnJlcycgOiBvb29PMG9vbyAoIGkxaTFpSWlpSTFJaTEgKQplbGlmIE9Pb09vT08gPT0gJ2dvdGhhbScgOiBJSWkxSTFpSUlpaUlJMTFpMUkxICggKQplbGlmIE9Pb09vT08gPT0gJ2dyYWJfYWRkb25zJyA6IG9vb09PMDBvbzAgKCBpMWkxaUlpaUkxSWkxICkKZWxpZiBPT29Pb09PID09ICdncmFiX2J1aWxkcycgOiBPTzBvT28gKCBpMWkxaUlpaUkxSWkxICkKZWxpZiBPT29Pb09PID09ICdndWlzZXR0aW5nc2ZpeCcgOiBJMTExSTFpaWkxMSAoIGkxaTFpSWlpSTFJaTEgLCBsb2NhbCApCmVsaWYgT09vT29PTyA9PSAnaGVsaXgnIDogSTFJSUkxSTFJaUkgKCApCmVsaWYgT09vT29PTyA9PSAnaGlkZV9wYXNzd29yZHMnIDogaTFPb29PMDBvTzAwbyAoICkKZWxpZiBPT29Pb09PID09ICdpcGNoZWNrJyA6IGkxSWlJaWlpaWkxMSAoICkKZWxpZiBPT29Pb09PID09ICdpbnN0YWxsX2Zyb21femlwJyA6IE8wME8gKCApCmVsaWYgT09vT29PTyA9PSAnaW5zdHJ1Y3Rpb25zJyA6IEluc3RydWN0aW9ucyAoICkKZWxpZiBPT29Pb09PID09ICdpbnN0cnVjdGlvbnNfMScgOiBvbzBvT29vICggKQplbGlmIE9Pb09vT08gPT0gJ2luc3RydWN0aW9uc18yJyA6IG9PT28wTzBPbyAoICkKZWxpZiBPT29Pb09PID09ICdpbnN0cnVjdGlvbnNfMycgOiBpSWkxaTFJMUkgKCApCmVsaWYgT09vT29PTyA9PSAnaW5zdHJ1Y3Rpb25zXzQnIDogTzBPMG8wbzBvbzBPICggKQplbGlmIE9Pb09vT08gPT0gJ2luc3RydWN0aW9uc181JyA6IEkxaWkgKCApCmVsaWYgT09vT29PTyA9PSAnaW5zdHJ1Y3Rpb25zXzYnIDogSW5zdHJ1Y3Rpb25zXzYgKCApCmVsaWYgT09vT29PTyA9PSAna2V5d29yZHMnIDogaTFJMWlpaTFJMTFJSSAoIGkxaTFpSWlpSTFJaTEgKQplbGlmIE9Pb09vT08gPT0gJ2tpbGxfeGJtYycgOiBJaUlJMSAoICkKZWxpZiBPT29Pb09PID09ICdrb2RpX3NldHRpbmdzJyA6IG8wME9vT28wICggKQplbGlmIE9Pb09vT08gPT0gJ2xvY2FsX2JhY2t1cCcgOiBvT09PICggKQplbGlmIE9Pb09vT08gPT0gJ0xvY2FsR1VJRGlhbG9nJyA6IG9PTzBvMG8wICggKQplbGlmIE9Pb09vT08gPT0gJ2xvZycgOiBPMDBPTzBvTyAoICkKZWxpZiBPT29Pb09PID09ICdsb2dpbl9jaGVjaycgOiBvb0kxMTExICggKQplbGlmIE9Pb09vT08gPT0gJ21hbnVhbF9zZWFyY2gnIDogaUlpMWkxMTFpaTFJSTExaWkgKCBpMWkxaUlpaUkxSWkxICkKZWxpZiBPT29Pb09PID09ICduYW5fbWVudScgOiBvb0kxICggKQplbGlmIE9Pb09vT08gPT0gJ25ld3Nfcm9vdF9tZW51JyA6IE5ld3NfUm9vdF9NZW51ICggaTFpMWlJaWlJMUlpMSApCmVsaWYgT09vT29PTyA9PSAnbmV3c19tZW51JyA6IE5ld3NfTWVudSAoIGkxaTFpSWlpSTFJaTEgKQplbGlmIE9Pb09vT08gPT0gJ29wZW5fc3lzdGVtX2luZm8nIDogb08wT09PICggKQplbGlmIE9Pb09vT08gPT0gJ29wZW5fZmlsZW1hbmFnZXInIDogaUlpSUlJICggKQplbGlmIE9Pb09vT08gPT0gJ29wZW5lbGVjX2JhY2t1cCcgOiBJMWkxMWkgKCApCmVsaWYgT09vT29PTyA9PSAnb3BlbmVsZWNfc2V0dGluZ3MnIDogaTFpSWlJSTEgKCApCmVsaWYgT09vT29PTyA9PSAncGxheV92aWRlbycgOiB5dCAuIFBsYXlWaWRlbyAoIGkxaTFpSWlpSTFJaTEgKQplbGlmIE9Pb09vT08gPT0gJ3JlZ2lzdGVyJyA6IE8wMDBvICggKQplbGlmIE9Pb09vT08gPT0gJ3JlbW92ZV9hZGRvbl9kYXRhJyA6IGkxMWkxSWlJaSAoICkKZWxpZiBPT29Pb09PID09ICdyZW1vdmVfYWRkb25zJyA6IG9PME9vME8wICggaTFpMWlJaWlJMUlpMSApCmVsaWYgT09vT29PTyA9PSAncmVtb3ZlX2J1aWxkJyA6IElJMUlpSTExSTEgKCApCmVsaWYgT09vT29PTyA9PSAncmVtb3ZlX2NyYXNoX2xvZ3MnIDogT09PT29vTzBvT29PICggKQplbGlmIE9Pb09vT08gPT0gJ3JlbW92ZV9uYWcnIDogT09vME9Pb28wMCAoICkKZWxpZiBPT29Pb09PID09ICdyZW1vdmVfcGFja2FnZXMnIDogSUlpSTFJaUkxaUlpMSAoICkKZWxpZiBPT29Pb09PID09ICdyZW1vdmVfdGV4dHVyZXMnIDogT29Pb08wb29vb08wICggKQplbGlmIE9Pb09vT08gPT0gJ3Jlc3RvcmUnIDogUkVTVE9SRSAoICkKZWxpZiBPT29Pb09PID09ICdyZXN0b3JlX2JhY2t1cCcgOiBpMUlPME9vTzBvICggT09vMCAsIGkxaTFpSWlpSTFJaTEgLCBPT08wb09vTzBPICkKZWxpZiBPT29Pb09PID09ICdyZXN0b3JlX2NvbW11bml0eScgOiBPb08wMG9vb28wbyAoIE9PbzAgLCBpMWkxaUlpaUkxSWkxICwgb29PMG9PT29vT28wICwgT09PMG9Pb08wTyAsIGlpSUlpMTFpaTFJaSAsIGlJSWlpMWlpaUlpaUkgLCBvMG8wb29PT28wb08gKQplbGlmIE9Pb09vT08gPT0gJ3Jlc3RvcmVfbG9jYWxfQ0InIDogT29vbzBvMG9PICggaTFpMWlJaWlJMUlpMSApCmVsaWYgT09vT29PTyA9PSAncmVzdG9yZV9sb2NhbF9ndWknIDogT29PbzAwb09vbzBvTyAoICkKZWxpZiBPT29Pb09PID09ICdyZXN0b3JlX2xvY2FsX09FJyA6IEkxaTExMUlJICggKQplbGlmIE9Pb09vT08gPT0gJ3Jlc3RvcmVfb3BlbmVsZWMnIDogSUlpICggT09vMCAsIGkxaTFpSWlpSTFJaTEgLCBvb08wb09Pb29PbzAgKQplbGlmIE9Pb09vT08gPT0gJ3Jlc3RvcmVfb3B0aW9uJyA6IE8wT09vMDBPTyAoICkKZWxpZiBPT29Pb09PID09ICdyZXN0b3JlX3ppcCcgOiBJaUkxaTEgKCBpMWkxaUlpaUkxSWkxICkKZWxpZiBPT29Pb09PID09ICdydW5fYWRkb24nIDogT29vMG9PT08gKCBpMWkxaUlpaUkxSWkxICkKZWxpZiBPT29Pb09PID09ICdydW50ZXN0JyA6IHNwZWVkdGVzdCAuIHJ1bnRlc3QgKCBpMWkxaUlpaUkxSWkxICkKZWxpZiBPT29Pb09PID09ICdzZWFyY2hfYWRkb25zJyA6IGkxSTFJaWlJSUlpaUkgKCBpMWkxaUlpaUkxSWkxICkKZWxpZiBPT29Pb09PID09ICdzZWFyY2hfYnVpbGRzJyA6IGkxMWlpaWlpSWkxICggaTFpMWlJaWlJMUlpMSApCmVsaWYgT09vT29PTyA9PSAnc2hvd2luZm8nIDogT08wMG9PTyAoIGkxaTFpSWlpSTFJaTEgKQplbGlmIE9Pb09vT08gPT0gJ3Nob3dpbmZvMicgOiBPT09PMDBvTyAoIGkxaTFpSWlpSTFJaTEgKQplbGlmIE9Pb09vT08gPT0gJ1NvcnRCeScgOiBPMG9vTzAgKCBCdWlsZFVSTCAsIHR5cGUgKQplbGlmIE9Pb09vT08gPT0gJ3NwZWVkX2luc3RydWN0aW9ucycgOiBvT08wb09vb29vTyAoICkKZWxpZiBPT29Pb09PID09ICdzcGVlZHRlc3RfbWVudScgOiBJMTExSTEgKCApCmVsaWYgT09vT29PTyA9PSAnc3dpdGNoX3Byb2ZpbGVfbWVudScgOiBvMDAwb09PTyAoIGkxaTFpSWlpSTFJaTEgKQplbGlmIE9Pb09vT08gPT0gJ3N3aXRjaF9wcm9maWxlJyA6IGkxaUkxMUlpSUkgKCBpMWkxaUlpaUkxSWkxICkKZWxpZiBPT29Pb09PID09ICd0ZXh0X2d1aWRlJyA6IG9Pb29vTzBPMG9PTyAoIGkxaTFpSWlpSTFJaTEgKQplbGlmIE9Pb09vT08gPT0gJ3RvZ2dsZWFkZG9uJyA6IG9PMG9PTzAwMCAsIEkxaUlJMUlJMUkxaWkgPSBpMWkxaUlpaUkxSWkxIC4gc3BsaXQgKCAnW10nICkgOyBPMDBvME9PME8gKCBvTzBvT08wMDAgLCBJMWlJSTFJSTFJMWlpICkgOyB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnQ29udGFpbmVyLlJlZnJlc2gnICkKZWxpZiBPT29Pb09PID09ICd0b29scycgOiBvbzAwb28gKCApCmVsaWYgT09vT29PTyA9PSAndG9vbHNfYWRkb25zJyA6IElpaUlJaUlpaSAoICkKZWxpZiBPT29Pb09PID09ICd0b29sc19jbGVhbicgOiBPTzBPT09PT09vbyAoICkKZWxpZiBPT29Pb09PID09ICd0b29sc19taXNjJyA6IE9PT08wMDAwICggKQplbGlmIE9Pb09vT08gPT0gJ3R1dG9yaWFsX3Jvb3RfbWVudScgOiB4Ym1jIC4gZXhlY3V0ZWJ1aWx0aW4gKCAnQWN0aXZhdGVXaW5kb3coVmlkZW9zLCBwbHVnaW46Ly9wbHVnaW4udmlkZW8ubmFudHV0cywgcmV0dXJuKScgKQplbGlmIE9Pb09vT08gPT0gJ3VuaGlkZV9wYXNzd29yZHMnIDogaUkxMWkxSUkgKCApCmVsaWYgT09vT29PTyA9PSAndXBkYXRlJyA6IE9vT09vME9Pb08gKCApCmVsaWYgT09vT29PTyA9PSAndXBkYXRlX2NvbW11bml0eScgOiBPME9vT09vMG8gKCBPT28wICwgaTFpMWlJaWlJMUlpMSAsIG9vTzBvT09vb09vMCAsIE9PTzBvT29PME8gLCBpaUlJaTExaWkxSWkgLCBpSUlpaTFpaWlJaWlJICwgbzBvMG9vT09vMG9PICkKZWxpZiBPT29Pb09PID09ICd1cGxvYWRsb2cnIDogaWlJaWlJaTFpaWlJaSAoICkKZWxpZiBPT29Pb09PID09ICd1c2VyX2luZm8nIDogaWlpSWlpaTExaTFpICggKQplbGlmIE9Pb09vT08gPT0gJ3hibWNfbWVudScgOiBYQk1DX01lbnUgKCBpMWkxaUlpaUkxSWkxICkKZWxpZiBPT29Pb09PID09ICd4Ym1jdmVyc2lvbicgOiBPT29PME9PTzAwICggaTFpMWlJaWlJMUlpMSApCmVsaWYgT09vT29PTyA9PSAnd2lwZV94Ym1jJyA6IE9Pb29Pb29PT29PME8gKCBPT29Pb09PICkKeGJtY3BsdWdpbiAuIGVuZE9mRGlyZWN0b3J5ICggaW50ICggc3lzIC4gYXJndiBbIDEgXSApICkgIyBkZDY3OGZhYWU5YWMxNjdiYzgzYWJmNzhlNWNiMmYzZjA2ODhkM2EzCg==')